UltraScan III
us_table.cpp
Go to the documentation of this file.
1 #include "us_table.h"
3 #include "us_gui_settings.h"
4 
5 US_Table::US_Table( QMap< double, double >& map,
6  const QString& type,
7  bool& change,
8  QWidget* parent,
9  Qt::WindowFlags f )
10  : US_WidgetsDialog( parent, f ),
11  values( map ),
12  changed( change )
13 {
14  setPalette ( US_GuiSettings::frameColor() );
15  setAttribute( Qt::WA_DeleteOnClose );
16 
17  local = values;
18 
19  QVBoxLayout* main = new QVBoxLayout( this );
20  main->setSpacing ( 2 );
21  main->setContentsMargins ( 2, 2, 2, 2 );
22 
23  QHBoxLayout* edits = new QHBoxLayout;
24 
25  QLabel* lb_wl = us_label( tr( "Wavelength:" ) );
26  edits->addWidget( lb_wl );
27 
28  le_wl = us_lineedit();
29  connect( le_wl, SIGNAL( editingFinished() ), SLOT( edited() ) );
30  edits->addWidget( le_wl );
31 
32  QLabel* lb_value = us_label( type );
33  edits->addWidget( lb_value );
34 
36  connect( le_value, SIGNAL( editingFinished() ), SLOT( edited() ) );
37  edits->addWidget( le_value );
38 
39  main->addLayout( edits );
40 
41  // Create and fill in list widget
43 
44  main->addWidget( lw_table );
45  connect( lw_table, SIGNAL( itemSelectionChanged( void ) ),
46  SLOT ( new_row ( void ) ) );
47 
48  connect( lw_table, SIGNAL( itemDoubleClicked ( QListWidgetItem* ) ),
49  SLOT ( delete_row ( QListWidgetItem* ) ) );
50 
51  QBoxLayout* buttons = new QHBoxLayout;
52 
53  QPushButton* pb_cancel = us_pushbutton( tr( "Cancel" ) );
54  connect( pb_cancel, SIGNAL( clicked() ), SLOT( reject() ) );
55  buttons->addWidget( pb_cancel );
56 
57  QPushButton* pb_accept = us_pushbutton( tr( "Accept" ) );
58  connect( pb_accept, SIGNAL( clicked() ), SLOT( done() ) );
59  buttons->addWidget( pb_accept );
60 
61  main->addLayout( buttons );
62 
63  update();
64 }
65 
66 void US_Table::done( void )
67 {
68  if ( values != local )
69  {
70  values = local;
71  changed = true;
72  }
73 
74  close();
75 }
76 
77 void US_Table::edited( void )
78 {
79  if ( le_wl->text().isEmpty() || le_value->text().isEmpty() ) return;
80 
81  double wl = le_wl ->text().toDouble();
82  double value = le_value->text().toDouble();
83 
84  if ( wl < 190.0 || wl > 750.0 )
85  {
86  QMessageBox::warning( this,
87  tr( "Error" ),
88  tr( "The wavelength must be in the range of 190-750." ) );
89  le_wl ->clear();
90  le_value->clear();
91  return;
92  }
93 
94  if ( value < 0.0 )
95  {
96  QMessageBox::warning( this,
97  tr( "Error" ),
98  tr( "The value entered cannot be negative." ) );
99  le_wl ->clear();
100  le_value->clear();
101  return;
102  }
103 
104  local.insert( wl, value );
105  update();
106 
107  lw_table->setCurrentRow( -1 );
108 }
109 
110 void US_Table::update( void )
111 {
112  lw_table->clear();
113 
114  QList< double > keys = local.keys();
115  qSort( keys );
116 
117  for ( int i = 0; i < keys.size(); i++ )
118  {
119  QString wavelength = QString::number( keys[ i ], 'f', 1 );
120  QString value = QString::number( local[ keys[ i ] ], 'f', 4 );
121 
122  lw_table->addItem( wavelength + " / " + value );
123  }
124 }
125 
126 void US_Table::new_row( void )
127 {
128  QStringList v = lw_table->currentItem()->text().split( " / " );
129  le_wl ->setText( v[ 0 ] );
130  le_value->setText( v[ 1 ] );
131 }
132 
133 void US_Table::delete_row( QListWidgetItem* item )
134 {
135  int response = QMessageBox::question( this,
136  tr( "Delete Entry?" ),
137  tr( "Delete the current entry?" ),
138  QMessageBox::Yes, QMessageBox::Cancel );
139 
140  if ( response == QMessageBox::Yes )
141  {
142  QStringList v = item->text().split( " / " );
143  local.remove( v[ 0 ].toDouble() );
144  delete item;
145  }
146 }
147 
148