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