summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2017-01-07 21:02:15 +0100
committerSebastian Koslowski <koslowski@kit.edu>2017-01-11 14:07:13 +0100
commitc52deb5f43cfd5a7083f3568719d88ac09ac838f (patch)
treeff2c5523caaabae3733e4f96f66232b2feca613f /grc
parent2a5403ce818a9dfd72a3965e138c8d9fb035a1ac (diff)
grc: gtk3: reimplemented custom bg colors for param entry boxes
Diffstat (limited to 'grc')
-rw-r--r--grc/gui/Colors.py76
-rw-r--r--grc/gui/Dialogs.py6
-rw-r--r--grc/gui/DrawingArea.py2
-rw-r--r--grc/gui/ParamWidgets.py57
-rw-r--r--grc/gui/PropsDialog.py2
-rw-r--r--grc/gui/canvas/flowgraph.py1
6 files changed, 77 insertions, 67 deletions
diff --git a/grc/gui/Colors.py b/grc/gui/Colors.py
index 01c461ada5..17eb151847 100644
--- a/grc/gui/Colors.py
+++ b/grc/gui/Colors.py
@@ -19,20 +19,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
from __future__ import absolute_import
-from gi.repository import Gdk, cairo
+from gi.repository import Gtk, Gdk, cairo
# import pycairo
from . import Constants
-def _color_parse(color_code):
+def get_color(color_code):
color = Gdk.RGBA()
color.parse(color_code)
- return color
-
-
-def get_color(color_code):
- color = _color_parse(color_code)
return color.red, color.green, color.blue, color.alpha
# chars_per_color = 2 if len(color_code) > 4 else 1
# offsets = range(1, 3 * chars_per_color + 1, chars_per_color)
@@ -80,42 +75,31 @@ PORT_TYPE_TO_COLOR.update((key, get_color(color)) for key, (_, color) in Constan
#################################################################################
# param box colors
#################################################################################
-COMPLEX_COLOR_SPEC = _color_parse('#3399FF')
-FLOAT_COLOR_SPEC = _color_parse('#FF8C69')
-INT_COLOR_SPEC = _color_parse('#00FF99')
-SHORT_COLOR_SPEC = _color_parse('#FFFF66')
-BYTE_COLOR_SPEC = _color_parse('#FF66FF')
-
-ID_COLOR_SPEC = _color_parse('#DDDDDD')
-WILDCARD_COLOR_SPEC = _color_parse('#FFFFFF')
-
-COMPLEX_VECTOR_COLOR_SPEC = _color_parse('#3399AA')
-FLOAT_VECTOR_COLOR_SPEC = _color_parse('#CC8C69')
-INT_VECTOR_COLOR_SPEC = _color_parse('#00CC99')
-SHORT_VECTOR_COLOR_SPEC = _color_parse('#CCCC33')
-BYTE_VECTOR_COLOR_SPEC = _color_parse('#CC66CC')
-
-PARAM_ENTRY_COLORS = {
- # Number types
- 'complex': COMPLEX_COLOR_SPEC,
- 'real': FLOAT_COLOR_SPEC,
- 'float': FLOAT_COLOR_SPEC,
- 'int': INT_COLOR_SPEC,
-
- # Vector types
- 'complex_vector': COMPLEX_VECTOR_COLOR_SPEC,
- 'real_vector': FLOAT_VECTOR_COLOR_SPEC,
- 'float_vector': FLOAT_VECTOR_COLOR_SPEC,
- 'int_vector': INT_VECTOR_COLOR_SPEC,
-
- # Special
- 'bool': INT_COLOR_SPEC,
- 'hex': INT_COLOR_SPEC,
- 'string': BYTE_VECTOR_COLOR_SPEC,
- 'id': ID_COLOR_SPEC,
- 'stream_id': ID_COLOR_SPEC,
- 'raw': WILDCARD_COLOR_SPEC,
-}
-
-PARAM_ENTRY_DEFAULT_COLOR = _color_parse('#FFFFFF')
-PARAM_ENTRY_ENUM_CUSTOM_COLOR = _color_parse('#EEEEEE')
+style_provider = Gtk.CssProvider()
+
+style_provider.load_from_data("""
+ #dtype_complex { background-color: #3399FF; }
+ #dtype_real { background-color: #FF8C69; }
+ #dtype_float { background-color: #FF8C69; }
+ #dtype_int { background-color: #00FF99; }
+
+ #dtype_complex_vector { background-color: #3399AA; }
+ #dtype_real_vector { background-color: #CC8C69; }
+ #dtype_float_vector { background-color: #CC8C69; }
+ #dtype_int_vector { background-color: #00CC99; }
+
+ #dtype_bool { background-color: #00FF99; }
+ #dtype_hex { background-color: #00FF99; }
+ #dtype_string { background-color: #CC66CC; }
+ #dtype_id { background-color: #DDDDDD; }
+ #dtype_stream_id { background-color: #DDDDDD; }
+ #dtype_raw { background-color: #FFFFFF; }
+
+ #enum_custom { background-color: #EEEEEE; }
+""")
+
+Gtk.StyleContext.add_provider_for_screen(
+ Gdk.Screen.get_default(),
+ style_provider,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+)
diff --git a/grc/gui/Dialogs.py b/grc/gui/Dialogs.py
index 09ecd48a13..51213a6154 100644
--- a/grc/gui/Dialogs.py
+++ b/grc/gui/Dialogs.py
@@ -103,9 +103,9 @@ class TextDisplay(SimpleTextDisplay):
""" Update view's scroll position. """
if self.scroll_lock:
buf = self.get_buffer()
- buf.move_mark(buf.get_insert(), buf.get_end_iter())
- # TODO: Fix later
- #self.scroll_to_mark(buffer.get_insert(), 0.0)
+ mark = buf.get_insert()
+ buf.move_mark(mark, buf.get_end_iter())
+ self.scroll_mark_onscreen(mark)
def clear(self):
""" Clear all text from buffer. """
diff --git a/grc/gui/DrawingArea.py b/grc/gui/DrawingArea.py
index 2e26c265a9..1a75e2d03b 100644
--- a/grc/gui/DrawingArea.py
+++ b/grc/gui/DrawingArea.py
@@ -209,7 +209,7 @@ class DrawingArea(Gtk.DrawingArea):
def _handle_focus_lost_event(self, widget, event):
# don't clear selection while context menu is active
- if not self._flow_graph.get_context_menu().flags() & Gtk.VISIBLE:
+ if not self._flow_graph.context_menu.get_take_focus():
self._flow_graph.unselect()
self._flow_graph.update_selected()
self._flow_graph.queue_draw()
diff --git a/grc/gui/ParamWidgets.py b/grc/gui/ParamWidgets.py
index b79a85623f..b56eace402 100644
--- a/grc/gui/ParamWidgets.py
+++ b/grc/gui/ParamWidgets.py
@@ -20,7 +20,37 @@ import os
from gi.repository import Gtk, Gdk
-from . import Colors, Utils
+from . import Utils
+
+
+style_provider = Gtk.CssProvider()
+
+style_provider.load_from_data("""
+ #dtype_complex { background-color: #3399FF; }
+ #dtype_real { background-color: #FF8C69; }
+ #dtype_float { background-color: #FF8C69; }
+ #dtype_int { background-color: #00FF99; }
+
+ #dtype_complex_vector { background-color: #3399AA; }
+ #dtype_real_vector { background-color: #CC8C69; }
+ #dtype_float_vector { background-color: #CC8C69; }
+ #dtype_int_vector { background-color: #00CC99; }
+
+ #dtype_bool { background-color: #00FF99; }
+ #dtype_hex { background-color: #00FF99; }
+ #dtype_string { background-color: #CC66CC; }
+ #dtype_id { background-color: #DDDDDD; }
+ #dtype_stream_id { background-color: #DDDDDD; }
+ #dtype_raw { background-color: #FFFFFF; }
+
+ #enum_custom { background-color: #EEEEEE; }
+""")
+
+Gtk.StyleContext.add_provider_for_screen(
+ Gdk.Screen.get_default(),
+ style_provider,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+)
class InputParam(Gtk.HBox):
@@ -44,7 +74,7 @@ class InputParam(Gtk.HBox):
self.connect('show', self._update_gui)
- def set_color(self, color):
+ def set_color(self, css_name):
pass
def set_tooltip_text(self, text):
@@ -58,11 +88,7 @@ class InputParam(Gtk.HBox):
Set the markup, color, tooltip, show/hide.
"""
self.label.set_markup(self.param.format_label_markup(self._have_pending_changes))
-
- # fixme: find a non-deprecated way to change colors
- # self.set_color(Colors.PARAM_ENTRY_COLORS.get(
- # self.param.get_type(), Colors.PARAM_ENTRY_DEFAULT_COLOR)
- # )
+ self.set_color('dtype_' + self.param.get_type())
self.set_tooltip_text(self.param.format_tooltip_text())
@@ -122,8 +148,8 @@ class EntryParam(InputParam):
def get_text(self):
return self._input.get_text()
- def set_color(self, color):
- self._input.override_background_color(Gtk.StateType.NORMAL, color)
+ def set_color(self, css_name):
+ self._input.set_name(css_name)
def set_tooltip_text(self, text):
self._input.set_tooltip_text(text)
@@ -143,10 +169,10 @@ class MultiLineEntryParam(InputParam):
self._view.set_buffer(self._buffer)
self._view.connect('focus-out-event', self._apply_change)
self._view.connect('key-press-event', self._handle_key_press)
- # fixme: add border to TextView
self._sw = Gtk.ScrolledWindow()
self._sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ self._sw.set_shadow_type(type=Gtk.ShadowType.IN)
self._sw.add(self._view)
self.pack_start(self._sw, True, True, True)
@@ -157,8 +183,8 @@ class MultiLineEntryParam(InputParam):
include_hidden_chars=False)
return text.strip()
- def set_color(self, color):
- self._view.override_background_color(Gtk.StateType.NORMAL, color)
+ def set_color(self, css_name):
+ self._view.set_name(css_name)
def set_tooltip_text(self, text):
self._view.set_tooltip_text(text)
@@ -245,10 +271,9 @@ class EnumEntryParam(InputParam):
else:
self._input.set_tooltip_text(text)
- def set_color(self, color):
- self._input.get_child().modify_base(
- Gtk.StateType.NORMAL,
- color if not self.has_custom_value else Colors.PARAM_ENTRY_ENUM_CUSTOM_COLOR
+ def set_color(self, css_name):
+ self._input.get_child().set_name(
+ css_name if not self.has_custom_value else 'enum_custom'
)
diff --git a/grc/gui/PropsDialog.py b/grc/gui/PropsDialog.py
index ca1e3c5296..5f39770e78 100644
--- a/grc/gui/PropsDialog.py
+++ b/grc/gui/PropsDialog.py
@@ -180,7 +180,7 @@ class PropsDialog(Gtk.Dialog):
# repopulate the params box
box_all_valid = True
for param in self._block.params.values():
- # fixme: why do we even rebuild instead of really hiding params?
+ # todo: why do we even rebuild instead of really hiding params?
if param.get_tab_label() != tab or param.get_hide() == 'all':
continue
box_all_valid = box_all_valid and param.is_valid()
diff --git a/grc/gui/canvas/flowgraph.py b/grc/gui/canvas/flowgraph.py
index 2aa0d7c12f..ac15510072 100644
--- a/grc/gui/canvas/flowgraph.py
+++ b/grc/gui/canvas/flowgraph.py
@@ -473,6 +473,7 @@ class FlowGraph(CoreFlowgraph, Drawable):
element.create_shapes()
def _drawables(self):
+ # todo: cache that
show_comments = Actions.TOGGLE_SHOW_BLOCK_COMMENTS.get_active()
for element in self._elements_to_draw:
if element.is_block and show_comments and element.enabled: