|
From: <kr_...@us...> - 2003-03-03 19:03:30
|
Update of /cvsroot/htoolkit/port/src/cbits/GTK
In directory sc8-pr-cvs1:/tmp/cvs-serv29829/src/cbits/GTK
Modified Files:
Util.c Window.c
Added Files:
Frame.c
Log Message:
MDI for GTK
--- NEW FILE: Frame.c ---
#include "Types.h"
#include "Internals.h"
#include "Handlers_stub.h"
GtkWidget *gMDIFrameWidget;
GtkWidget *gMDINotebookWidget;
static void frame_close_page_handler(GtkWidget *client)
{
GtkWidget *window = gtk_notebook_get_nth_page(GTK_NOTEBOOK(client), gtk_notebook_get_current_page(GTK_NOTEBOOK(client)));
handleWindowDismiss(window);
}
static void frame_notebook_top_handler(GtkWidget *client)
{
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_TOP);
}
static void frame_notebook_bottom_handler(GtkWidget *client)
{
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_BOTTOM);
}
static void frame_notebook_left_handler(GtkWidget *client)
{
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_LEFT);
}
static void frame_notebook_right_handler(GtkWidget *client)
{
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(client), GTK_POS_RIGHT);
}
static void frame_switch_page_handler(GtkNotebook *notebook,GtkNotebookPage *page,gint page_num,gpointer user_data)
{
// send deactivate message for old
gint old_page_num = g_list_index(notebook->children, notebook->cur_page);
handleWindowDeactivate(gtk_notebook_get_nth_page(notebook, old_page_num));
// send activate message for new
handleWindowActivate(gtk_notebook_get_nth_page(notebook, page_num));
gActiveTopLevelWindow = gtk_widget_get_parent(gtk_widget_get_parent(GTK_WIDGET(notebook)));
}
static gboolean frame_delete_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
handleDismissProcess();
return gtk_true();
}
static gboolean frame_configure_event_handler (GtkWindow *window, GdkEventConfigure *event, gpointer user_data)
{
int i, nCount;
nCount = gtk_notebook_get_n_pages(GTK_NOTEBOOK(gMDINotebookWidget));
for (i = 0; i < nCount; i++)
{
GtkWidget *widget = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gMDINotebookWidget), i);
handleWindowResize(widget,widget->allocation.width,widget->allocation.height);
handleWindowReLayout(widget);
}
return gtk_false();
};
gboolean window_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data);
gboolean window_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data);
gboolean frame_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
GtkWidget *window = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gMDINotebookWidget), gtk_notebook_get_current_page(GTK_NOTEBOOK(gMDINotebookWidget)));
return window_key_press_handler(window, event, user_data);
}
gboolean frame_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
GtkWidget *window = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gMDINotebookWidget), gtk_notebook_get_current_page(GTK_NOTEBOOK(gMDINotebookWidget)));
return window_key_release_handler(window, event, user_data);
}
void createMDIFrame()
{
GtkWidget *menuBar, *box;
GtkWidget *notebook_menu, *menu_item, *pages_menu;
GtkAccelGroup *accel_group;
GSList *group;
/* Create the window. */
gMDIFrameWidget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(gMDIFrameWidget), gAppName);
gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "delete-event",
GTK_SIGNAL_FUNC(frame_delete_handler),
NULL);
gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "configure-event",
GTK_SIGNAL_FUNC(frame_configure_event_handler),
NULL);
gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "key-press-event",
GTK_SIGNAL_FUNC(frame_key_press_handler),
NULL);
gtk_signal_connect (GTK_OBJECT(gMDIFrameWidget), "key-release-event",
GTK_SIGNAL_FUNC(frame_key_release_handler),
NULL);
box = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(gMDIFrameWidget), box);
/* Create the menubar. */
menuBar = gtk_menu_bar_new();
gtk_box_pack_start(GTK_BOX(box), menuBar, FALSE, FALSE, 0);
/* Create client(notebook) */
gMDINotebookWidget = gtk_notebook_new();
gtk_notebook_set_scrollable(GTK_NOTEBOOK(gMDINotebookWidget), gtk_true());
gtk_notebook_popup_enable(GTK_NOTEBOOK(gMDINotebookWidget));
gtk_signal_connect (GTK_OBJECT(gMDINotebookWidget), "switch-page",
GTK_SIGNAL_FUNC(frame_switch_page_handler),
NULL);
gtk_box_pack_end(GTK_BOX(box), gMDINotebookWidget, TRUE, TRUE, 0);
gtk_window_maximize(GTK_WINDOW(gMDIFrameWidget));
gtk_widget_show_all(gMDIFrameWidget);
/* Create "Pages" menu */
pages_menu = gtk_menu_new();
// gtk_menu_set_accel_group(GTK_MENU(pages_menu), accel_group);
menu_item = gtk_menu_item_new_with_label("Pages");
gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), pages_menu);
gtk_widget_show_all(menu_item);
gtk_menu_bar_insert(GTK_MENU_BAR(menuBar), menu_item, 0);
notebook_menu = gtk_menu_new();
//gtk_menu_set_accel_group(GTK_MENU(notebook_menu), accel_group);
menu_item = gtk_radio_menu_item_new_with_label(NULL, "Top");
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), gtk_true());
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item));
gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate",
GTK_SIGNAL_FUNC (frame_notebook_top_handler), gMDINotebookWidget);
gtk_menu_append(GTK_MENU(notebook_menu), menu_item);
menu_item = gtk_radio_menu_item_new_with_label(group, "Bottom");
group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menu_item));
gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate",
GTK_SIGNAL_FUNC (frame_notebook_bottom_handler), gMDINotebookWidget);
gtk_menu_append(GTK_MENU(notebook_menu), menu_item);
menu_item = gtk_radio_menu_item_new_with_label(group, "Left");
group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menu_item));
gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate",
GTK_SIGNAL_FUNC (frame_notebook_left_handler), gMDINotebookWidget);
gtk_menu_append(GTK_MENU(notebook_menu), menu_item);
menu_item = gtk_radio_menu_item_new_with_label(group, "Right");
group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menu_item));
gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate",
GTK_SIGNAL_FUNC (frame_notebook_right_handler), gMDINotebookWidget);
gtk_menu_append(GTK_MENU(notebook_menu), menu_item);
menu_item = gtk_menu_item_new_with_label("Notebook");
gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), notebook_menu);
gtk_menu_append(GTK_MENU(pages_menu), menu_item);
menu_item = gtk_menu_item_new();
gtk_menu_append(GTK_MENU(pages_menu), menu_item);
menu_item = gtk_menu_item_new_with_label("Close page");
gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate",
GTK_SIGNAL_FUNC (frame_close_page_handler), gMDINotebookWidget);
gtk_menu_append(GTK_MENU(pages_menu), menu_item);
gtk_widget_show_all(pages_menu);
}
Index: Util.c
===================================================================
RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Util.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** Util.c 3 Mar 2003 00:21:50 -0000 1.4
--- Util.c 3 Mar 2003 19:03:24 -0000 1.5
***************
*** 44,47 ****
--- 44,53 ----
gAppName = strdup(AppName);
gDocumentInterface = DocumentInterface;
+
+ if (gDocumentInterface == 2)
+ {
+ createMDIFrame();
+ gActiveObjects++;
+ }
}
};
***************
*** 71,74 ****
--- 77,83 ----
void osQuit()
{
+ gtk_widget_destroy(gMDIFrameWidget);
+ gActiveObjects--;
+
if (gActiveObjects > 0)
{
***************
*** 129,133 ****
GtkBin *GetSW(GtkWidget *window)
{
! GList *children = gtk_container_get_children(GTK_CONTAINER(GTK_BIN(window)->child));
while (children)
--- 138,146 ----
GtkBin *GetSW(GtkWidget *window)
{
! GList *children;
! GtkWidget *vbox;
!
! vbox = (gDocumentInterface == 2) ? window : GTK_BIN(window)->child;
! children = gtk_container_get_children(GTK_CONTAINER(vbox));
while (children)
Index: Window.c
===================================================================
RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Window.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** Window.c 3 Mar 2003 13:33:15 -0000 1.7
--- Window.c 3 Mar 2003 19:03:24 -0000 1.8
***************
*** 268,272 ****
/* DAAN: handle destroy event */
! static void frame_destroy_handler(GtkWidget *widget, gpointer user_data)
{
handleWindowDestroy(widget);
--- 268,272 ----
/* DAAN: handle destroy event */
! static void window_destroy_handler(GtkWidget *widget, gpointer user_data)
{
handleWindowDestroy(widget);
***************
*** 274,278 ****
}
! static gboolean frame_delete_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
handleWindowDismiss(widget);
--- 274,278 ----
}
! static gboolean window_delete_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
handleWindowDismiss(widget);
***************
*** 283,287 ****
static int gCurChar = 0;
! static gboolean window_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
int c;
--- 283,287 ----
static int gCurChar = 0;
! gboolean window_key_press_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
int c;
***************
*** 324,328 ****
};
! static gboolean window_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
if (gInKey)
--- 324,328 ----
};
! gboolean window_key_release_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
if (gInKey)
***************
*** 339,343 ****
}
- handleWindowDeactivate(widget);
return gtk_false();
};
--- 339,342 ----
***************
*** 371,383 ****
GtkWidget *window, *vbox, *fixed, *sw, *viewport;
- /* Create a toplevel */
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), gAppName);
-
/* Create a VBox */
vbox = gtk_vbox_new(gtk_false(), 0);
- gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
/* Create a Scrolled Window */
sw = gtk_scrolled_window_new (NULL, NULL);
--- 370,416 ----
GtkWidget *window, *vbox, *fixed, *sw, *viewport;
/* Create a VBox */
vbox = gtk_vbox_new(gtk_false(), 0);
gtk_widget_show(vbox);
+ if (gDocumentInterface == 2)
+ {
+ window = vbox;
+ gtk_notebook_append_page(GTK_NOTEBOOK(gMDINotebookWidget),vbox,gtk_label_new(gAppName));
+
+ gtk_signal_connect (GTK_OBJECT(vbox), "destroy",
+ GTK_SIGNAL_FUNC(window_destroy_handler),
+ NULL);
+ }
+ else
+ {
+ /* Create a toplevel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), gAppName);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ gtk_signal_connect (GTK_OBJECT(window), "destroy",
+ GTK_SIGNAL_FUNC(window_destroy_handler),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "focus-in-event",
+ GTK_SIGNAL_FUNC(window_focus_in_handler),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "focus-out-event",
+ GTK_SIGNAL_FUNC(window_focus_out_handler),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT (window), "delete-event",
+ GTK_SIGNAL_FUNC(window_delete_handler),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "configure-event",
+ GTK_SIGNAL_FUNC(window_configure_event_handler),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "key-press-event",
+ GTK_SIGNAL_FUNC(window_key_press_handler),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "key-release-event",
+ GTK_SIGNAL_FUNC(window_key_release_handler),
+ NULL);
+ }
+
/* Create a Scrolled Window */
sw = gtk_scrolled_window_new (NULL, NULL);
***************
*** 397,412 ****
/* Signals */
- gtk_signal_connect (GTK_OBJECT(window), "destroy",
- GTK_SIGNAL_FUNC(frame_destroy_handler),
- NULL);
gtk_signal_connect (GTK_OBJECT(fixed), "expose-event",
GTK_SIGNAL_FUNC(window_expose_handler),
window);
- gtk_signal_connect (GTK_OBJECT(window), "focus-in-event",
- GTK_SIGNAL_FUNC(window_focus_in_handler),
- NULL);
- gtk_signal_connect (GTK_OBJECT(window), "focus-out-event",
- GTK_SIGNAL_FUNC(window_focus_out_handler),
- NULL);
gtk_signal_connect (GTK_OBJECT(viewport), "button-press-event",
GTK_SIGNAL_FUNC(window_button_press_handler),
--- 430,436 ----
***************
*** 424,430 ****
GTK_SIGNAL_FUNC(frame_leave_notify_handler),
window);
- gtk_signal_connect (GTK_OBJECT(window), "configure-event",
- GTK_SIGNAL_FUNC(window_configure_event_handler),
- NULL);
gtk_signal_connect (GTK_OBJECT (gtk_viewport_get_hadjustment (GTK_VIEWPORT(viewport))), "value-changed",
GTK_SIGNAL_FUNC(frame_adjustment_value_changed_handler),
--- 448,451 ----
***************
*** 433,445 ****
GTK_SIGNAL_FUNC(frame_adjustment_value_changed_handler),
window);
- gtk_signal_connect (GTK_OBJECT (window), "delete-event",
- GTK_SIGNAL_FUNC(frame_delete_handler),
- NULL);
- gtk_signal_connect (GTK_OBJECT(window), "key-press-event",
- GTK_SIGNAL_FUNC(window_key_press_handler),
- NULL);
- gtk_signal_connect (GTK_OBJECT(window), "key-release-event",
- GTK_SIGNAL_FUNC(window_key_release_handler),
- NULL);
gtk_widget_realize(viewport);
--- 454,457 ----
***************
*** 502,525 ****
char *osGetWindowTitle(WindowHandle window)
{
! char *title = GTK_WINDOW(window)->title;
! return strcpy(rmalloc(strlen(title)+1), title);
};
! void osSetWindowTitle(WindowHandle window, char *txt)
{
! gtk_window_set_title(GTK_WINDOW(window), txt);
};
void osGetWindowViewSize(WindowHandle window, int *res)
{
! int w, h;
! gtk_window_get_size(GTK_WINDOW(window), &w, &h);
! res[0] = w-4;
! res[1] = h-4;
}
void osSetWindowViewSize(WindowHandle window, int w, int h)
{
! gtk_window_resize(GTK_WINDOW(window), w+4, h+4);
}
--- 514,571 ----
char *osGetWindowTitle(WindowHandle window)
{
! char *title;
!
! if (gDocumentInterface == 2)
! {
! GtkWidget *label;
!
! label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gMDINotebookWidget),window);
! title = gtk_label_get_text(GTK_LABEL(label));
! }
! else
! {
! title = GTK_WINDOW(window)->title;
! }
!
! return strdup(title);
};
! void osSetWindowTitle(WindowHandle window, char *title)
{
! if (gDocumentInterface == 2)
! {
! GtkWidget *label;
!
! label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gMDINotebookWidget),window);
! gtk_label_set_text(GTK_LABEL(label), title);
!
! gtk_notebook_set_menu_label_text(GTK_NOTEBOOK(gMDINotebookWidget),window,title);
! }
! else
! {
! gtk_window_set_title(GTK_WINDOW(window), title);
! }
};
void osGetWindowViewSize(WindowHandle window, int *res)
{
! if (gDocumentInterface == 2)
! {
! int w, h;
! gtk_window_get_size(GTK_WINDOW(window), &w, &h);
! res[0] = w-4;
! res[1] = h-4;
! }
! else
! {
! res[0] = window->allocation.width-4;
! res[1] = window->allocation.height-4;
! }
}
void osSetWindowViewSize(WindowHandle window, int w, int h)
{
! if (gDocumentInterface != 2)
! gtk_window_resize(GTK_WINDOW(window), w+4, h+4);
}
***************
*** 618,622 ****
if (scrollbar_spacing < 0) scrollbar_spacing = 3;
! if (rectangle.width < child_requisition.width ) rectangle.width -= scrollbar_spacing + vscrollbar_requisition.width;
if (rectangle.height < child_requisition.height) rectangle.height -= scrollbar_spacing + hscrollbar_requisition.height;
--- 664,668 ----
if (scrollbar_spacing < 0) scrollbar_spacing = 3;
! if (rectangle.width < child_requisition.width ) rectangle.width -= scrollbar_spacing + vscrollbar_requisition.width;
if (rectangle.height < child_requisition.height) rectangle.height -= scrollbar_spacing + hscrollbar_requisition.height;
***************
*** 669,695 ****
void osSetWindowRect(WindowHandle window, int x0, int y0, int x1, int y1)
{
! gtk_window_move( GTK_WINDOW(window), x0, y0 );
! gtk_window_resize( GTK_WINDOW(window), abs (x1 - x0), abs (y1 - y0) );
}
void osGetWindowRect(WindowHandle window, int *res)
{
! int x = 0;
! int y = 0;
! int w = 0;
!
! int h = 0;
! gtk_window_get_position( GTK_WINDOW(window), &x, &y );
! gtk_window_get_size( GTK_WINDOW(window), &w, &h );
! res[0] = x;
! res[1] = y;
! res[2] = x+w;
! res[3] = y+h;
}
void osSetWindowResizeable(WindowHandle window, int resizeable )
{
! gtk_window_set_resizable(GTK_WINDOW(window), resizeable != 0);
}
--- 715,756 ----
void osSetWindowRect(WindowHandle window, int x0, int y0, int x1, int y1)
{
! if (gDocumentInterface != 2)
! {
! gtk_window_move(GTK_WINDOW(window), x0, y0);
! gtk_window_resize(GTK_WINDOW(window), abs (x1 - x0), abs (y1 - y0));
! }
}
void osGetWindowRect(WindowHandle window, int *res)
{
! if (gDocumentInterface == 2)
! {
! res[0] = 0;
! res[1] = 0;
! res[2] = window->allocation.width;
! res[3] = window->allocation.height;
! }
! else
! {
! int x = 0;
! int y = 0;
! int w = 0;
! int h = 0;
! gtk_window_get_position( GTK_WINDOW(window), &x, &y);
! gtk_window_get_size( GTK_WINDOW(window), &w, &h);
! res[0] = x;
! res[1] = y;
! res[2] = x+w;
! res[3] = y+h;
! }
}
void osSetWindowResizeable(WindowHandle window, int resizeable )
{
! if (gDocumentInterface != 2 || GTK_IS_DIALOG(window))
! {
! gtk_window_set_resizable(GTK_WINDOW(window), resizeable != 0);
! }
}
|