]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
*** empty log message ***
authorvsv <vsv@opencascade.com>
Wed, 23 Jul 2008 12:45:40 +0000 (12:45 +0000)
committervsv <vsv@opencascade.com>
Wed, 23 Jul 2008 12:45:40 +0000 (12:45 +0000)
12 files changed:
src/VISUGUI/Makefile.am
src/VISUGUI/VISU_msg_en.ts
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h
src/VISUGUI/VisuGUI_ClippingDlg.cxx
src/VISUGUI/VisuGUI_ClippingDlg.h
src/VISUGUI/VisuGUI_ClippingPanel.cxx
src/VISUGUI/VisuGUI_ClippingPanel.h
src/VISUGUI/VisuGUI_ClippingPlaneMgr.cxx
src/VISUGUI/VisuGUI_ClippingPlaneMgr.h
src/VISUGUI/VisuGUI_Module.cxx
src/VISUGUI/VisuGUI_Module.h

index 3d629cb5e441937c72279625a7975e1e0fa2e9bf..875f32a0799fe9f0d93477296ed68ac28d7727ea 100644 (file)
@@ -79,7 +79,6 @@ dist_libVISU_la_SOURCES= \
        VisuGUI_Sweep.cxx \
        VisuGUI_InputPane.cxx \
        VisuGUI_FieldFilter.cxx \
-       VisuGUI_ViewExtender.cxx \
        VisuGUI_ClippingPlaneMgr.cxx \
        VisuGUI_SegmentationMgr.cxx \
        VisuGUI_ClippingPanel.cxx \
@@ -121,7 +120,6 @@ MOC_FILES= \
        VisuGUI_Slider_moc.cxx \
        VisuGUI_Sweep_moc.cxx \
        VisuGUI_InputPane_moc.cxx \
-       VisuGUI_ViewExtender_moc.cxx \
        VisuGUI_ClippingPlaneMgr_moc.cxx \
        VisuGUI_SegmentationMgr_moc.cxx \
        VisuGUI_ClippingPanel_moc.cxx \
index c09967b760592c1e1a00ed24e812da97688d09e2..a3afb3ec9fea417411ddb21c165af327ddeab45d 100644 (file)
@@ -3606,7 +3606,11 @@ Please, refer to the documentation.</translation>
             <source>CHK_AUTO_APPLY</source>
             <translation>Auto apply</translation>
         </message>
-    </context>
+         <message>
+            <source>PLANES_TABLE_TITLES</source>
+            <translation>Plane,Active</translation>
+        </message>
+   </context>
     <context>
         <name>VisuGUI_ClippingPlaneDlg</name>
         <message>
@@ -3627,7 +3631,7 @@ Please, refer to the documentation.</translation>
         </message>
         <message>
             <source>CHK_AUTOAPPLY</source>
-            <translation>Auto apply</translation>
+            <translation>Global</translation>
         </message>
         <message>
             <source>CHK_SHOW_PREVIEW</source>
