Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "SMESHGUI_MeshOrderDlg.h"
00025
00026
00027 #include <Qt>
00028 #include <QFrame>
00029 #include <QLabel>
00030 #include <QBoxLayout>
00031 #include <QSpacerItem>
00032 #include <QToolButton>
00033 #include <QListWidget>
00034 #include <QListWidgetItem>
00035
00036 #define SPACING 6
00037 #define MARGIN 11
00038
00042 enum MeshOrderItemType { MeshItem = QListWidgetItem::UserType, SeparatorItem };
00043
00044
00048
00049
00050 SMESHGUI_MeshOrderBox::SMESHGUI_MeshOrderBox(QWidget* theParent)
00051 : QGroupBox( theParent ), myIsChanged( false ), myUpBtn(0), myDownBtn(0)
00052 {
00053 QHBoxLayout* hBoxLayout = new QHBoxLayout(this);
00054 hBoxLayout->setMargin( MARGIN );
00055 hBoxLayout->setSpacing( SPACING );
00056
00057 myMeshNames = new QListWidget(this);
00058 myMeshNames->setSelectionMode(QAbstractItemView::SingleSelection);
00059 myMeshNames->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding ));
00060 hBoxLayout->addWidget(myMeshNames);
00061
00062 QGroupBox* btnGrp = new QGroupBox(this);
00063 hBoxLayout->addWidget(btnGrp);
00064
00065 myUpBtn = new QToolButton(btnGrp);
00066 myDownBtn = new QToolButton(btnGrp);
00067 myUpBtn-> setArrowType( Qt::UpArrow );
00068 myDownBtn->setArrowType( Qt::DownArrow );
00069
00070 QVBoxLayout* vBoxLayout = new QVBoxLayout(btnGrp);
00071 vBoxLayout->addSpacerItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
00072 vBoxLayout->addWidget( myUpBtn );
00073 vBoxLayout->addWidget( myDownBtn );
00074 vBoxLayout->addSpacerItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
00075
00076 connect( myUpBtn, SIGNAL( clicked() ), this, SLOT( onMoveItem() ) );
00077 connect( myDownBtn, SIGNAL( clicked() ), this, SLOT( onMoveItem() ) );
00078 connect( myMeshNames, SIGNAL( itemSelectionChanged() ), this, SLOT( onSelectionChanged() ) );
00079
00080 onSelectionChanged();
00081 }
00082
00083
00087
00088
00089 SMESHGUI_MeshOrderBox::~SMESHGUI_MeshOrderBox()
00090 {
00091 }
00092
00093
00097
00098
00099 static void addSeparator( QListWidget* theList )
00100 {
00101 QListWidgetItem* item = new QListWidgetItem( theList, SeparatorItem );
00102 QFrame* hline = new QFrame( theList );
00103 hline->setFrameStyle( QFrame::HLine | QFrame::Sunken );
00104 theList->addItem( item );
00105 theList->setItemWidget( item, hline );
00106 }
00107
00108
00112
00113
00114 static void addMeshItem( QListWidget* theList,
00115 const QString& theName,
00116 const int theId )
00117 {
00118 QListWidgetItem* item = new QListWidgetItem( theName, theList, MeshItem );
00119 item->setData( Qt::UserRole, theId );
00120 theList->addItem( item );
00121 }
00122
00123
00127
00128
00129 void SMESHGUI_MeshOrderBox::Clear()
00130 {
00131 myMeshNames->clear();
00132 myIsChanged = false;
00133 }
00134
00135
00139
00140
00141 void SMESHGUI_MeshOrderBox::SetMeshes(const ListListName& theMeshNames,
00142 const ListListId& theMeshIds)
00143 {
00144 Clear();
00145 ListListName::const_iterator nLIt = theMeshNames.constBegin();
00146 ListListId::const_iterator idLIt = theMeshIds.constBegin();
00147 for ( ; nLIt != theMeshNames.constEnd(); ++nLIt, ++idLIt )
00148 {
00149 const QStringList& names = (*nLIt);
00150 const QList<int>& ids = (*idLIt);
00151 if ( myMeshNames->count() )
00152 addSeparator( myMeshNames );
00153 QStringList::const_iterator nameIt = names.constBegin();
00154 QList<int>::const_iterator idIt = ids.constBegin();
00155 for ( ; nameIt != names.constEnd(); ++nameIt, ++idIt )
00156 addMeshItem( myMeshNames, *nameIt, *idIt );
00157 }
00158 }
00159
00160
00164
00165
00166 static bool checkItem(QListWidgetItem* theItem)
00167 {
00168 return theItem && (int)theItem->type() != (int)SeparatorItem;
00169 }
00170
00171
00175
00176
00177 ListListId SMESHGUI_MeshOrderBox::GetMeshIds() const
00178 {
00179 ListListId aLLIds;
00180 aLLIds.append( QList<int>() );
00181 for ( int i = 0, n = myMeshNames->count(); i < n; i++ )
00182 {
00183 QListWidgetItem* it = myMeshNames->item( i );
00184 if (checkItem( it ))
00185 aLLIds.last().append( it->data( Qt::UserRole ).toInt() );
00186 else
00187 aLLIds.append( QList<int>() );
00188 }
00189 return aLLIds;
00190 }
00191
00192
00196
00197
00198 ListListName SMESHGUI_MeshOrderBox::GetMeshNames() const
00199 {
00200 ListListName aLLNames;
00201 aLLNames.append( QStringList() );
00202 for ( int i = 0, n = myMeshNames->count(); i < n; i++ )
00203 {
00204 QListWidgetItem* it = myMeshNames->item( i );
00205 if (checkItem( it ))
00206 aLLNames.last().append( it->text() );
00207 else
00208 aLLNames.append( QStringList() );
00209 }
00210 return aLLNames;
00211 }
00212
00213
00217
00218
00219 void SMESHGUI_MeshOrderBox::onSelectionChanged()
00220 {
00221 bool isUp = false;
00222 bool isDown = false;
00223 QList<QListWidgetItem *> items = myMeshNames->selectedItems();
00224 if ( !items.isEmpty() )
00225 {
00226 QListWidgetItem* selItem = (*(items.begin()));
00227 if (checkItem(selItem))
00228 {
00229 const int rowId = myMeshNames->row( selItem );
00230 isUp = checkItem( myMeshNames->item( rowId - 1 ) );
00231 isDown = checkItem( myMeshNames->item( rowId + 1 ) );
00232 }
00233 }
00234 myUpBtn-> setEnabled( isUp );
00235 myDownBtn->setEnabled( isDown );
00236 }
00237
00238
00242
00243
00244 void SMESHGUI_MeshOrderBox::onMoveItem()
00245 {
00246 moveItem( sender() == myUpBtn );
00247 }
00248
00249
00253
00254
00255 void SMESHGUI_MeshOrderBox::moveItem(const bool theIsUp)
00256 {
00257
00258 QList<QListWidgetItem *> items = myMeshNames->selectedItems();
00259 if ( items.isEmpty() )
00260 return;
00261 QListWidgetItem * selItem = (*(items.begin()));
00262 if (!checkItem(selItem))
00263 return;
00264 int rowId = myMeshNames->row( selItem );
00265 if ( rowId == -1 )
00266 return;
00267
00268
00269 myIsChanged = true;
00270 myMeshNames->takeItem( rowId );
00271 myMeshNames->insertItem(theIsUp ? rowId-1 : rowId+1, selItem );
00272
00273
00274 selItem->setSelected( true );
00275 myMeshNames->setCurrentItem( selItem );
00276 }
00277
00278
00282
00283
00284 bool SMESHGUI_MeshOrderBox:: IsOrderChanged() const
00285 {
00286 return myIsChanged;
00287 }
00288
00289
00293
00294
00295 SMESHGUI_MeshOrderDlg::SMESHGUI_MeshOrderDlg(QWidget* theParent)
00296 : SMESHGUI_Dialog( theParent, false, false, OK | Cancel | Help )
00297 {
00298 setWindowTitle( tr( "SMESH_MESHORDER_TITLE") );
00299 QFrame* main = mainFrame();
00300
00301 QVBoxLayout* aDlgLay = new QVBoxLayout (main);
00302 aDlgLay->setMargin( 0 );
00303 aDlgLay->setSpacing( SPACING );
00304
00305 myBox = new SMESHGUI_MeshOrderBox( main );
00306
00307 aDlgLay->addWidget(myBox);
00308 aDlgLay->setStretchFactor(main, 1);
00309 }
00310
00311
00315
00316
00317 SMESHGUI_MeshOrderDlg::~SMESHGUI_MeshOrderDlg()
00318 {
00319 }
00320
00321
00325
00326
00327 SMESHGUI_MeshOrderBox* SMESHGUI_MeshOrderDlg::GetMeshOrderBox() const
00328 {
00329 return myBox;
00330 }