~ubuntu-branches/ubuntu/maverick/pybackpack/maverick

« back to all changes in this revision

Viewing changes to pybackpack/gui.py

  • Committer: Bazaar Package Importer
  • Author(s): Andy Price
  • Date: 2008-09-26 21:24:51 UTC
  • mfrom: (1.1.4 upstream) (4.1.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20080926212451-esi1j8iyg8mtpfvm
Tags: 0.5.6-1
* New upstream release
* debian/control: remove 'A' from the short description
* debian/pyversions created (Python >= 2.5 is required now)
* Upstream now installs translations
  - No changes needed: cdbs handles translations and pulls in gettext

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
        def __init__(self, backupsets):
31
31
                self.tmpdir = "/tmp"
32
32
                
33
 
                try:
34
 
                    self.widgets = gtk.glade.XML("%s/gui.glade" % os.path.dirname(__file__))
35
 
                except RuntimeError, e:
36
 
                    dlg = gtk.MessageDialog(
37
 
                        None,
38
 
                        gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
39
 
                        _("Unable to start %(progname)s:\n%(error)s") % {'progname':version.APPNAME, 'error':e})
40
 
                    dlg.connect("response", lambda w: gtk.main_quit())
41
 
                    sys.exit(1)
 
33
                self.widgets = gtk.glade.XML("%s/gui.glade" % os.path.dirname(__file__))
 
34
                self.win_main = self.widgets.get_widget("window_main")
42
35
 
43
36
                self.widgets.signal_autoconnect(self)
44
37
                self.widgets.get_widget('set_destination').set_model(
49
42
                self.backupsets.add_change_hook(self.refresh_set_list)
50
43
                self.seteditor = SetEditor(self.backupsets)
51
44
                self.statuswin = StatusWindow()
52
 
                self.dialogs = dialogs.Dialogs(self.widgets.get_widget('window_main'))
 
45
                self.cdprogress = CDProgressWindow(self.win_main)
 
46
                self.cdprogress.set_response_cb(self.cdprogress_response_cb)
 
47
                self.dialogs = dialogs.Dialogs(self.win_main)
53
48
 
54
49
                # populate the backup set list on the main window
55
50
                self.widgets.get_widget('treeview_backup_sets').set_model(
71
66
                        _("To begin, you need to create a new backup set. Click the 'New' button to get started."))
72
67
 
73
68
                # other widget initialisation
74
 
                self.widgets.get_widget('window_main').set_title(_("File Backup Manager"))
 
69
                self.win_main.set_title(_("File Backup Manager"))
75
70
                self.widgets.get_widget('lbl_restore_help').set_text(
76
71
                    self.widgets.get_widget('lbl_restore_help').get_text().
77
72
                    replace(r'%s', version.APPPATH))
165
160
                        self.dialogs.showerror(_("You cannot delete this set."))
166
161
                        return True
167
162
                        
168
 
                dlg = gtk.MessageDialog(self.widgets.get_widget('window_main'),
 
163
                dlg = gtk.MessageDialog(self.win_main,
169
164
                        gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_YES_NO,
170
165
                        _("Are you sure you wish to delete the backup set '%s'?\n"
171
166
                          "Deleting this backup set will not delete any previous backups, "
177
172
        def on_delete_set_dialog_response(self, widget, response, set):
178
173
                if response == gtk.RESPONSE_YES:
179
174
                        set.delete()
180
 
                        print "Removing..."
181
175
                        self.backupsets.remove(set)
182
176
                        self.widgets.get_widget('backup_controls').set_sensitive(False)
183
177
                        self.widgets.get_widget('button_delete_set').set_sensitive(False)
217
211
                self.widgets.get_widget('lbl_status').set_text(_("Starting backup..."))
218
212
                self.widgets.get_widget('notebook1').set_sensitive(False)
219
213
                self.widgets.get_widget('menubar1').set_sensitive(False)
220
 
                self.widgets.get_widget('window_main').window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
 
214
                self.win_main.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
221
215
                while gtk.events_pending():
222
216
                        gtk.main_iteration()
223
217
                try:
230
224
                finally:
231
225
                        self.widgets.get_widget('notebook1').set_sensitive(True)
232
226
                        self.widgets.get_widget('menubar1').set_sensitive(True)
233
 
                        self.widgets.get_widget('window_main').window.set_cursor(None)  
 
227
                        self.win_main.window.set_cursor(None)   
234
228
 
235
229
        def show_progress(self, progress=0):
236
230
                self.widgets.get_widget('progressbar1').set_fraction(progress/100)
301
295
                isomaker = Mkisofs()
302
296
                isomaker.set_progress_hook(self.show_progress)
303
297
                isomaker.create_iso(dest_path, isopath)
304
 
                if isomaker.get_retval() != 0:
 
298
                isoret = isomaker.get_retval()
 
299
                if isoret != 0:
 
300
                        errmsg = os.strerror(isoret)
305
301
                        self.widgets.get_widget('lbl_status').set_text(_("Ready."))
306
302
                        self.widgets.get_widget('progressbar1').set_fraction(0)
307
 
                        self.statuswin.addmsg(_("Backup failed; could not create CD image %s\n") % isopath)
 
303
                        msg = _("Backup failed; could not create CD image %(filename)s: %(error)s\n") %\
 
304
                                        {'filename':isopath, 'error':errmsg}
 
305
                        self.statuswin.addmsg(msg)
 
306
                        self.dialogs.showerror(msg)
308
307
                        return True     
309
308
 
310
309
                # ISO is done, let's write that bad boy...
324
323
                cdburner = nautilusburn.Recorder()
325
324
                track = nautilusburn.DataTrack()
326
325
                track.filename = isopath
327
 
                cdburner.connect('progress-changed', self.on_cdburn_progress_changed)
328
 
                self.widgets.get_widget('window_progress').set_transient_for(self.widgets.get_widget('window_main'))
329
 
                self.widgets.get_widget('window_progress').show()
330
 
                burn_result = cdburner.write_tracks(drive, [track], drive.get_max_speed_write(), nautilusburn.RECORDER_WRITE_EJECT)
 
326
                cdburner.connect('progress-changed', self.cdprogress.on_cdburn_progress_changed)
 
327
                self.cdprogress.show()
 
328
                burn_result = cdburner.write_tracks(drive, [track],
 
329
                                drive.get_max_speed_write(),
 
330
                                nautilusburn.RECORDER_WRITE_EJECT)
331
331
                if burn_result != nautilusburn.RECORDER_RESULT_FINISHED:
332
 
                        self.on_window_progress_response(gtk.RESPONSE_OK)
 
332
                        print burn_result
 
333
                        self.cdprogress.hide()
 
334
                        self.cdprogress.reset()
333
335
                        self.dialogs.showerror(_("An error occurred while burning the CD."))
334
336
                        self.widgets.get_widget('lbl_status').set_text("Ready.")
335
337
                        self.widgets.get_widget('progressbar1').set_fraction(0)
570
572
                self.statuswin.addmsg(_("Backup source analysis complete."))
571
573
                return (True, filecount)
572
574
 
573
 
        def on_window_progress_response(self, widget, response=None):
574
 
                self.widgets.get_widget('window_progress').hide()
575
 
                self.widgets.get_widget('prog_button').set_sensitive(False)
576
 
                self.widgets.get_widget('prog_status').set_markup("<i>"+_("Waiting for CD...")+"</i>")
577
 
                self.widgets.get_widget('prog_bar').set_fraction(0)
578
 
                self.widgets.get_widget('prog_bar').set_text("")
 
575
        def cdprogress_response_cb(self, response):
 
576
                self.cdprogress.reset()
579
577
        
580
578
        def on_backup_local_dest_button_clicked(self, event):
581
579
                filechooser = FileChooser()
862
860
        ##########################
863
861
        ##     MISC HANDLERS    ##
864
862
        ##########################
865
 
        def on_cdburn_progress_changed(self, recorder, fract, somethingelse):
866
 
                if fract > 0:
867
 
                        self.widgets.get_widget('prog_status').set_markup("<i>"+_("Burning CD...")+"</i>")
868
 
                        self.widgets.get_widget('prog_bar').set_fraction(fract)
869
 
                        self.widgets.get_widget('prog_bar').set_text("%d%%" % (fract*100))
870
 
                else:
871
 
                        self.widgets.get_widget('prog_status').set_markup("<i>"+_("Waiting for CD...")+"</i>")
872
 
                        self.widgets.get_widget('prog_bar').set_fraction(0)
873
 
                        self.widgets.get_widget('prog_bar').set_text("0%")
874
 
 
875
 
                if fract == 1:
876
 
                        self.widgets.get_widget('prog_button').set_sensitive(True)
877
 
                        self.widgets.get_widget('prog_status').set_markup("<i>"+_("Finished.")+"</i>")
878
 
                gtk.main_iteration()
879
 
        
880
863
        def on_recursive_copy_step(self, file):
881
864
                self.current_count += 1.0
882
865
                self.widgets.get_widget('progressbar1').set_fraction(self.current_count/self.total_count)
927
910
                                self.widgets.get_widget('cmb_backup_burner').set_active(0)
928
911
                                self.widgets.get_widget('cmb_backup_burner').set_sensitive(True)
929
912
                        
930
 
        def refresh_set_list(self):
 
913
        def refresh_set_list(self, selected=None):
931
914
                treeview = self.widgets.get_widget('treeview_backup_sets')
932
915
                setlist = treeview.get_model()
933
916
                setlist.clear()
940
923
                                set_type = gtk.STOCK_DIRECTORY
941
924
                        setlist.append([treeview.render_icon(set_type, gtk.ICON_SIZE_MENU, "TreeView"), 
942
925
                                                        bset.name, bset])
 
926
                if selected is not None:
 
927
                        self.select_set(selected.name)
 
928
                else:
 
929
                        self.widgets.get_widget('button_do_backup').set_sensitive(False)
 
930
 
943
931
                
944
932
        def select_set(self, setname):
945
933
                """Iterates through the set list and places the sets treeview cursor
967
955
 
968
956
                gtk.main_quit()
969
957
 
 
958
 
 
959
 
 
960
class CDProgressWindow():
 
961
        """
 
962
        The CD burning progress window.
 
963
        """
 
964
        def __init__(self, parent):
 
965
                """
 
966
                Load the GUI widgets and connect signal handlers. The parent
 
967
                argument is the parent window of this CDProgressWindow.
 
968
                """
 
969
                gladef = "%s/progress_window.glade" % os.path.dirname(__file__)
 
970
                self.widgets = gtk.glade.XML(gladef)
 
971
                self.widgets.signal_autoconnect(self)
 
972
                self.widgets.get_widget("window_progress").set_transient_for(parent)
 
973
        
 
974
        def show(self):
 
975
                """
 
976
                Makes the window visible.
 
977
                """
 
978
                self.widgets.get_widget("window_progress").show()
 
979
 
 
980
        def hide(self):
 
981
                """
 
982
                Hides this CD progress window
 
983
                """
 
984
                self.widgets.get_widget("window_progress").hide()
 
985
        
 
986
        def reset(self):
 
987
                """
 
988
                Reset the GUI widgets to their starting states.
 
989
                """
 
990
                self.widgets.get_widget('prog_button').set_sensitive(False)
 
991
                self.widgets.get_widget('prog_status').set_markup("<i>"+_("Waiting for CD...")+"</i>")
 
992
                self.widgets.get_widget('prog_bar').set_fraction(0)
 
993
                self.widgets.get_widget('prog_bar').set_text("")
 
994
 
 
995
        def set_response_cb(self, cb):
 
996
                """
 
997
                Set a callback function, which must accept one argument, which
 
998
                will be called when a button is clicked by the user.
 
999
                """
 
1000
                self.response_cb = cb
 
1001
 
 
1002
        def on_cdburn_progress_changed(self, recorder, fract, somethingelse):
 
1003
                """
 
1004
                Callback function to accept the progress reported by
 
1005
                the CD burner.
 
1006
                """
 
1007
                if fract > 0:
 
1008
                        self.widgets.get_widget('prog_status').set_markup("<i>"+_("Burning CD...")+"</i>")
 
1009
                        self.widgets.get_widget('prog_bar').set_fraction(fract)
 
1010
                        self.widgets.get_widget('prog_bar').set_text("%d%%" % (fract*100))
 
1011
                else:
 
1012
                        self.widgets.get_widget('prog_status').set_markup("<i>"+_("Waiting for CD...")+"</i>")
 
1013
                        self.widgets.get_widget('prog_bar').set_fraction(0)
 
1014
                        self.widgets.get_widget('prog_bar').set_text("0%")
 
1015
 
 
1016
                if fract == 1:
 
1017
                        self.widgets.get_widget('prog_button').set_sensitive(True)
 
1018
                        self.widgets.get_widget('prog_status').set_markup("<i>"+_("Finished.")+"</i>")
 
1019
                gtk.main_iteration()
 
1020
 
 
1021
        def on_window_progress_response(self, widget, response=None):
 
1022
                """
 
1023
                A callback function to be attached to the nautilusburn progress
 
1024
                signal.
 
1025
                """
 
1026
                self.hide()
 
1027
                if callable(self.response_cb):
 
1028
                        self.response_cb(response)