Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
 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))
Exemple #4
0
 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()
Exemple #5
0
    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)
Exemple #6
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)
Exemple #7
0
    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
        )