]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
[bos #32523][EDF] SALOME on Demand GUI. Added a message box on pressing the Ext Remov...
authorkosta <kleontev@Debian11.kleontev.virtualbox.org>
Mon, 13 Feb 2023 19:31:15 +0000 (20:31 +0100)
committerKonstantin LEONTEV <konstantin.leontev@opencascade.com>
Wed, 8 Mar 2023 13:06:13 +0000 (14:06 +0100)
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Application.h
src/LightApp/resources/LightApp_msg_en.ts
src/LightApp/resources/LightApp_msg_fr.ts
src/LightApp/resources/LightApp_msg_ja.ts

index c9c4582bfacc9e229681e173ce23a1dc261a8eee..b739a1a529baa73e57297ead40f4bed269f1d423 100644 (file)
@@ -932,10 +932,9 @@ void LightApp_Application::onExtAdding()
 
   // It should be set on the app start
   auto extRootDir = getenv(salomeAppDir);
-  ASSERT(extRootDir)
   if (!extRootDir)
   {
-    MESSAGE("Cannot get SALOME_APPLICATION_DIR env variable! Cancel adding selected extensions.");
+    SUIT_MessageBox::warning(desktop(), tr("WRN_WARNING"), tr("WRN_SALOME_APPLICATION_DIR"));
     return;
   }
   SCRUTE(extRootDir);
@@ -986,30 +985,6 @@ void LightApp_Application::onExtAdding()
       QString extName = extFileInfo.baseName();
       moduleAction->insertExtension(extName);
     }
-
-    // read description file (.salomex) and check it's OK
-    // QtxResourceMgr resMgr;
-    // if ( !resMgr.addResource( path ) )
-    // {
-    //   SUIT_MessageBox::warning( desktop(), tr( "WRN_WARNING" ), tr( "WRN_MODULE_BAD_SALOMEX_FILE" ).arg( path ) );
-    //   continue;
-    // }
-    // // retrieve module name
-    // QString name = resMgr.stringValue( "General", "name" ).trimmed();
-    // if ( name.isEmpty() )
-    // {
-    //   SUIT_MessageBox::warning( desktop(), tr( "WRN_WARNING" ), tr( "WRN_MODULE_EMPTY_NAME" ).arg( path ) );
-    //   continue;
-    // }
-    // // retrieve root directory
-    // QString root = resMgr.stringValue( "General", "root" ).trimmed();
-    // if ( root.isEmpty() )
-    // {
-    //   SUIT_MessageBox::warning( desktop(), tr( "WRN_WARNING" ), tr( "WRN_MODULE_EMPTY_ROOT" ).arg( path ) );
-    //   continue;
-    // }
-
-    //addUserModule( name, root, true );
   }
 }
 
@@ -1109,6 +1084,47 @@ bool LightApp_Application::addUserModule( const QString& name, const QString& ro
   return true;
 }
 
+/*!Remove user module from UI.*/
+void LightApp_Application::removeUserModule(const QString& moduleInnerName, LightApp_ModuleAction* moduleAction)
+{
+  MESSAGE("Remove a module from UI...");
+  SCRUTE(moduleInnerName.toStdString());
+
+  // There is a some confusion point, because now we have a module's 'inner' name
+  // from the extension's salomexd file.
+  // But, in the next GUI methods we need to use a module title (user name).
+  // For example, PYHELLO (inner name) and PyHello (user name to display in GUI).
+  // Then, from the inner module's name we need to get a user one.
+  QString moduleUserName = moduleTitle(moduleInnerName);
+  SCRUTE(moduleUserName.toStdString());
+
+  // Set current state in modules combo box
+  // Don't confuse again, because activeModule()->moduleName() returns a module title, not an inner one!
+  if (activeModule() && activeModule()->moduleName() == moduleUserName)
+    activateModule("");
+
+  // Remove from "Modules" menu and toolbar
+  if (moduleAction)
+  {
+    moduleAction->removeModule(moduleUserName);
+  }
+
+  // Remove Help menu items
+  removeHelpItems(moduleUserName);
+
+  // Remove Preferences
+  LightApp_Preferences* prefs = preferences();
+  if (prefs)
+    prefs->removeModule(moduleUserName);
+
+  // Remove settings
+  // Here we use an inner module name!
+  QStringList customModules = resourceMgr()->stringValue("launch", "user_modules").split(";", QString::SkipEmptyParts);
+  customModules.removeAll(moduleInnerName);
+  resourceMgr()->setValue("launch", "user_modules", customModules.join(";"));
+  removeModuleInfo(moduleInnerName);
+}
+
 /*!On module removing action.*/
 void LightApp_Application::onExtRemoving(const QString& title)
 {
@@ -1116,12 +1132,37 @@ void LightApp_Application::onExtRemoving(const QString& title)
   std::string extName = title.toStdString();
   SCRUTE(extName);
 
+  // Ask user if he's ready to completely remove an extension and all its modules.
+  int answer = SUIT_MessageBox::question(
+    desktop(),
+    tr("TLT_REMOVE_EXTENSION"),
+    tr("QUE_REMOVE_EXTENSION").arg(title),
+    SUIT_MessageBox::Ok | SUIT_MessageBox::Cancel,
+    SUIT_MessageBox::Ok
+  );
+
+  if (answer == SUIT_MessageBox::Cancel)
+  {
+    MESSAGE("Removing of an extension was cancelled");
+    return; // cancelled
+  }
+  
+  if (activeStudy() && activeStudy()->isModified() && !onSaveDoc())
+  {
+    // doc is not saved, or saving cancelled
+    SUIT_MessageBox::warning(
+      desktop(),
+      tr("WRN_WARNING"), tr("WRN_CANCEL_REMOVE_EXTENSION_UNSAVE").arg(title)
+    );
+
+    return;
+  }
+
   // It should be set on the app start
   auto extRootDir = getenv(salomeAppDir);
-  ASSERT(extRootDir)
   if (!extRootDir)
   {
-    MESSAGE("Cannot get SALOME_APPLICATION_DIR env variable! Cancel adding selected extensions.");
+    SUIT_MessageBox::warning(desktop(), tr("WRN_WARNING"), tr("WRN_SALOME_APPLICATION_DIR"));
     return;
   }
   SCRUTE(extRootDir);
@@ -1133,13 +1174,16 @@ void LightApp_Application::onExtRemoving(const QString& title)
       extensionRemover, (char*)"remove_salomex", (char*)"ss", extRootDir, extName.c_str());
   if (!removedModules || removedModules == Py_None)
   {
-    SUIT_MessageBox::warning(desktop(), tr("WRN_WARNING"), tr("WRN_FAILED_REMOVE_EXTENSION").arg(title) );
+    SUIT_MessageBox::warning(desktop(), tr("WRN_WARNING"), tr("WRN_FAILED_REMOVE_EXTENSION").arg(title));
     return;
   }
 
   // We need it to remove ext and modules from UI
   LightApp_ModuleAction* moduleAction = qobject_cast<LightApp_ModuleAction*>(action(ModulesListId));
