From a59d85df54024a940803b7e53c1b4f451c208e0f Mon Sep 17 00:00:00 2001 From: Emil Dudev Date: Sun, 22 Dec 2013 20:33:09 +0000 Subject: Add color theme selection to Terminal Fixes #4697 --- diff --git a/terminal.py b/terminal.py index de44e22..53e8987 100644 --- a/terminal.py +++ b/terminal.py @@ -32,6 +32,9 @@ from gi.repository import Pango from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.graphics.toolbarbox import ToolbarButton +from sugar3.graphics.colorbutton import ColorToolButton +from sugar3.graphics.combobox import ComboBox +from sugar3.graphics.toolcombobox import ToolComboBox from sugar3.activity.widgets import EditToolbar from sugar3.activity.widgets import ActivityToolbarButton @@ -55,6 +58,10 @@ logging.basicConfig() ZOOM_STEP = 1024 +_THEME_LIGHT = 0 +_THEME_DARK = 1 +_THEME_CUSTOM = 2 + class TerminalActivity(activity.Activity): @@ -68,6 +75,9 @@ class TerminalActivity(activity.Activity): self.max_participants = 1 + self._fg_color = '#000000' + self._bg_color = '#FFFFFF' + toolbar_box = ToolbarBox() activity_button = ActivityToolbarButton(self) @@ -165,6 +175,31 @@ class TerminalActivity(activity.Activity): fullscreen_button.connect('clicked', self.__fullscreen_cb) view_toolbar.insert(fullscreen_button, -1) fullscreen_button.show() + + self._theme_combo = ComboBox() + self._theme_combo.append_item(_THEME_LIGHT, _('Light theme')) + self._theme_combo.append_item(_THEME_DARK, _('Dark theme')) + self._theme_combo.append_item(_THEME_CUSTOM, _('Custom theme')) + self._theme_combo.set_active(0) + self._theme_combo.connect('changed', self._build_theme) + theme_tool = ToolComboBox(self._theme_combo) + view_toolbar.insert(theme_tool, -1) + theme_tool.show() + + self._bg_color_button = ColorToolButton() + self._bg_color_button.set_title(_('Choose background color')) + self._bg_color_button.connect('notify::color', self.__bg_color_set_cb) + self._bg_color_button.connect('color-set', self._save_colors) + view_toolbar.insert(self._bg_color_button, -1) + self._bg_color_button.hide() + + self._fg_color_button = ColorToolButton() + self._fg_color_button.set_title(_('Choose foreground color')) + self._fg_color_button.connect('notify::color', self.__fg_color_set_cb) + self._fg_color_button.connect('color-set', self._save_colors) + view_toolbar.insert(self._fg_color_button, -1) + self._fg_color_button.hide() + return view_toolbar def _zoom(self, step): @@ -183,6 +218,69 @@ class TerminalActivity(activity.Activity): def __fullscreen_cb(self, button): self.fullscreen() + def __fg_color_set_cb(self, button, pspec): + color = button.get_color() + self._fg_color = color.to_string() + vt = self._notebook.get_nth_page(self._notebook.get_current_page()).vt + vt.set_color_foreground(color) + + def __bg_color_set_cb(self, button, pspec): + color = button.get_color() + self._bg_color = color.to_string() + vt = self._notebook.get_nth_page(self._notebook.get_current_page()).vt + vt.set_color_background(color) + + def _save_colors(self, button): + fg_color = Gdk.color_parse(self._fg_color) + bg_color = Gdk.color_parse(self._bg_color) + + self._fg_color_button.set_color(fg_color) + self._bg_color_button.set_color(bg_color) + + for i in range(self._notebook.get_n_pages()): + vt = self._notebook.get_nth_page(i).vt + vt.set_colors(fg_color, bg_color, []) + + conf = ConfigParser.ConfigParser() + conf_file = os.path.join(env.get_profile_path(), 'terminalrc') + + if os.path.isfile(conf_file): + f = open(conf_file, 'r') + conf.readfp(f) + f.close() + else: + conf.add_section('terminal') + + conf.set('terminal', 'fg_color', self._fg_color) + conf.set('terminal', 'bg_color', self._bg_color) + + conf.write(open(conf_file, 'w')) + + def _build_theme(self, combobox): + theme = self._theme_combo.props.value + if theme == _THEME_LIGHT: + logging.error( "save colors" ) + self._fg_color_button.hide() + self._bg_color_button.hide() + + self._fg_color = '#000000' + self._bg_color = '#ffffff' + + self._save_colors(None) + elif theme == _THEME_DARK: + self._fg_color_button.hide() + self._bg_color_button.hide() + + self._fg_color = '#ffffff' + self._bg_color = '#000000' + + self._save_colors(None) + elif theme == _THEME_CUSTOM: + self._save_colors(None) + + self._fg_color_button.show() + self._bg_color_button.show() + def _create_help_button(self): helpitem = HelpButton() @@ -407,6 +505,9 @@ class TerminalActivity(activity.Activity): if self._notebook.get_n_pages() == 0: self._create_tab(None) + self._theme_combo.set_active(data['theme']) + self._build_theme(None) + def write_file(self, file_path): if not self.metadata['mime_type']: self.metadata['mime_type'] = 'text/plain' @@ -415,6 +516,8 @@ class TerminalActivity(activity.Activity): data['current-tab'] = self._notebook.get_current_page() data['tabs'] = [] + data['theme'] = self._theme_combo.props.value + for i in range(self._notebook.get_n_pages()): def is_selected(vte, *args): @@ -474,10 +577,10 @@ class TerminalActivity(activity.Activity): font = self._get_conf(conf, 'font', 'Monospace') vt.set_font(Pango.FontDescription(font)) - fg_color = self._get_conf(conf, 'fg_color', '#000000') - bg_color = self._get_conf(conf, 'bg_color', '#FFFFFF') - vt.set_colors(Gdk.color_parse(fg_color), - Gdk.color_parse(bg_color), []) + self._fg_color = self._get_conf(conf, 'fg_color', self._fg_color) + self._bg_color = self._get_conf(conf, 'bg_color', self._bg_color) + vt.set_colors(Gdk.color_parse(self._fg_color), + Gdk.color_parse(self._bg_color), []) blink = self._get_conf(conf, 'cursor_blink', False) vt.set_cursor_blink_mode(blink) -- cgit v0.9.1