def cb_change_local_dir(self, widget=None, data=None): """ Called when local part is chosen """ p_tree_model = get_widget_r(self, "combo_image").get_model() p_tree_model.clear() for disk in get_parts().values(): for part in disk['parts'].values(): if part['name'] == self.get_part(): for directory in part['dirs']: full_dir = os.path.join(part['mountpoint'], directory) try: for image in os.listdir(full_dir): image_path = os.path.join(full_dir, image) if os.path.isdir(image_path): if lbx_lrs_image.is_lrs_image(image_path): img = lbx_lrs_image.get_image_stats( image_path) display = "%s (%s)" % \ ( img['name'], lbx_utils.human_readable( img['size'] ) ) p_tree_model.append( (display, image_path)) except OSError: pass get_widget_r(self, "combo_image").set_active(p_tree_model.__len__() - 1) get_widget_r(self, "navbutton_1").set_sensitive(True)
def __init__(self, book=None): """ init page""" LbxPage.__init__(self, "svg_name", beam_text.titles['svg_name'], beam_text.summaries['svg_name'], book) # to pre-fill fields hostname = gethostname() date = datetime.now().strftime("%Y-%d-%m %H:%M:%S") label_name = gtk.Label(_("Name:")) label_desc = gtk.Label(_("Description:")) gtk.Misc.set_alignment(label_name, 1, 0) gtk.Misc.set_alignment(label_desc, 1, 0) entry_name = gtk.Entry() entry_name.set_name('entry_name') entry_name.connect("changed", self._cb_alter_text) entry_name.set_text(_("%s %s") % (hostname, date)) entry_desc = gtk.Entry() entry_desc.set_name('entry_desc') entry_desc.set_text(_("Image of %s on %s") % (hostname, date)) align1 = gtk.Alignment(1, 0, 1, 1) align1.set_padding(0, 0, 5, 10) align1.add(label_name) align2 = gtk.Alignment(1, 0, 1, 1) align2.set_padding(0, 0, 5, 10) align2.add(label_desc) align3 = gtk.Alignment(0, 0, 1, 1) align3.set_padding(0, 0, 5, 10) align3.add(entry_name) align4 = gtk.Alignment(0, 0, 1, 1) align4.set_padding(0, 0, 5, 10) align4.add(entry_desc) table = gtk.Table(2, 2, False) table.attach(align1, 0, 1, 0, 1, gtk.SHRINK | gtk.FILL, gtk.SHRINK) table.attach(align2, 0, 1, 1, 2, gtk.SHRINK | gtk.FILL, gtk.SHRINK) table.attach(align3, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.SHRINK) table.attach(align4, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.SHRINK) self.get_contentbox().pack_start(table, True, True, 5) self.get_buttonbox().pack_start( LbxNavButton(((_("<b><u>P</u></b>revious"), 'gtk-go-back'), (_("<b><u>N</u></b>ext"), 'gtk-go-forward'))), False, True) get_widget_r(self, "navbutton_0").add_accelerator("clicked", self.book.accel_group, ord(_('P')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").add_accelerator("clicked", self.book.accel_group, ord(_('N')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
def cb_choose_nfs(self, widget=None, data=None): """ called when NFS (network ?) is choosen""" if widget.get_active(): # button became active, disable others get_widget_r(self, "button_usb").set_active(False) get_widget_r(self, "first_label").set_text(_("Server")) get_widget_r(self, "second_label").set_text(_("Share")) get_widget_r(self, "third_label").set_text(_("Directory")) get_widget_r(self, "third_label").set_text(_("Image"))
def _cb_refresh_backupdata(self, source, condition): """ refresh progress window using collected data""" (myconnection, addr) = source.accept() command = lrs_get_next_tocken(myconnection) data = lrs_get_next_tockens(myconnection) if (command == "init_backup"): self.backupdata['source'] = data[0] self.backupdata['target'] = data[1] self.backupdata['totalblocks'] = int(data[2]) self.backupdata['totalbytes'] = int(data[2]) * 512 self.backupdata['usedblocks'] = int(data[3]) self.backupdata['usedbytes'] = int(data[3]) * 512 self.backupdata['tool'] = data[4] self.backupdata['startbytes'] = 0 self.backupdata['currentbytes'] = self.backupdata['startbytes'] self.backupdata['lastbytes'] = self.backupdata['startbytes'] self.backupdata['starttime'] = time() self.backupdata['lasttime'] = self.backupdata['starttime'] self.backupdata['currenttime'] = self.backupdata['starttime'] elif (command == "init_restore"): self.backupdata['source'] = data[0] self.backupdata['target'] = data[1] self.backupdata['usedbytes'] = int(data[3]) * 1024 self.backupdata['startbytes'] = 0 self.backupdata['currentbytes'] = self.backupdata['startbytes'] self.backupdata['lastbytes'] = self.backupdata['startbytes'] self.backupdata['starttime'] = time() self.backupdata['lasttime'] = self.backupdata['starttime'] self.backupdata['currenttime'] = self.backupdata['starttime'] elif (command == "refresh_file"): self.backupdata['source'] = data[0] self.backupdata['target'] = data[3] elif (command == "refresh_backup_progress"): self.backupdata['currentbytes'] = int(data[0]) self.backupdata['currenttime'] = time() elif (command == "close"): self.backupdata['currentbytes'] = self.backupdata['usedbytes'] elif (command == "misc_error"): lbx_error(data[0], data[1]) lrs_send_ack(myconnection) get_widget_r(self, "book").show_page("select_op") return True elif (command == "backup_write_error"): lbx_error('Error', command) lrs_send_ack(myconnection) return True else: lbx_error(command, "UNKNOWN CLIENT COMMAND : %s" % command) lrs_send_ack(myconnection) self._cb_halt_backup() get_widget_r(self, "book").show_page("select_op") return True lrs_send_ack(myconnection) return True
def cb_change_local_vol(self, widget=None, data=None): """ Called when storage method is chosen """ p_tree_model = get_widget_r(self, "combo_part").get_model() p_tree_model.clear() for disk in get_parts().values(): if (disk['name'] == self.get_vol()): for part in disk['parts'].values(): if ('mountpoint' in part.keys()): p_tree_model.append( ('%s (%s)' % (part['name'], part['desc']), part['name'])) get_widget_r(self, "combo_part").set_active(p_tree_model.__len__() - 1)
def cb_change_local_part(self, widget=None, data=None): """ Called when local volume is chosen """ p_tree_model = get_widget_r(self, "combo_dir").get_model() p_tree_model.clear() for disk in get_parts().values(): for part in disk['parts'].values(): if part['name'] == self.get_part(): p_tree_model.append(("(racine)", "")) for directory in part['dirs']: p_tree_model.append((directory, directory)) get_widget_r(self, "combo_dir").set_active(p_tree_model.__len__() - 1) get_widget_r(self, "navbutton_1").set_sensitive(True)
def _cb_toggle_button(self, widget=None, data=None): """ callback called when a box is (un)checked """ if self.mode == 'svg': # SVG mode, add to selection unckecked buttons if not widget.get_active(): if data not in self.selected_parts: self.add_part_to_selection(data) self.count_ckecked -= 1 if self.count_ckecked == 0: get_widget_r(self, "navbutton_1").set_sensitive(False) else: self.del_part_from_selection(data) self.count_ckecked += 1 if self.count_ckecked == 1: get_widget_r(self, "navbutton_1").set_sensitive(True) elif self.mode == 'rst': # RST mode, checked button are uncommented, # unckecked buttons are commented if not widget.get_active( ): # button goes from checked to unckecked # so comment partition self.del_part_from_selection(data) self.add_part_to_selection('#%s' % data) self.count_ckecked -= 1 if self.count_ckecked == 0: get_widget_r(self, "navbutton_1").set_sensitive(False) else: # button goes from unchecked to ckecked # so uncomment partition self.del_part_from_selection('#%s' % data) self.add_part_to_selection(data) self.count_ckecked += 1 if self.count_ckecked == 1: get_widget_r(self, "navbutton_1").set_sensitive(True)
def get_image(self): """ get selected image""" combo_image = get_widget_r(self, "combo_image") model = combo_image.get_model() active = combo_image.get_active() if (active > -1): return model[active][1] return None
def get_dir(self): """ get selected dir""" combo_vol = get_widget_r(self, "combo_dir") model = combo_vol.get_model() active = combo_vol.get_active() if (active > -1): return model[active][1] return None
def get_part(self): """ get selected part""" combo_part = get_widget_r(self, "combo_part") model = combo_part.get_model() active = combo_part.get_active() if (active > -1): return model[active][1] return None
def _cb_show(self, widget=None, data=None): """ refresh summary when shown""" widget = widget # cheats pylint summary = get_widget_r(self, "summary") # TODO: handle rst mode if self.mode == 'svg': summary.set_text(_("Image « <b><u>%s</u></b> »\nstored in <b>%s</b> ") % \ (self.book.get_page("svg_name").get_imagename(), self.book.get_page("svg_kind").get_target()) ) summary.set_justify(gtk.JUSTIFY_CENTER) summary.set_use_markup(True)
def cb_display_dialog(self, widget=None, data=None): """ called when USB is chosen""" dialog = gtk.FileChooserDialog(buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) dialog.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) dialog.set_local_only(False) dialog.set_select_multiple(False) dialog.set_default_response(gtk.RESPONSE_OK) response = dialog.run() if response == gtk.RESPONSE_OK: self.folder_name = dialog.get_filename() widget.set_label(self.folder_name) get_widget_r(self, "navbutton_1").set_sensitive(True) elif response == gtk.RESPONSE_CANCEL: widget.set_label( _('Click here to choose folder where the image will be written' )) dialog.destroy()
def _cb_alter_text(self, widget=None): """ called to (dis-)able next page access""" if len(widget.get_text()) < 1: if get_widget_r(self, "navbutton_1") != None: get_widget_r(self, "navbutton_1").set_sensitive(False) else: if get_widget_r(self, "navbutton_1") != None: get_widget_r(self, "navbutton_1").set_sensitive(True)
def __init__(self, mode, book=None): """ init widget""" # init ancestor LbxPage.__init__(self, '%s_kind' % mode, beam_text.titles['%s_kind' % mode], beam_text.summaries['%s_kind' % mode], book) # button use to save on a local dir button = LbxImgButton(None, 'gtk-harddisk') button.set_name("button") button.connect("clicked", self.cb_display_dialog, None) if mode == 'svg': button.set_label( _('Click here to choose folder where the image will be written' )) else: button.set_label( _('Click here to choose folder where the image is stored')) # label box label_box = gtk.HBox() first_label = gtk.Label() first_label.set_name("first_label") if mode == 'svg': first_label.set_label("The image will be written in : ") else: first_label.set_label("The image will be read from : ") label_box.pack_start(first_label, False) label_box.pack_start(button, False) label_align = gtk.Alignment(0.5, 0.5, 0, 0) label_align.add(label_box) label_align.set_padding(0, 0, 10, 0) self.get_contentbox().pack_start(label_align, True, True, 5) self.get_buttonbox().pack_start( LbxNavButton(((_("<b><u>P</u></b>revious"), 'gtk-go-back'), (_("<b><u>N</u></b>ext"), 'gtk-go-forward'))), False, False) get_widget_r(self, "navbutton_0").add_accelerator("clicked", self.book.accel_group, ord(_('P')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").add_accelerator("clicked", self.book.accel_group, ord(_('N')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").set_sensitive(False) self.set_no_show_all(True)
def __init__(self, mode, book=None): """ init page """ LbxPage.__init__(self, '%s_summary' % mode, beam_text.titles['%s_summary' % mode], beam_text.summaries['%s_summary' % mode], book) self.mode = mode summary = gtk.Label() summary.set_name("summary") align = gtk.Alignment(0, 1, 1, 1) align.add(summary) self.get_contentbox().pack_start(align, True, True) self.get_contentbox().pack_start(gtk.HSeparator(), False, False, 5) self.get_contentbox().pack_start( LbxNavButton(((_("<b><u>P</u></b>revious"), 'gtk-go-back'), (_("<b><u>G</u></b>o"), 'gtk-go-forward'))), False, True) get_widget_r(self, "navbutton_0").add_accelerator("clicked", self.book.accel_group, ord(_('P')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").add_accelerator("clicked", self.book.accel_group, ord(_('G')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) self.connect("show", self._cb_show, None) if self.mode == 'svg': get_widget_r(self, "navbutton_1").connect("clicked", self.launch_backup, None) elif self.mode == 'rst': get_widget_r(self, "navbutton_1").connect("clicked", self.launch_restore, None)
def __init__(self, mode, book=None): """ init page """ # init ancestor LbxPage.__init__(self, '%s_go' % mode, beam_text.titles['%s_go' % mode], beam_text.summaries['%s_go' % mode], book) # keep track of selected mode self.mode = mode # get labels # TODO: alternative labels when restoring label_src = gtk.Label(_("Partition currently backuped:")) label_dst = gtk.Label(_("Destination directory:")) label_rate = gtk.Label(_("Averate rate:")) label_eltime = gtk.Label(_("Elapsed time:")) label_remtime = gtk.Label(_("Remaining time:")) entry_src = gtk.Label() entry_src.set_name('%s_entry_src' % mode) entry_src.set_size_request(300, -1) entry_dst = gtk.Label() entry_dst.set_name('%s_entry_dst' % mode) entry_dst.set_size_request(300, -1) entry_rate = gtk.Label() entry_rate.set_name('%s_entry_rate' % mode) entry_rate.set_size_request(300, -1) entry_eltime = gtk.Label() entry_eltime.set_name('%s_entry_eltime' % mode) entry_eltime.set_size_request(300, -1) entry_remtime = gtk.Label() entry_remtime.set_name('%s_entry_remtime' % mode) entry_remtime.set_size_request(300, -1) align1 = gtk.Alignment(0.5, 0, 1, 1) align1.set_padding(0, 0, 10, 10) align1.add(entry_src) align2 = gtk.Alignment(0.5, 0, 1, 1) align2.set_padding(0, 0, 10, 10) align2.add(entry_dst) align3 = gtk.Alignment(0.5, 0, 1, 1) align3.set_padding(0, 0, 10, 10) align3.add(entry_rate) align4 = gtk.Alignment(0.5, 0, 1, 1) align4.set_padding(0, 0, 10, 10) align4.add(entry_eltime) align5 = gtk.Alignment(0.5, 0, 1, 1) align5.set_padding(0, 0, 10, 10) align5.add(entry_remtime) table = gtk.Table(2, 5, False) table.attach(label_src, 0, 1, 0, 1, gtk.SHRINK, gtk.SHRINK) table.attach(label_dst, 0, 1, 1, 2, gtk.SHRINK, gtk.SHRINK) table.attach(label_rate, 0, 1, 2, 3, gtk.SHRINK, gtk.SHRINK) table.attach(label_eltime, 0, 1, 3, 4, gtk.SHRINK, gtk.SHRINK) table.attach(label_remtime, 0, 1, 4, 5, gtk.SHRINK, gtk.SHRINK) table.attach(align1, 1, 2, 0, 1, gtk.SHRINK | gtk.FILL, gtk.SHRINK | gtk.FILL) table.attach(align2, 1, 2, 1, 2, gtk.SHRINK | gtk.FILL, gtk.SHRINK | gtk.FILL) table.attach(align3, 1, 2, 2, 3, gtk.SHRINK | gtk.FILL, gtk.SHRINK | gtk.FILL) table.attach(align4, 1, 2, 3, 4, gtk.SHRINK | gtk.FILL, gtk.SHRINK | gtk.FILL) table.attach(align5, 1, 2, 4, 5, gtk.SHRINK | gtk.FILL, gtk.SHRINK | gtk.FILL) # summon prog bar self.progress_bar = gtk.ProgressBar() self.progress_bar.set_name("%s_progress_bar" % mode) align_prog = gtk.Alignment(0.5, 0, 0.5, 1) align_prog.set_padding(0, 0, 10, 10) align_prog.add(self.progress_bar) self.get_contentbox().pack_start(table, True, True) self.get_contentbox().pack_start(align_prog, False, True, 5) # add the VBox itself self.connect("show", self._cb_show) self.get_contentbox().pack_start( LbxNavButton(((_("<b><u>C</u></b>ancel"), 'gtk-go-back'), (_("<b><u>Q</u></b>uit"), 'gtk-go-forward'))), False, True) get_widget_r(self, "navbutton_0").add_accelerator("clicked", self.book.accel_group, ord(_('C')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").add_accelerator("clicked", self.book.accel_group, ord(_('Q')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
def _cb_show(self, widget): """ Re-init progress bar when shown""" widget = widget # cheats pylint get_widget_r(self, "%s_progress_bar" % self.mode).set_text('') get_widget_r(self, "%s_progress_bar" % self.mode).set_fraction(0)
def __init__(self, mode, book=None): """ init widget""" # init ancestor LbxPage.__init__(self, '%s_kind' % mode, beam_text.titles['%s_kind' % mode], beam_text.summaries['%s_kind' % mode], book) # button use to save on a NFS share button_nfs = LbxImgToggleButton(_('NFS'), 'gtk-network') button_nfs.set_name("button_nfs") button_nfs.connect("clicked", self.cb_choose_nfs, None) button_nfs.set_active(False) # button use to save on a local dir button_usb = LbxImgToggleButton(_('<b><u>L</u></b>ocal'), 'gtk-harddisk') button_usb.set_name("button_usb") button_usb.connect("clicked", self.cb_choose_usb, None) button_usb.add_accelerator("clicked", self.book.accel_group, ord(_('L')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # button box button_box = gtk.HButtonBox() button_box.set_border_width(10) button_box.set_layout(gtk.BUTTONBOX_SPREAD) button_box.add(button_nfs) button_box.add(button_usb) # first control: Volume / server combo_vol = LbxComboBox(None, 200, 30, 10) combo_vol.set_name("combo_vol") combo_part = LbxComboBox(None, 200, 30, 10) combo_part.set_name("combo_part") combo_dir = LbxComboBox(None, 200, 30, 10) combo_dir.set_name("combo_dir") combo_image = LbxComboBox(None, 200, 30, 10) combo_image.set_name("combo_image") align1 = gtk.Alignment(0.5, 0, 0.5, 1) align1.set_padding(0, 0, 10, 10) align1.add(combo_vol) align2 = gtk.Alignment(0.5, 0, 0.5, 1) align2.set_padding(0, 0, 10, 10) align2.add(combo_part) align3 = gtk.Alignment(0.5, 0, 0.5, 1) align3.set_padding(0, 0, 10, 10) align3.add(combo_dir) align4 = gtk.Alignment(0.5, 0, 0.5, 1) align4.set_padding(0, 0, 10, 10) align4.add(combo_image) first_label = gtk.Label() first_label.set_name("first_label") second_label = gtk.Label() second_label.set_name("second_label") third_label = gtk.Label() third_label.set_name("third_label") fourth_label = gtk.Label() fourth_label.set_name("fourth_label") table_usb = gtk.Table(2, 4, False) table_usb.attach(first_label, 0, 1, 0, 1, gtk.SHRINK, gtk.SHRINK) table_usb.attach(second_label, 0, 1, 1, 2, gtk.SHRINK, gtk.SHRINK) table_usb.attach(third_label, 0, 1, 2, 3, gtk.SHRINK, gtk.SHRINK) table_usb.attach(fourth_label, 0, 1, 3, 4, gtk.SHRINK, gtk.SHRINK) table_usb.attach(align1, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL) table_usb.attach(align2, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL) table_usb.attach(align3, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL) table_usb.attach(align4, 1, 2, 3, 4, gtk.EXPAND | gtk.FILL, gtk.FILL) self.get_contentbox().pack_start(button_box, False) table_usb_align = gtk.Alignment(0.5, 0.5, 1, 1) table_usb_align.add(table_usb) table_usb_align.set_padding(0, 0, 10, 0) self.get_contentbox().pack_start(table_usb_align, True, True, 5) self.get_contentbox().pack_start(gtk.HSeparator(), False, False) self.get_buttonbox().pack_start( LbxNavButton(((_("<b><u>P</u></b>revious"), 'gtk-go-back'), (_("<b><u>N</u></b>ext"), 'gtk-go-forward'))), False, False) get_widget_r(self, "navbutton_0").add_accelerator("clicked", self.book.accel_group, ord(_('P')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").add_accelerator("clicked", self.book.accel_group, ord(_('N')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").set_sensitive(False) self.set_no_show_all(True) if mode == 'svg': fourth_label.set_no_show_all(True) align4.set_no_show_all(True)
def _cb_show(self, widget=None, data=None): """ init page """ if self.mode == 'rst': # restore move: summon widgets accel_int = 1 self.clear_selected_parts() container = get_widget_r(widget, "container") # clean container for child in container: child.destroy() self.count_checked = 0 # iterate over each part for (diskid, disk) in lbx_lrs_image.get_image_stats( self.book.get_page( "rst_kind").get_source())['disks'].items(): button_box = gtk.VButtonBox() button_box.set_layout(gtk.BUTTONBOX_SPREAD) if (accel_int < 10): button = LbxImgCheckButton( _("<b><u>%d</u></b>. Partition Table") % accel_int) button.add_accelerator("clicked", self.book.accel_group, ord('%d' % accel_int), 0, gtk.ACCEL_VISIBLE) else: button = LbxImgCheckButton( _("%d. Partition Table") % (accel_int)) accel_int += 1 button.set_active(1) self.count_ckecked += 1 self.add_part_to_selection(disk['line']) button_box.add(button) button.connect("clicked", self._cb_toggle_button, disk['line']) for (partid, part) in disk.items(): if type(partid) == type(1): if (accel_int < 10): button = LbxImgCheckButton( _("<b><u>%d</u></b>. Partition #%d: type %s (%s)" ) % (accel_int, partid + 1, part['kind'], lbx_utils.human_readable(part['size'], 'o'))) button.add_accelerator("clicked", self.book.accel_group, ord('%d' % accel_int), 0, gtk.ACCEL_VISIBLE) else: button = LbxImgCheckButton( _("%d. Partition type %d (%s)") % (accel_int, part['type'], lbx_utils.human_readable(part['size'], 'o'))) accel_int += 1 # toggle active if line is not commented out button.set_active(1) self.count_ckecked += 1 self.add_part_to_selection(part['line']) button_box.add(button) button.connect("clicked", self._cb_toggle_button, part['line']) frame = gtk.Frame( _("Disk %d: Available partitions") % (diskid + 1)) frame.add(button_box) container.pack_start(frame, True, True) self.get_contentbox().show_all()
def __init__(self, mode, book=None): LbxPage.__init__(self, '%s_part' % mode, beam_text.titles['%s_part' % mode], beam_text.summaries['%s_part' % mode], book) self.selected_parts = [] self.count_ckecked = 0 self.mode = mode self.count_checked = 0 # will contain our frames (one frame per disk) box = gtk.VBox() box.set_name("container") # TODO: factorize checkbox code gen accel_int = 1 count_disk = 0 if mode == "svg": # do a save: iterate over current parts for disk in get_parts().values(): if disk['parts'] == {}: continue button_box = gtk.VButtonBox() button_box.set_layout(gtk.BUTTONBOX_SPREAD) # iterate over each part for part in disk['parts'].values(): if part['display']: # part must be displayed if part['include']: # and is selectable if (accel_int < 10): button = LbxImgCheckButton( _("<b><u>%d</u></b>. Partition « %s »: %s (%s)" ) % ( accel_int, part['name'], part['desc'], lbx_utils.human_readable( part['size'], 'o'), )) button.add_accelerator("clicked", self.book.accel_group, ord('%d' % accel_int), 0, gtk.ACCEL_VISIBLE) else: button = LbxImgCheckButton( _("%d. Partition « %s »: %s (%s)") % ( accel_int, part['name'], part['desc'], lbx_utils.human_readable( part['size'], 'o'), )) accel_int += 1 button.set_active(1) self.count_ckecked += 1 self.del_part_from_selection( "%s:%s" % (count_disk, part['num'])) else: # not selectable: disable it button = LbxImgCheckButton( _("Partition « %s »: %s (%s)") % ( part['name'], part['desc'], lbx_utils.human_readable( part['size'], 'o'), )) button.set_sensitive(0) self.del_part_from_selection( "%s:%s" % (count_disk, part['num'])) self.add_part_to_selection( "%s:%s" % (count_disk, part['num'])) button_box.add(button) button.connect("clicked", self._cb_toggle_button, "%s:%s" % (count_disk, part['num'])) frame = gtk.Frame("%s « %s » (%s)" % \ (disk['desc'], disk['name'], lbx_utils.human_readable(disk['size']) ) ) framealign = gtk.Alignment(0, 0.5, 0, 0) framealign.add(button_box) framealign.set_padding(0, 0, 20, 0) frame.add(framealign) box.pack_start(frame, True, True) count_disk += 1 elif mode == 'rst': pass self.get_contentbox().pack_start(box, True, True) self.connect("show", self._cb_show, None) self.get_buttonbox().pack_start( LbxNavButton(((_("<b><u>P</u></b>revious"), 'gtk-go-back'), (_("<b><u>N</u></b>ext"), 'gtk-go-forward'))), False, False) get_widget_r(self, "navbutton_0").add_accelerator("clicked", self.book.accel_group, ord(_('P')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) get_widget_r(self, "navbutton_1").add_accelerator("clicked", self.book.accel_group, ord(_('N')), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
def get_imagename(self): """ return image name""" return get_widget_r(self, 'entry_name').get_text()
def _cb_refresh_backupdisplay(self): elapsed_bytes = \ self.backupdata['currentbytes'] - self.backupdata['lastbytes'] elapsed_time = \ self.backupdata['currenttime'] - self.backupdata['lasttime'] total_bytes = \ self.backupdata['currentbytes'] - self.backupdata['startbytes'] total_time = \ self.backupdata['currenttime'] - self.backupdata['starttime'] remaining_bytes = \ self.backupdata['usedbytes'] - self.backupdata['currentbytes'] try: remaining_time = total_time * ( float(self.backupdata['usedbytes']) / self.backupdata['currentbytes'] - 1) except ZeroDivisionError: remaining_time = 0 try: overall_rate = total_bytes / total_time except ZeroDivisionError: overall_rate = 0 try: instant_rate = elapsed_bytes / elapsed_time except ZeroDivisionError: instant_rate = 0 try: percent_prog = float(self.backupdata['currentbytes']) / \ self.backupdata['usedbytes'] * 100 except ZeroDivisionError: percent_prog = 0 for i in ('svg', 'rst'): get_widget_r(self, "%s_entry_src" % i).set_text( '%d min %02d secs (%s)' % \ ( total_time // 60, total_time % 60, lbx_utils.human_readable(self.backupdata['currentbytes']) ) ) get_widget_r(self, "%s_entry_src" % i).\ set_text(self.backupdata['source']) get_widget_r(self, "%s_entry_dst" % i).\ set_text(self.backupdata['target']) get_widget_r(self, "%s_entry_eltime" % i).set_text( '%d min %02d secs (%s)' % \ ( total_time // 60, total_time % 60, lbx_utils.human_readable(self.backupdata['currentbytes']) ) ) get_widget_r(self, "%s_entry_rate" % i).set_text( '%s (instant = %s)' % \ ( lbx_utils.human_readable(overall_rate, 'B/s'), lbx_utils.human_readable(instant_rate, 'B/s') ) ) get_widget_r(self, "%s_entry_remtime" % i).set_text( '%d min %02d secs (%s)' % \ ( remaining_time // 60, remaining_time % 60, lbx_utils.human_readable(remaining_bytes) ) ) self.lastbytes = 0 get_widget_r(self, "%s_progress_bar" % i).set_text( "Backupping %s : %d%%" % \ (self.backupdata['source'], percent_prog) ) get_widget_r(self, "%s_progress_bar" % i).set_fraction( float(percent_prog) / 100) self.backupdata['lasttime'] = self.backupdata['currenttime'] self.backupdata['lastbytes'] = self.backupdata['currentbytes'] return True
def get_imagedesc(self): """ return image desc""" return get_widget_r(self, 'entry_desc').get_text()
def __init__(self): """ init main window""" # init ancestor gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) book = LbxBook() book.pid = None book.set_name("book") # summons our pages book.add_page(PageSelectOp(book)) if (BEAM_SELECTOR_STYLE == 'button'): book.add_page(PageKindButton('svg', book)) elif (BEAM_SELECTOR_STYLE == 'folder'): book.add_page(PageKindFolder('svg', book)) book.add_page(PagePart('svg', book)) book.add_page(PageSvgName(book)) book.add_page(PageSummary('svg', book)) book.add_page(PageGo('svg', book)) book.add_page(PagePart('rst', book)) if (BEAM_SELECTOR_STYLE == 'button'): book.add_page(PageKindButton('rst', book)) elif (BEAM_SELECTOR_STYLE == 'folder'): book.add_page(PageKindFolder('rst', book)) book.add_page(PageSummary('rst', book)) book.add_page(PageGo('rst', book)) book.show() self.lrs_pid = None self.socket = None self.lastbytes = 0 # define pages travel get_widget_r(book.get_page("select_op"), "button_svg").connect( "clicked", lambda self: book.show_page("svg_part")) get_widget_r(book.get_page("select_op"), "button_rst").connect( "clicked", lambda self: book.show_page("rst_kind")) get_widget_r(book.get_page("svg_part"), "navbutton_0").connect( "clicked", lambda self: book.show_page("select_op")) get_widget_r(book.get_page("svg_part"), "navbutton_1").connect( "clicked", lambda self: book.show_page("svg_kind")) get_widget_r(book.get_page("svg_kind"), "navbutton_0").connect( "clicked", lambda self: book.show_page("svg_part")) get_widget_r(book.get_page("svg_kind"), "navbutton_1").connect( "clicked", lambda self: book.show_page("svg_name")) get_widget_r(book.get_page("svg_name"), "navbutton_0").connect( "clicked", lambda self: book.show_page("svg_kind")) get_widget_r(book.get_page("svg_name"), "navbutton_1").connect( "clicked", lambda self: book.show_page("svg_summary")) get_widget_r(book.get_page("svg_summary"), "navbutton_0").connect( "clicked", lambda self: book.show_page("svg_name")) get_widget_r(book.get_page("svg_summary"), "navbutton_1").connect( "clicked", lambda self: book.show_page("svg_go")) get_widget_r(book.get_page("svg_go"), "navbutton_0").connect( "clicked", lambda self: book.show_page("svg_summary")) get_widget_r(book.get_page("svg_go"), "navbutton_0").connect( "clicked", lambda self: halt_backup(self.get_toplevel().lrs_pid)) get_widget_r(book.get_page("svg_go"), "navbutton_1").connect("clicked", self._cb_quit) get_widget_r(book.get_page("rst_kind"), "navbutton_0").connect( "clicked", lambda self: book.show_page("select_op")) get_widget_r(book.get_page("rst_kind"), "navbutton_1").connect( "clicked", lambda self: book.show_page("rst_part")) get_widget_r(book.get_page("rst_part"), "navbutton_0").connect( "clicked", lambda self: book.show_page("rst_kind")) get_widget_r(book.get_page("rst_part"), "navbutton_1").connect( "clicked", lambda self: book.show_page("rst_summary")) get_widget_r(book.get_page("rst_summary"), "navbutton_0").connect( "clicked", lambda self: book.show_page("rst_part")) get_widget_r(book.get_page("rst_summary"), "navbutton_1").connect( "clicked", lambda self: book.show_page("rst_go")) get_widget_r(book.get_page("rst_go"), "navbutton_0").connect( "clicked", lambda self: book.show_page("rst_summary")) get_widget_r(book.get_page("rst_go"), "navbutton_0").connect( "clicked", lambda self: halt_backup(self.get_toplevel().lrs_pid)) get_widget_r(book.get_page("rst_go"), "navbutton_1").connect("clicked", self._cb_quit) self.connect("destroy", self._cb_quit) # define our window #self.set_default_size(750, 550) self.set_geometry_hints(None, 750, 440, -1, -1) #self.set_resizable(False) self.add(book) self.set_title('Linbox Rescue Server') # display page #1 book.show_page("select_op") self.backupdata = {} self.reset_data() self.add_accel_group(book.accel_group) self.show()
def cb_choose_usb(self, widget=None, data=None): """ called when USB is chosen""" if widget.get_active(): # button became active, disable others get_widget_r(self, "button_nfs").set_active(False) get_widget_r(self, "first_label").set_text(_("Volume")) get_widget_r(self, "second_label").set_text(_("Partition")) get_widget_r(self, "third_label").set_text(_("Directory")) get_widget_r(self, "fourth_label").set_text(_("Image")) combo_vol = get_widget_r(self, "combo_vol") combo_part = get_widget_r(self, "combo_part") combo_dir = get_widget_r(self, "combo_dir") combo_vol.connect("changed", self.cb_change_local_vol) combo_part.connect("changed", self.cb_change_local_part) combo_dir.connect("changed", self.cb_change_local_dir) mylist = [] for directory in get_parts().values(): if directory['parts'] != {}: mylist.append( ('%s (%s, %s)' % (directory['name'], directory['desc'], lbx_utils.human_readable(directory['size'])), directory['name'])) combo_vol.set_items(mylist) combo_vol.set_active(0)