support adding and removing profiles, and returning their values to Config() when switching between them

This commit is contained in:
Chris Jones 2010-01-09 15:51:56 +00:00
parent 5b7e5b431a
commit 92e7eb1dff
2 changed files with 222 additions and 1 deletions

View File

@ -214,6 +214,10 @@ class Config(object):
dbg('Config::set_profile: %s does not exist, creating' % profile) dbg('Config::set_profile: %s does not exist, creating' % profile)
self.base.profiles[profile] = copy(DEFAULTS['profiles']['default']) self.base.profiles[profile] = copy(DEFAULTS['profiles']['default'])
def add_profile(self, profile):
"""Add a new profile"""
return(self.base.add_profile(profile))
def del_profile(self, profile): def del_profile(self, profile):
"""Delete a profile""" """Delete a profile"""
if self.base.profiles.has_key(profile): if self.base.profiles.has_key(profile):
@ -466,6 +470,13 @@ class ConfigBase(Borg):
"""Set a whole tree for a plugin""" """Set a whole tree for a plugin"""
self.plugins[plugin] = tree self.plugins[plugin] = tree
def add_profile(self, profile):
"""Add a new profile"""
if profile in self.profiles:
return(False)
self.profiles[profile] = copy(DEFAULTS['profiles']['default'])
return(True)
if __name__ == '__main__': if __name__ == '__main__':
import sys import sys
import doctest import doctest

View File

