def on_button_press(self, w, e): if is_empty_click(w, e): w.get_selection().unselect_all() active = self.get_selected_bean() if active: active.type = FTYPE_NOT_UPDATE_INFO_PANEL else: return None if is_left_click(e): if active.get_status(): if active.get_status() == DOWNLOAD_STATUS_ALL: self.controls.dm.filter(None, FTreeModel().status[0]) else: self.controls.dm.filter(active.get_status(), FTreeModel().status[0]) if is_double_left_click(e): self.controls.play(active) if is_rigth_click(e): right_click_optimization_for_trees(w, e) menu = Popup() menu.add_item('Play', Gtk.STOCK_MEDIA_PLAY, self.controls.play, active) menu.add_item('Copy to Search Line', Gtk.STOCK_COPY, self.controls.searchPanel.set_search_text, active.text) menu.show(e)
def get_bean_from_row(self, row): bean = FModel() id_dict = FTreeModel().cut().__dict__ for key in id_dict.keys(): num = id_dict[key] setattr(bean, key, row[num]) return bean
def use_filter(self): active = self.get_selected_bean() if active: if active.get_status() == DOWNLOAD_STATUS_ALL: self.dm_list.filter_by_file(None, FTreeModel().status[0]) else: self.dm_list.filter_by_file(active.get_status(), FTreeModel().status[0])
def restore_rows(self, rows): for key in sorted(rows.keys()): if len(key) == 1: self.model.append(None, FTreeModel.normalize_row(rows[key])) else: str_path = str(key).replace(', ', ':') parent_path = str_path[1:str_path.rfind(':')] parent_iter = self.model.get_iter_from_string(parent_path) self.model.append(parent_iter, FTreeModel.normalize_row(rows[key]))
def task(row): iter = row.iter level = self.model.iter_depth(iter) text = self.model.get_value(iter, FTreeModel().text[0]) path = self.model.get_value(iter, FTreeModel().path[0]) if not path: path = "" f.write(level * '-' + text + '#' + path + '\n') if row.iterchildren(): for child_row in row.iterchildren(): task(child_row)
def on_button_press(self, w, e): if is_empty_click(w, e): w.get_selection().unselect_all() if is_double_left_click(e): active = self.get_selected_bean() if active: if active.get_status() == DOWNLOAD_STATUS_ALL: self.dm_list.filter_by_file(None, FTreeModel().status[0]) else: self.dm_list.filter_by_file(active.get_status(), FTreeModel().status[0])
def _get_bean_by_path(self, path): model = self.model path = self.filter_model.convert_path_to_child_path(path) iter = model.get_iter(path) if iter: bean = FModel() dt = FTreeModel().__dict__ for key in dt.keys(): setattr(bean, key, model.get_value(iter, dt[key][0])) return bean return None
def set_play_icon_to_bean_to_selected(self): for row in self.model: row[self.play_icon[0]] = '' paths = self.get_selected_bean_paths() if not paths: return None logging.debug("Set play icon to selected bean") path = paths[0] iter = self.model.get_iter(path) self.model.set_value(iter, FTreeModel().play_icon[0], "go-next") self.active_UUID = self.model.get_value(iter, FTreeModel().UUID[0])
def get_bean_from_model_iter(self, model, iter): if not model or not iter: return None bean = FModel() id_dict = FTreeModel().cut().__dict__ for key in id_dict.keys(): num = id_dict[key] try: val = model.get_value(iter, num) except GError: val = None setattr(bean, key, val) return bean
def fill_row(self, row_ref, bean): if row_ref.valid(): treerow = self.model[row_ref.get_path()] m_dict = FTreeModel().cut().__dict__ new_dict = dict(zip(m_dict.values(), m_dict.keys())) for i, key in enumerate(new_dict.values()): value = getattr(bean, key) if value is None: value = '' elif type(value) in [int, float, long]: value = str(value) if i != self.play_icon[0]: treerow[i] = value
def get_row_from_model_iter(self, model, iter): attributes = [] size = len(FTreeModel().__dict__) for i in xrange(size): value = model.get_value(iter, i) attributes.append(value) return attributes
def on_load(self): if FC().tab_position == "no": self.set_tab_no() elif FC().tab_position == "left": self.set_tab_left() else: self.set_tab_top() for page in range(len(FCache().cache_pl_tab_contents) - 1, -1, -1): if not FCache().cache_pl_tab_contents[page]: self._append_tab(FCache().tab_pl_names[page]) continue self._append_tab(FCache().tab_pl_names[page]) model_len = len(FTreeModel().__dict__) cache_len = len(FCache().cache_pl_tab_contents[page][0]) for row in FCache().cache_pl_tab_contents[page]: if model_len > cache_len: for i in range(abs(model_len - cache_len)): row.append((None, None)) elif model_len < cache_len: for i in range(abs(model_len - cache_len)): del row[-1] self.get_current_tree().model.append(None, row) self.set_current_page(FC().pl_selected_tab) self.loaded = True
def get_row_from_bean(self, bean): #logging.debug("get_row_from_bean %s" % bean) attributes = [] m_dict = FTreeModel().cut().__dict__ new_dict = dict (zip(m_dict.values(), m_dict.keys())) for key in new_dict.values(): if not hasattr(bean, key): setattr(bean, key, None) value = getattr(bean, key) if type(value) in [int, float, long]: value = str(value) attributes.append(value) #logging.debug("get_row_from_bean attributes %s" % attributes) return attributes
def get_row_from_bean(self, bean): #logging.debug("get_row_from_bean %s" % bean) attributes = [] m_dict = FTreeModel().cut().__dict__ new_dict = dict(zip(m_dict.values(), m_dict.keys())) for key in new_dict.values(): if not hasattr(bean, key): setattr(bean, key, None) value = getattr(bean, key) if type(value) in [int, float, long]: value = str(value) attributes.append(value) #logging.debug("get_row_from_bean attributes %s" % attributes) return attributes
def filter_by_file(self, query, column_num=FTreeModel().text[0]): self.show_all_lines() if query and len(query.strip()) > 0: query = query.decode().strip().lower() self.file_filter(query, column_num) self.expand_all() else: self.collapse_all()
def update_statistics(self): statisctics = self.dm_list.get_status_statisctics() all = self.get_all_beans() for bean in all: status = bean.get_status() num = 0 if status in statisctics: num = statisctics[status] value = bean.artist + " (%s)" % num self.set_bean_column_value(bean, FTreeModel().text[0], value)
def get_next_bean_to_dowload(self): all = self.get_all_beans() if not all: return None for bean in all: if bean.get_status() == DOWNLOAD_STATUS_ACTIVE: self.set_bean_column_value(bean, FTreeModel().status[0], DOWNLOAD_STATUS_LOCK) return bean
def update_bean(self, bean): for row in self.model: if row[self.UUID[0]] == bean.UUID: dict = FTreeModel().__dict__ for key in dict: value = getattr(bean, key) if value is None: value = '' row_num = dict[key][0] row[row_num] = value break
def __init__(self, controls): FilterTreeControls.__init__(self, controls) FTreeModel.__init__(self) FControl.__init__(self, controls) self.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.set_enable_tree_lines(True) """model config""" self.model = MyTreeStore(*FTreeModel().types()) """filter config""" self.filter_model = self.model.filter_new() self.filter_model.set_visible_column(self.visible[0]) self.set_model(self.filter_model) """connectors""" self.connect("button-press-event", self.on_button_press) self.connect("key-release-event", self.on_key_release) self.connect("row-expanded", self.on_row_expanded) self.connect('button_press_event', self.on_multi_button_press) self.connect('button_release_event', self.on_multi_button_release) self.count_index = 0 self.set_reorderable(False) self.set_headers_visible(False) self.ellipsize_render = Gtk.CellRendererText.new() self.ellipsize_render.set_property('ellipsize', Pango.EllipsizeMode.END) self.set_type_plain() self.active_UUID = -1 self.defer_select = False self.scroll = Gtk.ScrolledWindow() self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.scroll.add(self)
def fill_treerows(self): all_extra_rows = {} for k, treerow in enumerate(self.model): if not treerow[self.time[0]] and treerow[self.is_file[0]]: bean = self.get_bean_from_row(treerow) full_beans = update_id3_wind_filtering([bean]) rows_for_add = [] if len(full_beans) == 1: full_bean = full_beans[0] m_dict = FTreeModel().cut().__dict__ new_dict = dict(zip(m_dict.values(), m_dict.keys())) for i, key in enumerate(new_dict.values()): value = getattr(full_bean, key) if value is None: value = '' elif type(value) in [int, float, long]: value = str(value) treerow[i] = value else: for n, full_bean in enumerate(full_beans): full_bean.visible = True full_bean.update_uuid() row = self.get_row_from_bean(full_bean) rows_for_add.insert(0, row) if n == 0: treerow[self.font[0]] = 'bold' treerow[self.is_file[0]] = False if rows_for_add: all_extra_rows[k] = rows_for_add if all_extra_rows: for i in sorted(all_extra_rows.keys(), reverse = True): for row in all_extra_rows[i]: self.model.insert_after(None, self.model.get_iter(i), row)
def fill_treerows(self): all_extra_rows = {} for k, treerow in enumerate(self.model): if not treerow[self.time[0]] and treerow[self.is_file[0]]: bean = self.get_bean_from_row(treerow) full_beans = update_id3_wind_filtering([bean]) rows_for_add = [] if len(full_beans) == 1: full_bean = full_beans[0] m_dict = FTreeModel().cut().__dict__ new_dict = dict(zip(m_dict.values(), m_dict.keys())) for i, key in enumerate(new_dict.values()): value = getattr(full_bean, key) if value is None: value = '' elif type(value) in [int, float, long]: value = str(value) treerow[i] = value else: for n, full_bean in enumerate(full_beans): full_bean.visible = True full_bean.update_uuid() row = self.get_row_from_bean(full_bean) rows_for_add.insert(0, row) if n == 0: treerow[self.font[0]] = 'bold' treerow[self.is_file[0]] = False if rows_for_add: all_extra_rows[k] = rows_for_add if all_extra_rows: for i in sorted(all_extra_rows.keys(), reverse=True): for row in all_extra_rows[i]: self.model.insert_after(None, self.model.get_iter(i), row)
def on_load(self): if FC().tab_position == "no": self.set_tab_no() elif FC().tab_position == "left": self.set_tab_left() else: self.set_tab_top() for page in range(len(FCache().cache_pl_tab_contents) - 1, -1, -1): if not FCache().cache_pl_tab_contents[page]: self._append_tab(FCache().tab_pl_names[page]) continue self._append_tab(FCache().tab_pl_names[page]) for row in FCache().cache_pl_tab_contents[page]: self.get_current_tree().model.append( None, FTreeModel.normalize_row(row)) self.set_current_page(FC().pl_selected_tab) self.loaded = True
def update_status_for_all(self, status): beans = self.get_all_beans() for bean in beans: self.set_bean_column_value(bean, FTreeModel().status[0], status)
def update_status_for_beans(self, beans, status): for bean in beans: self.set_bean_column_value(bean, FTreeModel().status[0], status)