From da5ab2d0d1c3217ada0ed31a778ebf4678c87827 Mon Sep 17 00:00:00 2001 From: sln Date: Fri, 15 Jul 2005 14:05:43 +0000 Subject: [PATCH] Portation on new based dialog --- src/SMESHGUI/Makefile.in | 6 +- src/SMESHGUI/SMESHGUI.cxx | 28 +- src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx | 335 ++++++------------ src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h | 71 ++-- src/SMESHGUI/SMESHGUI_CreateHypothesesOp.cxx | 151 ++++++++ src/SMESHGUI/SMESHGUI_CreateHypothesesOp.h | 55 +++ src/SMESHGUI/SMESHGUI_Dialog.cxx | 6 +- src/SMESHGUI/SMESHGUI_Dialog.h | 6 +- src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_NodesDlg.cxx | 2 +- src/SMESHGUI/SMESHGUI_Operation.cxx | 44 ++- src/SMESHGUI/SMESHGUI_RemoveDlg.cxx | 2 +- .../SMESHGUI_StandardMeshInfosDlg.cxx | 2 +- 17 files changed, 413 insertions(+), 305 deletions(-) create mode 100644 src/SMESHGUI/SMESHGUI_CreateHypothesesOp.cxx create mode 100644 src/SMESHGUI/SMESHGUI_CreateHypothesesOp.h diff --git a/src/SMESHGUI/Makefile.in b/src/SMESHGUI/Makefile.in index 365709f75..f8b887bcb 100644 --- a/src/SMESHGUI/Makefile.in +++ b/src/SMESHGUI/Makefile.in @@ -44,7 +44,9 @@ EXPORT_HEADERS= SMESHGUI_Swig.hxx \ SMESHGUI_SpinBox.h \ SMESHGUI_aParameter.h \ SMESHGUI_aParameterDlg.h \ - SMESHGUI_Selection.h + SMESHGUI_Selection.h \ + SMESHGUI_Operation.h \ + SMESHGUI_Dialog.h # .po files to transform in .qm PO_FILES = \ @@ -84,6 +86,7 @@ LIB_SRC = SMESHGUI.cxx \ SMESHGUI_EditHypothesesDlg.cxx \ SMESHGUI_EditHypothesesOp.cxx \ SMESHGUI_CreateHypothesesDlg.cxx \ + SMESHGUI_CreateHypothesesOp.cxx \ SMESHGUI_XmlHandler.cxx \ SMESHGUI_Filter.cxx \ SMESHGUI_FilterDlg.cxx \ @@ -154,6 +157,7 @@ LIB_MOC = \ SMESHGUI_EditHypothesesDlg.h \ SMESHGUI_EditHypothesesOp.h \ SMESHGUI_CreateHypothesesDlg.h \ + SMESHGUI_CreateHypothesesOp.h \ SMESHGUI_FilterDlg.h \ SMESHGUI_FilterLibraryDlg.h \ SMESHGUI_SingleEditDlg.h \ diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 646a2815c..16e69b6ba 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -44,7 +44,7 @@ #include "SMESHGUI_MoveNodesOp.h" #include "SMESHGUI_AddMeshElementOp.h" #include "SMESHGUI_EditHypothesesOp.h" -#include "SMESHGUI_CreateHypothesesDlg.h" +#include "SMESHGUI_CreateHypothesesOp.h" #include "SMESHGUI_FilterDlg.h" #include "SMESHGUI_FilterLibraryDlg.h" #include "SMESHGUI_SingleEditDlg.h" @@ -751,7 +751,6 @@ void SMESHGUI::ResetState() //============================================================================= void SMESHGUI::EmitSignalDeactivateDialog() { - printf( "sln: EmitSignalDeactivateDialog EmitSignalDeactivateDialog EmitSignalDeactivateDialog\n" ); emit SignalDeactivateActiveDialog(); } @@ -1956,20 +1955,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 5000: // HYPOTHESIS - { - if(checkLock(aStudy)) break; - EmitSignalDeactivateDialog(); - new SMESHGUI_CreateHypothesesDlg ( this, "", FALSE, false ); - break; - } + startOperation( 5000 ); + break; case 5010: // ALGO - { - if(checkLock(aStudy)) break; - EmitSignalDeactivateDialog(); - new SMESHGUI_CreateHypothesesDlg ( this, "", FALSE, true); - break; - } - + startOperation( 5010 ); + break; case 5105: // Library of selection filters { static QValueList aTypes; @@ -3180,6 +3170,14 @@ SalomeApp_Operation* SMESHGUI::createOperation( const int id ) const op = new SMESHGUI_ExtrusionOp(); break; + case 5000: + op = new SMESHGUI_CreateHypothesesOp( false ); + break; + + case 5010: + op = new SMESHGUI_CreateHypothesesOp( true ); + break; + /* case 900: op = new SMESHGUI_MeshInfosOp(); break;*/ diff --git a/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx index 4a098c8ec..c0426475a 100644 --- a/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx @@ -43,7 +43,7 @@ // TRUE to construct a modal dialog. //================================================================================= SMESHGUI_AddSubMeshDlg::SMESHGUI_AddSubMeshDlg() -: SMESHGUI_Dialog( false, true ) +: SMESHGUI_Dialog( 0, false, true ) { setCaption(tr("SMESH_ADD_SUBMESH")); diff --git a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx b/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx index 68d2f10c8..e5e2285d4 100644 --- a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx @@ -27,11 +27,6 @@ #include "SMESHGUI_CreateHypothesesDlg.h" -#include "SMESHGUI_HypothesesUtils.h" -#include "SMESHGUI_Hypotheses.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI.h" - #include "SUIT_Desktop.h" #include "SUIT_ResourceMgr.h" @@ -47,248 +42,144 @@ #include #include -using namespace std; - -//================================================================================= -// function : SMESHGUI_CreateHypothesesDlg() -// purpose : Constructs a SMESHGUI_CreateHypothesesDlg which is a child of 'parent', with the -// name 'name' and widget flags set to 'f'. -// The dialog will by default be modeless, unless you set 'modal' to -// TRUE to construct a modal dialog. -//================================================================================= -SMESHGUI_CreateHypothesesDlg::SMESHGUI_CreateHypothesesDlg (SMESHGUI* theModule, - const char* name, - bool modal, - bool isAlgo) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose), - myIsAlgo(isAlgo), - mySMESHGUI( theModule ) +/*! + * \brief Constructor + * \param theIsAlgo - If TRUE when operator is used for creation of gypotheses +* +* Constructor does nothing +*/ +SMESHGUI_CreateHypothesesDlg::SMESHGUI_CreateHypothesesDlg ( bool isAlgo ) +: SMESHGUI_Dialog( 0, false, true, Apply | Cancel ), + myIsAlgo(isAlgo) { - if (!name) - setName("SMESHGUI_CreateHypothesesDlg"); - setCaption(isAlgo ? tr("SMESH_CREATE_ALGORITHMS" ) : tr("SMESH_CREATE_HYPOTHESES" )); - setSizeGripEnabled(TRUE); - - QGridLayout* SMESHGUI_CreateHypothesesDlgLayout = new QGridLayout(this); - SMESHGUI_CreateHypothesesDlgLayout->setSpacing(6); - SMESHGUI_CreateHypothesesDlgLayout->setMargin(11); - - /***************************************************************/ - GroupAlgorithms = new QGroupBox(this, "GroupAlgorithms"); - GroupAlgorithms->setTitle(isAlgo ? tr("SMESH_AVAILABLE_ALGORITHMS") : tr("SMESH_AVAILABLE_HYPOTHESES")); - GroupAlgorithms->setColumnLayout(0, Qt::Vertical); - GroupAlgorithms->layout()->setSpacing(0); - GroupAlgorithms->layout()->setMargin(0); - - QGridLayout* hypLayout = new QGridLayout(GroupAlgorithms->layout()); - hypLayout->setGeometry(QRect(12, 18, 139, 250)); - hypLayout->setAlignment(Qt::AlignTop); - hypLayout->setSpacing(6); - hypLayout->setMargin(11); - - ListAlgoDefinition = new QListView(GroupAlgorithms, "ListAlgoDefinition"); - ListAlgoDefinition->setMinimumSize(400, 200); - ListAlgoDefinition->addColumn(""); - ListAlgoDefinition->header()->hide(); - ListAlgoDefinition->setSelectionMode(QListView::Single); - ListAlgoDefinition->setResizeMode(QListView::AllColumns); - ListAlgoDefinition->setRootIsDecorated(true); - - hypLayout->addWidget(ListAlgoDefinition, 0, 0); - SMESHGUI_CreateHypothesesDlgLayout->addWidget(GroupAlgorithms, 0, 0); - - /***************************************************************/ - 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); - - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_CREATE" )); - buttonApply->setAutoDefault(TRUE); - buttonApply->setDefault(FALSE); - buttonApply->setEnabled(FALSE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); + setCaption( isAlgo ? tr( "SMESH_CREATE_ALGORITHMS" ) : tr( "SMESH_CREATE_HYPOTHESES" ) ); + setSizeGripEnabled( TRUE ); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); + QGridLayout* SMESHGUI_CreateHypothesesDlgLayout = new QGridLayout( mainFrame() ); + SMESHGUI_CreateHypothesesDlgLayout->setSpacing( 6 ); + SMESHGUI_CreateHypothesesDlgLayout->setMargin( 11 ); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - buttonCancel->setDefault(TRUE); - buttonCancel->setEnabled(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - - SMESHGUI_CreateHypothesesDlgLayout->addWidget(GroupButtons, 1, 0); /***************************************************************/ - - Init(); + QGroupBox* GroupAlgorithms = new QGroupBox( mainFrame(), "GroupAlgorithms" ); + GroupAlgorithms->setTitle( isAlgo ? tr( "SMESH_AVAILABLE_ALGORITHMS" ) : tr( "SMESH_AVAILABLE_HYPOTHESES" ) ); + GroupAlgorithms->setColumnLayout( 0, Qt::Vertical ); + GroupAlgorithms->layout()->setSpacing( 0 ); + GroupAlgorithms->layout()->setMargin( 0 ); + + QGridLayout* hypLayout = new QGridLayout( GroupAlgorithms->layout() ); + hypLayout->setGeometry( QRect( 12, 18, 139, 250 ) ); + hypLayout->setAlignment( Qt::AlignTop ); + hypLayout->setSpacing( 6 ); + hypLayout->setMargin( 11 ); + + myList = new QListView( GroupAlgorithms, "myList" ); + myList->setMinimumSize( 400, 200 ); + myList->addColumn( "" ); + myList->header()->hide(); + myList->setSelectionMode( QListView::Single ); + myList->setResizeMode( QListView::AllColumns ); + myList->setRootIsDecorated( true ); + + hypLayout->addWidget( myList, 0, 0 ); + SMESHGUI_CreateHypothesesDlgLayout->addWidget( GroupAlgorithms, 0, 0 ); + + setButtonText( Apply, tr( "SMESH_BUT_CREATE" ) ); + + // connect signals and slots + connect( myList, SIGNAL( selectionChanged() ), SLOT( onHypSelected() ) ); + connect( myList, SIGNAL( doubleClicked( QListViewItem* ) ), SLOT( onDoubleClicked( QListViewItem* ) ) ); + + // update button state + onHypSelected(); } -//================================================================================= -// function : ~SMESHGUI_CreateHypothesesDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= +/*! + * \brief Destructor +*/ SMESHGUI_CreateHypothesesDlg::~SMESHGUI_CreateHypothesesDlg() { - // no need to delete child widgets, Qt does it all for us } -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::Init() +/*! + * \brief Get Name of hypotheses or algorithm + * \return Name of hypotheses or algorithm +*/ +QString SMESHGUI_CreateHypothesesDlg::hypName() const { - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - InitAlgoDefinition(); - - /* signals and slots connections */ - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply())); - -// connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - connect(ListAlgoDefinition, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - connect(ListAlgoDefinition, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(onDoubleClicked(QListViewItem*))); + QListViewItem* item = myList->selectedItem(); + return item ? item->text( 1 ) : ""; +} - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); +/*! + * \brief Enable/Disable "Apply" button +* +* Private slot called when selection in list box changed enables/disables "Apply" button +*/ +void SMESHGUI_CreateHypothesesDlg::onHypSelected() +{ + QListViewItem* item = myList->selectedItem(); + setButtonEnabled( item && item->depth() > 0, Apply ); } -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::ClickOnCancel() +/*! + * \brief Emits dlgApply signal + * \param i - clicked item +* +* Private slot called when item of list box is double clicked emits dlgApply signal +*/ +void SMESHGUI_CreateHypothesesDlg::onDoubleClicked ( QListViewItem* i ) { - close(); + if ( i && i->depth() > 0 ) + emit dlgApply(); } -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::ClickOnApply() +/*! + * \brief Initialize dialog + * \param theHypList - List of hypotheses + * \param theHypList - Plugin names + * \param theHypList - Labels + * \param theHypList - Icons' identifiers +* +* Initializes dialog with parameters. This method is called by operation before showing +* dialog +*/ +void SMESHGUI_CreateHypothesesDlg::init( const QStringList& theHypList, + const QStringList& thePluginNames, + const QStringList& theLabels, + const QStringList& theIconIds ) { - if (mySMESHGUI->isActiveStudyLocked()) - return; - QListViewItem* item = ListAlgoDefinition->selectedItem(); - if (!item) - return; - QString aHypType = item->text(1); - MESSAGE("Apply " << aHypType); - char* sHypType = (char*)aHypType.latin1(); + myList->clear(); + for ( int i = 0; i < theHypList.count(); ++i ) + { + QListViewItem* parentItem = 0; + QListViewItem* childItem = myList->firstChild(); + while ( childItem ) + { + if ( childItem->text( 0 ) == thePluginNames[ i ] ) + { + parentItem = childItem; + break; + } + childItem = childItem->nextSibling(); + } + + if ( !parentItem ) + parentItem = new QListViewItem( myList, thePluginNames[ i ] ); + parentItem->setOpen( true ); + QListViewItem* aItem = + new QListViewItem( parentItem, theLabels[ i ], theHypList[ i ] ); + QPixmap aPixMap( resMgr()->loadPixmap( "SMESH", tr( theIconIds[ i ] ) ) ); + if ( !aPixMap.isNull() ) + aItem->setPixmap( 0, aPixMap ); + } +} - HypothesisData* aHypData = SMESH::GetHypothesisData(sHypType); - if (!aHypData) - return; - QString aClientLibName = aHypData->ClientLibName; - MESSAGE("Client lib name = " << aClientLibName); - if (aClientLibName == "") { - // Call hypothesis creation server method (without GUI) - QString aHypName = aHypData->Label; - SMESH::CreateHypothesis(sHypType, aHypName, myIsAlgo); - } else { - // Get hypotheses creator client (GUI) - SMESHGUI_GenericHypothesisCreator* aCreator = - SMESH::GetHypothesisCreator(sHypType); - // Create hypothesis/algorithm - aCreator->CreateHypothesis(myIsAlgo, this); - } -// buttonApply->setEnabled(FALSE); - return; -} -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::ActivateThisDialog() -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupButtons->setEnabled(true); - return; -} -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::enterEvent (QEvent*) -{ - ActivateThisDialog(); - return; -} -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::closeEvent (QCloseEvent* e) -{ - mySMESHGUI->ResetState(); - QDialog::closeEvent(e); -} -//================================================================================= -// function : onSelectionChanged() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::onSelectionChanged() -{ - QListViewItem* item = ListAlgoDefinition->selectedItem(); - buttonApply->setEnabled(item && item->depth() > 0); -} -//================================================================================= -// function : onDoubleClicked() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::onDoubleClicked (QListViewItem* i) -{ - if (i && i->depth() > 0) - this->ClickOnApply(); -} -//================================================================================= -// function : InitAlgoDefinition() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::InitAlgoDefinition() -{ - ListAlgoDefinition->clear(); - QStringList HypList = SMESH::GetAvailableHypotheses(myIsAlgo); - for (int i = 0; i < HypList.count(); ++i) { - HypothesisData* aHypData = SMESH::GetHypothesisData(HypList[i]); - QListViewItem* parentItem = 0; - QListViewItem* childItem = ListAlgoDefinition->firstChild(); - while (childItem) { - if (childItem->text(0) == aHypData->PluginName) { - parentItem = childItem; - break; - } - childItem = childItem->nextSibling(); - } - if (!parentItem) - parentItem = new QListViewItem(ListAlgoDefinition, aHypData->PluginName); - parentItem->setOpen(true); - QListViewItem* aItem = new QListViewItem(parentItem, aHypData->Label, HypList[i]); - QPixmap aPixMap (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr(aHypData->IconId))); - if (!aPixMap.isNull()) - aItem->setPixmap(0, aPixMap); - } -} diff --git a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h b/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h index e2bb65a67..c1ab1dd6f 100644 --- a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h +++ b/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h @@ -28,67 +28,42 @@ #ifndef DIALOGBOX_CREATE_HYPOTHESES_H #define DIALOGBOX_CREATE_HYPOTHESES_H -// QT Includes -#include -#include -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#include -#include - -class QButtonGroup; -class QGroupBox; -class QPushButton; +#include "SMESHGUI_Dialog.h" + class QListView; class QListViewItem; -class SMESHGUI; -//================================================================================= -// class : SMESHGUI_CreateHypothesesDlg -// purpose : -//================================================================================= -class SMESHGUI_CreateHypothesesDlg : public QDialog +/*! + * \brief Dialog for creation of hypotheses and algorithms +*/ +class SMESHGUI_CreateHypothesesDlg : public SMESHGUI_Dialog { - Q_OBJECT + Q_OBJECT public: - SMESHGUI_CreateHypothesesDlg (SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - bool isAlgo = FALSE); - ~SMESHGUI_CreateHypothesesDlg (); - -private: - - void Init() ; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - - void InitAlgoDefinition(); - SMESHGUI* mySMESHGUI; - bool myIsAlgo; + SMESHGUI_CreateHypothesesDlg ( bool isAlgo ); + virtual ~SMESHGUI_CreateHypothesesDlg(); - QGroupBox* GroupButtons; - QPushButton* buttonCancel; - QPushButton* buttonApply; + void init( const QStringList& theHypList, + const QStringList& thePluginNames, + const QStringList& theLabels, + const QStringList& theIconIds ); - QGroupBox* GroupAlgorithms; - QListView* ListAlgoDefinition; + QString hypName() const; private slots: - void ClickOnCancel(); - void ClickOnApply(); - void ActivateThisDialog() ; + void onHypSelected(); + void onDoubleClicked( QListViewItem* ); - void onSelectionChanged(); - void onDoubleClicked(QListViewItem*); +private: + + QListView* myList; + bool myIsAlgo; }; #endif // DIALOGBOX_CREATE_HYPOTHESES_H + + + diff --git a/src/SMESHGUI/SMESHGUI_CreateHypothesesOp.cxx b/src/SMESHGUI/SMESHGUI_CreateHypothesesOp.cxx new file mode 100644 index 000000000..0a159d89e --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_CreateHypothesesOp.cxx @@ -0,0 +1,151 @@ +/** +* SALOME SMESHGUI +* +* Copyright (C) 2005 CEA/DEN, EDF R&D +* +* +* +* File : SMESHGUI_CreateHypothesesOp.cxx +* Author : Sergey LITONIN +* Module : SALOME +*/ + +#include "SMESHGUI_CreateHypothesesOp.h" + +#include "SMESHGUI_CreateHypothesesDlg.h" +#include "SMESHGUI_HypothesesUtils.h" +#include "SMESHGUI_Hypotheses.h" +#include "SMESHGUI.h" + +#include "SALOME_ListIteratorOfListIO.hxx" + +#include +#include + +/*! + * \brief Constructor + * \param theIsAlgo - If TRUE when operation is used for creation of gypotheses +* +* Constructor does nothing +*/ +SMESHGUI_CreateHypothesesOp::SMESHGUI_CreateHypothesesOp( const bool theIsAlgo ) +: SMESHGUI_Operation(), + myIsAlgo( theIsAlgo ), + myDlg( 0 ) +{ +} + +/*! + * \brief Destructor +*/ +SMESHGUI_CreateHypothesesOp::~SMESHGUI_CreateHypothesesOp() +{ +} + +/*! + * \brief Start operation +* +* Virtual method redefined from the base class initializes and shows dialog +*/ +void SMESHGUI_CreateHypothesesOp::startOperation() +{ + if ( myDlg == 0 ) + myDlg = new SMESHGUI_CreateHypothesesDlg( myIsAlgo ); + + SMESHGUI_Operation::startOperation(); + + QStringList aHypList, aPluginNames, aLabels, anIconIds; + + aHypList = SMESH::GetAvailableHypotheses( myIsAlgo ); + for ( int i = 0, n = aHypList.count(); i < n; ++i ) + { + HypothesisData* aHypData = SMESH::GetHypothesisData( aHypList[i] ); + if ( aHypData ) + { + aPluginNames.append( aHypData->PluginName ); + aLabels.append( aHypData->Label ); + anIconIds.append( aHypData->IconId ); + } + else + { + aPluginNames.append( "" ); + aLabels.append( "" ); + anIconIds.append( "" ); + } + } + + myDlg->init( aHypList, aPluginNames, aLabels, anIconIds ); + myDlg->show(); +} + +/*! + * \brief Gets dialog + * \return Pointer to the dialog used by this operation +* +* This pointer is used by base operation for its different purposes +*/ +SalomeApp_Dialog* SMESHGUI_CreateHypothesesOp::dlg() const +{ + return myDlg; +} + +/*! + * \brief onApply + * \return TRUE if hypothesis or algorithm is created successfully, FALSE otherwise +* +* Virtual slot redefined from base class is called when "Apply" button clicked and +* creates hypothesis or algorithm +*/ +bool SMESHGUI_CreateHypothesesOp::onApply() +{ + if ( isStudyLocked() ) + return false; + + QString aHypType = myDlg->hypName(); + if ( aHypType == "" ) + return false; + + char* sHypType = ( char* )aHypType.latin1(); + + HypothesisData* aHypData = SMESH::GetHypothesisData( sHypType ); + if ( !aHypData ) + return false; + + QString aClientLibName = aHypData->ClientLibName; + + if ( aClientLibName == "" ) + { + // Call hypothesis creation server method ( without GUI ) + QString aHypName = aHypData->Label; + SMESH::CreateHypothesis( sHypType, aHypName, myIsAlgo ); + } + else + { + // Get hypotheses creator client ( GUI ) + SMESHGUI_GenericHypothesisCreator* aCreator = + SMESH::GetHypothesisCreator( sHypType ); + + // Create hypothesis/algorithm + aCreator->CreateHypothesis( myIsAlgo, dlg() ); + } + + return true; +} + + + + + + + + + + + + + + + + + + diff --git a/src/SMESHGUI/SMESHGUI_CreateHypothesesOp.h b/src/SMESHGUI/SMESHGUI_CreateHypothesesOp.h new file mode 100644 index 000000000..8bf85d433 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_CreateHypothesesOp.h @@ -0,0 +1,55 @@ +/** +* SALOME SMESHGUI +* +* Copyright (C) 2005 CEA/DEN, EDF R&D +* +* +* +* File : SMESHGUI_CreateHypothesesOp.h +* Author : Sergey LITONIN +* Module : SALOME +*/ + +#ifndef SMESHGUI_CreateHypothesesOp_H +#define SMESHGUI_CreateHypothesesOp_H + +#include "SMESHGUI_Operation.h" + +// IDL Headers +#include +#include CORBA_SERVER_HEADER(GEOM_Gen) +#include CORBA_SERVER_HEADER(SMESH_Mesh) + +class SMESHGUI_CreateHypothesesDlg; + +/*! + * \brief Operation for creation of hypotheses and algorithms +*/ +class SMESHGUI_CreateHypothesesOp : public SMESHGUI_Operation +{ + Q_OBJECT + +public: + + SMESHGUI_CreateHypothesesOp( const bool theIsAlgo ); + virtual ~SMESHGUI_CreateHypothesesOp(); + + virtual SalomeApp_Dialog* dlg() const; + +protected slots: + + virtual bool onApply(); + +protected: + + virtual void startOperation(); + +private: + + SMESHGUI_CreateHypothesesDlg* myDlg; + bool myIsAlgo; + +}; + + +#endif diff --git a/src/SMESHGUI/SMESHGUI_Dialog.cxx b/src/SMESHGUI/SMESHGUI_Dialog.cxx index eff519e68..7bfc21178 100644 --- a/src/SMESHGUI/SMESHGUI_Dialog.cxx +++ b/src/SMESHGUI/SMESHGUI_Dialog.cxx @@ -35,8 +35,9 @@ // function : SMESHGUI_Dialog // purpose : Constructor //================================================================================= -SMESHGUI_Dialog::SMESHGUI_Dialog( const bool modal, const bool allowResize, const int flags ) -: SalomeApp_Dialog( desktop(), "", modal, allowResize, flags ) +SMESHGUI_Dialog::SMESHGUI_Dialog( QWidget* parent, const bool modal, + const bool allowResize, const int flags ) +: SalomeApp_Dialog( parent == 0 ? desktop() : parent, "", modal, allowResize, flags ) { int pr = prefix( "SMESH" ); typeName( pr + MESH ) = tr( "DLG_MESH" ); @@ -107,3 +108,4 @@ int SMESHGUI_Dialog::prefix( const QString& name ) else return 0; } + diff --git a/src/SMESHGUI/SMESHGUI_Dialog.h b/src/SMESHGUI/SMESHGUI_Dialog.h index 927ac7b6c..abd25ed97 100644 --- a/src/SMESHGUI/SMESHGUI_Dialog.h +++ b/src/SMESHGUI/SMESHGUI_Dialog.h @@ -43,17 +43,17 @@ class SMESHGUI_Dialog : public SalomeApp_Dialog Q_OBJECT public: - SMESHGUI_Dialog( const bool = false, const bool = false, const int = OK | Cancel | Apply ); + SMESHGUI_Dialog( QWidget* = 0, const bool = false, const bool = false, const int = OK | Cancel | Apply ); virtual ~SMESHGUI_Dialog(); virtual void show(); //! set all content to enable (parameter is true) or disable state - void setContentActive( const bool ) const; + virtual void setContentActive( const bool ) const; //! Return hard-coded prefix using to differ overlapping types static int prefix( const QString& ); - + protected: //! find desktop of active application SUIT_Desktop* desktop() const; diff --git a/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx b/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx index 6e9bbca78..fe9f14c3a 100644 --- a/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx @@ -44,7 +44,7 @@ // TRUE to construct a modal dialog. //================================================================================= SMESHGUI_EditHypothesesDlg::SMESHGUI_EditHypothesesDlg() -: SMESHGUI_Dialog( false, true ) +: SMESHGUI_Dialog( 0, false, true ) { setName("SMESHGUI_EditHypothesesDlg"); setCaption(tr("SMESH_EDIT_HYPOTHESES")); diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx index 3db8e0b87..6db7264df 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx @@ -47,7 +47,7 @@ // purpose : constructor //================================================================================= SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg() -: SMESHGUI_Dialog( false, true, OK | Apply | Close ) +: SMESHGUI_Dialog( 0, false, true, OK | Apply | Close ) { QPixmap image0( resMgr()->loadPixmap( "SMESH", tr( "ICON_DLG_EDGE") ) ), image1( resMgr()->loadPixmap( "SMESH", tr( "ICON_DLG_TRIANGLE") ) ); diff --git a/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx index 33df4c1a1..ef9a7da86 100644 --- a/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx @@ -45,7 +45,7 @@ // Purpose : Constructor //======================================================================= SMESHGUI_GroupOpDlg::SMESHGUI_GroupOpDlg( const int aMode ) -: SMESHGUI_Dialog( false, true ) +: SMESHGUI_Dialog( 0, false, true ) { QString caption; if( aMode == 0 ) diff --git a/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx index edf7276ac..3ee33e445 100644 --- a/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx @@ -44,7 +44,7 @@ // TRUE to construct a modal dialog. //================================================================================= SMESHGUI_InitMeshDlg::SMESHGUI_InitMeshDlg() -: SMESHGUI_Dialog( false, true ) +: SMESHGUI_Dialog( 0, false, true ) { setCaption(tr("SMESH_INIT_MESH")); diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx index 65de0746b..3d3e08bd9 100644 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx @@ -42,7 +42,7 @@ // purpose : //================================================================================= SMESHGUI_NodesDlg::SMESHGUI_NodesDlg() -: SMESHGUI_Dialog( false, false, OK | Apply | Close ) +: SMESHGUI_Dialog( 0, false, false, OK | Apply | Close ) { QPixmap image0( resMgr()->loadPixmap("SMESH", tr("ICON_DLG_NODE"))); setName("SMESHGUI_NodesDlg"); diff --git a/src/SMESHGUI/SMESHGUI_Operation.cxx b/src/SMESHGUI/SMESHGUI_Operation.cxx index 29a406753..c26f5f69e 100755 --- a/src/SMESHGUI/SMESHGUI_Operation.cxx +++ b/src/SMESHGUI/SMESHGUI_Operation.cxx @@ -17,6 +17,8 @@ #include #include +#include + /* Class : SMESHGUI_Operation Description : Base class for all SMESH operations @@ -94,6 +96,8 @@ bool SMESHGUI_Operation::isReadyToStart() const tr( "NO_MODULE" ), tr( "SMESH_BUT_OK" ) ); return false; } + else if ( isStudyLocked() ) + return false; return true; } @@ -184,11 +188,39 @@ bool SMESHGUI_Operation::isStudyLocked( const bool theMess ) const return false; } -//======================================================================= -// name : isValid -// Purpose : -//======================================================================= -bool SMESHGUI_Operation::isValid( SUIT_Operation* op ) const +/*! + * \brief Verifies whether given operator is valid for this one + * \param theOtherOp - other operation + * \return Returns TRUE if the given operator is valid for this one, FALSE otherwise +* +* Virtual method redefined from base class verifies whether given operator is valid for +* this one (i.e. can be started "above" this operator). In current implementation method +* retuns false if theOtherOp operation is not intended for deleting objects or mesh +* elements. +*/ +bool SMESHGUI_Operation::isValid( SUIT_Operation* theOtherOp ) const { - return( op && op->inherits( "SMESHGUI_Operation" ) ); + static QStringList anOps; + if ( anOps.count() == 0 ) + { + anOps.append( "SMESHGUI_DeleteOp" ); + // to do add other operations here + } + + return theOtherOp && theOtherOp->inherits( "SMESHGUI_Operation" ) && + ( !anOps.contains( theOtherOp->className() ) || anOps.contains( className() ) ); + + return true; } + + + + + + + + + + + + diff --git a/src/SMESHGUI/SMESHGUI_RemoveDlg.cxx b/src/SMESHGUI/SMESHGUI_RemoveDlg.cxx index a7ef5c623..a9eb7547e 100644 --- a/src/SMESHGUI/SMESHGUI_RemoveDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RemoveDlg.cxx @@ -42,7 +42,7 @@ // purpose : //================================================================================= SMESHGUI_RemoveDlg::SMESHGUI_RemoveDlg( const bool elem ) -: SMESHGUI_Dialog( false, true, OK | Apply | Close ) +: SMESHGUI_Dialog( 0, false, true, OK | Apply | Close ) { QString entity = elem ? "ELEMENT" : "NODE"; QString name = QString( "ICON_DLG_REM_%1" ).arg( entity ); diff --git a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx b/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx index 39f78d08a..1c8ac49a3 100644 --- a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx @@ -42,7 +42,7 @@ */ //================================================================================= SMESHGUI_StandardMeshInfosDlg::SMESHGUI_StandardMeshInfosDlg() -: SMESHGUI_Dialog( false, false, OK ) +: SMESHGUI_Dialog( 0, false, false, OK ) { setCaption(tr("SMESH_STANDARD_MESHINFO_TITLE" )); -- 2.39.2