Commit b8ab92f2 authored by Tyler Wilson's avatar Tyler Wilson
Browse files

Merging Directory class changes from IPCE to ISIS. Fixes #4038,#3951

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/trunk@6861 41f8697f-d340-4b68-9986-7bafba869bb8
parent 471f2f85
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -68,7 +68,10 @@ namespace Isis {

    if (success) {
      QUndoCommand::setText(tr("View control network [%1] in new cnet editor view")
          .arg(controlList().first()->displayProperties()->displayName()));
             //tjw
            .arg(controlList()->first()->displayProperties()->displayName()));
          //.arg(controlList().first()->displayProperties()->displayName()));

    }

    return success;
@@ -82,7 +85,9 @@ namespace Isis {


  void CnetEditorViewWorkOrder::syncRedo() {
    project()->directory()->addCnetEditorView(controlList().first());
    //project()->directory()->addCnetEditorView(controlList().first());
    project()->directory()->addCnetEditorView(controlList()->first());

  }


+6 −5
Original line number Diff line number Diff line
@@ -27,8 +27,8 @@
#include <QFileDialog>
#include <QInputDialog>
#include <QMessageBox>

#include "CubeDnView.h"
//tjw
//#include "CubeDnView.h"
#include "Directory.h"
#include "MdiCubeViewport.h"
#include "Project.h"
@@ -108,9 +108,10 @@ namespace Isis {
   * that. 
   */
  void CubeDnViewWorkOrder::syncRedo() {
    ProjectItem *currentItem = project()->directory()->model()->currentItem();
    CubeDnView *view = project()->directory()->addCubeDnView();
    view->addItem( currentItem );
    // tjw
    //ProjectItem *currentItem = project()->directory()->model()->currentItem();
    //CubeDnView *view = project()->directory()->addCubeDnView();
    //view->addItem( currentItem );
  }
}
+11 −3
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ namespace Isis {
  bool CubeViewportViewWorkOrder::execute() {
    bool success = WorkOrder::execute();

    //tjw
    /*
    int maxRecommendedViewports = 10;
    if (success && imageList()->count() > maxRecommendedViewports) {
      QMessageBox::StandardButton selectedOpt = QMessageBox::warning(NULL,
@@ -80,7 +82,8 @@ namespace Isis {
    if (success) {
      QStringList viewOptions;

      QList<Workspace *> existingViews = project()->directory()->cubeDnViews();

      //QList<Workspace *> existingViews = project()->directory()->cubeDnViews();
      int viewToUse = -1;

      if (existingViews.count()) {
@@ -130,7 +133,7 @@ namespace Isis {
      internalData.append(newView? "new view" : "existing view");
      setInternalData(internalData);
    }

    */
    return success;
  }

@@ -142,6 +145,8 @@ namespace Isis {


  void CubeViewportViewWorkOrder::syncRedo() {
    //tjw
    /*
    int viewToUse = internalData().first().toInt();

    Workspace *cubeDnViewToUse = NULL;
@@ -153,10 +158,13 @@ namespace Isis {
    }

    cubeDnViewToUse->addImages(imageList());
    */
  }


  void CubeViewportViewWorkOrder::syncUndo() {
    //tjw
    /*
    int viewToUse = internalData().first().toInt();

    if (internalData()[1] == "new view") {
@@ -173,6 +181,6 @@ namespace Isis {
          cubeDnView->imageToMdiWidget(imageToRemoveFromView)->close();
      }
    }
  }
  */}
}
+801 −93

File changed.

Preview size limit exceeded, changes collapsed.

+145 −45
Original line number Diff line number Diff line
@@ -22,12 +22,17 @@
 *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
 *   http://www.usgs.gov/privacy.html.
 */

#include <QObject>
#include <QPointer>
#include <QString>
#include <QtDebug>


#include "GuiCameraList.h"
#include "ImageList.h"
#include "MosaicSceneWidget.h"
#include "TargetBodyList.h"
#include "WorkOrder.h"

class QAction;
@@ -40,11 +45,21 @@ class QTabWidget;
namespace Isis {
  class CnetEditorWidget;
  class ControlNet;
  class ControlNetEditor;
  class ControlPointEditWidget;
  class CubeDnView;
  class Footprint2DView;
  class HistoryTreeWidget;
  class ImageFileListWidget; 
  class MatrixSceneWidget;
  class MosaicSceneWidget;
  class Project;
  class ProjectTreeWidget;
  class ProjectItem;
  class ProjectItemModel;
  class ProjectItemTreeView;
  class SensorInfoWidget;
  class TargetBody;
  class TargetInfoWidget;
  class WarningTreeWidget;
  class WorkOrder;
  class Workspace;
@@ -70,6 +85,14 @@ namespace Isis {
   *                           sorting/smart arranging of the actions that come from the footprint
   *                           views.
   *   @history 2012-10-03 Steven Lambright - Added 'All' option generation in restructureActions()
   *   @history 2014-07-14 Kimberly Oyama - Updated to better meet programming standards. Added
   *                           support for correlation matrix.
   *   @history 2015-10-05 Jeffrey Covington - Added a ProjectItemModel and the
   *                           addProjectItemTreeView() method to start
   *                           supporting Qt's model-view framework.
   *   @history 2016-01-04 Jeffrey Covington - Added support for CubeDnView and
   *                           Footprint2DView, replacing old classes.
   *   @history 2016-06-17 Tyler Wilson - Added documentation for member functions/variables.
   */
  class Directory : public QObject {
    Q_OBJECT
@@ -80,38 +103,71 @@ namespace Isis {
      void populateMainMenu(QMenuBar *);
      void setHistoryContainer(QDockWidget *historyContainer);
      void setWarningContainer(QDockWidget *warningContainer);
      void setRecentProjectsList(QStringList recentProjects);
      QStringList recentProjectsList();

      CnetEditorWidget *addCnetEditorView(Control *network);
      Workspace *addCubeDnView();
      MosaicSceneWidget *addFootprint2DView();
      //CubeDnView *addCubeDnView();  //tjw
      //Footprint2DView *addFootprint2DView();  //tjw
      //MatrixSceneWidget *addMatrixView();  //tjw
      //TargetInfoWidget *addTargetInfoView(TargetBodyQsp target);  //tjw
      SensorInfoWidget *addSensorInfoView(GuiCameraQsp camera);
      ImageFileListWidget *addImageFileListView();
      QWidget *projectTreeWidget();
      void addControlPointEditor(ControlNet *cnet, QString cnetFilename);


      //ProjectItemTreeView *addProjectItemTreeView();  //tjw

      Project *project() const;
      //ProjectItemModel *model();  //tjw

      //Project *project() const;  //tjw

      QList<QAction *> fileMenuActions();
      QList<QAction *> projectMenuActions();
      QList<QAction *> editMenuActions();
      QList<QAction *> viewMenuActions();
      QList<QAction *> settingsMenuActions();
      QList<QAction *> helpMenuActions();

      QList<QAction *> permToolBarActions();
      QList<QAction *> activeToolBarActions();
      QList<QAction *> toolPadActions();
      
      QList<CnetEditorWidget *> cnetEditorViews();
      QList<Workspace *> cubeDnViews();
      QList<MosaicSceneWidget *> footprint2DViews();
      //QList<CubeDnView *> cubeDnViews();  //tjw
      //QList<Footprint2DView *> footprint2DViews();  //tjw
      //QList<MatrixSceneWidget *> matrixViews();  //tjw
      QList<SensorInfoWidget *> sensorInfoViews();
      //QList<TargetInfoWidget *> targetInfoViews();  //tjw
      QList<ImageFileListWidget *> imageFileListViews();
      QList<QProgressBar *> progressBars();
      //ControlPointEditWidget *controlPointEditorView();  //tjw
      //ControlNetEditor *controlNetEditor();  //tjw



      /**
       * @brief Returns a list of supported actions for a WorkOrder
       * @param data The WorkOrder type we are using.
       * @return @b QList<QAction *> A list of supported actions.
       */
      template <typename DataType>
      QList<QAction *> supportedActions(DataType data) {
        QList<QAction *> results;

        QList< QPair< QString, QList<QAction *> > > actionPairings;

        foreach (MosaicSceneWidget *footprint2DView, m_footprint2DViewWidgets) {
          actionPairings.append(
              qMakePair(footprint2DView->windowTitle(), footprint2DView->supportedActions(data)));
        }
        //QList< QPair< QString, QList<QAction *> > > actionPairings;

        results.append(restructureActions(actionPairings));
        //foreach (MosaicSceneWidget *footprint2DView, m_footprint2DViewWidgets) {
        //  actionPairings.append(
        //      qMakePair(footprint2DView->windowTitle(), footprint2DView->supportedActions(data)));
        //}

        if (!results.isEmpty()) {
          results.append(NULL);
        }
        //results.append(restructureActions(actionPairings));

        //if (!results.isEmpty()) {
        //  results.append(NULL);
        //}
        //qDebug()<<"Directory.h::supportedActions  #workorders = "<<m_workOrders.size();
        foreach (WorkOrder *workOrder, m_workOrders) {
          if (workOrder->isExecutable(data)) {
            WorkOrder *clone = workOrder->clone();
@@ -125,6 +181,12 @@ namespace Isis {

      void showWarning(QString text);


      /**
       * @brief Shows warning text for a Widget.
       * @param text The warning text.
       * @param Data The Widget object we are passing the warning to.
       */
      template <typename Data>
      void showWarning(QString text, Data data) {
        //m_warningTreeWidget->showWarning(text, data);
@@ -132,22 +194,28 @@ namespace Isis {

      QWidget *warningWidget();

      QAction *redoAction();
      QAction *undoAction();
      //QAction *redoAction();  //tjw
      //QAction *undoAction();  //tjw

      void load(XmlStackedHandlerReader *xmlReader);
      void save(QXmlStreamWriter &stream, FileName newProjectRoot) const;

    signals:
      void newWidgetAvailable(
          QWidget *newWidget, Qt::DockWidgetArea area, Qt::Orientation orientation);
      void newWidgetAvailable(QWidget *newWidget);

    public slots:
      void cleanupCnetEditorViewWidgets();
      void cleanupCubeDnViewWidgets();
      void cleanupFileListWidgets();
      void cleanupFootprint2DViewWidgets();
      void imagesAddedToProject(ImageList *images);
      void cleanupControlPointEditorWidget();
      void cleanupMatrixViewWidgets();
      void cleanupSensorInfoWidgets();
      void cleanupTargetInfoWidgets();
      //void imagesAddedToProject(ImageList *images);
      void updateControlNetEditConnections();

      void updateRecentProjects(Project *project);

    private:
      /**
@@ -166,7 +234,7 @@ namespace Isis {
        private:
          Q_DISABLE_COPY(XmlHandler);

          Directory *m_directory;
          Directory *m_directory;  //!< Pointer to a Directory which is set by the XmlHandler class.
      };

    private:
@@ -174,13 +242,14 @@ namespace Isis {
      Directory &operator=(const Directory &rhs);

      /**
       * Create a work order, append it to m_workOrders, and return it.
       * @description Create a work order, append it to m_workOrders, and return it.
       *
       * Example:
       *   createWorkOrder<ImageFileListViewWorkOrder>();
       *   This will create a new ImageFileListViewWorkOrder and append it to m_workOrders.
       *
       * @return @b A pointer to the WorkOrder created by this function.
       */
      /*
      template <typename WorkOrderType>
      WorkOrderType *createWorkOrder() {
        WorkOrderType *newWorkOrder = new WorkOrderType(m_project);
@@ -188,32 +257,63 @@ namespace Isis {
        return newWorkOrder;
      }

      */
      static QList<QAction *> restructureActions(QList< QPair< QString, QList<QAction *> > >);
      static bool actionTextLessThan(QAction *lhs, QAction *rhs);

      QPointer<ProjectTreeWidget> m_projectTreeWidget;
      QPointer<HistoryTreeWidget> m_historyTreeWidget;
      QPointer<Project> m_project;
      QPointer<WarningTreeWidget> m_warningTreeWidget;
      void initializeActions(); 
      
      QPointer<ProjectItemModel> m_projectItemModel; //!< Pointer to the ProjectItemModel.


      QPointer<HistoryTreeWidget> m_historyTreeWidget;  //!< Pointer to the HistoryTreeWidget.
      //QPointer<Project> m_project;   //tjw                   //!< Pointer to the Project.
      QPointer<WarningTreeWidget> m_warningTreeWidget;  //!< Pointer to the WarningTreeWidget.

      QList< QPointer<CnetEditorWidget> > m_cnetEditorViewWidgets;  //!< List of CnetEditorWidgets
      QList< QPointer<CubeDnView> > m_cubeDnViewWidgets;  //!< List of CubeDnCiew obs
      QList< QPointer<ImageFileListWidget> > m_fileListWidgets;  //!< List of ImageFileListWidgets
      QList< QPointer<Footprint2DView> > m_footprint2DViewWidgets; //!< List of Footprint2DView objs
      QPointer<ControlPointEditWidget> m_controlPointEditWidget; //!< Pointer to a
                                                                 //!< ControlPointEditWidget.

      QList< QPointer<CnetEditorWidget> > m_cnetEditorViewWidgets;
      QList< QPointer<Workspace> > m_cubeDnViewWidgets;
      QList< QPointer<ImageFileListWidget> > m_fileListWidgets;
      QList< QPointer<MosaicSceneWidget> > m_footprint2DViewWidgets;
      QList< QPointer<MatrixSceneWidget> > m_matrixViewWidgets; //!< List of MatrixSceneWidgets
      QList< QPointer<SensorInfoWidget> > m_sensorInfoWidgets; //!< List of SensorInfoWidgets
      QList< QPointer<TargetInfoWidget> > m_targetInfoWidgets; //!< List of TargetInfoWidgets

      QList< QPointer<WorkOrder> > m_workOrders;
      QList< QPointer<WorkOrder> > m_workOrders; //!< List of WorkOrders
      
      QStringList m_recentProjects;  //!< List of the names of recent projects

      // We only need to store the work orders that go into menus uniquely... all work orders
      //   (including these) should be stored in m_workOrders
      QPointer<WorkOrder> m_exportControlNetWorkOrder;
      QPointer<WorkOrder> m_exportImagesWorkOrder;
      QPointer<WorkOrder> m_importControlNetWorkOrder;
      QPointer<WorkOrder> m_importImagesWorkOrder;
      QPointer<WorkOrder> m_openProjectWorkOrder;
      QPointer<WorkOrder> m_saveProjectWorkOrder;
      QPointer<WorkOrder> m_saveProjectAsWorkOrder;

      QPointer<WorkOrder> m_renameProjectWorkOrder;
      QPointer<WorkOrder> m_exportControlNetWorkOrder;  //!< The export ControlNetwork WorkOrder.
      QPointer<WorkOrder> m_exportImagesWorkOrder; //!< The export images WorkOrder.
      QPointer<WorkOrder> m_importControlNetWorkOrder; //!< The import ControlNetwork WorkOrder.
      QPointer<WorkOrder> m_importImagesWorkOrder; //!< The import images WorkOrder.
      QPointer<WorkOrder> m_openProjectWorkOrder; //!< The Open Project WorkOrder.
      QPointer<WorkOrder> m_saveProjectWorkOrder; //!< The Save Project WorkOrder.
      QPointer<WorkOrder> m_saveProjectAsWorkOrder; //!< The Save Project As WorkOrder.
      QPointer<WorkOrder> m_openRecentProjectWorkOrder; //!< The Open Recent Project WorkOrder.
      QPointer<WorkOrder> m_closeProjectWorkOrder; //!< The Close Project WorkOrder

      QPointer<WorkOrder> m_runJigsawWorkOrder; //!< The Run Jigsaw WorkOrder
      QPointer<WorkOrder> m_renameProjectWorkOrder; //!< The Rename Project WorkOrder



      QPointer<ControlNetEditor> m_cnetEditor;  //!< Pointer to the ControlNetEditor

      QList<QAction *> m_fileMenuActions;  //!< List of file menu actions.
      QList<QAction *> m_projectMenuActions; //!< List of project menu actions.
      QList<QAction *> m_editMenuActions; //!< List of edit menu actions.
      QList<QAction *> m_viewMenuActions; //!< List of view menu actions.
      QList<QAction *> m_settingsMenuActions; //!< List of menu settings actions
      QList<QAction *> m_helpMenuActions; //!< List of help menu actions

      QList<QAction *> m_permToolBarActions; //!< List of perm ToolBar actions
      QList<QAction *> m_activeToolBarActions; //!< List of active ToolBar actions
      QList<QAction *> m_toolPadActions; //!< List of ToolPad actions
  };
}