From: Lucas Di P. <ldi...@us...> - 2005-12-26 03:42:41
|
Update of /cvsroot/bacula/bacula/src/pygtk-console In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18145 Modified Files: Controllers.py Models.py Views.py pygtk-console.glade Log Message: A simple command history was implemented on text console Index: Controllers.py =================================================================== RCS file: /cvsroot/bacula/bacula/src/pygtk-console/Controllers.py,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- Controllers.py 24 Dec 2005 14:24:16 -0000 1.11 +++ Controllers.py 26 Dec 2005 03:42:32 -0000 1.12 @@ -173,6 +173,16 @@ self.view.reset_prompt() return + def on_input_entry_key_press_event(self, widget, event): + ''' + Detects up/down arrow key press to retrieve old commands + ''' + if event.keyval in (gtk.keysyms.Up, gtk.keysyms.KP_Up): + self.model.cmd_history_up() + elif event.keyval in (gtk.keysyms.Down, gtk.keysyms.KP_Down): + self.model.cmd_history_down() + return + def on_toolbutton_disconnect_clicked(self, widget): '''Ask the model to disconnect from the Director''' self.model.disconnect() @@ -245,6 +255,14 @@ self.view.reset_messages_tab() return + def property_history_index_change_notification(self, model, old, new): + ''' + Retrieves old command to input widget + ''' + if new != 0: + self.view.retrieve_command(self.model.cmd_history[new]) + return + def property_input_change_notification(self, model, old, new): ''' Input property changed, execute command. Index: pygtk-console.glade =================================================================== RCS file: /cvsroot/bacula/bacula/src/pygtk-console/pygtk-console.glade,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- pygtk-console.glade 24 Dec 2005 14:24:16 -0000 1.9 +++ pygtk-console.glade 26 Dec 2005 03:42:33 -0000 1.10 @@ -726,6 +726,7 @@ <property name="invisible_char">*</property> <property name="activates_default">False</property> <signal name="activate" handler="on_input_activate"/> + <signal name="key_press_event" handler="on_input_entry_key_press_event" last_modification_time="Mon, 26 Dec 2005 03:07:11 GMT"/> </widget> <packing> <property name="padding">0</property> Index: Models.py =================================================================== RCS file: /cvsroot/bacula/bacula/src/pygtk-console/Models.py,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Models.py 24 Dec 2005 14:24:16 -0000 1.14 +++ Models.py 26 Dec 2005 03:42:33 -0000 1.15 @@ -126,7 +126,9 @@ 'show_stats' : False, 'show_messages' : False, 'at_prompt' : False, + 'history_index' : 0, # Pointer to cmd_history } + cmd_history = [] # Saves all typed commands application = None director = None status_updater = None @@ -149,6 +151,22 @@ self.director.update() return True + def cmd_history_up(self): + ''' + Places the history_index up position up + ''' + if abs(self.history_index) < len(self.cmd_history): + self.history_index -= 1 + return + + def cmd_history_down(self): + ''' + Places the history_index up position up + ''' + if abs(self.history_index) > 1: + self.history_index += 1 + return + def update_messages(self): ''' Ask for pending messages @@ -192,6 +210,8 @@ def execute(self, command): '''Send a command to the director''' if self.director.is_connected(): + self.cmd_history.append(command) + self.history_index = 0 self.director.execute(command, self._cb_execute, priority=True, answer=self.at_prompt) self.at_prompt = False Index: Views.py =================================================================== RCS file: /cvsroot/bacula/bacula/src/pygtk-console/Views.py,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- Views.py 24 Dec 2005 14:24:16 -0000 1.8 +++ Views.py 26 Dec 2005 03:42:33 -0000 1.9 @@ -117,6 +117,13 @@ raise "ERROR: '%s' is not an attribute" % attr pass + def retrieve_command(self, command): + ''' + Show command on console input widget + ''' + self['input-entry'].set_text(command) + return + def reset_prompt(self): '''Empty the prompt widget''' self['input-entry'].set_text('') |