Commit 4893638e authored by Tracie Sucharski's avatar Tracie Sucharski
Browse files

PROG: Created the CnetEditorView class to hold the CnetEditorWidget. This...

PROG: Created the CnetEditorView class to hold the CnetEditorWidget. This follows the rest of the ipce view design.
parent 87ef505e
Loading
Loading
Loading
Loading
+47 −117
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@
#include "BundleObservationViewWorkOrder.h"
#include "ChipViewportsWidget.h"
#include "CloseProjectWorkOrder.h"
#include "CnetEditorView.h"
#include "CnetEditorViewWorkOrder.h"
#include "CnetEditorWidget.h"
#include "Control.h"
@@ -111,8 +112,6 @@ namespace Isis {
   * because the WorkOrders we are attempting to add to the Directory are corrupt.
   */
  Directory::Directory(QObject *parent) : QObject(parent) {
    //qDebug()<<"Directory::Directory";


    try {
      m_project = new Project(*this);
@@ -143,9 +142,7 @@ namespace Isis {

    m_projectItemModel = new ProjectItemModel(this);
    m_projectItemModel->addProject(m_project);
    connect(m_projectItemModel, SIGNAL(cleanProject(bool)), SIGNAL(cleanProject(bool)));

//  qDebug()<<"Directory::Directory  model row counter after addProject = "<<m_projectItemModel->rowCount();
    connect(m_projectItemModel, SIGNAL(cleanProject(bool)), this, SIGNAL(cleanProject(bool)));

    try {

@@ -544,12 +541,10 @@ namespace Isis {
   *  
   */
  void Directory::reloadActiveControlInCnetEditorView() {
    qDebug()<<"Directory::reloadActiveControlInCnetEditorView";
    foreach(CnetEditorWidget *cnetEditorView, m_cnetEditorViewWidgets) {
      if (cnetEditorView->control() == project()->activeControl()->controlNet()) {

    foreach(CnetEditorView *cnetEditorView, m_cnetEditorViewWidgets) {
      if (cnetEditorView->control() == project()->activeControl()) {
        emit viewClosed(cnetEditorView);
//      cnetEditorView->close();
//      delete cnetEditorView;
        project()->activeControl()->closeControlNet();
        project()->activeControl()->openControlNet();
        addCnetEditorView(project()->activeControl());
@@ -569,14 +564,14 @@ namespace Isis {

    // If the new active control is the same as what is showing in the cnetEditorWidget, allow
    // editing of control points from the widget, otherwise turnoff from context menu
    foreach(CnetEditorWidget *cnetEditorView, m_cnetEditorViewWidgets) {
      if (cnetEditorView->control() == project()->activeControl()->controlNet()) {
        cnetEditorView->pointTableView()->content()->setActiveControlNet(true);
        cnetEditorView->measureTableView()->content()->setActiveControlNet(true);
    foreach(CnetEditorView *cnetEditorView, m_cnetEditorViewWidgets) {
      if (cnetEditorView->control() == project()->activeControl()) {
        cnetEditorView->cnetEditorWidget()->pointTableView()->content()->setActiveControlNet(true);
        cnetEditorView->cnetEditorWidget()->measureTableView()->content()->setActiveControlNet(true);
      }
      else {
        cnetEditorView->pointTableView()->content()->setActiveControlNet(false);
        cnetEditorView->measureTableView()->content()->setActiveControlNet(false);
        cnetEditorView->cnetEditorWidget()->pointTableView()->content()->setActiveControlNet(false);
        cnetEditorView->cnetEditorWidget()->measureTableView()->content()->setActiveControlNet(false);
      }
    }
  }
@@ -634,94 +629,27 @@ namespace Isis {

  /**
   * @brief Add the widget for the cnet editor view to the window.
   * @param network Control net to edit.
   * @return @b (CnetEditorWidget *) The view to add to the window.
   * @param Control to edit.
   * @return @b (CnetEditorView *) The view to add to the window.
   */
  CnetEditorWidget *Directory::addCnetEditorView(Control *network) {
  CnetEditorView *Directory::addCnetEditorView(Control *control) {

    QString title = tr("Cnet Editor View %1").arg( network->displayProperties()->displayName() );
    QString title = tr("Cnet Editor View %1").arg( control->displayProperties()->displayName() );
    FileName configFile("$HOME/.Isis/" + QApplication::applicationName() + "/" + title + ".config");

    // TODO: This layout should be inside of the cnet editor widget, but I put it here to not
    //     conflict with current work in the cnet editor widget code.
    QWidget *result = new QWidget;
    QGridLayout *resultLayout = new QGridLayout;
    result->setLayout(resultLayout);

    int row = 0;

    QMenuBar *menuBar = new QMenuBar;
    resultLayout->addWidget(menuBar, row, 0, 1, 2);
    row++;

    CnetEditorWidget *mainWidget = new CnetEditorWidget(network, configFile.expanded());
    resultLayout->addWidget(mainWidget, row, 0, 1, 2);
    row++;

    // Populate the menu...
    QMap< QAction *, QList< QString > > actionMap = mainWidget->menuActions();
    QMapIterator< QAction *, QList< QString > > actionMapIterator(actionMap);

    QMap<QString, QMenu *> topLevelMenus;
    CnetEditorView *result = new CnetEditorView(this, control, configFile);

    while ( actionMapIterator.hasNext() ) {
      actionMapIterator.next();
      QAction *actionToAdd = actionMapIterator.key();
      QList< QString > location = actionMapIterator.value();

      QMenu *menuToPutActionInto = NULL;

      if ( location.count() ) {
        QString topLevelMenuTitle = location.takeFirst();
        if (!topLevelMenus[topLevelMenuTitle]) {
          topLevelMenus[topLevelMenuTitle] = menuBar->addMenu(topLevelMenuTitle);
        }

        menuToPutActionInto = topLevelMenus[topLevelMenuTitle];
      }

      foreach (QString menuName, location) {
        bool foundSubMenu = false;
        foreach ( QAction *possibleSubMenu, menuToPutActionInto->actions() ) {
          if (!foundSubMenu &&
              possibleSubMenu->menu() && possibleSubMenu->menu()->title() == menuName) {
            foundSubMenu = true;
            menuToPutActionInto = possibleSubMenu->menu();
          }
    if (project()->activeControl() && (control == project()->activeControl())) {
      result->cnetEditorWidget()->pointTableView()->content()->setActiveControlNet(true);
      result->cnetEditorWidget()->measureTableView()->content()->setActiveControlNet(true);
    }

        if (!foundSubMenu) {
          menuToPutActionInto = menuToPutActionInto->addMenu(menuName);
        }
      }

      menuToPutActionInto->addAction(actionToAdd);
    }

    QTabWidget *treeViews = new QTabWidget;
    treeViews->addTab( mainWidget->pointTreeView(), tr("Point View") );
    treeViews->addTab( mainWidget->serialTreeView(), tr("Serial View") );
    treeViews->addTab( mainWidget->connectionTreeView(), tr("Connection View") );
    resultLayout->addWidget(treeViews, row, 0, 1, 1);

    QTabWidget *filterViews = new QTabWidget;
    filterViews->addTab( mainWidget->pointFilterWidget(), tr("Filter Points and Measures") );
    filterViews->addTab( mainWidget->serialFilterWidget(), tr("Filter Images and Points") );
    filterViews->addTab( mainWidget->connectionFilterWidget(), tr("Filter Connections") );
    resultLayout->addWidget(filterViews, row, 1, 1, 1);
    row++;

    if (project()->activeControl() && mainWidget->control() == project()->activeControl()->controlNet()) {
      mainWidget->pointTableView()->content()->setActiveControlNet(true);
      mainWidget->measureTableView()->content()->setActiveControlNet(true);
    }

    // connect destroyed signal for mainWidget to cleanupCnetEditorViewWidgets slot
    connect(mainWidget, SIGNAL( destroyed(QObject *) ),
    // connect destroyed signal to cleanupCnetEditorViewWidgets slot
    connect(result, SIGNAL( destroyed(QObject *) ),
            this, SLOT( cleanupCnetEditorViewWidgets(QObject *) ) );

    //  Connections for control point editing between views
    connect(mainWidget, SIGNAL(editControlPoint(ControlPoint *, QString)),
    connect(result->cnetEditorWidget(), SIGNAL(editControlPoint(ControlPoint *, QString)),
            this, SLOT(modifyControlPoint(ControlPoint *, QString)));

    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -729,21 +657,21 @@ namespace Isis {
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //
    // Connection between cneteditor view & other views
    connect(mainWidget, SIGNAL(cnetModified()), this, SIGNAL(cnetModified()));
    connect(result->cnetEditorWidget(), SIGNAL(cnetModified()), this, SIGNAL(cnetModified()));

    // ControlPointEditWidget is only object that emits cnetModified when ControlPoint is
    // deleted or saved
    connect(this, SIGNAL(cnetModified()), mainWidget, SLOT(rebuildModels()));
    connect(this, SIGNAL(cnetModified()), result->cnetEditorWidget(), SLOT(rebuildModels()));

    m_cnetEditorViewWidgets.append(mainWidget);
    m_controlMap.insertMulti(network, mainWidget);
    m_cnetEditorViewWidgets.append(result);
    m_controlMap.insertMulti(control, result);

    result->setWindowTitle(title);
    result->setObjectName(title);

    emit newWidgetAvailable(result);

    return mainWidget;
    return result;
  }


@@ -900,14 +828,12 @@ namespace Isis {

      //  Create connections between signals from control point edit view and equivalent directory
      //  signals that can then be connected to other views that display control nets.
      qDebug()<<"ControlPointEditView::addControlPointEditView  before cnetModified connection.";
//      connect(mainWidget, SIGNAL(cnetModified()),
//              this, SIGNAL(cnetModified()));
      connect(result->controlPointEditWidget(), SIGNAL(cnetModified()),
              this, SIGNAL(cnetModified()));
      connect(result->controlPointEditWidget(), SIGNAL(cnetModified()),
              m_project, SLOT(activeControlModified()));
      qDebug()<<"ControlPointEditView::addControlPointEditView  after cnetModified connection.";

      connect(result->controlPointEditWidget(), SIGNAL(saveControlNet()),
              this, SLOT(makeBackupActiveControl()));
@@ -1109,21 +1035,20 @@ namespace Isis {
   * @brief Removes pointers to deleted CnetEditorWidget objects.
   */
  void Directory::cleanupCnetEditorViewWidgets(QObject *obj) {
    qDebug()<<"Directory::cleanupCnetEditorViewWidgets";
    CnetEditorWidget *cnetEditorWidget = static_cast<CnetEditorWidget *>(obj);
    if (!cnetEditorWidget) {
    
    CnetEditorView *cnetEditorView = static_cast<CnetEditorView *>(obj);
    if (!cnetEditorView) {
      return;
    }

    Control *control = m_controlMap.key(cnetEditorWidget);

    m_controlMap.remove(control, cnetEditorWidget);
    Control *control = m_controlMap.key(cnetEditorView);
    m_controlMap.remove(control, cnetEditorView);

    if ( m_controlMap.count(control) == 0 && project()->activeControl() != control) {      
      control->closeControlNet();
    }

    m_cnetEditorViewWidgets.removeAll(cnetEditorWidget);
    m_cnetEditorViewWidgets.removeAll(cnetEditorView);
    m_project->setClean(false);
  }

@@ -1195,7 +1120,6 @@ namespace Isis {
   */
  void Directory::cleanupControlPointEditViewWidget(QObject *obj) {

    qDebug()<<"Directory::cleanupControlPointEditView";
     ControlPointEditView *controlPointEditView = static_cast<ControlPointEditView *>(obj);
     if (!controlPointEditView) {
       return;
@@ -1283,12 +1207,12 @@ namespace Isis {

  /**
   * @brief Returns a list of all the control network views for this directory.
   * @return @b QList<CnetEditorWidget *> A pointer list of all the CnetEditorWidget objects.
   * @return @b QList<CnetEditorView *> A pointer list of all the CnetEditorWidget objects.
   */
  QList<CnetEditorWidget *> Directory::cnetEditorViews() {
    QList<CnetEditorWidget *> results;
  QList<CnetEditorView *> Directory::cnetEditorViews() {
    QList<CnetEditorView *> results;

    foreach (CnetEditorWidget *widget, m_cnetEditorViewWidgets) {
    foreach (CnetEditorView *widget, m_cnetEditorViewWidgets) {
      results.append(widget);
    }

@@ -1520,7 +1444,7 @@ namespace Isis {
    if ( !m_cnetEditorViewWidgets.isEmpty() ) {
      stream.writeStartElement("cnetEditorViews");

      foreach (CnetEditorWidget *cnetEditorWidget, m_cnetEditorViewWidgets) {
      foreach (CnetEditorView *cnetEditorWidget, m_cnetEditorViewWidgets) {
        cnetEditorWidget->save(stream, project(), newProjectRoot);
      }

@@ -1864,7 +1788,13 @@ namespace Isis {
   */
  void Directory::saveActiveControl() {

    if (project()->activeControl()) {
      project()->activeControl()->write();
      // add to HistoryTreeWidget
      QString saveCnetHistoryEntry = project()->activeControl()->fileName() +
        "has been saved.";
      m_historyTreeWidget->addToHistory(saveCnetHistoryEntry);
    }
  }


+9 −4
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ namespace Isis {
  class BundleObservation;
  class BundleObservationView;
  class ChipViewportsWidget;
  class CnetEditorView;
  class CnetEditorWidget;
  class Control;
  class ControlNet;
@@ -226,6 +227,10 @@ namespace Isis {
   *                           control net in cneteditor view, effectively discarding any edits.
   *                           This was done because there is no way to re-load a control net in the
   *                           CnetEditor widget classes.
   *   @history 2018-04-04 Tracie Sucharski - Created CnetEditorView class to use to add to QMdiArea
   *                           instead of a CnetEditorWidget. This way there is no longer a
   *                           disconnect between what has been added to the QMdiArea and what is
   *                           stored in m_cnetEditorViewWidgets. 
   */
  class Directory : public QObject {
    Q_OBJECT
@@ -240,7 +245,7 @@ namespace Isis {
      QStringList recentProjectsList();

      BundleObservationView *addBundleObservationView(FileItemQsp fileItem);
      CnetEditorWidget *addCnetEditorView(Control *network);
      CnetEditorView *addCnetEditorView(Control *control);
      CubeDnView *addCubeDnView();
      Footprint2DView *addFootprint2DView();
      MatrixSceneWidget *addMatrixView();
@@ -269,7 +274,7 @@ namespace Isis {
      QList<QAction *> toolPadActions();

      QList<BundleObservationView *> bundleObservationViews();
      QList<CnetEditorWidget *> cnetEditorViews();
      QList<CnetEditorView *> cnetEditorViews();
      QList<CubeDnView *> cubeDnViews();
      QList<Footprint2DView *> footprint2DViews();
      QList<MatrixSceneWidget *> matrixViews();
@@ -441,7 +446,7 @@ namespace Isis {

      //!< List of BundleObservationView
      QList< QPointer<BundleObservationView> > m_bundleObservationViews;
      QList< QPointer<CnetEditorWidget> > m_cnetEditorViewWidgets;  //!< List of CnetEditorWidgets
      QList< QPointer<CnetEditorView> > m_cnetEditorViewWidgets;  //!< List of CnetEditorViews
      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
@@ -484,7 +489,7 @@ namespace Isis {
      QList<QAction *> m_activeToolBarActions; //!< List of active ToolBar actions
      QList<QAction *> m_toolPadActions; //!< List of ToolPad actions

      QMultiMap<Control*, CnetEditorWidget*> m_controlMap; //!< Map to hold every view with an open Control
      QMultiMap<Control*, CnetEditorView *> m_controlMap; //!< Map to hold every view with an open Control

      QString m_editPointId; //!< Current control point that is in the ControlPointEditWidget