55 #include <sys/types.h> 73 #include "rnr/rnrconfig.h" 76 #include "opencv2/core/core.hpp" 77 #include "opencv/highgui/highgui.hpp" 101 #define SB_CLOCKID CLOCK_REALTIME 102 #define SB_SIG SIGRTMIN
111 static void SBTimerHandler(
int sig, siginfo_t *si,
void *uc)
119 static void SBTimerCreate()
122 long long freq_nanosecs;
127 sa.sa_flags = SA_SIGINFO;
128 sa.sa_sigaction = SBTimerHandler;
129 sigemptyset(&sa.sa_mask);
130 if( sigaction(SB_SIG, &sa, NULL) == -1 )
132 LOGSYSERROR(
"Cannot set Status Bar signal action: sigaction()");
136 sev.sigev_notify = SIGEV_SIGNAL;
137 sev.sigev_signo = SB_SIG;
139 if( timer_create(SB_CLOCKID, &sev, &
SBTimerId) == -1 )
141 LOGSYSERROR(
"Cannot create Status Bar timer: timer_create()");
145 if( sigprocmask(SIG_UNBLOCK, &mask, NULL) == -1 )
147 LOGSYSERROR(
"Cannot unblock Status Bar signal: sigprocmask()");
158 struct itimerspec its;
163 its.it_value.tv_sec = uMSec / 1000;
164 its.it_value.tv_nsec = (uMSec % 1000) * 1000000;
167 its.it_interval.tv_sec = 0;
168 its.it_interval.tv_nsec = 0;
170 if( timer_settime(
SBTimerId, 0, &its, NULL) == -1 )
172 LOGSYSERROR(
"Cannot set Status Bar timer: timer_settime()");
182 struct itimerspec its;
187 its.it_value.tv_sec = 0;
188 its.it_value.tv_nsec = 0;
191 its.it_interval.tv_sec = 0;
192 its.it_interval.tv_nsec = 0;
194 if( timer_settime(
SBTimerId, 0, &its, NULL) == -1 )
196 LOGSYSERROR(
"Cannot disarm Status Bar timer: timer_settime()");
201 #else // GTK timeout method 214 static gboolean SBTimerAlarm(gpointer user_data)
228 SBTimerId = g_timeout_add(uMSec, SBTimerAlarm, NULL);
256 char *s = (
char *)data;
283 static int h_status = 20;
293 wWindow = pWin->GetMainWindowWidget();
294 gtk_window_get_position(wWindow, &x_root, &y_root);
295 gtk_window_get_size(wWindow, &w_root, &h_root);
298 gdk_color_parse(
"#ffffcf", &color);
301 SBWidget = gtk_window_new(GTK_WINDOW_POPUP);
304 SBWinGeom.y = y_root + h_root - h_status;
308 gtk_window_set_keep_above(
SBWindow,
true);
312 gtk_window_set_decorated(
SBWindow,
false);
313 gtk_widget_modify_bg(
SBWidget, GTK_STATE_NORMAL, &color);
314 gtk_widget_modify_base(
SBWidget, GTK_STATE_NORMAL, &color);
323 gtk_signal_connect(GTK_OBJECT(
SBWidget),
"window-state-event",
326 gtk_widget_add_events(
SBWidget, GDK_EXPOSURE_MASK |
327 GDK_BUTTON_RELEASE_MASK |
328 GDK_BUTTON_PRESS_MASK |
329 GDK_POINTER_MOTION_MASK);
343 void rnrWin::MsgBox(
const char *sWinName,
const char *sMsg)
351 gdk_color_parse(
"#ffffcf", &color);
353 widget = (GtkWidget *)cvGetWindowHandle(sWinName);
354 window = GTK_WINDOW(gtk_widget_get_toplevel(widget));
356 wDialog = gtk_message_dialog_new(
358 GTK_DIALOG_DESTROY_WITH_PARENT,
363 gtk_widget_modify_bg(wDialog, GTK_STATE_NORMAL, &color);
364 gtk_widget_modify_base(wDialog, GTK_STATE_NORMAL, &color);
366 gtk_dialog_run( GTK_DIALOG(wDialog) );
367 gtk_widget_destroy(wDialog);
379 void rnrWin::StatusShow(rnrWindow *pWin,
384 static int h_status = 20;
408 vsnprintf(buf,
sizeof(buf), sFmt, ap);
410 buf[
sizeof(buf)-1] = 0;
435 void rnrWin::StatusClear()
static void SBTimerStop()
Stop the Status Bar timer.
static CvRect SBWinGeom
status bar window geometry
RoadNarrows Robotics Win abstract base class interface.
guint SBTimerId
statue bar timer
static GtkWidget * SBLabelWidget
status bar label gtk widget
static GtkWidget * SBWidget
status bar gtk widget
static bool SBIsVisible
status bar is [not] visible
static void SBTimerStart(uint_t uMSec)
Start the Status Bar timer.
gboolean SBOnWindowState(GtkWidget *w, GdkEventKey *event, gpointer *user_data)
Window state change event handler.
static GtkWindow * SBWindow
status bar gtk window
static void CreateStatusBar(rnrWindow *pWin)
Create status bar.
void SBFrameEvent(GtkWindow *window, GdkEvent *event, gpointer data)
Capture frame event for status bar.