Commit 9fae7aee authored by Yannick Verdie's avatar Yannick Verdie

QT new functions:

 - fixed icvFindTrackbar bug
parent 641c2ba8
...@@ -59,7 +59,7 @@ static const unsigned int threshold_zoom_img_region = 15; ...@@ -59,7 +59,7 @@ static const unsigned int threshold_zoom_img_region = 15;
CvFont cvFont_Qt(const char* nameFont, int pointSize,CvScalar color,int weight,int style, int spacing) CV_IMPL CvFont cvFont_Qt(const char* nameFont, int pointSize,CvScalar color,int weight,int style, int spacing)
{ {
/* /*
...@@ -81,7 +81,7 @@ CvFont cvFont_Qt(const char* nameFont, int pointSize,CvScalar color,int weight,i ...@@ -81,7 +81,7 @@ CvFont cvFont_Qt(const char* nameFont, int pointSize,CvScalar color,int weight,i
void cvAddText( CvArr* img, const char* text, CvPoint org, CvFont* font) CV_IMPL void cvAddText( CvArr* img, const char* text, CvPoint org, CvFont* font)
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
"putText", "putText",
...@@ -155,7 +155,7 @@ double cvGetModeWindow_QT(const char* name) ...@@ -155,7 +155,7 @@ double cvGetModeWindow_QT(const char* name)
return result; return result;
} }
void cvDisplayOverlay(const char* name, const char* text, int delayms) CV_IMPL void cvDisplayOverlay(const char* name, const char* text, int delayms)
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
...@@ -168,7 +168,7 @@ void cvDisplayOverlay(const char* name, const char* text, int delayms) ...@@ -168,7 +168,7 @@ void cvDisplayOverlay(const char* name, const char* text, int delayms)
} }
void cvSaveWindowParameters(const char* name) CV_IMPL void cvSaveWindowParameters(const char* name)
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
"saveWindowParameters", "saveWindowParameters",
...@@ -176,7 +176,7 @@ void cvSaveWindowParameters(const char* name) ...@@ -176,7 +176,7 @@ void cvSaveWindowParameters(const char* name)
Q_ARG(QString, QString(name))); Q_ARG(QString, QString(name)));
} }
void cvLoadWindowParameters(const char* name) CV_IMPL void cvLoadWindowParameters(const char* name)
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
"loadWindowParameters", "loadWindowParameters",
...@@ -184,7 +184,7 @@ void cvLoadWindowParameters(const char* name) ...@@ -184,7 +184,7 @@ void cvLoadWindowParameters(const char* name)
Q_ARG(QString, QString(name))); Q_ARG(QString, QString(name)));
} }
void cvDisplayStatusBar(const char* name, const char* text, int delayms) CV_IMPL void cvDisplayStatusBar(const char* name, const char* text, int delayms)
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
...@@ -197,12 +197,12 @@ void cvDisplayStatusBar(const char* name, const char* text, int delayms) ...@@ -197,12 +197,12 @@ void cvDisplayStatusBar(const char* name, const char* text, int delayms)
} }
int cvInitSystem( int, char** ) CV_IMPL int cvInitSystem( int, char** )
{ {
return 0; return 0;
} }
int cvWaitKey( int arg ) CV_IMPL int cvWaitKey( int arg )
{ {
int result = -1; int result = -1;
...@@ -279,20 +279,20 @@ int cvWaitKey( int arg ) ...@@ -279,20 +279,20 @@ int cvWaitKey( int arg )
//Yannick Verdie //Yannick Verdie
//This function is experimental and some functions (such as cvSet/getWindowProperty will not work) //This function is experimental and some functions (such as cvSet/getWindowProperty will not work)
//We recommend not using this function for now //We recommend not using this function for now
int cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]) CV_IMPL int cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[])
{ {
multiThreads = true; multiThreads = true;
QFuture<int> future = QtConcurrent::run(pt2Func,argc,argv); QFuture<int> future = QtConcurrent::run(pt2Func,argc,argv);
return guiMainThread.start(); return guiMainThread.start();
} }
void cvStopLoop() CV_IMPL void cvStopLoop()
{ {
qApp->exit(); qApp->exit();
} }
CvWindow* icvFindWindowByName( const char* arg ) CV_IMPL CvWindow* icvFindWindowByName( const char* arg )
{ {
QPointer<CvWindow> window = NULL; QPointer<CvWindow> window = NULL;
...@@ -332,6 +332,58 @@ CvTrackbar* icvFindTrackbarByName( const char* name_trackbar, const char* name_w ...@@ -332,6 +332,58 @@ CvTrackbar* icvFindTrackbarByName( const char* name_trackbar, const char* name_w
QString nameQt = QString(name_trackbar); QString nameQt = QString(name_trackbar);
QPointer<CvTrackbar> t; QPointer<CvTrackbar> t;
int start_index;
int stop_index;
QPointer<QLayout> myLayout;
if (w->param_gui_mode == CV_GUI_NORMAL)
{
myLayout = w->myLayout;
start_index = 1;
if (w->myToolBar)
start_index = 2;
//Warning ---- , asume the location 0 is toolbar, 1 is myview and max-1 the status bar
//done three times in the code, in loadtrackbars, savetrackbar and in findtrackbar
stop_index = myLayout->layout()->count()-1;
}
if (w->param_gui_mode == CV_GUI_EXPANDED)
{
myLayout = w->getWinProp()->myLayout;
start_index = 0;
stop_index = myLayout->layout()->count();
}
for (int i = start_index; i < stop_index; ++i)
{
t = (CvTrackbar*) myLayout->layout()->itemAt(i);
if (t->trackbar_name==nameQt)
{
result = t;
break;
}
}
return result;
}
/*
CvTrackbar* icvFindButtonbarByName( const char* name_Buttonbar, const char* name_window )
{
QPointer<CvButtonbar> result = NULL;
QPointer<CvWindow> w = icvFindWindowByName( name_window );
if( !w )
CV_Error( CV_StsNullPtr, "NULL window handler" );
QString nameQt = QString(name_Buttonbar);
QPointer<CvButtonbar> t;
int start_index = 1; int start_index = 1;
if (w->myToolBar) if (w->myToolBar)
start_index = 2; start_index = 2;
...@@ -348,7 +400,7 @@ CvTrackbar* icvFindTrackbarByName( const char* name_trackbar, const char* name_w ...@@ -348,7 +400,7 @@ CvTrackbar* icvFindTrackbarByName( const char* name_trackbar, const char* name_w
} }
return result; return result;
} }*/
int icvInitSystem() int icvInitSystem()
{ {
...@@ -370,7 +422,7 @@ int icvInitSystem() ...@@ -370,7 +422,7 @@ int icvInitSystem()
return 0; return 0;
} }
int cvNamedWindow( const char* name, int flags ) CV_IMPL int cvNamedWindow( const char* name, int flags )
{ {
if (multiThreads) if (multiThreads)
...@@ -388,9 +440,8 @@ int cvNamedWindow( const char* name, int flags ) ...@@ -388,9 +440,8 @@ int cvNamedWindow( const char* name, int flags )
return 1;//Dummy value return 1;//Dummy value
} }
void cvDestroyWindow( const char* name ) CV_IMPL void cvDestroyWindow( const char* name )
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
"destroyWindow", "destroyWindow",
//Qt::BlockingQueuedConnection, //Qt::BlockingQueuedConnection,
...@@ -399,8 +450,7 @@ void cvDestroyWindow( const char* name ) ...@@ -399,8 +450,7 @@ void cvDestroyWindow( const char* name )
); );
} }
CV_IMPL void cvDestroyAllWindows(void)
void cvDestroyAllWindows(void)
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
...@@ -411,7 +461,7 @@ void cvDestroyAllWindows(void) ...@@ -411,7 +461,7 @@ void cvDestroyAllWindows(void)
} }
void* cvGetWindowHandle( const char* name ) CV_IMPL void* cvGetWindowHandle( const char* name )
{ {
if( !name ) if( !name )
CV_Error( CV_StsNullPtr, "NULL name string" ); CV_Error( CV_StsNullPtr, "NULL name string" );
...@@ -419,7 +469,7 @@ void* cvGetWindowHandle( const char* name ) ...@@ -419,7 +469,7 @@ void* cvGetWindowHandle( const char* name )
return (void*) icvFindWindowByName( name ); return (void*) icvFindWindowByName( name );
} }
const char* cvGetWindowName( void* window_handle ) CV_IMPL const char* cvGetWindowName( void* window_handle )
{ {
if( !window_handle ) if( !window_handle )
...@@ -428,7 +478,7 @@ const char* cvGetWindowName( void* window_handle ) ...@@ -428,7 +478,7 @@ const char* cvGetWindowName( void* window_handle )
return ((CvWindow*)window_handle)->windowTitle().toLatin1().data(); return ((CvWindow*)window_handle)->windowTitle().toLatin1().data();
} }
void cvMoveWindow( const char* name, int x, int y ) CV_IMPL void cvMoveWindow( const char* name, int x, int y )
{ {
...@@ -443,7 +493,7 @@ void cvMoveWindow( const char* name, int x, int y ) ...@@ -443,7 +493,7 @@ void cvMoveWindow( const char* name, int x, int y )
} }
void cvResizeWindow(const char* name, int width, int height ) CV_IMPL void cvResizeWindow(const char* name, int width, int height )
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
...@@ -457,18 +507,18 @@ void cvResizeWindow(const char* name, int width, int height ) ...@@ -457,18 +507,18 @@ void cvResizeWindow(const char* name, int width, int height )
} }
int cvCreateTrackbar2( const char* trackbar_name, const char* window_name, int* val, int count, CvTrackbarCallback2 on_notify, void* userdata ) //TODO: implement the real one, not a wrapper
CV_IMPL int cvCreateTrackbar2( const char* trackbar_name, const char* window_name, int* val, int count, CvTrackbarCallback2 on_notify, void* userdata )
{ {
//TODO: implement the real one, not a wrapper
return cvCreateTrackbar( trackbar_name, window_name, val, count, (CvTrackbarCallback)on_notify ); return cvCreateTrackbar( trackbar_name, window_name, val, count, (CvTrackbarCallback)on_notify );
} }
int cvStartWindowThread() CV_IMPL int cvStartWindowThread()
{ {
return 0; return 0;
} }
int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change) CV_IMPL int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change)
{ {
if (multiThreads) if (multiThreads)
...@@ -487,7 +537,7 @@ int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* v ...@@ -487,7 +537,7 @@ int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* v
return 1;//dummy value return 1;//dummy value
} }
void cvCreateOpenGLCallback( const char* window_name, CvOpenGLCallback callbackOpenGL, void* userdata) CV_IMPL void cvCreateOpenGLCallback( const char* window_name, CvOpenGLCallback callbackOpenGL, void* userdata)
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
"setOpenGLCallback", "setOpenGLCallback",
...@@ -498,7 +548,7 @@ void cvCreateOpenGLCallback( const char* window_name, CvOpenGLCallback callbackO ...@@ -498,7 +548,7 @@ void cvCreateOpenGLCallback( const char* window_name, CvOpenGLCallback callbackO
); );
} }
int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name )
{ {
int result = -1; int result = -1;
...@@ -510,7 +560,7 @@ int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) ...@@ -510,7 +560,7 @@ int cvGetTrackbarPos( const char* trackbar_name, const char* window_name )
return result; return result;
} }
void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos ) CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos )
{ {
QPointer<CvTrackbar> t = icvFindTrackbarByName( trackbar_name, window_name ); QPointer<CvTrackbar> t = icvFindTrackbarByName( trackbar_name, window_name );
...@@ -521,7 +571,7 @@ void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int p ...@@ -521,7 +571,7 @@ void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int p
} }
/* assign callback for mouse events */ /* assign callback for mouse events */
void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,void* param ) CV_IMPL void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,void* param )
{ {
QPointer<CvWindow> w = icvFindWindowByName( window_name ); QPointer<CvWindow> w = icvFindWindowByName( window_name );
...@@ -532,7 +582,7 @@ void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,void* ...@@ -532,7 +582,7 @@ void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,void*
} }
void cvShowImage( const char* name, const CvArr* arr ) CV_IMPL void cvShowImage( const char* name, const CvArr* arr )
{ {
QMetaObject::invokeMethod(&guiMainThread, QMetaObject::invokeMethod(&guiMainThread,
...@@ -689,10 +739,18 @@ void GuiReceiver::toggleFullScreen(QString name, double flags ) ...@@ -689,10 +739,18 @@ void GuiReceiver::toggleFullScreen(QString name, double flags )
return; return;
if (w->isFullScreen() && flags == CV_WINDOW_NORMAL) if (w->isFullScreen() && flags == CV_WINDOW_NORMAL)
{
w->showTools();
w->showNormal(); w->showNormal();
return;
}
if (!w->isFullScreen() && flags == CV_WINDOW_FULLSCREEN) if (!w->isFullScreen() && flags == CV_WINDOW_FULLSCREEN)
{
w->hideTools();
w->showFullScreen(); w->showFullScreen();
return;
}
} }
...@@ -729,7 +787,8 @@ void GuiReceiver::displayStatusBar( QString name, QString text, int delayms ) ...@@ -729,7 +787,8 @@ void GuiReceiver::displayStatusBar( QString name, QString text, int delayms )
QPointer<CvWindow> w = icvFindWindowByName( name.toLatin1().data() ); QPointer<CvWindow> w = icvFindWindowByName( name.toLatin1().data() );
if (w && delayms > 0) if (w && delayms > 0)
w->displayStatusBar(text,delayms); if (w->myStatusBar)//if statusbar was created
w->displayStatusBar(text,delayms);
} }
void GuiReceiver::showImage(QString name, void* arr) void GuiReceiver::showImage(QString name, void* arr)
...@@ -935,6 +994,15 @@ CvTrackbar::~CvTrackbar() ...@@ -935,6 +994,15 @@ CvTrackbar::~CvTrackbar()
//here CvButtonbar class
/*
CvButtonbar::CvButtonbar()
{
}
*/
//here CvWinProperties class //here CvWinProperties class
...@@ -978,7 +1046,8 @@ void CvWinProperties::showEvent ( QShowEvent * event ) ...@@ -978,7 +1046,8 @@ void CvWinProperties::showEvent ( QShowEvent * event )
{ {
move(mypos); move(mypos);
event->accept(); event->accept();
}else{ }
else{
event->ignore(); event->ignore();
} }
} }
...@@ -986,7 +1055,7 @@ void CvWinProperties::showEvent ( QShowEvent * event ) ...@@ -986,7 +1055,7 @@ void CvWinProperties::showEvent ( QShowEvent * event )
void CvWinProperties::hideEvent ( QHideEvent * event ) void CvWinProperties::hideEvent ( QHideEvent * event )
{ {
QSettings settings("OpenCV2", this->windowTitle()); QSettings settings("OpenCV2", this->windowTitle());
settings.setValue("pos", pos()); settings.setValue("pos", pos());//there is an offset of 6 pixels (so the window's position is wrong -- why ?)
event->accept(); event->accept();
} }
...@@ -994,7 +1063,8 @@ CvWinProperties::~CvWinProperties() ...@@ -994,7 +1063,8 @@ CvWinProperties::~CvWinProperties()
{ {
//clear the setting pos //clear the setting pos
QSettings settings("OpenCV2", this->windowTitle()); QSettings settings("OpenCV2", this->windowTitle());
settings.clear(); settings.remove("pos");
QLayoutItem *child; QLayoutItem *child;
if (myLayout) if (myLayout)
...@@ -1019,7 +1089,7 @@ CvWindow::CvWindow(QString arg, int arg2) ...@@ -1019,7 +1089,7 @@ CvWindow::CvWindow(QString arg, int arg2)
//the first bit is for normal or autoresize //the first bit is for normal or autoresize
//CV_WINDOW_NORMAL = 0x00000000 and CV_WINDOW_AUTOSIZE = 0x00000001 //CV_WINDOW_NORMAL = 0x00000000 and CV_WINDOW_AUTOSIZE = 0x00000001
//the secont bit is for the gui mode (normal or EXPANDED) //the secont bit is for the gui mode (normal or expanded)
//CV_GUI_EXPANDED = 0x00000000 and CV_GUI_NORMAL = 0x00000010 //CV_GUI_EXPANDED = 0x00000000 and CV_GUI_NORMAL = 0x00000010
param_flags = arg2 & 0x0000000F; param_flags = arg2 & 0x0000000F;
param_gui_mode = arg2 & 0x000000F0; param_gui_mode = arg2 & 0x000000F0;
...@@ -1094,6 +1164,35 @@ CvWindow::~CvWindow() ...@@ -1094,6 +1164,35 @@ CvWindow::~CvWindow()
delete vect_QShortcuts[i]; delete vect_QShortcuts[i];
} }
CvWinProperties* CvWindow::getWinProp()
{
return parameters_window;
}
void CvWindow::hideTools()
{
if (myToolBar)
myToolBar->hide();
if (myStatusBar)
myStatusBar->hide();
if (parameters_window)
parameters_window->hide();
}
void CvWindow::showTools()
{
if (myToolBar)
myToolBar->show();
if (myStatusBar)
myStatusBar->show();
//if (parameters_window)
// parameters_window->show();
}
void CvWindow::createParameterWindow() void CvWindow::createParameterWindow()
{ {
QString name_paraWindow=param_name+" window parameters"; QString name_paraWindow=param_name+" window parameters";
...@@ -1519,7 +1618,6 @@ void ViewPort::saveView() ...@@ -1519,7 +1618,6 @@ void ViewPort::saveView()
} }
} }
void ViewPort::setRatio(int flags) void ViewPort::setRatio(int flags)
{ {
param_keepRatio = flags; param_keepRatio = flags;
...@@ -1890,7 +1988,8 @@ void ViewPort::resizeEvent ( QResizeEvent *event) ...@@ -1890,7 +1988,8 @@ void ViewPort::resizeEvent ( QResizeEvent *event)
//if the toolbar is displayed, avoid drawing myview on top of it //if the toolbar is displayed, avoid drawing myview on top of it
if (centralWidget->myToolBar) if (centralWidget->myToolBar)
newSize +=QSize(0,centralWidget->myToolBar->height()); if(!centralWidget->myToolBar->isHidden())
newSize +=QSize(0,centralWidget->myToolBar->height());
move(newSize.width(),newSize.height()); move(newSize.width(),newSize.height());
} }
......
...@@ -132,6 +132,17 @@ public slots: ...@@ -132,6 +132,17 @@ public slots:
}; };
/*
protected:
int width, height;
class CvButtonbar : public QButtonGroup
{
Q_OBJECT
public:
CvButtonbar();
};*/
class CvTrackbar : public QHBoxLayout class CvTrackbar : public QHBoxLayout
{ {
Q_OBJECT Q_OBJECT
...@@ -157,7 +168,6 @@ private: ...@@ -157,7 +168,6 @@ private:
}; };
class CvWinProperties : public QWidget class CvWinProperties : public QWidget
{ {
Q_OBJECT Q_OBJECT
...@@ -172,8 +182,6 @@ private: ...@@ -172,8 +182,6 @@ private:
void hideEvent ( QHideEvent * event ) ; void hideEvent ( QHideEvent * event ) ;
}; };
class CvWindow : public QWidget class CvWindow : public QWidget
{ {
Q_OBJECT Q_OBJECT
...@@ -188,7 +196,13 @@ public: ...@@ -188,7 +196,13 @@ public:
void readSettings(); void readSettings();
void writeSettings(); void writeSettings();
void setOpenGLCallback(CvOpenGLCallback arg1,void* userdata); void setOpenGLCallback(CvOpenGLCallback arg1,void* userdata);
void hideTools();
void showTools();
ViewPort* getView(); ViewPort* getView();
CvWinProperties* getWinProp();
QPointer<QBoxLayout> myLayout; QPointer<QBoxLayout> myLayout;
QPointer<QStatusBar> myStatusBar; QPointer<QStatusBar> myStatusBar;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment