r61 - trunk/src/target/OM-2007/examples/openmoko-3partdemo
mickey at gta01.hmw-consulting.de
mickey at gta01.hmw-consulting.de
Fri Sep 29 13:49:41 CEST 2006
Author: mickey
Date: 2006-09-29 11:49:40 +0000 (Fri, 29 Sep 2006)
New Revision: 61
Modified:
trunk/src/target/OM-2007/examples/openmoko-3partdemo/demo-main.c
Log:
more work on openmoko-3partdemo. parts will eventually refactored into framework, so don't take this as an example until further notice!
Modified: trunk/src/target/OM-2007/examples/openmoko-3partdemo/demo-main.c
===================================================================
--- trunk/src/target/OM-2007/examples/openmoko-3partdemo/demo-main.c 2006-09-27 13:28:22 UTC (rev 60)
+++ trunk/src/target/OM-2007/examples/openmoko-3partdemo/demo-main.c 2006-09-29 11:49:40 UTC (rev 61)
@@ -19,10 +19,121 @@
#include <mokoui/moko-application.h>
#include <mokoui/moko-window.h>
+#include <mokoui/moko-menubar.h>
+#include <mokoui/moko-toolbar.h>
+#include <gtk/gtkactiongroup.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkcheckmenuitem.h>
#include <gtk/gtkmain.h>
-#include <gtk/gtkbutton.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkstock.h>
+#include <gtk/gtkuimanager.h>
+#include <gtk/gtkvpaned.h>
+#include <gtk/gtkvbox.h>
+#include <stdlib.h>
+
+/* Obligatory basic callback */
+static void print_hello( GtkWidget *w,
+ gpointer data )
+{
+ g_message ("Hello, World!\n");
+}
+
+/* For the check button */
+static void print_toggle( gpointer callback_data,
+ guint callback_action,
+ GtkWidget *menu_item )
+{
+ g_message ("Check button state - %d\n",
+ GTK_CHECK_MENU_ITEM (menu_item)->active);
+}
+
+/* For the radio buttons */
+static void print_selected( gpointer callback_data,
+ guint callback_action,
+ GtkWidget *menu_item )
+{
+ if(GTK_CHECK_MENU_ITEM(menu_item)->active)
+ g_message ("Radio button %d selected\n", callback_action);
+}
+
+/* Normal items */
+static const GtkActionEntry entries[] = {
+ { "FileMenu", NULL, "_File" },
+ { "ViewMenu", NULL, "_View" },
+ { "Open", GTK_STOCK_OPEN, "_Open", "<control>O", "Open a file", print_hello },
+ { "Exit", GTK_STOCK_QUIT, "E_xit", "<control>Q", "Exit the program", print_hello },
+ { "ZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "plus", "Zoom into the image", print_hello },
+ { "ZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "minus", "Zoom away from the image", print_hello },
+};
+
+/* Toggle items */
+static const GtkToggleActionEntry toggle_entries[] = {
+ { "FullScreen", NULL, "_Full Screen", "F11", "Switch between full screen and windowed mode", print_hello, FALSE }
+};
+
+/* Radio items */
+static const GtkRadioActionEntry radio_entries[] = {
+ { "HighQuality", "my-stock-high-quality", "_High Quality", NULL, "Display images in high quality, slow mode", 0 },
+ { "NormalQuality", "my-stock-normal-quality", "_Normal Quality", NULL, "Display images in normal quality", 1 },
+ { "LowQuality", "my-stock-low-quality", "_Low Quality", NULL, "Display images in low quality, fast mode", 2 }
+};
+
+static const char* application_menu_ui =
+ "<ui>"
+ " <menu action='ApplicationMenu'>"
+ " <menuitem action='Open'/>"
+ " <menuitem action='Exit'/>"
+ " </menu>"
+ "</ui>"
+ ;
+
+static const char *ui_description =
+ "<ui>"
+ " <menubar name='MainMenu'>"
+ " <menu action='FileMenu'>"
+ " <menuitem action='Open'/>"
+ " <menuitem action='Exit'/>"
+ " </menu>"
+ " <menu action='ViewMenu'>"
+ " <menuitem action='ZoomIn'/>"
+ " <menuitem action='ZoomOut'/>"
+ " <separator/>"
+ " <menuitem action='FullScreen'/>"
+ " <separator/>"
+ " <menuitem action='HighQuality'/>"
+ " <menuitem action='NormalQuality'/>"
+ " <menuitem action='LowQuality'/>"
+ " </menu>"
+ " </menubar>"
+ "</ui>";
+
+static GtkWidget* get_menubar_menu( GtkWindow* window )
+{
+ GtkActionGroup* action_group = gtk_action_group_new ("MenuActions");
+ gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), window);
+ gtk_action_group_add_toggle_actions (action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), window);
+ gtk_action_group_add_radio_actions (action_group, radio_entries, G_N_ELEMENTS (radio_entries), 0, print_selected, window);
+
+ GtkUIManager* ui_manager = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+
+ GtkAccelGroup* accel_group = gtk_ui_manager_get_accel_group (ui_manager);
+ gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+
+ GError* error = NULL;
+ if (!gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, &error))
+ {
+ g_message ("building menus failed: s", error->message);
+ g_error_free (error);
+ exit (EXIT_FAILURE);
+ }
+
+ return gtk_ui_manager_get_widget (ui_manager, "/MainMenu");
+}
+
int main( int argc, char** argv )
{
/* Initialize GTK+ */
@@ -31,12 +142,43 @@
MokoApplication* app = MOKO_APPLICATION( moko_application_get_instance() );
g_set_application_name( "Hello OpenMoko!" );
- MokoWindow* window = MOKO_WINDOW( moko_window_new() );
+ MokoWindow* window = MOKO_WINDOW(moko_window_new());
// moko_application_set_main_window( window );
- GtkButton* button = gtk_button_new_with_label( "Hello World!" );
- gtk_container_add( GTK_CONTAINER(window), button );
+ /* Set up application menu */
+ GtkMenu* appmenu = gtk_menu_new();
+ GtkMenuItem* closeitem = gtk_menu_item_new_with_label( "Close" );
+ g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK( gtk_main_quit ), NULL );
+ gtk_menu_shell_append( appmenu, closeitem );
+ GtkMenuItem* appitem = gtk_menu_item_new_with_label( "File" );
+ gtk_menu_item_set_submenu( appitem, appmenu );
+
+ gtk_widget_show( closeitem );
+
+ /* Set up upper frame */
+ GtkVBox* upperframe = gtk_vbox_new( FALSE, 0 );
+ MokoMenuBar* menubar = GTK_MENU_BAR(moko_menu_bar_new());
+ gtk_menu_shell_append( GTK_MENU_BAR(menubar), appitem );
+
+ //MokoMenuBar* menubar = get_menubar_menu( window );
+
+ gtk_box_pack_start( GTK_BOX(upperframe), GTK_WIDGET(menubar), TRUE, TRUE, 0 );
+ GtkButton* navigationlist = gtk_button_new_with_label( "Hello Navigation Area!" );
+ gtk_box_pack_start( GTK_BOX(upperframe), GTK_WIDGET(navigationlist), TRUE, TRUE, 0 );
+
+ /* Set up lower frame */
+ GtkVBox* lowerframe = gtk_vbox_new( FALSE, 0 );
+
+ GtkButton* detailslist = gtk_button_new_with_label( "Hello Details Area!" );
+ gtk_box_pack_start( GTK_BOX(lowerframe), GTK_WIDGET(detailslist), TRUE, TRUE, 0 );
+
+ GtkVPaned* outerframe = gtk_vpaned_new();
+ gtk_paned_add1( GTK_PANED(outerframe), GTK_WIDGET(upperframe) );
+ gtk_paned_add2( GTK_PANED(outerframe), GTK_WIDGET(lowerframe) );
+
+ gtk_container_add( GTK_CONTAINER(window), outerframe );
+
g_signal_connect( G_OBJECT(window), "delete_event", G_CALLBACK( gtk_main_quit ), NULL );
gtk_widget_show_all( GTK_WIDGET(window) );
More information about the commitlog
mailing list