""" Contains some common functions for manipulating gtk UIs """ __author__ = 'laharah' # noinspection PyUnresolvedReferences import gtk import re def inflate_list_store_combo(model_data, combo_widget): """inflates an individual combo box Args: model_data: data to be loaded into a list store (list) combo_widget: the widget to load data into. """ empty = True if combo_widget.get_model(): empty = False list_store = gtk.ListStore(str) for datum in model_data: list_store.append([datum]) combo_widget.set_model(list_store) if empty: renderer = gtk.CellRendererText() combo_widget.pack_start(renderer, expand=True) combo_widget.add_attribute(renderer, "text", 0) class EditableList(object): """ controler for a liststore and treeview""" def __init__(self, view, model): """ Args: view: gtk.treeview widget model: gtk.liststore Returns: EditableList controler object """ self.view = view self.model = model self.view.set_model(self.model) def get_selected(self): """ Returns: the iterator of the selected row """ return self.view.get_selection().get_selected()[1] def get_row(self): """retruns the model data for selected row""" return self.model[self.get_selected()] def move_down(self, *args): """moves the selected row down""" iter = self.get_selected() next = self.model.iter_next(iter) if not next: return self.model.swap(iter, next) def move_up(self, *args): """Moves selected row down""" iter = self.get_selected() selection_path = self.model.get_path(iter) try: prev = self.model.get_iter((selection_path[0] - 1)) except ValueError: return self.model.swap(iter, prev) def remove(self, *args): """deletes a row""" iter = self.get_selected() if iter: self.model.remove(iter) def add(self, data): """ Adds Data to row Args: data: iterable containing the new row data """ self.model.append(data) def set(self, *args): """See gtk.liststore.set""" self.model.set(*args) def set_value(self, iter, column, value): """See gtk.ListStore.set_value""" self.model.set_value(iter, column, value) def get_data(self): """Returns: list containing 1 tuple per row of the model data""" return [row for row in self.model] def clear(self): """clear the ListStore""" self.model.clear() def replace_model(self, new_model): """ replace the model with new_model Args: new_model: gtk.ListStore """ self.model = new_model self.view.set_model(self.model)