Reporting errors and no-commands-exposed.

This commit is contained in:
Tomasz Melcer 2006-06-23 18:13:35 +00:00
parent 145cdbbf40
commit ce9cbe6f21
2 changed files with 229 additions and 134 deletions

View File

@ -92,26 +92,7 @@
</child>
<child>
<widget class="GtkLabel" id="label250">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
<placeholder/>
</child>
<child>
@ -157,6 +138,41 @@
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox2957">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkButton" id="check_commands_1_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Check once more</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_check_commands_1_button_clicked" last_modification_time="Fri, 23 Jun 2006 18:05:14 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
@ -165,26 +181,7 @@
</child>
<child>
<widget class="GtkLabel" id="label251">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
<placeholder/>
</child>
<child>
@ -245,45 +242,79 @@
</child>
<child>
<widget class="GtkLabel" id="label252">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
<placeholder/>
</child>
<child>
<widget class="GtkLabel" id="label254">
<widget class="GtkVBox" id="no_commands_stage_vbox">
<property name="visible">True</property>
<property name="label" translatable="yes">This jabber entity doesn't expose any commands.</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label263">
<property name="visible">True</property>
<property name="label" translatable="yes">This jabber entity does not expose any commands.</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkHBox" id="hbox2956">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkButton" id="check_commands_2_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Check once more</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_check_commands_2_button_clicked" last_modification_time="Fri, 23 Jun 2006 18:05:31 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
@ -292,45 +323,64 @@
</child>
<child>
<widget class="GtkLabel" id="label255">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
<placeholder/>
</child>
<child>
<widget class="GtkLabel" id="label257">
<widget class="GtkVBox" id="error_stage_vbox">
<property name="visible">True</property>
<property name="label" translatable="yes">An error has occured.</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label257">
<property name="visible">True</property>
<property name="label" translatable="yes">An error has occured:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="error_description_label">
<property name="visible">True</property>
<property name="label" translatable="yes">Error description...</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">True</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
@ -339,26 +389,7 @@
</child>
<child>
<widget class="GtkLabel" id="label256">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
<placeholder/>
</child>
</widget>
<packing>

View File

@ -56,7 +56,8 @@ class CommandWindow:
'execute_button','stages_notebook',
'retrieving_commands_stage_vbox',
'command_list_stage_vbox','command_list_vbox',
'sending_form_stage_vbox'):
'sending_form_stage_vbox','no_commands_stage_vbox',
'error_stage_vbox', 'error_description_label'):
self.__dict__[name] = self.xml.get_widget(name)
# setting initial stage
@ -78,6 +79,7 @@ class CommandWindow:
def on_forward_button_clicked(self, *anything): pass
def on_execute_button_clicked(self, *anything): pass
def on_adhoc_commands_window_destroy(self, *anything): pass
def do_nothing(self, *anything): pass
# stage 1: waiting for command list
def stage1(self):
@ -142,10 +144,16 @@ class CommandWindow:
self.command_list_vbox.pack_end(radio, expand=False)
self.command_list_vbox.show_all()
self.stage_finish = self.stage_finish
self.stage_finish = self.stage2_finish
self.on_cancel_button_clicked = self.stage2_on_cancel_button_clicked
self.on_forward_button_clicked = self.stage2_on_forward_button_clicked
def stage2_finish(self):
'''Remove widgets we created.'''
def remove_widget(widget):
self.command_list_vbox.remove(widget)
self.command_list_vbox.foreach(remove_widget)
def stage2_on_cancel_button_clicked(self):
self.stage_finish()
self.window.destroy()
@ -153,6 +161,58 @@ class CommandWindow:
def stage2_on_forward_button_clicked(self):
pass
def on_check_commands_1_button_clicked(self, widget):
self.stage1()
# stage 4: no commands are exposed
def stage4(self):
'''Display the message. Wait for user to close the window'''
# close old stage
self.stage_finish()
self.stages_notebook.set_current_page(
self.stages_notebook.page_num(
self.no_commands_stage_vbox))
self.cancel_button.set_sensitive(True)
self.back_button.set_sensitive(False)
self.forward_button.set_sensitive(False)
self.execute_button.set_sensitive(False)
self.stage_finish = self.do_nothing
self.on_cancel_button_clicked = self.stage4_on_cancel_button_clicked
def stage4_on_cancel_button_clicked(self):
self.window.destroy()
def on_check_commands_2_button_clicked(self, widget):
self.stage1()
# stage 5: an error has occured
def stage5(self, error):
'''Display the error message. Wait for user to close the window'''
# close old stage
self.stage_finish()
assert isinstance(error, unicode)
self.stages_notebook.set_current_page(
self.stages_notebook.page_num(
self.error_stage_vbox))
self.cancel_button.set_sensitive(True)
self.back_button.set_sensitive(False)
self.forward_button.set_sensitive(False)
self.execute_button.set_sensitive(False)
self.error_description_label.set_text(error)
self.stage_finish = self.do_nothing
self.on_cancel_button_clicked = self.stage5_on_cancel_button_clicked
def stage5_on_cancel_button_clicked(self):
self.window.destroy()
# helpers to handle pulsing in progressbar
def setup_pulsing(self, progressbar):
'''Set the progressbar to pulse. Makes a custom
@ -184,14 +244,18 @@ class CommandWindow:
# is error => error stage
error = response.getError()
if error is not None:
pass
# extracting error description from xmpp/protocol.py
errorname=xmpp.NS_STANZAS + ' ' + str(error)
errordesc=xmpp.ERRORS[errorname][2]
self.stage5(errordesc.decode('utf-8'))
return
# no commands => no commands stage
# commands => command selection stage
items = response.getTag('query').getTags('item')
if len(items)==0:
self.commandlist = []
self.stage2() # stageX, where X is the number for error page
self.stage4()
else:
self.commandlist = [(t.getAttr('node'), t.getAttr('name')) for t in items]
self.stage2()