8 class LoginWindow(object):
10 def __init__(self, widgetTree):
14 self._dialog = widgetTree.get_widget("loginDialog")
15 self._parentWindow = widgetTree.get_widget("mainWindow")
16 self._serviceCombo = widgetTree.get_widget("serviceCombo")
17 self._usernameEntry = widgetTree.get_widget("usernameentry")
18 self._passwordEntry = widgetTree.get_widget("passwordentry")
20 self._serviceList = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
21 self._serviceCombo.set_model(self._serviceList)
22 cell = gtk.CellRendererText()
23 self._serviceCombo.pack_start(cell, True)
24 self._serviceCombo.add_attribute(cell, 'text', 1)
25 self._serviceCombo.set_active(0)
28 "on_loginbutton_clicked": self._on_loginbutton_clicked,
29 "on_loginclose_clicked": self._on_loginclose_clicked,
31 widgetTree.signal_autoconnect(callbackMapping)
33 def request_credentials(self, parentWindow = None):
37 if parentWindow is None:
38 parentWindow = self._parentWindow
40 self._serviceCombo.hide()
41 self._serviceList.clear()
44 self._dialog.set_transient_for(parentWindow)
45 self._dialog.set_default_response(gtk.RESPONSE_OK)
46 response = self._dialog.run()
47 if response != gtk.RESPONSE_OK:
48 raise RuntimeError("Login Cancelled")
50 username = self._usernameEntry.get_text()
51 password = self._passwordEntry.get_text()
52 self._passwordEntry.set_text("")
56 return username, password
58 def request_credentials_from(self, services, parentWindow = None):
62 if parentWindow is None:
63 parentWindow = self._parentWindow
65 self._serviceList.clear()
66 for serviceIdserviceName in services.iteritems():
67 self._serviceList.append(serviceIdserviceName)
68 self._serviceCombo.set_active(0)
69 self._serviceCombo.show()
72 self._dialog.set_transient_for(parentWindow)
73 self._dialog.set_default_response(gtk.RESPONSE_OK)
74 response = self._dialog.run()
75 if response != gtk.RESPONSE_OK:
76 raise RuntimeError("Login Cancelled")
78 username = self._usernameEntry.get_text()
79 password = self._passwordEntry.get_text()
80 self._passwordEntry.set_text("")
84 itr = self._serviceCombo.get_active_iter()
85 serviceId = int(self._serviceList.get_value(itr, 0))
86 self._serviceList.clear()
87 return serviceId, username, password
89 def _on_loginbutton_clicked(self, *args):
90 self._dialog.response(gtk.RESPONSE_OK)
92 def _on_loginclose_clicked(self, *args):
93 self._dialog.response(gtk.RESPONSE_CANCEL)
96 class ErrorDisplay(object):
98 def __init__(self, widgetTree):
99 super(ErrorDisplay, self).__init__()
100 self.__errorBox = widgetTree.get_widget("errorEventBox")
101 self.__errorDescription = widgetTree.get_widget("errorDescription")
102 self.__errorClose = widgetTree.get_widget("errorClose")
103 self.__parentBox = self.__errorBox.get_parent()
105 self.__errorBox.connect("button_release_event", self._on_close)
108 self.__parentBox.remove(self.__errorBox)
110 def push_message_with_lock(self, message):
111 gtk.gdk.threads_enter()
113 self.push_message(message)
115 gtk.gdk.threads_leave()
117 def push_message(self, message):
118 if 0 < len(self.__messages):
119 self.__messages.append(message)
121 self.__show_message(message)
123 def pop_message(self):
124 if 0 < len(self.__messages):
125 self.__show_message(self.__messages[0])
126 del self.__messages[0]
128 self.__hide_message()
130 def _on_close(self, *args):
133 def __show_message(self, message):
134 self.__errorDescription.set_text(message)
135 self.__parentBox.pack_start(self.__errorBox, False, False)
136 self.__parentBox.reorder_child(self.__errorBox, 1)
138 def __hide_message(self):
139 self.__errorDescription.set_text("")
140 self.__parentBox.remove(self.__errorBox)
143 class MessageBox(gtk.MessageDialog):
145 def __init__(self, message):
147 gtk.MessageDialog.__init__(
150 gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
155 self.set_default_response(gtk.RESPONSE_OK)
156 self.connect('response', self._handle_clicked)
158 def _handle_clicked(self, *args):
162 class MessageBox2(gtk.MessageDialog):
164 def __init__(self, message):
166 gtk.MessageDialog.__init__(
169 gtk.DIALOG_DESTROY_WITH_PARENT,
174 self.set_default_response(gtk.RESPONSE_OK)
175 self.connect('response', self._handle_clicked)
177 def _handle_clicked(self, *args):