]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #3224: Provide help button for feature dialog boxes
authorvsv <vsv@opencascade.com>
Thu, 14 May 2020 15:03:38 +0000 (18:03 +0300)
committervsv <vsv@opencascade.com>
Thu, 14 May 2020 15:03:38 +0000 (18:03 +0300)
src/ModuleBase/ModuleBase_Dialog.cpp
src/ModuleBase/ModuleBase_Dialog.h
src/ModuleBase/ModuleBase_IModule.cpp
src/ModuleBase/ModuleBase_IWorkshop.h
src/XGUI/XGUI_ModuleConnector.cpp
src/XGUI/XGUI_ModuleConnector.h
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index 18766dd99a870a07ce9934ab7ff2099c8a4ce511..0b1d254592c00be097ff02da5d17380f1848e14f 100644 (file)
 #include <QPushButton>
 
 
-ModuleBase_Dialog::ModuleBase_Dialog(ModuleBase_IWorkshop* theParent, const QString& theId,
-                                     const std::string& theDescription) :
+ModuleBase_Dialog::ModuleBase_Dialog(ModuleBase_IWorkshop* theParent,
+  const std::string& theDescription) :
   QDialog(theParent->desktop(),
     Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint),
-  myId(theId),
   myDescription(theDescription),
   myWorkshop(theParent),
   myActiveWidget(0)
 {
+  Config_WidgetAPI aApi(myDescription, "");
+  myId = aApi.getProperty("id");
+
+  std::shared_ptr<Config_FeatureMessage> aFeatureInfo = myWorkshop->featureInfo(myId.c_str());
+  myHelpPage = aFeatureInfo->helpFileName();
+
   ModuleBase_WidgetFactory aFactory(myDescription, myWorkshop);
   QString aTitle = ModuleBase_Tools::translate("ModuleBase_Dialog",
       aFactory.widgetAPI()->getProperty(FEATURE_TEXT));
@@ -56,7 +61,7 @@ ModuleBase_Dialog::ModuleBase_Dialog(ModuleBase_IWorkshop* theParent, const QStr
   SessionPtr aMgr = ModelAPI_Session::get();
   std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
 
-  myFeature = aDoc->addFeature(myId.toStdString());
+  myFeature = aDoc->addFeature(myId);
   if (!myFeature.get())
     return;
   Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED));
@@ -65,7 +70,6 @@ ModuleBase_Dialog::ModuleBase_Dialog(ModuleBase_IWorkshop* theParent, const QStr
   QVBoxLayout* aLayout = new QVBoxLayout(this);
   aLayout->setContentsMargins(0, 0, 0, 0);
   aLayout->setSpacing(1);
-  //setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
 
   ModuleBase_PageWidget* aPage = new ModuleBase_PageWidget(this);
   aLayout->addWidget(aPage);
@@ -81,14 +85,17 @@ ModuleBase_Dialog::ModuleBase_Dialog(ModuleBase_IWorkshop* theParent, const QStr
   ModuleBase_Tools::adjustMargins(aBtnLayout);
 
   myButtonsBox = new QDialogButtonBox(
-    QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, aFrame);
+    QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help,
+    Qt::Horizontal, aFrame);
   aBtnLayout->addWidget(myButtonsBox);
 
   myButtonsBox->button(QDialogButtonBox::Ok)->setIcon(QIcon(":pictures/button_ok.png"));
   myButtonsBox->button(QDialogButtonBox::Cancel)->setIcon(QIcon(":pictures/button_cancel.png"));
+  myButtonsBox->button(QDialogButtonBox::Help)->setIcon(QIcon(":pictures/button_help.png"));
 
   connect(myButtonsBox, SIGNAL(accepted()), this, SLOT(accept()));
   connect(myButtonsBox, SIGNAL(rejected()), this, SLOT(reject()));
+  connect(myButtonsBox, SIGNAL(helpRequested()), this, SLOT(onHelpRequest()));
 
   foreach (ModuleBase_ModelWidget* aWidget, myWidgets) {
     initializeWidget(aWidget);
@@ -122,3 +129,8 @@ void ModuleBase_Dialog::accept()
   }
   QDialog::accept();
 }
+
+void ModuleBase_Dialog::onHelpRequest()
+{
+  myWorkshop->showHelpPage(myHelpPage.c_str());
+}
index 7ef0b6e6bb36e953d636286eba7c0b767930c3d9..46f0e7068b12aa2e0c4649a341b15813f8e707e3 100644 (file)
@@ -44,8 +44,7 @@ public:
   /// \param theParent a workshop object instance
   /// \param theId an Id of a feature
   /// \param theDescription an XML description of the feature
-  ModuleBase_Dialog(ModuleBase_IWorkshop* theParent, const QString& theId,
-                    const std::string& theDescription);
+  ModuleBase_Dialog(ModuleBase_IWorkshop* theParent, const std::string& theDescription);
 
   /// Redefinition of virtual method
   virtual void accept();
@@ -54,12 +53,15 @@ protected:
   /// Redefinition of virtual method
   virtual void showEvent(QShowEvent* theEvent);
 
+private slots:
+  void onHelpRequest();
+
 private:
   /// Initialising of the widget
   void initializeWidget(ModuleBase_ModelWidget* theWidget);
 
   /// Id of the feature
-  QString myId;
+  std::string myId;
 
   /// XML description of the feature
   std::string myDescription;
@@ -78,6 +80,8 @@ private:
 
   /// Buttons of the dialog
   QDialogButtonBox* myButtonsBox;
+
+  std::string myHelpPage;
 };
 
 #endif
