PSQt/src/PSQtGUIMain.cpp

Go to the documentation of this file.
00001 //---------------------------------------------------------------------
00002 // File and Version Information:
00003 //   $Id: PSQtGUIMain.cpp 9841 2015-03-26 18:35:44Z dubrovin@SLAC.STANFORD.EDU $
00004 //
00005 // Author: Mikhail S. Dubrovin
00006 //---------------------------------------------------------------------
00007 
00008 //--------------------------
00009 
00010 #include <iostream>    // for std::cout
00011 #include <fstream>    // for std::ifstream(fname)
00012 //using namespace std; // for cout without std::
00013 
00014 #include "PSQt/PSQtGUIMain.h"
00015 
00016 namespace PSQt {
00017 
00018 //--------------------------
00019 
00020 PSQtGUIMain::PSQtGUIMain( QWidget *parent )
00021 {
00022   this -> setFrame();
00023 
00024   //setPalette ( QPalette(QColor(255, 255, 255, 255)) );
00025   //setAutoFillBackground (true);  
00026 
00027   //m_lab_fname = new QLabel("Xtc file:");
00028   m_but_fnxtc = new QPushButton( "xtc file:", this );
00029   m_but_fncfg = new QPushButton( "cfg file:", this );
00030   m_but_start = new QPushButton( "Start", this );
00031   m_but_stop  = new QPushButton( "Stop",  this );
00032   m_but_save  = new QPushButton( "Save",  this );
00033   m_but_exit  = new QPushButton( "Exit",  this );
00034   m_edi_fnxtc = new QLineEdit  ("/reg/d/psdm/CXI/cxi49012/xtc/e158-r0001-s02-c00.xtc");
00035   m_edi_fncfg = new QLineEdit  ("./psana.cfg");
00036 
00037   connect( m_but_start,      SIGNAL( clicked() ),         this, SLOT( onButStart()) ); 
00038   connect( m_but_stop,       SIGNAL( clicked() ),         this, SLOT( onButStop()) ); 
00039   connect( m_but_exit,       SIGNAL( clicked() ),         this, SLOT( onButExit()) ); 
00040   connect( m_but_save,       SIGNAL( clicked() ),         this, SLOT( onButSave()) ); 
00041   connect( m_edi_fnxtc,      SIGNAL( editingFinished() ), this, SLOT( onEditXtcFileName()) ); 
00042   connect( m_but_fnxtc,      SIGNAL( clicked() ),         this, SLOT( onButSelectXtcFile()) ); 
00043   connect( m_edi_fncfg,      SIGNAL( editingFinished() ), this, SLOT( onEditCfgFileName()) ); 
00044   connect( m_but_fncfg,      SIGNAL( clicked() ),         this, SLOT( onButSelectCfgFile()) ); 
00045 
00046 //connect( m_edi_fname,      SIGNAL( textChanged() ),     this, SLOT( onTextXtcFileName()) ); 
00047  
00048   QGridLayout *grid = new QGridLayout();
00049   //grid -> setRowMinimumHeight(1, 6);
00050   //grid -> setColumnStretch(0, 2);
00051   grid -> addWidget(m_but_fnxtc, 0, 0); 
00052   grid -> addWidget(m_edi_fnxtc, 0, 1, 1, 5); 
00053 
00054   grid -> addWidget(m_but_fncfg, 1, 0); 
00055   grid -> addWidget(m_edi_fncfg, 1, 1, 1, 5); 
00056 
00057   grid -> addWidget(m_but_start, 2, 0, Qt::AlignRight);
00058   grid -> addWidget(m_but_stop,  2, 1);
00059   grid -> addWidget(m_but_save,  2, 2);
00060   grid -> addWidget(m_but_exit,  2, 5);
00061  
00062   this -> setLayout(grid);
00063 
00064   this -> setWindowTitle(tr("PSQtGUIMain"));
00065   this -> setMinimumHeight(40);
00066   this -> setMinimumWidth(500);
00067   this -> move(100,50); // open qt window in specified position
00068 
00069   this -> showTips();
00070 }
00071 
00072 //--------------------------
00073 
00074 void
00075 PSQtGUIMain::showTips() 
00076 {
00077   m_but_fnxtc -> setToolTip("Find and select the XTC file");
00078   m_but_fncfg -> setToolTip("Find and select the psana configuration file");
00079   m_but_start -> setToolTip("Start psana");
00080   m_but_stop  -> setToolTip("Stop psana");
00081   m_but_save  -> setToolTip("Save control parameters");
00082   m_but_exit  -> setToolTip("Exit program");
00083 }
00084 
00085 //--------------------------
00086 
00087 void
00088 PSQtGUIMain::setFrame() 
00089 {
00090   m_frame = new QFrame(this);
00091   m_frame -> setFrameStyle ( QFrame::Box | QFrame::Sunken); // or
00092   //m_frame -> setFrameStyle ( QFrame::Box );    // NoFrame, Box, Panel, WinPanel, ..., StyledPanel 
00093   //m_frame -> setFrameShadow( QFrame::Sunken ); // Plain, Sunken, Raised 
00094   m_frame -> setLineWidth(0);
00095   m_frame -> setMidLineWidth(1);
00096   m_frame -> setCursor(Qt::SizeAllCursor);     // Qt::WaitCursor, Qt::PointingHandCursor
00097   //m_frame -> setStyleSheet("background-color: rgb(0, 255, 255); color: rgb(255, 255, 100)");
00098 }
00099 
00100 //--------------------------
00101 
00102 //--------------------------
00103 
00104 void 
00105 PSQtGUIMain::resizeEvent(QResizeEvent *event)
00106 {
00107 //m_frame->setGeometry(this->rect());
00108   m_frame->setGeometry(0, 0, event->size().width(), event->size().height());
00109   setWindowTitle("Window is resized");
00110 }
00111 
00112 //--------------------------
00113 
00114 void 
00115 PSQtGUIMain::closeEvent(QCloseEvent *event)
00116 {
00117   QWidget::closeEvent(event);
00118   std::cout << "PSQtGUIMain::closeEvent(...): type = " << event -> type() << std::endl;
00119 }
00120 
00121 //--------------------------
00122 //--------------------------
00123 //--------------------------
00124 
00125 void 
00126 PSQtGUIMain::onButExit()
00127 {
00128   std::cout << "PSQtGUIMain::onButExit()\n";
00129   this->close(); // will call closeEvent(...)
00130 }
00131 
00132 //--------------------------
00133 
00134 void 
00135 PSQtGUIMain::onButStart()
00136 {
00137   std::cout << "PSQtGUIMain::onButStart()\n";
00138 }
00139 
00140 //--------------------------
00141 
00142 void 
00143 PSQtGUIMain::onButStop()
00144 {
00145   std::cout << "PSQtGUIMain::onButStop()\n";
00146 }
00147 
00148 //--------------------------
00149 
00150 void 
00151 PSQtGUIMain::onButSave()
00152 {
00153   std::cout << "PSQtGUIMain::onButSave()\n";
00154 }
00155 
00156 //--------------------------
00157 
00158 void 
00159 PSQtGUIMain::onEditCfgFileName()
00160 {
00161   std::cout << "PSQtGUIMain::onEditCfgFileName() : ";
00162   std::string str_fname = (m_edi_fncfg -> displayText()).toStdString();
00163   std::cout << "Edited file name: " << str_fname << std::endl;
00164   //bool inputIsOK = 
00165   fileExists(str_fname);
00166 }
00167 
00168 //--------------------------
00169 
00170 void 
00171 PSQtGUIMain::onEditXtcFileName()
00172 {
00173   std::cout << "PSQtGUIMain::onEditXtcFileName() : ";
00174   std::string str_fname = (m_edi_fnxtc -> displayText()).toStdString();
00175   std::cout << "Edited file name: " << str_fname << std::endl;
00176   //bool inputIsOK = 
00177   fileExists(str_fname);
00178 }
00179 
00180 //--------------------------
00181 
00182 void 
00183 PSQtGUIMain::onButSelectCfgFile()
00184 {
00185   std::cout << "PSQtGUIMain::onButSelectCfgFile()\n";
00186 }
00187 
00188 //--------------------------
00189 
00190 void 
00191 PSQtGUIMain::onButSelectXtcFile()
00192 {
00193   std::cout << "PSQtGUIMain::onButSelectXtcFile()\n";
00194   //QString dirname = "./";
00195   //QString path_file; // = "/reg/d/psdm/CXI/cxi49012/xtc/e158-r0001-s02-c00.xtc";
00196 
00197   const char* sep = "/";
00198   std::string str_path_file_edi = (m_edi_fnxtc -> displayText()).toStdString();
00199 
00200   size_t pos = str_path_file_edi.rfind(sep);
00201 
00202   pos = (pos != std::string::npos) ? pos : str_path_file_edi.size();
00203 
00204   std::string dname(str_path_file_edi, 0, pos );
00205   std::string fname(str_path_file_edi, pos+1 );
00206 
00207   std::cout << "dname: " << dname << std::endl;
00208   std::cout << "fname: " << fname << std::endl;
00209   
00210   dname =  "/reg/d/psdm/CXI/cxi49012/xtc/";
00211 
00212   QString path_file = QFileDialog::getOpenFileName(this, tr("Select input XTC file"), 
00213                                                    QString(dname.c_str()), tr("Xtc file (*.xtc)"));
00214 
00215   std::string str_path_file = path_file.toStdString();
00216   std::cout << "Selected file name: " << str_path_file << std::endl;
00217 
00218   if( fileExists(str_path_file) )
00219      m_edi_fnxtc -> setText(path_file);
00220 }
00221 
00222 //--------------------------
00223 
00224 bool
00225 PSQtGUIMain::fileExists(std::string fname)
00226 {
00227   std::ifstream xtc_file(fname.c_str());
00228   if(xtc_file.good()) {
00229     std::cout << "Selected file exists" << std::endl;
00230     return true;
00231   } 
00232 
00233   std::cout << "WARNING: Selected file DOES NOT exists, try to select other file.";  
00234   return false;
00235 }
00236 
00237 //--------------------------
00238 
00239 
00240  
00241 //--------------------------
00242 
00243 } // namespace PSQt
00244 
00245 //--------------------------

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7