return fonts state = dict( gnome_fonts=get_gnome_fonts(), absolute_path=os.path.dirname(os.path.abspath(__file__)), conf_dir=os.path.join(config_home, 'cdraft'), data_dir=os.path.join(data_home, 'cdraft'), themes_dir=os.path.join(data_home, 'cdraft', 'themes'), # XXX: works only in linux global_themes_dir='/usr/share/cdraft/themes', ) if not os.path.isdir(state['global_themes_dir']): if platform == 'win32': state['global_themes_dir'] = '' else: # run without installation state['global_themes_dir'] = os.path.join(state['absolute_path'], '..', 'themes') # yes imports that are not quite obvious suck but we need to avoid # circular imports here from utils import FailsafeConfigParser config = FailsafeConfigParser() config_file = os.path.join(state['conf_dir'], 'cdraft.conf') if os.path.isfile(config_file): config.readfp(open(config_file, 'r')) for d in [state['conf_dir'], state['themes_dir']]: if not os.path.isdir(d): os.makedirs(d)
def __init__(self): gladefile = os.path.join(state['absolute_path'], "preferences.glade") builder = gtk.Builder() builder.add_from_file(gladefile) # Defining widgets needed self.window = builder.get_object("dialog-preferences") self.colorpreference = builder.get_object("colorbutton") self.textboxbgpreference = builder.get_object("textboxbgbutton") self.bgpreference = builder.get_object("bgbutton") self.borderpreference = builder.get_object("borderbutton") self.paddingpreference = builder.get_object("paddingtext") self.heightpreference = builder.get_object("heighttext") self.heightpreference.set_range(5, 95) self.widthpreference = builder.get_object("widthtext") self.widthpreference.set_range(5, 95) self.presetscombobox = builder.get_object("presetscombobox") self.showborderbutton = builder.get_object("showborder") self.showpathbutton = builder.get_object("showpath") self.autosave = builder.get_object("autosavetext") self.autosave_spinbutton = builder.get_object("autosavetime") self.linespacing_spinbutton = builder.get_object("linespacing") self.indent_check = builder.get_object("indent_check") if config.get('visual', 'indent') == '1': self.indent_check.set_active(True) self.save_custom_button = builder.get_object("save_custom_theme") self.custom_font_preference = builder.get_object("fontbutton1") if not config.get('visual', 'use_font_type') == 'custom': self.custom_font_preference.set_sensitive(False) self.font_radios = { 'document':builder.get_object("radio_document_font"), 'monospace':builder.get_object("radio_monospace_font"), 'custom':builder.get_object("radio_custom_font") } self.orientation_radios = { 'top':builder.get_object('orientation_top'), 'center':builder.get_object('orientation_center'), } for widget in self.font_radios.values(): if not widget.get_name() == 'radio_custom_font': widget.set_sensitive(bool(state['gnome_fonts'])) # Setting up config parser self.customfile = FailsafeConfigParser() self.customfile.read(os.path.join( state['themes_dir'], 'custom.theme') ) if not self.customfile.has_section('theme'): self.customfile.add_section('theme') # Getting preferences from conf file active_style = config.get("visual", "theme") self.autosave.set_active(config.getint('editor', 'autosave')) # Set up pyroom from conf file self.linespacing_spinbutton.set_value(int( config.get('visual', 'linespacing') )) self.autosave_spinbutton.set_value(float( config.get('editor', 'autosavetime'))) self.showborderbutton.set_active( config.getint('visual', 'showborder') ) self.showpathbutton.set_active( config.getint('visual', 'showpath') ) font_type = config.get('visual', 'use_font_type') self.font_radios[font_type].set_active(True) self.orientation_radios[ config.get('visual', 'alignment') ].set_active(True) self.toggleautosave(self.autosave) self.window.set_transient_for(state['gui'].window) self.stylesvalues = {'custom': 0} startingvalue = 1 state['gui'].theme = Theme(config.get('visual', 'theme')) # Add themes to combobox for i in get_themes_list(): self.stylesvalues['%s' % (i)] = startingvalue startingvalue += 1 current_loading_theme = Theme(i) theme_name = current_loading_theme['name'] self.presetscombobox.append_text(theme_name) if active_style == 'custom': self.save_custom_button.set_sensitive(True) self.presetscombobox.set_active(self.stylesvalues[active_style]) self.fill_pref_dialog() # Connecting interface's signals dic = { "on_MainWindow_destroy": self.QuitEvent, "on_button-ok_clicked": self.set_preferences, "on_close": self.kill_preferences } builder.connect_signals(dic) self.showborderbutton.connect('toggled', self.toggleborder) self.showpathbutton.connect('toggled', self.togglepath) self.autosave.connect('toggled', self.toggleautosave) self.autosave_spinbutton.connect('value-changed', self.toggleautosave) self.linespacing_spinbutton.connect( 'value-changed', self.changelinespacing ) self.indent_check.connect( 'toggled', self.toggle_indent ) self.presetscombobox.connect('changed', self.presetchanged) self.colorpreference.connect('color-set', self.customchanged) self.textboxbgpreference.connect('color-set', self.customchanged) self.bgpreference.connect('color-set', self.customchanged) self.borderpreference.connect('color-set', self.customchanged) self.paddingpreference.connect('value-changed', self.customchanged) self.heightpreference.connect('value-changed', self.customchanged) self.widthpreference.connect('value-changed', self.customchanged) self.save_custom_button.connect('clicked', self.save_custom_theme) for widget in self.font_radios.values(): widget.connect('toggled', self.change_font) for widget in self.orientation_radios.values(): widget.connect('toggled', self.change_orientation) self.custom_font_preference.connect('font-set', self.change_font)