@ -10,6 +10,7 @@ from version import APP_NAME, APP_VERSION
from translation import _ from translation import _
class PrefsEditor: class PrefsEditor:
previous_selection = None
colorschemevalues = {'black_on_yellow': 0, colorschemevalues = {'black_on_yellow': 0,
'black_on_white': 1, 'black_on_white': 1,
'grey_on_black': 2, 'grey_on_black': 2,
@ -247,6 +248,8 @@ class PrefsEditor:
# Background image file # Background image file
if self.config['background_image'] != '': if self.config['background_image'] != '':
widget = guiget('background-image-filechooser') widget = guiget('background-image-filechooser')
if self.config['background_image'] is not None and \
self.config['background_image'] != '':
widget.set_filename(self.config['background_image']) widget.set_filename(self.config['background_image'])
# Background image scrolls # Background image scrolls
widget = guiget('scroll-background-checkbutton') widget = guiget('scroll-background-checkbutton')
@ -302,6 +305,197 @@ class PrefsEditor:
else: else:
widget.set_active(1) widget.set_active(1)
def store_profile_values(self, profile):
"""Pull out all the settings before switching profile"""
guiget = self.builder.get_object
## General tab
# Use system font
widget = guiget('system-font-checkbutton')
self.config['use_system_font'] = widget.get_active()
# Font
widget = guiget('font-selector')
self.config['font'] = widget.get_font_name()
# Allow bold
widget = guiget('allow-bold-checkbutton')
self.config['allow_bold'] = widget.get_active()
# Visual Bell
widget = guiget('visual-bell-checkbutton')
self.config['visible_bell'] = widget.get_active()
# Audible Bell
widget = guiget('audible-bell-checkbutton')
self.config['audible_bell'] = widget.get_active()
# Urgent Bell
widget = guiget('urgent-bell-checkbutton')
self.config['urgent_bell'] = widget.get_active()
# Cursor Shape
widget = guiget('cursor-shape-combobox')
selected = widget.get_active()
if selected == 0:
value = 'block'
elif selected == 1:
value = 'underline'
elif selected == 2:
value = 'ibeam'
self.config['cursor_shape'] = value
# Word chars
widget = guiget('word-chars-entry')
self.config['word_chars'] = widget.get_text()
## Command tab
# Login shell
widget = guiget('login-shell-checkbutton')
self.config['login_shell'] = widget.get_active()
# Update records
widget = guiget('update-records-checkbutton')
self.config['update_records'] = widget.get_active()
# Use custom command
widget = guiget('use-custom-command-checkbutton')
self.config['use_custom_command'] = widget.get_active()
# Custom command
widget = guiget('custom-command-entry')
self.config['custom_command'] = widget.get_text()
# Exit action
widget = guiget('exit-action-combobox')
selected = widget.get_active()
if selected == 0:
value = 'close'
elif selected == 1:
value = 'restart'
elif selected == 2:
value = 'hold'
self.config['exit_action'] = value
## Colours tab
# Use system colours
widget = guiget('use-theme-colors-checkbutton')
self.config['use_theme_colors'] = widget.get_active()
# Colour scheme
widget = guiget('color-scheme-combobox')
selected = widget.get_active()
if selected == 0:
value = 'black_on_yellow'
elif selected == 1:
value = 'black_on_white'
elif selected == 2:
value = 'grey_on_black'
elif selected == 3:
value = 'green_on_black'
elif selected == 4:
value = 'white_on_black'
elif selected == 5:
value = 'orange_on_black'
elif selected == 6:
value = 'custom'
self.config['color_scheme'] = value
# Foreground colour
widget = guiget('foreground-colorpicker')
self.config['foreground_color'] = widget.get_color().to_string()
# Background colour
widget = guiget('background-colorpicker')
self.config['background_color'] = widget.get_color().to_string()
# FIXME: Do the palette schemes and palette
## Background tab
# Background type
widget = guiget('solid-radiobutton')
if widget.get_active() == True:
value = 'solid'
widget = guiget('image-radiobutton')
if widget.get_active() == True:
value = 'image'
widget = guiget('transparent-radiobutton')
if widget.get_active() == True:
value = 'transparent'
# Background image
widget = guiget('background-image-filechooser')
self.config['background_image'] = widget.get_filename()
# Background scrolls
widget = guiget('scroll-background-checkbutton')
self.config['scroll_background'] = widget.get_active()
# Background darkness
widget = guiget('darken-background-scale')
self.config['background_darkness'] = widget.get_value()
## Scrolling tab
# Scrollbar
widget = guiget('scrollbar-position-combobox')
selected = widget.get_active()
if selected == 0:
value = 'left'
elif selected == 1:
value = 'right'
elif selected ==2:
value = 'hidden'
self.config['scrollbar_position'] = value
# Scrollback lines
widget = guiget('scrollback-lines-spinbutton')
self.config['scrollback_lines'] = widget.get_value()
# Scroll on output
widget = guiget('scroll-on-output-checkbutton')
self.config['scroll_on_output'] = widget.get_active()
# Scroll on keystroke
widget = guiget('scroll-on-keystroke-checkbutton')
self.config['scroll_on_keystroke'] = widget.get_active()
## Compatibility tab
# Backspace key
widget = guiget('backspace-binding-combobox')
selected = widget.get_active()
if selected == 0:
value = 'control-h'
elif selected == 1:
value = 'ascii-del'
elif selected == 2:
value =='escape-sequence'
self.config['backspace_binding'] = value
# Delete key
widget = guiget('delete-binding-combobox')
selected = widget.get_active()
if selected == 0:
value = 'control-h'
elif selected == 1:
value = 'ascii-del'
elif selected == 2:
value = 'escape-sequence'
self.config['delete_binding'] = value
def on_profileaddbutton_clicked(self, button):
"""Add a new profile to the list"""
guiget = self.builder.get_object
treeview = guiget('profilelist')
model = treeview.get_model()
values = [ r[0] for r in model ]
newprofile = _('New Profile')
if newprofile in values:
i = 0
while newprofile in values:
i = i + 1
newprofile = '%s %d' % (_('New Profile'), i)
if self.config.add_profile(newprofile):
model.append([newprofile])
def on_profileremovebutton_clicked(self, button):
"""Remove a profile from the list"""
guiget = self.builder.get_object
treeview = guiget('profilelist')
selection = treeview.get_selection()
(model, rowiter) = selection.get_selected()
profile = model.get_value(rowiter, 0)
if profile == 'default':
# We shouldn't let people delete this profile
return
self.config.del_profile(profile)
model.remove(rowiter)
selection.select_iter(model.get_iter_first())
def on_use_custom_command_checkbutton_toggled(self, checkbox): def on_use_custom_command_checkbutton_toggled(self, checkbox):
"""Toggling the use_custom_command checkbox needs to alter the """Toggling the use_custom_command checkbox needs to alter the
sensitivity of the custom_command entrybox""" sensitivity of the custom_command entrybox"""
@ -366,9 +560,25 @@ class PrefsEditor:
def on_profile_selection_changed(self, selection): def on_profile_selection_changed(self, selection):
"""A different profile was selected""" """A different profile was selected"""
if self.previous_selection is not None:
self.store_profile_values(self.previous_selection)
(listmodel, rowiter) = selection.get_selected() (listmodel, rowiter) = selection.get_selected()
if not rowiter:
# Something is wrong, just jump to the first item in the list
treeview = selection.get_tree_view()
liststore = treeview.get_model()
selection.select_iter(liststore.get_iter_first())
return
profile = listmodel.get_value(rowiter, 0) profile = listmodel.get_value(rowiter, 0)
self.set_profile_values(profile) self.set_profile_values(profile)
self.previous_selection = profile
widget = self.builder.get_object('profileremovebutton')
if profile == 'default':
widget.set_sensitive(False)
else:
widget.set_sensitive(True)
def on_profile_name_edited(self, cell, path, newtext): def on_profile_name_edited(self, cell, path, newtext):
"""Update a profile name""" """Update a profile name"""