aboutsummaryrefslogtreecommitdiff
path: root/gtk3-demo.py
diff options
context:
space:
mode:
Diffstat (limited to 'gtk3-demo.py')
-rwxr-xr-xgtk3-demo.py166
1 files changed, 166 insertions, 0 deletions
diff --git a/gtk3-demo.py b/gtk3-demo.py
new file mode 100755
index 0000000..aa37b43
--- /dev/null
+++ b/gtk3-demo.py
@@ -0,0 +1,166 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+"""
+Provides a graphical demo application for aptdaemon
+"""
+# Copyright (C) 2008-2009 Sebastian Heinlein <sevel@glatzor.de>
+#
+# Licensed under the GNU General Public License Version 2
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+__author__ = "Sebastian Heinlein <devel@glatzor.de>"
+
+from optparse import OptionParser
+import logging
+
+# uncomment to use GTK 2.0
+#import gi
+#gi.require_version('Gtk', '2.0')
+#gi.require_version('Vte', '0.0')
+
+from gi.repository import GLib, Gtk
+
+import aptdaemon.client
+from aptdaemon.enums import *
+from aptdaemon.gtk3widgets import AptErrorDialog, \
+ AptConfirmDialog, \
+ AptProgressDialog
+import aptdaemon.errors
+
+
+class AptDaemonDemo(object):
+
+ """Provides a graphical test application."""
+
+ def _run_transaction(self, transaction):
+ dia = AptProgressDialog(transaction, parent=self.win)
+ dia.run(close_on_finished=True, show_error=True,
+ reply_handler=lambda: True,
+ error_handler=self._on_error)
+
+ def _simulate_trans(self, trans):
+ trans.simulate(reply_handler=lambda: self._confirm_deps(trans),
+ error_handler=self._on_error)
+
+ def _confirm_deps(self, trans):
+ if [pkgs for pkgs in trans.dependencies if pkgs]:
+ dia = AptConfirmDialog(trans, parent=self.win)
+ res = dia.run()
+ dia.hide()
+ if res != Gtk.ResponseType.OK:
+ return
+ self._run_transaction(trans)
+
+ def _on_error(self, error):
+ if isinstance(error, aptdaemon.errors.NotAuthorizedError):
+ # Silently ignore auth failures
+ return
+ elif not isinstance(error, aptdaemon.errors.TransactionFailed):
+ # Catch internal errors of the client
+ error = aptdaemon.errors.TransactionFailed(ERROR_UNKNOWN,
+ str(error))
+ dia = AptErrorDialog(error)
+ dia.run()
+ dia.hide()
+
+ def _on_upgrade_clicked(self, *args):
+ self.ac.upgrade_system(safe_mode=False,
+ reply_handler=self._simulate_trans,
+ error_handler=self._on_error)
+
+ def _on_update_clicked(self, *args):
+ self.ac.update_cache(reply_handler=self._run_transaction,
+ error_handler=self._on_error)
+
+ def _on_install_clicked(self, *args):
+ self.ac.install_packages([self.package],
+ reply_handler=self._simulate_trans,
+ error_handler=self._on_error)
+
+ def _on_install_file_clicked(self, *args):
+ chooser = Gtk.FileChooserDialog(parent=self.win,
+ action=Gtk.FileChooserAction.OPEN,
+ buttons=(Gtk.STOCK_CANCEL,
+ Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OPEN,
+ Gtk.ResponseType.OK))
+ chooser.set_local_only(True)
+ chooser.run()
+ chooser.hide()
+ path = chooser.get_filename()
+ self.ac.install_file(path, reply_handler=self._simulate_trans,
+ error_handler=self._on_error)
+
+ def _on_remove_clicked(self, *args):
+ self.ac.remove_packages([self.package],
+ reply_handler=self._simulate_trans,
+ error_handler=self._on_error)
+
+ def __init__(self, package):
+ self.win = Gtk.Window()
+ self.package = package
+ self.win.set_resizable(False)
+ self.win.set_title("Aptdaemon Demo")
+ icon_theme = Gtk.IconTheme.get_default()
+ try:
+ Gtk.window_set_default_icon(icon_theme.load_icon("aptdaemon-setup",
+ 32, 0))
+ except (GLib.GError, AttributeError):
+ pass
+ button_update = Gtk.Button.new_with_mnemonic("_Update")
+ button_install = Gtk.Button.new_with_mnemonic("_Install %s" % self.package)
+ button_install_file = Gtk.Button.new_with_mnemonic("Install _file...")
+ button_remove = Gtk.Button.new_with_mnemonic("_Remove %s" % self.package)
+ button_upgrade = Gtk.Button.new_with_mnemonic("Upgrade _System")
+ button_update.connect("clicked", self._on_update_clicked)
+ button_install.connect("clicked", self._on_install_clicked)
+ button_install_file.connect("clicked", self._on_install_file_clicked)
+ button_remove.connect("clicked", self._on_remove_clicked)
+ button_upgrade.connect("clicked", self._on_upgrade_clicked)
+ vbox = Gtk.VBox()
+ vbox.add(button_update)
+ vbox.add(button_install)
+ vbox.add(button_install_file)
+ vbox.add(button_remove)
+ vbox.add(button_upgrade)
+ self.win.add(vbox)
+ self.loop = GLib.MainLoop()
+ self.win.connect("delete-event", lambda w, e: self.loop.quit())
+ self.win.show_all()
+ self.ac = aptdaemon.client.AptClient()
+
+ def run(self):
+ self.loop.run()
+
+
+def main():
+ parser = OptionParser()
+ parser.add_option("-p", "--package", default="cw", action="store",
+ dest="package",
+ help="Use this package for installation and removal")
+ parser.add_option("-d", "--debug", default=False, action="store_true",
+ help="Verbose debugging")
+ options, args = parser.parse_args()
+ if options.debug:
+ logging.basicConfig(level=logging.DEBUG)
+
+ demo = AptDaemonDemo(options.package)
+ demo.run()
+
+if __name__ == "__main__":
+ main()
+
+# vim:ts=4:sw=4:et