-  ASSERT(moduleAction);
+  if (!moduleAction)
+  {
+    MESSAGE("Cannot get a pointer to LightApp_ModuleAction! Removing from menue and toolbars will skipped.");
+  }
 
   // Module's content was already removed on python remove_salomex call,
   // then all we do next - just remove UI items.
@@ -1147,42 +1191,9 @@ void LightApp_Application::onExtRemoving(const QString& title)
   {
     // Get the current module's name
     auto moduleNameItem = PyList_GetItem(removedModules, pos);
-    QString moduleInnerName(PyUnicode_AsUTF8(moduleNameItem));
-    SCRUTE(moduleInnerName.toStdString());
-
-    // There is a some confusion point, because now we have a module's 'inner' name
-    // from the extension's salomexd file.
-    // But, in the next GUI methods we need to use a module title (user name).
-    // For example, PYHELLO (inner name) and PyHello (user name to display in GUI).
-    // Then, from the inner module's name we need to get a user one.
-    QString moduleUserName = moduleTitle(moduleInnerName);
-    SCRUTE(moduleUserName.toStdString());
-
-    // Set current state in modules combo box
-    // Don't confuse again, because activeModule()->moduleName() returns a module title, not an inner one!
-    if (activeModule() && activeModule()->moduleName() == moduleUserName)
-      activateModule("");
-
-    // Remove from "Modules" menu and toolbar
-    if (moduleAction)
-    {
-      moduleAction->removeModule(moduleUserName);
-    }
-
-    // Remove Help menu items
-    removeHelpItems(moduleUserName);
-
-    // Remove Preferences
-    LightApp_Preferences* prefs = preferences();
-    if (prefs)
-      prefs->removeModule(moduleUserName);
+    const QString moduleInnerName(PyUnicode_AsUTF8(moduleNameItem));
 
-    // Remove settings
-    // Here we use an inner module name!
-    QStringList customModules = resourceMgr()->stringValue("launch", "user_modules").split(";", QString::SkipEmptyParts);
-    customModules.removeAll(moduleInnerName);
-    resourceMgr()->setValue("launch", "user_modules", customModules.join(";"));
-    removeModuleInfo(moduleInnerName);
+    removeUserModule(moduleInnerName, moduleAction);
   }
 
   // Remove an ext from UI
index 027ca395bb4495241554b85941c0591007c476d2..a45ef0c8b8c12980dd9616a90c0a514da45832ad 100644 (file)
@@ -332,6 +332,7 @@ protected:
 
 private:
   bool                                addUserModule( const QString&, const QString&, bool = false );
+  void                                removeUserModule(const QString& moduleInnerName, LightApp_ModuleAction* moduleAction);
   void                                emptyPreferences( const QString& );
   QList<QToolBar*>                    findToolBars( const QStringList& names = QStringList() );
   void                                createHelpItems( const QString& );
