UltraScan III
us_select_triples.cpp
Go to the documentation of this file.
1 
3 #include "us_select_triples.h"
4 #include "us_settings.h"
5 #include "us_gui_settings.h"
6 
9 US_SelectTriples::US_SelectTriples( QStringList& triples )
10  : US_WidgetsDialog( 0, 0 ), triples( triples )
11 {
12  original = triples; // List of original includes
13  nbr_select = 0;
14  nbr_orig = original.size();
16 
17  setWindowTitle( tr( "Triples Selector for Deletes" ) );
18  setPalette( US_GuiSettings::frameColor() );
19 
20  QVBoxLayout* main = new QVBoxLayout( this );
21  main->setSpacing ( 2 );
22  main->setContentsMargins( 2, 2, 2, 2 );
23  QVBoxLayout* left = new QVBoxLayout;
24  QVBoxLayout* right = new QVBoxLayout;
25  QHBoxLayout* lists = new QHBoxLayout;
26 
27  // Read-only triple list count text
28  le_original = us_lineedit( tr( "%1 original triples" )
29  .arg( nbr_orig ), -1, true );
30  le_selected = us_lineedit( tr( "%1 excluded triples" )
31  .arg( nbr_select ), -1, true );
32 
33  // Lambda list labels
34  QLabel* lb_original = us_label( tr( "Included Triples" ) );
35  QLabel* lb_selected = us_label( tr( "Excluded Triples" ) );
36 
37  // Lambda list widgets
40  lw_original->setSelectionMode( QAbstractItemView::ExtendedSelection );
41  lw_selected->setSelectionMode( QAbstractItemView::ExtendedSelection );
43  excludes.clear();
44 
45  for ( int ii = 0; ii < nbr_orig; ii++ )
46  { // Add items to the original (included) list
47  lw_original->addItem( original[ ii ] );
48  }
49 
50  // Add (=>) and Remove (<=) buttons for lists
51  pb_add = us_pushbutton( tr( "Add ===>" ) );
52  pb_remove = us_pushbutton( tr( "<=== Remove" ) );
53 
54  // Button Row
55  QHBoxLayout* buttons = new QHBoxLayout;
56 
57  QPushButton* pb_reset = us_pushbutton( tr( "Reset" ) );
58  QPushButton* pb_help = us_pushbutton( tr( "Help" ) );
59  QPushButton* pb_cancel = us_pushbutton( tr( "Cancel" ) );
60  pb_accept = us_pushbutton( tr( "Accept" ) );
61  pb_accept->setEnabled( false );
62  pb_add ->setEnabled( includes.count() > 0 );
63  pb_remove->setEnabled( excludes.count() > 0 );
64 
65  // Connections
66  connect( pb_add, SIGNAL( clicked() ), SLOT( add_selections() ) );
67  connect( pb_remove, SIGNAL( clicked() ), SLOT( rmv_selections() ) );
68  connect( pb_reset, SIGNAL( clicked() ), SLOT( reset() ) );
69  connect( pb_help, SIGNAL( clicked() ), SLOT( help() ) );
70  connect( pb_cancel, SIGNAL( clicked() ), SLOT( cancel() ) );
71  connect( pb_accept, SIGNAL( clicked() ), SLOT( done() ) );
72 
73  // Complete layouts
74  buttons->addWidget( pb_reset );
75  buttons->addWidget( pb_help );
76  buttons->addWidget( pb_cancel );
77  buttons->addWidget( pb_accept );
78 
79  left ->addWidget( lb_original );
80  left ->addWidget( lw_original );
81  left ->addWidget( pb_add );
82  right->addWidget( lb_selected );
83  right->addWidget( lw_selected );
84  right->addWidget( pb_remove );
85  lists->addLayout( left );
86  lists->addLayout( right );
87  main ->addWidget( le_original );
88  main ->addWidget( le_selected );
89  main ->addLayout( lists );
90  main ->addLayout( buttons );
91 
92  resize( 140, 700 );
93 }
94 
95 // Slot to add selections to the excluded list
97 {
98 DbgLv(0) << "AddSelections";
99  // Get the list of selected items
100  QList< QListWidgetItem* > selitems = lw_original->selectedItems();
101  nbr_select = selitems.count();
102 
103  for ( int ii = 0; ii < nbr_select; ii++ )
104  { // Move selected items from included to excluded
105  QListWidgetItem* l_item = selitems.at( ii );
106  QString triple = l_item->text();
107  lw_original->setCurrentItem ( l_item, QItemSelectionModel::Deselect );
108  excludes << triple; // Add to excluded
109  includes.removeOne( triple ); // Remove from included
110  }
111 
112  excludes.sort(); // Sort new excluded list
113  lw_original->clear(); // Clear list widgets
114  lw_selected->clear();
115  nbr_incl = includes.count();
116  nbr_excl = excludes.count();
117 
118  for ( int ii = 0; ii < nbr_incl; ii++ ) // Repopulate included widget
119  lw_original->addItem( includes[ ii ] );
120 
121  for ( int ii = 0; ii < nbr_excl; ii++ ) // Repopulate excluded widget
122  lw_selected->addItem( excludes[ ii ] );
123 
124  // Report the new state of things
125  le_original->setText( ( nbr_incl == 1 ) ?
126  tr( "1 included triple" ) :
127  tr( "%1 included triples" ).arg( nbr_incl )
128  + tr( " (of %1 original)" ).arg( nbr_orig ) );
129  le_selected->setText( ( nbr_excl == 1 ) ?
130  tr( "1 excluded triple" ) :
131  tr( "%1 excluded triples" ).arg( nbr_excl ) );
132 
133  // Enable/disable buttons appropriately
134  pb_accept->setEnabled( nbr_excl > 0 && nbr_incl > 0 );
135  pb_add ->setEnabled( includes.count() > 0 );
136  pb_remove->setEnabled( excludes.count() > 0 );
137 }
138 
139 // Slot to remove items from the excluded list
141 {
142 DbgLv(0) << "RemoveSelections";
143  // Get the list of selected items
144  QList< QListWidgetItem* > selitems = lw_selected->selectedItems();
145  nbr_select = selitems.count();
146 
147  for ( int ii = 0; ii < nbr_select; ii++ )
148  { // Move selected items from excluded to included
149  QListWidgetItem* l_item = selitems.at( ii );
150  QString triple = l_item->text();
151  lw_selected->setCurrentItem ( l_item, QItemSelectionModel::Deselect );
152  includes << triple; // Add to included
153  excludes.removeOne( triple ); // Remove from excluded
154  }
155 
156  includes.sort(); // Sort new included list
157  lw_original->clear(); // Clear list widgets
158  lw_selected->clear();
159  nbr_incl = includes.count();
160  nbr_excl = excludes.count();
161 
162  for ( int ii = 0; ii < nbr_incl; ii++ ) // Repopulate included widget
163  lw_original->addItem( includes[ ii ] );
164 
165  for ( int ii = 0; ii < nbr_excl; ii++ ) // Repopulate excluded widget
166  lw_selected->addItem( excludes[ ii ] );
167 
168  // Report the new state of things
169  le_original->setText( ( nbr_incl == 1 ) ?
170  tr( "1 included triple" ) :
171  tr( "%1 included triples" ).arg( nbr_incl )
172  + tr( " (of %1 original)" ).arg( nbr_orig ) );
173  le_selected->setText( ( nbr_excl == 1 ) ?
174  tr( "1 excluded triple" ) :
175  tr( "%1 excluded triples" ).arg( nbr_excl ) );
176 
177  // Enable/disable buttons appropriately
178  pb_accept->setEnabled( nbr_excl > 0 && nbr_incl > 0 );
179  pb_add ->setEnabled( includes.count() > 0 );
180  pb_remove->setEnabled( excludes.count() > 0 );
181 }
182 
183 // Reset the lists and buttons to their original state
185 {
186  lw_original->clear();
187  lw_selected->clear();
188  excludes .clear();
189  includes = original;
190  nbr_select = 0;
191 
192  for ( int ii = 0; ii < includes.count(); ii++ )
193  lw_original->addItem( includes[ ii ] );
194 
195  le_original->setText( tr( "%1 original triples" ) .arg( nbr_orig ) );
196  le_selected->setText( tr( "0 selected triples" ) );
197  pb_accept->setEnabled( false );
198  pb_add ->setEnabled( includes.count() > 0 );
199  pb_remove->setEnabled( excludes.count() > 0 );
200 }
201 
202 // Cancel button clicked: returned delete-selections is empty
204 {
205  triples.clear();
206 
207  reject();
208  close();
209 }
210 
211 // Accept button clicked: returned delete-selections list is the excluded list
213 {
214  triples = excludes;
215 
216  accept();
217  close();
218 }
219