def get_ftp_dest(answers): text = "Please enter the URL for your FTP directory and, optionally, a username and password" url_field = snack.Entry(50) user_field = snack.Entry(16) passwd_field = snack.Entry(16, password=1) url_text = snack.Textbox(11, 1, "URL:") user_text = snack.Textbox(11, 1, "Username:"******"Password:"******"Specify Path", 'getftpdest', 1, 3) bb = snack.ButtonBar(tui.screen, ['Ok', 'Back']) t = snack.TextboxReflowed(50, text) entry_grid = snack.Grid(2, 3) entry_grid.setField(url_text, 0, 0) entry_grid.setField(url_field, 1, 0) entry_grid.setField(user_text, 0, 1) entry_grid.setField(user_field, 1, 1, anchorLeft=1) entry_grid.setField(passwd_text, 0, 2) entry_grid.setField(passwd_field, 1, 2, anchorLeft=1) gf.add(t, 0, 0, padding=(0, 0, 0, 1)) gf.add(entry_grid, 0, 1, padding=(0, 0, 0, 1)) gf.add(bb, 0, 2, growx=1) button = bb.buttonPressed(gf.runOnce()) if button == 'back': return uicontroller.LEFT_BACKWARDS url = url_field.value() if not url.startswith('ftp://'): url = 'ftp://' + url if user_field.value() != '': quoted_user = urllib.quote(user_field.value(), safe='') if passwd_field.value() != '': quoted_passwd = urllib.quote(passwd_field.value(), safe='') answers['dest-address'] = url.replace( '//', '//%s:%s@' % (quoted_user, quoted_passwd), 1) else: answers['dest-address'] = url.replace('//', '//%s@' % quoted_user, 1) else: answers['dest-address'] = url return uicontroller.RIGHT_FORWARDS
def ConfirmGplv3Window(insScreen, packages): if insScreen == None: print "error ConfirmGplv3Window: the screen is None" # Create CheckboxTree instance (main_width, main_height) = GetHotKeyMainSize(insScreen) main_height -= 2 if len(packages) > main_height: scroll = 1 else: scroll = 0 hotkey_base_text = "These GPLv3 packages are depended, do you want to install them? (y/n)" wrapper = textwrap.TextWrapper(width=main_width) hotkey_text = wrapper.fill(hotkey_base_text) if hotkey_text != hotkey_base_text: main_height -= 1 hotkey_line = 2 else: hotkey_line = 1 li = snack.Listbox(main_height, scroll=scroll, width=main_width) idx = 0 for x in packages: li.append(x.name, idx) idx += 1 # Set position iPosition = 0 li.setCurrent(iPosition) # Create Text instance t1 = snack.Textbox(main_width, 1, "-" * main_width) t4 = snack.Textbox(main_width, hotkey_line, hotkey_text) # Create Grid instance title = "GPLv3 that be depended" g = snack.GridForm(insScreen, title, 1, 5) g.add(li, 0, 0) g.add(t1, 0, 1, (-1, 0, -1, 0)) g.add(t4, 0, 4, (0, 0, 0, -1)) ############# append test key 'S' #### myhotkeys = {"y" : "y", \ "Y" : "y", \ "n" : "n", \ "N" : "n"} for x in myhotkeys.keys(): g.addHotKey(x) ##################################### result = g.run() if myhotkeys.has_key(result): if myhotkeys[result] == "y" or \ myhotkeys[result] == "n": insScreen.popWindow() return (myhotkeys[result])
def PKGINSTActionWindow(insScreen, lstSubject, iPosition): # Create CheckboxTree instance (main_width, main_height) = GetHotKeyMainSize(insScreen) if len(lstSubject) > main_height: scroll = 1 else: scroll = 0 li = snack.Listbox(main_height, scroll=scroll, width=main_width) idx = 0 for idx in range(len(lstSubject)): str = "%s" % lstSubject[idx][0] li.append(str, idx) num_subject = len(lstSubject) if num_subject > iPosition: li.setCurrent(iPosition) else: li.setCurrent(num_subject - 1) # Create Text instance t1 = snack.Textbox(main_width, 1, "-" * main_width) text = "SPACE/ENTER:select I:Info X:eXit" t2 = snack.Textbox(main_width, 1, text) # Create Grid instance g = snack.GridForm(insScreen, "Select your operation", 1, 3) g.add(li, 0, 0) g.add(t1, 0, 1, (-1, 0, -1, 0)) g.add(t2, 0, 2, (0, 0, 0, -1)) myhotkeys = {"ENTER" : "ENTER", \ " " : " ", \ "i" : "i", \ "I" : "i", \ "x" : "x", \ "X" : "x"} for x in myhotkeys.keys(): g.addHotKey(x) # Display window while True: result = g.run() if myhotkeys.has_key(result): idx = li.current() break insScreen.popWindow() return (myhotkeys[result], idx)
def __init__(self, screen, tui): self.screen = screen self.tui = tui self.tui.alreadyRegistered = 0 self.server = self.tui.serverURL size = snack._snack.size() toplevel = snack.GridForm(screen, REGISTER_WINDOW.encode('utf-8'), 1, 4) decoded_server = convert_url_from_pune(self.server) url = self.server if decoded_server != self.server: url += " (%s)" % decoded_server login_prompt = LOGIN_PROMPT % url login_label = LOGIN login_tip = LOGIN_TIP label = snack.Textbox(size[0] - 10, 3, login_prompt.encode('utf-8'), scroll=0, wrap=1) toplevel.add(label, 0, 0, anchorLeft=1) grid = snack.Grid(2, 3) label = snack.Label(login_label.encode('utf-8')) grid.setField(label, 0, 0, padding=(0, 0, 1, 0), anchorRight=1) self.userNameEntry = snack.Entry(20) self.userNameEntry.set(tui.userName) grid.setField(self.userNameEntry, 1, 0, anchorLeft=1) label = snack.Label(PASSWORD.encode('utf-8')) grid.setField(label, 0, 1, padding=(0, 0, 1, 0), anchorRight=1) try: self.passwordEntry = snack.Entry(20, password=1) except TypeError: self.passwordEntry = snack.Entry(20, hidden=1) self.passwordEntry.set(tui.password) grid.setField(self.passwordEntry, 1, 1, anchorLeft=1) toplevel.add(grid, 0, 1) label = snack.TextboxReflowed(size[0] - 10, login_tip.encode('utf-8')) toplevel.add(label, 0, 2, anchorLeft=1) # BUTTON BAR self.bb = snack.ButtonBar(screen, [(NEXT.encode('utf-8'), "next"), (BACK.encode('utf-8'), "back"), (CANCEL.encode('utf-8'), "cancel")]) toplevel.add(self.bb, 0, 3, padding=(0, 1, 0, 0), growx=1) self.g = toplevel
def VoteText(self, header, text, buttons=None, watches=None, reflow=False): if not buttons: buttons = ['Ok'] if watches is None: watches = {} with self: btnsbar = snack.ButtonBar(self.__screen, buttons) form = snack.GridForm(self.__screen, header, 1, 2) if text and reflow: textbox = snack.TextboxReflowed(width=TEXT_WIDTH, text=text, flexDown=FLEX_DOWN, flexUp=FLEX_UP) form.add(textbox, 0, 0, padding=(0, 0, 0, 1)) elif text: width, height, scroll = self.__GetWidgetBounds(5, text=text) textbox = snack.Textbox(width, height, text=text, scroll=scroll, wrap=True) form.add(textbox, 0, 0, padding=(0, 0, 0, 1)) form.add(btnsbar, 0, 1, padding=(0, 0, 0, 0)) for watch in watches: form.form.watchFile(watch, 1) ret = form.runOnce() if btnsbar.buttonPressed(ret): return btnsbar.buttonPressed(ret) elif ret in watches: return watches[ret] else: return None
def __init__(self, screen, tui): self.screen = screen self.tui = tui size = snack._snack.size() toplevel = snack.GridForm(self.screen, WHY_REGISTER_WINDOW.encode('utf-8'), 1, 2) why_register_text = WHY_REGISTER_TEXT + "\n\n" + \ WHY_REGISTER_SEC + "\n" + \ WHY_REGISTER_SEC_TXT + "\n\n" + \ WHY_REGISTER_DLD + "\n" + \ WHY_REGISTER_DLD_TXT + "\n\n" + \ WHY_REGISTER_SUPP + "\n" + \ WHY_REGISTER_SUPP_TXT + "\n\n" + \ WHY_REGISTER_COMP + "\n" + \ WHY_REGISTER_COMP_TXT + "\n\n" + \ WHY_REGISTER_TIP tb = snack.Textbox(size[0] - 10, size[1] - 14, why_register_text.encode('utf-8'), 1, 1) toplevel.add(tb, 0, 0, padding=(0, 0, 0, 1)) self.bb = snack.ButtonBar(self.screen, [(BACK_REGISTER.encode('utf-8'), "back")]) toplevel.add(self.bb, 0, 1, growx=1) self.g = toplevel
def __init__(self, screen, tui): self.screen = screen self.tui = tui self.tui.alreadyRegistered = 0 self.server = convert_url_from_puny(self.tui.serverURL) fixed_server_url = rhnreg.makeNiceServerUrl(self.server) #Save the config only if the url is different if fixed_server_url != self.server: self.server = fixed_server_url config.setServerURL(self.server) cfg.save() size = snack._snack.size() toplevel = snack.GridForm(screen, sstr(SATELLITE_URL_WINDOW), 1, 4) prompt_text = SATELLITE_URL_TEXT url_label = SATELLITE_URL_PROMPT ssl_label = SATELLITE_URL_PROMPT2 label = snack.Textbox(size[0] - 10, 3, sstr(prompt_text), scroll=0, wrap=1) toplevel.add(label, 0, 0, anchorLeft=1) # spacer label = snack.Label(sstr("")) toplevel.add(label, 0, 1) grid = snack.Grid(2, 3) label = snack.Label(sstr(url_label)) grid.setField(label, 0, 0, padding=(0, 0, 1, 0), anchorRight=1) self.urlEntry = snack.Entry(40) self.urlEntry.set(self.server) grid.setField(self.urlEntry, 1, 0, anchorLeft=1) label = snack.Label(sstr(ssl_label)) grid.setField(label, 0, 1, padding=(0, 0, 1, 0), anchorRight=1) self.sslEntry = snack.Entry(40) self.sslEntry.set(tui.sslCACert) grid.setField(self.sslEntry, 1, 1, anchorLeft=1) toplevel.add(grid, 0, 2) # BUTTON BAR self.bb = snack.ButtonBar(screen, [(sstr(NEXT), "next"), (sstr(BACK), "back"), (sstr(CANCEL), "cancel")]) toplevel.add(self.bb, 0, 3, padding=(0, 1, 0, 0), growx=1) self.g = toplevel
def __init__(self, screen, tui): self.name = "ConnectWindow" self.screen = screen self.tui = tui size = snack._snack.size() self.server = convert_url_from_puny(self.tui.serverURL) fixed_server_url = rhnreg.makeNiceServerUrl(self.server) #Save the config only if the url is different if fixed_server_url != self.server: self.server = fixed_server_url config.setServerURL(self.server) cfg.save() self.proxy = cfg['httpProxy'] toplevel = snack.GridForm(self.screen, CONNECT_WINDOW.encode('utf-8'), 1, 1) text = CONNECT_WINDOW_TEXT % self.server + "\n\n" if self.proxy: text += CONNECT_WINDOW_TEXT2 % self.proxy tb = snack.Textbox(size[0] - 30, size[1] - 20, text.encode('utf-8'), 1, 1) toplevel.add(tb, 0, 0, padding=(0, 0, 0, 1)) self.g = toplevel
def __init__(self, screen, tui): if not rhnreg.registered() or tui.test: raise WindowSkipException() self.screen = screen self.tui = tui size = snack._snack.size() systemIdXml = rpclib.xmlrpclib.loads(up2dateAuth.getSystemId()) oldUsername = systemIdXml[0][0]['username'] oldsystemId = systemIdXml[0][0]['system_id'] toplevel = snack.GridForm(self.screen, SYSTEM_ALREADY_SETUP.encode('utf-8'), 1, 2) self.bb = snack.ButtonBar(self.screen, [(YES_CONT.encode('utf-8'), "next"), (NO_CANCEL.encode('utf-8'), "exit")]) toplevel.add(self.bb, 0, 1, growx=1) tb = snack.Textbox( size[0] - 30, size[1] - 20, (SYSTEM_ALREADY_REGISTERED + "\n\n" + _("Spacewalk Location:") + " " + convert_url_from_pune(self.tui.serverURL) + "\n" + _("Login:"******" " + oldUsername + "\n" + _("System ID:") + " " + oldsystemId + "\n\n" + SYSTEM_ALREADY_REGISTERED_CONT + "\n").encode('utf-8'), 1, 1) toplevel.add(tb, 0, 0, padding=(0, 0, 0, 1)) self.g = toplevel
def error(self, message): form = snack.GridForm(self._screen, "Error", 1, 3) form.add(snack.TextboxReflowed(40, message), 0, 0) form.add(snack.Textbox(0, 2, ""), 0, 1) form.add(snack.Button("Quit"), 0, 2) form.runOnce()
def startGUI(self): GUI.startGUI(self) self.form = snack.GridForm(self.screen, _("Discovered Hosts"), 1, 1) self.textbox = snack.Textbox(50, 4, "", scroll=1) self.form.add(self.textbox, 0, 0) self.screen.drawRootText( 0, 0, _("%s -- version %s") % (self.sql.usage_name, self.sql.usage_version)) self.screen.pushHelpLine(' ')
def printDiscovered(self, mac): form = snack.GridForm(self.screen, _("Discovered New Appliance"), 1, 1) new_app = _("Discovered a new appliance with MAC (%s)") % (mac) textbox = snack.Textbox(len(new_app), 1, new_app) form.add(textbox, 0, 0) # # display the message for 2 seconds # form.draw() self.screen.refresh() time.sleep(2) self.screen.popWindow()
def HotkeyInfoWindow(insScreen, sTitle, sText, iWidth, iHeight, \ dctHotkeys, sHtext): # Get line number length = len(sText) index = 0 count = 0 scroll = 0 while index < length: if sText[index] == "\n": count += 1 if count > iHeight: scroll = 1 break index += 1 # Create Text instance t1 = snack.Textbox(iWidth - scroll * 2, iHeight, sText, scroll) t2 = snack.Textbox(iWidth, 1, "-" * iWidth) t3 = snack.Textbox(iWidth, 1, sHtext) # Create Grid instance g = snack.GridForm(insScreen, sTitle, 1, 3) g.add(t1, 0, 0) g.add(t2, 0, 1, (-1, 0, -1, 0)) g.add(t3, 0, 2, (0, 0, 0, -1)) for x in dctHotkeys.keys(): g.addHotKey(x) # Display window while True: result = g.run() if dctHotkeys.has_key(result): break # Return insScreen.popWindow() return dctHotkeys[result]
def startGUI(self): GUI.startGUI(self) self.form = snack.GridForm(self.screen, _("Inserted Appliances"), 1, 1) self.textbox = snack.Textbox(50, 4, "", scroll = 1) self.form.add(self.textbox, 0, 0) self.screen.drawRootText(0, 0, _("%s -- version %s") % (self.sql.usage_name, self.sql.usage_version)) self.screen.drawRootText(0, 1, _("Opened kickstart access to %s network") % self.sql.getPrivateNet()) self.screen.pushHelpLine(' ')
def start(self): # Create our discovery list form = snack.GridForm(self._screen, "Discovered Hosts", 1, 3) self._textbox = snack.Textbox(60, 10, "", scroll=1) label = snack.Label("MAC Address Hostname Kickstarted") form.add(label, 0, 0, anchorLeft=True, padding=(1, 0, 0, 0)) form.add(self._textbox, 0, 1, padding=(1, 0, 0, 2)) form.add(snack.Button("Quit"), 0, 2) # Call start on the base class to start the thread self.daemon = True super().start() # Launch the form and wait for the quit button to be pressed form.runOnce()
def __init__(self, screen, tui): self.screen = screen self.tui = tui size = snack._snack.size() toplevel = snack.GridForm(self.screen, START_REGISTER_WINDOW.encode('utf-8'), 1, 2) start_register_text = START_REGISTER_TEXT.encode('utf-8') tb = snack.Textbox(size[0]-10, size[1]-14, start_register_text, 1, 1) toplevel.add(tb, 0, 0, padding = (0, 0, 0, 1)) self.bb = snack.ButtonBar(self.screen, [(WHY_REGISTER.encode('utf-8'), "why_register"), (NEXT.encode('utf-8'), "next"), (CANCEL.encode('utf-8'), "cancel")]) toplevel.add(self.bb, 0, 1, growx = 1) self.g = toplevel
def __init__(self, screen, tui): self.screen = screen self.tui = tui size = snack._snack.size() self.server = convert_url_from_puny(self.tui.serverURL) self.proxy = cfg['httpProxy'] toplevel = snack.GridForm(self.screen, sstr(CONNECT_WINDOW), 1, 1) text = CONNECT_WINDOW_TEXT % self.server + "\n\n" if self.proxy: text += CONNECT_WINDOW_TEXT2 % self.proxy tb = snack.Textbox(size[0] - 30, size[1] - 20, sstr(text), 1, 1) toplevel.add(tb, 0, 0, padding=(0, 0, 0, 1)) self.g = toplevel
def ButtonInfoWindow(insScreen, sTitle, sText, iWidth, iHeight, lstButtons): # Get line number length = len(sText) index = 0 count = 0 scroll = 0 while index < length: if sText[index] == "\n": count += 1 if count > iHeight: scroll = 1 break index += 1 # Create Text instance t1 = snack.Textbox(iWidth - scroll * 2, iHeight, sText, scroll) # Create Button instance bb = snack.ButtonBar(insScreen, lstButtons) # Create Grid instance g = snack.GridForm(insScreen, sTitle, 1, 2) g.add(t1, 0, 0) g.add(bb, 0, 1, (0, 1, 0, -1)) # Display window while True: result = bb.buttonPressed(g.run()) rcode = None for x in lstButtons: if result == x.lower(): rcode = x[0].lower() break if rcode != None: break insScreen.popWindow() return rcode
def __init__(self,screen,title,msg,ok_button='OK',width=40,height=7,**kargs): ''' This form will create a simple message box at the format of +-----------------------------+ | | | Message ............. | | ..................... | | ..................... | | ..................... | | ..................... | | ..................... | | ..................... | | ..................... | | ..................... | | | | +-------+ | | | OK | | | +-------+ | +-----------------------------+ Variables: screen - the screen to write to title - form title msg - The message to display ok_button - The OK button title width - Text box width in columns height - Text box height in lines scroll - Add scrolling 1:yes 0 :no Addtional arguments: Buttons - If the keyword Buttons is given, it is assumet to be a widget and added to the form insted of the Ok/Cancel Buttons ''' self.TextBox=snack.Textbox(width=width,height=height,text=msg,scroll=0) if kargs.get('Buttons',None): self.Buttons=kargs['Buttons'] else: self.Buttons=snack.Button(ok_button) super(MessageForm,self).__init__(screen,name=title,Widgets=[self.TextBox,self.Buttons])
def __init__(self, screen, tui): if not rhnreg.rhsm_registered() or tui.test: raise WindowSkipException() self.screen = screen self.tui = tui size = snack._snack.size() toplevel = snack.GridForm(self.screen, sstr(SYSTEM_ALREADY_SETUP), 1, 2) self.bb = snack.ButtonBar(self.screen, [(sstr(YES_CONT), "next"), (sstr(NO_CANCEL), "exit")]) toplevel.add(self.bb, 0, 1, growx=1) tb = snack.Textbox( size[0] - 30, size[1] - 20, sstr(WARNING + "\n\n" + RHSM_SYSTEM_ALREADY_REGISTERED + "\n\n" + SYSTEM_ALREADY_REGISTERED_CONT + "\n"), 1, 1) toplevel.add(tb, 0, 0, padding=(0, 0, 0, 1)) self.g = toplevel
def waitGUI(self): """Shows a list of discovered but not kickstarted nodes for a few seconds.""" not_done = '' hosts = self.kickstarted.keys() hosts.sort() for name in hosts: status = self.kickstarted[name] if status != 200: ks = '( )' if status: ks = '(%s)' % status not_done += '%s \t %s\n' % (name, ks) form = snack.GridForm(self.screen, _("Not kickstarted, please wait..."), 1, 1) textbox = snack.Textbox(35, 4, not_done, scroll=1) form.add(textbox, 0, 0) form.draw() self.screen.refresh() time.sleep(1) self.screen.popWindow()
def __init__(self, screen, tui): if not rhnreg.rhsm_registered() or tui.test: raise WindowSkipException() self.name = "AlreadyRegisteredSubscriptionManagerWindow" self.screen = screen self.tui = tui size = snack._snack.size() toplevel = snack.GridForm(self.screen, SYSTEM_ALREADY_SETUP.encode('utf-8'), 1, 2) self.bb = snack.ButtonBar(self.screen, [(YES_CONT.encode('utf-8'), "next"), (NO_CANCEL.encode('utf-8'), "exit")]) toplevel.add(self.bb, 0, 1, growx=1) tb = snack.Textbox(size[0] - 30, size[1] - 20, (WARNING + "\n\n" + RHSM_SYSTEM_ALREADY_REGISTERED + "\n\n" + SYSTEM_ALREADY_REGISTERED_CONT + "\n").encode('utf-8'), 1, 1) toplevel.add(tb, 0, 0, padding=(0, 0, 0, 1)) self.g = toplevel
def __init__(self, screen, tui): self.screen = screen self.tui = tui self.reg_info = tui.reg_info size = snack._snack.size() toplevel = snack.GridForm(screen, REVIEW_WINDOW.encode('utf-8'), 1, 2) review_window_text = '' if not self.tui.yum_plugin_present: review_window_text += YUM_PLUGIN_WARNING + "\n\n" if self.tui.yum_plugin_conf_error: review_window_text += YUM_PLUGIN_CONF_ERROR + "\n\n" if self.tui.yum_plugin_conf_changed: review_window_text += YUM_PLUGIN_CONF_CHANGED + "\n\n" # Build up the review_window_text based on the data in self.reg_info review_window_text += REVIEW_WINDOW_PROMPT + "\n\n" # Create and add the text for what channels the system was # subscribed to. if len(self.reg_info['channels']) > 0: channel_list = "" for channel in self.reg_info['channels']: channel_list += channel + "\n" channels = CHANNELS_TITLE + "\n" + \ OK_CHANNELS + "\n" + \ "%s\n" log.log_debug("server type is %s " % self.tui.serverType) channels += CHANNELS_SAT_WARNING review_window_text += channels % channel_list + "\n\n" if len(self.reg_info['system_slots']) > 0: slot_list = "" for slot in self.reg_info['system_slots']: if slot == 'enterprise_entitled': slot_list += MANAGEMENT + "\n" elif slot == 'provisioning_entitled': slot_list += PROVISIONING + "\n" elif slot == 'sw_mgr_entitled': slot_list += UPDATES + "\n" elif slot == 'monitoring_entitled': slot_list += MONITORING + "\n" elif slot == 'virtualization_host': slot_list += VIRT + "\n" elif slot == 'virtualization_host_platform': slot_list += VIRT_PLATFORM + "\n" else: slot_list += slot + "\n" review_window_text += SLOTS % slot_list + "\n\n" if len(self.reg_info['universal_activation_key']) > 0: act_key_list = "" for act_key in self.reg_info['universal_activation_key']: act_key_list += act_key review_window_text += ACTIVATION_KEY % (act_key_list) self.review_window = snack.Textbox(size[0] - 10, size[1] - 14, review_window_text.encode('utf-8'), 1, 1) toplevel.add(self.review_window, 0, 0, padding=(0, 1, 0, 0)) # BUTTON BAR self.bb = snack.ButtonBar(screen, [(OK.encode('utf-8'), "next")]) toplevel.add(self.bb, 0, 1, padding=(0, 1, 0, 0), growx=1) self.g = toplevel
def run(self): self.startGUI() # # make sure the box requested exists # if self.getBox() == 0: self.endGUI() return if self.getBootaction() == 0: self.endGUI() return self.controller.loadPlugins(self.sql) try: self.applianceLongNameGUI() self.initializeRank() if self.hostname: query = 'select id from nodes ' +\ 'where name="%s"' % self.hostname rows = self.sql.execute(query) if rows: raise InsertError("Node %s already exists" % self.hostname) except (ValueError, InsertError) as msg: self.errorGUI(msg) self.endGUI() sys.stderr.write(_("%s\n") % str(msg)) return log = open('/var/log/messages', 'r') log.seek(0, 2) for dir in ['httpd', 'apache2']: try: kslog = open('/var/log/%s/ssl_access_log' % dir, 'r') except: pass kslog.seek(0, 2) # # key used to quit # self.screen.pushHelpLine( _(" Press <F8> to quit, press <F9> to force quit")) self.form.addHotKey('F8') self.form.addHotKey('F9') self.form.setTimer(1000) self.statusGUI() result = self.form.run() suggest_done = 0 done = 0 while not done: # Check syslog for a new line syslog_line = log.readline() if syslog_line and not suggest_done: try: self.listenDhcp(syslog_line) except InsertDone: suggest_done = 1 except (ValueError, InsertError) as msg: self.warningGUI(msg) continue # Check http log for a new line access_line = kslog.readline() if access_line: try: self.listenKs(access_line) except InsertError as msg: self.warningGUI(msg) continue result = self.form.run() done = self.checkDone(result, suggest_done) # # if there was a change to the database, restart some # services # if self.restart_services == 1: form = snack.GridForm(self.screen, _("Restarting Services"), 1, 1) message = _("Restarting Services...") textbox = snack.Textbox(len(message), 1, message) form.add(textbox, 0, 0) form.draw() self.screen.refresh() self.controller.done() self.screen.popWindow() # # cleanup # log.close() self.endGUI() if self.lastmsg != '': sys.stderr.write(_("%s\n") % self.lastmsg)
def PKGINSTPackageWindow(insScreen, packages, selected_packages, iPosition, lTargetSize, lHostSize, search, \ install_type): installed_pkgs = 0 numChange = True #Select or unselect operation that lead selected number change # Create CheckboxTree instance (main_width, main_height) = GetHotKeyMainSize(insScreen) main_height -= 2 #print " packages = %s" % len(packages) if len(packages) > main_height: scroll = 1 else: scroll = 0 hotkey_base_text = "SPACE/ENTER:select/unselect A:select/unselect All R:seaRch N:Next B:Back I:Info X:eXit" wrapper = textwrap.TextWrapper(width=main_width) hotkey_text = wrapper.fill(hotkey_base_text) if hotkey_text != hotkey_base_text: main_height -= 1 hotkey_line = 2 else: hotkey_line = 1 li = snack.Listbox(main_height, scroll=scroll, width=main_width) idx = 0 for x in packages: if install_type == ACTION_INSTALL and x.installed: status = "I" installed_pkgs += 1 elif x in selected_packages: status = SIGN_SELECT[install_type] else: status = " " str = "[%s] %s " % (status, x.name) li.append(str, idx) idx += 1 # Set position num_package = len(packages) before_position = 0 if num_package > 1: if num_package <= iPosition: iPosition = num_package - 1 if num_package > (iPosition + main_height / 2): before_position = (iPosition + main_height / 2) else: before_position = num_package - 1 li.setCurrent(before_position) li.setCurrent(iPosition) # Create Text instance text = "" t1 = snack.Textbox(main_width, 1, "-" * main_width) t2 = snack.Textbox(main_width, 1, text) t3 = snack.Textbox(main_width, 1, "-" * main_width) t4 = snack.Textbox(main_width, hotkey_line, hotkey_text) # Create Grid instance if search == None: title = "Select package" else: title = "Select package - (%s)" % search g = snack.GridForm(insScreen, title, 1, 5) g.add(li, 0, 0) g.add(t1, 0, 1, (-1, 0, -1, 0)) g.add(t2, 0, 2) g.add(t3, 0, 3, (-1, 0, -1, 0)) g.add(t4, 0, 4, (0, 0, 0, -1)) ############# append test key 'S' #### myhotkeys = {"ENTER" : "ENTER", \ " " : " ", \ "n" : "n", \ "N" : "n", \ "b" : "b", \ "B" : "b", \ "r" : "r", \ "R" : "r", \ "i" : "i", \ "I" : "i", \ "x" : "x", \ "X" : "x", \ "a" : "a", \ "A" : "a"} for x in myhotkeys.keys(): g.addHotKey(x) ##################################### while True: if numChange: if install_type == ACTION_INSTALL: text = "All Packages [%ld] Installed Packages [%ld] Selected Packages [%ld]" % \ (num_package, installed_pkgs, len(selected_packages)) else: text = "All Packages [%ld] Selected Packages [%ld]" % \ (num_package, len(selected_packages)) t2.setText(text) numChange = False result = g.run() idx = li.current() if myhotkeys.has_key(result): if myhotkeys[result] == "ENTER" or \ myhotkeys[result] == " ": numChange = True li = _StatusToggle(li, myhotkeys[result], idx, selected_packages, \ packages, install_type) idx += 1 if idx >= num_package: idx = num_package - 1 li.setCurrent(idx) elif myhotkeys[result] == "a": ### li = _SelectAll(li, myhotkeys[result],num_package, selected_packages, \ packages, install_type) li.setCurrent(idx) numChange = True else: break insScreen.popWindow() return (myhotkeys[result], idx, selected_packages)
def PKGINSTDebuginfoWindow(insScreen, lstDebugPkg, selected_packages, iPosition, \ lTargetSize, lHostSize): installed_pkgs = 0 # Create CheckboxTree instance (main_width, main_height) = GetHotKeyMainSize(insScreen) main_height -= 2 if len(lstDebugPkg) > main_height: scroll = 1 else: scroll = 0 hotkey_base_text = "SPACE/ENTER:select/unselect N:Next B:Back I:Info X:eXit" wrapper = textwrap.TextWrapper(width=main_width) hotkey_text = wrapper.fill(hotkey_base_text) if hotkey_text != hotkey_base_text: main_height -= 1 hotkey_line = 2 else: hotkey_line = 1 li = snack.Listbox(main_height, scroll=scroll, width=main_width) idx = 0 for x in lstDebugPkg: if x.installed: status = "I" installed_pkgs += 1 elif x in selected_packages: status = "*" else: status = " " str = "[%s] %s " % (status, x.name) li.append(str, idx) idx += 1 # Set position num_package = len(lstDebugPkg) if num_package <= iPosition: iPosition = num_package - 1 if num_package > (iPosition + main_height / 2): before_position = (iPosition + main_height / 2) else: before_position = num_package - 1 li.setCurrent(before_position) li.setCurrent(iPosition) # Create Text instance t1 = snack.Textbox(main_width, 1, "-" * main_width) text = "All Packages [%ld] Installed Packages [%ld] Selected Packages [%ld]" % \ (num_package, installed_pkgs, len(selected_packages)) t2 = snack.Textbox(main_width, 1, text) t3 = snack.Textbox(main_width, 1, "-" * main_width) t4 = snack.Textbox(main_width, hotkey_line, hotkey_text) # Create Grid instance g = snack.GridForm(insScreen, "Select debuginfo packages", 1, 5) g.add(li, 0, 0) g.add(t1, 0, 1, (-1, 0, -1, 0)) g.add(t2, 0, 2) g.add(t3, 0, 3, (-1, 0, -1, 0)) g.add(t4, 0, 4, (0, 0, 0, -1)) ############# append test key 'S' #### myhotkeys = {"ENTER" : "ENTER", \ " " : " ", \ "n" : "n", \ "N" : "n", \ "b" : "b", \ "B" : "b", \ "i" : "i", \ "I" : "i", \ "x" : "x", \ "X" : "x"} for x in myhotkeys.keys(): g.addHotKey(x) ##################################### # Display window while True: result = g.run() idx = li.current() if myhotkeys.has_key(result): if myhotkeys[result] == "ENTER" or \ myhotkeys[result] == " ": li = _StatusToggle(li, myhotkeys[result], idx, selected_packages, lstDebugPkg) idx += 1 if idx >= num_package: idx = num_package - 1 li.setCurrent(idx) else: break insScreen.popWindow() return (myhotkeys[result], idx, selected_packages)
except InsertError, msg: self.warningGUI(msg) continue result = self.form.run() done = self.checkDone(result, suggest_done) # # if there was a change to the database, restart some # services # if self.restart_services == 1: form = snack.GridForm(self.screen, _("Restarting Services"), 1, 1) message = _("Restarting Services...") textbox = snack.Textbox(len(message), 1, message) form.add(textbox, 0, 0) form.draw() self.screen.refresh() self.controller.done() self.screen.popWindow() # # cleanup # log.close() self.endGUI() if self.lastmsg != '':
def ActionChoice(self, header, text, options, watches=None, current=None, timeout=None): if watches is None: watches = [] with self: text, text_width, text_height = snack.reflow(text, width=TEXT_WIDTH, flexDown=FLEX_DOWN, flexUp=FLEX_UP) width, height, scroll = self.__GetWidgetBounds(text_height, nlines=len(options)) items_width = [len(option) for option, item in options] scrolled = 3 if scroll else 0 width = min( TEXT_WIDTH, max(items_width) + scrolled if items_width else TEXT_WIDTH) listbox = snack.Listbox(height, scroll=scroll, width=width, returnExit=1) for option, item in options: listbox.append(option, item) if current is not None: try: listbox.setCurrent(current) except KeyError: pass form = snack.GridForm(self.__screen, header, 1, 2) if text: textbox = snack.Textbox(width=text_width, height=text_height, text=text) form.add(textbox, 0, 0, padding=(0, 0, 0, 1)) form.add(listbox, 0, 1) for watch in watches: form.form.watchFile(watch, 1) if timeout is not None: form.form.setTimer(timeout) form.addHotKey('ESC') form.addHotKey('+') form.addHotKey('-') form.addHotKey('LEFT') form.addHotKey('RIGHT') ret = form.runOnce() if ret is listbox: return listbox.current(), ACTION_SET elif ret == 'TIMER': return listbox.current() if options else None, None elif ret in watches: return listbox.current() if options else None, watch elif ret == 'F12': return listbox.current() if options else None, ACTION_SET elif ret == 'ESC': raise KeyboardInterrupt() elif ret == '-' or ret == 'LEFT': return listbox.current() if options else None, ACTION_DEC elif ret == '+' or ret == 'RIGHT': return listbox.current() if options else None, ACTION_INC else: raise NotImplementedError( "Unexpected return value from form.runOnce: %s" % ret)
def __init__(self, width, height, text, scroll=0, wrap=0): BaseWidget.__init__(self) self._widget = snack.Textbox(width, height, text, scroll, wrap)
def PKGTypeSelectWindow(insScreen, pkgTypeList, position=0): iPosition = position # Create CheckboxTree instance (main_width, main_height) = GetHotKeyMainSize(insScreen) main_height -= 2 #print " packages = %s" % len(packages) if len(pkgTypeList) > main_height: scroll = 1 else: scroll = 0 hotkey_base_text = "SPACE/ENTER:select/unselect N:Next B:Back I:Info X:eXit" wrapper = textwrap.TextWrapper(width=main_width) hotkey_text = wrapper.fill(hotkey_base_text) if hotkey_text != hotkey_base_text: main_height -= 1 hotkey_line = 2 else: hotkey_line = 1 li = snack.Listbox(main_height, scroll=scroll, width=main_width) idx = 0 for x in pkgTypeList: if x.status: status = "*" else: status = " " str = "%s [%s]" % (x.name, status) li.append(str, idx) idx += 1 # Set position num_type = len(pkgTypeList) if num_type > 1: if num_type <= iPosition: iPosition = num_typr - 1 if num_type > (iPosition + main_height / 2): before_position = (iPosition + main_height / 2) else: before_position = num_type - 1 li.setCurrent(before_position) li.setCurrent(iPosition) t1 = snack.Textbox(main_width, 1, "-" * main_width) t2 = snack.Textbox(main_width, hotkey_line, hotkey_text) # Create Grid instance title = "Customize special type packages" g = snack.GridForm(insScreen, title, 1, 5) g.add(t1, 0, 2) g.add(t2, 0, 4, (0, 0, 0, -1)) g.add(li, 0, 0) ############# append test key 'S' #### myhotkeys = {"ENTER" : "ENTER", \ " " : " ", \ "n" : "n", \ "N" : "n", \ "b" : "b", \ "B" : "b", \ "i" : "i", \ "I" : "i", \ "x" : "x", \ "X" : "x"} for x in myhotkeys.keys(): g.addHotKey(x) ##################################### while True: result = g.run() idx = li.current() if myhotkeys.has_key(result): if myhotkeys[result] == "ENTER" or \ myhotkeys[result] == " ": curr_type = pkgTypeList[idx] if not curr_type.status: curr_type.status = True newsign = "*" else: curr_type.status = False newsign = " " item = "%s [%s]" % (curr_type.name, newsign) li.replace(item, idx) idx += 1 if idx >= num_type: idx = num_type - 1 li.setCurrent(idx) else: break insScreen.popWindow() return (myhotkeys[result], idx, pkgTypeList)