GtkUiManager overrides
| From: | Tom Rogers | Date: | Sun, 16 Oct 2005 05:38:01 +0000 |
| Subject: | GtkUiManager overrides | ||
| Groups: | php.gtk.dev | ||
| Request: | Send a blank email to php-gtk-dev+get-1828@lists.php.net to get a copy of this message | ||
Hi
Here are overrides for GtkUIManager functions:
add_ui_from_string()
get_toplevels()
get_action_groups()
The 2 get functions I made return an assoc array as this is a lot more
useful to PHP scripts.
There is also a test file which uses these functions (tested on win32
only)
Let me know your thoughts....
--
Regards
Tom
%% {{{ GtkUIManager %% add-arginfo GtkUIManager add_ui_from_string static ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0) ZEND_ARG_INFO(0, text) ZEND_END_ARG_INFO(); %% override gtk_ui_manager_add_ui_from_string PHP_METHOD { zval *items = NULL; zend_bool free_text; char *text; long text_len; GError *error; NOT_STATIC_METHOD(); if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "u#", &text, &text_len, &free_text)) return; gtk_ui_manager_add_ui_from_string(GTK_UI_MANAGER(PHPG_GOBJECT(this_ptr)), text, text_len, &error); if (free_text) g_free(text); } %% add-arginfo GtkUIManager get_toplevels static ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0) ZEND_ARG_INFO(0, types) ZEND_END_ARG_INFO(); %% override gtk_ui_manager_get_toplevels static PHP_METHOD(GtkUIManager, get_toplevels) { long types; GSList *toplevels = 0; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "i", &types)) return; array_init(return_value); for (toplevels = gtk_ui_manager_get_toplevels(GTK_UI_MANAGER(PHPG_GOBJECT(this_ptr)), types); toplevels; toplevels = toplevels->next) { zval *item = NULL; const-char *name = NULL; name = gtk_widget_get_name(toplevels->data); phpg_gobject_new(&item, G_OBJECT(toplevels->data) TSRMLS_CC); add_assoc_zval(return_value, name, item); } g_slist_free(toplevels); } %% override gtk_ui_manager_get_action_groups static PHP_METHOD(GtkUIManager, get_action_groups) { GList *action_groups = 0; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) return; array_init(return_value); for (action_groups = gtk_ui_manager_get_action_groups(GTK_UI_MANAGER(PHPG_GOBJECT(this_ptr))); action_groups; action_groups = action_groups->next) { zval *item = NULL; const-char *name = NULL; name = gtk_action_group_get_name(action_groups->data); phpg_gobject_new(&item, G_OBJECT(action_groups->data) TSRMLS_CC); add_assoc_zval(return_value, name, item); } } %% }}} <?php if( !class_exists('gtk')) { die('Please load the php-gtk2 module in your php.ini' . "\r\n"); } function EndDialog($button, $fs) { print "OK button clicked, "; $path = $fs->get_filename(); print "$path selected.\n"; $GLOBALS['acgroups']['EditActions']->set_sensitive(1); return true; } function CancelDialog() { print("Cancel button clicked\n"); return true; } function FileDialog() { $fs = &new GtkFileSelection('File Selection Example'); $ok_button = $fs->ok_button; $ok_button->connect('clicked', 'EndDialog', $fs); $ok_button->connect_simple('clicked', array($fs, 'destroy')); $cancel_button = $fs->cancel_button; $cancel_button->connect('clicked', 'CancelDialog'); $cancel_button->connect_simple('clicked', array($fs, 'destroy')); $fs->show(); } function FileClose(){ $GLOBALS['acgroups']['EditActions']->set_sensitive(0); } function shutdown() { Gtk::main_quit(); } function canClose() { return false; } $layout = ' <ui> <menubar name="menubar1"> <menu action="FileMenu"> <menuitem action="Open"/> <menuitem action="Close"/> <separator/> <menuitem action="Exit"/> </menu> <menu action="EditMenu"> <menuitem action="Copy"/> <menuitem action="Paste"/> </menu> </menubar> <toolbar action="toolbar1"> <placeholder name="JustifyToolItems"> <separator/> <toolitem action="Open"/> <toolitem action="Close"/> <separator/> </placeholder> </toolbar> </ui>'; $window = &new GtkWindow(); $window->set_title('PHP Editor'); $window->set_uposition(10, 10); $window->set_size_request(800,600); $window->connect('delete-event', 'canClose'); $window->connect('destroy', 'shutdown'); $accelgroup = &new GtkAccelGroup(); $window->add_accel_group($accelgroup); $vbox1 =& new GtkVBox(FALSE, 0); $vbox1->show(); $vbox1->set_spacing(1); $ui_manager = new GtkUiManager(); $file_action_group = new GtkActionGroup("FileActions"); $ui_manager->insert_action_group($file_action_group, 0); $fileAction = new GtkAction('FileMenu','_File','File Actions',''); $openAction = new GtkAction('Open','_Open','Open File','GTK_STOCK_OPEN'); $openAction->connect('activate','FileDialog'); $closeAction = new GtkAction('Close','_Close','Close File','GTK_STOCK_CLOSE'); $closeAction->connect('activate','FileClose'); $exitAction = new GtkAction('Exit','E_xit','Quit','GTK_STOCK_QUIT'); $exitAction->connect('activate','shutdown'); $file_action_group->add_action($fileAction); $file_action_group->add_action($openAction); $file_action_group->add_action($closeAction); $file_action_group->add_action($exitAction); $edit_action_group = new GtkActionGroup("EditActions"); $ui_manager->insert_action_group($edit_action_group, 0); $editAction = new GtkAction('EditMenu','_Edit','Edit Actions',''); $copyAction = new GtkAction('Copy','_Copy','Copy to clipboard','GTK_STOCK_COPY'); $pasteAction = new GtkAction('Paste','_Paste','Paste from clipboard','GTK_STOCK_PASTE'); $edit_action_group->add_action($editAction); $edit_action_group->add_action($copyAction); $edit_action_group->add_action($pasteAction); $ui_manager->add_ui_from_string($layout); $ui_manager->ensure_update(); $toplevels = $ui_manager->get_toplevels(5); //print_r($toplevels); $vbox1->pack_start($toplevels['menubar1'],FALSE,FALSE,0); $vbox1->pack_start($toplevels['toolbar1'],FALSE,FALSE,0); $acgroups = $ui_manager->get_action_groups(); //print_r($acgroups); $acgroups['EditActions']->set_sensitive(0); $window->add($vbox1); $window->show_all(); Gtk::main();
%% {{{ GtkUIManager %% add-arginfo GtkUIManager add_ui_from_string static ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0) ZEND_ARG_INFO(0, text) ZEND_END_ARG_INFO(); %% override gtk_ui_manager_add_ui_from_string PHP_METHOD { zval *items = NULL; zend_bool free_text; char *text; long text_len; GError *error; NOT_STATIC_METHOD(); if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "u#", &text, &text_len, &free_text)) return; gtk_ui_manager_add_ui_from_string(GTK_UI_MANAGER(PHPG_GOBJECT(this_ptr)), text, text_len, &error); if (free_text) g_free(text); } %% add-arginfo GtkUIManager get_toplevels static ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0) ZEND_ARG_INFO(0, types) ZEND_END_ARG_INFO(); %% override gtk_ui_manager_get_toplevels static PHP_METHOD(GtkUIManager, get_toplevels) { long types; GSList *toplevels = 0; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "i", &types)) return; array_init(return_value); for (toplevels = gtk_ui_manager_get_toplevels(GTK_UI_MANAGER(PHPG_GOBJECT(this_ptr)), types); toplevels; toplevels = toplevels->next) { zval *item = NULL; const-char *name = NULL; name = gtk_widget_get_name(toplevels->data); phpg_gobject_new(&item, G_OBJECT(toplevels->data) TSRMLS_CC); add_assoc_zval(return_value, name, item); } g_slist_free(toplevels); } %% override gtk_ui_manager_get_action_groups static PHP_METHOD(GtkUIManager, get_action_groups) { GList *action_groups = 0; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) return; array_init(return_value); for (action_groups = gtk_ui_manager_get_action_groups(GTK_UI_MANAGER(PHPG_GOBJECT(this_ptr))); action_groups; action_groups = action_groups->next) { zval *item = NULL; const-char *name = NULL; name = gtk_action_group_get_name(action_groups->data); phpg_gobject_new(&item, G_OBJECT(action_groups->data) TSRMLS_CC); add_assoc_zval(return_value, name, item); } } %% }}} <?php if( !class_exists('gtk')) { die('Please load the php-gtk2 module in your php.ini' . "\r\n"); } function EndDialog($button, $fs) { print "OK button clicked, "; $path = $fs->get_filename(); print "$path selected.\n"; $GLOBALS['acgroups']['EditActions']->set_sensitive(1); return true; } function CancelDialog() { print("Cancel button clicked\n"); return true; } function FileDialog() { $fs = &new GtkFileSelection('File Selection Example'); $ok_button = $fs->ok_button; $ok_button->connect('clicked', 'EndDialog', $fs); $ok_button->connect_simple('clicked', array($fs, 'destroy')); $cancel_button = $fs->cancel_button; $cancel_button->connect('clicked', 'CancelDialog'); $cancel_button->connect_simple('clicked', array($fs, 'destroy')); $fs->show(); } function FileClose(){ $GLOBALS['acgroups']['EditActions']->set_sensitive(0); } function shutdown() { Gtk::main_quit(); } function canClose() { return false; } $layout = ' <ui> <menubar name="menubar1"> <menu action="FileMenu"> <menuitem action="Open"/> <menuitem action="Close"/> <separator/> <menuitem action="Exit"/> </menu> <menu action="EditMenu"> <menuitem action="Copy"/> <menuitem action="Paste"/> </menu> </menubar> <toolbar action="toolbar1"> <placeholder name="JustifyToolItems"> <separator/> <toolitem action="Open"/> <toolitem action="Close"/> <separator/> </placeholder> </toolbar> </ui>'; $window = &new GtkWindow(); $window->set_title('PHP Editor'); $window->set_uposition(10, 10); $window->set_size_request(800,600); $window->connect('delete-event', 'canClose'); $window->connect('destroy', 'shutdown'); $accelgroup = &new GtkAccelGroup(); $window->add_accel_group($accelgroup); $vbox1 =& new GtkVBox(FALSE, 0); $vbox1->show(); $vbox1->set_spacing(1); $ui_manager = new GtkUiManager(); $file_action_group = new GtkActionGroup("FileActions"); $ui_manager->insert_action_group($file_action_group, 0); $fileAction = new GtkAction('FileMenu','_File','File Actions',''); $openAction = new GtkAction('Open','_Open','Open File','GTK_STOCK_OPEN'); $openAction->connect('activate','FileDialog'); $closeAction = new GtkAction('Close','_Close','Close File','GTK_STOCK_CLOSE'); $closeAction->connect('activate','FileClose'); $exitAction = new GtkAction('Exit','E_xit','Quit','GTK_STOCK_QUIT'); $exitAction->connect('activate','shutdown'); $file_action_group->add_action($fileAction); $file_action_group->add_action($openAction); $file_action_group->add_action($closeAction); $file_action_group->add_action($exitAction); $edit_action_group = new GtkActionGroup("EditActions"); $ui_manager->insert_action_group($edit_action_group, 0); $editAction = new GtkAction('EditMenu','_Edit','Edit Actions',''); $copyAction = new GtkAction('Copy','_Copy','Copy to clipboard','GTK_STOCK_COPY'); $pasteAction = new GtkAction('Paste','_Paste','Paste from clipboard','GTK_STOCK_PASTE'); $edit_action_group->add_action($editAction); $edit_action_group->add_action($copyAction); $edit_action_group->add_action($pasteAction); $ui_manager->add_ui_from_string($layout); $ui_manager->ensure_update(); $toplevels = $ui_manager->get_toplevels(5); //print_r($toplevels); $vbox1->pack_start($toplevels['menubar1'],FALSE,FALSE,0); $vbox1->pack_start($toplevels['toolbar1'],FALSE,FALSE,0); $acgroups = $ui_manager->get_action_groups(); //print_r($acgroups); $acgroups['EditActions']->set_sensitive(0); $window->add($vbox1); $window->show_all(); Gtk::main();