| | 27 | class 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 | |
| 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) |
| 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 | |