Consolidating timeout location and increasing it for slower connections
[gc-dialer] / src / gtk_toolbox.py
1 #!/usr/bin/python
2
3
4 import gtk
5
6
7 class LoginWindow(object):
8
9         def __init__(self, widgetTree):
10                 """
11                 @note Thread agnostic
12                 """
13                 self._dialog = widgetTree.get_widget("loginDialog")
14                 self._parentWindow = widgetTree.get_widget("mainWindow")
15                 self._usernameEntry = widgetTree.get_widget("usernameentry")
16                 self._passwordEntry = widgetTree.get_widget("passwordentry")
17
18                 callbackMapping = {
19                         "on_loginbutton_clicked": self._on_loginbutton_clicked,
20                         "on_loginclose_clicked": self._on_loginclose_clicked,
21                 }
22                 widgetTree.signal_autoconnect(callbackMapping)
23
24         def request_credentials(self, parentWindow = None):
25                 """
26                 @note UI Thread
27                 """
28                 if parentWindow is None:
29                         parentWindow = self._parentWindow
30                 try:
31                         self._dialog.set_transient_for(parentWindow)
32                         self._dialog.set_default_response(gtk.RESPONSE_OK)
33                         response = self._dialog.run()
34                         if response != gtk.RESPONSE_OK:
35                                 raise RuntimeError("Login Cancelled")
36
37                         username = self._usernameEntry.get_text()
38                         password = self._passwordEntry.get_text()
39                         self._passwordEntry.set_text("")
40                 finally:
41                         self._dialog.hide()
42                 return username, password
43
44         def _on_loginbutton_clicked(self, *args):
45                 self._dialog.response(gtk.RESPONSE_OK)
46
47         def _on_loginclose_clicked(self, *args):
48                 self._dialog.response(gtk.RESPONSE_CANCEL)
49
50
51 class ErrorDisplay(object):
52
53         def __init__(self, widgetTree):
54                 super(ErrorDisplay, self).__init__()
55                 self.__errorBox = widgetTree.get_widget("errorEventBox")
56                 self.__errorDescription = widgetTree.get_widget("errorDescription")
57                 self.__errorClose = widgetTree.get_widget("errorClose")
58                 self.__parentBox = self.__errorBox.get_parent()
59
60                 self.__errorBox.connect("button_release_event", self._on_close)
61
62                 self.__messages = []
63                 self.__parentBox.remove(self.__errorBox)
64
65         def push_message(self, message):
66                 if 0 < len(self.__messages):
67                         self.__messages.append(message)
68                 else:
69                         self.__show_message(message)
70
71         def pop_message(self):
72                 if 0 < len(self.__messages):
73                         self.__show_message(self.__messages[0])
74                         del self.__messages[0]
75                 else:
76                         self.__hide_message()
77
78         def _on_close(self, *args):
79                 self.pop_message()
80
81         def __show_message(self, message):
82                 self.__errorDescription.set_text(message)
83                 self.__parentBox.pack_start(self.__errorBox, False, False)
84                 self.__parentBox.reorder_child(self.__errorBox, 1)
85
86         def __hide_message(self):
87                 self.__errorDescription.set_text("")
88                 self.__parentBox.remove(self.__errorBox)
89
90
91 class MessageBox(gtk.MessageDialog):
92
93         def __init__(self, message):
94                 parent = None
95                 gtk.MessageDialog.__init__(
96                         self,
97                         parent,
98                         gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
99                         gtk.MESSAGE_ERROR,
100                         gtk.BUTTONS_OK,
101                         message,
102                 )
103                 self.set_default_response(gtk.RESPONSE_OK)
104                 self.connect('response', self._handle_clicked)
105
106         def _handle_clicked(self, *args):
107                 self.destroy()
108
109
110 class MessageBox2(gtk.MessageDialog):
111
112         def __init__(self, message):
113                 parent = None
114                 gtk.MessageDialog.__init__(
115                         self,
116                         parent,
117                         gtk.DIALOG_DESTROY_WITH_PARENT,
118                         gtk.MESSAGE_ERROR,
119                         gtk.BUTTONS_OK,
120                         message,
121                 )
122                 self.set_default_response(gtk.RESPONSE_OK)
123                 self.connect('response', self._handle_clicked)
124
125         def _handle_clicked(self, *args):
126                 self.destroy()