index 03adac48046d2854305333b5d8459f40c7620b1e..13ecf6ef9e3692da6116f03977b4584a1c41a1a7 100644 (file)
@@ -1250,6 +1250,7 @@ VisuGUI
   for (i = 0; i < nbSelected; i++) {
     VISU::TObjectInfo anObjectInfo = GetObjectByEntry(GetAppStudy(this), anEntries[i]);
     if(_PTR(SObject) aSObject = anObjectInfo.mySObject){
+      emit beforeObjectDelete(QString(aSObject->GetID().c_str()));
       _PTR(SObject) aRefSObject;
       if (aSObject->ReferencedObject(aRefSObject)) {
        // It can be a reference on curve, published under a container.
@@ -2988,6 +2989,8 @@ VisuGUI
   shortcuts.append( QKeySequence(Qt::CTRL + Qt::Key_I) );
   action(VISU_IMPORT_FROM_FILE)->setShortcuts(shortcuts);
 
+  ((VisuGUI_ClippingPanel*) myPanels[ClippingPlanesPanelId])->init();
+
   emit moduleActivated();
 
   return aResult;
@@ -3029,6 +3032,7 @@ VisuGUI
 void VisuGUI::studyActivated()
 {
   GetVisuGen(this)->SetCurrentStudy(GetDSStudy(GetCStudy(GetAppStudy(this))));
+  
 }
 
 /*
index b7ba9a78fb1b1a87c008f1877c658aede4f75c31..df9aec95350ce004766c3077632e28a2fd61793a 100644 (file)
@@ -90,6 +90,7 @@ signals:
   void moduleDeactivated();
   void moduleActivated();
   void presentationCreated(VISU::Prs3d_i* thePrs);
+  void beforeObjectDelete(QString theEntry);
 
 public slots:
   virtual bool deactivateModule( SUIT_Study* );
index e3bab7c3325d02cc653f8723b3f1099f28b739fc..e9e63afeac5d711094165e71b41ee9d532a7cf30 100644 (file)
@@ -24,7 +24,6 @@
 #include "VisuGUI_Tools.h"
 #include "VisuGUI_ViewTools.h"
 #include "VisuGUI_SegmentationMgr.h"
-#include "VisuGUI_ViewExtender.h"
 #include "VisuGUI_ClippingPlaneMgr.h"
 
 #include "VISU_Prs3d_i.hh"
@@ -265,47 +264,9 @@ VisuGUI_ClippingDlg::VisuGUI_ClippingDlg (VisuGUI* theModule,
   QVBoxLayout* VisuGUI_ClippingDlgLayout = new QVBoxLayout(this);
   VisuGUI_ClippingDlgLayout->setSpacing(6);
   VisuGUI_ClippingDlgLayout->setMargin(11);
-
-  myHasGlobalPl = hasGlobalPlanes();
-  
-  if (myHasGlobalPl) {
-    QGroupBox* aTypeFrm = new QGroupBox (tr("GRP_TYPE"),  this);
-    QHBoxLayout* aTypeLayout = new QHBoxLayout(aTypeFrm);
-    aTypeFrm->setLayout(aTypeLayout);
-    VisuGUI_ClippingDlgLayout->addWidget(aTypeFrm);
-
-    myPlaneTypeGrp = new QButtonGroup (aTypeFrm);
-    myPlaneTypeGrp->setExclusive(true);
-    
-    QRadioButton* aGlobalBtn = new QRadioButton(tr("GLOBAL_BTN"), aTypeFrm);
-    aGlobalBtn->setChecked(true);                                    
-    aTypeLayout->addWidget(aGlobalBtn);
-    myPlaneTypeGrp->addButton(aGlobalBtn, 0);
-
-    aTypeLayout->addStretch();
-
-    QRadioButton* aLocalBtn = new QRadioButton(tr("LOCAL_BTN"), aTypeFrm);
-    aTypeLayout->addWidget(aLocalBtn);
-    myPlaneTypeGrp->addButton(aLocalBtn, 1);
-  }
   
   QStackedWidget* aStackWidget = new QStackedWidget(this);
   VisuGUI_ClippingDlgLayout->addWidget(aStackWidget);
-  if (myHasGlobalPl) {
-    connect(myPlaneTypeGrp, SIGNAL(buttonClicked(int)), aStackWidget, SLOT(setCurrentIndex(int)) );
-    connect(myPlaneTypeGrp, SIGNAL(buttonClicked(int)), this, SLOT(onPlaneType(int)) );
-    
-    // Global planes
-    QGroupBox* aViewerPlanes = new QGroupBox (tr("GRP_VIEWER_PLANES"),  aStackWidget);
-    QVBoxLayout* aGPlanesLayout = new QVBoxLayout(aStackWidget);
-    aViewerPlanes->setLayout(aGPlanesLayout);
-    aStackWidget->addWidget(aViewerPlanes);
-    
-    myGlobalPlanes = new QListWidget(aViewerPlanes);
-    connect(myGlobalPlanes, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(onPlaneCheck()));
-
-    aGPlanesLayout->addWidget(myGlobalPlanes);
-  }
   // Local planes
   QWidget* aLocalPlanes = new QWidget(aStackWidget);
   QVBoxLayout* aLocalLayout = new QVBoxLayout(aLocalPlanes);
@@ -411,8 +372,6 @@ VisuGUI_ClippingDlg::VisuGUI_ClippingDlg (VisuGUI* theModule,
 
   SpinBoxDistance->setValue(0.5);
 
-  initGlobalPlanes();
-
   onSelectionChanged();
 
   // signals and slots connections :
@@ -447,9 +406,6 @@ VisuGUI_ClippingDlg::VisuGUI_ClippingDlg (VisuGUI* theModule,
 //=================================================================================
 VisuGUI_ClippingDlg::~VisuGUI_ClippingDlg()
 {
-  if (myHasGlobalPl)
-    deleteGlobalPlanesPreview();
-
   // no need to delete child widgets, Qt does it all for us
   SetPrs3d(NULL);
   std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(false));
@@ -548,18 +504,7 @@ QWidget* VisuGUI_ClippingDlg::createIJKParamsTab()
 //=================================================================================
 void VisuGUI_ClippingDlg::ClickOnApply()
 {
-  if (myHasGlobalPl) {
-    switch (myPlaneTypeGrp->checkedId()) {
-    case 0: // Global plane
-      applyGlobalPlanes();
-      break;
-    case 1: // Local plane
-      applyLocalPlanes();
-      break;
-    }
-  } else {
-    applyLocalPlanes();
-  }
+  applyLocalPlanes();
 }
 
 
@@ -636,32 +581,6 @@ void VisuGUI_ClippingDlg::applyLocalPlanes()
 }
 
 
-//=================================================================================
-// function : applyGlobalPlanes()
-// purpose  :
-//=================================================================================
-void VisuGUI_ClippingDlg::applyGlobalPlanes()
-{
-  if (!myDSActor) return;
-
-  VisuGUI_ViewExtender* aVisuExtender = dynamic_cast<VisuGUI_ViewExtender*>(myVisuGUI->getViewExtender());
-  SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow<SVTK_ViewWindow>(myVisuGUI);
-  VisuGUI_SegmentationMgr* aSegmentationMgr = aVisuExtender->getSegmentationMgr(aViewWindow);
-  
-  myDSActor->RemoveAllClippingPlanes();
-
-  const QListOfPlanes& aPlanes = aSegmentationMgr->getPlanes();
-  PlaneDef aPlane;
-
-  for (int i = 0; i < myGlobalPlanes->count(); i++) {
-    if (myGlobalPlanes->item(i)->checkState() == Qt::Checked) {
-      aPlane = aPlanes.at(i);
-      myDSActor->AddClippingPlane(aPlane.plane);
-    }
-  }
-  VISU::RenderViewWindow(aViewWindow);
-}
-
 
 
 //=================================================================================
@@ -1299,20 +1218,7 @@ void VisuGUI_ClippingDlg::onIJKAxisChanged(int axisId)
 //=================================================================================
 void VisuGUI_ClippingDlg::OnPreviewToggle (bool theIsToggled)
 {
-  if (myHasGlobalPl) {
-    switch (myPlaneTypeGrp->checkedId()) {
-    case 0: // Global plane
-      previewGlobalPlanes(theIsToggled);
-      std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(false));
-      break;
-    case 1: // Local plane
-      previewGlobalPlanes(false);
-      std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(theIsToggled));
-      break;
-    }
-  } else {
-    std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(theIsToggled));
-  }
+  std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(theIsToggled));
   if (SVTK_ViewWindow* vw = VISU::GetActiveViewWindow<SVTK_ViewWindow>(myVisuGUI))
     VISU::RenderViewWindow(vw);
 }
@@ -1347,138 +1253,6 @@ void VisuGUI_ClippingDlg::SetPrs3d(VISU::Prs3d_i* thePrs)
     return;
 }
 
-//=================================================================================
-// function : hasGlobalPlanes()
-// purpose  :
-//=================================================================================
-bool VisuGUI_ClippingDlg::hasGlobalPlanes()
-{
-  VisuGUI_ViewExtender* aVisuExtender = dynamic_cast<VisuGUI_ViewExtender*>(myVisuGUI->getViewExtender());
-  if (!aVisuExtender) return false;
-
-  SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow<SVTK_ViewWindow>(myVisuGUI);
-  if (!aViewWindow) return false;
-
-  VisuGUI_SegmentationMgr* aSegmentationMgr = aVisuExtender->getSegmentationMgr(aViewWindow);
-  return aSegmentationMgr->getPlanes().size() > 0;
-}
-
-//=================================================================================
-// function : initGlobalPlanes()
-// purpose  :
-//=================================================================================
-void VisuGUI_ClippingDlg::initGlobalPlanes()
-{
-  if (!myHasGlobalPl) return;
-  VisuGUI_ViewExtender* aVisuExtender = dynamic_cast<VisuGUI_ViewExtender*>(myVisuGUI->getViewExtender());
-  SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow<SVTK_ViewWindow>(myVisuGUI);
-  VisuGUI_SegmentationMgr* aSegmentationMgr = aVisuExtender->getSegmentationMgr(aViewWindow);
-  
-  double aBounds[6];
-  ComputeVisiblePropBounds(aViewWindow->getRenderer(), aBounds);
-
-  // Add planes names to list
-  const QListOfPlanes& aPlanes = aSegmentationMgr->getPlanes();
-  PlaneDef aPlane;
-  for (int i = 0; i < aPlanes.size(); i++) {
-    aPlane = aPlanes.at(i);
-    QListWidgetItem* aItem = new QListWidgetItem(aPlane.name, myGlobalPlanes);
-    if (aPlane.isAuto)
-      aItem->setFlags(0);
-    //    else
-    aItem->setCheckState(Qt::Unchecked);
-    myGlobalPlanes->addItem(aItem);
-    
-    //Create preview
-    PreviewPlane* aPreview = new PreviewPlane(aViewWindow, aPlane, aBounds);
-    aPreview->setVisible(PreviewCheckBox->checkState() == Qt::Checked);
-    myPreviewList.append(aPreview);
-  }
-
-  // Check items according to already added planes
-  myDSActor = getSelectedActor();
-  if (!myDSActor) return;
-
-  vtkImplicitFunctionCollection* aFunctions = myDSActor->GetClippingPlanes();
-  aFunctions->InitTraversal();
-  vtkImplicitFunction* aItem;
-  while (aItem = aFunctions->GetNextItem()) {
-    for (int i = 0; i < aPlanes.size(); i++) {
-      aPlane = aPlanes.at(i);
-      if (aPlane.plane.GetPointer() == aItem) {
-       myGlobalPlanes->item(i)->setCheckState(Qt::Checked);
-       break;
-      }
-    }
-  }  
-}
-
 
-//=================================================================================
-// function : initGlobalPlanes()
-// purpose  :
-//=================================================================================
-VISU_Actor* VisuGUI_ClippingDlg::getSelectedActor()
-{
-  SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow<SVTK_ViewWindow>(myVisuGUI);
-
-  VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects(myVisuGUI);
-  if(aSelectionInfo.empty()) return 0;
-
-  VISU::TSelectionItem aSelectionItem = aSelectionInfo.front();
-  VISU::Base_i* aBase = aSelectionItem.myObjectInfo.myBase;
-  if(!aBase) return 0;
-
-  VISU::Prs3d_i* aPrs = dynamic_cast<VISU::Prs3d_i*>(aBase);
-  if (!aPrs) return 0;
-
-  VISU_Actor* aActor = VISU::FindActor(aViewWindow, aPrs);
-  return aActor;
-}
-
-//=================================================================================
-// function : onPlaneCheck()
-// purpose  :
-//=================================================================================
-void VisuGUI_ClippingDlg::onPlaneCheck()
-{
-  if (AutoApplyCheckBox->checkState() == Qt::Checked) {
-    applyGlobalPlanes();
-  }
-}
 
-//=================================================================================
-// function : previewGlobalPlanes()
-// purpose  :
-//=================================================================================
-void VisuGUI_ClippingDlg::previewGlobalPlanes(bool theShow)
-{
-  for (int i = 0; i < myPreviewList.size(); i++) {
-    myPreviewList.at(i)->setVisible(theShow);
-  }
-}
 
-//=================================================================================
-// function : deleteGlobalPlanesPreview()
-// purpose  :
-//=================================================================================
-void VisuGUI_ClippingDlg::deleteGlobalPlanesPreview()
-{
-  PreviewPlane* aPreview = 0;
-  while (myPreviewList.size() > 0) {
-    aPreview = myPreviewList.last();
-    myPreviewList.removeLast();
-    delete aPreview;
-  }
-}
-    
-//=================================================================================
-// function : deleteGlobalPlanesPreview()
-// purpose  :
-//=================================================================================
-void VisuGUI_ClippingDlg::onPlaneType(int theType)
-{
-  previewGlobalPlanes(theType == 0);
-  std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(theType == 1));
-  VISU::RenderViewWindow(VISU::GetActiveViewWindow<SVTK_ViewWindow>(myVisuGUI));
-}
index 87e14e86713b5cc07f4e0e0e3ce259cba5938b95..a6be8ed6fcb7a44c5e13e1acef30a74b2193b422 100644 (file)
@@ -136,17 +136,10 @@ private:
     void keyPressEvent( QKeyEvent* e );
   
     void SetPrs3d(VISU::Prs3d_i* thePrs);
-
-    void initGlobalPlanes();
-    bool hasGlobalPlanes();
   
     VISU_Actor* getSelectedActor();
 
     void applyLocalPlanes();
-    void applyGlobalPlanes();
-
-    void deleteGlobalPlanesPreview();
-    void previewGlobalPlanes(bool theShow);
 
 private:
 
@@ -190,9 +183,6 @@ private:
 
     bool myIsSelectPlane;
 
-    QButtonGroup* myPlaneTypeGrp;
-    QListWidget*  myGlobalPlanes;
-    bool myHasGlobalPl;
     VISU_Actor* myDSActor;
     QList<PreviewPlane*> myPreviewList;
 
@@ -218,8 +208,8 @@ public slots:
     void ClickOnCancel();
     void ClickOnApply();
     void ClickOnHelp();
-    void onPlaneCheck();
-    void onPlaneType(int);
 };
 
 #endif // DIALOGBOX_TRANSPARENCYDLG_H
+
+
index b08f4567da55676c5448c0ef8a974cdc6c8466a0..b06088edcac30d51b1547708ecafcb9c4ae33c8c 100644 (file)
@@ -41,6 +41,7 @@
 #include <QToolButton>
 #include <QGroupBox>
 #include <QListWidget>
+#include <QTableWidget>
 #include <QStringList>
 #include <QMessageBox>
 #include <QCheckBox>
@@ -48,6 +49,9 @@
 #include <SALOMEDSClient_AttributeSequenceOfReal.hxx>
 #include <SALOMEDSClient_AttributeInteger.hxx>
 
+
+
+
 VisuGUI_ClippingPanel::VisuGUI_ClippingPanel(VisuGUI* theModule)
   : VisuGUI_Panel(tr("TITLE"), theModule, VISU::GetDesktop(theModule), ApplyBtn | HelpBtn ),
     myModule(theModule),
@@ -60,12 +64,15 @@ VisuGUI_ClippingPanel::VisuGUI_ClippingPanel(VisuGUI* theModule)
   aMainLayout->addWidget(new QLabel(tr("PRESENTATIONS_LBL"), mainFrame()));
   myPrsList = new QListWidget(mainFrame());
   myPrsList->setSelectionMode(QAbstractItemView::SingleSelection);
+  connect(myPrsList, SIGNAL(currentRowChanged(int)), this, SLOT(onPrsSelected(int)));
   aMainLayout->addWidget(myPrsList);
 
   // List of planes
   aMainLayout->addWidget(new QLabel(tr("PLANES_LBL"), mainFrame()));
-  myPlanesList = new QListWidget(mainFrame());
+  myPlanesList = new QTableWidget(0, 2, mainFrame());
+  myPlanesList->setColumnWidth(1, 50);
   myPlanesList->setSelectionMode(QAbstractItemView::SingleSelection);
+  connect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
   aMainLayout->addWidget(myPlanesList);
   
   // Management buttons
@@ -100,17 +107,22 @@ VisuGUI_ClippingPanel::VisuGUI_ClippingPanel(VisuGUI* theModule)
   aMainLayout->addWidget(myNonActivePlanes);
 
   myAutoApply = new QCheckBox(tr("CHK_AUTO_APPLY"), mainFrame());
+  connect(myAutoApply, SIGNAL(toggled(bool)), myApply, SLOT(setDisabled(bool)));
+  myAutoApply->setCheckState(Qt::Checked);
   aMainLayout->addWidget(myAutoApply);
 
 
-  fillPrsList();
-  fillPlanesList();
+  //  fillPrsList();
+  //  fillPlanesList();
 
   connect(myModule, SIGNAL(presentationCreated(VISU::Prs3d_i*)), 
          this, SLOT(onPresentationCreate(VISU::Prs3d_i*)));
+  connect(myModule, SIGNAL(beforeObjectDelete(QString)), 
+         this, SLOT(onObjectDelete(QString)));
 
   SUIT_Desktop* aDesktop = VISU::GetDesktop(myModule);
-  connect(aDesktop, SIGNAL(windowActivated(SUIT_ViewWindow*)), this, SLOT(onWindowActivated(SUIT_ViewWindow*)));
+  connect(aDesktop, SIGNAL(windowActivated(SUIT_ViewWindow*)), 
+         this, SLOT(onWindowActivated(SUIT_ViewWindow*)));
 }
   
 
@@ -132,11 +144,33 @@ void VisuGUI_ClippingPanel::fillPrsList()
   myPresentations = getPrsList(aStudy, aVisuSO);
   QStringList aNames;
   for (int i = 0; i < myPresentations.size(); i++) {
-    aNames.append(myPresentations.at(i)->GetName().c_str());
+    aNames.append(getPrsName(myPresentations.at(i)));
   }
   myPrsList->addItems(aNames);
 }
 
+//*************************************************************************
+QString VisuGUI_ClippingPanel::getPrsName(VISU::Prs3d_i* thePrs)
+{
+  QString aName;
+  QStringList aPath;
+  SALOMEDS::SObject_var aFather = thePrs->GetSObject()->GetFather();
+  while (!aFather->_is_nil()) {
+    SALOMEDS::GenericAttribute_var anAttr;
+    if (aFather->FindAttribute(anAttr, "AttributeName")) {
+      SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
+      CORBA::String_var aValue = aName->Value();
+      aPath.append(aValue.in());
+      aFather = aFather->GetFather();
+    } else
+      break;
+  }
+  for (int j = aPath.size() - 2; j >= 0; j--)
+    aName += aPath.at(j) + "/";
+  aName += thePrs->GetName().c_str();
+  return aName;
+}
+
 //*************************************************************************
 QList<VISU::Prs3d_i*> VisuGUI_ClippingPanel::getPrsList(_PTR(Study) theStudy, 
                                                               _PTR(SObject) theObject)
@@ -166,6 +200,7 @@ QList<VISU::Prs3d_i*> VisuGUI_ClippingPanel::getPrsList(_PTR(Study) theStudy,
 //*************************************************************************
 void VisuGUI_ClippingPanel::fillPlanesList()
 {
+  disconnect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
   myPlanesList->clear();
   myPlanes.clear();
   _PTR(Study) aStudy = VISU::GetCStudy(VISU::GetAppStudy(myModule));
@@ -173,32 +208,70 @@ void VisuGUI_ClippingPanel::fillPlanesList()
   if (VISU::getClippingPlanesFolder(aStudy, aFolder)) {
     _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aFolder);
     int i;
-    for (aIter->InitEx(true), i = 0; aIter->More(); aIter->Next(), i++) {
-      _PTR(SObject) aSObject = aIter->Value();
+    for (i = 0; aIter->More(); aIter->Next(), i++) { // For each plane
+      _PTR(SObject) aSObject = aIter->Value(); 
       PlaneDef aNewPlane = createEmptyPlane();
       updatePlane(aSObject, aNewPlane);
 
-      QListWidgetItem* aItem = new QListWidgetItem(aNewPlane.name, myPlanesList);
+      myPlanesList->insertRow(i);
+      QTableWidgetItem* aItem = new QTableWidgetItem(aNewPlane.name);
+      QTableWidgetItem* aCheckItem = new QTableWidgetItem();
+      aCheckItem->setCheckState((myNonActivePlanes->checkState() == Qt::Checked)? Qt::Unchecked : Qt::Checked);
 
-      if (aNewPlane.isAuto) {
+      if (aNewPlane.isAuto) { // If this is Auto plane
        aItem->setFlags(0);
+       // apply to all presentations
        aItem->setCheckState(Qt::Checked);
-      } else {
+       foreach(VISU::Prs3d_i* aPrs, myPresentations) {
+         aPrs->AddClippingPlane(aNewPlane.plane);
+       }
+      } else { // if it is not auto
+       foreach(VISU::Prs3d_i* aPrs, myPresentations) {
+         _PTR(ChildIterator) aRefIter = aStudy->NewChildIterator(aSObject);      
+         for (; aRefIter->More(); aRefIter->Next()) {
+           _PTR(SObject) aObj = aRefIter->Value();
+           _PTR(SObject) aRefPrsObject;
+           if (aObj->ReferencedObject(aRefPrsObject)) { // If it is referenced on current plane
+             if (QString(aRefPrsObject->GetID().c_str()) == QString(aPrs->GetEntry().c_str())) {
+               aPrs->AddClippingPlane(aNewPlane.plane);
+             }
+           }
+         }
+       }
        aItem->setCheckState(Qt::Unchecked);
+       // Check current presentation
+       int aPrsNum = myPrsList->currentRow();
+       if (aPrsNum >= 0) {
+         if (containsPlane(myPresentations.at(aPrsNum), aNewPlane))
+           aItem->setCheckState(Qt::Checked);
+       }
       }
-      myPlanesList->addItem(aItem);
+      myPlanesList->setItem(i, 0, aItem);
+      myPlanesList->setItem(i, 1, aCheckItem);
       myPlanes.append(aNewPlane);
     }
   }
+  myPlanesList->setHorizontalHeaderLabels(QString(tr("PLANES_TABLE_TITLES")).split(","));
+  if (myViewWindow)
+    myViewWindow->Repaint();
+  connect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
 }
 
+
 //*************************************************************************
-void VisuGUI_ClippingPanel::showEvent(QShowEvent* event)
+void VisuGUI_ClippingPanel::init()
 {
+  myViewWindow = VISU::GetViewWindow<SVTK_Viewer>(myModule);
   fillPrsList();
-  VisuGUI_Panel::showEvent(event);
+  fillPlanesList();
 }
 
+//*************************************************************************
+//void VisuGUI_ClippingPanel::showEvent(QShowEvent* event)
+//{
+//  VisuGUI_Panel::showEvent(event);
+//}
+
 //*************************************************************************
 // void VisuGUI_ClippingPanel::hideEvent(QHideEvent* event)
 // {
@@ -209,7 +282,8 @@ void VisuGUI_ClippingPanel::showEvent(QShowEvent* event)
 //*************************************************************************
 void VisuGUI_ClippingPanel::onPresentationCreate(VISU::Prs3d_i* thePrs)
 {
-  myPrsList->addItem(thePrs->GetName().c_str());
+  
+  myPrsList->addItem(getPrsName(thePrs));
   myPresentations.append(thePrs);
   for (int i = 0; i < myPlanes.size(); i++) {
     const PlaneDef& aPlane = myPlanes.at(i);
@@ -254,12 +328,18 @@ void VisuGUI_ClippingPanel::onNewPlane()
 {
   disconnect(myPlaneDlg, SIGNAL(accepted()), this, SLOT(onNewPlane()));
   disconnect(myPlaneDlg, SIGNAL(rejected()), this, SLOT(onCancelDialog()));
+  disconnect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
   _PTR(SObject) aPlaneSObj = myPlaneDlg->getPlaneObj();
 
   PlaneDef aNewPlane = createEmptyPlane();
   updatePlane(aPlaneSObj, aNewPlane);
+  int aRow = myPlanesList->rowCount();
+  myPlanesList->insertRow(aRow);
 
-  QListWidgetItem* aItem = new QListWidgetItem(aNewPlane.name, myPlanesList);
+  QTableWidgetItem* aItem = new QTableWidgetItem(aNewPlane.name);
+  QTableWidgetItem* aCheckItem = new QTableWidgetItem();
+  aCheckItem->setCheckState((myNonActivePlanes->checkState() == Qt::Checked)? Qt::Unchecked : Qt::Checked);
+  aNewPlane.plane->setActive(myNonActivePlanes->checkState() != Qt::Checked);
   if (aNewPlane.isAuto) {
     aItem->setFlags(0);
     aItem->setCheckState(Qt::Checked);
@@ -269,7 +349,8 @@ void VisuGUI_ClippingPanel::onNewPlane()
   } else {
     aItem->setCheckState(Qt::Unchecked);
   }
-  myPlanesList->addItem(aItem);
+  myPlanesList->setItem(aRow, 0, aItem);
+  myPlanesList->setItem(aRow, 1, aCheckItem);
   myPlanes.append(aNewPlane);
 
   delete myPlaneDlg;
@@ -279,6 +360,7 @@ void VisuGUI_ClippingPanel::onNewPlane()
   
   if (myViewWindow)
     myViewWindow->Repaint();
+  connect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
 }
 
 //*************************************************************************
@@ -286,18 +368,43 @@ void VisuGUI_ClippingPanel::onPlaneEdited()
 {
   disconnect(myPlaneDlg, SIGNAL(accepted()), this, SLOT(onNewPlane()));
   disconnect(myPlaneDlg, SIGNAL(rejected()), this, SLOT(onCancelDialog()));
+  disconnect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
   _PTR(SObject) aPlaneSObj = myPlaneDlg->getPlaneObj();
 
   PlaneDef aPlane = myPlanes.at(myEditingPlanePos);
   updatePlane(aPlaneSObj, aPlane);
 
+  QTableWidgetItem* aItem = myPlanesList->item(myEditingPlanePos, 0);
+  if (aPlane.isAuto) {
+    aItem->setCheckState(Qt::Checked);    
+    aItem->setFlags(0);
+    _PTR(Study) aStudy = VISU::GetCStudy( VISU::GetAppStudy( myModule ) );
+    _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aPlaneSObj);
+    for (; aIter->More(); aIter->Next()) {
+      _PTR(SObject) aObj = aIter->Value();
+      VISU::DeleteSObject(myModule, aStudy, aObj);
+    }
+    VISU::UpdateObjBrowser(myModule);
+  } else {
+    aItem->setCheckState(Qt::Unchecked);
+    aItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
+    int aPrsNum = myPrsList->currentRow();
+    if (aPrsNum >= 0) {
+      if (containsPlane(myPresentations.at(aPrsNum), aPlane))
+       aItem->setCheckState(Qt::Checked);
+    }
+  }
+  aItem->setText(aPlane.name);
+
   delete myPlaneDlg;
   myPlaneDlg = 0;
 
+  myPlanes.replace(myEditingPlanePos, aPlane);
   setPlanesVisible(myShowPlanes->checkState() == Qt::Checked);
 
   if (myViewWindow)
     myViewWindow->Repaint();
+  connect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
 }
 
 //*************************************************************************
@@ -369,7 +476,7 @@ void VisuGUI_ClippingPanel::onPlaneDelete()
     _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
     aBuilder->RemoveObject(aSObj);
     
-    myPlanesList->takeItem(aRow);
+    myPlanesList->removeRow(aRow);
     myPlanes.removeAt(aRow);
     
     VISU::UpdateObjBrowser(myModule);
@@ -401,12 +508,15 @@ void VisuGUI_ClippingPanel::onApply()
 void VisuGUI_ClippingPanel::setPlanesNonActive(bool theState)
 {
   PlaneDef aPlane;
+  disconnect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
   for (int i = 0; i < myPlanes.size(); i++) {
     aPlane = myPlanes.at(i);
     aPlane.plane->setActive(!theState);
+    myPlanesList->item(i, 1)->setCheckState((theState)? Qt::Unchecked : Qt::Checked);
   }
   if (myViewWindow)
     myViewWindow->Repaint();
+  connect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
 }
 
 //*************************************************************************
@@ -450,11 +560,116 @@ void VisuGUI_ClippingPanel::onCancelDialog()
 //*************************************************************************
 void VisuGUI_ClippingPanel::onWindowActivated(SUIT_ViewWindow* theWindow)
 {
+  setPlanesVisible(false);
   myViewWindow = dynamic_cast<SVTK_ViewWindow*>(theWindow);
-  printf("#### New window activated\n");
+  setPlanesVisible(myShowPlanes->checkState() == Qt::Checked);
+}
+
+//*************************************************************************
+void VisuGUI_ClippingPanel::onCellChanged(int row, int col)
+{
+  PlaneDef aPlane = myPlanes.at(row);
+  bool isChecked = (myPlanesList->item(row, col)->checkState() == Qt::Checked);
+  if (col == 1) {  // activate column clicked
+    aPlane.plane->setActive(isChecked);
+  } else { // Plane checked
+    
+    if (aPlane.isAuto) return;
+    
+    int aPrsNum = myPrsList->currentRow();
+    if (aPrsNum < 0) return;
+
+    _PTR(Study) aStudy = VISU::GetCStudy( VISU::GetAppStudy( myModule ) );
+    _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
+    VISU::Prs3d_i* aPrs = myPresentations.at(aPrsNum);
+    _PTR(SObject) aSObject = aPlane.plane->getPlaneObject();
+    _PTR(SObject) aPrsSObj = aStudy->FindObjectID(aPrs->GetEntry());
+    if (isChecked) {
+      if (!containsPlane(aPrs, aPlane))
+       aPrs->AddClippingPlane(aPlane.plane);
+
+      if(!aStudy->GetProperties()->IsLocked()) {
+       _PTR(SObject) aNewObj = aBuilder->NewObject(aSObject);
+       aBuilder->Addreference(aNewObj, aPrsSObj);
+      }
+    } else {
+      for (int i = 0; i < aPrs->GetNumberOfClippingPlanes(); i++) {
+       if (aPrs->GetClippingPlane(i) == aPlane.plane.GetPointer()) {
+         aPrs->RemoveClippingPlane(i);
+         break;
+       }
+      }
+      if(!aStudy->GetProperties()->IsLocked()) {
+       _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aSObject);
+       for (; aIter->More(); aIter->Next()) {
+         _PTR(SObject) aRefObj = aIter->Value();
+         if(aRefObj) {
+           _PTR(SObject) aRefPrsObject;
+           if (aRefObj->ReferencedObject(aRefPrsObject)) {
+             if (QString(aRefPrsObject->GetID().c_str()) == QString(aPrs->GetEntry().c_str())) {
+               VISU::DeleteSObject(myModule, aStudy, aRefObj);
+               break;
+             }
+           }
+         }
+       }
+      }
+    }
+    VISU::UpdateObjBrowser(myModule);
+  }
+  if (myViewWindow)
+    myViewWindow->Repaint();
+}
+
+
+//*************************************************************************
+bool VisuGUI_ClippingPanel::containsPlane(VISU::Prs3d_i* thePrs, const PlaneDef& thePlane)
+{
+  bool isContains = false;
+  for (int i = 0; i < thePrs->GetNumberOfClippingPlanes(); i++) {
+    if (thePrs->GetClippingPlane(i) == thePlane.plane.GetPointer()) {
+      return true;
+    }
+  }
+  return false;
 }
 
 
+//*************************************************************************
+void VisuGUI_ClippingPanel::onObjectDelete(QString theEntry)
+{
+  disconnect(myPrsList, SIGNAL(currentRowChanged(int)), this, SLOT(onPrsSelected(int)));
+  int i = 0;
+  foreach (VISU::Prs3d_i* aPrs, myPresentations) {
+    QString aID(aPrs->GetEntry().c_str());
+    if (aID == theEntry) {
+      myPresentations.removeAt(i);
+      myPrsList->takeItem(i);
+      break;
+    }
+    i++;
+  }
+  connect(myPrsList, SIGNAL(currentRowChanged(int)), this, SLOT(onPrsSelected(int)));
+  onPrsSelected(myPrsList->currentRow());
+}
+
+//*************************************************************************
+void VisuGUI_ClippingPanel::onPrsSelected(int thePrs)
+{
+  if (thePrs < 0) return;
+  disconnect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
+  VISU::Prs3d_i* aPrs = myPresentations.at(thePrs);
+  QListOfPlanes::const_iterator aIt;
+  int i = 0;
+  for (aIt = myPlanes.begin(), i = 0; aIt != myPlanes.end(); ++aIt, i++) {
+    QTableWidgetItem* aItem = myPlanesList->item(i, 0);
+    const PlaneDef& aPlane = *aIt;
+    if (!aPlane.isAuto)
+      aItem->setCheckState(containsPlane(aPrs, aPlane)? Qt::Checked : Qt::Unchecked);    
+  }
+  connect(myPlanesList, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));
+}
+
 //*************************************************************************
 void VisuGUI_ClippingPanel::onHelp()
 {
index 7999342283c0615aa3a9501ead35afdef7298d9a..585e7723a92c67045e6bcb00e7cdab607d273c80 100644 (file)
@@ -24,6 +24,7 @@
 
 class VisuGUI;
 class QListWidget;
+class QTableWidget;
 class VisuGUI_ClippingPlaneDlg;
 class QCheckBox;
 class SVTK_ViewWindow;
@@ -44,8 +45,10 @@ public:
   VisuGUI_ClippingPanel(VisuGUI* theModule);
   ~VisuGUI_ClippingPanel();
 
-protected:
-  virtual void showEvent(QShowEvent* event);
+  void init();
+
+  //protected:
+  //virtual void showEvent(QShowEvent* event);
   //virtual void hideEvent(QHideEvent* event);
 
 public slots:
@@ -65,6 +68,9 @@ private slots:
   void setPlanesNonActive(bool theState);
   void setPlanesVisible(bool theVisible);
   void onWindowActivated(SUIT_ViewWindow* theWindow);
+  void onCellChanged(int row, int col);
+  void onObjectDelete(QString theEntry);
+  void onPrsSelected(int thePrs);
 
  private:
   void fillPrsList();
@@ -72,6 +78,9 @@ private slots:
 
   void updatePlane(_PTR(SObject) theObject, PlaneDef& thePlane);
   PlaneDef createEmptyPlane();
+  static bool containsPlane(VISU::Prs3d_i* thePrs, const PlaneDef& thePlane);
+
+  QString getPrsName(VISU::Prs3d_i* thePrs);
 
   bool isVISUDataReady();
 
@@ -80,7 +89,7 @@ private slots:
   VisuGUI*   myModule;
 
   QListWidget* myPrsList;
-  QListWidget* myPlanesList;
+  QTableWidget* myPlanesList;
 
   QCheckBox* myShowPlanes;
   QCheckBox* myNonActivePlanes;
index 8e87d74e8d99a71f334cadb75d2dcc1c724ccbb2..25c616d93bca4d404602df6151cee7306c626e61 100644 (file)
@@ -22,7 +22,6 @@
 
 #include "VisuGUI.h"
 #include "VisuGUI_Tools.h"
-#include "VisuGUI_ViewExtender.h"
 
 #include "VISU_Actor.h"
 
@@ -156,7 +155,7 @@ VisuGUI_ClippingPlaneMgr::VisuGUI_ClippingPlaneMgr(VisuGUI* theModule,
   aManageBox->addWidget(aDeleteBtn);
 
   QPushButton* aImportBtn = new QPushButton(tr("BTN_IMPORT"), this);
-  connect(aImportBtn, SIGNAL(clicked()), this, SLOT(onImportPlane()));
+  //connect(aImportBtn, SIGNAL(clicked()), this, SLOT(onImportPlane()));
   aManageBox->addWidget(aImportBtn);
   
   aManageBox->addStretch();
@@ -594,7 +593,7 @@ void VisuGUI_ClippingPlaneMgr::setDirection(double theVal[3])
 
 
 //****************************************************************
-void VisuGUI_ClippingPlaneMgr::onImportPlane()
+/*void VisuGUI_ClippingPlaneMgr::onImportPlane()
 {
   SalomeApp_Application* aApp = myModule->getApp();
   if (!aApp) return;
@@ -653,7 +652,7 @@ void VisuGUI_ClippingPlaneMgr::onImportPlane()
     myViewWindow->Repaint();
   }
 }
-
+*/
 //****************************************************************
 void VisuGUI_ClippingPlaneMgr::onShowPreview(int theVal)
 {
index 013d646a417cf86fee3167f99543f6b35b079032..a24b54b78dcba15d1716dc52ae9c6db662e26595 100644 (file)
@@ -73,7 +73,7 @@ private slots:
   void onNewPlane();
   void onDeletePlane();
   void onValueChanged();
-  void onImportPlane();
+  //  void onImportPlane();
   void onShowPreview(int);
 
  private:
index 8b732c1d6b52d7fe936a5d5a8fb9b8f15b7a5f05..02507a9f6b78abf3862a3b40207abc0424634c5e 100644 (file)
@@ -27,7 +27,6 @@
 //  $Header$
 
 #include "VisuGUI_Module.h"
-#include "VisuGUI_ViewExtender.h"
 
 #include "QtxPopupMgr.h"
 
@@ -182,7 +181,6 @@ namespace VISU
 VisuGUI_Module::VisuGUI_Module() : 
   VisuGUI()
 {
-  myExtender = new VisuGUI_ViewExtender(this);
 }
 
 
index 548fe2cab1742a99cc23828f2bcbef15607ab505..4ba8be2ac0b8dded1888cbbeedb7bdceba0f4846 100644 (file)
@@ -31,8 +31,6 @@
 #include "VisuGUI.h"
 #include "STD_Application.h"
 #include "SALOMEDSClient_SObject.hxx"
-#include <CAM_ViewExtender.h>
-#include "VisuGUI_ViewExtender.h"
 
 class SUIT_ViewManager;
 class SVTK_ViewManager;
@@ -83,9 +81,6 @@ public:
   void
   restoreVisualParameters(int savePoint);
 
-  //! Returns Module dedicated extension for Viewer. Returns 0 if module has no extension
-  //  virtual CAM_ViewExtender* getViewExtender() { return myExtender; }
-
 public slots:
   //! Reimplemented method of the module deactivation.
   virtual 
@@ -166,8 +161,6 @@ protected:
   void setProperty( SVTK_ViewWindow*, const QString& );  // set a property (speed_increment, etc ) for SVTK ViewWindow
   void setProperty( SVTK_ViewManager*, const QString& ); // set a property for SVTK ViewWindow // set only 1 property for all ViewWindows of given view manager
 
-
-  VisuGUI_ViewExtender* myExtender;
 };
 
 #endif