summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorleo2000-08-26 14:46:17 +0000
committerleo2000-08-26 14:46:17 +0000
commit53930ef60abf446960319d6c54a6899965b9a09f (patch)
tree392f51e1f1d34df6d99783e5bfa960b31f061015 /linux
parent31a1d493ed4ca5d263244a8a3231111a58bdc5c4 (diff)
Rewrote the way the pieces toolbar work under Linux, now it can be
resized and floated. Save toolbar preferences between sessions. Fixed the check marks in the toolbar menu. git-svn-id: http://svn.leocad.org/trunk@107 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'linux')
-rw-r--r--linux/main.cpp397
-rw-r--r--linux/main.h8
-rw-r--r--linux/menu.cpp4
-rw-r--r--linux/toolbar.cpp20
-rw-r--r--linux/toolbar.h12
5 files changed, 346 insertions, 95 deletions
diff --git a/linux/main.cpp b/linux/main.cpp
index 93b7ba1..eab5ebe 100644
--- a/linux/main.cpp
+++ b/linux/main.cpp
@@ -16,6 +16,7 @@
#include "toolbar.h"
#include "globals.h"
#include "main.h"
+#include "system.h"
void create_main_menu (GtkObject *window, GtkWidget *vbox);
@@ -24,11 +25,26 @@ void create_main_menu (GtkObject *window, GtkWidget *vbox);
GtkWidget *main_window;
GtkWidget *drawing_area;
+static GtkWidget* main_hbox;
+static GtkWidget* drawing_frame;
+static GtkWidget* drawing_parent;
+static GtkWidget* pieces_frame;
+static GtkWidget* pieces_parent;
+static gboolean pieces_floating;
+static gboolean pieces_visible;
+static gint pieces_width;
+
static char app_path[PATH_MAX];
static char lib_path[] = "/usr/local/share/leocad/";
bool ignore_commands = false;
-void init_paths (char *argv0)
+static void update_window_layout ();
+
+// =============================================================================
+// Static functions
+
+// try to find the path of the executable
+static void init_paths (char *argv0)
{
char temppath[PATH_MAX];
char *home;
@@ -144,35 +160,66 @@ void OnCommand(GtkWidget* widget, gpointer data)
if (!project->SaveModified())
break;
- gtk_main_quit();
+ gtk_widget_destroy (main_window);
} break;
- case ID_SNAP_A: {
+ case ID_SNAP_A:
+ {
project->HandleCommand(LC_TOOLBAR_SNAPMENU, 5);
} break;
- case ID_VIEW_TOOLBAR_STANDARD: {
+ case ID_VIEW_TOOLBAR_STANDARD:
+ {
if (GTK_WIDGET_VISIBLE (main_toolbar.handle_box))
gtk_widget_hide (main_toolbar.handle_box);
else
gtk_widget_show (main_toolbar.handle_box);
} break;
- case ID_VIEW_TOOLBAR_DRAWING: {
+ case ID_VIEW_TOOLBAR_DRAWING:
+ {
if (GTK_WIDGET_VISIBLE (tool_toolbar.handle_box))
gtk_widget_hide (tool_toolbar.handle_box);
else
gtk_widget_show (tool_toolbar.handle_box);
} break;
- case ID_VIEW_TOOLBAR_ANIMATION: {
- if (GTK_WIDGET_VISIBLE (anim_toolbar.handle_box))
- gtk_widget_hide (anim_toolbar.handle_box);
- else
- gtk_widget_show (anim_toolbar.handle_box);
+ case ID_VIEW_TOOLBAR_ANIMATION:
+ {
+ if (GTK_WIDGET_VISIBLE (anim_toolbar.handle_box))
+ gtk_widget_hide (anim_toolbar.handle_box);
+ else
+ gtk_widget_show (anim_toolbar.handle_box);
} break;
- case ID_VIEW_TOOLBAR_BOTH: {
+ case ID_VIEW_TOOLBAR_PIECES:
+ {
+ gpointer widget = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_floating");
+
+ if (pieces_visible)
+ {
+ pieces_visible = FALSE;
+ gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
+ }
+ else
+ {
+ pieces_visible = TRUE;
+ gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE);
+ }
+ update_window_layout ();
+ } break;
+
+ case ID_VIEW_TOOLBAR_FLOATING:
+ {
+ if (pieces_floating)
+ pieces_floating = FALSE;
+ else
+ pieces_floating = TRUE;
+ update_window_layout ();
+ } break;
+
+ case ID_VIEW_TOOLBAR_BOTH:
+ {
gtk_toolbar_set_style (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_BOTH);
gtk_toolbar_set_style (GTK_TOOLBAR (tool_toolbar.toolbar), GTK_TOOLBAR_BOTH);
gtk_toolbar_set_style (GTK_TOOLBAR (anim_toolbar.toolbar), GTK_TOOLBAR_BOTH);
@@ -181,7 +228,8 @@ void OnCommand(GtkWidget* widget, gpointer data)
gtk_widget_set_usize (anim_toolbar.handle_box, -1, -1);
} break;
- case ID_VIEW_TOOLBAR_ICONS: {
+ case ID_VIEW_TOOLBAR_ICONS:
+ {
gtk_toolbar_set_style (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_ICONS);
gtk_toolbar_set_style (GTK_TOOLBAR (tool_toolbar.toolbar), GTK_TOOLBAR_ICONS);
gtk_toolbar_set_style (GTK_TOOLBAR (anim_toolbar.toolbar), GTK_TOOLBAR_ICONS);
@@ -190,7 +238,8 @@ void OnCommand(GtkWidget* widget, gpointer data)
gtk_widget_set_usize (anim_toolbar.handle_box, -1, -1);
} break;
- case ID_VIEW_TOOLBAR_TEXT: {
+ case ID_VIEW_TOOLBAR_TEXT:
+ {
gtk_toolbar_set_style (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_TEXT);
gtk_toolbar_set_style (GTK_TOOLBAR (tool_toolbar.toolbar), GTK_TOOLBAR_TEXT);
gtk_toolbar_set_style (GTK_TOOLBAR (anim_toolbar.toolbar), GTK_TOOLBAR_TEXT);
@@ -327,11 +376,46 @@ static gint draw_view(GtkWidget *widget, GdkEventExpose *event)
// Save the new size of the window.
static gint reshape_view(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
{
- project->SetViewSize(allocation->width, allocation->height);
+ project->SetViewSize (allocation->width, allocation->height);
return TRUE;
}
+static void main_destroy ()
+{
+ gpointer item;
+ int i = 0;
+
+ // Save toolbar state
+ Sys_ProfileSaveInt ("Toolbars", "Standard", ((GTK_WIDGET_VISIBLE (main_toolbar.handle_box)) ? 1 : 0));
+ Sys_ProfileSaveInt ("Toolbars", "Drawing", ((GTK_WIDGET_VISIBLE (tool_toolbar.handle_box)) ? 1 : 0));
+ Sys_ProfileSaveInt ("Toolbars", "Animation", ((GTK_WIDGET_VISIBLE (anim_toolbar.handle_box)) ? 1 : 0));
+ Sys_ProfileSaveInt ("Toolbars", "Pieces", (pieces_visible ? 1 : 0));
+ Sys_ProfileSaveInt ("Toolbars", "Floating", (pieces_floating ? 1 : 0));
+
+ if (pieces_parent != NULL)
+ Sys_ProfileSaveInt ("Toolbars", "PiecesWidth", pieces_frame->allocation.width);
+
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_icons");
+ if (GTK_CHECK_MENU_ITEM (item)->active)
+ i = 0;
+ else
+ {
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_both");
+ if (GTK_CHECK_MENU_ITEM (item)->active)
+ i = 1;
+ else
+ {
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_text");
+ if (GTK_CHECK_MENU_ITEM (item)->active)
+ i = 2;
+ }
+ }
+ Sys_ProfileSaveInt ("Toolbars", "Style", i);
+
+ gtk_main_quit ();
+}
+
static gint main_quit (GtkWidget *widget, GdkEvent* event, gpointer data)
{
if (!project->SaveModified())
@@ -340,16 +424,141 @@ static gint main_quit (GtkWidget *widget, GdkEvent* event, gpointer data)
delete project;
project = NULL;
- gtk_main_quit ();
+ gtk_widget_destroy (main_window);
return FALSE;
}
-int main(int argc, char* argv[])
+static gint pieces_close (GtkWidget *widget, GdkEvent* event, gpointer data)
+{
+ gpointer item;
+
+ pieces_visible = FALSE;
+
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_pieces");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), FALSE);
+
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_floating");
+ gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
+
+ update_window_layout ();
+
+ return FALSE;
+}
+
+// this function takes care of showing the pieces bar correctly
+static void update_window_layout ()
+{
+ // first thing we need to create the widgets
+ if (drawing_area == NULL)
+ {
+ int attrlist[] = { GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 16, 0 };
+
+ // Create a new OpenGL widget
+ drawing_area = GTK_WIDGET (gtk_gl_area_new (attrlist));
+
+ GTK_WIDGET_SET_FLAGS (drawing_area, GTK_CAN_FOCUS);
+
+ gtk_widget_set_events (GTK_WIDGET (drawing_area), GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK |
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK);
+
+ // Connect signal handlers
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+ GTK_SIGNAL_FUNC(draw_view), NULL);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "size_allocate",
+ GTK_SIGNAL_FUNC(reshape_view), NULL);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "realize",
+ GTK_SIGNAL_FUNC(init), NULL);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "motion_notify_event",
+ GTK_SIGNAL_FUNC(motion_notify_event), NULL);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
+ GTK_SIGNAL_FUNC(button_press_event), NULL);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "button_release_event",
+ GTK_SIGNAL_FUNC(button_release_event), NULL);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "key_press_event",
+ GTK_SIGNAL_FUNC(key_press_event), NULL);
+
+ // set minimum size
+ gtk_widget_set_usize (GTK_WIDGET (drawing_area), 100, 100);
+
+ drawing_frame = gtk_frame_new (NULL);
+ gtk_widget_show (drawing_frame);
+ // gtk_container_add (GTK_CONTAINER (hbox), drawing_frame);
+ gtk_frame_set_shadow_type (GTK_FRAME (drawing_frame), GTK_SHADOW_IN);
+
+ gtk_container_add (GTK_CONTAINER (drawing_frame), GTK_WIDGET (drawing_area));
+ gtk_widget_show (GTK_WIDGET (drawing_area));
+
+ // now create the pieces bar
+ pieces_frame = create_piecebar (main_window);
+ }
+ else
+ {
+ // if the widgets already exist, remove their parents
+ if (pieces_parent)
+ pieces_width = pieces_frame->allocation.width;
+
+ gtk_container_remove (GTK_CONTAINER (drawing_parent), drawing_frame);
+ if (pieces_parent != NULL)
+ gtk_container_remove (GTK_CONTAINER (pieces_parent), pieces_frame);
+
+ if (drawing_parent != main_hbox)
+ gtk_widget_destroy (drawing_parent);
+ else if (pieces_parent != NULL)
+ gtk_widget_destroy (pieces_parent);
+
+ pieces_parent = NULL;
+ drawing_parent = NULL;
+ }
+
+ // now add the widgets to their new parents
+ if (pieces_floating)
+ {
+ gtk_box_pack_start (GTK_BOX (main_hbox), drawing_frame, TRUE, TRUE, 0);
+ drawing_parent = main_hbox;
+
+ if (pieces_visible)
+ {
+ pieces_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_signal_connect (GTK_OBJECT (pieces_parent), "delete_event",
+ GTK_SIGNAL_FUNC (pieces_close), NULL);
+ gtk_signal_connect (GTK_OBJECT (pieces_parent), "destroy",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
+ gtk_window_set_title (GTK_WINDOW (pieces_parent), "Pieces");
+ gtk_window_set_default_size (GTK_WINDOW (pieces_parent), pieces_width, -1);
+
+ gtk_container_add (GTK_CONTAINER (pieces_parent), pieces_frame);
+
+ gtk_widget_show (pieces_parent);
+ }
+ }
+ else
+ {
+ if (pieces_visible)
+ {
+ pieces_parent = drawing_parent = gtk_hpaned_new ();
+ gtk_paned_pack1 (GTK_PANED (drawing_parent), drawing_frame, TRUE, TRUE);
+ gtk_paned_pack2 (GTK_PANED (pieces_parent), pieces_frame, FALSE, FALSE);
+ gtk_widget_show (pieces_parent);
+ gtk_box_pack_start (GTK_BOX (main_hbox), pieces_parent, TRUE, TRUE, 0);
+
+ if (pieces_floating == FALSE)
+ gtk_paned_set_position (GTK_PANED (pieces_parent), main_window->allocation.width -
+ pieces_width - GTK_PANED (pieces_parent)->gutter_size);
+ }
+ else
+ {
+ gtk_box_pack_start (GTK_BOX (main_hbox), drawing_frame, TRUE, TRUE, 0);
+ drawing_parent = main_hbox;
+ }
+ }
+}
+
+int main (int argc, char* argv[])
{
- GtkWidget *vbox, *hbox, *frame;
- int attrlist[] = { GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 16, 0 };
- int i, j, k;
char* libgl = NULL;
+ GtkWidget *vbox;
+ int i, j, k;
// Parse and remove Linux arguments
for (i = 1; i < argc; i++)
@@ -412,7 +621,7 @@ int main(int argc, char* argv[])
gtk_window_set_default_size (GTK_WINDOW (main_window), 600, 400);
gtk_signal_connect (GTK_OBJECT (main_window), "delete_event", (GtkSignalFunc) main_quit, NULL);
- gtk_signal_connect (GTK_OBJECT (main_window), "destroy", (GtkSignalFunc) gtk_main_quit, NULL);
+ gtk_signal_connect (GTK_OBJECT (main_window), "destroy", (GtkSignalFunc) main_destroy, NULL);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (main_window), vbox);
@@ -424,62 +633,94 @@ int main(int argc, char* argv[])
// startup_message ("Creating Toolbars ...");
create_toolbars (main_window, vbox);
- hbox = gtk_hbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (vbox), hbox);
- gtk_widget_show (hbox);
-
- /* You should always delete gtk_gl_widget widgets before exit or else
- GLX contexts are left undeleted, this may cause problems (=core dump)
- in some systems.
- Destroy method of objects is not automatically called on exit.
- You need to manually enable this feature. Do gtk_quit_add_destroy()
- for all your top level windows unless you are certain that they get
- destroy signal by other means.
- */
- // gtk_quit_add_destroy(1, GTK_OBJECT(main_window));
-
- // Create new OpenGL widget.
- drawing_area = GTK_WIDGET(gtk_gl_area_new(attrlist));
-
- GTK_WIDGET_SET_FLAGS(drawing_area, GTK_CAN_FOCUS);
-
- gtk_widget_set_events(GTK_WIDGET(drawing_area),
- GDK_EXPOSURE_MASK |
- GDK_KEY_PRESS_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_MASK |
- GDK_POINTER_MOTION_HINT_MASK);
-
- // Connect signal handlers
- gtk_signal_connect(GTK_OBJECT(drawing_area), "expose_event",
- GTK_SIGNAL_FUNC(draw_view), NULL);
- gtk_signal_connect(GTK_OBJECT(drawing_area), "size_allocate",//configure_event",
- GTK_SIGNAL_FUNC(reshape_view), NULL);
- gtk_signal_connect(GTK_OBJECT(drawing_area), "realize",
- GTK_SIGNAL_FUNC(init), NULL);
- gtk_signal_connect (GTK_OBJECT (drawing_area), "motion_notify_event",
- GTK_SIGNAL_FUNC(motion_notify_event), NULL);
- gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
- GTK_SIGNAL_FUNC(button_press_event), NULL);
- gtk_signal_connect (GTK_OBJECT (drawing_area), "button_release_event",
- GTK_SIGNAL_FUNC(button_release_event), NULL);
- gtk_signal_connect (GTK_OBJECT (drawing_area), "key_press_event",
- GTK_SIGNAL_FUNC(key_press_event), NULL);
-
- // set minimum size
- gtk_widget_set_usize(GTK_WIDGET(drawing_area), 100,100);
+ main_hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), main_hbox);
+ gtk_widget_show (main_hbox);
- frame = gtk_frame_new ((char*)NULL);
- gtk_widget_show (frame);
- gtk_container_add (GTK_CONTAINER (hbox), frame);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ // load toolbar preferences and update the menu
+ int show;
+ ignore_commands = true;
- gtk_container_add (GTK_CONTAINER (frame), GTK_WIDGET(drawing_area));
- gtk_widget_show(GTK_WIDGET(drawing_area));
+ show = Sys_ProfileLoadInt ("Toolbars", "Standard", 1);
+ if (show)
+ {
+ gpointer widget = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_standard");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
+ }
+ else
+ gtk_widget_hide (main_toolbar.handle_box);
- create_piecebar(main_window, hbox);
- create_statusbar(main_window, vbox);
+ show = Sys_ProfileLoadInt ("Toolbars", "Drawing", 1);
+ if (show)
+ {
+ gpointer widget = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_drawing");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
+ }
+ else
+ gtk_widget_hide (tool_toolbar.handle_box);
+
+ show = Sys_ProfileLoadInt ("Toolbars", "Animation", 1);
+ if (show)
+ {
+ gpointer widget = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_animation");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
+ }
+ else
+ gtk_widget_hide (anim_toolbar.handle_box);
+
+ show = Sys_ProfileLoadInt ("Toolbars", "Pieces", 1);
+ if (show)
+ {
+ gpointer widget = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_pieces");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
+ pieces_visible = TRUE;
+ }
+ else
+ {
+ gpointer widget = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_floating");
+ gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
+ }
+
+ show = Sys_ProfileLoadInt ("Toolbars", "PiecesFloating", 0);
+ if (show)
+ {
+ gpointer widget = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_floating");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
+ pieces_floating = TRUE;
+ }
+
+ ignore_commands = false;
+
+ show = Sys_ProfileLoadInt ("Toolbars", "Style", 0);
+ gpointer item = NULL;
+
+ switch (show)
+ {
+ case 0:
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_icons");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
+ OnCommand (GTK_WIDGET (item), GINT_TO_POINTER (ID_VIEW_TOOLBAR_ICONS));
+ break;
+ case 1:
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_both");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
+ OnCommand (GTK_WIDGET (item), GINT_TO_POINTER (ID_VIEW_TOOLBAR_BOTH));
+ break;
+ case 2:
+ item = gtk_object_get_data (GTK_OBJECT (main_window), "menu_view_toolbar_text");
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
+ OnCommand (GTK_WIDGET (item), GINT_TO_POINTER (ID_VIEW_TOOLBAR_TEXT));
+ break;
+ }
+
+ pieces_width = Sys_ProfileLoadInt ("Toolbars", "PiecesWidth", 210);
+ update_window_layout ();
+
+ // increase the reference count to allow changing parents when hiding the pieces bar
+ gtk_widget_ref (drawing_frame);
+ gtk_widget_ref (pieces_frame);
+
+ create_statusbar (main_window, vbox);
// gtk_box_pack_start (GTK_BOX (vbox), create_status_bar (), FALSE, TRUE, 2);
// GtkWidget* statusbar = gtk_statusbar_new ();
//gtk_widget_show (statusbar);
@@ -494,7 +735,12 @@ int main(int argc, char* argv[])
&main_window->style->bg[GTK_STATE_NORMAL], icon32);
gdk_window_set_icon (main_window->window, NULL, gdkpixmap, mask);
- gtk_widget_show(GTK_WIDGET(main_window));
+ gtk_widget_show (GTK_WIDGET (main_window));
+
+ // get the splitter in the correct size, must be done after the widget has been realized
+ if ((pieces_floating == FALSE) && (pieces_visible == TRUE))
+ gtk_paned_set_position (GTK_PANED (pieces_parent), main_window->allocation.width -
+ pieces_width - GTK_PANED (pieces_parent)->gutter_size);
if (project->Initialize (argc, argv, app_path, lib_path) == false)
{
@@ -505,6 +751,9 @@ int main(int argc, char* argv[])
gtk_main();
+ gtk_widget_unref (drawing_frame);
+ gtk_widget_unref (pieces_frame);
+
// delete project;
_exit (0); // FIXME !
return 0;
diff --git a/linux/main.h b/linux/main.h
index 27b90ef..d1521ec 100644
--- a/linux/main.h
+++ b/linux/main.h
@@ -30,9 +30,11 @@ void OnCommandDirect(GtkWidget *w, gpointer data);
#define ID_VIEW_TOOLBAR_STANDARD 20
#define ID_VIEW_TOOLBAR_DRAWING 21
#define ID_VIEW_TOOLBAR_ANIMATION 22
-#define ID_VIEW_TOOLBAR_BOTH 23
-#define ID_VIEW_TOOLBAR_ICONS 24
-#define ID_VIEW_TOOLBAR_TEXT 25
+#define ID_VIEW_TOOLBAR_PIECES 23
+#define ID_VIEW_TOOLBAR_FLOATING 24
+#define ID_VIEW_TOOLBAR_BOTH 25
+#define ID_VIEW_TOOLBAR_ICONS 26
+#define ID_VIEW_TOOLBAR_TEXT 27
#define ID_CAMERA_FIRST 1001
#define ID_CAMERA_LAST 1255
diff --git a/linux/menu.cpp b/linux/menu.cpp
index 31a4171..786ec09 100644
--- a/linux/menu.cpp
+++ b/linux/menu.cpp
@@ -148,7 +148,11 @@ void create_main_menu (GtkObject *window, GtkWidget *vbox)
window, ID_VIEW_TOOLBAR_DRAWING, "menu_view_toolbar_drawing");
create_check_menu_item (menu_in_menu, "Ani_mation", menu_in_menu_accel, GTK_SIGNAL_FUNC (OnCommand),
window, ID_VIEW_TOOLBAR_ANIMATION, "menu_view_toolbar_animation");
+ create_check_menu_item (menu_in_menu, "_Pieces", menu_in_menu_accel, GTK_SIGNAL_FUNC (OnCommand),
+ window, ID_VIEW_TOOLBAR_PIECES, "menu_view_toolbar_pieces");
menu_separator (menu_in_menu);
+ create_check_menu_item (menu_in_menu, "_Floating Pieces", menu_in_menu_accel, GTK_SIGNAL_FUNC (OnCommand),
+ window, ID_VIEW_TOOLBAR_FLOATING, "menu_view_toolbar_floating");
item = create_radio_menu_item (menu_in_menu, NULL, "Icons _and Text", menu_in_menu_accel,
GTK_SIGNAL_FUNC (OnCommand), window,
ID_VIEW_TOOLBAR_BOTH, "menu_view_toolbar_both");
diff --git a/linux/toolbar.cpp b/linux/toolbar.cpp
index 20c58e2..e927795 100644
--- a/linux/toolbar.cpp
+++ b/linux/toolbar.cpp
@@ -629,23 +629,17 @@ void colorlist_set(int new_color)
}
}
-// Create what is the pieces toolbar in the Windows version as fixed items.
-void create_piecebar(GtkWidget *window, GtkWidget *hbox)
+// Create the pieces toolbar
+GtkWidget* create_piecebar (GtkWidget *window)
{
+ int attrlist[] = { GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 16, 0 };
gchar *titles[2] = { "Description", "Number" };
- int attrlist[] =
- {
- GLX_RGBA,
- GLX_DOUBLEBUFFER,
- GLX_DEPTH_SIZE, 16,
- 0
- };
- GtkWidget *vbox1, *vpan, *scroll_win;
+ GtkWidget *vbox1, *vpan, *scroll_win, *frame;
- GtkWidget* frame = gtk_frame_new (NULL);
+ frame = gtk_frame_new (NULL);
gtk_widget_show (frame);
- gtk_box_pack_end (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
vbox1 = gtk_vbox_new (FALSE, 0);
gtk_widget_show (vbox1);
@@ -766,6 +760,8 @@ void create_piecebar(GtkWidget *window, GtkWidget *hbox)
GTK_SIGNAL_FUNC(colorlist_key_press), NULL);
gtk_widget_show(colorlist);
+
+ return frame;
}
// =========================================================
diff --git a/linux/toolbar.h b/linux/toolbar.h
index 6e85363..dc3f03b 100644
--- a/linux/toolbar.h
+++ b/linux/toolbar.h
@@ -1,12 +1,12 @@
#ifndef _TOOLBAR_H_
#define _TOOLBAR_H_
-void create_toolbars(GtkWidget *window, GtkWidget *vbox);
-void create_piecebar(GtkWidget *window, GtkWidget *hbox);
-void create_statusbar(GtkWidget *window, GtkWidget *vbox);
-void colorlist_set(int new_color);
-void groupsbar_set(int new_group);
-void piececombo_add(char* string);
+void create_toolbars (GtkWidget *window, GtkWidget *vbox);
+GtkWidget* create_piecebar (GtkWidget *window);
+void create_statusbar (GtkWidget *window, GtkWidget *vbox);
+void colorlist_set (int new_color);
+void groupsbar_set (int new_group);
+void piececombo_add (char* string);
extern GtkWidget *label_message, *label_position, *label_snap, *label_step;