Salome HOME
SMH: 3.0.0 preparation - merged and adopted version (POLYWORK+HEAD)
[modules/visu.git] / src / VISUGUI / VisuGUI_EditContainerDlg.cxx
index 0ab0238d60774bfaa4978ef1d1b37a108c25ae99..b95257c24ebf689b0232e635418f87f7c082d7ef 100644 (file)
 #include "VisuGUI.h"
 #include "VISU_Table_i.hh"
 
-#include "QAD_Application.h"
-#include "QAD_Desktop.h"
+#include "SalomeApp_Application.h"
+#include "SUIT_Desktop.h"
 
 #include <qlayout.h>
 #include <qcheckbox.h>
 #include <qgroupbox.h>
 #include <qpushbutton.h>
+#include <qlabel.h>
 
 #include CORBA_SERVER_HEADER(VISU_Gen)
 #include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
 
-extern VisuGUI *visuGUI;
+//extern VisuGUI *visuGUI;
 
 using namespace std;
 
@@ -194,53 +195,57 @@ static const char * right_xpm[] = {
 static QPixmap MYRightPix(right_xpm);
 
 
-VisuGUI_EditContainerDlg::VisuGUI_EditContainerDlg()    
-  : QDialog( QAD_Application::getDesktop(), "VisuGUI_EditContainerDlg", true, 
-            WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
+VisuGUI_EditContainerDlg::VisuGUI_EditContainerDlg (QWidget* parent, bool theIsModal)
+     : QDialog(parent, "VisuGUI_EditContainerDlg", theIsModal, WStyle_Customize |
+               WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
 {
-  setCaption( "Edit Plot 2D Presentation" );
-  setSizeGripEnabled( true );
-  QVBoxLayout* TopLayout = new QVBoxLayout(this, 6, 11);
+  if (!theIsModal) {
+    setWFlags(getWFlags() | WDestructiveClose);
+  }
+  setCaption("Edit Plot 2D Presentation");
+  setSizeGripEnabled(true);
+
+  QVBoxLayout* TopLayout = new QVBoxLayout (this, 6, 11);
 
   /***************************************************************/
-  QFrame* aControlFrame = new QFrame(this);
+  QFrame* aControlFrame = new QFrame (this);
   aControlFrame->setFrameStyle(QFrame::Box | QFrame::Sunken);
 
-  QGridLayout* aControlLay = new QGridLayout(aControlFrame);
-  aControlLay->setSpacing( 6 );
-  aControlLay->setMargin( 11 );
-  aControlLay->addRowSpacing( 1, 30 );
-  aControlLay->addRowSpacing( 4, 30 );
-  aControlLay->setRowStretch( 1, 1 );
-  aControlLay->setRowStretch( 4, 1 );
-  aControlLay->addColSpacing( 0, 180 );
-  aControlLay->addColSpacing( 2, 180 );
-
-  QLabel* aSelectLbl = new QLabel(tr("Study"), aControlFrame);
+  QGridLayout* aControlLay = new QGridLayout (aControlFrame);
+  aControlLay->setSpacing(6);
+  aControlLay->setMargin(11);
+  aControlLay->addRowSpacing(1, 30);
+  aControlLay->addRowSpacing(4, 30);
+  aControlLay->setRowStretch(1, 1);
+  aControlLay->setRowStretch(4, 1);
+  aControlLay->addColSpacing(0, 180);
+  aControlLay->addColSpacing(2, 180);
+
+  QLabel* aSelectLbl = new QLabel (tr("Study"), aControlFrame);
   aControlLay->addWidget(aSelectLbl, 0, 0);
 
-  myStudyLst = new QListView(aControlFrame);
+  myStudyLst = new QListView (aControlFrame);
   myStudyLst->setSelectionMode(QListView::Extended);
   myStudyLst->addColumn(tr("Table"), 80);
   myStudyLst->addColumn(tr("Curve"), 50);
   myStudyLst->addColumn(tr(""), 0);
   myStudyLst->setAllColumnsShowFocus(true);
   myStudyLst->setMinimumHeight(130);
-  connect(myStudyLst, SIGNAL( selectionChanged()), this, SLOT( onLeftSelected() ));
+  connect(myStudyLst, SIGNAL(selectionChanged()), this, SLOT(onLeftSelected()));
   aControlLay->addMultiCellWidget(myStudyLst, 1, 4, 0, 0);
-  
-  myRightBtn = new QToolButton(aControlFrame);
+
+  myRightBtn = new QToolButton (aControlFrame);
   myRightBtn->setIconSet(MYRightPix);
   myRightBtn->setEnabled(false);
-  connect(myRightBtn, SIGNAL( clicked()), this, SLOT( onRightClicked() ));
+  connect(myRightBtn, SIGNAL(clicked()), this, SLOT(onRightClicked()));
   aControlLay->addWidget(myRightBtn, 2, 1);
-  
+
   myLeftBtn = new QToolButton(aControlFrame);
   myLeftBtn->setIconSet(MYLeftPix);
   myLeftBtn->setEnabled(false);
-  connect(myLeftBtn, SIGNAL( clicked()), this, SLOT( onLeftClicked() ));
+  connect(myLeftBtn, SIGNAL(clicked()), this, SLOT(onLeftClicked()));
   aControlLay->addWidget(myLeftBtn, 3, 1);
-  
+
   QLabel* aForceLbl = new QLabel(tr("Container"), aControlFrame);
   aControlLay->addWidget(aForceLbl, 0, 2);
 
@@ -250,42 +255,42 @@ VisuGUI_EditContainerDlg::VisuGUI_EditContainerDlg()
   myContainerLst->addColumn(tr("Curve"), 50);
   myContainerLst->addColumn(tr(""), 0);
   myContainerLst->setMinimumWidth(130);
-  connect(myContainerLst, SIGNAL( selectionChanged()), this, SLOT( onRightSelected() ));
+  connect(myContainerLst, SIGNAL(selectionChanged()), this, SLOT(onRightSelected()));
   aControlLay->addMultiCellWidget(myContainerLst, 1, 4, 2, 2);
-  
-  TopLayout->addWidget( aControlFrame );
+
+  TopLayout->addWidget(aControlFrame);
 
   // Common buttons ===========================================================
-  QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
-  GroupButtons->setColumnLayout(0, Qt::Vertical );
-  GroupButtons->layout()->setSpacing( 0 );
-  GroupButtons->layout()->setMargin( 0 );
-  QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
-  GroupButtonsLayout->setAlignment( Qt::AlignTop );
-  GroupButtonsLayout->setSpacing( 6 );
-  GroupButtonsLayout->setMargin( 11 );
-
-  QPushButton* buttonOk = new QPushButton( tr( "&OK" ), GroupButtons, "buttonOk" );
-  buttonOk->setAutoDefault( TRUE );
-  buttonOk->setDefault( TRUE );
-  GroupButtonsLayout->addWidget( buttonOk, 0, 0 );
-  GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
-
-  QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ) , GroupButtons, "buttonCancel" );
-  buttonCancel->setAutoDefault( TRUE );
-  GroupButtonsLayout->addWidget( buttonCancel, 0, 2 );
-
-  TopLayout->addWidget( GroupButtons );
-
-  connect( buttonOk,     SIGNAL( clicked() ),      this, SLOT( accept() ) );
-  connect( buttonCancel, SIGNAL( clicked() ),      this, SLOT( reject() ) );
+  QGroupBox* GroupButtons = new QGroupBox(this, "GroupButtons");
+  GroupButtons->setColumnLayout(0, Qt::Vertical);
+  GroupButtons->layout()->setSpacing(0);
+  GroupButtons->layout()->setMargin(0);
+  QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
+  GroupButtonsLayout->setAlignment(Qt::AlignTop);
+  GroupButtonsLayout->setSpacing(6);
+  GroupButtonsLayout->setMargin(11);
+
+  QPushButton* buttonOk = new QPushButton(tr("&OK"), GroupButtons, "buttonOk");
+  buttonOk->setAutoDefault(TRUE);
+  buttonOk->setDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonOk, 0, 0);
+  GroupButtonsLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1);
+
+  QPushButton* buttonCancel = new QPushButton(tr("&Cancel") , GroupButtons, "buttonCancel");
+  buttonCancel->setAutoDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonCancel, 0, 2);
+
+  TopLayout->addWidget(GroupButtons);
+
+  connect(buttonOk,     SIGNAL(clicked()),      this, SLOT(accept()));
+  connect(buttonCancel, SIGNAL(clicked()),      this, SLOT(reject()));
 }
 
