This commit is contained in:
Yannick Verdie 2010-08-17 17:22:21 +00:00
parent 28030952fa
commit b530a2cba9
3 changed files with 63 additions and 69 deletions

View File

@ -160,12 +160,6 @@
/* Eigen2 Matrix & Linear Algebra Library */
#cmakedefine HAVE_EIGEN2
/* Qt bindings */
//#cmakedefine HAVE_QT
/* Qt bindings use OpenGL */
//#cmakedefine HAVE_QT_OPENGL
/* NVidia Cuda Runtime API*/
#cmakedefine HAVE_CUDA

View File

@ -407,7 +407,7 @@ CvTrackbar* icvFindTrackbarByName( const char* name_trackbar, const char* name_w
if (result)
return (CvTrackbar*) result;
return (CvTrackbar*) icvFindBarbyName(w->parameters_window->myLayout, nameQt, type_CvTrackbar);
return (CvTrackbar*) icvFindBarbyName(global_control_panel->myLayout, nameQt, type_CvTrackbar);
}
return NULL;
@ -460,10 +460,7 @@ CV_IMPL int cvNamedWindow( const char* name, int flags )
if (multiThreads)
QMetaObject::invokeMethod(guiMainThread,
"createWindow",
//Qt::AutoConnection,
Qt::BlockingQueuedConnection,
//TypeConnection,
//Qt::AutoConnection,
Q_ARG(QString, QString(name)),
Q_ARG(int, flags));
else
@ -892,7 +889,6 @@ void GuiReceiver::displayStatusBar( QString name, QString text, int delayms )
void GuiReceiver::showImage(QString name, void* arr)
{
//qDebug()<<"inshowimage"<<endl;
QPointer<CvWindow> w = icvFindWindowByName( name.toLatin1().data() );
if (!w)//as observed in the previous implementation (W32, GTK or Carbon), create a new window is the pointer returned is null
@ -973,6 +969,23 @@ void GuiReceiver::resizeWindow(QString name, int width, int height)
w->resize(width, height);
}
void GuiReceiver::enablePropertiesButtonEachWindow()
{
CvWindow* w;
//For each window, enable window property button
foreach (QWidget *widget, QApplication::topLevelWidgets())
{
if (widget->isWindow() && !widget->parentWidget ())//is a window without parent
{
w = (CvWindow*) widget;
//active window properties button
w->vect_QActions[9]->setDisabled(false);
}
}
}
void GuiReceiver::addButton(QString button_name, int button_type, int initial_button_state , void* on_change, void* userdata)
{
@ -987,6 +1000,8 @@ void GuiReceiver::addButton(QString button_name, int button_type, int initial_bu
if (global_control_panel->myLayout->count() == 0)//if that is the first button attach to the control panel, create a new button bar
{
b = CvWindow::createButtonbar(button_name);//the bar has the name of the first button attached to it
enablePropertiesButtonEachWindow();
}else{
CvBar* lastbar = (CvBar*) global_control_panel->myLayout->itemAt(global_control_panel->myLayout->count()-1);
@ -1279,7 +1294,6 @@ CvWinProperties::CvWinProperties(QString name_paraWindow, QWidget* parent)
setContentsMargins(0,0,0,0);
setWindowTitle(name_paraWindow);
setObjectName(name_paraWindow);
//parameters_window->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
resize(100,50);
myLayout = new QBoxLayout(QBoxLayout::TopToBottom);
@ -1364,34 +1378,31 @@ CvWindow::CvWindow(QString arg, int arg2)
resize(400,300);
//1: Layouts
//1: create control panel
if (!global_control_panel)
global_control_panel = createParameterWindow();
//2: Layouts
createBarLayout();
createGlobalLayout();
//2: my view
//3: my view
int mode_display = CV_MODE_NORMAL;
#if defined( HAVE_QT_OPENGL )
mode_display = CV_MODE_OPENGL;
#endif
createView(mode_display, param_ratio_mode);
//3: shortcuts and actions
createActions();
createShortcuts();
//4: shortcuts and actions
createActionsandShortcuts();
//4: toolBar and statusbar
//5: toolBar and statusbar
if (param_gui_mode == CV_GUI_EXPANDED)
{
createToolBar();
createStatusBar();
}
//5: create control panel
if (!global_control_panel)
global_control_panel = createParameterWindow();
parameters_window = global_control_panel;
//Now attach everything
if (myToolBar)
@ -1406,6 +1417,7 @@ CvWindow::CvWindow(QString arg, int arg2)
setLayout(myGlobalLayout);
show();
}
CvWindow::~CvWindow()
@ -1475,8 +1487,8 @@ void CvWindow::hideTools()
if (myStatusBar)
myStatusBar->hide();
if (parameters_window)
parameters_window->hide();
if (global_control_panel)
global_control_panel->hide();
}
void CvWindow::showTools()
@ -1487,8 +1499,6 @@ void CvWindow::showTools()
if (myStatusBar)
myStatusBar->show();
//if (parameters_window)
// parameters_window->show();
}
CvWinProperties* CvWindow::createParameterWindow()
@ -1501,58 +1511,73 @@ CvWinProperties* CvWindow::createParameterWindow()
void CvWindow::displayPropertiesWin()
{
if (parameters_window->isHidden())
parameters_window->show();
if (global_control_panel->isHidden())
global_control_panel->show();
else
parameters_window->hide();
global_control_panel->hide();
}
void CvWindow::createActions()
void CvWindow::createActionsandShortcuts()
{
vect_QActions.resize(10);
//if the shortcuts are changed in window_QT.h, we need to update the tooltip manually
vect_QActions[0] = new QAction(QIcon(":/left-icon"),"Panning left (CTRL+arrowLEFT)",this);
vect_QActions[0]->setIconVisibleInMenu(true);
vect_QActions[0]->setShortcut(shortcut_panning_left);
QObject::connect( vect_QActions[0],SIGNAL(triggered()),myview, SLOT( siftWindowOnLeft() ));
vect_QActions[1] = new QAction(QIcon(":/right-icon"),"Panning right (CTRL+arrowRIGHT)",this);
vect_QActions[1]->setIconVisibleInMenu(true);
vect_QActions[1]->setShortcut(shortcut_panning_right);
QObject::connect( vect_QActions[1],SIGNAL(triggered()),myview, SLOT( siftWindowOnRight() ));
vect_QActions[2] = new QAction(QIcon(":/up-icon"),"Panning up (CTRL+arrowUP)",this);
vect_QActions[2]->setIconVisibleInMenu(true);
vect_QActions[2]->setShortcut(shortcut_panning_up);
QObject::connect( vect_QActions[2],SIGNAL(triggered()),myview, SLOT( siftWindowOnUp() ));
vect_QActions[3] = new QAction(QIcon(":/down-icon"),"Panning down (CTRL+arrowDOWN)",this);
vect_QActions[3]->setIconVisibleInMenu(true);
vect_QActions[3]->setShortcut(shortcut_panning_down);
QObject::connect( vect_QActions[3],SIGNAL(triggered()),myview, SLOT( siftWindowOnDown() ));
vect_QActions[4] = new QAction(QIcon(":/zoom_x1-icon"),"Zoom x1 (CTRL+P)",this);
vect_QActions[4] = new QAction(QIcon(":/zoom_x1-icon"),"Zoom x1 (CTRL+Z)",this);
vect_QActions[4]->setIconVisibleInMenu(true);
vect_QActions[4]->setShortcut(shortcut_zoom_normal);
QObject::connect( vect_QActions[4],SIGNAL(triggered()),myview, SLOT( resetZoom() ));
vect_QActions[5] = new QAction(QIcon(":/imgRegion-icon"),tr("Zoom x%1 (see label) (CTRL+X)")
.arg(threshold_zoom_img_region)
,this);
vect_QActions[5]->setIconVisibleInMenu(true);
vect_QActions[5]->setShortcut(shortcut_zoom_imgRegion);
QObject::connect( vect_QActions[5],SIGNAL(triggered()),myview, SLOT( imgRegion() ));
vect_QActions[6] = new QAction(QIcon(":/zoom_in-icon"),tr("Zoom in (CTRL++)"),this);
vect_QActions[6]->setIconVisibleInMenu(true);
vect_QActions[6]->setShortcut(shortcut_zoom_in);
QObject::connect( vect_QActions[6],SIGNAL(triggered()),myview, SLOT( ZoomIn() ));
vect_QActions[7] = new QAction(QIcon(":/zoom_out-icon"),tr("Zoom out (CTRL+-)"),this);
vect_QActions[7]->setIconVisibleInMenu(true);
vect_QActions[7]->setShortcut(shortcut_zoom_out);
QObject::connect( vect_QActions[7],SIGNAL(triggered()),myview, SLOT( ZoomOut() ));
vect_QActions[8] = new QAction(QIcon(":/save-icon"),tr("Save current image (CTRL+S)"),this);
vect_QActions[8]->setIconVisibleInMenu(true);
vect_QActions[8]->setShortcut(shortcut_save_img);
QObject::connect( vect_QActions[8],SIGNAL(triggered()),myview, SLOT( saveView() ));
vect_QActions[9] = new QAction(QIcon(":/properties-icon"),tr("Display properties window (CTRL+P)"),this);
vect_QActions[9]->setIconVisibleInMenu(true);
vect_QActions[9]->setShortcut(shortcut_properties_win);
if (global_control_panel->myLayout->count() == 0)
vect_QActions[9]->setDisabled(true);
QObject::connect( vect_QActions[9],SIGNAL(triggered()),this, SLOT( displayPropertiesWin() ));
}
void CvWindow::createToolBar()
@ -1600,32 +1625,6 @@ void CvWindow::createBarLayout()
myBarLayout->setMargin(0);
}
void CvWindow::createShortcuts()
{
vect_QShortcuts.resize(10);
vect_QShortcuts[0] = new QShortcut(shortcut_panning_left, this);
QObject::connect( vect_QShortcuts[0], SIGNAL( activated ()),myview, SLOT( siftWindowOnLeft() ));
vect_QShortcuts[1] = new QShortcut(shortcut_panning_right, this);
QObject::connect( vect_QShortcuts[1], SIGNAL( activated ()),myview, SLOT( siftWindowOnRight() ));
vect_QShortcuts[2] = new QShortcut(shortcut_panning_up, this);
QObject::connect(vect_QShortcuts[2], SIGNAL( activated ()),myview, SLOT( siftWindowOnUp() ));
vect_QShortcuts[3] = new QShortcut(shortcut_panning_down, this);
QObject::connect(vect_QShortcuts[3], SIGNAL( activated ()),myview, SLOT( siftWindowOnDown() ));
vect_QShortcuts[4] = new QShortcut(shortcut_zoom_normal, this);
QObject::connect( vect_QShortcuts[4], SIGNAL( activated ()),myview, SLOT( resetZoom( ) ));
vect_QShortcuts[5] = new QShortcut(shortcut_zoom_imgRegion, this);
QObject::connect( vect_QShortcuts[5], SIGNAL( activated ()),myview, SLOT( imgRegion( ) ));
vect_QShortcuts[6] = new QShortcut(shortcut_zoom_in, this);
QObject::connect( vect_QShortcuts[6], SIGNAL( activated ()),myview, SLOT( ZoomIn() ));
vect_QShortcuts[7] = new QShortcut(shortcut_zoom_out, this);
QObject::connect(vect_QShortcuts[7], SIGNAL( activated ()),myview, SLOT( ZoomOut() ));
vect_QShortcuts[8] = new QShortcut(shortcut_save_img, this);
QObject::connect( vect_QShortcuts[8], SIGNAL( activated ()),myview, SLOT( saveView( ) ));
vect_QShortcuts[9] = new QShortcut(shortcut_properties_win, this);
QObject::connect( vect_QShortcuts[9], SIGNAL( activated ()),this, SLOT( displayPropertiesWin() ));
}
void CvWindow::createView(int mode, int ratio)
{
@ -1674,10 +1673,18 @@ void CvWindow::addSlider(CvWindow* w,QString name, int* value, int count,CvTrack
QPointer<QBoxLayout> myLayout;
if (w)
{
myLayout = w->myBarLayout;
}
else
{
myLayout = global_control_panel->myLayout;
//if first one, enable control panel
if (myLayout->count() == 0)
guiMainThread->enablePropertiesButtonEachWindow();
}
myLayout->insertLayout( myLayout->count(),t);
@ -2003,17 +2010,11 @@ ViewPort::ViewPort(CvWindow* arg, int arg2, int arg3)
zmax = DEFAULT_ZMAX;
initGL();
}
#else
setViewport(centralWidget);
#endif
image2Draw_ipl=cvCreateImage(cvSize(viewport()->width(),viewport()->height()),IPL_DEPTH_8U,3);
//image2Draw_qt = QImage((uchar*) image2Draw_ipl->imageData, image2Draw_ipl->width, image2Draw_ipl->height,QImage::Format_RGB888);
//image2Draw_qt_resized = image2Draw_qt.scaled(this->width(),this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
//setupViewport(viewport());//centralWidget
//setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
nbChannelOriginImage = 0;
cvZero(image2Draw_ipl);

View File

@ -144,6 +144,7 @@ public slots:
void setOpenGLCallback(QString window_name, void* callbackOpenGL, void* userdata, double angle, double zmin, double zmax);
void putText(void* arg1, QString text, QPoint org, void* font);
void addButton(QString button_name, int button_type, int initial_button_state , void* on_change, void* userdata);
void enablePropertiesButtonEachWindow();
};
enum typeBar{type_CvTrackbar = 0, type_CvButtonbar = 1};
@ -303,7 +304,6 @@ public:
//parameters (will be save/load)
QString param_name;
CvWinProperties* parameters_window ;
int param_flags;
int param_gui_mode;
int param_ratio_mode;
@ -324,8 +324,7 @@ private:
void icvLoadButtonbar(CvButtonbar* t,QSettings *settings);
void icvSaveButtonbar(CvButtonbar* t,QSettings *settings);
void createShortcuts();
void createActions();
void createActionsandShortcuts();
void createToolBar();
void createView(int display_mode, int ratio_mode);
void createStatusBar();