Salome HOME
IPAL52828: No Creation Info available for a GEOM object imported from XAO file
[modules/geom.git] / src / GEOMGUI / GEOMGUI_CreationInfoWdg.cxx
index 0ed97a6df203ba848972d3e7e36493a7684ebce9..35a59ccfb6c2ab2022e1589a4577e9b64d7739d4 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // Author    : Edward AGAPOV (eap)
 
 #include "GEOMGUI_CreationInfoWdg.h"
+#include "GEOMImpl_Types.hxx"
 
-#include <SalomeApp_Application.h>
 #include <SUIT_Desktop.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SalomeApp_Application.h>
 
 #include <QString>
 #include <QLabel>
 GEOMGUI_CreationInfoWdg::GEOMGUI_CreationInfoWdg( SalomeApp_Application* app )
 //:QWidget( app->desktop() )
 {
-  setWindowTitle(tr("CREATION_INFO_TITLE"));
-
-  QFrame* frame = new QFrame( this );
-
-  QVBoxLayout* myLayout = new QVBoxLayout( this );
-  myLayout->addWidget( frame );
-  myLayout->setMargin(0);
+  setWindowTitle( tr( "CREATION_INFO_TITLE" ) );
 
-  QGroupBox* operationGB = new QGroupBox( tr( "OPERATION" ), frame );
-
-  myIconLbl      = new QLabel( operationGB );
-  myOperaionLnEd = new QLineEdit( operationGB );
-  myOperaionLnEd->setReadOnly( true );
-  myParamsTreeWd = new QTreeWidget( frame );
+  myParamsTreeWd = new QTreeWidget( this );
   myParamsTreeWd->setColumnCount( 2 );
   myParamsTreeWd->setHeaderLabels( QStringList() << tr( "PARAMETER" ) << tr( "VALUE" ) );
   myParamsTreeWd->header()->setStretchLastSection( true );
   myParamsTreeWd->header()->setResizeMode( 0, QHeaderView::ResizeToContents );
 
-  QHBoxLayout* operationLay = new QHBoxLayout( operationGB );
-  operationLay->addWidget( myIconLbl );
-  operationLay->addWidget( myOperaionLnEd );
-  operationLay->setMargin(5);
-
-  QVBoxLayout* aLayout = new QVBoxLayout( frame );
-  aLayout->addWidget( operationGB );
+  QVBoxLayout* aLayout = new QVBoxLayout( this );
   aLayout->addWidget( myParamsTreeWd );
+  aLayout->setMargin(11);
 
   // get a free dockable window id
-  myWindowID = 1;
+  myWindowID = 10;
   while( app->dockWindow( myWindowID ))
     ++myWindowID;
   ++myWindowID; // pb when a GEOM is a sole module: CreationInfoWdg replaces Python console
 }
 
-void GEOMGUI_CreationInfoWdg::setOperation(const QPixmap& icon, const QString& name)
+QTreeWidgetItem* GEOMGUI_CreationInfoWdg::addOperation(const QPixmap& icon, const QString& name)
 {
-  myIconLbl->setPixmap( icon );
-  myOperaionLnEd->setText( name );
-  myParamsTreeWd->clear();
+  QTreeWidgetItem* item = new QTreeWidgetItem( myParamsTreeWd );
 
+  item->setIcon( 0, icon );
+  item->setText( 0, name );
   if ( name.isEmpty() )
-    myOperaionLnEd->setText( tr("NO_INFO"));
+    item->setText( 0, tr("NO_INFO"));
+
+  item->setExpanded( true );
+
+  return item;
 }
 
-void GEOMGUI_CreationInfoWdg::addParam (const QString& name, const QString& value)
+void GEOMGUI_CreationInfoWdg::addParam (QTreeWidgetItem* operation,
+                                        const QString&   name,
+                                        const QString&   value)
 {
-  QTreeWidgetItem* item = new QTreeWidgetItem( myParamsTreeWd );
+  QTreeWidgetItem* item = new QTreeWidgetItem( operation );
 
   //item->setFlags( Qt::NoItemFlags );
   item->setExpanded( true );
@@ -95,8 +89,6 @@ void GEOMGUI_CreationInfoWdg::addParam (const QString& name, const QString& valu
 
 void GEOMGUI_CreationInfoWdg::clear()
 {
-  myIconLbl->setPixmap( QPixmap() );
-  myOperaionLnEd->setText( "" );
   myParamsTreeWd->clear();
 }
 
@@ -104,3 +96,60 @@ GEOMGUI_CreationInfoWdg::~GEOMGUI_CreationInfoWdg()
 {
   //std::cout<<"~GEOMGUI_CreationInfoWdg"<<std::endl;
 }
+
+void GEOMGUI_CreationInfoWdg::setInfo( GEOM::CreationInformationSeq& info )
+{
+  clear();
+
+  QPixmap icon;
+  QString operationName;
+
+  try
+  {
+    if ( &info && info.length() > 0 )
+    {
+      SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+      for ( int j = 0, nb = info.length(); j < nb; ++j )
+      {
+        QString name = info[j].operationName.in();
+        if ( !name.isEmpty() )
+        {
+          // get plugin_name if any
+          QString plugin_name;
+          for ( size_t i = 0; i < info[j].params.length(); ++i )
+          {
+            QString value = info[j].params[i].name.in();
+            if ( value == PLUGIN_NAME )
+              plugin_name = info[j].params[i].value.in();
+          }
+          // get icon
+          QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
+          if ( name.startsWith( "Import"))
+            icon = resMgr->loadPixmap( "GEOM", tr("ICO_IMPORT_SHAPE"), true );
+          else
+            icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
+
+          // translate operation name
+          operationName = tr( ("MEN_"+name).toLatin1().constData() );
+          if ( operationName.startsWith( "MEN_" ))
+            operationName = name; // no translation
+
+          QTreeWidgetItem* operation = addOperation( icon, operationName );
+
+          // add parameters
+          for ( size_t i = 0; i < info[j].params.length(); ++i )
+            addParam( operation,
+                      info[j].params[i].name.in(),
+                      info[j].params[i].value.in() );
+        }
+      }
+    }
+    else
+    {
+      addOperation( icon, operationName );
+    }
+  }
+  catch (...)
+  {
+  }
+}