index 9b584ab63961c1b5c9de35fccd2fbec9f31ce7fc..082df98c177a874bf94e2920b561bf9ace97025d 100644 (file)
@@ -95,7 +95,7 @@ void ModuleBase_IModule::launchModal(const QString& theCmdId)
   SessionPtr aMgr = ModelAPI_Session::get();
   aMgr->startOperation(theCmdId.toStdString());
 
-  ModuleBase_Dialog aDlg(myWorkshop, theCmdId, aXmlCfg);
+  ModuleBase_Dialog aDlg(myWorkshop, aXmlCfg);
   if (aDlg.exec() == QDialog::Accepted)
     aMgr->finishOperation();
   else
index c49dda4ff947cd8ca49ce3b55dede6cc36f64d26..d7480c10e9c986f9160f6a17a657a69e9694735c 100644 (file)
@@ -161,6 +161,9 @@ Q_OBJECT
   //! Returns current state of cancel button
   virtual bool isCancelEnabled() const = 0;
 
+  //! Show help of a current operation
+  virtual void showHelpPage(const QString& thePage) const = 0;
+
 signals:
   /// Signal selection changed.
   void selectionChanged();
index 60896931267bd174d6f51b786e31643f0b0a7901..28a773ec6badb639fdbea5c1e9d2cb8cc4c3e79b 100644 (file)
@@ -261,3 +261,8 @@ bool XGUI_ModuleConnector::isCancelEnabled() const
   }
   return isEnabled;
 }
+
+void XGUI_ModuleConnector::showHelpPage(const QString& thePage) const
+{
+  workshop()->showHelpPage(thePage);
+}
index f21b6e803b5a75c4f87b1fd2cab54b3263138638..f504abfa19c089556f99ac6a92edc0e6e0ef9567 100644 (file)
@@ -145,6 +145,9 @@ Q_OBJECT
   //! Returns current state of cancel button
   virtual bool isCancelEnabled() const;
 
+  //! Show help of a current operation
+  virtual void showHelpPage(const QString& thePage) const;
+
 private:
   QObjectPtrList activeObjects(const QObjectPtrList& theObjList) const;
 
index e1aa196e4da0e4796be8291bfacf3fae7bee403d..42276a0657e5459aaa7b0fa553bfd5c0dbe039d2 100644 (file)
@@ -639,16 +639,22 @@ void XGUI_Workshop::onPreviewActionClicked()
 
 
 //******************************************************
-void XGUI_Workshop::onHelpActionClicked()
+void XGUI_Workshop::onHelpActionClicked() const
 {
   XGUI_OperationMgr* anOperationMgr = operationMgr();
   if (anOperationMgr) {
     ModuleBase_Operation* aOperation = anOperationMgr->currentOperation();
     if (aOperation) {
-      QString aHelpPage = aOperation->helpFileName();
-      if (!aHelpPage.isEmpty()) {
-        QString aDocDir;
-        const QChar aSep = QDir::separator();
+      showHelpPage(aOperation->helpFileName());
+    }
+  }
+}
+
+void XGUI_Workshop::showHelpPage(const QString& thePage) const
+{
+  if (!thePage.isEmpty()) {
+    QString aDocDir;
+    const QChar aSep = QDir::separator();
 //        QString platform;
 //        SUIT_ResourceMgr* aResMgr = ModuleBase_Preferences::resourceMgr();
 //#ifdef WIN32
@@ -659,21 +665,19 @@ void XGUI_Workshop::onHelpActionClicked()
 //        QString aBrowserName = aResMgr->stringValue("ExternalBrowser", platform);
 
 #ifdef HAVE_SALOME
-        QString aDir(getenv("SHAPER_ROOT_DIR"));
-        if (!aDir.isEmpty()) {
-          aDocDir = aDir + aSep + "share" + aSep + "doc" + aSep +
-            "salome" + aSep + "gui" + aSep + "SHAPER";
-        }
+    QString aDir(getenv("SHAPER_ROOT_DIR"));
+    if (!aDir.isEmpty()) {
+      aDocDir = aDir + aSep + "share" + aSep + "doc" + aSep +
+        "salome" + aSep + "gui" + aSep + "SHAPER";
+    }
 #else
-        QString aDir(getenv("CADBUILDER_ROOT_DIR"));
-        aDocDir = aDir + aSep + "doc" + aSep + "gui";
+    QString aDir(getenv("CADBUILDER_ROOT_DIR"));
+    aDocDir = aDir + aSep + "doc" + aSep + "gui";
 #endif
-        QString aFileName = aDocDir + aSep + aHelpPage;
-        if (QFile::exists(aFileName)) {
-          QUrl aUrl = QUrl::fromLocalFile(aFileName);
-          QDesktopServices::openUrl(aUrl);
-        }
-      }
+    QString aFileName = aDocDir + aSep + thePage;
+    if (QFile::exists(aFileName)) {
+      QUrl aUrl = QUrl::fromLocalFile(aFileName);
+      QDesktopServices::openUrl(aUrl);
     }
   }
 }
index 7b69f0341739aca87b8a6634dd3ce0c15c796245..c503990f9671babb5fb79093e419705d31d0d3f5 100644 (file)
@@ -335,6 +335,8 @@ Q_OBJECT
   /// The method updates a Color Scale object in the viewer
   void updateColorScaleVisibility();
 
+  void showHelpPage(const QString& thePage) const;
+
 signals:
   /// Emitted when selection happens in Salome viewer
   void salomeViewerSelection();
@@ -494,7 +496,7 @@ private:
   void onPreviewActionClicked();
 
   /// Called on help button clicked in the property panel.
-  void onHelpActionClicked();
+  void onHelpActionClicked() const;
 
   //! The slot is called only once on resizing of Object Browser
   void onDockSizeChanged();