UltraScan III
us_get_dbexp.cpp
Go to the documentation of this file.
1 
3 #include "us_get_dbexp.h"
4 #include "us_settings.h"
5 #include "us_gui_settings.h"
6 #include "us_db2.h"
7 #include "us_passwd.h"
8 
9 // Primary constructor to establish the dialog
10 US_GetDBExp::US_GetDBExp( QString& eID )
11 : US_WidgetsDialog( 0, 0 ), expID( eID )
12 {
13  setWindowTitle( tr( "Available US3 Runs..." ) );
14  setPalette( US_GuiSettings::frameColor() );
15 // setAttribute( Qt::WA_DeleteOnClose, true );
16 
17  QVBoxLayout* main = new QVBoxLayout( this );
18  main->setSpacing ( 2 );
19  main->setContentsMargins( 2, 2, 2, 2 );
20 
22  QFontMetrics* fm = new QFontMetrics( font );
23 
24  // Load the runInfo structure with current data
25  if ( ! loadData() )
26  {
27  // Why doesn't this work?
28  // hide();
29  // close(); // done( -1 );
30  // return;
31  }
32 
33  tw = new QTableWidget( runInfo.size(), 4, this ); // rows, columns, parent
34  tw->setPalette( US_GuiSettings::editColor() );
35 
36  QStringList headers;
37  headers << "ID"
38  << "Date"
39  << "RunID"
40  << "Label";
41 
42  tw->setHorizontalHeaderLabels( headers );
43  tw->verticalHeader()->hide();
44  tw->setShowGrid( false );
45  tw->setSelectionBehavior( QAbstractItemView::SelectRows );
46  tw->setMinimumWidth( 640 );
47  tw->setMinimumHeight( 480 );
48  tw->setRowHeight( 0, fm->height() + 4 );
49  tw->setColumnWidth( 0, 50 );
50  tw->setColumnWidth( 1, 150 );
51  tw->setColumnWidth( 2, 250 );
52  tw->setColumnWidth( 3, 350 );
53 
54  // Now load the table, marking each as not-editable
55  for ( int i = 0; i < runInfo.size(); i++ )
56  {
57  RunInfo r = runInfo[ i ];
58 
59  QTableWidgetItem* item = new QTableWidgetItem( QString::number( r.ID ) );
60  item ->setFlags(item->flags() ^ Qt::ItemIsEditable);
61  tw ->setItem( i, 0, item );
62 
63  item = new QTableWidgetItem( r.date );
64  item ->setFlags(item->flags() ^ Qt::ItemIsEditable);
65  tw ->setItem( i, 1, item );
66 
67  item = new QTableWidgetItem( r.runID );
68  item ->setFlags(item->flags() ^ Qt::ItemIsEditable);
69  tw ->setItem( i, 2, item );
70 
71  item = new QTableWidgetItem( r.label );
72  item ->setFlags(item->flags() ^ Qt::ItemIsEditable);
73  tw ->setItem( i, 3, item );
74  }
75 
76  // Enable sorting by a particular column
77  QHeaderView* qHeader = tw ->horizontalHeader();
78  connect( qHeader, SIGNAL( sectionClicked( int ) ),
79  SLOT ( columnClicked ( int ) ) );
80 
81  main->addWidget( tw );
82 
83  // Button Row
84  QHBoxLayout* buttons = new QHBoxLayout;
85 
86  QPushButton* pb_cancel = us_pushbutton( tr( "Cancel" ) );
87  connect( pb_cancel, SIGNAL( clicked() ), SLOT( reject() ) );
88  buttons->addWidget( pb_cancel );
89 
90  QPushButton* pb_accept = us_pushbutton( tr( "Select" ) );
91  connect( pb_accept, SIGNAL( clicked() ), SLOT( select() ) );
92  buttons->addWidget( pb_accept );
93 
94  main->addLayout( buttons );
95 }
96 
97 // Function to load the runInfo structure with all runID's in the DB
99 {
100  US_Passwd pw;
101  QString masterPW = pw.getPasswd();
102  US_DB2 db( masterPW );
103 
104  if ( db.lastErrno() != US_DB2::OK )
105  {
106  QMessageBox::information( this,
107  tr( "Error" ),
108  tr( "Error making the DB connection.\n" ) );
109  return false;
110  }
111 
112  // Get all the experiment ID's
113  QStringList expIDs;
114  expIDs.clear();
115  QStringList q( "get_experiment_desc" );
116  q << QString::number( US_Settings::us_inv_ID() );
117  db.query( q );
118  while( db.next() )
119  expIDs << db.value( 0 ).toString();
120 
121  // Now get information we want about each experiment
122  runInfo.clear();
123  foreach ( QString expID, expIDs )
124  {
125  q.clear();
126  q << QString( "get_experiment_info" )
127  << expID;
128  db.query( q );
129  db.next();
130 
131  RunInfo r;
132  r.ID = expID.toInt();
133  r.date = db.value( 13 ).toString();
134  r.runID = db.value( 2 ).toString();
135  r.label = db.value( 10 ).toString();
136 
137  runInfo << r;
138  }
139 
140  if ( runInfo.size() < 1 )
141  {
142  QMessageBox::information( this,
143  tr( "Error" ),
144  tr( "There are no US3 runs in the DB to load.\n" ) );
145  return false;
146  }
147 
148  return true;
149 }
150 
151 // Function to sort rows when column header is clicked
153 {
154  tw -> sortItems( col );
155 }
156 
157 // Function to pass information back when select button is pressed
159 {
160  int ndx = tw ->currentRow();
161 
162  expID = tw ->item( ndx, 0 )->text();
163  accept();
164 }