예제 #1
0
def display_create_template(screen, title, vm_type, templates, help=None):
    """Helper class for displaying a form for creating a new VM template"""
    label_base = Textbox(40, 2, 
        'Select %s VM to be used as a basis\n(only stopped VMs are allowed)' % 
        vm_type, 0, 0)
    
    base_tmpl = Listbox(7, 1, 0, 30, 1)
    for vm in templates.keys():
        base_tmpl.append(templates[vm], vm)
    
    label_newname = Textbox(40, 2, 'Name of the template to be created', 0, 0)
    spacer1 = Textbox(1, 1, "", 0, 0)
    spacer2 = Textbox(1, 1, "", 0, 0)
    entry_newname = Entry(30, 'template_name')
    bb = ButtonBar(screen, ('Create new template', ('Back to menu', 'back')))
    form = GridFormHelp(screen, title, help, 1, 7)
    form.add(label_base, 0, 0)
    form.add(base_tmpl, 0, 1)
    form.add(spacer1, 0, 2)
    form.add(label_newname, 0, 3)
    form.add(entry_newname, 0, 4)
    form.add(spacer2, 0, 5)
    form.add(bb, 0, 6)
    form_result = form.runOnce()
    tmpl_name = entry_newname.value()
    # remove whitespaces from the template name
    tmpl_name = re.sub(r'\s', '', tmpl_name)
    return (bb.buttonPressed(form_result), str(base_tmpl.current()), tmpl_name)
예제 #2
0
def display_create_template(screen, title, vm_type, templates, help=None):
    """Helper function for displaying a form for creating a new VM template"""
    label_base = Textbox(
        40, 2,
        'Select %s VM to be used as a basis\n(only stopped VMs are allowed)' %
        vm_type, 0, 0)

    base_tmpl = Listbox(7, 1, 0, 30, 1)
    for vm in templates.keys():
        base_tmpl.append(templates[vm], vm)

    label_newname = Textbox(40, 2, 'Name of the template to be created', 0, 0)
    spacer1 = Textbox(1, 1, "", 0, 0)
    spacer2 = Textbox(1, 1, "", 0, 0)
    entry_newname = Entry(30, 'template_name')
    bb = ButtonBar(screen, ('Create new template', ('Back to menu', 'back')))
    form = GridFormHelp(screen, title, help, 1, 7)
    form.add(label_base, 0, 0)
    form.add(base_tmpl, 0, 1)
    form.add(spacer1, 0, 2)
    form.add(label_newname, 0, 3)
    form.add(entry_newname, 0, 4)
    form.add(spacer2, 0, 5)
    form.add(bb, 0, 6)
    form_result = form.runOnce()
    tmpl_name = entry_newname.value()
    # remove whitespaces from the template name
    tmpl_name = re.sub(r'\s', '', tmpl_name)
    return (bb.buttonPressed(form_result), str(base_tmpl.current()), tmpl_name)
 def get_pool_details_page(self, screen):
     ignore = screen
     pool = self.get_libvirt().get_storage_pool(self.get_selected_pool())
     volumes = Listbox(0)
     for name in pool.listVolumes():
         volume = pool.storageVolLookupByName(name)
         volumes.append("%s (%s)" % (name, utils.size_as_mb_or_gb(volume.info()[1])), name)
     autostart = "No"
     if pool.autostart():
         autostart = "Yes"
     fields = []
     fields.append(("Name", pool.name()))
     fields.append(("Volumes", volumes))
     fields.append(("Autostart", autostart))
     return [Label("Details For Storage Pool: %s" % self.get_selected_pool()),
             self.create_grid_from_fields(fields)]
예제 #4
0
 def get_pool_details_page(self, screen):
     ignore = screen
     pool = self.get_libvirt().get_storage_pool(self.get_selected_pool())
     volumes = Listbox(0)
     for name in pool.listVolumes():
         volume = pool.storageVolLookupByName(name)
         volumes.append(
             "%s (%s)" % (name, utils.size_as_mb_or_gb(volume.info()[1])),
             name)
     autostart = "No"
     if pool.autostart():
         autostart = "Yes"
     fields = []
     fields.append(("Name", pool.name()))
     fields.append(("Volumes", volumes))
     fields.append(("Autostart", autostart))
     return [
         Label("Details For Storage Pool: %s" % self.get_selected_pool()),
         self.create_grid_from_fields(fields)
     ]
예제 #5
0
def ExtListboxChoiceWindow(screen, title, text, items,
                           buttons=('Ok', 'Cancel'),
                           width=40, scroll=0, height=-1,
                           default=None, help=None):

    if (height == -1):
        height = len(items)

    bb = ButtonBar(screen, buttons, compact=1)
    t = TextboxReflowed(width, text)
    lb = Listbox(height, scroll=scroll, returnExit=1)
    count = 0
    for item in items:
        if isinstance(item, types.TupleType):
            (text, key) = item
        else:
            text = item
            key = count

        if (default == count):
            default = key
        elif (default == item):
            default = key

        lb.append(text, key)
        count = count + 1

    if (default is not None):
        lb.setCurrent(default)

    g = GridFormHelp(screen, title, help, 1, 3)
    g.add(t, 0, 0)
    g.add(lb, 0, 1, padding=(0, 1, 0, 1))
    g.add(bb, 0, 2, growx=1)

    rc = g.runOnce()

    return (rc, bb.buttonPressed(rc), lb.current())