-
-void VisuGUI_EditContainerDlg::initFromPrsObject(VISU::Container_i* theContainer) {
-  SALOMEDS::Study_var aStudy = visuGUI->GetStudyDocument();
+void VisuGUI_EditContainerDlg::initFromPrsObject (VISU::Container_i* theContainer)
+{
+  SALOMEDS::Study_var aStudy = theContainer->GetStudyDocument();
   SALOMEDS::SComponent_var aVisuSO = aStudy->FindComponent("VISU");
-  if (aVisuSO->_is_nil()) {
+  if (CORBA::is_nil(aVisuSO)) {
     return;
   }
   QValueList<CurveStruct> aStudyCurves;
@@ -304,7 +309,7 @@ void VisuGUI_EditContainerDlg::initFromPrsObject(VISU::Container_i* theContainer
     new QListViewItem(myContainerLst, aEntry.TableName, aEntry.CurveName, aEntry.CurveEntry);
   }
   // Find curves in study
-  SALOMEDS::ChildIterator_var aIter = aStudy->NewChildIterator( aVisuSO );
+  SALOMEDS::ChildIterator_var aIter = aStudy->NewChildIterator(aVisuSO);
   for (aIter->InitEx(true); aIter->More(); aIter->Next()) {
     SALOMEDS::SObject_var aSObject = aIter->Value();
     CORBA::Object_var anObject = VISU::SObjectToObject(aSObject);
@@ -324,8 +329,8 @@ void VisuGUI_EditContainerDlg::initFromPrsObject(VISU::Container_i* theContainer
   QValueList<CurveStruct>::iterator it;
   QValueList<CurveStruct>::iterator it2;
   bool isExist = false;
-  for (it = aStudyCurves.begin(); it != aStudyCurves.end(); ++it ) {
-    for (it2 = aContainerCurves.begin(); it2 != aContainerCurves.end(); ++it2 ) {
+  for (it = aStudyCurves.begin(); it != aStudyCurves.end(); ++it) {
+    for (it2 = aContainerCurves.begin(); it2 != aContainerCurves.end(); ++it2) {
       if (isExist = ((*it).CurveEntry == (*it2).CurveEntry))
        break;
     }
@@ -334,18 +339,71 @@ void VisuGUI_EditContainerDlg::initFromPrsObject(VISU::Container_i* theContainer
   }
 }
 
+/*void VisuGUI_EditContainerDlg::initFromPrsObject (VISU::Container_i* theContainer)
+{
+  _PTR(Study) aStudy = theContainer->GetStudyDocument();
+  _PTR(SComponent) aVisuSO = aStudy->FindComponent("VISU");
+  if (!aVisuSO) {
+    return;
+  }
+  QValueList<CurveStruct> aStudyCurves;
+  QValueList<CurveStruct> aContainerCurves;
+  // Find curves in container
+  for (int i = 1; i <= theContainer->GetNbCurves(); i++) {
+    VISU::Curve_i* aCurve = theContainer->GetCurve(i);
+    if (aCurve == NULL) continue;
+    CurveStruct aEntry;
+    aEntry.CurveName = aCurve->GetTitle();
+    aEntry.CurveEntry = aCurve->GetEntry();
+    _PTR(SObject) aTableSO = aStudy->FindObjectID(aCurve->GetTableID());
+    if (!aTableSO) continue;
+    aEntry.TableName = getSObjectName(aTableSO);
+    aContainerCurves.append(aEntry);
+    new QListViewItem(myContainerLst, aEntry.TableName, aEntry.CurveName, aEntry.CurveEntry);
+  }
+  // Find curves in study
+  _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aVisuSO);
+  for (aIter->InitEx(true); aIter->More(); aIter->Next()) {
+    _PTR(SObject) aSObject = aIter->Value();
+    CORBA::Object_var anObject = VISU::ClientSObjectToObject(aSObject);
+    VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject);
+    if (!CORBA::is_nil(aVisuObj)) {
+      if (aVisuObj->GetType() == VISU::TCURVE) {
+       _PTR(SObject) aTableSO = aSObject->GetFather();
+       CurveStruct aEntry;
+       aEntry.TableName = getSObjectName(aTableSO);
+       aEntry.CurveName = getSObjectName(aSObject);
+       aEntry.CurveEntry = aSObject->GetID();
+       aStudyCurves.append(aEntry);
+      }
+    }
+  }
+  //Show Curves which are not in Curve
+  QValueList<CurveStruct>::iterator it;
+  QValueList<CurveStruct>::iterator it2;
+  bool isExist = false;
+  for (it = aStudyCurves.begin(); it != aStudyCurves.end(); ++it) {
+    for (it2 = aContainerCurves.begin(); it2 != aContainerCurves.end(); ++it2) {
+      if (isExist = ((*it).CurveEntry == (*it2).CurveEntry))
+       break;
+    }
+    if (!isExist)
+      new QListViewItem(myStudyLst, (*it).TableName, (*it).CurveName, (*it).CurveEntry);
+  }
+}*/
 
-void VisuGUI_EditContainerDlg::storeToPrsObject(VISU::Container_i* theContainer) {
+void VisuGUI_EditContainerDlg::storeToPrsObject (VISU::Container_i* theContainer)
+{
   theContainer->Clear();
 
-  SALOMEDS::Study_var aStudy = visuGUI->GetStudyDocument();
+  SALOMEDS::Study_var aStudy = theContainer->GetStudyDocument();
   QListViewItem* anItem = myContainerLst->firstChild();
   while (anItem) {
     SALOMEDS::SObject_var aCurveSO = aStudy->FindObjectID(anItem->text(2));
-    if (!aCurveSO->_is_nil()) {
+    if (!CORBA::is_nil(aCurveSO)) {
       CORBA::Object_var aObject = VISU::SObjectToObject(aCurveSO);
       if (!CORBA::is_nil(aObject)) {
-       VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>( VISU::GetServant(aObject).in() );
+       VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aObject).in());
        if (aCurve) theContainer->AddCurve(aCurve->_this());
       }
     }
@@ -353,21 +411,52 @@ void VisuGUI_EditContainerDlg::storeToPrsObject(VISU::Container_i* theContainer)
   }
 }
 
+/*void VisuGUI_EditContainerDlg::storeToPrsObject (VISU::Container_i* theContainer)
+{
+  theContainer->Clear();
+
+  _PTR(Study) aStudy = theContainer->GetStudyDocument();
+  QListViewItem* anItem = myContainerLst->firstChild();
+  while (anItem) {
+    _PTR(SObject) aCurveSO = aStudy->FindObjectID(anItem->text(2));
+    if (aCurveSO) {
+      CORBA::Object_var aObject = VISU::ClientSObjectToObject(aCurveSO);
+      if (!CORBA::is_nil(aObject)) {
+       VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aObject).in());
+       if (aCurve) theContainer->AddCurve(aCurve->_this());
+      }
+    }
+    anItem = anItem->nextSibling();
+  }
+}*/
 
-QString VisuGUI_EditContainerDlg::getSObjectName(SALOMEDS::SObject_var theSObject) {
-  if (theSObject->_is_nil()) return QString("");
+QString VisuGUI_EditContainerDlg::getSObjectName (SALOMEDS::SObject_ptr theSObject)
+{
+  if (CORBA::is_nil(theSObject)) return QString("");
 
-  SALOMEDS::GenericAttribute_var anAttr;  
+  SALOMEDS::GenericAttribute_var anAttr;
   SALOMEDS::AttributeName_var    aName;
-  if ( theSObject->FindAttribute(anAttr, "AttributeName") ) {
-    aName = SALOMEDS::AttributeName::_narrow( anAttr );
+  if (theSObject->FindAttribute(anAttr, "AttributeName")) {
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
     return QString(aName->Value());
-  } 
+  }
   return QString("");
 }
 
+/*QString VisuGUI_EditContainerDlg::getSObjectName (_PTR(SObject) theSObject)
+{
+  if (!theSObject) return QString("");
+
+  _PTR(GenericAttribute) anAttr;
+  if (theSObject->FindAttribute(anAttr, "AttributeName")) {
+    _PTR(AttributeName) aName (anAttr);
+    return QString(aName->Value());
+  }
+  return QString("");
+}*/
 
-void VisuGUI_EditContainerDlg::onLeftClicked() {
+void VisuGUI_EditContainerDlg::onLeftClicked()
+{
   QListViewItem* anItem = myContainerLst->firstChild();
   while (anItem) {
     if (anItem->isSelected()) {
@@ -381,8 +470,8 @@ void VisuGUI_EditContainerDlg::onLeftClicked() {
   }
 }
 
-
-void VisuGUI_EditContainerDlg::onRightClicked() {
+void VisuGUI_EditContainerDlg::onRightClicked()
+{
   QListViewItem* anItem = myStudyLst->firstChild();
   while (anItem) {
     if (anItem->isSelected()) {
@@ -396,8 +485,8 @@ void VisuGUI_EditContainerDlg::onRightClicked() {
   }
 }
 
-
-void VisuGUI_EditContainerDlg::onLeftSelected() {
+void VisuGUI_EditContainerDlg::onLeftSelected()
+{
   QListViewItem* anItem = myStudyLst->firstChild();
   bool isSelected = false;
   while (anItem) {
@@ -410,8 +499,8 @@ void VisuGUI_EditContainerDlg::onLeftSelected() {
   myRightBtn->setEnabled(isSelected);
 }
 
-
-void VisuGUI_EditContainerDlg::onRightSelected() {
+void VisuGUI_EditContainerDlg::onRightSelected()
+{
   QListViewItem* anItem = myContainerLst->firstChild();
   bool isSelected = false;
   while (anItem) {