def autosave_timeout(edit_instance): """see if we have to autosave open files""" if config.getint('editor', 'autosave'): if edit_instance.autosave_elapsed >= \ config.getint('editor', 'autosavetime') * 60: autosave(edit_instance) edit_instance.autosave_elapsed = 0 else: edit_instance.autosave_elapsed += 1 return True
def togglepath(self, widget): """toggle full path display in statusbar""" pathstate = config.getint('visual', 'showpath') if pathstate: opposite = 0 else: opposite = 1 config.set('visual', 'showpath', str(opposite))
def toggleborder(self, widget): """toggle border display""" borderstate = config.getint('visual', 'showborder') if borderstate: opposite = 0 else: opposite = 1 config.set('visual', 'showborder', str(opposite)) state['gui'].apply_theme()
def apply_theme(self): """immediately apply the theme given in configuration this has changed from previous versions! Takes no arguments! Only uses configuration!""" # text cursor gtkrc_string = """\ style "pyroom-colored-cursor" { GtkTextView::cursor-color = '%s' bg_pixmap[NORMAL] = "<none>" } class "GtkWidget" style "pyroom-colored-cursor" """ % self.theme['foreground'] gtk.rc_parse_string(gtkrc_string) padding = int(self.theme['padding']) self.textbox.set_border_width(padding) # Screen geometry screen = gtk.gdk.screen_get_default() root_window = screen.get_root_window() mouse_x, mouse_y, mouse_mods = root_window.get_pointer() current_monitor_number = screen.get_monitor_at_point(mouse_x, mouse_y) monitor_geometry = screen.get_monitor_geometry(current_monitor_number) (screen_width, screen_height) = (monitor_geometry.width, monitor_geometry.height) width_percentage = float(self.theme['width']) height_percentage = float(self.theme['height']) # Sizing self.vbox.set_size_request(int(width_percentage * screen_width), int(height_percentage * screen_height)) parse_color = lambda x: gtk.gdk.color_parse(self.theme[x]) # Colors self.window.modify_bg(gtk.STATE_NORMAL, parse_color('background')) self.boxout.modify_bg(gtk.STATE_NORMAL, parse_color('border')) self.status.active_color = self.theme['foreground'] self.status.inactive_color = self.theme['background'] self.textbox.modify_bg(gtk.STATE_NORMAL, parse_color('textboxbg')) self.textbox.modify_base(gtk.STATE_NORMAL, parse_color('textboxbg')) self.textbox.modify_base(gtk.STATE_SELECTED, parse_color('foreground')) self.textbox.modify_text(gtk.STATE_NORMAL, parse_color('foreground')) self.textbox.modify_text(gtk.STATE_SELECTED, parse_color('textboxbg')) self.textbox.modify_fg(gtk.STATE_NORMAL, parse_color('foreground')) # Border if not int(config.get('visual', 'showborder')): self.boxin.set_border_width(0) self.boxout.set_border_width(0) else: self.boxin.set_border_width(1) self.boxout.set_border_width(1) # Fonts if config.get('visual', 'use_font_type') == 'custom' or\ not state['gnome_fonts']: new_font = config.get('visual', 'custom_font') else: font_type = config.get('visual', 'use_font_type') new_font = state['gnome_fonts'][font_type] self.textbox.modify_font(pango.FontDescription(new_font)) tab_width = pango.TabArray(1, False) tab_width.set_tab(0, pango.TAB_LEFT, calculate_real_tab_width(self.textbox, 4)) self.textbox.set_tabs(tab_width) # Indent if config.get('visual', 'indent') == '1': pango_context = self.textbox.get_pango_context() current_font_size = pango_context.\ get_font_description().\ get_size() / 1024 self.textbox.set_indent(current_font_size * 2) else: self.textbox.set_indent(0) # linespacing linespacing = config.getint('visual', 'linespacing') self.textbox.set_pixels_below_lines(linespacing) self.textbox.set_pixels_above_lines(linespacing) self.textbox.set_pixels_inside_wrap(linespacing) # alignment self.align.set(xalign=0.5, yalign=ORIENTATION[config.get('visual', 'alignment')], xscale=0, yscale=0)
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)
def apply_theme(self): """immediately apply the theme given in configuration this has changed from previous versions! Takes no arguments! Only uses configuration!""" # text cursor gtkrc_string = """\ style "pyroom-colored-cursor" { GtkTextView::cursor-color = '%s' bg_pixmap[NORMAL] = "<none>" } class "GtkWidget" style "pyroom-colored-cursor" """ % self.theme['foreground'] gtk.rc_parse_string(gtkrc_string) padding = int(self.theme['padding']) self.textbox.set_border_width(padding) # Screen geometry screen = gtk.gdk.screen_get_default() root_window = screen.get_root_window() mouse_x, mouse_y, mouse_mods = root_window.get_pointer() current_monitor_number = screen.get_monitor_at_point(mouse_x, mouse_y) monitor_geometry = screen.get_monitor_geometry(current_monitor_number) (screen_width, screen_height) = (monitor_geometry.width, monitor_geometry.height) width_percentage = float(self.theme['width']) height_percentage = float(self.theme['height']) # Sizing self.vbox.set_size_request( int(width_percentage * screen_width), int(height_percentage * screen_height) ) parse_color = lambda x: gtk.gdk.color_parse(self.theme[x]) # Colors self.window.modify_bg(gtk.STATE_NORMAL, parse_color('background')) self.boxout.modify_bg(gtk.STATE_NORMAL, parse_color('border')) self.status.active_color = self.theme['foreground'] self.status.inactive_color = self.theme['background'] self.textbox.modify_bg(gtk.STATE_NORMAL, parse_color('textboxbg')) self.textbox.modify_base(gtk.STATE_NORMAL, parse_color('textboxbg')) self.textbox.modify_base(gtk.STATE_SELECTED, parse_color('foreground')) self.textbox.modify_text(gtk.STATE_NORMAL, parse_color('foreground')) self.textbox.modify_text(gtk.STATE_SELECTED, parse_color('textboxbg')) self.textbox.modify_fg(gtk.STATE_NORMAL, parse_color('foreground')) # Border if not int(config.get('visual', 'showborder')): self.boxin.set_border_width(0) self.boxout.set_border_width(0) else: self.boxin.set_border_width(1) self.boxout.set_border_width(1) # Fonts if config.get('visual', 'use_font_type') == 'custom' or\ not state['gnome_fonts']: new_font = config.get('visual', 'custom_font') else: font_type = config.get('visual', 'use_font_type') new_font = state['gnome_fonts'][font_type] self.textbox.modify_font(pango.FontDescription(new_font)) tab_width = pango.TabArray(1, False) tab_width.set_tab(0, pango.TAB_LEFT, calculate_real_tab_width(self.textbox, 4) ) self.textbox.set_tabs(tab_width) # Indent if config.get('visual', 'indent') == '1': pango_context = self.textbox.get_pango_context() current_font_size = pango_context.\ get_font_description().\ get_size() / 1024 self.textbox.set_indent(current_font_size * 2) else: self.textbox.set_indent(0) # linespacing linespacing = config.getint('visual', 'linespacing') self.textbox.set_pixels_below_lines(linespacing) self.textbox.set_pixels_above_lines(linespacing) self.textbox.set_pixels_inside_wrap(linespacing) # alignment self.align.set( xalign=0.5, yalign=ORIENTATION[config.get('visual', 'alignment')], xscale=0, yscale=0 )