diff --git a/terminatorlib/config.py b/terminatorlib/config.py index da2a3148..405a5584 100755 --- a/terminatorlib/config.py +++ b/terminatorlib/config.py @@ -206,6 +206,7 @@ DEFAULTS = { }, }, 'layouts': { + 'default': {'type': 'Terminal'} }, 'plugins': { }, @@ -265,6 +266,25 @@ class Config(object): """List all configured profiles""" return(self.base.profiles.keys()) + def add_layout(self, layout): + """Add a new layout""" + return(self.base.add_layout(layout)) + + def del_layout(self, layout): + """Delete a layout""" + if self.base.layouts.has_key(layout): + del(self.base.layouts[layout]) + + def rename_layout(self, layout, newname): + """Rename a layout""" + if self.base.layouts.has_key(layout): + self.base.layouts[newname] = self.base.layouts[layout] + del(self.base.layouts[layout]) + + def list_layouts(self): + """List all configured layouts""" + return(self.base.layouts.keys()) + def get_system_font(self): """Look up the system font""" if 'gconf' not in globals(): @@ -547,3 +567,10 @@ class ConfigBase(Borg): self.profiles[profile] = copy(DEFAULTS['profiles']['default']) return(True) + def add_layout(self, layout): + """Add a new layout""" + if layout in self.layouts: + return(False) + self.layouts[layout] = {'type': 'Terminal'} + return(True) + diff --git a/terminatorlib/preferences.glade b/terminatorlib/preferences.glade index 5d4493f2..2d8e227c 100644 --- a/terminatorlib/preferences.glade +++ b/terminatorlib/preferences.glade @@ -2063,7 +2063,7 @@ True - + 0 diff --git a/terminatorlib/prefseditor.py b/terminatorlib/prefseditor.py index 51fa22fd..f42ad76a 100755 --- a/terminatorlib/prefseditor.py +++ b/terminatorlib/prefseditor.py @@ -184,7 +184,15 @@ class PrefsEditor: selection.select_iter(self.profileiters['default']) ## Layouts tab - # FIXME: Implement this + widget = guiget('layoutlist') + liststore = widget.get_model() + layouts = self.config.list_layouts() + self.layoutiters = {} + for layout in layouts: + self.layoutiters[layout] = liststore.append([layout]) + selection = widget.get_selection() + selection.connect('changed', self.on_layout_selection_changed) + selection.select_iter(self.layoutiters['default']) ## Keybindings tab widget = guiget('keybindingtreeview') @@ -599,6 +607,10 @@ class PrefsEditor: value = 'escape-sequence' self.config['delete_binding'] = value + def store_layout(self, layout): + """Store a layout""" + pass + def on_profileaddbutton_clicked(self, _button): """Add a new profile to the list""" guiget = self.builder.get_object @@ -635,6 +647,42 @@ class PrefsEditor: model.remove(rowiter) selection.select_iter(model.get_iter_first()) + def on_layoutaddbutton_clicked(self, _button): + """Add a new layout to the list""" + guiget = self.builder.get_object + + treeview = guiget('layoutlist') + model = treeview.get_model() + values = [ r[0] for r in model ] + + newlayout = _('New Layout') + if newlayout in values: + i = 1 + while newlayout in values: + i = i + 1 + newlayout = '%s %d' % (_('New Layout'), i) + + if self.config.add_layout(newlayout): + model.append([newlayout]) + + def on_layoutremovebutton_clicked(self, _button): + """Remove a layout from the list""" + guiget = self.builder.get_object + + treeview = guiget('layoutlist') + selection = treeview.get_selection() + (model, rowiter) = selection.get_selected() + layout = model.get_value(rowiter, 0) + + if layout == 'default': + # We shouldn't let people delete this layout + return + + self.previous_sekection = None + self.config.del_layout(layout) + model.remove(rowiter) + selection.select_iter(model.get_iter_first()) + def on_use_custom_command_checkbutton_toggled(self, checkbox): """Toggling the use_custom_command checkbox needs to alter the sensitivity of the custom_command entrybox""" @@ -737,6 +785,45 @@ class PrefsEditor: if oldname == self.previous_selection: self.previous_selection = newtext + def on_layout_selection_changed(self, selection): + """A different layout was selected""" + if self.previous_selection is not None: + dbg('Storing: %s' % self.previous_selection) + self.store_layout(self.previous_selection) + + (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 + layout = listmodel.get_value(rowiter, 0) + self.set_profile_values(layout) + self.previous_selection = layout + + widget = self.builder.get_object('layoutremovebutton') + if layout == 'default': + widget.set_sensitive(False) + else: + widget.set_sensitive(True) + + def on_layout_name_edited(self, cell, path, newtext): + """Update a layout name""" + oldname = cell.get_property('text') + if oldname == newtext: + return + dbg('Changing %s to %s' % (oldname, newtext)) + self.config.rename_layout(oldname, newtext) + + widget = self.builder.get_object('layoutlist') + model = widget.get_model() + itera = model.get_iter(path) + model.set_value(itera, 0, newtext) + + if oldname == self.previous_selection: + self.previous_selection = newtext + def on_color_scheme_combobox_changed(self, widget): """Update the fore/background colour pickers""" value = None