Implemented show/hide for the properties window
This commit is contained in:
parent
e2e8c74944
commit
9e0ef4e8a3
86
src/camera.c
86
src/camera.c
|
@ -94,6 +94,10 @@ struct _Camera
|
||||||
GtkWidget * area;
|
GtkWidget * area;
|
||||||
GtkAllocation area_allocation;
|
GtkAllocation area_allocation;
|
||||||
GdkPixmap * pixmap;
|
GdkPixmap * pixmap;
|
||||||
|
/* preferences */
|
||||||
|
GtkWidget * pr_window;
|
||||||
|
/* properties */
|
||||||
|
GtkWidget * pp_window;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -171,6 +175,8 @@ Camera * camera_new(GtkWidget * window, GtkAccelGroup * group,
|
||||||
camera->window = NULL;
|
camera->window = NULL;
|
||||||
camera->bold = NULL;
|
camera->bold = NULL;
|
||||||
camera->gc = NULL;
|
camera->gc = NULL;
|
||||||
|
camera->pr_window = NULL;
|
||||||
|
camera->pp_window = NULL;
|
||||||
/* check for errors */
|
/* check for errors */
|
||||||
if(camera->device == NULL)
|
if(camera->device == NULL)
|
||||||
{
|
{
|
||||||
|
@ -231,6 +237,10 @@ void camera_delete(Camera * camera)
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
camera_stop(camera);
|
camera_stop(camera);
|
||||||
|
if(camera->pp_window != NULL)
|
||||||
|
gtk_widget_destroy(camera->pp_window);
|
||||||
|
if(camera->pr_window != NULL)
|
||||||
|
gtk_widget_destroy(camera->pr_window);
|
||||||
for(i = 0; i < camera->overlays_cnt; i++)
|
for(i = 0; i < camera->overlays_cnt; i++)
|
||||||
cameraoverlay_delete(camera->overlays[i]);
|
cameraoverlay_delete(camera->overlays[i]);
|
||||||
free(camera->overlays);
|
free(camera->overlays);
|
||||||
|
@ -308,8 +318,53 @@ void camera_show_preferences(Camera * camera, gboolean show)
|
||||||
/* camera_show_properties */
|
/* camera_show_properties */
|
||||||
static GtkWidget * _properties_label(Camera * camera, GtkSizeGroup * group,
|
static GtkWidget * _properties_label(Camera * camera, GtkSizeGroup * group,
|
||||||
char const * label, char const * value);
|
char const * label, char const * value);
|
||||||
|
static void _properties_window(Camera * camera);
|
||||||
|
/* callbacks */
|
||||||
|
static void _properties_on_response(gpointer data);
|
||||||
|
|
||||||
void camera_show_properties(Camera * camera, gboolean show)
|
void camera_show_properties(Camera * camera, gboolean show)
|
||||||
|
{
|
||||||
|
if(camera->rgb_buffer == NULL)
|
||||||
|
/* ignore the action */
|
||||||
|
return;
|
||||||
|
if(show)
|
||||||
|
{
|
||||||
|
if(camera->pp_window == NULL)
|
||||||
|
_properties_window(camera);
|
||||||
|
gtk_window_present(GTK_WINDOW(camera->pp_window));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(camera->pp_window != NULL)
|
||||||
|
gtk_widget_destroy(camera->pp_window);
|
||||||
|
camera->pp_window = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _properties_label(Camera * camera, GtkSizeGroup * group,
|
||||||
|
char const * label, char const * value)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
#if GTK_CHECK_VERSION(3, 0, 0)
|
||||||
|
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
|
||||||
|
#else
|
||||||
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
|
#endif
|
||||||
|
widget = gtk_label_new(label);
|
||||||
|
gtk_widget_modify_font(widget, camera->bold);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
widget = gtk_label_new((value != NULL) ? value : "");
|
||||||
|
gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _properties_window(Camera * camera)
|
||||||
{
|
{
|
||||||
GtkWidget * dialog;
|
GtkWidget * dialog;
|
||||||
GtkSizeGroup * group;
|
GtkSizeGroup * group;
|
||||||
|
@ -333,14 +388,14 @@ void camera_show_properties(Camera * camera, gboolean show)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
char const * sep = "";
|
char const * sep = "";
|
||||||
|
|
||||||
if(camera->rgb_buffer == NULL)
|
|
||||||
/* ignore the action */
|
|
||||||
return;
|
|
||||||
dialog = gtk_dialog_new_with_buttons(_("Properties"),
|
dialog = gtk_dialog_new_with_buttons(_("Properties"),
|
||||||
GTK_WINDOW(camera->window),
|
GTK_WINDOW(camera->window),
|
||||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
|
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
|
||||||
|
camera->pp_window = dialog;
|
||||||
gtk_window_set_default_size(GTK_WINDOW(dialog), 300, 200);
|
gtk_window_set_default_size(GTK_WINDOW(dialog), 300, 200);
|
||||||
|
g_signal_connect_swapped(dialog, "response", G_CALLBACK(
|
||||||
|
_properties_on_response), camera);
|
||||||
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||||
#if GTK_CHECK_VERSION(2, 14, 0)
|
#if GTK_CHECK_VERSION(2, 14, 0)
|
||||||
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
|
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
|
||||||
|
@ -377,31 +432,14 @@ void camera_show_properties(Camera * camera, gboolean show)
|
||||||
hbox = _properties_label(camera, group, _("Capabilities: "), buf);
|
hbox = _properties_label(camera, group, _("Capabilities: "), buf);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
||||||
gtk_widget_show_all(vbox);
|
gtk_widget_show_all(vbox);
|
||||||
gtk_dialog_run(GTK_DIALOG(dialog));
|
|
||||||
gtk_widget_destroy(dialog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget * _properties_label(Camera * camera, GtkSizeGroup * group,
|
static void _properties_on_response(gpointer data)
|
||||||
char const * label, char const * value)
|
|
||||||
{
|
{
|
||||||
GtkWidget * hbox;
|
Camera * camera = data;
|
||||||
GtkWidget * widget;
|
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(3, 0, 0)
|
gtk_widget_destroy(camera->pp_window);
|
||||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
|
camera->pp_window = NULL;
|
||||||
#else
|
|
||||||
hbox = gtk_hbox_new(FALSE, 4);
|
|
||||||
#endif
|
|
||||||
widget = gtk_label_new(label);
|
|
||||||
gtk_widget_modify_font(widget, camera->bold);
|
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
|
||||||
gtk_size_group_add_widget(group, widget);
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
|
||||||
widget = gtk_label_new((value != NULL) ? value : "");
|
|
||||||
gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END);
|
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
|
||||||
return hbox;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user