1import gi 2gi.require_version('Gtk', '3.0') 3from gi.repository import Gtk 4 5from gajim.common.const import CSSPriority 6 7from gajim import gui 8gui.init('gtk') 9 10from gajim.gui.assistant import Assistant 11from gajim.gui.assistant import Page 12 13from test.gtk import util 14util.load_style('gajim.css', CSSPriority.APPLICATION) 15 16 17class TestAssistant(Assistant): 18 def __init__(self): 19 Assistant.__init__(self) 20 21 self.add_pages({'start': Start()}) 22 23 progress = self.add_default_page('progress') 24 progress.set_title('Executing...') 25 progress.set_text('Something is in progress...') 26 27 error = self.add_default_page('error') 28 error.set_title('Error') 29 error.set_heading('Error Heading') 30 error.set_text('This is the error text') 31 32 success = self.add_default_page('success') 33 success.set_title('Success') 34 success.set_heading('Success Heading') 35 success.set_text('This is the success text') 36 37 self.add_button('forward', 'Forward', 'suggested-action', complete=True) 38 self.add_button('close', 'Close', 'destructive-action') 39 self.add_button('back', 'Back') 40 41 self.set_button_visible_func(self._visible_func) 42 43 self.connect('button-clicked', self._on_button_clicked) 44 self.connect('page-changed', self._on_page_changed) 45 46 self.show_all() 47 48 @staticmethod 49 def _visible_func(_assistant, page_name): 50 if page_name == 'start': 51 return ['forward'] 52 53 if page_name == 'progress': 54 return ['forward', 'back'] 55 56 if page_name == 'success': 57 return ['forward', 'back'] 58 59 if page_name == 'error': 60 return ['back', 'close'] 61 raise ValueError('page %s unknown' % page_name) 62 63 def _on_button_clicked(self, _assistant, button_name): 64 page = self.get_current_page() 65 if button_name == 'forward': 66 if page == 'start': 67 self.show_page('progress', Gtk.StackTransitionType.SLIDE_LEFT) 68 elif page == 'progress': 69 self.show_page('success', Gtk.StackTransitionType.SLIDE_LEFT) 70 elif page == 'success': 71 self.show_page('error', Gtk.StackTransitionType.SLIDE_LEFT) 72 return 73 74 if button_name == 'back': 75 if page == 'progress': 76 self.show_page('start') 77 if page == 'success': 78 self.show_page('progress') 79 if page == 'error': 80 self.show_page('success') 81 return 82 83 if button_name == 'close': 84 self.destroy() 85 86 def _on_page_changed(self, _assistant, page_name): 87 if page_name == 'start': 88 self.set_default_button('forward') 89 90 elif page_name == 'progress': 91 self.set_default_button('forward') 92 93 elif page_name == 'success': 94 self.set_default_button('forward') 95 96 elif page_name == 'error': 97 self.set_default_button('back') 98 99 100class Start(Page): 101 def __init__(self): 102 Page.__init__(self) 103 104 self.title = 'Start' 105 self.complete = False 106 107 heading = Gtk.Label(label='Test Assistant') 108 heading.get_style_context().add_class('large-header') 109 110 label1 = Gtk.Label(label='This is label 1 with some text') 111 label1.set_max_width_chars(50) 112 label1.set_line_wrap(True) 113 label1.set_halign(Gtk.Align.CENTER) 114 label1.set_justify(Gtk.Justification.CENTER) 115 label1.set_margin_bottom(24) 116 117 entry = Gtk.Entry(activates_default=True) 118 entry.connect('changed', self._on_changed) 119 120 self._server = Gtk.CheckButton.new_with_mnemonic('A fancy checkbox') 121 self._server.set_halign(Gtk.Align.CENTER) 122 123 self.pack_start(heading, False, True, 0) 124 self.pack_start(label1, False, True, 0) 125 self.pack_start(entry, False, True, 0) 126 self.pack_start(self._server, False, True, 0) 127 self.show_all() 128 129 def _on_changed(self, entry): 130 self.complete = bool(entry.get_text()) 131 self.update_page_complete() 132 133 134win = TestAssistant() 135win.connect('destroy', Gtk.main_quit) 136win.show_all() 137Gtk.main() 138