Skip to content

Commit

Permalink
highgui: Support to change trackbar count in setTrackbarPos and repla…
Browse files Browse the repository at this point in the history
…ced deprecated CreateToolbarEx in Windows.
  • Loading branch information
Ashod committed Dec 6, 2014
1 parent 4f82b35 commit 19a8d93
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 6 deletions.
1 change: 1 addition & 0 deletions modules/highgui/include/opencv2/highgui/highgui_c.h
Expand Up @@ -158,6 +158,7 @@ CVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name
/* retrieve or set trackbar position */
CVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name );
CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );
CVAPI(void) cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval);

enum
{
Expand Down
5 changes: 5 additions & 0 deletions modules/highgui/src/window.cpp
Expand Up @@ -545,6 +545,11 @@ CV_IMPL void cvSetTrackbarPos( const char*, const char*, int )
CV_NO_GUI_ERROR( "cvSetTrackbarPos" );
}

CV_IMPL void cvSetTrackbarMax(const char*, const char*, int)
{
CV_NO_GUI_ERROR( "cvSetTrackbarMax" );
}

CV_IMPL void* cvGetWindowHandle( const char* )
{
CV_NO_GUI_ERROR( "cvGetWindowHandle" );
Expand Down
13 changes: 13 additions & 0 deletions modules/highgui/src/window_QT.cpp
Expand Up @@ -643,6 +643,19 @@ CV_IMPL void cvSetTrackbarPos(const char* name_bar, const char* window_name, int
}


CV_IMPL void cvSetTrackbarMax(const char* name_bar, const char* window_name, int maxval)
{
if (maxval >= 0)
{
QPointer<CvTrackbar> t = icvFindTrackBarByName(name_bar, window_name);
if (t)
{
t->slider->setMaximum(maxval);
}
}
}


/* assign callback for mouse events */
CV_IMPL void cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse, void* param)
{
Expand Down
7 changes: 5 additions & 2 deletions modules/highgui/src/window_cocoa.mm
Expand Up @@ -60,7 +60,7 @@ CV_IMPL int cvCreateTrackbar2(const char* trackbar_name,const char* window_name,
int* val, int count, CvTrackbarCallback2 on_notify2, void* userdata) {return 0;}
CV_IMPL void cvSetMouseCallback( const char* name, CvMouseCallback function, void* info) {}
CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) {return 0;}
CV_IMPL 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, int maxval = -1) {}
CV_IMPL void* cvGetWindowHandle( const char* name ) {return NULL;}
CV_IMPL const char* cvGetWindowName( void* window_handle ) {return NULL;}
CV_IMPL int cvNamedWindow( const char* name, int flags ) {return 0; }
Expand Down Expand Up @@ -393,7 +393,7 @@ CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name
return pos;
}

CV_IMPL 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, int maxval)
{
CV_FUNCNAME("cvSetTrackbarPos");

Expand All @@ -416,6 +416,9 @@ CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name
if(window) {
slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]];
if(slider) {
if(maxval >= 0) {
[[slider slider] setMaxValue:maxval];
}
[[slider slider] setIntValue:pos];
}
}
Expand Down
37 changes: 37 additions & 0 deletions modules/highgui/src/window_gtk.cpp
Expand Up @@ -1381,6 +1381,43 @@ CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_nam
}


CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval)
{
CV_FUNCNAME("cvSetTrackbarMax");

__BEGIN__;

if (maxval >= 0)
{
CvWindow* window = 0;
CvTrackbar* trackbar = 0;

if (trackbar_name == 0 || window_name == 0)
{
CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name");
}

window = icvFindWindowByName( window_name );
if (window)
{
trackbar = icvFindTrackbarByName(window, trackbar_name);
if (trackbar)
{
trackbar->maxval = maxval;

CV_LOCK_MUTEX();

gtk_range_set_range(GTK_RANGE(trackbar->widget), 0, trackbar->maxval);

CV_UNLOCK_MUTEX();
}
}
}

__END__;
}


CV_IMPL void* cvGetWindowHandle( const char* window_name )
{
void* widget = 0;
Expand Down
46 changes: 42 additions & 4 deletions modules/highgui/src/window_w32.cpp
Expand Up @@ -1827,7 +1827,7 @@ icvCreateTrackbar( const char* trackbar_name, const char* window_name,
if( !window_name || !trackbar_name )
CV_ERROR( CV_StsNullPtr, "NULL window or trackbar name" );

if( count <= 0 )
if( count < 0 )
CV_ERROR( CV_StsOutOfRange, "Bad trackbar maximal value" );

window = icvFindWindowByName(window_name);
Expand All @@ -1848,9 +1848,14 @@ icvCreateTrackbar( const char* trackbar_name, const char* window_name,
{
const int default_height = 30;

window->toolbar.toolbar = CreateToolbarEx(
window->frame, WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE,
1, 0, 0, 0, 0, 0, 16, 20, 16, 16, sizeof(TBBUTTON));
// CreateToolbarEx is deprecated and forces linking against Comctl32.lib.
window->toolbar.toolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
0, 0, 0, 0,
window->frame, NULL, GetModuleHandle(NULL), NULL);
// CreateToolbarEx automatically sends this but CreateWindowEx doesn't.
SendMessage(window->toolbar.toolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);

GetClientRect(window->frame, &rect);
MoveWindow( window->toolbar.toolbar, 0, 0,
rect.right - rect.left, default_height, TRUE);
Expand Down Expand Up @@ -2098,6 +2103,39 @@ CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_nam
}


CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval)
{
CV_FUNCNAME( "cvSetTrackbarMax" );

__BEGIN__;

if (maxval >= 0)
{
CvWindow* window = 0;
CvTrackbar* trackbar = 0;
if (trackbar_name == 0 || window_name == 0)
{
CV_ERROR(CV_StsNullPtr, "NULL trackbar or window name");
}

window = icvFindWindowByName(window_name);
if (window)
{
trackbar = icvFindTrackbarByName(window, trackbar_name);
if (trackbar)
{
// The position will be min(pos, maxval).
trackbar->maxval = maxval;
SendMessage(trackbar->hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)maxval);
}
}
}

__END__;
}



CV_IMPL void* cvGetWindowHandle( const char* window_name )
{
void* hwnd = 0;
Expand Down

0 comments on commit 19a8d93

Please sign in to comment.