Changeset 14

Show
Ignore:
Timestamp:
10/17/08 18:03:48 (3 years ago)
Author:
lasarux
Message:
  • main.py: Add Treeview class to load data into treeviews.
Location:
trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r13 r14  
     12008-10-17  Pedro Gracia  <pedro@flumotion.com> 
     2 
     3        * main.py: 
     4        Add Treeview class to load data into treeviews. 
     5 
    162008-10-17  Pedro Gracia  <pedro@flumotion.com> 
    27 
  • trunk/main.py

    r13 r14  
    2525app_version = "0.0.1" 
    2626 
     27class Treeview: 
     28    def __init__(self, type, columns, data, treeview, headers=True): 
     29        # type: 'tree' or 'list' 
     30        # columns: hidden|visible, 'int'|'str'|'pix', name 
     31        # data: pairs -> parent|None, (columns_data) 
     32        # treeview: treeview object 
     33        COLUMNS = [] 
     34        self.store = treeview.get_model() 
     35        if self.store: 
     36            self.store.clear() 
     37            for i in treeview.get_columns(): 
     38                treeview.remove_column(i) 
     39 
     40        # creating store and columns 
     41        for index, column in enumerate(columns): 
     42            if column[1] == 'int': 
     43                COLUMNS.append('int') 
     44                renderer = gtk.CellRendererText() 
     45                if column[0] == 'visible': 
     46                    column = gtk.TreeViewColumn(column[2], renderer, text=index) 
     47                    treeview.append_column(column) 
     48            elif column[1] == 'str': 
     49                COLUMNS.append('str') 
     50                renderer = gtk.CellRendererText() 
     51                if column[0] == 'visible': 
     52                    column = gtk.TreeViewColumn(column[2], renderer, text=index) 
     53                    treeview.append_column(column) 
     54            elif column[1] == 'bool': 
     55                COLUMNS.append('str') 
     56                renderer = gtk.CellRendererToggle() 
     57                if column[0] == 'visible': 
     58                    column = gtk.TreeViewColumn(column[2], renderer, active=index) 
     59                    treeview.append_column(column) 
     60            elif column[1] == 'pix': 
     61                COLUMNS.append('gtk.gdk.Pixbuf') 
     62                renderer = gtk.CellRendererPixbuf() 
     63                if column[0] == 'visible': 
     64                    column = gtk.TreeViewColumn(column[2], renderer, pixbuf=index) 
     65                    treeview.append_column(column) 
     66 
     67        if type == 'tree': 
     68            self.store = eval('gtk.TreeStore(%s)'%', '.join(COLUMNS)) 
     69        else: 
     70            self.store = eval('gtk.ListStore(%s)'%', '.join(COLUMNS)) 
     71        treeview.set_model(self.store) 
     72        treeview.show() 
     73        treeview.set_headers_visible(headers) 
     74 
     75        # feeding store with data: {parent: (childrens, )} 
     76        rows = [] 
     77        if type == 'tree': #treeview 
     78            for header in data.keys(): 
     79                row_data = (None, header, None) 
     80                parent = self.store.append(None, row_data) 
     81                #rows.append(parent) #add parent 
     82                for child in data[header]: 
     83                    self.store.append(parent, child) 
     84        else: #listview 
     85            for row in data: 
     86                self.store.append(row) 
     87 
     88        treeview.set_headers_visible(headers) 
     89 
    2790class MainWnd(SimpleGladeApp): 
    2891    def new(self): 
     
    3093        self.settings = {} 
    3194        self.attach_plugins() 
    32         self.init_treeview() 
     95        self.show_hosts() 
     96        #self.init_treeview() 
    3397 
    3498    def attach_plugins(self): 
     
    48112        #    else: 
    49113        #        print "Plugin \"%s\" disabled" % item 
    50              
    51     def init_treeview(self): 
    52         """Fill main treeview with data (list)""" 
    53         columns = [ 'Name', 'OS', 'IP Address' ] 
    54  
    55         self.store=gtk.ListStore(str, str, str) 
    56         cell = gtk.CellRendererText() 
    57         self.treeview.set_model(self.store) 
    58          
    59         for row in config.HOSTS: 
    60             data = config.HOSTS[row] 
    61             self.store.append((row, data["os"], data["ip"])) 
    62              
    63         for i, item in enumerate(columns): 
    64             column = gtk.TreeViewColumn(item, cell, text=i) 
    65             if item == 'IP': #Column with a fix width 
    66                 column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) 
    67                 column.set_resizable(True) 
    68                 column.set_fixed_width(100) 
    69             self.treeview.append_column(column) 
    70         self.treeview.set_search_column(1) 
    71         column.set_sort_column_id(1) 
    72          
    73     def load_treeview(self, data, columns ): 
    74         self.store.clear() 
    75         for item in data: 
    76             self.store.append((item[0], item[1], item[2])) 
    77         for i, column in enumerate(self.treeview.get_columns()): 
    78             column.set_title(columns[i]) 
     114 
     115    def show_hosts(self): 
     116        """Show host from the config file""" 
     117        data = [] 
     118        columns = [('visible', 'str', 'Name'), 
     119                   ('visible', 'str', 'OS'), 
     120                   ('visible', 'str', 'IP Address')] 
     121        for i in config.HOSTS: 
     122            j = config.HOSTS[i] 
     123            row = (i, j["os"], j["ip"]) 
     124            data.append(row) 
     125        self.t = Treeview("list", columns, data, self.treeview) 
     126 
     127    def show_users(self): 
     128        """Show host from the config file""" 
     129        data = [] 
     130        columns = [('visible', 'str', 'Nick'), 
     131                   ('visible', 'str', 'Name'), 
     132                   ('visible', 'str', 'Status')] 
     133        for i in config.USERS: 
     134            j = config.USERS[i] 
     135            row = (i, j["name"], j["status"]) 
     136            data.append(row) 
     137        self.t = Treeview("list", columns, data, self.treeview) 
    79138 
    80139    def on_treeview_button_release_event(self, widget, event): 
    81140        #Get the path at the specific mouse position 
    82         selection = widget.get_selection() 
    83         model, iter, = selection.get_selected() 
    84         self.settings["ip"] = self.store.get_value(iter, 2) 
    85         self.settings["opsys"] = self.store.get_value(iter, 1) 
    86         #Thread(target=self.plugin["info"].send_command, args=("ps", self.ip, self.opsys)).start() 
     141        model, iter = widget.get_selection().get_selected() 
     142        self.settings["ip"] = model.get_value(iter, 2) 
     143        self.settings["opsys"] = model.get_value(iter, 1) 
     144 
    87145         
    88146    def on_table_combo_changed(self, widget): 
     
    92150        table = widget.get_active_text().lower() 
    93151        if table == "users": 
    94             for item in config.USERS: 
    95                 data.append((item, config.USERS[item]["name"], config.USERS[item]["status"])) 
    96                 columns = [ 'Nick', 'Name', 'Status' ] 
     152            self.show_users() 
    97153        elif table == "hosts": 
    98             for item in config.HOSTS: 
    99                 data.append((item, config.HOSTS[item]["os"], config.HOSTS[item]["ip"])) 
    100                 columns = [ 'Name', 'OS', 'IP Address' ] 
    101         self.load_treeview(data, columns) 
     154            self.show_hosts() 
    102155 
    103156    def get_settings(self, key):