From 66d7e7e52a448edcc30eca992b4c5bdbff6f562c Mon Sep 17 00:00:00 2001 From: Karsten Rink <karsten.rink@ufz.de> Date: Mon, 19 Nov 2012 17:23:20 +0100 Subject: [PATCH] added open/save/remove buttons in tab-widgets; added reload button for recalculating colorlookup-table for active scalar; fixed issue with incorrect display of active scalar array name; fixed issue with mesh quality not being scaled correctly; added scheme for enabling access buttons only when needed --- FileIO/ImportFileTypes.h | 12 ++ Gui/DataView/GeoTabWidget.cpp | 6 + Gui/DataView/GeoTabWidget.h | 5 + Gui/DataView/GeoTabWidgetBase.ui | 123 ++++++++++++++++++++- Gui/DataView/GeoTreeView.cpp | 66 +++++++---- Gui/DataView/GeoTreeView.h | 7 +- Gui/DataView/MshTabWidget.cpp | 6 +- Gui/DataView/MshTabWidget.h | 4 + Gui/DataView/MshTabWidgetBase.ui | 79 ++++++++++--- Gui/DataView/MshView.cpp | 44 ++++---- Gui/DataView/MshView.h | 14 ++- Gui/DataView/StationTabWidget.cpp | 6 + Gui/DataView/StationTabWidget.h | 4 + Gui/DataView/StationTabWidgetBase.ui | 123 ++++++++++++++++++++- Gui/DataView/StationTreeView.cpp | 71 ++++++++---- Gui/DataView/StationTreeView.h | 7 +- Gui/Img/delete-icon.png | Bin 0 -> 639 bytes Gui/Img/icons.qrc | 4 + Gui/Img/open-icon.png | Bin 0 -> 467 bytes Gui/Img/oxygen.icons | 1 + Gui/Img/refresh-icon.png | Bin 0 -> 881 bytes Gui/Img/save-icon.png | Bin 0 -> 686 bytes Gui/VtkAct/VtkCustomInteractorStyle.cpp | 5 +- Gui/VtkVis/VtkAlgorithmProperties.cpp | 17 ++- Gui/VtkVis/VtkAlgorithmProperties.h | 3 + Gui/VtkVis/VtkVisTabWidget.cpp | 46 ++++---- Gui/VtkVis/VtkVisTabWidget.h | 1 + Gui/VtkVis/VtkVisTabWidgetBase.ui | 39 ++++++- Gui/mainwindow.cpp | 8 +- Gui/mainwindow.ui | 3 + MeshLib/MeshQuality/MeshQualityChecker.cpp | 2 +- MeshLib/MeshQuality/MeshQualityVolume.cpp | 2 +- 32 files changed, 578 insertions(+), 130 deletions(-) create mode 100644 Gui/Img/delete-icon.png create mode 100644 Gui/Img/open-icon.png create mode 100644 Gui/Img/oxygen.icons create mode 100644 Gui/Img/refresh-icon.png create mode 100644 Gui/Img/save-icon.png diff --git a/FileIO/ImportFileTypes.h b/FileIO/ImportFileTypes.h index 84cdfc099de..82b5ef38d0e 100644 --- a/FileIO/ImportFileTypes.h +++ b/FileIO/ImportFileTypes.h @@ -24,6 +24,9 @@ public: enum type { OGS = 0, + OGS_GEO, + OGS_STN, + OGS_MSH, FEFLOW, GMS, GMSH, @@ -43,6 +46,9 @@ public: else if (t==ImportFileType::GMSH) return "GMSH"; else if (t==ImportFileType::NETCDF) return "NetCDF"; else if (t==ImportFileType::OGS) return "OGS"; + else if (t==ImportFileType::OGS_GEO) return "OGS geometry"; + else if (t==ImportFileType::OGS_STN) return "OGS station list"; + else if (t==ImportFileType::OGS_MSH) return "OGS mesh"; else if (t==ImportFileType::PETREL) return "Petrel"; else if((t==ImportFileType::RASTER) || (t==ImportFileType::POLYRASTER)) return "Raster"; else if (t==ImportFileType::SHAPE) return "Shape"; @@ -63,6 +69,12 @@ public: return "NetCDF files (*.nc)"; else if (t==ImportFileType::OGS) return "OpenGeosys files (*.gsp *.gml *.vtu *.stn);;GeoSys legacy files (*.gli *.msh);;GeoSys FEM Conditions (*.cnd *.bc *.ic *.st);;All files (* *.*)"; + else if (t==ImportFileType::OGS_GEO) + return "OpenGeosys files (*.gml *.gli)"; + else if (t==ImportFileType::OGS_STN) + return "OpenGeosys files (*.stn)"; + else if (t==ImportFileType::OGS_MSH) + return "OpenGeosys files (*.vtu *.msh)"; else if (t==ImportFileType::PETREL) return "Petrel files (*)"; else if (t==ImportFileType::RASTER) diff --git a/Gui/DataView/GeoTabWidget.cpp b/Gui/DataView/GeoTabWidget.cpp index 03912716d55..8e22b64da8e 100644 --- a/Gui/DataView/GeoTabWidget.cpp +++ b/Gui/DataView/GeoTabWidget.cpp @@ -16,4 +16,10 @@ GeoTabWidget::GeoTabWidget( QWidget* parent /*= 0*/ ) : QWidget(parent) { setupUi(this); + + connect(this->openGeoPushButton, SIGNAL(clicked()), this->treeView, SLOT(addGeometry())); + connect(this->saveGeoPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeToFile())); + connect(this->removeGeoPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeGeometry())); + connect(this->treeView, SIGNAL(enableSaveButton(bool)), this, SLOT(enableSaveButton(bool))); + connect(this->treeView, SIGNAL(enableRemoveButton(bool)), this, SLOT(enableRemoveButton(bool))); } diff --git a/Gui/DataView/GeoTabWidget.h b/Gui/DataView/GeoTabWidget.h index 21697d1f497..bf763204625 100644 --- a/Gui/DataView/GeoTabWidget.h +++ b/Gui/DataView/GeoTabWidget.h @@ -26,6 +26,11 @@ public: GeoTabWidget(QWidget* parent = 0); private: + +private slots: + void enableSaveButton(bool enable) { this->saveGeoPushButton->setEnabled(enable); }; + void enableRemoveButton(bool enable) { this->removeGeoPushButton->setEnabled(enable); }; + }; #endif // GEOTABWIDGET_H diff --git a/Gui/DataView/GeoTabWidgetBase.ui b/Gui/DataView/GeoTabWidgetBase.ui index 6dce56723bf..e556afe7731 100644 --- a/Gui/DataView/GeoTabWidgetBase.ui +++ b/Gui/DataView/GeoTabWidgetBase.ui @@ -17,6 +17,125 @@ <property name="margin"> <number>2</number> </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="openGeoPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Open geometry...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/open-icon.png</normaloff>:/Images/open-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="saveGeoPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Save geometry...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/save-icon.png</normaloff>:/Images/save-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeGeoPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Remove geometry</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/delete-icon.png</normaloff>:/Images/delete-icon.png</iconset> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> <item> <widget class="GeoTreeView" name="treeView"/> </item> @@ -29,6 +148,8 @@ <header>GeoTreeView.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/DataView/GeoTreeView.cpp b/Gui/DataView/GeoTreeView.cpp index 99400ced283..e0253d2e73a 100644 --- a/Gui/DataView/GeoTreeView.cpp +++ b/Gui/DataView/GeoTreeView.cpp @@ -11,6 +11,7 @@ #include <QFileDialog> #include <QMenu> +#include <QSettings> #include <iostream> #include "GeoObjectListItem.h" @@ -18,7 +19,7 @@ #include "GeoTreeModel.h" #include "GeoTreeView.h" #include "OGSError.h" - +#include "ImportFileTypes.h" GeoTreeView::GeoTreeView(QWidget* parent) : QTreeView(parent) { @@ -49,9 +50,20 @@ void GeoTreeView::selectionChanged( const QItemSelection &selected, const GeoObjectListItem* list_item = dynamic_cast<GeoObjectListItem*>(tree_item->parentItem()); if (list_item) + { + emit enableSaveButton(false); + emit enableRemoveButton(false); emit geoItemSelected(list_item->vtkSource(), tree_item->row()); + } else + { + emit enableRemoveButton(true); emit removeGeoItemSelection(); + if (!idx.parent().isValid()) + emit enableSaveButton(true); + else + emit enableSaveButton(false); + } } //emit itemSelectionChanged(selected, deselected); //return QTreeView::selectionChanged(selected, deselected); @@ -121,17 +133,17 @@ void GeoTreeView::contextMenuEvent( QContextMenuEvent* event ) { if (item->child(0)->data(0).toString().compare("Points") == 0) // clumsy way to find out { - QAction* saveAction = menu.addAction("Save geometry..."); + //QAction* saveAction = menu.addAction("Save geometry..."); QAction* mapAction = menu.addAction("Map geometry..."); QAction* addCNDAction = menu.addAction("Load FEM Conditions..."); //QAction* saveCondAction = menu.addAction("Save FEM conditions..."); menu.addSeparator(); - QAction* removeAction = menu.addAction("Remove geometry"); - connect(saveAction, SIGNAL(triggered()), this, SLOT(writeToFile())); + //QAction* removeAction = menu.addAction("Remove geometry"); + //connect(saveAction, SIGNAL(triggered()), this, SLOT(writeToFile())); connect(mapAction, SIGNAL(triggered()), this, SLOT(mapGeometry())); connect(addCNDAction, SIGNAL(triggered()), this, SLOT(loadFEMConditions())); //connect(saveCondAction, SIGNAL(triggered()), this, SLOT(saveFEMConditions())); - connect(removeAction, SIGNAL(triggered()), this, SLOT(removeList())); + //connect(removeAction, SIGNAL(triggered()), this, SLOT(removeList())); } } } @@ -146,17 +158,26 @@ void GeoTreeView::connectPolylines() emit requestLineEditDialog(item->data(0).toString().toStdString()); } -void GeoTreeView::removeList() +void GeoTreeView::addGeometry() { - TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); + emit openGeometryFile(ImportFileType::OGS_GEO); +} - GeoObjectListItem* list = dynamic_cast<GeoObjectListItem*>(item); - if (list) - emit listRemoved((item->parentItem()->data( - 0).toString()).toStdString(), list->getType()); +void GeoTreeView::removeGeometry() +{ + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No geometry selected."); else - emit listRemoved((item->data(0).toString()).toStdString(), GeoLib::INVALID); + { + TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem(index); + GeoObjectListItem* list = dynamic_cast<GeoObjectListItem*>(item); + if (list) + emit listRemoved((item->parentItem()->data( + 0).toString()).toStdString(), list->getType()); + else + emit listRemoved((item->data(0).toString()).toStdString(), GeoLib::INVALID); + } } void GeoTreeView::setElementAsCondition(bool set_on_points) @@ -189,13 +210,18 @@ void GeoTreeView::mapGeometry() void GeoTreeView::writeToFile() const { - TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); - QString gliName = item->data(0).toString(); - QString fileName = QFileDialog::getSaveFileName(NULL, - "Save geometry as", gliName, "GeoSys geometry file (*.gml)"); - if (!fileName.isEmpty()) - emit saveToFileRequested(gliName, fileName); + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No geometry selected."); + else + { + TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem(index); + QString geoName = item->data(0).toString(); + QString fileName = QFileDialog::getSaveFileName(NULL, + "Save geometry as", geoName, "GeoSys geometry file (*.gml)"); + if (!fileName.isEmpty()) + emit saveToFileRequested(geoName, fileName); + } } void GeoTreeView::loadFEMConditions() diff --git a/Gui/DataView/GeoTreeView.h b/Gui/DataView/GeoTreeView.h index 2e00a7f5d5d..437f930af14 100644 --- a/Gui/DataView/GeoTreeView.h +++ b/Gui/DataView/GeoTreeView.h @@ -13,6 +13,7 @@ #define GEOTREEVIEW_H #include "GeoType.h" + #include <QContextMenuEvent> #include <QTreeView> @@ -48,6 +49,7 @@ private: void setElementAsCondition(bool set_on_points = false); private slots: + void addGeometry(); /// Allows to add FEM Conditions to a process void loadFEMConditions(); void on_Clicked(QModelIndex idx); @@ -61,17 +63,20 @@ private slots: /// Saves a geometry in a file. void writeToFile() const; /// Removes a whole geometry or parts of it. - void removeList(); + void removeGeometry(); /// Saves FEM Conditions associated with the given geometry //void saveFEMConditions(); signals: + void enableSaveButton(bool); + void enableRemoveButton(bool); void geoItemSelected(const vtkPolyDataAlgorithm*, int); void geometryMappingRequested(const std::string&); void removeGeoItemSelection(); //void itemSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); void listRemoved(std::string name, GeoLib::GEOTYPE); void loadFEMCondFileRequested(std::string); + void openGeometryFile(int); void saveToFileRequested(QString, QString) const; void requestCondSetupDialog(const std::string&, const GeoLib::GEOTYPE, const std::size_t, bool on_points); void requestLineEditDialog(const std::string&); diff --git a/Gui/DataView/MshTabWidget.cpp b/Gui/DataView/MshTabWidget.cpp index bcaf875c830..f4e8ade653f 100644 --- a/Gui/DataView/MshTabWidget.cpp +++ b/Gui/DataView/MshTabWidget.cpp @@ -17,8 +17,10 @@ MshTabWidget::MshTabWidget( QWidget* parent /*= 0*/ ) { setupUi(this); - connect(this->addMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(addMeshAction())); - connect(this->saveMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeMeshToFile())); + connect(this->addMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(addMesh())); + connect(this->saveMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeToFile())); connect(this->removeMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeMesh())); //connect(this->clearAllPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeAllMeshes())); + connect(this->treeView, SIGNAL(enableSaveButton(bool)), this, SLOT(enableSaveButton(bool))); + connect(this->treeView, SIGNAL(enableRemoveButton(bool)), this, SLOT(enableRemoveButton(bool))); } diff --git a/Gui/DataView/MshTabWidget.h b/Gui/DataView/MshTabWidget.h index 71b411d4162..7bf3a2b200c 100644 --- a/Gui/DataView/MshTabWidget.h +++ b/Gui/DataView/MshTabWidget.h @@ -24,6 +24,10 @@ class MshTabWidget : public QWidget, public Ui_MshTabWidgetBase public: MshTabWidget(QWidget* parent = 0); + +private slots: + void enableSaveButton(bool enable) { this->saveMeshPushButton->setEnabled(enable); }; + void enableRemoveButton(bool enable) { this->removeMeshPushButton->setEnabled(enable); }; }; #endif // MSHTABWIDGET_H diff --git a/Gui/DataView/MshTabWidgetBase.ui b/Gui/DataView/MshTabWidgetBase.ui index 4cc6999aba6..17885a96595 100644 --- a/Gui/DataView/MshTabWidgetBase.ui +++ b/Gui/DataView/MshTabWidgetBase.ui @@ -21,58 +21,103 @@ <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QPushButton" name="addMeshPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>50</width> - <height>0</height> + <width>24</width> + <height>24</height> </size> </property> <property name="maximumSize"> <size> - <width>50</width> - <height>16777215</height> + <width>24</width> + <height>24</height> </size> </property> + <property name="toolTip"> + <string>Open mesh...</string> + </property> <property name="text"> - <string>Add</string> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/open-icon.png</normaloff>:/Images/open-icon.png</iconset> </property> </widget> </item> <item> <widget class="QPushButton" name="saveMeshPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>50</width> - <height>0</height> + <width>24</width> + <height>24</height> </size> </property> <property name="maximumSize"> <size> - <width>50</width> - <height>16777215</height> + <width>24</width> + <height>24</height> </size> </property> + <property name="toolTip"> + <string>Save mesh...</string> + </property> <property name="text"> - <string>Save</string> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/save-icon.png</normaloff>:/Images/save-icon.png</iconset> </property> </widget> </item> <item> <widget class="QPushButton" name="removeMeshPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>50</width> - <height>0</height> + <width>24</width> + <height>24</height> </size> </property> <property name="maximumSize"> <size> - <width>50</width> - <height>16777215</height> + <width>24</width> + <height>24</height> </size> </property> + <property name="toolTip"> + <string>Remove mesh</string> + </property> <property name="text"> - <string>Remove</string> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/delete-icon.png</normaloff>:/Images/delete-icon.png</iconset> </property> </widget> </item> @@ -136,6 +181,8 @@ <header>MshView.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/DataView/MshView.cpp b/Gui/DataView/MshView.cpp index a56acffb075..be9b29eb765 100644 --- a/Gui/DataView/MshView.cpp +++ b/Gui/DataView/MshView.cpp @@ -15,6 +15,7 @@ #include "MshItem.h" #include "MshModel.h" #include "OGSError.h" +#include "ImportFileTypes.h" #include <QHeaderView> #include "VtkMeshSource.h" @@ -49,25 +50,32 @@ void MshView::updateView() resizeColumnToContents(i); } -void MshView::addMeshAction() +void MshView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected ) { - QSettings settings; - QString fileName = - QFileDialog::getOpenFileName(this, "Select mesh file", settings.value( - "lastOpenedFileDirectory").toString(), - "OpenGeosys mesh files (*.vtu *.msh);;All files (* *.*)"); - if (!fileName.isEmpty()) + Q_UNUSED(deselected); + if (!selected.isEmpty()) { - std::string name = fileName.toStdString(); - FileIO::MeshIO meshIO; - MeshLib::Mesh* msh = meshIO.loadMeshFromFile(name); - if (msh) + const QModelIndex idx = *(selected.indexes().begin()); + const TreeItem* tree_item = static_cast<TreeModel*>(this->model())->getItem(idx); + + const MshItem* list_item = dynamic_cast<const MshItem*>(tree_item); + if (list_item) { - static_cast<MshModel*>(this->model())->addMesh(msh); - QDir dir = QDir(fileName); - settings.setValue("lastOpenedFileDirectory", dir.absolutePath()); + emit enableSaveButton(true); + emit enableRemoveButton(true); + } + else + { + emit enableSaveButton(false); + emit enableRemoveButton(false); } } + //emit itemSelectionChanged(selected, deselected); + //return QTreeView::selectionChanged(selected, deselected); +} +void MshView::addMesh() +{ + emit openMeshFile(ImportFileType::OGS_MSH); } void MshView::removeMesh() @@ -131,7 +139,7 @@ void MshView::openMshEditDialog() meshEdit.exec(); } -int MshView::writeMeshToFile() const +int MshView::writeToFile() const { QModelIndex index = this->selectionModel()->currentIndex(); @@ -201,12 +209,6 @@ void MshView::checkMeshQuality () } /* - void DataView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected ) - { - emit itemSelectionChanged(selected, deselected); - return QTreeView::selectionChanged(selected, deselected); - } - void DataView::selectionChangedFromOutside( const QItemSelection &selected, const QItemSelection &deselected ) { QItemSelectionModel* selModel = this->selectionModel(); diff --git a/Gui/DataView/MshView.h b/Gui/DataView/MshView.h index 356437b8b9b..b03c0db719e 100644 --- a/Gui/DataView/MshView.h +++ b/Gui/DataView/MshView.h @@ -42,9 +42,8 @@ public slots: void updateView(); protected slots: - /// Is called when the selection of this view changes. Emits a the signal - /// itemSelectionChanged() - //void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + /// Is called when the selection of this view changes. + void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); /// Selects items without sending signals. //void selectionChangedFromOutside(const QItemSelection &selected, @@ -61,7 +60,7 @@ private slots: void openMshEditDialog(); /// Adds a new mesh. - void addMeshAction(); + void addMesh(); void addDIRECTSourceTerms(); @@ -74,7 +73,7 @@ private slots: //void removeAllMeshes(); /// Calls the FileDialog to save a mesh to a file. - int writeMeshToFile() const; + int writeToFile() const; /** * checks the mesh quality @@ -82,6 +81,9 @@ private slots: void checkMeshQuality(); signals: + void enableSaveButton(bool); + void enableRemoveButton(bool); + void openMeshFile(int); void qualityCheckRequested(VtkMeshSource*); void requestCondSetupDialog(const std::string&, const GeoLib::GEOTYPE, const std::size_t, bool on_points); void requestMeshRemoval(const QModelIndex&); @@ -91,7 +93,7 @@ signals: /* void itemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - void itemSelectionChangedFromOutside(const QItemSelection &selected, + //void itemSelectionChangedFromOutside(const QItemSelection &selected, const QItemSelection &deselected); */ }; diff --git a/Gui/DataView/StationTabWidget.cpp b/Gui/DataView/StationTabWidget.cpp index a159b1fd587..3a08a342d4e 100644 --- a/Gui/DataView/StationTabWidget.cpp +++ b/Gui/DataView/StationTabWidget.cpp @@ -16,4 +16,10 @@ StationTabWidget::StationTabWidget( QWidget* parent /*= 0*/ ) : QWidget(parent) { setupUi(this); + + connect(this->openStnPushButton, SIGNAL(clicked()), this->treeView, SLOT(addStationList())); + connect(this->saveStnPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeToFile())); + connect(this->removeStnPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeStationList())); + connect(this->treeView, SIGNAL(enableSaveButton(bool)), this, SLOT(enableSaveButton(bool))); + connect(this->treeView, SIGNAL(enableRemoveButton(bool)), this, SLOT(enableRemoveButton(bool))); } diff --git a/Gui/DataView/StationTabWidget.h b/Gui/DataView/StationTabWidget.h index 093e6316842..2ca5c415133 100644 --- a/Gui/DataView/StationTabWidget.h +++ b/Gui/DataView/StationTabWidget.h @@ -26,6 +26,10 @@ public: StationTabWidget(QWidget* parent = 0); private: + +private slots: + void enableSaveButton(bool enable) { this->saveStnPushButton->setEnabled(enable); }; + void enableRemoveButton(bool enable) { this->removeStnPushButton->setEnabled(enable); }; }; #endif // STATIONTABWIDGET_H diff --git a/Gui/DataView/StationTabWidgetBase.ui b/Gui/DataView/StationTabWidgetBase.ui index d1badedab01..fa44ece4953 100644 --- a/Gui/DataView/StationTabWidgetBase.ui +++ b/Gui/DataView/StationTabWidgetBase.ui @@ -17,6 +17,125 @@ <property name="margin"> <number>2</number> </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="openStnPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Open observation sites...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/open-icon.png</normaloff>:/Images/open-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="saveStnPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Save observation sites...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/save-icon.png</normaloff>:/Images/save-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeStnPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Remove observation sites</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/delete-icon.png</normaloff>:/Images/delete-icon.png</iconset> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> <item> <widget class="StationTreeView" name="treeView"/> </item> @@ -29,6 +148,8 @@ <header>StationTreeView.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/DataView/StationTreeView.cpp b/Gui/DataView/StationTreeView.cpp index 2cb476f2369..979fac8f734 100644 --- a/Gui/DataView/StationTreeView.cpp +++ b/Gui/DataView/StationTreeView.cpp @@ -22,6 +22,7 @@ #include "StationTreeModel.h" #include "StationTreeView.h" #include "StratWindow.h" +#include "ImportFileTypes.h" StationTreeView::StationTreeView(QWidget* parent) : QTreeView(parent) { @@ -37,16 +38,29 @@ void StationTreeView::updateView() setColumnWidth(2,50); } -void StationTreeView::on_Clicked(QModelIndex idx) -{ - qDebug("%d, %d",idx.parent().row(), idx.row()); -} - void StationTreeView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected ) { - emit itemSelectionChanged(selected, deselected); - return QTreeView::selectionChanged(selected, deselected); + Q_UNUSED(deselected); + if (!selected.isEmpty()) + { + const QModelIndex idx = *(selected.indexes().begin()); + const TreeItem* tree_item = static_cast<TreeModel*>(this->model())->getItem(idx); + + const ModelTreeItem* list_item = dynamic_cast<const ModelTreeItem*>(tree_item); + if (list_item->getItem()) + { + emit enableSaveButton(true); + emit enableRemoveButton(true); + } + else + { + emit enableRemoveButton(false); + emit enableSaveButton(false); + } + } + //emit itemSelectionChanged(selected, deselected); + //return QTreeView::selectionChanged(selected, deselected); } void StationTreeView::selectionChangedFromOutside( const QItemSelection &selected, @@ -76,14 +90,14 @@ void StationTreeView::contextMenuEvent( QContextMenuEvent* event ) QMenu menu; QAction* propertyAction = menu.addAction("Display list properties..."); QAction* exportAction = menu.addAction("Export to GMS..."); - QAction* saveAction = menu.addAction("Save to file..."); + //QAction* saveAction = menu.addAction("Save to file..."); menu.addSeparator(); - QAction* removeAction = menu.addAction("Remove station list"); + //QAction* removeAction = menu.addAction("Remove station list"); connect(propertyAction, SIGNAL(triggered()), this, SLOT(showPropertiesDialog())); connect(exportAction, SIGNAL(triggered()), this, SLOT(exportList())); - connect(saveAction, SIGNAL(triggered()), this, SLOT(saveList())); - connect(removeAction, SIGNAL(triggered()), this, SLOT(removeStationList())); + //connect(saveAction, SIGNAL(triggered()), this, SLOT(saveList())); + //connect(removeAction, SIGNAL(triggered()), this, SLOT(removeStationList())); menu.exec(event->globalPos()); } // The current index refers to a station object @@ -138,14 +152,24 @@ void StationTreeView::displayStratigraphy() stratView->show(); } -void StationTreeView::saveList() +void StationTreeView::addStationList() { - TreeItem* item = static_cast<StationTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); - QString listName = item->data(0).toString(); - QString fileName = QFileDialog::getSaveFileName(this, "Save station list", "","*.stn"); - if (!fileName.isEmpty()) - emit stationListSaved(listName, fileName); + emit openStationListFile(ImportFileType::OGS_STN); +} + +void StationTreeView::writeToFile() +{ + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No station list selected."); + else + { + TreeItem* item = static_cast<StationTreeModel*>(model())->getItem(index); + QString listName = item->data(0).toString(); + QString fileName = QFileDialog::getSaveFileName(this, "Save station list", "","*.stn"); + if (!fileName.isEmpty()) + emit stationListSaved(listName, fileName); + } } void StationTreeView::exportList() @@ -188,9 +212,14 @@ void StationTreeView::exportStation() void StationTreeView::removeStationList() { - TreeItem* item = static_cast<StationTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); - emit stationListRemoved((item->data(0).toString()).toStdString()); + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No station list selected."); + else + { + TreeItem* item = static_cast<StationTreeModel*>(model())->getItem(index); + emit stationListRemoved((item->data(0).toString()).toStdString()); + } } void StationTreeView::showPropertiesDialog() diff --git a/Gui/DataView/StationTreeView.h b/Gui/DataView/StationTreeView.h index 47fe2a64229..78a10b3e37a 100644 --- a/Gui/DataView/StationTreeView.h +++ b/Gui/DataView/StationTreeView.h @@ -52,18 +52,21 @@ private: void writeStratigraphiesAsImages(QString listName); private slots: - void on_Clicked(QModelIndex idx); + void addStationList(); void displayStratigraphy(); void exportList(); void exportStation(); void removeStationList(); - void saveList(); + void writeToFile(); void showPropertiesDialog(); void showDiagramPrefsDialog(); signals: + void enableSaveButton(bool); + void enableRemoveButton(bool); void itemSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); + void openStationListFile(int); void propertiesDialogRequested(std::string name); void stationListExportRequested(std::string listName, std::string fileName); void stationListRemoved(std::string name); diff --git a/Gui/Img/delete-icon.png b/Gui/Img/delete-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..253482309d9ec26559fc2bf435e9afdea6158bec GIT binary patch literal 639 zcmV-_0)YLAP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006;Nkl<Zc-muR zpb#)p)qsVJjHWWymg`=hIF%al=g$sgxur}@9+I|JbDkeP5g7gF&uI(;<}fgr$|}q5 zvP?}CIJa)?kB6r&2E{WlYzN8BV_@)9GS*pV6du8GeBQhd&u-jvOJra;jbgx3c9zHX zX$dk+|JWHAxH%Zk?%nZY@7b%tAUPL9t+hr@ZX66helsvi2r=wyX?qg=^RFz50h1XR zJml47*Q*#?aQyxCpMjB&n_=(S6F(XM|7UPAGH3t)<vRllH#@`Ki|2kkx^O)(i-BPW zMi}$~ohqjyxlTb@gX8bFKMel_c)$vnK7VK6ke6h*ee&3kCpR7j<wL!OH5NL6hR7?4 zty2(_=J@mdAH#oUW(Ech28KsZ@BeuI@O@Azl4h(1Gy@G#loMJf_vHu2uXo?TVr)WO z43Bs@e>{BnHmDk(0kuHQs`8@i3_pM8`1|e)!w+FzumbkCpBb2ic^J;~a{svd;AK!F zHZN3gvU_SuimY?|_?d&@?I(s`qCyOHJRCn67#aUJ0S#n({f>b_M1WyGKmU)n|Cxh| z?%mstVnCy+%##dmerc`?R~deZi7?dh@%*@R=Rxpapqz$^;@ZYfpE=lGy<zxfq{pz~ zKl79H^XE~cv4n-$R8>lHSD>(vz>F_new?~}FL(<B!#0qd7tm|gs!Hopd3iY2zj^oJ z!INih?f?Fr#t4IAJ}z@Eap84O?>|eK_vbH4U}dnfdU~3f&bfI0LO|WOZ<tA$Dw&BK Z000)F*%2XP>aYL+002ovPDHLkV1m;pEs+2K literal 0 HcmV?d00001 diff --git a/Gui/Img/icons.qrc b/Gui/Img/icons.qrc index 9992a4241c7..29045b759cf 100644 --- a/Gui/Img/icons.qrc +++ b/Gui/Img/icons.qrc @@ -1,5 +1,9 @@ <RCC> <qresource prefix="Images"> + <file>refresh-icon.png</file> + <file>delete-icon.png</file> + <file>open-icon.png</file> + <file>save-icon.png</file> <file>icon_glass_active.png</file> <file>icon_hlight_active.png</file> <file>icon_persp_active.png</file> diff --git a/Gui/Img/open-icon.png b/Gui/Img/open-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ff530540af800bdf778d99a4f1688527574a6150 GIT binary patch literal 467 zcmV;^0WAKBP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004+Nkl<Zc-muR zpb#)p#Q+x*K}j!bu>>FwVc`G&VCu`a-<RuV-`|YafF;d_Z2@W7l?)937#RNkX88a2 zC&T|gKN$W2@uRC3UzD^RlHPUd{XeV*99!giKw8V#N?2BjmErF%pvIqI4AT7n&v%CJ zAKx;(dHUqz|9`*#GyMGnH2gP^`u%_L_Lt!kRzBIycwtk-Wfe0g9kAxVFpUt+|9^jH z`1cz`e`EOj^BcqKkIW35B647xPwYL=7*lt#f$`kBprdj+CRVTRU1wlnV*~pAAJF?C z|NjHCL1FP9B=+wggM_*<0}DGR*npRJuYG=X|Hehe6U)4Iiz_I(@bd96u(Gq06a)7z zoxjAmZ;tauX*o$h5m6qJqwvhp^NSfbPqJRFtRNU6BEU?NW{@|Rti4vqxT@21u9h5A zk`Uj2k_`C%^FKr9!Y6i&v#T^GTdV)h;pO;Ek^vvSv;E7P^jd&%QlUzxr|#P_R;E8B z8Sv`6$ZfOC`)Z7B8Hy>+x_>Gd8A$WOtFPP}e9CT?P$x4{0svR0$7jSk%i;h4002ov JPDHLkV1gQH=Gp)N literal 0 HcmV?d00001 diff --git a/Gui/Img/oxygen.icons b/Gui/Img/oxygen.icons new file mode 100644 index 00000000000..c27544e010f --- /dev/null +++ b/Gui/Img/oxygen.icons @@ -0,0 +1 @@ +http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org.html \ No newline at end of file diff --git a/Gui/Img/refresh-icon.png b/Gui/Img/refresh-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f0abac679939bd59d71d556a11cfde6dacc9550f GIT binary patch literal 881 zcmV-%1CIQOP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0009xNkl<Zc-n1~ zO=w(I6vzMfzVG?W<V|8bW{espp(WEr+GK_jLi%A<f~(R+NT6B}U3A-)E(*bg*saiw zRYHZPVg+4TR8Wg9QZZ?Yw28J+(xho-GSfPl<h?iVz5Cv~PDTtR=E7Z^bI<v6&i$Q3 zu*1<u_158`;iK8-vl)R1WVSH-=e2LHeP0|e7PrTeXANnDw(2jmTs+);WTYq4BgG=I zhJVA{z|8!Nck|v4pOp*cGi=;1=05E`pM7p$VM`!1EM<H4ANclg?<*-z_)dj^aDt!i z{<u2(^zK)q`IGOAKe#;B5QrR+Tle;L-^m~BPjSvc2tm12#`4NCn9rc=I@;UYAqYa_ zjr$xT6*2Mf<9`KGCz78W8hZ5<p#;9?WAc|tEH5oVbZD*KB=?$wklGf)!2SW~5gqUW z>Qnsu_t#@2)~6;j`L4&iGHvpv*wpkCj3<?K#S!1NAF=B^0N2{3<95co;=K%Y;Kc!` zo(kd+{N?;QMiPVCiH^R#pUY7Nl}ZKk^Y@{Pq0!YZjjR9l-u#;Oo;kuUBoaxaSsK!Y z1gm7h#^ZVg{mQvi?@J%lX`xUpz^Rz7xJaWLQ;xftJal$n?vAi@izNw{Eji!@r{<bL zJmztISLiJgIVhj?cGHU_PT)pe$R>5^9EqBfuDhK=bWjm!m;}`u_7*0h=EdVd8~?)H zUH_S6oroYqTa?}`UpB8in;gq2IypvkNAlKvkDFNIHv2GOMC>NbO1D%nJ6&0fQ-ov* zEmp+v%fV@Dj!k$~pG!@`pw=ZFH8Sp_8e<P_hpmK4a>>5URvH+?Z^$2c{lVL!MiEiu z#!V0nyviM))tNU@&r;d4<+6K*?auiun78k<>Dndl_l5w;BiWJ*&jejO9aa^@v^voU zV8=c9B8TKqu2w~tnZbhPu-~i&ce?b4c?s81+Ztv1I@yyx5dSXPsicK4fzj&1XmP=m z0E#IhR+4$s6V)!x8k36;)=pspOaEIYa;!eJdqVH0I%6kEmME2u8l0$y_<{;LP2APn z#?{JV?Hq2PyyG@*Ide#$35OI-?AWxOnzz8$aTB-jbbIVSO?P0K0AcGg00000NkvXX Hu0mjfa9FvS literal 0 HcmV?d00001 diff --git a/Gui/Img/save-icon.png b/Gui/Img/save-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..46e5e207b0883491221e6cfbca66982df3f66087 GIT binary patch literal 686 zcmV;f0#W^mP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0007YNkl<Zc-p0t zU1$?Q5P;_{$wf4h#3w0%KvC>N9{h!hpdu(miTMAUrq)nVqfx0gRS>mB?1PO}t1&jw z{@9{bQL%^$QmG(<1rbRrQmI7{A@)Hbg(P>k&d%myBffdu><l+E-^|YLN${VK#FxPC zKpKsyTm1njn^OjoB%wfF3tI+8Iyp29y**uERg{Sf7h9$gz+dTS+^7j20(a@`;tB;A zLU8%=`4hyWSHNsG!?o)%i2&7AyBODdf+1M6VD4W{GGORsxac~A!FTT=5p5+vTOuw1 zl{<X|s5vmH14b`TF95iF9UXxi(aQw5+0iZlJGN~nK=r;5cs!mzwRuurV{z)><8Tr> zW36B^nV_rtmH=$ow3z@^dqXhOJ&PvGSiXJ3<`7ih$3~#L4Yz=Ro;$Y%VB`7?6u!K| z3odsl(Pdet0dj|~>!52o<TMq&jg7*<^FE5{y?0jt)_K>me;=|mX_mzy9B}{P0}<g} zy{5>^tMdTk9)QsWiiW~rJmyi~W8tk>xr!Ny$Lhmiv)KwmH12|`s!)6Q2m&;4I-C^y z<k?dJSg~{&MVjzv!Y7VH<CzA?WHN9*(o7JZoXh3lY(pccng)u+LVy=9`vqW0`C<XU zk0(!`g8I5JWOG>rL@1F<Hk*Z(<_K-Wf&dE^>wh&M01M~M&!C~0(ZM^Yt33)TwtB9q zi8|o`u47lDw12DBN*%lzd@BG>yCdi-DY>L5io8E`kSg$`bUIC1!?wA!#}hOUjN_Vp z7)nkz&S?ftz1-z;P4W4B4!hlsKbvB~{mZ&|a;a2mqO+s(=lJ-K{1t;=IGfkM0T8tx UHk7_WD*ylh07*qoM6N<$g3(wu#sB~S literal 0 HcmV?d00001 diff --git a/Gui/VtkAct/VtkCustomInteractorStyle.cpp b/Gui/VtkAct/VtkCustomInteractorStyle.cpp index 3e7988fbd92..4596fbb44af 100644 --- a/Gui/VtkAct/VtkCustomInteractorStyle.cpp +++ b/Gui/VtkAct/VtkCustomInteractorStyle.cpp @@ -177,10 +177,7 @@ void VtkCustomInteractorStyle::OnLeftButtonDown() << " cells in the selection." << std::endl; // check if the underlying object is a mesh and if so, send a signal to the element model for display of information about the picked element. - vtkAlgorithm* data_set = - picker->GetActor()->GetMapper()->GetInputConnection(0, - 0)->GetProducer() - ->GetInputConnection(0,0)->GetProducer(); + vtkAlgorithm* data_set = picker->GetActor()->GetMapper()->GetInputConnection(0, 0)->GetProducer()->GetInputConnection(0,0)->GetProducer(); VtkMeshSource* source = dynamic_cast<VtkMeshSource*>(data_set); if (source) emit elementPicked(source->GetMesh(), picker->GetCellId()); diff --git a/Gui/VtkVis/VtkAlgorithmProperties.cpp b/Gui/VtkVis/VtkAlgorithmProperties.cpp index f5840196c29..88d7f84bcde 100644 --- a/Gui/VtkVis/VtkAlgorithmProperties.cpp +++ b/Gui/VtkVis/VtkAlgorithmProperties.cpp @@ -51,18 +51,23 @@ vtkLookupTable* VtkAlgorithmProperties::GetLookupTable(const QString& array_name return NULL; } +void VtkAlgorithmProperties::RemoveLookupTable(const QString& array_name) +{ + std::map<QString, vtkLookupTable*>::iterator it = _lut.find(array_name); + if (it != _lut.end()) + { + it->second->Delete(); + _lut.erase(it); + } +} + void VtkAlgorithmProperties::SetLookUpTable(const QString &array_name, vtkLookupTable* lut) { lut->Build(); if (array_name.length() > 0) { - std::map<QString, vtkLookupTable*>::iterator it = _lut.find(array_name); - if (it != _lut.end()) - { - it->second->Delete(); - _lut.erase(it); - } + this->RemoveLookupTable(array_name); _lut.insert( std::pair<QString, vtkLookupTable*>(array_name, lut) ); _activeAttributeName = array_name; } diff --git a/Gui/VtkVis/VtkAlgorithmProperties.h b/Gui/VtkVis/VtkAlgorithmProperties.h index 1a31365dda0..6330aacc12c 100644 --- a/Gui/VtkVis/VtkAlgorithmProperties.h +++ b/Gui/VtkVis/VtkAlgorithmProperties.h @@ -154,6 +154,9 @@ public: /// @brief Returns the colour lookup table (if one has been assigned). vtkLookupTable* GetLookupTable(const QString& array_name); + /// @brief Removes the lookup table for the given scalar. + void RemoveLookupTable(const QString& array_name); + /// @brief Sets a colour lookup table for the given scalar array of the VtkVisPipelineItem. void SetLookUpTable(const QString &array_name, vtkLookupTable* lut); diff --git a/Gui/VtkVis/VtkVisTabWidget.cpp b/Gui/VtkVis/VtkVisTabWidget.cpp index 280fb057417..3940caf52c4 100644 --- a/Gui/VtkVis/VtkVisTabWidget.cpp +++ b/Gui/VtkVis/VtkVisTabWidget.cpp @@ -18,6 +18,7 @@ #include <vtkActor.h> #include <vtkImageChangeInformation.h> +#include <vtkLookupTable.h> #include <vtkProperty.h> #include <vtkTransform.h> #include <vtkTransformFilter.h> @@ -55,6 +56,14 @@ VtkVisTabWidget::VtkVisTabWidget( QWidget* parent /*= 0*/ ) this, SLOT(SetActiveAttributeOnItem(const QString &))); } +void VtkVisTabWidget::on_arrayResetPushButton_clicked() +{ + VtkAlgorithmProperties* props = _item->getVtkProperties(); + const QString selected_array_name = this->activeScalarComboBox->currentText(); + props->RemoveLookupTable(selected_array_name); + _item->SetActiveAttribute(selected_array_name); +} + void VtkVisTabWidget::setActiveItem( VtkVisPipelineItem* item ) { if (item) @@ -131,25 +140,6 @@ void VtkVisTabWidget::setActiveItem( VtkVisPipelineItem* item ) this->buildProportiesDialog(item); - // - ///* Integrating colour tables into property-window (test!) */ - //VtkStationSource* test = dynamic_cast<VtkStationSource*>(_item->algorithm()); - //if (test) - //{ - // std::map<std::string, GeoLib::Color> colors = test->getColorLookupTable(); - // if (!colors.empty()) - // { - // ColorTableModel* ctm = new ColorTableModel(colors); - // ColorTableView* ctv = new ColorTableView(); - // ctv->setModel(ctm); - // ctv->setItemDelegate(new ColorTableViewDelegate); - // vbox->addWidget(ctv); - // ctv->resizeRowsToContents(); - // } - //} - - /**/ - emit requestViewUpdate(); } else @@ -335,8 +325,7 @@ void VtkVisTabWidget::buildProportiesDialog(VtkVisPipelineItem* item) foreach (QVariant variant, values) valuesAsString.push_back(variant.toString()); - vectorEdit = new VtkAlgorithmPropertyVectorEdit(valuesAsString, - key, + vectorEdit = new VtkAlgorithmPropertyVectorEdit(valuesAsString, key, values.front().type(), algProps); connect(vectorEdit, SIGNAL(editingFinished()), this, @@ -355,9 +344,22 @@ void VtkVisTabWidget::buildScalarArrayComboBox(VtkVisPipelineItem* item) this->activeScalarComboBox->clear(); this->activeScalarComboBox->insertItems(0, dataSetAttributesList); this->activeScalarComboBox->blockSignals(false); + QString active_array_name = item->GetActiveAttribute(); QList<QString>::iterator it = dataSetAttributesList.begin(); - if (item->GetActiveAttribute().count() == 0) + if (active_array_name.length() == 0) item->SetActiveAttribute(*it); + else + { + unsigned nArrays (dataSetAttributesList.size()); + int idx(0); + for (it=dataSetAttributesList.begin(); it!=dataSetAttributesList.end(); ++it) + if (active_array_name.compare((*it).right((*it).length()-2))==0) + { + this->activeScalarComboBox->setCurrentIndex(idx); + break; + } + else idx++; + } } void VtkVisTabWidget::SetActiveAttributeOnItem( const QString &name ) diff --git a/Gui/VtkVis/VtkVisTabWidget.h b/Gui/VtkVis/VtkVisTabWidget.h index 10e7061348c..24196144fab 100644 --- a/Gui/VtkVis/VtkVisTabWidget.h +++ b/Gui/VtkVis/VtkVisTabWidget.h @@ -34,6 +34,7 @@ protected slots: /// Updates the property panels to show informations on the given VtkVisPipelineItem. void setActiveItem(VtkVisPipelineItem* item); + void on_arrayResetPushButton_clicked(); void on_diffuseColorPickerButton_colorPicked(QColor color); void on_visibleEdgesCheckBox_stateChanged(int state); void on_edgeColorPickerButton_colorPicked(QColor color); diff --git a/Gui/VtkVis/VtkVisTabWidgetBase.ui b/Gui/VtkVis/VtkVisTabWidgetBase.ui index 5bad5ace50b..cd1c2f1a71a 100644 --- a/Gui/VtkVis/VtkVisTabWidgetBase.ui +++ b/Gui/VtkVis/VtkVisTabWidgetBase.ui @@ -65,7 +65,7 @@ <property name="margin"> <number>3</number> </property> - <item row="0" column="1"> + <item row="0" column="1" colspan="2"> <widget class="ColorPickerPushButton" name="diffuseColorPickerButton"> <property name="text"> <string>(255,255,255)</string> @@ -86,7 +86,7 @@ </property> </widget> </item> - <item row="3" column="1"> + <item row="3" column="1" colspan="2"> <widget class="ColorPickerPushButton" name="edgeColorPickerButton"> <property name="text"> <string>(255, 255, 255)</string> @@ -100,7 +100,7 @@ </property> </widget> </item> - <item row="4" column="1"> + <item row="4" column="1" colspan="2"> <widget class="QValueTooltipSlider" name="opacitySlider"> <property name="maximum"> <number>100</number> @@ -123,6 +123,35 @@ </property> </widget> </item> + <item row="1" column="2"> + <widget class="QPushButton" name="arrayResetPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/refresh-icon.png</normaloff>:/Images/refresh-icon.png</iconset> + </property> + </widget> + </item> </layout> </widget> </item> @@ -375,6 +404,8 @@ <header>QValueTooltipSlider.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/mainwindow.cpp b/Gui/mainwindow.cpp index 431134a13ac..c034f279754 100644 --- a/Gui/mainwindow.cpp +++ b/Gui/mainwindow.cpp @@ -140,6 +140,8 @@ MainWindow::MainWindow(QWidget* parent /* = 0*/) _vtkVisPipeline = new VtkVisPipeline(visualizationWidget->renderer()); // station model connects + connect(stationTabWidget->treeView, SIGNAL(openStationListFile(int)), + this, SLOT(open(int))); connect(stationTabWidget->treeView, SIGNAL(stationListExportRequested(std::string, std::string)), this, SLOT(exportBoreholesToGMS(std::string, std::string))); // export Stationlist to GMS connect(stationTabWidget->treeView, SIGNAL(stationListRemoved(std::string)), _geoModels, @@ -152,6 +154,8 @@ MainWindow::MainWindow(QWidget* parent /* = 0*/) this, SLOT(showDiagramPrefsDialog(QModelIndex &))); // connect treeview to diagramview // geo model connects + connect(geoTabWidget->treeView, SIGNAL(openGeometryFile(int)), + this, SLOT(open(int))); connect(geoTabWidget->treeView, SIGNAL(listRemoved(std::string, GeoLib::GEOTYPE)), _geoModels, SLOT(removeGeometry(std::string, GeoLib::GEOTYPE))); connect(geoTabWidget->treeView, SIGNAL(geometryMappingRequested(const std::string&)), @@ -179,6 +183,8 @@ MainWindow::MainWindow(QWidget* parent /* = 0*/) // Setup connections for mesh models to GUI + connect(mshTabWidget->treeView, SIGNAL(openMeshFile(int)), + this, SLOT(open(int))); connect(mshTabWidget->treeView, SIGNAL(requestMeshRemoval(const QModelIndex &)), _meshModels, SLOT(removeMesh(const QModelIndex &))); connect(mshTabWidget->treeView, SIGNAL(requestMeshRemoval(const QModelIndex &)), @@ -487,7 +493,7 @@ void MainWindow::loadFile(ImportFileType::type t, const QString &fileName) QFileInfo fi(fileName); std::string base = fi.absoluteDir().absoluteFilePath(fi.completeBaseName()).toStdString(); - if (t == ImportFileType::OGS) + if (t == ImportFileType::OGS || t == ImportFileType::OGS_GEO || t == ImportFileType::OGS_STN || t == ImportFileType::OGS_MSH) { if (fi.suffix().toLower() == "gli") { diff --git a/Gui/mainwindow.ui b/Gui/mainwindow.ui index e056d6667ee..f965c4eb1e3 100644 --- a/Gui/mainwindow.ui +++ b/Gui/mainwindow.ui @@ -231,6 +231,9 @@ </attribute> <widget class="QWidget" name="dockWidgetContents_5"> <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="margin"> + <number>1</number> + </property> <item> <widget class="GeoTabWidget" name="geoTabWidget" native="true"> <property name="enabled"> diff --git a/MeshLib/MeshQuality/MeshQualityChecker.cpp b/MeshLib/MeshQuality/MeshQualityChecker.cpp index 83fad02943f..e51f4461e73 100644 --- a/MeshLib/MeshQuality/MeshQualityChecker.cpp +++ b/MeshLib/MeshQuality/MeshQualityChecker.cpp @@ -18,7 +18,7 @@ namespace MeshLib { MeshQualityChecker::MeshQualityChecker(Mesh const* const mesh) : - _min (-1.0), _max (-1.0), _mesh (mesh) + _min (std::numeric_limits<double>::max()), _max (std::numeric_limits<double>::min()), _mesh (mesh) { if (_mesh) _mesh_quality_measure.resize (_mesh->getNElements(), -1.0); diff --git a/MeshLib/MeshQuality/MeshQualityVolume.cpp b/MeshLib/MeshQuality/MeshQualityVolume.cpp index 4f16e76c9f0..41239a466ea 100644 --- a/MeshLib/MeshQuality/MeshQualityVolume.cpp +++ b/MeshLib/MeshQuality/MeshQualityVolume.cpp @@ -37,7 +37,7 @@ void MeshQualityVolume::check() || elem_type == MshElemType::TRIANGLE || elem_type == MshElemType::QUAD) { - _mesh_quality_measure[k] = -1.0; + _mesh_quality_measure[k] = 0.0; continue; } -- GitLab