From 3b0e7077ffacb03cb2c75ff552637ce1a7154b9c Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 1 Sep 2011 19:04:17 +0000 Subject: Linux GUI patches by Nicolas Schodet: Fixed select none menu entry. Fixed snap settings display. Updated interface at startup. Do not force statusbar item size. Removed toolbar borders. Added snap move menu. git-svn-id: http://svn.leocad.org/branches/leocad-0.75@982 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- linux/main.cpp | 1 + linux/system.cpp | 19 ++++++------ linux/toolbar.cpp | 93 +++++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 95 insertions(+), 18 deletions(-) diff --git a/linux/main.cpp b/linux/main.cpp index 7720d92..c0c8a74 100644 --- a/linux/main.cpp +++ b/linux/main.cpp @@ -659,6 +659,7 @@ int main (int argc, char* argv[]) #include "pixmaps/icon32.xpm" + lcGetActiveProject()->UpdateInterface(); main_window->UpdateMRU (); GdkPixmap *gdkpixmap; diff --git a/linux/system.cpp b/linux/system.cpp index cdf9921..b4f726e 100644 --- a/linux/system.cpp +++ b/linux/system.cpp @@ -15,6 +15,7 @@ #include "toolbar.h" #include "dialogs.h" #include "globals.h" +#include "lc_application.h" // ============================================================================= // Cursor functions @@ -487,16 +488,16 @@ void SystemUpdateAnimation(bool bAnimation, bool bAddKeys) void SystemUpdateSnap(unsigned short move_snap, unsigned short RotateSnap) { - if (!label_snap) - return; + if (!label_snap) + return; - char text[11]; - if (move_snap) - sprintf (text, "Move x%i", move_snap); - else - strcpy (text, "Move /2"); + char Text[256], xy[32], z[32]; - gtk_label_set (GTK_LABEL (label_snap), text); + lcGetActiveProject()->GetSnapDistanceText(xy, z); + + sprintf(Text, " M: %s %s R: %d ", xy, z, RotateSnap); + + gtk_label_set (GTK_LABEL (label_snap), Text); } void SystemUpdateSelected(unsigned long flags, int SelectedCount, Object* Focus) @@ -511,7 +512,7 @@ void SystemUpdateSelected(unsigned long flags, int SelectedCount, Object* Focus) gtk_widget_set_sensitive (item, (flags & LC_SEL_UNSELECTED) != 0); item = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_edit_select_none")); - gtk_widget_set_sensitive (item, flags & (LC_SEL_PIECE|LC_SEL_CAMERA|LC_SEL_LIGHT) != 0); + gtk_widget_set_sensitive (item, (flags & (LC_SEL_PIECE|LC_SEL_CAMERA|LC_SEL_LIGHT)) != 0); item = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_edit_select_invert")); gtk_widget_set_sensitive (item, (flags & LC_SEL_NO_PIECES) == 0); item = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_edit_select_byname")); diff --git a/linux/toolbar.cpp b/linux/toolbar.cpp index 431fffb..3854c3f 100644 --- a/linux/toolbar.cpp +++ b/linux/toolbar.cpp @@ -15,6 +15,7 @@ #include "preview.h" #include "library.h" #include "lc_application.h" +#include "gtkmisc.h" // ============================================================================= // Variables @@ -89,7 +90,6 @@ void create_toolbars(GtkWidget *window, GtkWidget *vbox) gtk_container_add (GTK_CONTAINER (main_toolbar.handle_box), main_toolbar.toolbar); gtk_widget_show (main_toolbar.toolbar); - gtk_container_border_width (GTK_CONTAINER (main_toolbar.toolbar), 2); // gtk_toolbar_set_button_relief (GTK_TOOLBAR (main_toolbar.toolbar), GTK_RELIEF_NONE); // gtk_toolbar_set_space_style (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_SPACE_LINE); // gtk_toolbar_set_space_size (GTK_TOOLBAR (main_toolbar.toolbar), 10); @@ -151,7 +151,6 @@ void create_toolbars(GtkWidget *window, GtkWidget *vbox) gtk_container_add (GTK_CONTAINER (tool_toolbar.handle_box), tool_toolbar.toolbar); gtk_widget_show (tool_toolbar.toolbar); - gtk_container_border_width (GTK_CONTAINER (tool_toolbar.toolbar), 2); // gtk_toolbar_set_button_relief (GTK_TOOLBAR (tool_toolbar.toolbar), GTK_RELIEF_NONE); tool_toolbar.brick = button = gtk_toolbar_append_element (GTK_TOOLBAR (tool_toolbar.toolbar), @@ -216,7 +215,6 @@ void create_toolbars(GtkWidget *window, GtkWidget *vbox) gtk_container_add (GTK_CONTAINER (anim_toolbar.handle_box), anim_toolbar.toolbar); gtk_widget_show (anim_toolbar.toolbar); - gtk_container_border_width (GTK_CONTAINER (anim_toolbar.toolbar), 2); // gtk_toolbar_set_button_relief (GTK_TOOLBAR (anim_toolbar.toolbar), GTK_RELIEF_NONE); anim_toolbar.first = gtk_toolbar_append_item (GTK_TOOLBAR (anim_toolbar.toolbar), @@ -821,13 +819,35 @@ static void statusbar_listener (int message, void *data, void *user) } } +static gint statusbar_popup(GtkWidget *widget, GdkEvent *event, + GtkWidget *menu_widget) +{ + GtkMenu *menu; + GdkEventButton *event_button; + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(event != NULL, FALSE); + g_return_val_if_fail(menu_widget != NULL, FALSE); + g_return_val_if_fail(GTK_IS_MENU(menu_widget), FALSE); + menu = GTK_MENU(menu_widget); + if (event->type == GDK_BUTTON_PRESS) + { + event_button = (GdkEventButton *) event; + if (event_button->button == 3) + { + gtk_menu_popup(menu, NULL, NULL, NULL, NULL, + event_button->button, event_button->time); + return TRUE; + } + } + return FALSE; +} + void create_statusbar(GtkWidget *window, GtkWidget *vbox) { - GtkWidget *hbox, *hbox1, *frame; + GtkWidget *hbox, *hbox1, *frame, *ebox_snap; hbox = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox); - gtk_widget_set_usize (hbox, -1, 24); gtk_container_border_width (GTK_CONTAINER (hbox), 1); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 2); @@ -851,7 +871,6 @@ void create_statusbar(GtkWidget *window, GtkWidget *vbox) gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_widget_set_usize (frame, 150, -1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), hbox1); @@ -866,22 +885,24 @@ void create_statusbar(GtkWidget *window, GtkWidget *vbox) gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_widget_set_usize (frame, 70, -1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), hbox1); gtk_container_border_width (GTK_CONTAINER (hbox1), 0); gtk_widget_show (hbox1); + ebox_snap = gtk_event_box_new(); + gtk_widget_show(ebox_snap); + gtk_box_pack_start(GTK_BOX(hbox1), ebox_snap, TRUE, TRUE, 0); + label_snap = gtk_label_new (" "); gtk_widget_show (label_snap); - gtk_box_pack_start (GTK_BOX (hbox1), label_snap, TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(ebox_snap), label_snap); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_widget_set_usize (frame, 70, -1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), hbox1); @@ -893,4 +914,58 @@ void create_statusbar(GtkWidget *window, GtkWidget *vbox) gtk_box_pack_start (GTK_BOX (hbox1), label_step, TRUE, TRUE, 0); messenger->Listen (&statusbar_listener, NULL); + + // Add snap popup menu + GtkWidget *menu, *item; + menu = gtk_menu_new(); + item = gtk_menu_item_new_with_label("XY Snap"); + gtk_widget_set_sensitive(item, FALSE); + gtk_menu_append(menu, item); + create_menu_item(menu, "None", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_0, NULL); + create_menu_item(menu, "1/20 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_1, NULL); + create_menu_item(menu, "1/4 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_2, NULL); + create_menu_item(menu, "1 Flat", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_3, NULL); + create_menu_item(menu, "1/2 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_4, NULL); + create_menu_item(menu, "1 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_5, NULL); + create_menu_item(menu, "2 Studs", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_6, NULL); + create_menu_item(menu, "3 Studs", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_7, NULL); + create_menu_item(menu, "4 Studs", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_8, NULL); + create_menu_item(menu, "8 Studs", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEXY_SNAP_9, NULL); + menu_separator(menu); + item = gtk_menu_item_new_with_label("Z Snap"); + gtk_widget_set_sensitive(item, FALSE); + gtk_menu_append(menu, item); + create_menu_item(menu, "None", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_0, NULL); + create_menu_item(menu, "1/20 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_1, NULL); + create_menu_item(menu, "1/4 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_2, NULL); + create_menu_item(menu, "1 Flat", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_3, NULL); + create_menu_item(menu, "1/2 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_4, NULL); + create_menu_item(menu, "1 Stud", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_5, NULL); + create_menu_item(menu, "1 Brick", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_6, NULL); + create_menu_item(menu, "2 Bricks", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_7, NULL); + create_menu_item(menu, "4 Bricks", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_8, NULL); + create_menu_item(menu, "8 Bricks", NULL, GTK_SIGNAL_FUNC(OnCommandDirect), + NULL, LC_EDIT_MOVEZ_SNAP_9, NULL); + gtk_widget_show_all(menu); + gtk_signal_connect(GTK_OBJECT(ebox_snap), "button_press_event", + GTK_SIGNAL_FUNC(statusbar_popup), menu); } -- cgit v1.2.3