diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | examples/gtk/filechooser.py | 7 | ||||
-rw-r--r-- | examples/gtk/uimanager.py | 126 | ||||
-rw-r--r-- | gtk/gtk.override | 20 |
4 files changed, 159 insertions, 1 deletions
@@ -1,5 +1,12 @@ 2004-03-30 Johan Dahlin <johan@gnome.org> + * examples/gtk/filechooser.py (response): Updated, call dialog.destroy() + + * examples/gtk/uimanager.py: New example + + * gtk/gtk.override (_wrap_gtk_ui_manager_add_ui_from_string): + Override, get rid of second argument. + * gtk/gtk.defs (gtk_ui_manager_new): is Constructor of GtkUIManager, not GtkUiManager. diff --git a/examples/gtk/filechooser.py b/examples/gtk/filechooser.py index 470b4917..b50be0cc 100644 --- a/examples/gtk/filechooser.py +++ b/examples/gtk/filechooser.py @@ -22,5 +22,10 @@ filter.add_mime_type("image/jpeg") filter.add_mime_type("image/gif") dialog.add_filter(filter) -if dialog.run() == gtk.RESPONSE_OK: +response = dialog.run() +dialog.destroy() +if response == gtk.RESPONSE_OK: print dialog.get_filename(), 'selected' +elif response == gtk.RESPONSE: + print 'Closed, no files selected' + diff --git a/examples/gtk/uimanager.py b/examples/gtk/uimanager.py new file mode 100644 index 00000000..6fa1281e --- /dev/null +++ b/examples/gtk/uimanager.py @@ -0,0 +1,126 @@ +# +# Small example of the new GtkUIManager +# +# Johan Dahlin <johan@gnome.org>, 2004 +# + +import pygtk +pygtk.require('2.0') + +import gtk + +if gtk.pygtk_version > (2,3,90): + print "PyGtk 2.3.90 or later required for this example" + raise SystemExit + +window_actions = [ + ('FileMenu', None, '_File'), + ('New', gtk.STOCK_NEW, '_New', '<control>N', 'Create a new file', 'file_new_cb'), + ('Open', gtk.STOCK_OPEN, '_Open', '<control>O', 'Open a file', 'file_open_cb'), + ('Quit', gtk.STOCK_QUIT, '_Quit', '<control>Q', 'Quit application', 'file_quit_cb'), + ('HelpMenu', None, '_Help'), + ('About', None, '_About', None, 'About application', 'help_about_cb'), + ] + +ui_string = """<ui> + <menubar name='MenuBar'> + <menu action='FileMenu'> + <menuitem action='New'/> + <menuitem action='Open'/> + <separator/> + <menuitem action='Quit'/> + </menu> + <menu action='HelpMenu'> + <menuitem action='About'/> + </menu> + </menubar> +</ui>""" + +def fix_actions(actions, instance): + "Helper function to map methods to an instance" + retval = [] + + for i in range(len(actions)): + curr = actions[i] + if len(curr) > 5: + curr = list(curr) + curr[5] = getattr(instance, curr[5]) + curr = tuple(curr) + + retval.append(curr) + return retval + +class Window(gtk.Window): + def __init__(self): + gtk.Window.__init__(self) + self.connect('delete-event', self.delete_event_cb) + self.set_size_request(400, 200) + vbox = gtk.VBox() + self.add(vbox) + + menu = self.create_ui() + vbox.pack_start(menu, expand=False) + + sw = gtk.ScrolledWindow() + vbox.pack_start(sw) + + textview = gtk.TextView() + self.buffer = textview.get_buffer() + sw.add(textview) + + status = gtk.Statusbar() + vbox.pack_end(status, expand=False) + + def create_ui(self): + ag = gtk.ActionGroup('WindowActions') + + actions = fix_actions(window_actions, self) + ag.add_actions(actions) + self.ui = gtk.UIManager() + self.ui.insert_action_group(ag, 0) + self.ui.add_ui_from_string(ui_string) + menu = self.ui.get_widget('/MenuBar') + return menu + + def file_new_cb(self, action): + self.buffer.set_text("") + + def file_open_cb(self, action): + dialog = gtk.FileChooserDialog("Open..", + None, + gtk.FILE_CHOOSER_ACTION_OPEN, + (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OPEN, gtk.RESPONSE_OK)) + dialog.set_default_response(gtk.RESPONSE_OK) + + filter = gtk.FileFilter() + filter.set_name("All files") + filter.add_pattern("*") + dialog.add_filter(filter) + + if dialog.run() == gtk.RESPONSE_OK: + dialog.hide() + filename = dialog.get_filename() + self.buffer.set_text(file(filename).read()) + + def file_quit_cb(self, action): + self.close() + + def help_about_cb(self, action): + dialog = gtk.MessageDialog(self, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_INFO, gtk.BUTTONS_OK, + "Small example of the new GtkUIManger class") + dialog.run() + dialog.destroy() + + def delete_event_cb(self, window, event): + self.close() + + def close(self): + gtk.main_quit() + +if __name__ == '__main__': + w = Window() + w.show_all() + gtk.main() diff --git a/gtk/gtk.override b/gtk/gtk.override index c29fc8f8..dfcc25c1 100644 --- a/gtk/gtk.override +++ b/gtk/gtk.override @@ -3882,3 +3882,23 @@ _wrap_gtk_action_group_add_actions (PyGObject *self, PyObject *args, PyObject *k Py_INCREF(Py_None); return Py_None; } +%% +override gtk_ui_manager_add_ui_from_string kwargs +static PyObject * +_wrap_gtk_ui_manager_add_ui_from_string(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "buffer", NULL }; + char *buffer; + int length, ret; + GError *error = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#:GtkUIManager.add_ui_from_string", + kwlist, &buffer, &length)) + return NULL; + + ret = gtk_ui_manager_add_ui_from_string(GTK_UI_MANAGER(self->obj), + buffer, length, &error); + if (pyg_error_check(&error)) + return NULL; + return PyInt_FromLong(ret); +} |