def display(self): button_save, button_exit = Button("Update"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), separator, (Textbox(20, 1, "Swap size (GB):", 0, 0), self.swap), separator, (Textbox(20, 1, "Nr. of CPUs:", 0, 0), self.vcpu), separator, (Textbox(20, 1, "CPU usage limit (%):", 0, 0), self.vcpulimit), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "", 0, 0), self.onboot), separator, (Textbox(20, 1, "Boot order:", 0, 0), self.bootorder), separator, (button_save, button_exit) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def display(self): button_save, button_exit = Button("Update"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), separator, (Textbox(20, 1, "Swap size (GB):", 0, 0), self.swap), separator, (Textbox(20, 1, "Nr. of CPUs:", 0, 0), self.vcpu), separator, (Textbox(20, 1, "CPU usage limit (%):", 0, 0), self.vcpulimit), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "IO Priority:", 0, 0), self.ioprio), separator, (Textbox(20, 1, "Bind mounts:", 0, 0), self.bind_mounts), (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "/src1,/dst1;/srcN,..", 0, 0)), separator, (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), separator, (Textbox(20, 1, "", 0, 0), self.onboot), separator, (Textbox(20, 1, "Boot order:", 0, 0), self.bootorder), separator, (Textbox(20, 1, "VEID:", 0, 0), self.ctid), separator, (button_exit, button_save) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def display(self): button_save, button_exit = Button("Update"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [(Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), separator, (Textbox(20, 1, "Swap size (GB):", 0, 0), self.swap), separator, (Textbox(20, 1, "Nr. of CPUs:", 0, 0), self.vcpu), separator, (Textbox(20, 1, "CPU usage limit (%):", 0, 0), self.vcpulimit), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "IO Priority:", 0, 0), self.ioprio), separator, (Textbox(20, 1, "Bind mounts:", 0, 0), self.bind_mounts), (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "/src1,/dst1;/srcN,..", 0, 0)), separator, (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), separator, (Textbox(20, 1, "", 0, 0), self.onboot), separator, (Textbox(20, 1, "Boot order:", 0, 0), self.bootorder), separator, (Textbox(20, 1, "VEID:", 0, 0), self.ctid), separator, (button_exit, button_save)] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def display(self): button_save, button_exit = Button("Save VM settings"), Button("Main menu") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Memory min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.memory.min_value, self.memory.max_value), 0, 0)), (Textbox(20, 1, "VSwap size (GB):", 0, 0), self.swap), (Textbox(20, 1, "VSwap min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.swap.min_value, self.swap.max_value), 0, 0)), (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "CPU number min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.vcpu.min_value, self.vcpu.max_value), 0, 0)), (Textbox(20, 1, "CPU usage limit (%):", 0, 0), self.vcpulimit), (Textbox(20, 1, "CPU usage min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.vcpulimit.min_value, self.vcpulimit.max_value), 0, 0)), (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), (Textbox(20, 1, "Disk size min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.disk.min_value, self.disk.max_value), 0, 0)), (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), (Textbox(20, 1, "IP-address:", 0, 0), self.ip_address), (Textbox(20, 2, "Nameserver:", 0, 0), self.nameserver), (Textbox(20, 1, "Root password:"******"Root password x2:", 0, 0), self.password2), (Textbox(20, 2, "OS Template:", 0, 0), self.ostemplate), (self.startvm, self.onboot), separator, (button_save, button_exit) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def display(self): button_save, button_exit = Button("Edit"), Button("Cancel") rows = self._define_view(button_save, button_exit) form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def display(self): button_save, button_exit = Button("Migrate"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [(Textbox(20, 1, "Hostname/IP:", 0, 0), self.target), separator, (Textbox(20, 1, "Live migration:", 0, 0), self.live), separator, (button_save, button_exit)] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def __init__(self, screen, title, text): self.screen = screen width = 40 if (len(text) < width): width = len(text) t = TextboxReflowed(width, text) g = GridForm(self.screen, title, 1, 1) g.add(t, 0, 0) g.draw() self.screen.refresh()
def PopupWindow(self, title, text, width=50, sleep=None): t = TextboxReflowed(width, text) g = GridForm(self.screen, title, 1, 1) g.add(t, 0, 0, padding=(0, 0, 0, 0)) g.setTimer(1) g.run() # Just show us some seconds if sleep: time.sleep(sleep) self.screen.popWindow()
class ExtTextWindow: def __init__(self, screen, title, text): self.screen = screen self.g = GridForm(screen, title, 1, 1) self.g.add(Textbox(60, 2, text), 0, 0) def show(self): self.g.draw() self.screen.refresh() def close(self): self.screen.popWindow()
def process(): global NvLtDrvURL, LatestFile, LatestHeader, DownloadFlag, SymlinkFlag screen = SnackScreen() bb = ButtonBar(screen, (("End", "end"), )) tbTittle = Textbox(65, 3, "Processing Input... ", 0, 1) tbDownload = Textbox(65, 3, " ", 0, 1) tbSymlink = Textbox(65, 3, " ", 0, 1) g = GridForm(screen, "chkltdr (NvDrIn) - by Trodskovich", 1, 6) g.add(tbTittle, 0, 2) g.add(tbDownload, 0, 3, growx=1) g.add(tbSymlink, 0, 4, growx=1) g.add(bb, 0, 5, growx=1) if DownloadFlag: tbDownload.setText("Downloading Please Wait...") result = g.runOnce() screen.finish() urllib.request.urlretrieve(NvLtDrvURL, "./" + LatestFile) else: tbDownload.setText("Download Skipped") if SymlinkFlag: subprocess.call( ["ln -nfs ./" + LatestFile + " NVIDIA-Linux-x86_64-Latest.run"], shell=True) tbSymlink.setText("Symlink Created") else: tbSymlink.setText("Symlink Skipped") result = g.runOnce() screen.finish() return bb.buttonPressed(result)
def display(self): button_save, button_exit = Button("Migrate"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Hostname/IP:", 0, 0), self.target), separator, (Textbox(20, 1, "Live migration:", 0, 0), self.live), separator, (button_save, button_exit)] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def welcome(): screen = SnackScreen() bb = ButtonBar(screen, (("Continue", "continue"), ("Cancel", "cancel"))) tb = Textbox( 65, 4, "Python Script to Initialize New openSUSE Tumbleweed Installation,\nlike Installing Applications, Enabling & Starting Services, \nand Performing Distrubution Update.", ) g = GridForm(screen, "TW-Init - by Trodskovich", 1, 4) g.add(tb, 0, 2) g.add(bb, 0, 3, growx=1) result = g.runOnce() screen.finish() return bb.buttonPressed(result)
def dup(): screen = SnackScreen() bb = ButtonBar(screen, (("Yes", "yes"), ("No", "no"))) tb = Textbox( 70, 4, "It's recomended to run the Distribution Update after Initiliazation. \nDo you want to run Distribution Update after Initiliazation ?", ) g = GridForm(screen, "Distribution Update", 1, 4) g.add(tb, 0, 2) g.add(bb, 0, 3, growx=1) result = g.runOnce() screen.finish() return bb.buttonPressed(result)
def add_repo(): screen = SnackScreen() bb = ButtonBar(screen, (("Add", "add"), ("Cancel", "cancel"))) tb = Textbox( 50, 5, "Multimedia Applications and Codecs require Packman Repositary to be added in order to work correctly. \nDo you want add Packman repo now ?", 0, 1, ) g = GridForm(screen, "Packman Repo", 1, 4) g.add(tb, 0, 2) g.add(bb, 0, 3, growx=1) result = g.runOnce() screen.finish() return bb.buttonPressed(result)
def display(self): button_exit, button_save = Button("Back"), Button("Create VM") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Memory min/max:", 0, 0), Textbox( 20, 1, "%s / %s" % (self.memory.min_value, self.memory.max_value), 0, 0)), (Textbox(20, 1, "VSwap size (GB):", 0, 0), self.swap), (Textbox(20, 1, "VSwap min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.swap.min_value, self.swap.max_value), 0, 0)), (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "CPU number min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.vcpu.min_value, self.vcpu.max_value), 0, 0)), (Textbox(20, 1, "CPU usage limit (%):", 0, 0), self.vcpulimit), (Textbox(20, 1, "CPU usage min/max:", 0, 0), Textbox( 20, 1, "%s / %s" % (self.vcpulimit.min_value, self.vcpulimit.max_value), 0, 0)), (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), (Textbox(20, 1, "Disk size min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.disk.min_value, self.disk.max_value), 0, 0)), (Textbox(20, 1, "IO Priority:", 0, 0), self.ioprio), (Textbox(20, 1, "Bind mounts:", 0, 0), self.bind_mounts), (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "/src1,/dst1;/srcN,..", 0, 0)), (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), (Textbox(20, 1, "IP-address:", 0, 0), self.ip_address), (Textbox(20, 2, "Nameserver:", 0, 0), self.nameserver), (Textbox(20, 1, "Root password:"******"Root password x2:", 0, 0), self.password2), (Textbox(20, 2, "OS Template:", 0, 0), self.ostemplate), (self.startvm, self.onboot), separator, (button_save, button_exit) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def display(self): button_save, button_exit = Button("Save VM settings"), Button("Main menu") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Min memory size (GB):", 0, 0), self.memory_min), (Textbox(20, 1, "Max memory size (GB):", 0, 0), self.memory_max), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "Min number of CPUs:", 0, 0), self.vcpu_min), (Textbox(20, 1, "Max number of CPUs:", 0, 0), self.vcpu_max), separator, (button_save, button_exit) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def __init__(self, screen, title, text, total, updpct=0.05, pulse=False): self.multiplier = 1 if total == 1.0: self.multiplier = 100 self.screen = screen width = 55 if (len(text) > width): width = len(text) t = TextboxReflowed(width, text) g = GridForm(self.screen, title, 1, 2) g.add(t, 0, 0, (0, 0, 0, 1), anchorLeft=1) self.scale = Scale(int(width), int(float(total) * self.multiplier)) if not pulse: g.add(self.scale, 0, 1) g.draw() self.screen.refresh()
def display(self): button_save, button_exit = Button("Save VM settings"), Button("Main menu") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Memory min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.memory.min_value, self.memory.max_value), 0, 0)), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "CPU number min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.vcpu.min_value, self.vcpu.max_value), 0, 0)), separator, (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), separator, (button_save, button_exit) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def display(self): button_save, button_exit = Button("Create"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [(Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Min memory size (GB):", 0, 0), self.memory_min), (Textbox(20, 1, "Max memory size (GB):", 0, 0), self.memory_max), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "Min number of CPUs:", 0, 0), self.vcpu_min), (Textbox(20, 1, "Max number of CPUs:", 0, 0), self.vcpu_max), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "OS template:", 0, 0), self.ostemplate), separator, (button_exit, button_save)] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def JoinWindow(self, title, text, allowCancel=0, width=50, entryWidth=37, buttons=["Join"], hlp=None): bb = ButtonBar(self.screen, buttons) t = TextboxReflowed(width, text) sg = Grid(2, 2) entryList = [] e = Entry(entryWidth) sg.setField(Label("User name"), 0, 0, padding=(0, 0, 1, 0), anchorLeft=1) sg.setField(e, 1, 0, anchorLeft=1) entryList.append(e) e = Entry(entryWidth, password=1) sg.setField(Label("Password"), 0, 1, padding=(0, 0, 1, 0), anchorLeft=1) sg.setField(e, 1, 1, anchorLeft=1) entryList.append(e) g = GridForm(self.screen, title, 1, 3) g.add(t, 0, 0, padding=(0, 0, 0, 1)) g.add(sg, 0, 1, padding=(0, 0, 0, 1)) g.add(bb, 0, 2, growx=1) result = g.runOnce() entryValues = [] for entry in entryList: entryValues.append(entry.value()) return (bb.buttonPressed(result), tuple(entryValues))
def display(self): button_save, button_exit = Button("Create"), Button("Back") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Min memory size (GB):", 0, 0), self.memory_min), (Textbox(20, 1, "Max memory size (GB):", 0, 0), self.memory_max), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "Min number of CPUs:", 0, 0), self.vcpu_min), (Textbox(20, 1, "Max number of CPUs:", 0, 0), self.vcpu_max), separator, (Textbox(20, 1, "Disk size (GB):", 0, 0), self.disk), separator, (Textbox(20, 1, "OS template:", 0, 0), self.ostemplate), separator, (button_exit, button_save) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
class ExtTopProgressWindow: def __init__(self, screen, title, text): self.screen = screen self.g = GridForm(self.screen, title, 1, 2) self.s = Scale(70, 100) self.t = Textbox(70, 12, text) self.g.add(self.s, 0, 0) self.g.add(self.t, 0, 1, padding=(0, 1, 0, 0)) def show(self): self.g.draw() self.screen.refresh() def update(self, progress, text=''): self.s.set(progress) self.t.setText(text) self.g.draw() self.screen.refresh() def close(self): time.sleep(1) self.screen.popWindow()
def display(self): button_save, button_exit = Button("Create VM"), Button("Main menu") separator = (Textbox(20, 1, "", 0, 0), Textbox(20, 1, "", 0, 0)) rows = [ (Textbox(20, 1, "Memory size (GB):", 0, 0), self.memory), (Textbox(20, 1, "Memory min/max:", 0, 0), Textbox( 20, 1, "%s / %s" % (self.memory.min_value, self.memory.max_value), 0, 0)), separator, (Textbox(20, 1, "Number of CPUs:", 0, 0), self.vcpu), (Textbox(20, 1, "CPU number min/max:", 0, 0), Textbox(20, 1, "%s / %s" % (self.vcpu.min_value, self.vcpu.max_value), 0, 0)), separator, (Textbox(20, 1, "Hostname:", 0, 0), self.hostname), separator, (button_save, button_exit) ] form = GridForm(self.screen, self.title, 2, len(rows)) for i, row in enumerate(rows): for j, cell in enumerate(row): form.add(cell, j, i) return form.runOnce() != button_exit
def select_packages(): global sellist screen = SnackScreen() ct = CheckboxTree(height=20, scroll=1) for idx, key in enumerate(packages): ct.append(key) for val in packages[key]: ct.addItem(val, (idx, snackArgs["append"])) ct.setEntryValue(val) bb = ButtonBar(screen, (("Next", "next"), ("Cancel", "cancel"))) g = GridForm(screen, "Packages", 1, 4) g.add(ct, 0, 2) g.add(bb, 0, 3, growx=1) result = g.runOnce() screen.finish() # format selected packages list for zypper and print(result) sellist = (str(ct.getSelection()).replace("[", "").replace("]", "").replace( "'", "").replace(",", "")) # to confirm Selected Packages screen = SnackScreen() bb = ButtonBar(screen, (("Next", "next"), ("Cancel", "cancel"))) tb = Textbox( 80, 10, "the packages selected to install are \n \n" + str(sellist.split(" ")), 1, 1) g = GridForm(screen, "Selected Packages", 1, 4) g.add(tb, 0, 2) g.add(bb, 0, 3, growx=1) result = g.runOnce() screen.finish() return bb.buttonPressed(result)
def run(self): toplevel = GridForm(self.screen, _("Passphrase"), 1, 3) txt = TextboxReflowed(65, self.txt) toplevel.add(txt, 0, 0) passphraseentry = Entry(60, password=1) toplevel.add(passphraseentry, 0, 1, (0, 0, 0, 1)) buttons = ButtonBar(self.screen, [TEXT_OK_BUTTON, TEXT_CANCEL_BUTTON]) toplevel.add(buttons, 0, 2, growx=1) rc = toplevel.run() res = buttons.buttonPressed(rc) passphrase = None if res == TEXT_OK_CHECK or rc == "F12": passphrase = passphraseentry.value().strip() self.rc = passphrase return self.rc
def ExtCheckboxWindow(screen, title, text, items, buttons=('Ok', 'Cancel'), width=50, height=8): g = GridForm(screen, title, 1, 3) g.add(Textbox(width, 2, text), 0, 0) scroll = 0 if len(items) > height: scroll = 1 ct = CheckboxTree(height, scroll, width) if len(items) > 0: for i in items: ct.append(i, i, items[i]) g.add(ct, 0, 1) bb = ButtonBar(screen, buttons, compact=1) g.add(bb, 0, 2, (0, 2, 0, 0), growx=1, growy=1) result = g.runOnce() return bb.buttonPressed(result), ct.getSelection()
class UpdateManagerText(object): DEBUG = False def __init__(self, datadir): self.screen = SnackScreen() # FIXME: self.screen.finish() clears the screen (and all messages) # there too #atexit.register(self.restoreScreen) self.button_bar = ButtonBar(self.screen, ( (_("Cancel"), "cancel"), (_("Install"), "ok")), compact = True) self.textview_changes = Textbox(72, 8, "Changelog", True, True) self.checkbox_tree_updates = CheckboxTree(height=8, width=72, scroll=1) self.checkbox_tree_updates.setCallback(self.checkbox_changed) self.layout = GridForm(self.screen, "Updates", 1, 5) self.layout.add(self.checkbox_tree_updates, 0, 0) # empty line to make it look less crowded self.layout.add(Textbox(60, 1," ",False, False), 0, 1) self.layout.add(self.textview_changes, 0, 2) # empty line to make it look less crowded self.layout.add(Textbox(60, 1," ",False, False), 0, 3) self.layout.add(self.button_bar, 0, 4) # FIXME: better progress than the current suspend/resume screen thing self.screen.suspend() if not self.DEBUG: apt_pkg.PkgSystemLock() self.openCache() print _("Building Updates List") self.fillstore() if self.list.distUpgradeWouldDelete > 0: print _(""" A normal upgrade can not be calculated, please run: sudo apt-get dist-upgrade This can be caused by: * A previous upgrade which didn't complete * Problems with some of the installed software * Unofficial software packages not provided by Ubuntu * Normal changes of a pre-release version of Ubuntu""") sys.exit(1) self.screen.resume() # def restoreScreen(self): # self.screen.finish() def openCache(self): # open cache progress = apt.progress.OpTextProgress() if hasattr(self, "cache"): self.cache.open(progress) self.cache._initDepCache() else: self.cache = MyCache(progress) self.actiongroup = apt_pkg.GetPkgActionGroup(self.cache._depcache) # lock the cache self.cache.lock = True def fillstore(self): # populate the list self.list = UpdateList(self) self.list.update(self.cache) origin_list = self.list.pkgs.keys() origin_list.sort(lambda x,y: cmp(x.importance, y.importance)) origin_list.reverse() for (i, origin) in enumerate(origin_list): self.checkbox_tree_updates.append(origin.description, selected=True) for pkg in self.list.pkgs[origin]: self.checkbox_tree_updates.addItem(pkg.name, (i, snackArgs['append']), pkg, selected = True) def updateSelectionStates(self): """ helper that goes over the cache and updates the selection states in the UI based on the cache """ for pkg in self.cache: if not self.checkbox_tree_updates.item2key.has_key(pkg): continue # update based on the status if pkg.markedUpgrade or pkg.markedInstall: self.checkbox_tree_updates.setEntryValue(pkg, True) else: self.checkbox_tree_updates.setEntryValue(pkg, False) self.updateUI() def updateUI(self): self.layout.draw() self.screen.refresh() def get_news_and_changelog(self, pkg): changes = "" name = pkg.name # if we don't have it, get it if (not self.cache.all_changes.has_key(name) and not self.cache.all_news.has_key(name)): self.textview_changes.setText(_("Downloading changelog")) lock = thread.allocate_lock() lock.acquire() thread.start_new_thread(self.cache.get_news_and_changelog,(name,lock)) # this lock should never take more than 2s even with network down while lock.locked(): time.sleep(0.03) # build changes from NEWS and changelog if self.cache.all_news.has_key(name): changes += self.cache.all_news[name] if self.cache.all_changes.has_key(name): changes += self.cache.all_changes[name] return changes def checkbox_changed(self): # item is either a apt.package.Package or a str (for the headers) pkg = self.checkbox_tree_updates.getCurrent() descr = "" if hasattr(pkg, "name"): need_refresh = False name = pkg.name if self.options.show_description: descr = pkg.description else: descr = self.get_news_and_changelog(pkg) # check if it is a wanted package selected = self.checkbox_tree_updates.getEntryValue(pkg)[1] marked_install_upgrade = pkg.markedInstall or pkg.markedUpgrade if not selected and marked_install_upgrade: need_refresh = True pkg.markKeep() if selected and not marked_install_upgrade: if not (name in self.list.held_back): # FIXME: properly deal with "fromUser" here need_refresh = True pkg.markInstall() # fixup any problems if self.cache._depcache.BrokenCount: need_refresh = True Fix = apt_pkg.GetPkgProblemResolver(self.cache._depcache) Fix.ResolveByKeep() # update the list UI to reflect the cache state if need_refresh: self.updateSelectionStates() self.textview_changes.setText(descr) self.updateUI() def main(self, options): self.options = options res = self.layout.runOnce() self.screen.finish() button = self.button_bar.buttonPressed(res) if button == "ok": self.screen.suspend() res = self.cache.commit(apt.progress.text.AcquireProgress(), apt.progress.base.InstallProgress())
class NewtUI(object): """ Newt UI implementation """ def __init__(self, frontend): self._frontend = frontend self.screen = SnackScreen() self.textview_changes = None self.button_bar = None self.checkbox_tree_updates = None self.layout = None self._app = None self._updates_received = False def create_ui(self): """ Creates/Draws the UI """ self.button_bar = ButtonBar(self.screen, ((_("Cancel"), "cancel"), (_("Install"), "ok")), compact=True) self.textview_changes = Textbox(72, 8, "Changelog", True, True) self.checkbox_tree_updates = CheckboxTree(height=8, width=72, scroll=1) self.checkbox_tree_updates.setCallback(self.checkbox_changed) self.layout = GridForm(self.screen, "Updates", 1, 5) self.layout.add(self.checkbox_tree_updates, 0, 0) # empty line to make it look less crowded self.layout.add(Textbox(60, 1, " ", False, False), 0, 1) self.layout.add(self.textview_changes, 0, 2) # empty line to make it look less crowded self.layout.add(Textbox(60, 1, " ", False, False), 0, 3) self.layout.add(self.button_bar, 0, 4) # FIXME: better progress than the current suspend/resume screen thing self.screen.suspend() def cache_reload_callback(self, percent, operation): """ Cache reloading callback :param percent: Percentage done :param operation: Current operation """ if percent == RELOAD_CACHE_STATUS.DONE: sys.stdout.write(_('Finished loading package cache.') + '\n') elif percent == RELOAD_CACHE_STATUS.BEGIN: sys.stdout.write(_('Loading package cache.') + '\n') else: sys.stdout.write('[%2d] %s\r' % (percent, operation)) def main(self, application): """ UI main loop :param application: class:`UpdateManager.Application.Application` object """ self._app = application while not self._updates_received: time.sleep(0.3) self.screen.resume() res = self.layout.runOnce() self.screen.finish() button = self.button_bar.buttonPressed(res) if button == "ok": self.screen.suspend() def get_updates(self): sys.stdout.write(_("Building Updates List") + "\n") sys.stdout.flush() packages = self._app.get_available_updates() # download_size = 0 categories = {} for pkg in packages: catid = pkg.get_update_category() if not catid in categories.keys(): categories[catid] = [ pkg, ] else: categories[catid].append(pkg) for (i, cat_id) in enumerate(categories.keys()): cat_name = self._app.get_update_category_name(cat_id) self.checkbox_tree_updates.append(cat_name, selected=True) for pkg in categories[cat_id]: self.checkbox_tree_updates.addItem(pkg.get_package_name(), (i, snackArgs['append']), pkg, selected=True) self._updates_received = True def update_ui(self): """ Redraws the UI """ self.layout.draw() self.screen.refresh() def checkbox_changed(self): """ Handler for checkbox state-changes """ pkg = self.checkbox_tree_updates.getCurrent() descr = "" if hasattr(pkg, "get_description"): descr = pkg.get_description() # TODO: changelog handling/selection of changelog instead of # description self.textview_changes.setText(descr) self.update_ui()
def welcome(): global NvLtDrvURL, LatestFile, LatestHeader, DownloadFlag, SymlinkFlag screen = SnackScreen() bb = ButtonBar(screen, (("Continue", "continue"), ("Cancel", "cancel"))) tbTittle = Textbox( 65, 3, "To check for latest Nvidia Driver form NVIDIA Website, download and optionaly create a symlink to the latest File", 0, 1) for File in os.listdir(path): if File.find('.run') > 0 and os.path.isfile(path + "/" + File): FList.append(File) FList.sort() FileText = urllib.request.urlopen(NvLtTxtURL).read().decode('utf-8') for i in range(0, len(FileText)): if FileText[i] == ' ': LatestHeader = FileText[0:i] for i in range(0, len(FileText)): if FileText[i] == '/': LatestFile = FileText[i + 1:len(FileText) - 1] NvLtDrvURL = NvLtDrvURL + LatestHeader + "/" + LatestFile tbLatestL = Textbox(110, 2, "Latest Local Version: " + FList[-1], 0, 1) tbLatestR = Textbox( 110, 4, "Latest Remote Version: " + LatestFile + "\nLatest Driver URL: " + NvLtDrvURL, 0, 1) if LatestFile > FList[-1]: cbDowload = Checkbox( "Download the Latest Driver", 1, ) cbSymlink = Checkbox( "Create / Update Symlink", 1, ) else: cbDowload = Checkbox( "Download the Latest Driver", 0, ) cbSymlink = Checkbox( "Create / Update Symlink", 0, ) g = GridForm(screen, "chkltdr (NvDrIn) - by Trodskovich", 1, 8) g.add(tbTittle, 0, 2) g.add(tbLatestL, 0, 3, growx=1) g.add(tbLatestR, 0, 4, growx=1) g.add(cbDowload, 0, 5, growx=1) g.add(cbSymlink, 0, 6, growx=1) g.add(bb, 0, 7, growx=1) result = g.runOnce() screen.finish() DownloadFlag = cbDowload.value() SymlinkFlag = cbSymlink.value() return bb.buttonPressed(result)
class UpdateManagerText(object): DEBUG = False def __init__(self, datadir): self.screen = SnackScreen() # FIXME: self.screen.finish() clears the screen (and all messages) # there too #atexit.register(self.restoreScreen) self.button_bar = ButtonBar(self.screen, ((_("Cancel"), "cancel"), (_("Install"), "ok")), compact=True) self.textview_changes = Textbox(72, 8, _("Changelog"), True, True) self.checkbox_tree_updates = CheckboxTree(height=8, width=72, scroll=1) self.checkbox_tree_updates.setCallback(self.checkbox_changed) self.layout = GridForm(self.screen, _("Updates"), 1, 5) self.layout.add(self.checkbox_tree_updates, 0, 0) # empty line to make it look less crowded self.layout.add(Textbox(60, 1, " ", False, False), 0, 1) self.layout.add(self.textview_changes, 0, 2) # empty line to make it look less crowded self.layout.add(Textbox(60, 1, " ", False, False), 0, 3) self.layout.add(self.button_bar, 0, 4) # FIXME: better progress than the current suspend/resume screen thing self.screen.suspend() if not self.DEBUG: apt_pkg.pkgsystem_lock() self.openCache() print(_("Building Updates List")) self.fillstore() if self.list.distUpgradeWouldDelete > 0: print( _(""" A normal upgrade can not be calculated, please run: sudo apt-get dist-upgrade This can be caused by: * A previous upgrade which didn't complete * Problems with some of the installed software * Unofficial software packages not provided by Ubuntu * Normal changes of a pre-release version of Ubuntu""")) sys.exit(1) self.screen.resume() # def restoreScreen(self): # self.screen.finish() def openCache(self): # open cache progress = apt.progress.text.OpProgress() if hasattr(self, "cache"): self.cache.open(progress) self.cache._initDepCache() else: self.cache = MyCache(progress) self.actiongroup = apt_pkg.ActionGroup(self.cache._depcache) # lock the cache self.cache.lock = True def fillstore(self): # populate the list self.list = UpdateList(self) self.list.update(self.cache) origin_list = sorted(self.list.pkgs, key=operator.attrgetter("importance"), reverse=True) for (i, origin) in enumerate(origin_list): self.checkbox_tree_updates.append(origin.description, selected=True) for pkg in self.list.pkgs[origin]: self.checkbox_tree_updates.addItem(pkg.name, (i, snackArgs['append']), pkg, selected=True) def updateSelectionStates(self): """ helper that goes over the cache and updates the selection states in the UI based on the cache """ for pkg in self.cache: if pkg not in self.checkbox_tree_updates.item2key: continue # update based on the status if pkg.marked_upgrade or pkg.marked_install: self.checkbox_tree_updates.setEntryValue(pkg, True) else: self.checkbox_tree_updates.setEntryValue(pkg, False) self.updateUI() def updateUI(self): self.layout.draw() self.screen.refresh() def get_news_and_changelog(self, pkg): changes = "" name = pkg.name # if we don't have it, get it if (name not in self.cache.all_changes and name not in self.cache.all_news): self.textview_changes.setText(_("Downloading changelog")) lock = threading.Lock() lock.acquire() changelog_thread = threading.Thread( target=self.cache.get_news_and_changelog, args=(name, lock)) changelog_thread.start() # this lock should never take more than 2s even with network down while lock.locked(): time.sleep(0.03) # build changes from NEWS and changelog if name in self.cache.all_news: changes += self.cache.all_news[name] if name in self.cache.all_changes: changes += self.cache.all_changes[name] return changes def checkbox_changed(self): # item is either a apt.package.Package or a str (for the headers) pkg = self.checkbox_tree_updates.getCurrent() descr = "" if hasattr(pkg, "name"): need_refresh = False name = pkg.name if self.options.show_description: descr = getattr(pkg.candidate, "description", None) else: descr = self.get_news_and_changelog(pkg) # check if it is a wanted package selected = self.checkbox_tree_updates.getEntryValue(pkg)[1] marked_install_upgrade = pkg.marked_install or pkg.marked_upgrade if not selected and marked_install_upgrade: need_refresh = True pkg.mark_keep() if selected and not marked_install_upgrade: if not (name in self.list.held_back): # FIXME: properly deal with "fromUser" here need_refresh = True pkg.mark_install() # fixup any problems if self.cache._depcache.broken_count: need_refresh = True Fix = apt_pkg.ProblemResolver(self.cache._depcache) Fix.resolve_by_keep() # update the list UI to reflect the cache state if need_refresh: self.updateSelectionStates() self.textview_changes.setText(descr) self.updateUI() def main(self, options): self.options = options res = self.layout.runOnce() self.screen.finish() button = self.button_bar.buttonPressed(res) if button == "ok": self.screen.suspend() res = self.cache.commit(apt.progress.text.AcquireProgress(), apt.progress.base.InstallProgress())