Commit 474a56d2 authored by Cole Neubauer's avatar Cole Neubauer
Browse files

Users will now be able to search ImageFileList Fixes #1556

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/trunk@8015 41f8697f-d340-4b68-9986-7bafba869bb8
parent 1eb5801a
Loading
Loading
Loading
Loading
+78 −1
Original line number Diff line number Diff line
@@ -7,13 +7,16 @@
#include <QContextMenuEvent>
#include <QDebug>
#include <QFileDialog>
#include <QInputDialog>
#include <QHBoxLayout>
#include <QLabel>
#include <QMenu>
#include <QPoint>
#include <QPushButton>
#include <QScrollArea>
#include <QSettings>
#include <QSize>
#include <QToolBar>
#include <QVBoxLayout>
#include <QXmlStreamWriter>

@@ -40,6 +43,7 @@ namespace Isis {
   */
  ImageFileListWidget::ImageFileListWidget(Directory *directory,
                                           QWidget *parent) : QWidget(parent) {
    QWidget *treeWidget = new QWidget();
    m_directory = directory;
    QHBoxLayout *layout = new QHBoxLayout();

@@ -55,10 +59,35 @@ namespace Isis {
        "files at once. Finally, you can sort your files by any of the visible "
        "columns (use the view menu to show/hide columns of data).");

    setLayout(layout);
    treeWidget->setLayout(layout);

    m_progress = new ProgressBar;
    m_progress->setVisible(false);

    m_searchToolbar = new QToolBar("Search Tool", this);
    m_searchToolbar->setObjectName("Search Tool");
    m_searchToolbar->setWhatsThis("This contains all the fields for searching the active file list");

    m_searchLineEdit = new QLineEdit();
    QPushButton *okButton = new QPushButton("Search");
    connect(okButton, SIGNAL(clicked()), this, SLOT(filterFileList()));
    QPushButton *clearButton = new QPushButton("Clear");
    connect(clearButton, SIGNAL(clicked()), this, SLOT(clear()));
    QHBoxLayout *actionLayout = new QHBoxLayout();
    m_fileCount = new QLabel("File Matches: 0");
    actionLayout->addWidget(m_searchLineEdit);
    actionLayout->addWidget(okButton);
    actionLayout->addWidget(clearButton);
    actionLayout->addWidget(m_fileCount);
    actionLayout->addStretch(1);
    actionLayout->setMargin(0);
    QWidget *toolBarWidget = new QWidget;
    toolBarWidget->setLayout(actionLayout);
    m_searchToolbar->addWidget(toolBarWidget);
    QVBoxLayout *fileListWidgetLayout = new QVBoxLayout();
    fileListWidgetLayout->addWidget(m_searchToolbar);
    fileListWidgetLayout->addWidget(treeWidget);
    setLayout(fileListWidgetLayout);
  }

  /**
@@ -830,4 +859,52 @@ namespace Isis {

    return result;
  }


  void ImageFileListWidget::filterFileList() {
    QString filterString = m_searchLineEdit->text();
    int numMatches = 0;

    for (int i = 0; i < m_tree->topLevelItemCount(); i++) {
      QTreeWidgetItem *group = m_tree->topLevelItem(i);

      for (int j = 0; j < group->childCount(); j++) {
        QTreeWidgetItem *item = group->child(j);
        group->setSelected(false);
        if (item->type() == QTreeWidgetItem::UserType) {

          ImageTreeWidgetItem *cubeItem = (ImageTreeWidgetItem *)item;
          if (cubeItem->image()->fileName().contains(filterString)){
            cubeItem->setSelected(true);
            m_tree->scrollToItem(cubeItem);
            numMatches++;
          }
          else {
            cubeItem->setSelected(false);
          }
        }
      }
    }
    m_fileCount->setText("File Matches: " + QString::number(numMatches));
  }


  void ImageFileListWidget::clear() {
    m_searchLineEdit->setText("");
    m_fileCount->setText("File Matches: 0");

    for (int i = 0; i < m_tree->topLevelItemCount(); i++) {
      QTreeWidgetItem *group = m_tree->topLevelItem(i);

      for (int j = 0; j < group->childCount(); j++) {
        QTreeWidgetItem *item = group->child(j);
        group->setSelected(false);
        if (item->type() == QTreeWidgetItem::UserType) {
          item->setSelected(false);
        }
      }
    }
  }


}
+12 −0
Original line number Diff line number Diff line
@@ -10,8 +10,11 @@
#include "ImageTreeWidget.h"
#include "PvlObject.h"

class QLabel;
class QLineEdit;
class QProgressBar;
class QSettings;
class QToolBar;
class QTreeWidgetItem;

namespace Isis {
@@ -48,6 +51,7 @@ namespace Isis {
   *                           QPixmap::grabWidget with QWidget::grab (Qt5). Fixes #4304.
   *   @history 2017-07-18 Cole Neubauer - Added removeImages slot to be able to remove from the
   *                           ImageFileList in IPCE Fixes #4996
   *   @history 2017-08-22 Cole Neuabuer - Added ability to search ImageFileListWidget. Fixes #1556
   */
  class ImageFileListWidget : public QWidget {
      Q_OBJECT
@@ -70,6 +74,8 @@ namespace Isis {
    public slots:
      void addImages(ImageList *images);
      void removeImages(ImageList *images);
      void clear();
      void filterFileList();

    protected:
      void contextMenuEvent(QContextMenuEvent *event);
@@ -113,6 +119,12 @@ namespace Isis {
      QPointer<ProgressBar> m_progress; //!< The ProgressBar of the ImageFileListWidget
      //! Serialized (file) version of this object
      QScopedPointer<PvlObject> m_serialized;

      QToolBar *m_searchToolbar; //!< Tool bar for the FileList widget to search
      QLineEdit *m_searchLineEdit;
      QLabel *m_fileCount;


      ImageTreeWidget *m_tree; //!< Tree item associated with this mosaic item
      Directory *m_directory; //!< The directory of the project
  };
+2 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include "FileDialog.h"
#include "MosaicController.h"
#include "ImageFileListWidget.h"
#include "ImageTreeWidgetItem.h"
#include "IString.h"
#include "MosaicSceneWidget.h"
#include "Projection.h"
@@ -243,7 +244,6 @@ namespace Isis {

    m_viewMenu = menuBar()->addMenu("&View");
    m_settingsMenu = menuBar()->addMenu("&Settings");

    QMenu *helpMenu = menuBar()->addMenu("&Help");

    QAction *activateWhatsThisAct = new QAction("&What's This", this);
@@ -559,6 +559,7 @@ namespace Isis {

      m_viewMenu->addSeparator();


      QList<QAction *> fileListViewActs =
          m_mosaicController->getImageFileList()->getViewActions();

+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ namespace Isis {
   *   @history 2013-03-19 Steven Lambright - Fixed a problem where Open Project would
   *                           close the current project, even if cancelled. Also removed
   *                           the closed project state. Fixes #998.
   *  @history 2017-06-27 Cole Neubauer - Added search capability for file list Dock widgets
   *                           Fixes #1556
   */
  class MosaicMainWindow : public MainWindow {
      Q_OBJECT