From ed36b8b0ea6bd5e66d8c28fba20954b28633d670 Mon Sep 17 00:00:00 2001 From: leo Date: Mon, 13 Mar 2006 06:26:07 +0000 Subject: Fixes to get the Linux version working again. git-svn-id: http://svn.leocad.org/trunk@522 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- linux/main.cpp | 69 ++++++++++++------------------------------------------- linux/system.cpp | 50 ++++++++++++++++++++++++++++++---------- linux/toolbar.cpp | 19 +++++++-------- linux/toolbar.h | 1 - 4 files changed, 61 insertions(+), 78 deletions(-) (limited to 'linux') diff --git a/linux/main.cpp b/linux/main.cpp index 4330771..1c08c5a 100644 --- a/linux/main.cpp +++ b/linux/main.cpp @@ -20,6 +20,7 @@ #include "config.h" #include "dialogs.h" #include "view.h" +#include "lc_application.h" View* view; @@ -125,7 +126,7 @@ void OnCommandDirect(GtkWidget *w, gpointer data) if (ignore_commands) return; - project->HandleCommand((LC_COMMANDS)(int)data, 0); + lcGetActiveProject()->HandleCommand((LC_COMMANDS)(int)data, 0); } static void view_destroy (GtkWidget *widget, gpointer data) @@ -135,6 +136,7 @@ static void view_destroy (GtkWidget *widget, gpointer data) void OnCommand(GtkWidget* widget, gpointer data) { + Project* project = lcGetActiveProject(); int id = (int)data; if (ignore_commands) @@ -326,7 +328,7 @@ static gint key_press_event(GtkWidget* widget, GdkEventKey* event, gpointer data if (code != 0) { - if (project->OnKeyDown(code, (event->state & GDK_CONTROL_MASK) != 0, + if (lcGetActiveProject()->OnKeyDown(code, (event->state & GDK_CONTROL_MASK) != 0, (event->state & GDK_SHIFT_MASK) != 0)) gtk_signal_emit_stop_by_name (GTK_OBJECT(widget), "key_press_event"); } @@ -375,11 +377,11 @@ static void main_destroy () static gint main_quit (GtkWidget *widget, GdkEvent* event, gpointer data) { - if (!project->SaveModified()) + if (!lcGetActiveProject()->SaveModified()) return TRUE; - delete project; - project = NULL; + g_App->Shutdown(); + delete g_App; // save window position gint x, y; @@ -506,42 +508,8 @@ static void update_window_layout () int main (int argc, char* argv[]) { - char* libgl = NULL; GtkWidget *vbox; - int i, j, k, x, y; - - // Parse and remove Linux arguments - for (i = 1; i < argc; i++) - { - char* param = argv[i]; - - if (param[0] == '-' && param[1] == '-') - { - param += 2; - - if ((strcmp (param, "libgl") == 0) && (i != argc)) - { - libgl = argv[i+1]; - argv[i] = argv[i+1] = NULL; - i++; - } - } - } - - for (i = 1; i < argc; i++) - { - for (k = i; k < argc; k++) - if (argv[k] != NULL) - break; - - if (k > i) - { - k -= i; - for (j = i + k; j < argc; j++) - argv[j-k] = argv[j]; - argc -= k; - } - } + int x, y; init_paths (argv[0]); @@ -549,8 +517,12 @@ int main (int argc, char* argv[]) gtk_init (&argc, &argv); atexit (GL_Shutdown); - // Check if OpenGL is supported. - if (!GL_Initialize (libgl)) + + // Initialize the application. + g_App = new lcApplication(); + main_window = new MainWnd(); + + if (!g_App->Initialize(argc, argv, lib_path)) return 1; if (pfnglXQueryExtension (GDK_DISPLAY (), NULL, NULL) != True) @@ -559,10 +531,7 @@ int main (int argc, char* argv[]) return 1; } -// startup_message ("Loading user preferences ..."); - main_window = new MainWnd (); - project = new Project (); - view = new View (project, NULL); + view = new View (lcGetActiveProject(), NULL); // main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (((GtkWidget*)(*main_window))), "LeoCAD"); @@ -704,14 +673,6 @@ int main (int argc, char* argv[]) gtk_paned_set_position (GTK_PANED (pieces_parent), ((GtkWidget*)(*main_window))->allocation.width - pieces_width); - if (project->Initialize (argc, argv, app_path, lib_path) == false) - { - delete project; - delete main_window; - // return 1; - _exit (1); - } - gtk_main(); gtk_widget_unref (drawing_frame); diff --git a/linux/system.cpp b/linux/system.cpp index 50fd357..cdf9921 100644 --- a/linux/system.cpp +++ b/linux/system.cpp @@ -167,6 +167,9 @@ void SystemUpdateViewport(int new_vp, int old_vp) sprintf (buf, "menu_view_viewports_%02d", new_vp+1); gpointer item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), buf); + if (!item) + return; + ignore_commands = true; gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (item), TRUE); ignore_commands = false; @@ -233,6 +236,9 @@ void SystemUpdateAction(int new_action, int old_action) #include "pixmaps/cr_zoom.xpm" #include "pixmaps/cr_zoomr.xpm" + if (!drawing_area) + return; + GtkWidget* button; char** xpm = NULL; int x, y; @@ -309,18 +315,10 @@ void SystemUpdateColorList(int new_color) void SystemUpdateRenderingMode(bool bBackground, bool bFast) { - ignore_commands = true; - if (bFast) - { - gtk_widget_set_sensitive (main_toolbar.bg, TRUE); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(main_toolbar.bg), bBackground); - } - else - { - gtk_widget_set_sensitive (main_toolbar.bg, FALSE); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(main_toolbar.bg), FALSE); - } + if (!main_toolbar.fast) + return; + ignore_commands = true; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(main_toolbar.fast), bFast); ignore_commands = false; } @@ -334,6 +332,10 @@ void SystemUpdateUndoRedo(char* undo, char* redo) if (undo) strcat(text, undo); item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_edit_undo"); + + if (!item) + return; + gtk_label_set_text (GTK_LABEL (GTK_BIN (item)->child), text); gtk_widget_set_sensitive (GTK_WIDGET (item), undo != NULL); @@ -350,6 +352,9 @@ void SystemUpdateUndoRedo(char* undo, char* redo) void SystemUpdateSnap(const unsigned long snap) { + if (!main_toolbar.angle) + return; + ignore_commands = true; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(main_toolbar.angle), (snap & LC_DRAW_SNAP_A) != 0); ignore_commands = false; @@ -359,7 +364,12 @@ void SystemUpdateSnap(const unsigned long snap) void SystemUpdateCurrentCamera(Camera* pOld, Camera* pNew, Camera* pCamera) { - gpointer item = NULL, menu = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "cameras_menu"); + gpointer item = NULL; + gpointer menu = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "cameras_menu"); + + if (!menu) + return; + GList *lst = gtk_container_children (GTK_CONTAINER (menu)); for (int i = 0; pCamera; i++, pCamera = pCamera->m_pNext) @@ -395,6 +405,9 @@ void SystemUpdateCameraMenu(Camera* pCamera) GList *lst; int i; + if (!menu) + return; + // empty the menu while ((lst = gtk_container_children (GTK_CONTAINER (menu))) != NULL) gtk_container_remove (GTK_CONTAINER (menu), GTK_WIDGET (lst->data)); @@ -430,6 +443,9 @@ void SystemUpdateTime(bool bAnimation, int nTime, int nTotal) { GtkWidget *item; + if (!anim_toolbar.first) + return; + gtk_widget_set_sensitive (anim_toolbar.first, nTime != 1); gtk_widget_set_sensitive (anim_toolbar.prev, nTime > 1); gtk_widget_set_sensitive (anim_toolbar.next, nTime < nTotal); @@ -455,6 +471,9 @@ void SystemUpdateTime(bool bAnimation, int nTime, int nTotal) void SystemUpdateAnimation(bool bAnimation, bool bAddKeys) { + if (!anim_toolbar.play) + return; + ignore_commands = true; gtk_widget_set_sensitive (anim_toolbar.play, bAnimation); gtk_widget_set_sensitive (anim_toolbar.stop, FALSE); @@ -468,6 +487,9 @@ void SystemUpdateAnimation(bool bAnimation, bool bAddKeys) void SystemUpdateSnap(unsigned short move_snap, unsigned short RotateSnap) { + if (!label_snap) + return; + char text[11]; if (move_snap) sprintf (text, "Move x%i", move_snap); @@ -483,6 +505,10 @@ void SystemUpdateSelected(unsigned long flags, int SelectedCount, Object* Focus) // select all/none/invert/by name (menu) item = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_edit_select_all")); + + if (!item) + return; + 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); diff --git a/linux/toolbar.cpp b/linux/toolbar.cpp index 3152fef..382cb34 100644 --- a/linux/toolbar.cpp +++ b/linux/toolbar.cpp @@ -14,6 +14,7 @@ #include "message.h" #include "preview.h" #include "library.h" +#include "lc_application.h" // ============================================================================= // Variables @@ -62,7 +63,6 @@ void create_toolbars(GtkWidget *window, GtkWidget *vbox) #include "pixmaps/st-fast.xpm" #include "pixmaps/st-paste.xpm" #include "pixmaps/st-save.xpm" -#include "pixmaps/st-bg.xpm" #include "pixmaps/st-help.xpm" #include "pixmaps/st-prev.xpm" #include "pixmaps/st-snap.xpm" @@ -132,9 +132,6 @@ void create_toolbars(GtkWidget *window, GtkWidget *vbox) main_toolbar.fast = gtk_toolbar_append_element (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, "Fast", "Fast rendering", "", new_pixmap (window, st_fast), GTK_SIGNAL_FUNC (OnCommandDirect), (void*)LC_TOOLBAR_FASTRENDER); - main_toolbar.bg = gtk_toolbar_append_element (GTK_TOOLBAR (main_toolbar.toolbar), - GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, "Backgnd", "Backgroung rendering", "", - new_pixmap (window, st_bg), GTK_SIGNAL_FUNC (OnCommandDirect), (void*)LC_TOOLBAR_BACKGROUND); gtk_toolbar_append_item (GTK_TOOLBAR (main_toolbar.toolbar), "About", "About LeoCAD", "", new_pixmap (window, st_about), GTK_SIGNAL_FUNC (OnCommandDirect), (void*)LC_HELP_ABOUT); gtk_toolbar_append_item (GTK_TOOLBAR (main_toolbar.toolbar), "Help", "Help", "", @@ -283,7 +280,7 @@ static void piecelist_setsort (GtkCList* clist, gint column) static void fill_piecelist(int group) { - PiecesLibrary *pLib = project->GetPiecesLibrary (); + PiecesLibrary *pLib = lcGetPiecesLibrary(); gtk_clist_freeze(GTK_CLIST(piecelist)); gtk_clist_clear(GTK_CLIST(piecelist)); @@ -399,7 +396,7 @@ void piececombo_add (const char* str) static void piececombo_changed (GtkWidget *widget, gpointer data) { - PiecesLibrary *pLib = project->GetPiecesLibrary (); + PiecesLibrary *pLib = lcGetPiecesLibrary(); const gchar* str; int i; @@ -571,7 +568,7 @@ static gint colorlist_key_press(GtkWidget* widget, GdkEventKey* event, gpointer { cur_color = x; colorlist_draw_pixmap(widget); - project->HandleNotify(LC_COLOR_CHANGED, x); + lcGetActiveProject()->HandleNotify(LC_COLOR_CHANGED, x); gtk_widget_draw(widget, NULL); preview->Redraw (); } @@ -592,7 +589,7 @@ static gint colorlist_button_press(GtkWidget *widget, GdkEventButton *event) { cur_color = x; colorlist_draw_pixmap(widget); - project->HandleNotify(LC_COLOR_CHANGED, x); + lcGetActiveProject()->HandleNotify(LC_COLOR_CHANGED, x); gtk_widget_draw(widget, NULL); preview->Redraw (); } @@ -768,10 +765,10 @@ static void statusbar_listener (int message, void *data, void *user) if (message == LC_MSG_FOCUS_CHANGED) { char text[32]; - Point3 pos; + Vector3 pos; - project->GetFocusPosition(pos); - project->ConvertToUserUnits(pos); + lcGetActiveProject()->GetFocusPosition(pos); + lcGetActiveProject()->ConvertToUserUnits(pos); sprintf (text, "X: %.2f Y: %.2f Z: %.2f", pos[0], pos[1], pos[2]); gtk_label_set (GTK_LABEL (label_position), text); diff --git a/linux/toolbar.h b/linux/toolbar.h index e8a9d4c..3fa1663 100644 --- a/linux/toolbar.h +++ b/linux/toolbar.h @@ -25,7 +25,6 @@ typedef struct GtkWidget* snap; GtkWidget* angle; GtkWidget* fast; - GtkWidget* bg; } MAIN_TOOLBAR; -- cgit v1.2.3