diff options
author | Philipp Hörist <philipp@hoerist.com> | 2019-11-30 00:19:30 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2019-11-30 00:20:08 +0300 |
commit | 74b815b016dc90b2673ba53fa25f5765e5fce396 (patch) | |
tree | e58e4469ec17c2c201dba9e9dd49cb7acc54b4cf /test | |
parent | 06844f2371634fb985dd7363b6b8614de029f265 (diff) |
Add base Assistant class
Diffstat (limited to 'test')
-rw-r--r-- | test/gtk/assistant.py | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/test/gtk/assistant.py b/test/gtk/assistant.py new file mode 100644 index 000000000..8a049a72c --- /dev/null +++ b/test/gtk/assistant.py @@ -0,0 +1,151 @@ +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +from gajim.common.const import CSSPriority + +from gajim.gtk.assistant import Assistant + +from test.gtk import util +util.load_style('gajim.css', CSSPriority.APPLICATION) + + +class TestAssistant(Assistant): + def __init__(self): + Assistant.__init__(self) + + self.add_pages({'start': Start(), + 'progress': Progress()}) + + self.add_default_page('error') + self.add_default_page('success') + + self.add_button('forward', 'Forward', 'suggested-action') + self.add_button('close', 'Close', 'destructive-action') + self.add_button('back', 'Back') + + self.set_button_visible_func(self._visible_func) + + self.connect('button-clicked', self._on_button_clicked) + self.connect('page-changed', self._on_page_changed) + + self.show_all() + + @staticmethod + def _visible_func(_assistant, page_name): + if page_name == 'start': + return ['forward'] + + if page_name == 'progress': + return ['forward', 'back'] + + if page_name == 'success': + return ['forward', 'back'] + + if page_name == 'error': + return ['back', 'close'] + raise ValueError('page %s unknown' % page_name) + + def _on_button_clicked(self, _assistant, button_name): + page = self.get_current_page() + if button_name == 'forward': + if page == 'start': + self.show_page('progress', Gtk.StackTransitionType.SLIDE_LEFT) + elif page == 'progress': + self.show_page('success', Gtk.StackTransitionType.SLIDE_LEFT) + elif page == 'success': + self.show_page('error', Gtk.StackTransitionType.SLIDE_LEFT) + return + + if button_name == 'back': + if page == 'progress': + self.show_page('start') + if page == 'success': + self.show_page('progress') + if page == 'error': + self.show_page('success') + return + + if button_name == 'close': + self.destroy() + + def _on_page_changed(self, _assistant, page_name): + if page_name == 'start': + self.set_default_button('forward') + + elif page_name == 'progress': + self.set_default_button('forward') + + elif page_name == 'success': + success_page = self.get_success_page() + success_page.set_title('Success') + success_page.set_heading('Success Heading') + success_page.set_text('This is the success text') + self.set_default_button('forward') + + elif page_name == 'error': + error_page = self.get_error_page() + error_page.set_title('Error') + error_page.set_heading('Error Heading') + error_page.set_text('This is the error text') + self.set_default_button('back') + + +class Progress(Gtk.Box): + + title = 'Progress' + + def __init__(self): + super().__init__(orientation=Gtk.Orientation.VERTICAL) + self.set_spacing(18) + self.set_valign(Gtk.Align.CENTER) + label = Gtk.Label(label='Test label...') + label.set_max_width_chars(50) + label.set_line_wrap(True) + label.set_halign(Gtk.Align.CENTER) + label.set_justify(Gtk.Justification.CENTER) + spinner = Gtk.Spinner() + self.pack_start(label, False, True, 0) + self.pack_start(spinner, False, True, 0) + spinner.start() + self.show_all() + + +class Start(Gtk.Box): + + title = 'Start' + + def __init__(self): + super().__init__(orientation=Gtk.Orientation.VERTICAL) + self.set_spacing(18) + self.set_valign(Gtk.Align.CENTER) + heading = Gtk.Label(label='Test Assistant') + heading.get_style_context().add_class('large-header') + + label1 = Gtk.Label(label='This is label 1 with some text') + label1.set_max_width_chars(50) + label1.set_line_wrap(True) + label1.set_halign(Gtk.Align.CENTER) + label1.set_justify(Gtk.Justification.CENTER) + label1.set_margin_bottom(24) + + label2 = Gtk.Label(label='This is label 2 with some more text') + label2.set_max_width_chars(50) + label2.set_line_wrap(True) + label2.set_halign(Gtk.Align.CENTER) + label2.set_justify(Gtk.Justification.CENTER) + + self._server = Gtk.CheckButton.new_with_mnemonic('A fancy checkbox') + self._server.set_halign(Gtk.Align.CENTER) + + self.pack_start(heading, False, True, 0) + self.pack_start(label1, False, True, 0) + self.pack_start(label2, False, True, 0) + self.pack_start(self._server, False, True, 0) + self.show_all() + + +win = TestAssistant() +win.connect('destroy', Gtk.main_quit) +win.show_all() +Gtk.main() |