root / trunk / linux / main.cpp

Revision 725, 20.5 kB (checked in by leo, 6 months ago)

Linux compile fixes.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1// LeoCAD
2//
3// Linux specific initialization
4//
5
6#include <gdk/gdkkeysyms.h>
7#include <gtk/gtk.h>
8#include <gdk/gdkx.h>
9#include <stdlib.h>
10#include <stdio.h>
11#include <pwd.h>
12#include <unistd.h>
13#include <string.h>
14#include "opengl.h"
15#include "project.h"
16#include "toolbar.h"
17#include "globals.h"
18#include "main.h"
19#include "system.h"
20#include "config.h"
21#include "dialogs.h"
22#include "view.h"
23#include "lc_application.h"
24#include "library.h"
25#include "preview.h"
26
27View* view;
28
29void create_main_menu (GtkObject *window, GtkWidget *vbox);
30
31// Variables
32
33//GtkWidget *main_window;
34GtkWidget *drawing_area;
35
36static GtkWidget* main_hbox;
37static GtkWidget* drawing_frame;
38static GtkWidget* drawing_parent;
39static GtkWidget* pieces_frame;
40static GtkWidget* pieces_parent;
41static gboolean   pieces_floating;
42static gboolean   pieces_visible;
43static gint       pieces_width;
44
45static char app_path[PATH_MAX];
46static char lib_path[] = LC_INSTALL_PREFIX"/share/leocad/";
47bool ignore_commands = false;
48
49static void update_window_layout ();
50static gint main_quit (GtkWidget *widget, GdkEvent* event, gpointer data);
51
52// =============================================================================
53// Static functions
54
55// try to find the path of the executable
56static void init_paths (char *argv0)
57{
58  char temppath[PATH_MAX];
59  const char *home;
60
61  home = getenv ("HOME");
62  if (home == NULL)
63  {
64    uid_t id = getuid();
65    struct passwd *pwd;
66
67    setpwent();
68    while ((pwd = getpwent()) != NULL)
69      if (pwd->pw_uid == id)
70      {
71    home = pwd->pw_dir;
72    break;
73      }
74    endpwent();
75  }
76
77  if (home == NULL)
78    home = ".";
79
80  strcpy (temppath, argv0);
81  if (!strrchr(temppath, '/'))
82  {
83    char *path;
84    char *last;
85    int found;
86
87    found = 0;
88    path = getenv("PATH");
89    do
90    {
91      temppath[0] = '\0';
92
93      last = strchr(path, ':');
94      if (!last)
95    last = path + strlen (path);
96
97      if (*path == '~')
98      {
99    strcpy(temppath, home);
100    ++path;
101      }
102
103      if (last > (path+1))
104      {
105    strncat(temppath, path, (last-path));
106    strcat(temppath, "/");
107      }
108      strcat (temppath, "./");
109      strcat (temppath, argv0);
110
111      if (access(temppath, X_OK) == 0 )
112    ++found;
113      path = last+1;
114
115    } while (*last && !found);
116  }
117  else
118    argv0 = strrchr (argv0, '/') + 1;
119
120  if (realpath (temppath, app_path))
121    *(strrchr (app_path, '/') + 1) = '\0';
122}
123
124// Functions
125
126void OnCommandDirect(GtkWidget *w, gpointer data)
127{
128  if (ignore_commands)
129    return;
130
131  lcGetActiveProject()->HandleCommand((LC_COMMANDS)GPOINTER_TO_INT(data), 0);
132}
133
134static void view_destroy (GtkWidget *widget, gpointer data)
135{
136  delete (View*)data;
137}
138
139void OnCommand(GtkWidget* widget, gpointer data)
140{
141  Project* project = lcGetActiveProject();
142  int id = GPOINTER_TO_INT(data);
143
144  if (ignore_commands)
145    return;
146
147  if (id >= ID_FILE_RECENT1 && id <= ID_FILE_RECENT4)
148  {
149    project->HandleCommand(LC_FILE_RECENT, id - ID_FILE_RECENT1);
150    return;
151  }
152 
153  if (id >= ID_ACTION_SELECT && id <= ID_ACTION_ROLL)
154  {
155    project->SetAction(id - ID_ACTION_SELECT);
156    return;
157  }
158
159  if (id >= ID_VIEW_VIEWPORTS_01 && id <= ID_VIEW_VIEWPORTS_14)
160  {
161    project->HandleCommand(LC_VIEW_VIEWPORTS, id - ID_VIEW_VIEWPORTS_01);
162    return;
163  }
164
165  if (id >= ID_CAMERA_FIRST && id <= ID_CAMERA_LAST)
166  {
167    project->HandleCommand(LC_VIEW_CAMERA_MENU, id - ID_CAMERA_FIRST);
168    return;
169  }
170
171  switch (id)
172  {
173    case ID_FILE_EXIT:
174    {
175      main_quit (NULL, NULL, NULL);
176    } break;
177
178    case ID_SNAP_A:
179    {
180      project->HandleCommand(LC_TOOLBAR_SNAPMENU, 5);
181    } break;
182
183    case ID_VIEW_CREATE:
184    {
185      GtkWidget *wnd, *w, *frame;
186
187      wnd = gtk_window_new (GTK_WINDOW_TOPLEVEL);
188      //      gtk_window_set_transient_for (GTK_WINDOW (wnd), GTK_WINDOW (((GtkWidget*)(*main_window))));
189      gtk_window_set_title (GTK_WINDOW (wnd), "View");
190      //      gtk_window_set_default_size (GTK_WINDOW (pieces_parent), pieces_width, -1);
191
192      frame = gtk_frame_new (NULL);
193      gtk_widget_show (frame);
194      gtk_container_add (GTK_CONTAINER (wnd), frame);
195      gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);               
196
197      View *v = new View (project, view);
198      v->Create (&w);
199
200      gtk_container_add (GTK_CONTAINER (frame), w);
201      gtk_widget_show (w);
202
203      gtk_signal_connect (GTK_OBJECT (wnd), "destroy", GTK_SIGNAL_FUNC (view_destroy), v);
204      gtk_widget_show (wnd);
205    } break;
206
207    case ID_VIEW_TOOLBAR_STANDARD:
208    {
209      if (GTK_WIDGET_VISIBLE (main_toolbar.handle_box))
210    gtk_widget_hide (main_toolbar.handle_box);
211      else
212    gtk_widget_show (main_toolbar.handle_box);
213    } break;
214
215    case ID_VIEW_TOOLBAR_DRAWING:
216    {
217      if (GTK_WIDGET_VISIBLE (tool_toolbar.handle_box))
218    gtk_widget_hide (tool_toolbar.handle_box);
219      else
220    gtk_widget_show (tool_toolbar.handle_box);
221    } break;
222
223    case ID_VIEW_TOOLBAR_ANIMATION:
224    {
225      if (GTK_WIDGET_VISIBLE (anim_toolbar.handle_box))
226    gtk_widget_hide (anim_toolbar.handle_box);
227      else
228    gtk_widget_show (anim_toolbar.handle_box);
229    } break;
230
231    case ID_VIEW_TOOLBAR_MODIFY:
232    {
233      modifydlg_toggle ();
234    } break;
235
236    case ID_VIEW_TOOLBAR_PIECES:
237    {
238      gpointer widget = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_floating");
239
240      if (pieces_visible)
241      {
242    pieces_visible = FALSE;
243    gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
244      }
245      else
246      {
247    pieces_visible = TRUE;
248    gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE);
249      }
250      update_window_layout ();
251    } break;
252
253    case ID_VIEW_TOOLBAR_FLOATING:
254    {
255      if (pieces_floating)
256    pieces_floating = FALSE;
257      else
258    pieces_floating = TRUE;
259      update_window_layout ();
260    } break;
261
262    case ID_VIEW_TOOLBAR_BOTH:
263    {
264      gtk_toolbar_set_style (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_BOTH);
265      gtk_toolbar_set_style (GTK_TOOLBAR (tool_toolbar.toolbar), GTK_TOOLBAR_BOTH);
266      gtk_toolbar_set_style (GTK_TOOLBAR (anim_toolbar.toolbar), GTK_TOOLBAR_BOTH);
267      gtk_widget_set_usize (main_toolbar.handle_box, -1, -1);
268      gtk_widget_set_usize (tool_toolbar.handle_box, -1, -1);
269      gtk_widget_set_usize (anim_toolbar.handle_box, -1, -1);
270    } break;
271
272    case ID_VIEW_TOOLBAR_ICONS:
273    {
274      gtk_toolbar_set_style (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_ICONS);
275      gtk_toolbar_set_style (GTK_TOOLBAR (tool_toolbar.toolbar), GTK_TOOLBAR_ICONS);
276      gtk_toolbar_set_style (GTK_TOOLBAR (anim_toolbar.toolbar), GTK_TOOLBAR_ICONS);
277      gtk_widget_set_usize (main_toolbar.handle_box, -1, -1);
278      gtk_widget_set_usize (tool_toolbar.handle_box, -1, -1);
279      gtk_widget_set_usize (anim_toolbar.handle_box, -1, -1);
280    } break;
281
282    case ID_VIEW_TOOLBAR_TEXT:
283    {
284      gtk_toolbar_set_style (GTK_TOOLBAR (main_toolbar.toolbar), GTK_TOOLBAR_TEXT);
285      gtk_toolbar_set_style (GTK_TOOLBAR (tool_toolbar.toolbar), GTK_TOOLBAR_TEXT);
286      gtk_toolbar_set_style (GTK_TOOLBAR (anim_toolbar.toolbar), GTK_TOOLBAR_TEXT);
287      gtk_widget_set_usize (main_toolbar.handle_box, -1, -1);
288      gtk_widget_set_usize (tool_toolbar.handle_box, -1, -1);
289      gtk_widget_set_usize (anim_toolbar.handle_box, -1, -1);
290    } break;
291  }
292}
293
294static gint key_press_event(GtkWidget* widget, GdkEventKey* event, gpointer data)
295{
296  char code = 0;
297
298  if (event->keyval < 0x100)
299    code = gdk_keyval_to_upper(event->keyval);
300  else
301  {
302    switch (event->keyval)
303    {
304    case GDK_KP_0: code = '0'; break;
305    case GDK_KP_1: code = '1'; break;
306    case GDK_KP_2: code = '2'; break;
307    case GDK_KP_3: code = '3'; break;
308    case GDK_KP_4: code = '4'; break;
309    case GDK_KP_5: code = '5'; break;
310    case GDK_KP_6: code = '6'; break;
311    case GDK_KP_7: code = '7'; break;
312    case GDK_KP_8: code = '8'; break;
313    case GDK_KP_9: code = '9'; break;
314    case GDK_KP_Add: code = KEY_PLUS; break;
315    case GDK_KP_Subtract: code = KEY_MINUS; break;
316    case GDK_Shift_L: case GDK_Shift_R: code = KEY_SHIFT; break;
317    case GDK_Control_L: case GDK_Control_R: code = KEY_CONTROL; break;
318    case GDK_Escape: code = KEY_ESCAPE; break;
319    case GDK_Tab: code = KEY_TAB; break;
320    case GDK_Insert: case GDK_KP_Insert: code = KEY_INSERT; break;
321    case GDK_Delete: case GDK_KP_Delete: code = KEY_DELETE; break;
322    case GDK_Up: case GDK_KP_Up: code = KEY_UP; break;
323    case GDK_Down: case GDK_KP_Down: code = KEY_DOWN; break;
324    case GDK_Left: case GDK_KP_Left: code = KEY_LEFT; break;
325    case GDK_Right: case GDK_KP_Right: code = KEY_RIGHT; break;
326    case GDK_Prior: case GDK_KP_Prior: code = KEY_PRIOR; break;
327    case GDK_Nextcase GDK_KP_Next: code = KEY_NEXT; break;
328    }
329  }
330
331  if (code != 0)
332  {
333    if (lcGetActiveProject()->OnKeyDown(code, (event->state & GDK_CONTROL_MASK) != 0,
334               (event->state & GDK_SHIFT_MASK) != 0))
335    gtk_signal_emit_stop_by_name (GTK_OBJECT(widget), "key_press_event");
336  }
337
338  return TRUE;
339}
340
341static void main_destroy ()
342{
343  gpointer item;
344  int i = 0;
345
346  // Save window position/size
347  Sys_ProfileSaveInt ("Window", "Width", ((GtkWidget*)(*main_window))->allocation.width);
348  Sys_ProfileSaveInt ("Window", "Height", ((GtkWidget*)(*main_window))->allocation.height);
349
350  // Save toolbar state
351  Sys_ProfileSaveInt ("Toolbars", "Standard", ((GTK_WIDGET_VISIBLE (main_toolbar.handle_box)) ? 1 : 0));
352  Sys_ProfileSaveInt ("Toolbars", "Drawing", ((GTK_WIDGET_VISIBLE (tool_toolbar.handle_box)) ? 1 : 0));
353  Sys_ProfileSaveInt ("Toolbars", "Animation", ((GTK_WIDGET_VISIBLE (anim_toolbar.handle_box)) ? 1 : 0));
354  Sys_ProfileSaveInt ("Toolbars", "Pieces", (pieces_visible ? 1 : 0));
355  Sys_ProfileSaveInt ("Toolbars", "Floating", (pieces_floating ? 1 : 0));
356
357  if (pieces_parent != NULL)
358    Sys_ProfileSaveInt ("Toolbars", "PiecesWidth", pieces_frame->allocation.width);
359
360  item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_icons");
361  if (GTK_CHECK_MENU_ITEM (item)->active)
362    i = 0;
363  else
364  {
365    item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_both");
366    if (GTK_CHECK_MENU_ITEM (item)->active)
367      i = 1;
368    else
369    {
370      item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_text");
371      if (GTK_CHECK_MENU_ITEM (item)->active)
372    i = 2;
373    }
374  }
375  Sys_ProfileSaveInt ("Toolbars", "Style", i);
376
377  gtk_main_quit ();
378}
379
380static gint main_quit (GtkWidget *widget, GdkEvent* event, gpointer data)
381{
382  if (!lcGetActiveProject()->SaveModified())
383    return TRUE;
384
385  g_App->Shutdown();
386  delete g_App;
387
388  // save window position
389  gint x, y;
390  gdk_window_get_root_origin (((GtkWidget*)(*main_window))->window, &x, &y);
391  Sys_ProfileSaveInt ("Window", "PositionX", x);
392  Sys_ProfileSaveInt ("Window", "PositionY", y);
393
394  gtk_widget_destroy (((GtkWidget*)(*main_window)));
395
396  delete main_window;
397  main_window = NULL;
398
399  return FALSE;
400}
401
402static gint pieces_close (GtkWidget *widget, GdkEvent* event, gpointer data)
403{
404  gpointer item;
405
406  pieces_visible = FALSE;
407
408  item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_pieces");
409  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), FALSE);
410
411  item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_floating");
412  gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
413
414  update_window_layout ();
415
416  return FALSE;
417}
418
419// this function takes care of showing the pieces bar correctly
420static void update_window_layout ()
421{
422  // first thing we need to create the widgets
423  if (drawing_area == NULL)
424  {
425    view->Create (&drawing_area);
426
427    gtk_widget_set_events (GTK_WIDGET (drawing_area), GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK |
428               GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
429               GDK_POINTER_MOTION_HINT_MASK);
430
431    gtk_signal_connect (GTK_OBJECT (drawing_area), "key_press_event",
432            GTK_SIGNAL_FUNC (key_press_event), NULL);
433 
434    // set minimum size
435    gtk_widget_set_usize (GTK_WIDGET (drawing_area), 100, 100);
436
437    drawing_frame = gtk_frame_new (NULL);
438    gtk_widget_show (drawing_frame);
439    //    gtk_container_add (GTK_CONTAINER (hbox), drawing_frame);
440    gtk_frame_set_shadow_type (GTK_FRAME (drawing_frame), GTK_SHADOW_IN);               
441
442    gtk_container_add (GTK_CONTAINER (drawing_frame), GTK_WIDGET (drawing_area));
443    gtk_widget_show (GTK_WIDGET (drawing_area));
444
445    // now create the pieces bar
446    pieces_frame = create_piecebar (((GtkWidget*)(*main_window)), view);
447  }
448  else
449  {
450    // if the widgets already exist, remove their parents
451    if (pieces_parent)
452      pieces_width = pieces_frame->allocation.width;
453
454    gtk_container_remove (GTK_CONTAINER (drawing_parent), drawing_frame);
455    if (pieces_parent != NULL)
456      gtk_container_remove (GTK_CONTAINER (pieces_parent), pieces_frame);
457
458    if (drawing_parent != main_hbox)
459      gtk_widget_destroy (drawing_parent);
460    else if (pieces_parent != NULL)
461      gtk_widget_destroy (pieces_parent);
462
463    pieces_parent = NULL;
464    drawing_parent = NULL;
465  }
466
467  // now add the widgets to their new parents
468  if (pieces_floating)
469  {
470    gtk_box_pack_start (GTK_BOX (main_hbox), drawing_frame, TRUE, TRUE, 0);
471    drawing_parent = main_hbox;
472
473    if (pieces_visible)
474    {
475      pieces_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
476      gtk_window_set_transient_for (GTK_WINDOW (pieces_parent), GTK_WINDOW (((GtkWidget*)(*main_window))));
477      gtk_signal_connect (GTK_OBJECT (pieces_parent), "delete_event",
478              GTK_SIGNAL_FUNC (pieces_close), NULL);
479      gtk_signal_connect (GTK_OBJECT (pieces_parent), "destroy",
480              GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
481      gtk_window_set_title (GTK_WINDOW (pieces_parent), "Pieces");
482      gtk_window_set_default_size (GTK_WINDOW (pieces_parent), pieces_width, -1);
483
484      gtk_container_add (GTK_CONTAINER (pieces_parent), pieces_frame);
485
486      gtk_widget_show (pieces_parent);
487    }
488  }
489  else
490  {
491    if (pieces_visible)
492    {
493      pieces_parent = drawing_parent = gtk_hpaned_new ();
494      gtk_paned_pack1 (GTK_PANED (drawing_parent), drawing_frame, TRUE, TRUE);
495      gtk_paned_pack2 (GTK_PANED (pieces_parent), pieces_frame, FALSE, FALSE);
496      gtk_widget_show (pieces_parent);
497      gtk_box_pack_start (GTK_BOX (main_hbox), pieces_parent, TRUE, TRUE, 0);
498
499      if (pieces_floating == FALSE)
500    gtk_paned_set_position (GTK_PANED (pieces_parent), ((GtkWidget*)(*main_window))->allocation.width -
501                pieces_width);
502    }
503    else
504    {
505      gtk_box_pack_start (GTK_BOX (main_hbox), drawing_frame, TRUE, TRUE, 0);
506      drawing_parent = main_hbox;
507    }
508  }
509}
510
511int main (int argc, char* argv[])
512{
513  GtkWidget *vbox;
514  int x, y;
515
516  init_paths (argv[0]);
517
518  gtk_set_locale ();
519  gtk_init (&argc, &argv);
520
521  atexit (GL_Shutdown);
522
523  // Initialize the application.
524  g_App = new lcApplication();
525  main_window = new MainWnd();
526
527  if (!g_App->Initialize(argc, argv, lib_path))
528    return 1;
529
530  if (pfnglXQueryExtension (GDK_DISPLAY (), NULL, NULL) != True)
531  {
532    g_print("ERROR: OpenGL not supported\n");
533    return 1;
534  }
535
536  view = new View (lcGetActiveProject(), NULL);
537
538  //  main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
539  gtk_window_set_title (GTK_WINDOW (((GtkWidget*)(*main_window))), "LeoCAD");
540  gtk_container_border_width (GTK_CONTAINER (((GtkWidget*)(*main_window))), 0);
541  gtk_widget_realize (((GtkWidget*)(*main_window)));
542
543  // Read window position and size
544  x = Sys_ProfileLoadInt ("Window", "Width", 600);
545  y = Sys_ProfileLoadInt ("Window", "Height", 400);
546  gtk_window_set_default_size (GTK_WINDOW (((GtkWidget*)(*main_window))), x, y);
547
548  x = Sys_ProfileLoadInt ("Window", "PositionX", -1);
549  y = Sys_ProfileLoadInt ("Window", "PositionY", -1);
550  if ((x != -1 && y != -1) &&
551      (x < gdk_screen_width () && y < gdk_screen_height ()))
552    gtk_widget_set_uposition (((GtkWidget*)(*main_window)), x, y);
553
554  gtk_signal_connect (GTK_OBJECT (((GtkWidget*)(*main_window))), "delete_event", (GtkSignalFunc) main_quit, NULL);
555  gtk_signal_connect (GTK_OBJECT (((GtkWidget*)(*main_window))), "destroy", (GtkSignalFunc) main_destroy, NULL);
556
557  vbox = gtk_vbox_new (FALSE, 0);
558  gtk_container_add (GTK_CONTAINER (((GtkWidget*)(*main_window))), vbox);
559  gtk_widget_show (vbox);
560
561//  startup_message ("Creating Main Menu ...");
562  create_main_menu (GTK_OBJECT (((GtkWidget*)(*main_window))), vbox);
563
564//  startup_message ("Creating Toolbars ...");
565  create_toolbars (((GtkWidget*)(*main_window)), vbox);
566
567  main_hbox = gtk_hbox_new (FALSE, 0);
568  gtk_container_add (GTK_CONTAINER (vbox), main_hbox);
569  gtk_widget_show (main_hbox);
570
571  // load toolbar preferences and update the menu
572  int show;
573  ignore_commands = true;
574
575  show = Sys_ProfileLoadInt ("Toolbars", "Standard", 1);
576  if (show)
577  {
578    gpointer widget = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_standard");
579    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
580  }
581  else
582    gtk_widget_hide (main_toolbar.handle_box);
583
584  show = Sys_ProfileLoadInt ("Toolbars", "Drawing", 1);
585  if (show)
586  {
587    gpointer widget = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_drawing");
588    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
589  }
590  else
591    gtk_widget_hide (tool_toolbar.handle_box);
592
593  show = Sys_ProfileLoadInt ("Toolbars", "Animation", 1);
594  if (show)
595  {
596    gpointer widget = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_animation");
597    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
598  }
599  else
600    gtk_widget_hide (anim_toolbar.handle_box);
601
602  show = Sys_ProfileLoadInt ("Toolbars", "Pieces", 1);
603  if (show)
604  {
605    gpointer widget = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_pieces");
606    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
607    pieces_visible = TRUE;
608  }
609  else
610  {
611    gpointer widget = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_floating");
612    gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
613  }
614
615  show = Sys_ProfileLoadInt ("Toolbars", "PiecesFloating", 0);
616  if (show)
617  {
618    gpointer widget = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_floating");
619    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
620    pieces_floating = TRUE;
621  }
622
623  ignore_commands = false;
624
625  show = Sys_ProfileLoadInt ("Toolbars", "Style", 0);
626  gpointer item = NULL;
627
628  switch (show)
629  {
630  case 0:
631    item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_icons");
632    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
633    OnCommand (GTK_WIDGET (item), GINT_TO_POINTER (ID_VIEW_TOOLBAR_ICONS));
634    break;
635  case 1:
636    item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_both");
637    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
638    OnCommand (GTK_WIDGET (item), GINT_TO_POINTER (ID_VIEW_TOOLBAR_BOTH));
639    break;
640  case 2:
641    item = gtk_object_get_data (GTK_OBJECT (((GtkWidget*)(*main_window))), "menu_view_toolbar_text");
642    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE);
643    OnCommand (GTK_WIDGET (item), GINT_TO_POINTER (ID_VIEW_TOOLBAR_TEXT));
644    break;
645  }
646
647  pieces_width = Sys_ProfileLoadInt ("Toolbars", "PiecesWidth", 210);
648  update_window_layout ();
649
650  // increase the reference count to allow changing parents when hiding the pieces bar
651  gtk_widget_ref (drawing_frame);
652  gtk_widget_ref (pieces_frame);
653
654  create_statusbar (((GtkWidget*)(*main_window)), vbox);
655//  gtk_box_pack_start (GTK_BOX (vbox), create_status_bar (), FALSE, TRUE, 2);
656  //  GtkWidget* statusbar = gtk_statusbar_new ();
657  //gtk_widget_show (statusbar);
658  //gtk_box_pack_start (GTK_BOX (vbox), statusbar, FALSE, TRUE, 0);   
659
660#include "pixmaps/icon32.xpm"
661
662  main_window->UpdateMRU ();
663
664  GdkPixmap *gdkpixmap;
665  GdkBitmap *mask;
666
667  gdkpixmap = gdk_pixmap_create_from_xpm_d (((GtkWidget*)(*main_window))->window, &mask,
668                 &((GtkWidget*)(*main_window))->style->bg[GTK_STATE_NORMAL], (gchar**)icon32);
669  gdk_window_set_icon (((GtkWidget*)(*main_window))->window, NULL, gdkpixmap, mask);
670
671  gtk_widget_show (GTK_WIDGET (((GtkWidget*)(*main_window))));
672
673  // get the splitter in the correct size, must be done after the widget has been realized
674  if ((pieces_floating == FALSE) && (pieces_visible == TRUE))
675    gtk_paned_set_position (GTK_PANED (pieces_parent), ((GtkWidget*)(*main_window))->allocation.width -
676                pieces_width);
677
678
679  PieceInfo* Info = lcGetPiecesLibrary()->FindPieceInfo("3005");
680  if (!Info)
681    Info = lcGetPiecesLibrary()->GetPieceInfo(0);
682  if (Info)
683    g_App->m_PiecePreview->SetSelection(Info);
684
685  lcGetActiveProject()->SetActiveView(view);
686
687  gtk_main();
688
689  gtk_widget_unref (drawing_frame);
690  gtk_widget_unref (pieces_frame);
691
692  //  delete project;
693  _exit (0); // FIXME !
694  return 0;
695}
Note: See TracBrowser for help on using the browser.