Beispiel #1
0
    SysInfo(QWidget *parent = NULL):
        QFrame(parent)
    {   
        QGroupBox *memBox = new QGroupBox("Memory Usage", this);
        memBox->setFont(QFont("Helvetica", 10));

        QVBoxLayout *memLayout = new QVBoxLayout(memBox);
        memLayout->setMargin(15);
        memLayout->setSpacing(5);

        Qt::Orientation o = Qt::Horizontal;
        memLayout->addWidget(new ValueBar(o, "Used", memBox, 57));
        memLayout->addWidget(new ValueBar(o, "Shared", memBox, 17));
        memLayout->addWidget(new ValueBar(o, "Cache", memBox, 30));
        memLayout->addWidget(new ValueBar(o, "Buffers", memBox, 22));
        memLayout->addWidget(new ValueBar(o, "Swap Used", memBox, 57));
        memLayout->addWidget(new QWidget(memBox), 10); // spacer

        QGroupBox *cpuBox = new QGroupBox("Cpu Usage", this);
        cpuBox->setFont(QFont("Helvetica", 10));

        QHBoxLayout *cpuLayout = new QHBoxLayout(cpuBox);
        cpuLayout->setMargin(15);
        cpuLayout->setSpacing(5);

        o = Qt::Vertical;
        cpuLayout->addWidget(new ValueBar(o, "User", cpuBox, 57));
        cpuLayout->addWidget(new ValueBar(o, "Total", cpuBox, 73));
        cpuLayout->addWidget(new ValueBar(o, "System", cpuBox, 16));
        cpuLayout->addWidget(new ValueBar(o, "Idle", cpuBox, 27));

        QHBoxLayout *layout = new QHBoxLayout(this);
        layout->setMargin(10);
        layout->addWidget(memBox, 10);
        layout->addWidget(cpuBox, 0);
    }
