Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Dudev <emildudev@gmail.com>2013-12-22 20:33:09 (GMT)
committer Emil Dudev <emildudev@gmail.com>2013-12-23 16:18:25 (GMT)
commita59d85df54024a940803b7e53c1b4f451c208e0f (patch)
treee0226079063e7209659a4e47863ae59496cf845c
parent5d9e5f7c8869b1ef1c3c2a9db4a9f49dcf641c80 (diff)
Add color theme selection to Terminalticket4697
Fixes #4697
-rw-r--r--terminal.py111
1 files changed, 107 insertions, 4 deletions
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)