}
-//TODO: implement the real one, not a wrapper
CV_IMPL int cvCreateTrackbar2( const char* name_bar, const char* window_name, int* val, int count, CvTrackbarCallback2 on_notify, void* userdata )
{
- return cvCreateTrackbar( name_bar, window_name, val, count, (CvTrackbarCallback)on_notify );
+ if (!guiMainThread) \r
+ CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); \r
+\r
+ QMetaObject::invokeMethod(guiMainThread, \r
+ "addSlider2", \r
+ Qt::AutoConnection, \r
+ Q_ARG(QString, QString(name_bar)), \r
+ Q_ARG(QString, QString(window_name)), \r
+ Q_ARG(void*, (void*)val), \r
+ Q_ARG(int, count), \r
+ Q_ARG(void*, (void*)on_notify), \r
+ Q_ARG(void*, (void*)userdata) \r
+ ); \r
+\r
+ return 1;//dummy value
}
CV_IMPL int cvStartWindowThread()
b->addButton( button_name,(CvButtonCallback) on_change, userdata, button_type, initial_button_state);
}
+void GuiReceiver::addSlider2(QString bar_name, QString window_name, void* value, int count, void* on_change, void *userdata)
+{
+ QBoxLayout *layout = NULL;
+ QPointer<CvWindow> w;
+ if (window_name != "")
+ {
+ w = icvFindWindowByName( window_name.toLatin1().data() );
+
+ if (!w)
+ return;
+ }else{
+ if (global_control_panel)
+ layout = global_control_panel->myLayout;
+ }
+
+ QPointer<CvTrackbar> t = icvFindTrackbarByName( bar_name.toLatin1().data() , window_name.toLatin1().data(), layout );
+
+ if (t)//trackbar exists
+ return;
+
+ if (!value)
+ CV_Error(CV_StsNullPtr, "NULL value pointer" );
+
+ if (count<= 0)//count is the max value of the slider, so must be bigger than 0
+ CV_Error(CV_StsNullPtr, "Max value of the slider must be bigger than 0" );
+
+ CvWindow::addSlider2(w,bar_name,(int*)value,count,(CvTrackbarCallback2) on_change, userdata);
+}
void GuiReceiver::addSlider(QString bar_name, QString window_name, void* value, int count, void* on_change)
{
return qApp->exec();
}
+CvTrackbar::CvTrackbar(CvWindow* arg, QString name, int* value, int count, CvTrackbarCallback2 on_change, void* data )
+{
+ callback = NULL;
+ callback2 = on_change;
+ userdata = data;
+
+ construc_trackbar(arg,name, value, count);
+}
CvTrackbar::CvTrackbar(CvWindow* arg, QString name, int* value, int count, CvTrackbarCallback on_change )
+{
+ callback = on_change;
+ callback2 = NULL;
+ userdata = NULL;
+
+ construc_trackbar(arg,name, value, count);
+}
+
+void CvTrackbar::construc_trackbar(CvWindow* arg, QString name, int* value, int count)
{
type=type_CvTrackbar;
myparent = arg;
setObjectName(name_bar);
dataSlider = value;
- callback = on_change;
slider = new QSlider(Qt::Horizontal);
slider->setFocusPolicy(Qt::StrongFocus);
slider->setMinimum(0);
*dataSlider = myvalue;
if (callback)
+ {
callback(myvalue);
+ return;
+ }
+
+ if (callback2)
+ {
+ callback2(myvalue,userdata);
+ return;
+ }
}
void CvTrackbar::setLabel(int myvalue)
CvWindow::~CvWindow()
{
- printf("delete w\n");
-
QLayoutItem *child;
if (myGlobalLayout)
myview->setMouseCallBack(m,param);
}
+//addSlider2 is static
+void CvWindow::addSlider2(CvWindow* w,QString name, int* value, int count,CvTrackbarCallback2 on_change, void* userdata)
+{
+ QPointer<CvTrackbar> t = new CvTrackbar(w,name,value, count, on_change, userdata);
+ t->setAlignment(Qt::AlignHCenter);
+
+ 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);
+
+
+}
+
//addSlider is static
void CvWindow::addSlider(CvWindow* w,QString name, int* value, int count,CvTrackbarCallback on_change)
{
void destroyWindow(QString name);\r
void destroyAllWindow();\r
void addSlider(QString trackbar_name, QString window_name, void* value, int count, void* on_change);\r
+ void addSlider2(QString trackbar_name, QString window_name, void* value, int count, void* on_change, void *userdata);\r
void moveWindow(QString name, int x, int y);\r
void resizeWindow(QString name, int width, int height);\r
void showImage(QString name, void* arr);\r
{\r
Q_OBJECT\r
public:\r
- CvTrackbar(CvWindow* parent, QString name, int* value, int count, CvTrackbarCallback on_change = NULL);\r
+ CvTrackbar(CvWindow* parent, QString name, int* value, int count, CvTrackbarCallback on_change);\r
+ CvTrackbar(CvWindow* parent, QString name, int* value, int count, CvTrackbarCallback2 on_change, void* data);\r
~CvTrackbar();\r
\r
//QString trackbar_name;\r
\r
private:\r
void setLabel(int myvalue);\r
+ void construc_trackbar(CvWindow* arg, QString name, int* value, int count);\r
QString createLabel();\r
QPointer<QPushButton > label;\r
CvTrackbarCallback callback;\r
+ CvTrackbarCallback2 callback2;//look like it is use by python binding\r
int* dataSlider;\r
+ void* userdata;\r
\r
};\r
\r
CvWindow(QString arg2, int flag = CV_WINDOW_NORMAL);\r
~CvWindow();\r
static void addSlider(CvWindow* w,QString name, int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));\r
+ static void addSlider2(CvWindow* w,QString name, int* value, int count, CvTrackbarCallback2 on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(0));\r
void setMouseCallBack(CvMouseCallback m, void* param);\r
void updateImage(void* arr);\r
void displayInfo(QString text, int delayms );\r