Changeset 205

Show
Ignore:
Timestamp:
20.07.2008 20:29:19 (6 months ago)
Author:
poillubo
Message:

* moved a compiled regexp out of a function in pycarepl
* in pycagenconf

+ placements support
+ refactored the code a little

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/utils/pycagenconf

    r204 r205  
    173173        self.main_vars = dict() 
    174174 
    175         self.table = gtk.Table(rows=4, columns=2) 
     175        table = gtk.Table(rows=4, columns=2) 
    176176        for i, title in enumerate(('config path', 'PycaWM instance name', 
    177177                                   'number of desktops', 'display name')): 
    178178            entry_label = make_label_with_right_alignment(title) 
    179             self.table.attach(entry_label, 0, 1, i, i + 1, 
    180                               xoptions=gtk.SHRINK|gtk.FILL) 
     179            table.attach(entry_label, 0, 1, i, i + 1, 
     180                         xoptions=gtk.SHRINK|gtk.FILL) 
    181181        entries = (('config_path', '~/.config/PycaWM/config.py'), 
    182182                   ('wm_name', 'pika'), 
     
    189189            entry.set_text(entry_text) 
    190190            self.main_vars[entry_name] = entry.get_text 
    191             self.table.attach(entry, 1, 2, i, i + 1) 
    192         self.frame_vbox.pack_start(self.table, expand=False) 
     191            table.attach(entry, 1, 2, i, i + 1) 
     192        self.frame_vbox.pack_start(table, expand=False) 
    193193 
    194194    def generate_vars(self, gen_vars): 
     
    301301 
    302302    def __init__(self): 
    303         self.table = gtk.Table(rows=2, columns=2) 
    304         self.focuses_store = gtk.ListStore(object,) 
     303        table = gtk.Table(rows=2, columns=3) 
     304        for i, title in enumerate(('default focus', 'default placements', 
     305                                   'wallpaper path')): 
     306            entry_label = make_label_with_right_alignment(title) 
     307            table.attach(entry_label, 0, 1, i, i + 1, 
     308                         xoptions=gtk.SHRINK|gtk.FILL) 
     309 
     310        self.focuses = gtk.combo_box_new_text() 
    305311        for focus in find_default_focuses(): 
    306             self.focuses_store.append((focus,)) 
    307         self.focuses = gtk.ComboBox(self.focuses_store) 
     312            self.focuses.append_text(repr(focus.__name__,)) 
     313        self.focuses.set_active(0) 
     314        table.attach(self.focuses, 1, 2, 0, 1) 
     315 
     316        placements_vbox = gtk.VBox(False, 0) 
     317        placements_hbox = gtk.HBox(False, 0) 
     318        self.available_placements = gtk.combo_box_new_text() 
     319        for placement in find_default_placements(): 
     320            self.available_placements.append_text(repr(placement.__name__,)) 
     321        self.available_placements.set_active(0) 
     322        add_button = gtk.Button('add placement') 
     323        placements_hbox.add(self.available_placements) 
     324        placements_hbox.add(add_button) 
     325        self.placements_store = gtk.ListStore(str,) 
     326        placements_treeview = gtk.TreeView(self.placements_store) 
    308327        cell = gtk.CellRendererText() 
    309         self.focuses.pack_start(cell, True) 
    310         self.focuses.set_cell_data_func(cell, self.show_repr_obj_name) 
    311         self.focuses.set_active(0) 
    312         for i, title in enumerate(('default focus', 'wallpaper path')): 
    313             entry_label = make_label_with_right_alignment(title) 
    314             self.table.attach(entry_label, 0, 1, i, i + 1, 
    315                               xoptions=gtk.SHRINK|gtk.FILL) 
    316         self.table.attach(self.focuses, 1, 2, 0, 1) 
     328        column = gtk.TreeViewColumn() 
     329        column.pack_start(cell, True) 
     330        column.add_attribute(cell, 'text', 0) 
     331        placements_treeview.append_column(column) 
     332        placements_treeview.set_headers_visible(False) 
     333        placements_treeview.set_reorderable(True) 
     334        remove_button = gtk.Button('remove placement') 
     335        remove_button.set_sensitive(False) 
     336        add_button.connect('clicked', self.add_placement, remove_button) 
     337        remove_button.connect('clicked', self.remove_placement, 
     338                              placements_treeview) 
     339        placements_treeview.get_selection().connect( 
     340            'changed', self.select_placement, remove_button) 
     341        placements_vbox.add(placements_hbox) 
     342        placements_vbox.add(placements_treeview) 
     343        placements_vbox.add(remove_button) 
     344        table.attach(placements_vbox, 1, 2, 1, 2) 
     345 
    317346        self.wallpaper_path = gtk.Entry() 
    318         self.table.attach(self.wallpaper_path, 1, 2, 1, 2) 
    319         self.frame_vbox.pack_start(self.table, expand=False) 
    320  
    321     @staticmethod 
    322     def show_repr_obj_name(_, cell, store, iter): 
    323         obj = store.get_value(iter, 0) 
    324         cell.set_property('text', repr(obj.__name__)) 
     347        table.attach(self.wallpaper_path, 1, 2, 2, 3) 
     348 
     349        self.frame_vbox.pack_start(table, expand=False) 
     350 
     351    def add_placement(self, _, remove_button): 
     352        placement = self.available_placements.get_active_text() 
     353        active = self.available_placements.get_active() 
     354        if placement is None or active < 0: 
     355            return 
     356 
     357        self.placements_store.append([placement]) 
     358        self.available_placements.remove_text(active) 
     359        self.available_placements.set_active(0) 
     360 
     361    def remove_placement(self, remove_button, treeview): 
     362        _, iter = treeview.get_selection().get_selected() 
     363        if iter is None: 
     364            return 
     365 
     366        placement = self.placements_store[iter][0] 
     367        self.placements_store.remove(iter) 
     368        self.available_placements.append_text(placement) 
     369        self.available_placements.set_active(0) 
     370 
     371    def select_placement(self, selection, remove_button): 
     372        _, iter = selection.get_selected() 
     373        remove_button.set_sensitive(iter is not None) 
    325374 
    326375    def generate_vars(self, gen_vars): 
    327         active = self.focuses.get_active() 
    328         if active < 0: 
    329             return 
    330  
    331         gen_vars['focus'] = repr(self.focuses_store[active][0].__name__) 
     376        focus = self.focuses.get_active_text() 
     377        if focus is None: 
     378            return 
     379 
     380        gen_vars['focus'] = focus 
     381        gen_vars['placements'] = [eval(row[0]) for row in self.placements_store] 
    332382        gen_vars['wallpaper_path'] = self.wallpaper_path.get_text() 
    333383 
    334384    def generate_code(self, gen_code): 
    335385        gen_code[Locations.misc].append('%(wm_name)s.set_focus(%(focus)s)') 
     386        if self.placements_store.get_iter_first() is not None: 
     387            gen_code[Locations.misc].append( 
     388                '%(wm_name)s.set_placements(%(placements)s)') 
    336389        if self.wallpaper_path.get_text(): 
    337390            gen_code[Locations.misc].append( 
     
    428481            gtk.Label(str='Variables that can be used are:'), 
    429482            expand=False) 
    430         self.treestore = gtk.TreeStore(str, str) 
    431         self.treeview = gtk.TreeView(self.treestore) 
     483        self.store = gtk.ListStore(str, str) 
     484        self.treeview = gtk.TreeView(self.store) 
    432485        cell = gtk.CellRendererText() 
    433         for i, title in enumerate(['variable', 'value']): 
     486        for i, title in enumerate(('variable', 'value')): 
    434487            column = gtk.TreeViewColumn(title) 
    435488            column.pack_start(cell, True) 
     
    490543    def display_vars(self, _): 
    491544        dummy_vars = dict() 
    492         self.treestore.clear() 
     545        self.store.clear() 
    493546        for page in BasePage.pages: 
    494547            page.generate_vars(dummy_vars) 
    495548        for var, val in sorted(dummy_vars.iteritems()): 
    496             self.treestore.append(None, [var, val]) 
     549            self.store.append([var, val]) 
    497550 
    498551    def generate_code(self, gen_code): 
  • trunk/utils/pycarepl

    r194 r205  
    3838from pycawm.basedirspec import load_first_config, save_config_path 
    3939 
    40 SOCK_NAME_START = '/tmp/pycawm-' 
    4140HISTORY_FILE = 'pycarepl_history' 
    4241HISTORY_LENGTH = 50 
     42SOCK_NAME_START = '/tmp/pycawm-' 
     43SOCK_NAME_RE = re_compile(SOCK_NAME_START + '([0-9]+)-(.*)') 
    4344 
    4445class PycaREPL(object): 
     
    243244 
    244245def parse_socket_name(sock_name): 
    245     infos_re = re_compile(SOCK_NAME_START + '([0-9]+)-(.*)') 
    246     infos = infos_re.match(sock_name) 
     246    infos = SOCK_NAME_RE.match(sock_name) 
    247247    if infos is not None: 
    248248        return (int(infos.group(1)), infos.group(2))