00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #include <QDialog>
00026 #include <QTextEdit>
00027 #include <QFont>
00028
00029 #include <QVDefaultGUI>
00030 #include <QVVideoReaderBlock>
00031 #include <QVImageCanvas>
00032 #include <QV3DCanvas>
00033
00034 #include "qvplot.h"
00035 #include "qvparamsinspectorwidget.h"
00036 #include "qvblockinterfacesmall.h"
00037 #include "qvvideoreaderblockwidget.h"
00038
00039 QVDefaultGUI::QVDefaultGUI(QWidget *parent): QWidget(parent)
00040 {
00041 if (qvApp == NULL)
00042 {
00043 QString str = "QVDefaultGUI::QVDefaultGUI(): the QVDefaultGUI cannot be created before the QVApplication instance. Aborting now.";
00044 std::cerr << qPrintable(str) << std::endl;
00045 exit(1);
00046 }
00047
00048
00049 if (qvApp->forHelp()) return;
00050
00051
00052 connect(this,SIGNAL(closed()),qvApp,SLOT(quit()));
00053
00054
00055 setWindowTitle("QVision default GUI for " + qApp->applicationName());
00056
00057
00058 vboxlayout = new QVBoxLayout(this);
00059 menubar = new QMenuBar(this);
00060 windowmenu = new QMenu("&Window",menubar);
00061 QAction *quit_action = menubar->addAction("&Quit");
00062 connect(quit_action,SIGNAL(triggered()),qvApp,SLOT(quit()));
00063 menubar->addMenu(windowmenu);
00064 QAction *help_action = menubar->addAction("&Help");
00065 connect(help_action,SIGNAL(triggered()),this,SLOT(showHelp()));
00066
00067
00068 qvApp->registerGUI(this);
00069 }
00070
00071 void QVDefaultGUI::showHelp()
00072 {
00073 QDialog dialog;
00074 QString help_string = QVApplication::instance()->getHelp().trimmed();
00075 dialog.setWindowTitle("QVision help for " + qApp->applicationName());
00076 QVBoxLayout vboxlayout(&dialog);
00077 QTextEdit textedit;
00078 QFont font("Courier");
00079 textedit.setReadOnly(TRUE);
00080 textedit.setFont(font);
00081 textedit.setPlainText(help_string);
00082 QFontMetrics fontmetrics = textedit.font();
00083 int w = qMin(fontmetrics.size(0,help_string).width() + 30,800);
00084 int h = qMin(fontmetrics.size(0,help_string).height() + 30,500);
00085 textedit.setMinimumSize(QSize(w,h));
00086 vboxlayout.addWidget(&textedit);
00087 QPushButton button("OK");
00088 QHBoxLayout hboxlayout;
00089 hboxlayout.addStretch();
00090 hboxlayout.addWidget(&button);
00091 hboxlayout.addStretch();
00092 vboxlayout.addLayout(&hboxlayout);
00093 connect(&button,SIGNAL(pressed()),&dialog,SLOT(close()));
00094 dialog.exec();
00095 }
00096
00097 void QVDefaultGUI::init()
00098 {
00099 QVBoxLayout *groupboxcameraslayout,*groupboxblockslayout;
00100 QMenu *menu_imagecanvas = NULL, *menu_glcanvas = NULL, *menu_qvplot = NULL;
00101 bool some_block = FALSE, some_camera = FALSE;
00102
00103
00104 foreach(QVPropertyContainer* qvp, qvApp->getQVPropertyContainers())
00105 {
00106
00107 QVProcessingBlock* block;
00108 if(((block = dynamic_cast<QVProcessingBlock*>(qvp)) != NULL) and (dynamic_cast<QVVideoReaderBlock*>(qvp) == NULL))
00109 {
00110 if(not some_block)
00111 {
00112 some_block = TRUE;
00113 groupboxblocks = new QGroupBox("Blocks",this);
00114 toolboxblocks = new QToolBox(groupboxblocks);
00115 }
00116 QVProcessingBlockInterfaceSmall *blockWidget = new QVProcessingBlockInterfaceSmall(block,this);
00117 QVParamsInspectorWidget *qvparamsinspectorwidget = new QVParamsInspectorWidget(block,this);
00118 QWidget *widget = new QWidget(this);
00119 QVBoxLayout *vboxlayout2 = new QVBoxLayout(widget);
00120 vboxlayout2->setSpacing(0);
00121 vboxlayout2->setMargin(0);
00122 vboxlayout2->addWidget(blockWidget);
00123 vboxlayout2->addWidget(qvparamsinspectorwidget);
00124 toolboxblocks->addItem(widget,block->getName());
00125
00126 continue;
00127 }
00128
00129 QVVideoReaderBlock* camera;
00130 if((camera = dynamic_cast<QVVideoReaderBlock*>(qvp)) != NULL)
00131 {
00132 if(not some_camera)
00133 {
00134 some_camera = TRUE;
00135 groupboxcameras = new QGroupBox("Cameras",this);
00136 groupboxcameras->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed);
00137 toolboxcameras = new QToolBox(groupboxcameras);
00138 }
00139 QVVideoReaderBlockWidget *cameraWidget = new QVVideoReaderBlockWidget(camera,this);
00140 toolboxcameras->addItem(cameraWidget, camera->getName());
00141 continue;
00142 }
00143
00144 QVImageCanvas *imageCanvas;
00145 if((imageCanvas = dynamic_cast<QVImageCanvas*>(qvp)) != NULL)
00146 {
00147 if(menu_imagecanvas == NULL)
00148 menu_imagecanvas = windowmenu->addMenu("&Image windows");
00149 QAction *action = menu_imagecanvas->addAction(imageCanvas->getName());
00150 action->setCheckable(TRUE);
00151 action->setChecked(imageCanvas->isVisible());
00152 connect(action,SIGNAL(toggled(bool)),imageCanvas,SLOT(setVisible(bool)));
00153 connect(imageCanvas,SIGNAL(closed()),action,SLOT(toggle()));
00154 continue;
00155 }
00156
00157 QV3DCanvas *glCanvas;
00158 if((glCanvas = dynamic_cast<QV3DCanvas*>(qvp)) != NULL)
00159 {
00160 if(menu_glcanvas == NULL)
00161 menu_glcanvas = windowmenu->addMenu("&OpenGL windows");
00162 QAction *action = menu_glcanvas->addAction(glCanvas->getName());
00163 action->setCheckable(TRUE);
00164 action->setChecked(glCanvas->isVisible());
00165 connect(action,SIGNAL(toggled(bool)),glCanvas,SLOT(setVisible(bool)));
00166 connect(glCanvas,SIGNAL(closed()),action,SLOT(toggle()));
00167 continue;
00168 }
00169
00170 QVPlot *qvplot;
00171 if((qvplot = dynamic_cast<QVPlot*>(qvp)) != NULL)
00172 {
00173 if(menu_qvplot == NULL)
00174 menu_qvplot = windowmenu->addMenu("&Plot windows");
00175 QAction *action = menu_qvplot->addAction(qvplot->getName());
00176 action->setCheckable(TRUE);
00177
00178
00179 action->setChecked(TRUE);
00180 connect(action,SIGNAL(toggled(bool)),qvplot,SLOT(setVisible(bool)));
00181 connect(qvplot,SIGNAL(closed()),action,SLOT(toggle()));
00182 continue;
00183 }
00184 }
00185
00186
00187 vboxlayout->setSpacing(5);
00188 vboxlayout->setMargin(5);
00189 vboxlayout->addWidget(menubar);
00190
00191 if(some_block)
00192 {
00193 groupboxblockslayout = new QVBoxLayout(groupboxblocks);
00194 groupboxblockslayout->addWidget(toolboxblocks);
00195 vboxlayout->addWidget(groupboxblocks);
00196 }
00197
00198 if(some_camera)
00199 {
00200 groupboxcameraslayout = new QVBoxLayout(groupboxcameras);
00201 groupboxcameraslayout->addWidget(toolboxcameras);
00202 vboxlayout->addWidget(groupboxcameras);
00203 }
00204 }
00205
00206 void QVDefaultGUI::closeEvent(QCloseEvent *event)
00207 {
00208 Q_UNUSED(event);
00209 qvApp->deregisterGUI();
00210 emit closed();
00211 }