index e9280a4f0716a2eb5cfba0aba73d985bac4c73bc..539ebdbf22cdb0187195e7f0275ef6288ac86c06 100644 (file)
@@ -1251,6 +1251,28 @@ Continue?</translation>
         <source>WRN_FAILED_REMOVE_EXTENSION</source>
         <translation>Failed to remove a salome extension: %1.</translation>
     </message>
+    <message>
+        <source>WRN_SALOME_APPLICATION_DIR</source>
+        <translation>Cannot get SALOME_APPLICATION_DIR env variable!
+Cancel current extensions operation.
+        </translation>
+    </message>
+    <message>
+        <source>TLT_REMOVE_EXTENSION</source>
+        <translation>Remove extension</translation>
+    </message>
+    <message>
+        <source>QUE_REMOVE_EXTENSION</source>
+        <translation>Do you want to completely remove an extension %1 and all its modules and files?
+If you answer &quot;Ok&quot;, you may need to save your study before removal.
+Continue?
+        </translation>
+    </message>
+    <message>
+        <source>WRN_CANCEL_REMOVE_EXTENSION_UNSAVE</source>
+        <translation>Removing of a salome extension %1 was cancelled because current doc is unsaved.
+        </translation>
+    </message>
 </context>
 <context>
     <name>LightApp_Module</name>
index f7ef63c6317a7c6e89f660e2e9e5e4a855e1b0ce..da3460b3b93f8e8d7864cf39b01d8adeae138679 100644 (file)
@@ -1185,6 +1185,28 @@ Le fichier n&apos;existe pas</translation>
         <source>WRN_FAILED_REMOVE_EXTENSION</source>
         <translation>Échec de la suppression d'une extension Salomé: %1.</translation>
     </message>
+    <message>
+        <source>WRN_SALOME_APPLICATION_DIR</source>
+        <translation>Impossible d'obtenir la variable d'environnement SALOME_APPLICATION_DIR!
+Annulez l'opération d'extensions en cours.
+        </translation>
+    </message>
+    <message>
+        <source>TLT_REMOVE_EXTENSION</source>
+        <translation>Supprimer l'extension</translation>
+    </message>
+    <message>
+        <source>QUE_REMOVE_EXTENSION</source>
+        <translation>Voulez-vous supprimer complètement une extension %1 et tous ses modules et fichiers?
+Si vous répondez &quot;Ok&quot;, vous devrez peut-être enregistrer votre étude avant de la supprimer.
+Continuer?
+        </translation>
+    </message>
+    <message>
+        <source>WRN_CANCEL_REMOVE_EXTENSION_UNSAVE</source>
+        <translation>La suppression d'une extension salome %1 a été annulée car la documentation actuelle n'est pas enregistrée.
+        </translation>
+    </message>
     <message>
       <source>WRN_MODULE_BAD_RESDIR</source>
       <translation>Bad or non-existing resources directory:
index 5ba010c306aee4087d11ddeeb76b6670a795766a..ebda4f5a19d71df2be2ed922e2aee09e81a67947 100644 (file)
@@ -1206,15 +1206,37 @@ If you answer &quot;Yes&quot;, you may need to save your study before removal.</
 %1.
 
 Continue?</translation>
-  </message>
-  <message>
-    <source>WRN_FAILED_UNPACK_EXTENSION</source>
-    <translation>ファイルからサロメ拡張機能を解凍できませんでした: %1.</translation>
-  </message>
-  <message>
-    <source>WRN_FAILED_REMOVE_EXTENSION</source>
-    <translation>サロメ エクステンションの削除に失敗しました: %1.</translation>
-  </message>
+    </message>
+    <message>
+      <source>WRN_FAILED_UNPACK_EXTENSION</source>
+      <translation>ファイルからサロメ拡張機能を解凍できませんでした: %1.</translation>
+    </message>
+    <message>
+      <source>WRN_FAILED_REMOVE_EXTENSION</source>
+      <translation>サロメ エクステンションの削除に失敗しました: %1.</translation>
+    </message>
+    <message>
+        <source>WRN_SALOME_APPLICATION_DIR</source>
+        <translation>SALOME_APPLICATION_DIR 環境変数を取得できません!
+現在の拡張操作をキャンセルします.
+        </translation>
+    </message>
+    <message>
+        <source>TLT_REMOVE_EXTENSION</source>
+        <translation>拡張子を削除</translation>
+    </message>
+    <message>
+        <source>QUE_REMOVE_EXTENSION</source>
+        <translation>拡張機能を完全に削除しますか %1 およびそのすべてのモジュールとファイル?
+&quot;Ok&quot; と答えた場合、削除する前にスタディを保存する必要があるかもしれません。
+続く?
+        </translation>
+    </message>
+    <message>
+        <source>WRN_CANCEL_REMOVE_EXTENSION_UNSAVE</source>
+        <translation>サロメ拡張の除去 %1 現在のドキュメントが保存されていないため、キャンセルされました。
+        </translation>
+    </message>
   </context>
   <context>
     <name>LightApp_Module</name>