def dirs(self): self.frame = gtk.Frame(label=_("Music dirs")) self.frame.set_border_width(0) self.frame.show() self.frame.set_no_show_all(True) frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.tree_controller = SimpleListTreeControl(_("Paths"), None) """reload button""" reload_button = gtk.Button(_("Reload")) reload_button.show() """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.add_dir) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", self.remove_dir) bt_remove.set_size_request(80, -1) bt_remove.show() empty = gtk.Label("") empty.show() #bt_reload = gtk.Button(label=_("Reload")) #bt_reload.connect("clicked", self.reload_dir) #bt_reload.set_size_request(80, -1) #bt_reload.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) button_box.pack_start(empty, True, True, 0) #button_box.pack_start(bt_reload, False, False, 0) self.tree_controller.scroll.show_all() frame_box.pack_start(self.tree_controller.scroll, True, True, 0) frame_box.pack_start(button_box, False, False, 0) self.frame.add(frame_box) if FC().tabs_mode == "Multi": self.frame.hide() return self.frame
def formats(self): frame = gtk.Frame(label=_("File Types")) frame.set_border_width(0) frame.show() frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.files_controller = SimpleListTreeControl(_("Extensions"), None) """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.on_add_file) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", lambda *a: self.files_controller.delete_selected()) bt_remove.set_size_request(80, -1) bt_remove.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) scrool_tree = gtk.ScrolledWindow() scrool_tree.set_size_request(-1, 160) scrool_tree.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrool_tree.add_with_viewport(self.files_controller.scroll) scrool_tree.show() frame_box.pack_start(scrool_tree, True, True, 0) frame_box.pack_start(button_box, False, False, 0) frame.add(frame_box) return frame
class MusicLibraryConfig(ConfigPlugin, FControl): name = CONFIG_MUSIC_LIBRARY enable = True def __init__(self, controls): FControl.__init__(self, controls) box = gtk.VBox(False, 0) box.hide() box.pack_start(self.tabs_mode(), False, True, 0) box.pack_start(self.dirs(), False, True, 0) box.pack_start(self.formats(), False, True, 0) self.widget = box uhbox = gtk.HBox() ulabel = gtk.Label(_("Update library on start (more slow) ")) self.update_on_start = gtk.CheckButton() #self.update_on_start.show() uhbox.pack_start(ulabel, False, True, 0) uhbox.pack_start(self.update_on_start) box.pack_start(uhbox, False, True, 0) box.pack_start(self.gap(), False, True, 0) def dirs(self): self.frame = gtk.Frame(label=_("Music dirs")) self.frame.set_border_width(0) self.frame.show() self.frame.set_no_show_all(True) frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.tree_controller = SimpleListTreeControl(_("Paths"), None) """reload button""" reload_button = gtk.Button(_("Reload")) reload_button.show() """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.add_dir) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", self.remove_dir) bt_remove.set_size_request(80, -1) bt_remove.show() empty = gtk.Label("") empty.show() #bt_reload = gtk.Button(label=_("Reload")) #bt_reload.connect("clicked", self.reload_dir) #bt_reload.set_size_request(80, -1) #bt_reload.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) button_box.pack_start(empty, True, True, 0) #button_box.pack_start(bt_reload, False, False, 0) self.tree_controller.scroll.show_all() frame_box.pack_start(self.tree_controller.scroll, True, True, 0) frame_box.pack_start(button_box, False, False, 0) self.frame.add(frame_box) if FC().tabs_mode == "Multi": self.frame.hide() return self.frame def reload_dir(self, *a): FCache().music_paths[0] = self.tree_controller.get_all_beans_text() tree = self.controls.tabhelper.get_current_tree() self.controls.update_music_tree(tree) def on_load(self): self.tree_controller.clear_tree() for path in FCache().music_paths[0]: self.tree_controller.append(FDModel(path)) self.files_controller.clear_tree() for ext in FC().all_support_formats: self.files_controller.append(FDModel(ext)) self.adjustment.set_value(FC().gap_secs) if FC().tabs_mode == "Single": self.singletab_button.set_active(True) self.controls.tabhelper.set_show_tabs(False) if FC().update_tree_on_start: self.update_on_start.set_active(True) def on_save(self): FCache().music_paths[0] = self.tree_controller.get_all_beans_text() FC().all_support_formats = self.files_controller.get_all_beans_text() FC().gap_secs = self.adjustment.get_value() if self.singletab_button.get_active(): for i in xrange(len(FCache().music_paths) - 1, 0, -1): del FCache().music_paths[i] del FCache().cache_music_tree_beans[i] del FCache().tab_names[i] self.controls.tabhelper.remove_page(i) FC().tabs_mode = "Single" self.controls.tabhelper.set_show_tabs(False) else: FC().tabs_mode = "Multi" self.controls.tabhelper.set_show_tabs(True) if self.update_on_start.get_active(): FC().update_tree_on_start = True else: FC().update_tree_on_start = False def add_dir(self, *a): chooser = gtk.FileChooserDialog( title=_("Choose directory with music"), action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, buttons=(gtk.STOCK_OPEN, gtk.RESPONSE_OK)) chooser.set_default_response(gtk.RESPONSE_OK) chooser.set_select_multiple(True) if FCache().last_music_path: chooser.set_current_folder(FCache().last_music_path) response = chooser.run() if response == gtk.RESPONSE_OK: paths = chooser.get_filenames() path = paths[0] FCache().last_music_path = path[:path.rfind("/")] for path in paths: if path not in self.tree_controller.get_all_beans_text(): self.tree_controller.append(FDModel(path)) self.reload_dir() elif response == gtk.RESPONSE_CANCEL: logging.info('Closed, no files selected') chooser.destroy() def remove_dir(self, *a): self.tree_controller.delete_selected() def formats(self): frame = gtk.Frame(label=_("File Types")) frame.set_border_width(0) frame.show() frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.files_controller = SimpleListTreeControl(_("Extensions"), None) """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.on_add_file) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", lambda *a: self.files_controller.delete_selected()) bt_remove.set_size_request(80, -1) bt_remove.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) scrool_tree = gtk.ScrolledWindow() scrool_tree.set_size_request(-1, 160) scrool_tree.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrool_tree.add_with_viewport(self.files_controller.scroll) scrool_tree.show() frame_box.pack_start(scrool_tree, True, True, 0) frame_box.pack_start(button_box, False, False, 0) frame.add(frame_box) return frame def on_add_file(self, *a): val = show_entry_dialog(_("Please add audio extension"), _("Extension should be like '.mp3'")) if val and val.find(".") >= 0 and len( val ) <= 5 and val not in self.files_controller.get_all_beans_text(): self.files_controller.append(FDModel(val)) else: logging.info("Can't add your value" + val) def gap(self): label = gtk.Label(_("Gap between tracks: ")) self.adjustment = gtk.Adjustment(value=0, lower=0, upper=5, step_incr=0.5) gap_len = gtk.SpinButton(self.adjustment, climb_rate=0.0, digits=1) gap_len.show() hbox = gtk.HBox(False, 0) hbox.pack_start(label, False, False) hbox.pack_start(gap_len, False, False) hbox.show_all() return hbox def tabs_mode(self): hbox = gtk.HBox() self.multitabs_button = gtk.RadioButton(None, _("Multi tab mode")) def on_toggle_multitab(widget, data=None): self.frame.hide() self.multitabs_button.connect("toggled", on_toggle_multitab) hbox.pack_start(self.multitabs_button, True, False) self.singletab_button = gtk.RadioButton(self.multitabs_button, _("Single tab mode")) def on_toggle_singletab(widget, data=None): self.frame.show() self.singletab_button.connect("toggled", on_toggle_singletab) hbox.pack_end(self.singletab_button, True, False) return hbox
class PreferencesWindow(ChildTopWindow, FControl, LoadSave): configs = [] POS_NAME = 0 def __init__(self, controls): FControl.__init__(self, controls) self.number_inits = 0 self.lazy_init() def lazy_init(self): self.number_inits += 1 controls = self.controls self.configs.append(MusicLibraryConfig(controls)) #self.configs.append(DMConfig(controls)) self.configs.append(TabsConfig(controls)) self.configs.append(LastFmConfig(controls)) #self.configs.append(VkontakteConfig(controls)) #self.configs.append(InfoPagenConfig(controls)) self.configs.append(TrayIconConfig(controls)) #self.configs.append(NetworkConfig(controls)) #self.configs.append(NotificationConfig(controls)) try: """check keybinder installed, debian""" import keybinder #@UnresolvedImport @UnusedImport from foobnix.preferences.configs.hotkey_conf import HotKeysConfig self.configs.append(HotKeysConfig(controls)) except Exception, e: logging.warn("Keybinder not installed" + str(e)) self.configs.append(OtherConfig(controls)) self.label = None mainVBox = gtk.VBox(False, 0) ChildTopWindow.__init__(self, _("Preferences"), 900, 500) paned = gtk.HPaned() paned.set_position(250) def func(): bean = self.navigation.get_selected_bean() if bean: self.populate_config_category(bean.text) self.navigation = SimpleListTreeControl(_("Categories"), controls, True) for plugin in self.configs: self.navigation.append(FDModel(plugin.name)) self.navigation.set_left_click_func(func) paned.add1(self.navigation.scroll) cbox = gtk.VBox(False, 0) for plugin in self.configs: cbox.pack_start(plugin.widget, False, True) self.container = self.create_container(cbox) paned.add2(self.container) mainVBox.pack_start(paned, True, True, 0) mainVBox.pack_start(self.create_save_cancel_buttons(), False, False, 0) self.add(mainVBox)
class MusicLibraryConfig(ConfigPlugin, FControl): name = CONFIG_MUSIC_LIBRARY enable = True def __init__(self, controls): FControl.__init__(self, controls) box = gtk.VBox(False, 0) box.hide() box.pack_start(self.tabs_mode(), False, True, 0) box.pack_start(self.dirs(), False, True, 0) box.pack_start(self.formats(), False, True, 0) self.widget = box uhbox = gtk.HBox() ulabel = gtk.Label(_("Update library on start (more slow) ")) self.update_on_start = gtk.CheckButton() uhbox.pack_start(ulabel, False, True, 0) uhbox.pack_start(self.update_on_start) box.pack_start(uhbox, False, True, 0) box.pack_start(self.gap(), False, True, 0) def dirs(self): self.frame = gtk.Frame(label=_("Music dirs")) self.frame.set_border_width(0) self.frame.show() self.frame.set_no_show_all(True) frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.tree_controller = SimpleListTreeControl(_("Paths"), None) """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.add_dir) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", self.remove_dir) bt_remove.set_size_request(80, -1) bt_remove.show() empty = gtk.Label("") empty.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) button_box.pack_start(empty, True, True, 0) self.tree_controller.scroll.show_all() frame_box.pack_start(self.tree_controller.scroll, True, True, 0) frame_box.pack_start(button_box, False, False, 0) self.frame.add(frame_box) if FC().tabs_mode == "Multi": self.frame.hide() return self.frame def reload_dir(self, *a): FCache().music_paths[0] = self.temp_music_paths[:] #create copy of list self.controls.update_music_tree() def on_load(self): self.tree_controller.clear_tree() for path in FCache().music_paths[0]: self.tree_controller.append(FDModel(os.path.basename(path), path).add_is_file(False)) self.files_controller.clear_tree() for ext in FC().all_support_formats: self.files_controller.append(FDModel(ext)) self.adjustment.set_value(FC().gap_secs) if FC().tabs_mode == "Single": self.singletab_button.set_active(True) self.controls.tabhelper.set_show_tabs(False) if FC().update_tree_on_start: self.update_on_start.set_active(True) self.temp_music_paths = FCache().music_paths[0][:] #create copy of list def on_save(self): FC().all_support_formats = self.files_controller.get_all_beans_text() FC().gap_secs = self.adjustment.get_value() if self.singletab_button.get_active(): '''for i in xrange(len(FCache().music_paths) - 1, 0, -1): del FCache().music_paths[i] del FCache().cache_music_tree_beans[i] del FCache().tab_names[i] self.controls.tabhelper.remove_page(i)''' FC().tabs_mode = "Single" self.controls.tabhelper.set_show_tabs(False) if self.temp_music_paths != FCache().music_paths[0]: self.reload_dir() else: FC().tabs_mode = "Multi" self.controls.tabhelper.set_show_tabs(True) if self.update_on_start.get_active(): FC().update_tree_on_start = True else: FC().update_tree_on_start = False def add_dir(self, *a): current_folder = FCache().last_music_path if FCache().last_music_path else None paths = directory_chooser_dialog(_("Choose directory with music"), current_folder) if not paths: return path = paths[0] FCache().last_music_path = path[:path.rfind("/")] for path in paths: if path not in self.temp_music_paths: self.tree_controller.append(FDModel(os.path.basename(path), path).add_is_file(False)) self.temp_music_paths.append(path) def remove_dir(self, *a): self.tree_controller.delete_selected() self.temp_music_paths = [bean.path for bean in self.tree_controller.get_all_beans()] def formats(self): frame = gtk.Frame(label=_("File Types")) frame.set_border_width(0) frame.show() frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.files_controller = SimpleListTreeControl(_("Extensions"), None) """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.on_add_file) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", lambda *a: self.files_controller.delete_selected()) bt_remove.set_size_request(80, -1) bt_remove.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) scrool_tree = gtk.ScrolledWindow() scrool_tree.set_size_request(-1, 160) scrool_tree.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrool_tree.add_with_viewport(self.files_controller.scroll) scrool_tree.show() frame_box.pack_start(scrool_tree, True, True, 0) frame_box.pack_start(button_box, False, False, 0) frame.add(frame_box) return frame def on_add_file(self, *a): val = show_entry_dialog(_("Please add audio extension"), _("Extension should be like '.mp3'")) if val and val.find(".") >= 0 and len(val) <= 5 and val not in self.files_controller.get_all_beans_text(): self.files_controller.append(FDModel(val)) else: logging.info("Can't add your value" + val) def gap(self): label = gtk.Label(_("Gap between tracks: ")) self.adjustment = gtk.Adjustment(value=0, lower=0, upper=5, step_incr=0.5) gap_len = gtk.SpinButton(self.adjustment, climb_rate=0.0, digits=1) gap_len.show() hbox = gtk.HBox(False, 0) hbox.pack_start(label, False, False) hbox.pack_start(gap_len, False, False) hbox.show_all() return hbox def tabs_mode(self): hbox = gtk.HBox() self.multitabs_button = gtk.RadioButton(None, _("Multi tab mode")) def on_toggle_multitab(widget, data=None): self.frame.hide() self.multitabs_button.connect("toggled", on_toggle_multitab) hbox.pack_start(self.multitabs_button, True, False) self.singletab_button = gtk.RadioButton(self.multitabs_button, _("Single tab mode")) def on_toggle_singletab(widget, data=None): self.tree_controller.clear_tree() for path in FCache().music_paths[0]: self.tree_controller.append(FDModel(os.path.basename(path), path).add_is_file(False)) self.temp_music_paths = FCache().music_paths[0][:] self.frame.show() self.singletab_button.connect("toggled", on_toggle_singletab) hbox.pack_end(self.singletab_button, True, False) return hbox
class MusicLibraryConfig(ConfigPlugin, FControl): name = CONFIG_MUSIC_LIBRARY enable = True def __init__(self, controls): FControl.__init__(self, controls) box = gtk.VBox(False, 0) box.hide() box.pack_start(self.tabs_mode(), False, True, 0) box.pack_start(self.dirs(), False, True, 0) box.pack_start(self.formats(), False, True, 0) box.pack_start(self.gap(), False, True, 0) self.widget = box def dirs(self): self.frame = gtk.Frame(label=_("Music dirs")) self.frame.set_border_width(0) self.frame.show() self.frame.set_no_show_all(True) frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.tree_controller = SimpleListTreeControl(_("Paths"), None) """reload button""" reload_button = gtk.Button(_("Reload")) reload_button.show() """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.add_dir) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", self.remove_dir) bt_remove.set_size_request(80, -1) bt_remove.show() empty = gtk.Label("") empty.show() # bt_reload = gtk.Button(label=_("Reload")) # bt_reload.connect("clicked", self.reload_dir) # bt_reload.set_size_request(80, -1) # bt_reload.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) button_box.pack_start(empty, True, True, 0) # button_box.pack_start(bt_reload, False, False, 0) self.tree_controller.scroll.show_all() frame_box.pack_start(self.tree_controller.scroll, True, True, 0) frame_box.pack_start(button_box, False, False, 0) self.frame.add(frame_box) if FC().tabs_mode == "Multi": self.frame.hide() return self.frame def reload_dir(self, *a): FC().music_paths[0] = self.tree_controller.get_all_beans_text() tree = self.controls.tabhelper.get_current_tree() self.controls.update_music_tree(tree) def on_load(self): self.tree_controller.clear_tree() for path in FC().music_paths[0]: self.tree_controller.append(FDModel(path)) self.files_controller.clear_tree() for ext in FC().all_support_formats: self.files_controller.append(FDModel(ext)) self.adjustment.set_value(FC().gap_secs) if FC().tabs_mode == "Single": self.singletab_button.set_active(True) self.controls.tabhelper.set_show_tabs(False) def on_save(self): FC().music_paths[0] = self.tree_controller.get_all_beans_text() FC().all_support_formats = self.files_controller.get_all_beans_text() FC().gap_secs = self.adjustment.get_value() if self.singletab_button.get_active(): for i in xrange(len(FC().music_paths) - 1, 0, -1): del FC().music_paths[i] del FC().cache_music_tree_beans[i] del FC().tab_names[i] self.controls.tabhelper.remove_page(i) FC().tabs_mode = "Single" self.controls.tabhelper.set_show_tabs(False) else: FC().tabs_mode = "Multi" self.controls.tabhelper.set_show_tabs(True) def add_dir(self, *a): chooser = gtk.FileChooserDialog( title=_("Choose directory with music"), action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, buttons=(gtk.STOCK_OPEN, gtk.RESPONSE_OK), ) chooser.set_default_response(gtk.RESPONSE_OK) chooser.set_select_multiple(True) if FC().last_music_path: chooser.set_current_folder(FC().last_music_path) response = chooser.run() if response == gtk.RESPONSE_OK: paths = chooser.get_filenames() path = paths[0] FC().last_music_path = path[: path.rfind("/")] for path in paths: if path not in self.tree_controller.get_all_beans_text(): self.tree_controller.append(FDModel(path)) self.reload_dir() elif response == gtk.RESPONSE_CANCEL: logging.info("Closed, no files selected") chooser.destroy() def remove_dir(self, *a): self.tree_controller.delete_selected() def formats(self): frame = gtk.Frame(label=_("File Types")) frame.set_border_width(0) frame.show() frame_box = gtk.HBox(False, 0) frame_box.set_border_width(5) frame_box.show() self.files_controller = SimpleListTreeControl(_("Extensions"), None) """buttons""" button_box = gtk.VBox(False, 0) button_box.show() bt_add = gtk.Button(_("Add")) bt_add.connect("clicked", self.on_add_file) bt_add.set_size_request(80, -1) bt_add.show() bt_remove = gtk.Button(_("Remove")) bt_remove.connect("clicked", lambda *a: self.files_controller.remove_selected()) bt_remove.set_size_request(80, -1) bt_remove.show() button_box.pack_start(bt_add, False, False, 0) button_box.pack_start(bt_remove, False, False, 0) scrool_tree = gtk.ScrolledWindow() scrool_tree.set_size_request(-1, 160) scrool_tree.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrool_tree.add_with_viewport(self.files_controller.scroll) scrool_tree.show() frame_box.pack_start(scrool_tree, True, True, 0) frame_box.pack_start(button_box, False, False, 0) frame.add(frame_box) return frame def on_add_file(self, *a): val = show_entry_dialog(_("Please add audio extension"), _("Extension should be like '.mp3'")) if val and val.find(".") >= 0 and len(val) <= 5 and val not in self.files_controller.get_all_beans_text(): self.files_controller.append(FDModel(val)) else: logging.info("Can't add your value" + val) def gap(self): label = gtk.Label(_("Gap between tracks: ")) self.adjustment = gtk.Adjustment(value=0, lower=0, upper=5, step_incr=0.5) gap_len = gtk.SpinButton(self.adjustment, climb_rate=0.0, digits=1) gap_len.show() hbox = gtk.HBox(False, 0) hbox.pack_start(label, False, False) hbox.pack_start(gap_len, False, False) hbox.show_all() return hbox def tabs_mode(self): hbox = gtk.HBox() self.multitabs_button = gtk.RadioButton(None, _("Multi tab mode")) def on_toggle_multitab(widget, data=None): self.frame.hide() self.multitabs_button.connect("toggled", on_toggle_multitab) hbox.pack_start(self.multitabs_button, True, False) self.singletab_button = gtk.RadioButton(self.multitabs_button, _("Single tab mode")) def on_toggle_singletab(widget, data=None): self.frame.show() self.singletab_button.connect("toggled", on_toggle_singletab) hbox.pack_end(self.singletab_button, True, False) return hbox