summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo2006-03-13 06:26:07 +0000
committerleo2006-03-13 06:26:07 +0000
commited36b8b0ea6bd5e66d8c28fba20954b28633d670 (patch)
tree82fc554b89fee090f0ed2a31d907c17946c2faa1
parentfa77db06cc90dee5d58c9fe51ea580987449060a (diff)
Fixes to get the Linux version working again.
git-svn-id: http://svn.leocad.org/trunk@522 c7d43263-9d01-0410-8a33-9dba5d9f93d6
-rw-r--r--linux/main.cpp69
-rw-r--r--linux/system.cpp50
-rw-r--r--linux/toolbar.cpp19
-rw-r--r--linux/toolbar.h1
4 files changed, 61 insertions, 78 deletions
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;