X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_DeleteGroupDlg.cxx;h=5d0a1ee7d79e20292be6efda627b9077ffad4fe4;hp=db93adf3b9649e2695af7f1c518614669ed2eee6;hb=0fdf27b77bce6d48fa08a35ded5a5af3d13834e8;hpb=c29c4a6a7a2656ab48e5c3565ef416901e83bb63 diff --git a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx b/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx index db93adf3b..5d0a1ee7d 100644 --- a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx @@ -1,295 +1,351 @@ -// SMESH SMESHGUI : GUI for SMESH component +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // +// 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, 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 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : SMESHGUI_DeleteGroupDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH +// File : SMESHGUI_DeleteGroupDlg.cxx +// Author : Sergey LITONIN, Open CASCADE S.A.S. +// SMESH includes +// #include "SMESHGUI_DeleteGroupDlg.h" #include "SMESHGUI.h" -#include "SMESH_TypeFilter.hxx" #include "SMESHGUI_Utils.h" #include "SMESHGUI_VTKUtils.h" -#include "QAD_Desktop.h" -#include "SALOME_Selection.h" -#include "SALOME_ListIteratorOfListIO.hxx" +#include + +// SALOME GUI includes +#include +#include +#include +#include + +#include +#include +#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include -#include "SALOMEconfig.h" +#include +#include + +// Qt includes +#include +#include +#include +#include +#include +#include + +// IDL includes +#include #include CORBA_SERVER_HEADER(SMESH_Mesh) -#define SPACING 5 -#define MARGIN 10 - -/* - Class : SMESHGUI_DeleteGroupDlg - Description : Delete groups and their contents -*/ - -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::SMESHGUI_DeleteGroupDlg -// Purpose : Constructor -//======================================================================= -SMESHGUI_DeleteGroupDlg::SMESHGUI_DeleteGroupDlg( QWidget* theParent, - SALOME_Selection* theSelection ) -: QDialog( theParent, "SMESHGUI_DeleteGroupDlg", false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) +#define SPACING 6 +#define MARGIN 11 + +/*! + * Class : SMESHGUI_DeleteGroupDlg + * Description : Delete groups and their contents + */ + +//================================================================================= +// function : SMESHGUI_DeleteGroupDlg() +// purpose : Constructor +//================================================================================= +SMESHGUI_DeleteGroupDlg::SMESHGUI_DeleteGroupDlg (SMESHGUI* theModule): + QDialog(SMESH::GetDesktop(theModule)), + mySelectionMgr(SMESH::GetSelectionMgr(theModule)), + mySMESHGUI(theModule) { - setCaption( tr( "CAPTION" ) ); + setModal(false); + setWindowTitle(tr("CAPTION")); - QVBoxLayout* aDlgLay = new QVBoxLayout( this, MARGIN, SPACING ); + QVBoxLayout* aDlgLay = new QVBoxLayout(this); + aDlgLay->setMargin(MARGIN); + aDlgLay->setSpacing(SPACING); - QFrame* aMainFrame = createMainFrame ( this ); - QFrame* aBtnFrame = createButtonFrame( this ); + QWidget* aMainFrame = createMainFrame (this); + QWidget* aBtnFrame = createButtonFrame(this); - aDlgLay->addWidget( aMainFrame ); - aDlgLay->addWidget( aBtnFrame ); + aDlgLay->addWidget(aMainFrame); + aDlgLay->addWidget(aBtnFrame); - aDlgLay->setStretchFactor( aMainFrame, 1 ); + myHelpFileName = "deleting_groups_page.html"; - Init( theSelection ) ; + Init(); } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_DeleteGroupDlg::createMainFrame( QWidget* theParent ) +//================================================================================= +// function : createMainFrame() +// purpose : Create frame containing dialog's input fields +//================================================================================= +QWidget* SMESHGUI_DeleteGroupDlg::createMainFrame (QWidget* theParent) { - QGroupBox* aMainGrp = new QGroupBox( 1, Qt::Horizontal, tr( "SELECTED_GROUPS" ), theParent ); - - myListBox = new QListBox( aMainGrp ); - myListBox->setMinimumHeight( 100 ); - myListBox->setSelectionMode( QListBox::NoSelection ); - myListBox->setRowMode( QListBox::FitToWidth ); + QGroupBox* aMainGrp = + new QGroupBox(tr("SELECTED_GROUPS"), theParent); + QVBoxLayout* aLay = new QVBoxLayout(aMainGrp); + aLay->setMargin(MARGIN); + aLay->setSpacing(SPACING); + + myListBox = new QListWidget(aMainGrp); + myListBox->setMinimumSize(150, 100); + myListBox->setSelectionMode(QListWidget::NoSelection); + //myListBox->setRowMode(QListBox::FitToWidth); + myListBox->setFlow(QListWidget::LeftToRight); + myListBox->setWrapping(true); + + aLay->addWidget(myListBox); return aMainGrp; } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_DeleteGroupDlg::createButtonFrame( QWidget* theParent ) +//================================================================================= +// function : createButtonFrame() +// purpose : Create frame containing buttons +//================================================================================= +QWidget* SMESHGUI_DeleteGroupDlg::createButtonFrame (QWidget* theParent) { - QFrame* aFrame = new QFrame( theParent ); - aFrame->setFrameStyle( QFrame::Box | QFrame::Sunken ); + QGroupBox* aFrame = new QGroupBox(theParent); - myOkBtn = new QPushButton( tr( "SMESH_BUT_OK" ), aFrame ); - myApplyBtn = new QPushButton( tr( "SMESH_BUT_APPLY" ), aFrame ); - myCloseBtn = new QPushButton( tr( "SMESH_BUT_CLOSE" ), aFrame ); + myOkBtn = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), aFrame); + myApplyBtn = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame); + myCloseBtn = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame); + myHelpBtn = new QPushButton(tr("SMESH_BUT_HELP"), aFrame); - QSpacerItem* aSpacer = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum ); + QHBoxLayout* aLay = new QHBoxLayout(aFrame); + aLay->setMargin(MARGIN); + aLay->setSpacing(SPACING); - QHBoxLayout* aLay = new QHBoxLayout( aFrame, MARGIN, SPACING ); + aLay->addWidget(myOkBtn); + aLay->addSpacing(10); + aLay->addWidget(myApplyBtn); + aLay->addSpacing(10); + aLay->addStretch(); + aLay->addWidget(myCloseBtn); + aLay->addWidget(myHelpBtn); - aLay->addWidget( myOkBtn ); - aLay->addWidget( myApplyBtn ); - aLay->addItem( aSpacer); - aLay->addWidget( myCloseBtn ); - // connect signals and slots - connect( myOkBtn, SIGNAL( clicked() ), SLOT( onOk() ) ); - connect( myCloseBtn, SIGNAL( clicked() ), SLOT( onClose() ) ) ; - connect( myApplyBtn, SIGNAL( clicked() ), SLOT( onApply() ) ); - + connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); + connect(myCloseBtn, SIGNAL(clicked()), SLOT(reject())); + connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); + connect(myHelpBtn, SIGNAL(clicked()), SLOT(onHelp())); + return aFrame; } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::~SMESHGUI_DeleteGroupDlg +//================================================================================= +// name : ~SMESHGUI_DeleteGroupDlg() // Purpose : Destructor -//======================================================================= +//================================================================================= SMESHGUI_DeleteGroupDlg::~SMESHGUI_DeleteGroupDlg() { } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::Init -// Purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -void SMESHGUI_DeleteGroupDlg::Init( SALOME_Selection* theSelection ) +//================================================================================= +// function : Init() +// purpose : Init dialog fields, connect signals and slots, show dialog +//================================================================================= +void SMESHGUI_DeleteGroupDlg::Init () { myBlockSelection = false; - mySelection = theSelection; - SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI(); - aSMESHGUI->SetActiveDialogBox( ( QDialog* )this ) ; - + mySMESHGUI->SetActiveDialogBox((QDialog*)this); + // selection and SMESHGUI - connect( mySelection, SIGNAL( currentSelectionChanged() ), SLOT( onSelectionDone() ) ); - connect( aSMESHGUI, SIGNAL( SignalDeactivateActiveDialog() ), SLOT( onDeactivate() ) ); - connect( aSMESHGUI, SIGNAL( SignalCloseAllDialogs() ), SLOT( onClose() ) ); - - int x, y ; - aSMESHGUI->DefineDlgPosition( this, x, y ); - this->move( x, y ); - this->show(); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); + connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); + connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(reject())); // set selection mode - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection, true ); - mySelection->AddFilter( new SMESH_TypeFilter( GROUP ) ); + mySelectionMgr->installFilter(new SMESH_TypeFilter(SMESH::GROUP)); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); onSelectionDone(); - - return; } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::isValid -// Purpose : Verify validity of input data -//======================================================================= +//================================================================================= +// function : isValid() +// purpose : Verify validity of input data +//================================================================================= bool SMESHGUI_DeleteGroupDlg::isValid() { - if ( myListBox->count() == 0 ) - { - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "NO_SELECTED_GROUPS" ), QMessageBox::Ok ); + if (myListBox->count() == 0) { + SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("NO_SELECTED_GROUPS")); return false; } - - return !SMESHGUI::GetSMESHGUI()->ActiveStudyLocked(); + + return !mySMESHGUI->isActiveStudyLocked(); } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::onApply -// Purpose : SLOT called when "Apply" button pressed. -//======================================================================= +//================================================================================= +// function : onApply() +// purpose : SLOT called when "Apply" button pressed. +//================================================================================= bool SMESHGUI_DeleteGroupDlg::onApply() { - if ( !isValid() ) + if (!isValid()) return false; myBlockSelection = true; - - QValueList::iterator anIter; - for ( anIter = myListGrp.begin(); anIter != myListGrp.end(); ++anIter ) - { - SMESH::SMESH_Mesh_ptr aMesh = (*anIter)->GetMesh(); - if ( !aMesh->_is_nil() ) - aMesh->RemoveGroupWithContents( *anIter ); + + QList::iterator anIter; + for (anIter = myListGrp.begin(); anIter != myListGrp.end(); ++anIter) { + SMESH::SMESH_Mesh_var aMesh = (*anIter)->GetMesh(); + if (!aMesh->_is_nil()) + aMesh->RemoveGroupWithContents(*anIter); } myListBox->clear(); myListGrp.clear(); - mySelection->ClearIObjects(); + mySelectionMgr->clearSelected(); + + /** Erase graphical objects **/ + SALOME_ListIteratorOfListIO anIterIO (myListGrpIO); + for ( ; anIterIO.More(); anIterIO.Next()) + SMESH::RemoveVisualObjectWithActors( anIterIO.Value()->getEntry(), /*fromAllViews=*/true ); + SMESH::UpdateView(); - SMESHGUI::GetSMESHGUI()->GetActiveStudy()->updateObjBrowser( true ); - + SMESHGUI::Modified(); + mySMESHGUI->updateObjBrowser(true); + myBlockSelection = false; return true; } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::onOk -// Purpose : SLOT called when "Ok" button pressed. -//======================================================================= +//================================================================================= +// function : onOk() +// purpose : SLOT called when "Ok" button pressed. +//================================================================================= void SMESHGUI_DeleteGroupDlg::onOk() { - if ( onApply() ) - onClose(); + if (onApply()) + reject(); +} + +//================================================================================= +// function : reject() +// purpose : SLOT called when "Close" button pressed. Close dialog +//================================================================================= +void SMESHGUI_DeleteGroupDlg::reject() +{ + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + disconnect(mySelectionMgr, 0, this, 0); + disconnect(mySMESHGUI, 0, this, 0); + mySMESHGUI->ResetState(); + mySelectionMgr->clearFilters(); + QDialog::reject(); } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_DeleteGroupDlg::onClose() +//================================================================================= +// function : onHelp() +// purpose : +//================================================================================= +void SMESHGUI_DeleteGroupDlg::onHelp() { - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - disconnect( mySelection, 0, this, 0 ); - disconnect( SMESHGUI::GetSMESHGUI(), 0, this, 0 ); - SMESHGUI::GetSMESHGUI()->ResetState() ; - mySelection->ClearFilters(); - reject(); + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warning(this, tr("WRN_WARNING"), + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", + platform)). + arg(myHelpFileName)); + } } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::onSelectionDone -// Purpose : SLOT called when selection changed -//======================================================================= +//================================================================================= +// function : onSelectionDone() +// purpose : SLOT called when selection changed +//================================================================================= void SMESHGUI_DeleteGroupDlg::onSelectionDone() { - if ( myBlockSelection ) + if (myBlockSelection) return; - + myListGrp.clear(); + myListGrpIO.Clear(); QStringList aNames; - - const SALOME_ListIO& aListIO = mySelection->StoredIObjects(); - SALOME_ListIteratorOfListIO anIter( aListIO ); - for( ; anIter.More(); anIter.Next() ) - { - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface( anIter.Value() ); - if ( !aGroup->_is_nil() ) - { - aNames.append( aGroup->GetName() ); - myListGrp.append( aGroup ); + + SALOME_ListIO aListIO; + mySelectionMgr->selectedObjects(aListIO); + SALOME_ListIteratorOfListIO anIter (aListIO); + for ( ; anIter.More(); anIter.Next()) { + SMESH::SMESH_GroupBase_var aGroup = + SMESH::IObjectToInterface(anIter.Value()); + if (!aGroup->_is_nil()) { + aNames.append(aGroup->GetName()); + myListGrp.append(aGroup); + myListGrpIO.Append( anIter.Value() ); } } - + myListBox->clear(); - myListBox->insertStringList( aNames ); + myListBox->addItems(aNames); } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::onDeactivate -// Purpose : SLOT called when dialog must be deativated -//======================================================================= +//================================================================================= +// function : onDeactivate() +// purpose : SLOT called when dialog must be deativated +//================================================================================= void SMESHGUI_DeleteGroupDlg::onDeactivate() { - mySelection->ClearFilters(); - setEnabled( false ); + mySelectionMgr->clearFilters(); + setEnabled(false); } -//======================================================================= -// name : SMESHGUI_DeleteGroupDlg::enterEvent -// Purpose : Event filter -//======================================================================= -void SMESHGUI_DeleteGroupDlg::enterEvent( QEvent* ) +//================================================================================= +// function : enterEvent() +// purpose : Event filter +//================================================================================= +void SMESHGUI_DeleteGroupDlg::enterEvent (QEvent*) { - SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog() ; - setEnabled( true ); - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection, true ); - mySelection->AddFilter( new SMESH_TypeFilter( GROUP ) ); + mySMESHGUI->EmitSignalDeactivateDialog(); + setEnabled(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + mySelectionMgr->installFilter(new SMESH_TypeFilter (SMESH::GROUP)); } - //================================================================================= -// function : closeEvent() +// function : keyPressEvent() // purpose : //================================================================================= -void SMESHGUI_DeleteGroupDlg::closeEvent( QCloseEvent* ) +void SMESHGUI_DeleteGroupDlg::keyPressEvent( QKeyEvent* e ) { - onClose() ; -} + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + onHelp(); + } +}