예제 #6
0
    def show_menu(self, title, top_node):
        selection = 0

        while True:
            items = Menuconfig.menu_node_strings(top_node, 0)

            height = len(items)
            scroll = 0
            if height > self.screen.height - 13:
                height = self.screen.height - 13
                scroll = 1

            buttons = [('Save & Build', 'build', 'B'),
                       ('Save & Exit', 'save', 'S'), (' Help ', 'help', 'h'),
                       (' Exit ', 'exit', 'ESC')]
            buttonbar = ButtonBar(self.screen, buttons)
            listbox = Listbox(height, scroll=scroll, returnExit=1)
            count = 0
            for string, _ in items:
                listbox.append(string, count)
                if (selection == count):
                    listbox.setCurrent(count)
                count = count + 1

            grid = GridFormHelp(self.screen, title, None, 1, 2)
            grid.add(listbox, 0, 0, padding=(0, 0, 0, 1))
            grid.add(buttonbar, 0, 1, growx=1)
            grid.addHotKey(' ')

            rc = grid.runOnce()

            action = buttonbar.buttonPressed(rc)
            if action and action != 'help':
                return action

            if count == 0:
                continue

            selection = listbox.current()
            _, selected_node = items[selection]
            sym = selected_node.item

            if action == 'help':
                prompt, _ = selected_node.prompt
                if hasattr(selected_node, 'help') and selected_node.help:
                    help = selected_node.help
                else:
                    help = 'No help available.'
                ButtonChoiceWindow(screen=self.screen,
                                   title="Help on '{}'".format(prompt),
                                   text=help,
                                   width=60,
                                   buttons=['  Ok  '])
                continue

            show_submenu = False

            if type(sym) == Symbol:
                if rc == ' ':
                    if sym.type == BOOL:
                        sym.set_value('n' if sym.tri_value > 0 else 'y')
                else:
                    if selected_node.is_menuconfig:
                        show_submenu = True
                    elif sym.type in (STRING, INT, HEX):
                        action, values = EntryWindow(
                            screen=self.screen,
                            title=sym.name,
                            text='Enter a %s value:' % TYPE_TO_STR[sym.type],
                            prompts=[('', sym.str_value)],
                            buttons=[('  Ok  ', 'Ok'), ('Cancel', '', 'ESC')])
                        if action == 'Ok':
                            self.kconf.warnings = []
                            val = values[0]
                            if sym.type == HEX and not val.startswith('0x'):
                                val = '0x' + val
                            sym.set_value(val)
                            # only fetching triggers range check - how ugly...
                            sym.str_value
                            if len(self.kconf.warnings) > 0:
                                ButtonChoiceWindow(screen=self.screen,
                                                   title="Invalid entry",
                                                   text="\n".join(
                                                       self.kconf.warnings),
                                                   width=60,
                                                   buttons=['  Ok  '])
                                self.kconf.warnings = []
            elif selected_node.is_menuconfig and type(sym) != Choice:
                show_submenu = True

            if show_submenu:
                submenu_title, _ = selected_node.prompt
                action = self.show_menu(submenu_title, selected_node.list)
                if action != 'exit':
                    return action
예제 #7
0
파일: patch.py 프로젝트: dsoprea/Snackwich
def ListboxChoiceWindow(screen, title, text, items, buttons = ('Ok', 'Cancel'), 
                        width=40, scroll=None, height=-1, default=None, help=None, 
                        timer_ms=None, secondary_message=None, 
                        secondary_message_width=None, 
                        run_type=RT_EXECUTEANDPOP):
    
    # Dustin: Added timer_ms parameter. Added secondary_message arguments. 
    #         Added result boolean for whether ESC was pressed. Results are now
    #         dictionaries. Added auto_pop parameter.
    
    if height == -1: 
        height = len(items)
    
    if scroll == None:
        scroll = len(items) > height

    bb = ButtonBar(screen, buttons)
    t = TextboxReflowed(width, text)
    l = Listbox(height, scroll = scroll, returnExit = 1)
    count = 0
    for item in items:
        if (type(item) == tuple):
            (text, key) = item
        else:
            text = item
            key = count

        if (default == count):
            default = key
        elif (default == text):
            default = key

        l.append(text, key)
        count = count + 1

    if (default != None):
        l.setCurrent (default)

    g = GridFormHelp(screen, title, help, 1, 3 + (1 if secondary_message else 
                                                  0))
    
    row = 0
    
    g.add(t, 0, row)
    row += 1

    if secondary_message:
        if not secondary_message_width:
            secondary_message_width = width
    
        t2 = TextboxReflowed(secondary_message_width, secondary_message)
        g.add(t2, 0, row, padding = (0, 0, 0, 1))
        row += 1

    g.add(l, 0, row, padding = (0, 1, 0, 1))
    row += 1
    
    g.add(bb, 0, row, growx = 1)
    row += 1

    if timer_ms:
        g.form.w.settimer(timer_ms)

    (button, is_esc) = ActivateWindow(g, run_type, bb)

    return {'button': button, 
            'is_esc': is_esc, 
            'grid': g,

            # A hack. There's no count method.
            'selected': l.current() if l.key2item else None,  
           }