Beispiel #2
0
void MotorWidget::createLabelButton()
{
	QSignalMapper *mapper = new QSignalMapper(this);

	QFont fontLine("Arial", 10);

	for (int i=0; i<m_NumberButton; ++i)
	{
		QLineEdit *tempLineEdit = new QLineEdit(this);
		tempLineEdit->setFont(fontLine);
		if (m_Motor->setVectorNameWinding().empty())
			tempLineEdit->setText(tr("Wpisz nazwę uzwojenia"));
		else
			tempLineEdit->setText(QString::fromStdString(m_Motor->returnsNameWinding(i)));

		QPushButton *tempButton = new QPushButton(tr("Dodaj dane uzwojenia"));

		m_VectorLabelButton.push_back(qMakePair(tempLineEdit, tempButton));

		QHBoxLayout *hBox = new QHBoxLayout(this);
		hBox->addWidget(m_VectorLabelButton[i].first);
		hBox->addWidget(m_VectorLabelButton[i].second);

		QGroupBox *tempGrBox = new QGroupBox(tr("Uzwojenie"), this);
		tempGrBox->setFont(QFont("Arial", 12, QFont::Bold));
		tempGrBox->setStyleSheet("QGroupBox{border:1px; border-style:outset; border-color: gray; margin:10px} "
									"QGroupBox::title{subcontrol-origin: margin; subcontrol-position:top left}");
		tempGrBox->setLayout(hBox);

		m_VectorTempWindingBox.push_back(tempGrBox);

		mapper->setMapping (m_VectorLabelButton[i].second, i);
		connect(m_VectorLabelButton[i].second, SIGNAL(clicked()), mapper, SLOT(map()));
	}

	connect(mapper, SIGNAL(mapped(int)), this, SLOT(addDateReconstruction(int)));
}
void MainWindow::setupUpperToolBar() {

	_trackerActivator = new SwitchButton("not tracking", "tracking");
	_trackerActivator->setToolTip("Activate/Disable tracking");
	QObject::connect(_trackerActivator, &SwitchButton::emitSetEnabled, this, &MainWindow::receiveSetTracking, Qt::DirectConnection);
	//QAction* activatorAction = ui->toolBarMenu->addWidget(_trackerActivator);

	/////////////////////media groupbox
	_mediaBox = new QGroupBox("Load media");
	//style groupbox (initial red border -> no video loaded)
	_mediaBox->setStyleSheet("QGroupBox"
		" {border: 1px solid #e56262;}");
	// "QGroupBox::title {subcontrol-origin: margin;subcontrol-position: top center; padding: 0 3px;}");
	QFont font = QFont();
	font.setPointSize(8);
	font.setBold(true);
	_mediaBox->setFont(font);

	QHBoxLayout* mediaBoxLayout = new QHBoxLayout;
	mediaBoxLayout->setContentsMargins(0, 0, 0, 0);
	//mediaBoxLayout->setSpacing(0);
	QToolButton* cameraButton = new QToolButton;
	cameraButton->setIconSize(QSize(24, 24));
	cameraButton->setDefaultAction(ui->actionOpen_Camera);
	cameraButton->setAutoRaise(true);

	QToolButton* videoButton = new QToolButton;
	videoButton->setIconSize(QSize(24, 24));
	videoButton->setDefaultAction(ui->actionOpen_Video);
	videoButton->setAutoRaise(true);

	QToolButton* imageButton = new QToolButton;
	imageButton->setIconSize(QSize(24, 24));
	imageButton->setDefaultAction(ui->actionOpen_Picture);
	imageButton->setAutoRaise(true);

	mediaBoxLayout->addWidget(videoButton);
	mediaBoxLayout->addWidget(imageButton);
	mediaBoxLayout->addWidget(cameraButton);

	_mediaBox->setLayout(mediaBoxLayout);


	ui->toolBarMenu->addWidget(_mediaBox);

	////////trackerbox
	_trackerBox = new QGroupBox("Load tracker");
	//style groupbox
	_trackerBox->setStyleSheet("QGroupBox"
		" {border: 1px solid #e56262;}");
	// "QGroupBox::title {subcontrol-origin: margin;subcontrol-position: top center; padding: 0 3px;}");

	QFont font0 = QFont();
	font0.setPointSize(8);
	font0.setBold(true);
	_trackerBox->setFont(font0);

	QHBoxLayout* trackerBoxLayout = new QHBoxLayout;
	trackerBoxLayout->setContentsMargins(0, 0, 0, 0);

	QToolButton* trackerButton = new QToolButton;
	trackerButton->setIconSize(QSize(24, 24));
	trackerButton->setDefaultAction(ui->actionLoad_Tracker);
	trackerButton->setAutoRaise(true);

	trackerBoxLayout->addWidget(trackerButton);
	_trackerBox->setLayout(trackerBoxLayout);

	ui->toolBarMenu->addWidget(_trackerBox);


	////////loadSaveBox
	QGroupBox* loadSaveBox = new QGroupBox("Load/Save Data");
	//style loadSaveBox
	// loadSaveBox->setStyleSheet("QGroupBox"
	// " {border: 1px solid #e5e5e5;border-radius: 5px;margin-top: 1ex; /* leave space at the top for the title */}"
	// "QGroupBox::title {subcontrol-origin: margin;subcontrol-position: top center; padding: 0 3px;}");

	QFont font2 = QFont();
	font2.setPointSize(8);
	font2.setBold(true);
	loadSaveBox->setFont(font2);

	QHBoxLayout* loadSaveBoxLayout = new QHBoxLayout;
	loadSaveBoxLayout->setContentsMargins(5, 0, 5, 0);

	QToolButton* loadFileButton = new QToolButton;
	loadFileButton->setIconSize(QSize(24, 24));
	loadFileButton->setDefaultAction(ui->actionLoad_trackingdata);
	loadFileButton->setAutoRaise(true);

	QToolButton* saveFileButton = new QToolButton;
	saveFileButton->setIconSize(QSize(24, 24));
	saveFileButton->setDefaultAction(ui->actionSave_trackingdata);
	saveFileButton->setAutoRaise(true);

	loadSaveBoxLayout->addWidget(loadFileButton);
	loadSaveBoxLayout->addWidget(saveFileButton);
	loadSaveBox->setLayout(loadSaveBoxLayout);

	ui->toolBarMenu->addWidget(loadSaveBox);

	//////////////////choose tracker groupbox
	QGroupBox* chooseTrackerBox = new QGroupBox("Choose tracker");
	//style groupbox
	// chooseTrackerBox->setStyleSheet("QGroupBox"
	// " {border: 1px solid #e5e5e5;border-radius: 5px;margin-top: 1ex; /* leave space at the top for the title */}"
	// "QGroupBox::title {subcontrol-origin: margin;subcontrol-position: top center; padding: 0 3px;}");

	QFont font1 = QFont();
	font1.setPointSize(8);
	font1.setBold(true);
	chooseTrackerBox->setFont(font1);
	//
	QHBoxLayout* chooseTrackerBoxLayout = new QHBoxLayout;
	chooseTrackerBoxLayout->addWidget(ui->comboBox_TrackerSelect);
	chooseTrackerBoxLayout->addWidget(_trackerActivator);

	chooseTrackerBox->setLayout(chooseTrackerBoxLayout);

	ui->toolBarMenu->addWidget(chooseTrackerBox);


}
Beispiel #4
0
US_EquilTime::US_EquilTime() : US_Widgets( true )
{
   astfem_rsa = new US_Astfem_RSA( model, simparams );
   
   connect( astfem_rsa, SIGNAL( new_scan   ( QVector< double >*, double* ) ),
                        SLOT(   check_equil( QVector< double >*, double* ) ) );
   
   connect( astfem_rsa, SIGNAL( new_time( double ) ),
                        SLOT(   set_time( double ) ) );
   
   setWindowTitle( tr( "Equilibrium Time Prediction" ) );
   setPalette( US_GuiSettings::frameColor() );

   init_simparams();

   QBoxLayout* main = new QHBoxLayout( this );
   main->setSpacing         ( 2 );
   main->setContentsMargins ( 2, 2, 2, 2 );

   // Left Column
   QGridLayout* left = new QGridLayout;
   int row = 0;

   QLabel* lb_sample = us_banner( tr( "Model Settings" ) ); 
   left->addWidget( lb_sample, row++, 0, 1, 2 );

   QGridLayout* buttons1 = new QGridLayout;
   int b_row = 0;

   pb_changeModel = us_pushbutton( tr( "Set / Change / Review Model") );
   connect ( pb_changeModel, SIGNAL( clicked() ) , SLOT( change_model() ) );
   buttons1->addWidget( pb_changeModel, b_row++, 0, 1, 2 );

   left->addLayout( buttons1, row, 0, 3, 2 );
   row += 3;


   QPalette p;
   p.setColor( QPalette::WindowText, Qt::white );
   p.setColor( QPalette::Shadow    , Qt::white );
   
   QFont font( US_GuiSettings::fontFamily(),
               US_GuiSettings::fontSize(),
               QFont::Bold );

   // Radius Info
   QLabel* lb_radius = us_banner( tr( "Radius Settings" ) ); 
   left->addWidget( lb_radius, row++, 0, 1, 2 );
   
   QGroupBox* channelGroupBox = new QGroupBox( tr( "Channel Type" ) );
   channelGroupBox->setContentsMargins ( 2, 2, 2, 2 );
   channelGroupBox->setPalette( p );
   channelGroupBox->setFont   ( font );
   
   QRadioButton* rb_inner;
   QRadioButton* rb_outer;
   QRadioButton* rb_center;
   QRadioButton* rb_custom;

   QGridLayout* rb5 = us_radiobutton( tr( "Inner Channel"  ), rb_inner, true );
   QGridLayout* rb6 = us_radiobutton( tr( "Outer Channel"  ), rb_outer  );
   QGridLayout* rb7 = us_radiobutton( tr( "Center Channel" ), rb_center );
   QGridLayout* rb8 = us_radiobutton( tr( "Custom"         ), rb_custom );

   // Group the buttons
   QButtonGroup* channelGroup = new QButtonGroup;
   channelGroup->addButton( rb_inner , INNER  );
   channelGroup->addButton( rb_outer , OUTER  );
   channelGroup->addButton( rb_center, CENTER );
   channelGroup->addButton( rb_custom, CUSTOM );
   connect( channelGroup, SIGNAL( buttonClicked( int ) ),
                          SLOT  ( new_channel  ( int ) ) );

   current_position = INNER;

   QGridLayout* channel = new QGridLayout;
   channel->setContentsMargins ( 2, 2, 2, 2 );
   channel->setSpacing( 0 );
   channel->addLayout( rb5, 0, 0 );
   channel->addLayout( rb6, 0, 1 );
   channel->addLayout( rb7, 1, 0 );
   channel->addLayout( rb8, 1, 1 );

   channelGroupBox->setLayout( channel );

   left->addWidget( channelGroupBox, row, 0, 2, 2 );
   row += 2;

   // Top Radius
   QLabel* lb_top = us_label( tr( "Top Radius:" ) );
   left->addWidget( lb_top, row, 0 );

   cnt_top = us_counter( 3, 5.8, 7.3, 5.9 );
   cnt_top->setSingleStep( 0.01 );
   cnt_top->setEnabled ( false );
   left->addWidget( cnt_top, row++, 1 );

   // Bottom Radius
   QLabel* lb_bottom = us_label( tr( "Bottom Radius:" ) );
   left->addWidget( lb_bottom, row, 0 );

   cnt_bottom = us_counter( 3, 5.8, 7.3, 6.2 );
   cnt_bottom->setSingleStep    ( 0.01 );
   cnt_bottom->setEnabled ( false );
   left->addWidget( cnt_bottom, row++, 1 );

   // Rotorspeed Info
   QLabel* lb_rotor = us_banner( tr( "Rotorspeed Settings" ) ); 
   left->addWidget( lb_rotor, row++, 0, 1, 2 );
   
   // Speed type buttons
   QGroupBox* rotor  = new QGroupBox( tr( "Speed Type" ) );
   rotor->setContentsMargins ( 2, 10, 2, 2 );
   rotor->setPalette( p );
   rotor->setFont   ( font );
   
   QRadioButton* rb_sigma;
   QRadioButton* rb_rpm;

   QGridLayout* rb9  = us_radiobutton( "Use Sigma", rb_sigma, true );
   QGridLayout* rb10 = us_radiobutton( "Use RPM"  , rb_rpm );

   speed_type  = SIGMA;
   sigma_start = 1;
   sigma_stop  = 4;
   rpm_start   = 18000;
   rpm_stop    = 36000;
 
   speed_count = 5;

   QButtonGroup* speedGroup = new QButtonGroup;
   speedGroup->addButton( rb_sigma, SIGMA );
   speedGroup->addButton( rb_rpm  , RPM   );
   connect( speedGroup,  SIGNAL( buttonClicked( int ) ), 
                         SLOT  ( update_speeds( int ) ) );

   QGridLayout* speedType = new QGridLayout;
   speedType->setContentsMargins( 2, 2, 2, 2 );
   speedType->setSpacing        ( 0 );

   speedType->addLayout( rb9,  0, 0 );
   speedType->addLayout( rb10, 0, 1 );

   rotor->setLayout( speedType );

   left->addWidget( rotor, row++, 0, 1, 2 );

   // Low speed
   lb_lowspeed   = us_label( tr( "Low Speed (sigma):"  ) );
   left->addWidget( lb_lowspeed, row, 0 );
   
   cnt_lowspeed = us_counter( 3, 0.01, 10.0, sigma_start );
   cnt_lowspeed->setSingleStep( 0.01 );
   left->addWidget( cnt_lowspeed, row++, 1 );
   connect( cnt_lowspeed, SIGNAL( valueChanged( double ) ),
                          SLOT  ( new_lowspeed( double ) ) );

   // High speed
   lb_highspeed  = us_label( tr( "High Speed (sigma):" ) );
   left->addWidget( lb_highspeed, row, 0 );
   
   cnt_highspeed = us_counter( 3, 0.01, 10.0, sigma_stop );
   cnt_highspeed->setSingleStep( 0.01 );
   left->addWidget( cnt_highspeed, row++, 1 );
   connect( cnt_highspeed, SIGNAL( valueChanged ( double ) ),
                           SLOT  ( new_highspeed( double ) ) );
   // Speed steps
   QLabel* lb_speedsteps = us_label( tr( "Speed Steps:"        ) );
   left->addWidget( lb_speedsteps, row, 0 );
   
   cnt_speedsteps = us_counter( 3, 1.0, 100.0, speed_count );
   cnt_speedsteps->setSingleStep( 1.0 );
   left->addWidget( cnt_speedsteps, row++, 1 );
   connect( cnt_speedsteps, SIGNAL( valueChanged ( double ) ),
                            SLOT  ( new_speedstep( double ) ) );
   // Speed list
   QLabel* lb_speedlist  = us_label( tr( "Current Speed List:" ) );
   left->addWidget( lb_speedlist, row, 0 );

   te_speedlist = us_textedit(); 
   te_speedlist->setReadOnly( true );

   left->addWidget( te_speedlist, row, 1, 3, 1 );

   left->setRowStretch ( row + 1, 99 );
   row += 3;

   // Misc Info
   QLabel* lb_sim2  = us_banner( tr( "Simulation Settings" ) );
   left->addWidget( lb_sim2, row++, 0, 1, 2 );

   // Tolerance
   QLabel* lb_tolerance  = us_label( tr( "Tolerance:" ) );
   left->addWidget( lb_tolerance, row, 0 );
   
   cnt_tolerance = us_counter( 3, 1.0e-5, 0.01, 0.0005 );
   cnt_tolerance->setSingleStep( 1.0e-5 );
   left->addWidget( cnt_tolerance, row++, 1 );

   // Time increment
   QLabel* lb_time  = us_label( tr( "Time Increment (min):" ) );
   left->addWidget( lb_time, row, 0 );
   
   cnt_timeIncrement = us_counter( 3, 1.0, 1000.0, 15.0 );
   cnt_timeIncrement->setSingleStep( 1.0 );
   left->addWidget( cnt_timeIncrement, row++, 1 );

   QGridLayout* buttons2 = new QGridLayout;
   b_row = 0;

   pb_estimate = us_pushbutton( tr( "Estimate Times" ) );
   pb_estimate->setEnabled( false );
   connect( pb_estimate, SIGNAL( clicked() ), SLOT( simulate() ) );
   buttons2->addWidget( pb_estimate, b_row++, 0, 1, 2 ); 

   QPushButton* pb_help = us_pushbutton( tr( "Help" ) );
   connect( pb_help, SIGNAL( clicked() ), SLOT( help() ) );
   buttons2->addWidget( pb_help, b_row, 0 ); 

   QPushButton* pb_close = us_pushbutton( tr( "Close" ) );
   connect( pb_close, SIGNAL( clicked() ), SLOT( close() ) );
   buttons2->addWidget( pb_close, b_row++, 1 ); 

   left->addLayout( buttons2, row, 0, 2, 2 );

   main->addLayout( left ); 

   // Right Column
   // Simulation plot
   QBoxLayout* right = new QVBoxLayout;
   
   QBoxLayout* plot = new US_Plot( equilibrium_plot, 
         tr( "Approach to Equilibrium Simulation" ),
         tr( "Radius" ), tr( "Concentration" ) );
   us_grid( equilibrium_plot );
   
   equilibrium_plot->setMinimumSize( 600, 400 );
   equilibrium_plot->setAxisScale( QwtPlot::yLeft  , 0.0, 1.5 );
   equilibrium_plot->setAxisScale( QwtPlot::xBottom, 5.9, 6.2 );

   right->addLayout( plot );

   te_info = new US_Editor( 0, true );

   QFontMetrics fm( te_info->font() );
   te_info->setFixedHeight( fm.height() * 15 );

   right->addWidget( te_info );
   right->setStretchFactor( plot   , 10 );
   right->setStretchFactor( te_info, 2 );

   main->addLayout( right ); 

   model.components.clear();
   update_speeds( speed_type );
}
Beispiel #5
0
Wormsign::Wormsign(QWidget *parent, Qt::WFlags flags)
	: QWidget(parent, flags)
{

	appVersion = "2.0";


	//Populate Camera Options
	QMainWindow * mainWin = (QMainWindow *)this->window();
	mainWin->setWindowTitle("Wormsign " + appVersion + " - RealTime Larva Tracking - Questions: Gus Lott x4632");

	expAgent = NULL;

	int height = 1000;
	int width = 1000;
	setGeometry(50,50,width,height);
	setMinimumHeight(height); setMaximumHeight(height);
	setMinimumWidth(width); setMaximumWidth(width);
	//setAutoFillBackground(true);
	//setPalette(QColor(250,250,200));

	//File Menu saves/loads config states.
	

	//Create Preview Canvas for Camera
	camThread = NULL;
	canvas = new CamViewGL;
	canvas->gui = this;
	canvas->show();

	//HARDWARE INTERFACES
	//button to show/hide hardware interfaces
	showHideHW = new QPushButton("<< Hide Config",this);
	showHideHW->setGeometry(530,10,110,20); showHideHW->setCheckable(true);
	showHideHW->setPalette(QColor(200,200,200)); showHideHW->setChecked(true);
	connect(showHideHW,SIGNAL(clicked()),this,SLOT(hideHW()));

	//Create Camera Control Interface
		QStringList camStrList = CoreCamThread::listCams();

		QGroupBox * camControlBox = new QGroupBox("Camera Control",this);
		QFont fnt = camControlBox->font(); fnt.setBold(true); camControlBox->setFont(fnt);
		camControlBox->setGeometry(645,10,350,200);
		
		//pop-up list of available cameras
		camList = new QComboBox(camControlBox);
		camList->addItems(camStrList);
		camList->setGeometry(10,20,200,20);

		//connect toggle button
		camConnect = new QPushButton("Connect",camControlBox);
		camConnect->setGeometry(220,20,100,20);
		camConnect->setCheckable(true); camConnect->setPalette(QPalette(QColor(200,200,200)));
		connect(camConnect,SIGNAL(clicked()),this,SLOT(connectCamera()));

		//ROI, Brightness, Gain, Gamma, Shutter - disabled
		QLabel * roiLabel = new QLabel("ROI (xywh):",camControlBox);
		roiLabel->setFont(fnt);
		roiLabel->setGeometry(10,50,70,20);
		for(int i=0; i<4; i++){
			roiBox[i] = new QSpinBox(camControlBox);
			roiBox[i]->setGeometry(10+80+ 65*i ,50,55,20);
			roiBox[i]->setEnabled(false);
		}
		
		QLabel * tempLabel;
		//Brightness
		tempLabel = new QLabel("Brightness: ",camControlBox); 
		brightBox = new QSpinBox(camControlBox); brightBox->setEnabled(false); 
		brightSlider = new QSlider(Qt::Horizontal,camControlBox); brightSlider->setEnabled(false);
		tempLabel->setGeometry(10,90,120,20); brightBox->setGeometry(110,90,70,20); brightSlider->setGeometry(190,90,150,20);
		//Link slider/box and connect prop update
		connect(brightBox,SIGNAL(valueChanged(int)),brightSlider,SLOT(setValue(int)));
		connect(brightSlider,SIGNAL(valueChanged(int)),brightBox,SLOT(setValue(int)));

		//Gain
		tempLabel = new QLabel("Gain: ",camControlBox); 
		gainBox = new QSpinBox(camControlBox); gainBox->setEnabled(false);
		gainSlider = new QSlider(Qt::Horizontal,camControlBox); gainSlider->setEnabled(false);
		tempLabel->setGeometry(10,110,120,20); gainBox->setGeometry(110,110,70,20); gainSlider->setGeometry(190,110,150,20);
		//Link slider/box and connect prop update
		connect(gainBox,SIGNAL(valueChanged(int)),gainSlider,SLOT(setValue(int)));
		connect(gainSlider,SIGNAL(valueChanged(int)),gainBox,SLOT(setValue(int)));
		
		//Gamma
		tempLabel = new QLabel("Gamma: ",camControlBox); 
		gammaBox = new QSpinBox(camControlBox); gammaBox->setEnabled(false);
		gammaSlider = new QSlider(Qt::Horizontal,camControlBox); gammaSlider->setEnabled(false);
		tempLabel->setGeometry(10,130,120,20); gammaBox->setGeometry(110,130,70,20); gammaSlider->setGeometry(190,130,150,20);
		//Link slider/box and connect prop update
		connect(gammaBox,SIGNAL(valueChanged(int)),gammaSlider,SLOT(setValue(int)));
		connect(gammaSlider,SIGNAL(valueChanged(int)),gammaBox,SLOT(setValue(int)));
				
		//Shutter
		shutLabel = new QLabel("Shutter (x ms): ",camControlBox); 
		shutterBox = new QSpinBox(camControlBox); shutterBox->setEnabled(false);
		shutterSlider = new QSlider(Qt::Horizontal,camControlBox); shutterSlider->setEnabled(false);
		shutLabel->setGeometry(10,150,120,20); shutterBox->setGeometry(110,150,70,20); shutterSlider->setGeometry(190,150,150,20);
		//Link slider/box and connect prop update
		connect(shutterBox,SIGNAL(valueChanged(int)),shutterSlider,SLOT(setValue(int)));
		connect(shutterSlider,SIGNAL(valueChanged(int)),shutterBox,SLOT(setValue(int)));
		
		frameInt = new QLabel("Measured Frame Interval: ",camControlBox);
		frameInt->setGeometry(10,175,200,20);
		QPalette palette = frameInt->palette();
		palette.setColor(frameInt->foregroundRole(), QColor(200,0,0));
		frameInt->setPalette(palette);

			
	//Create Network Connection Control interface, to biorules app
		//Connection to Eric Trautman's Biorules Application
		biorulesConnection = new BiorulesConnect();

		//Panel
		QGroupBox * netPanel = new QGroupBox("BioRules Network Connection",this);
		netPanel->setFont(fnt);
		netPanel->setGeometry(645,230,350,70);

		//IP/Port Controls & Connect Button
		tempLabel = new QLabel("IP:",netPanel);
		tempLabel->setGeometry(10,20,30,20);
		ipText = new QLineEdit(biorulesConnection->ip,netPanel);
		ipText->setGeometry(40,20,150,20);

		tempLabel = new QLabel("Port:",netPanel);
		tempLabel->setGeometry(10,40,40,20);
		portText = new QLineEdit(QString().sprintf("%d",biorulesConnection->port),netPanel);
		portText->setGeometry(40,40,50,20); portText->setEnabled(false);

		netConnect = new QPushButton("Connect",netPanel);
		netConnect->setGeometry(220,20,100,20); netConnect->setFont(fnt);
		netConnect->setCheckable(true); netConnect->setPalette(QColor(200,200,200));
		
		connect(netConnect,SIGNAL(clicked()),this,SLOT(connectBioRules()));
	
		

	//Create Stage Control Serial Connection Interface
		stageThread = new StageThread(this);
		stageThread->biorulesConnection = biorulesConnection;
		connect(stageThread,SIGNAL(posUpdate()),this,SLOT(update()));

		//Panel
		QGroupBox * stagePanel = new QGroupBox("Zaber Stage Serial Interface",this);
		stagePanel->setFont(fnt);
		stagePanel->setGeometry(645,310,350,120);

		tempLabel = new QLabel("Port:",stagePanel);
		tempLabel->setGeometry(10,20,30,20);
		
		stageComList = new QComboBox(stagePanel);
		QStringList comStrList = stageThread->enumeratePorts();  //Scan for available serial ports
		stageComList->insertItems(0,comStrList);
		for(int i=0; i<comStrList.size(); i++)
			if(comStrList[i] == stageThread->comName) stageComList->setCurrentIndex(i);
		stageComList->setGeometry(40,20,100,20);

		stageConnect = new QPushButton("Connect",stagePanel);
		stageConnect->setGeometry(220,20,100,20); stageConnect->setFont(fnt);
		stageConnect->setCheckable(true); stageConnect->setPalette(QColor(200,200,200));
		
		connect(stageConnect,SIGNAL(clicked()),this,SLOT(connectStage()));

		stageX = new QLabel(stagePanel);
		stageX->setGeometry(10,45,150,20);
		stageY = new QLabel(stagePanel);
		stageY->setGeometry(170,45,150,20);

		tempLabel = new QLabel("Velocity (0-4800): ",stagePanel);
		tempLabel->setGeometry(10,70,120,20);
		stageVel = new QSpinBox(stagePanel);
		stageVel->setGeometry(130,70,100,20); stageVel->setEnabled(false); stageVel->setValue(0);
		stageVel->setMinimum(0); stageVel->setMaximum(10000);

		tempLabel = new QLabel("Acceleration: ",stagePanel);
		tempLabel->setGeometry(10,90,120,20);
		stageAccel = new QSpinBox(stagePanel);
		stageAccel->setGeometry(130,90,100,20); stageAccel->setEnabled(false); stageAccel->setValue(0);
		stageAccel->setMinimum(0); stageAccel->setMaximum(10000);

	//Create Stimulus Control Serial Connection Interface, frame rate, intensity, manual stim

		stimThread = new StimThread(this);
		//Panel
		QGroupBox * stimPanel = new QGroupBox("PhotoStim + Trigger System",this);
		stimPanel->setFont(fnt);
		stimPanel->setGeometry(645,440,350,50);

		tempLabel = new QLabel("Port:",stimPanel);
		tempLabel->setGeometry(10,20,30,20);
		
		stimComList = new QComboBox(stimPanel);
		stimComList->insertItems(0,comStrList);
		for(int i=0; i<comStrList.size(); i++)
			if(comStrList[i] == stimThread->comName) stimComList->setCurrentIndex(i);
		stimComList->setGeometry(40,20,100,20);

		stimConnect = new QPushButton("Connect",stimPanel);
		stimConnect->setGeometry(220,20,100,20); stimConnect->setFont(fnt);
		stimConnect->setCheckable(true); stimConnect->setPalette(QColor(200,200,200));
		
		connect(stimConnect,SIGNAL(clicked()),this,SLOT(connectStim()));
		
		

		

	//Experiment Controls, start/stop, log, file names
		QGroupBox * expPanel = new QGroupBox("Experiment Control",this);
		expPanel->setFont(fnt);
		expPanel->setGeometry(645,500,350,160);

		fnt.setBold(false);
		dirSelect = new QPushButton("Browse...",expPanel);
		dirSelect->setGeometry(10,20,70,20); dirSelect->setFont(fnt);

		connect(dirSelect,SIGNAL(clicked()),this,SLOT(selectDir()));

		dirOpen = new QPushButton("Open Dir",expPanel);
		dirOpen->setGeometry(10,45,70,20); dirOpen->setFont(fnt);

		connect(dirOpen,SIGNAL(clicked()),this,SLOT(openDir()));


		expLoc.setFile("C:\\Data\\");
		
		expDirectory = new QLabel(expLoc.path(),expPanel);
		expDirectory->setGeometry(85,20,330,20); 
		expDirectory->setFont(fnt); 
		
		dataLog = new QCheckBox("Log Analysis Results and Stimuli",expPanel);
		dataLog->setGeometry(85,45,200,20); dataLog->setChecked(true);
		vidLog = new QCheckBox("Log Grayscale Video",expPanel);
		vidLog->setGeometry(85,65,200,20); vidLog->setChecked(true);
		markupLog = new QCheckBox("Log Video with Annotation",expPanel);
		markupLog->setGeometry(85,85,200,20); markupLog->setChecked(false);


		//list for available rules (including none) - from biorulesConnection
		tempLabel = new QLabel("BioRule:",expPanel);
		tempLabel->setGeometry(10,110,75,20);
		bioRuleList = new QComboBox(expPanel);
		bioRuleList->setGeometry(85,110,200,20);
		//bioRuleList->insertItem(0,QString("NONE"));
		
		tempLabel = new QLabel("Frame Trigger Interval (ms):",expPanel);
		tempLabel->setGeometry(10,135,180,20);
		frameIntIn = new QSpinBox(expPanel);
		frameIntIn->setGeometry(180,135,50,20); frameIntIn->setValue(33);
		frameIntIn->setRange(10,50);

		fnt.setBold(true);

	//Start/Stop Button and Experiment Ellapsed Time
	fnt.setPointSize(17);
	startStop = new QPushButton("START",this);
	startStop->setGeometry(500,950,120,40); startStop->setCheckable(true); startStop->setEnabled(false);
	startStop->setFont(fnt); startStop->setAutoFillBackground(true); startStop->setPalette(QPalette(QColor(200,0,0)));
	expTime = new QLabel("0:00:00",this);
	expTime->setGeometry(400,950,100,40);
	expTime->setFont(fnt);

	connect(startStop,SIGNAL(clicked()),this,SLOT(startStopExperiment()));


	//DATA PLOTS

	//Algorithm Performance Widget
	perfGraph = new PerformanceGraph(this);
	perfGraph->setGeometry(645,670,350,320);

	//Data Visualization - widget drawing plots of results 
	plots.resize(4);
	for(int i=0; i<4; i++){
		plots[i] = new DataPlot(this);
		plots[i]->setGeometry(10,20+240*i,300,230);
		plots[i]->parameterList->setCurrentIndex(i);
	}

	//Global Arena Trajectory - widget drawing history of animal track - clear history button
	arenaTrack = new ArenaTrack(this);
	arenaTrack->setGeometry(320,40,310,300);
	connect(bioRuleList,SIGNAL(currentIndexChanged(int)),arenaTrack,SLOT(update()));

	//Behavior mode visualization (i.e. stopped, forward, back, casting left, etc)
	behaviorModeView = new BehaviorModeView(this);
	behaviorModeView->setGeometry(320,360,310,300);

	//Manual controls
	manualControls = new ManualControls(this);
	manualControls->setGeometry(320,680,310,250);

	//check for default config in pwd and load it
}