From 2fee267dfee11bd687b4d780cb6b82924d59af3c Mon Sep 17 00:00:00 2001
From: Sebastian Koslowski <koslowski@kit.edu>
Date: Thu, 23 Jul 2015 16:36:22 +0200
Subject: grc: open and update params from external editor

---
 grc/gui/Param.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 65 insertions(+), 2 deletions(-)

(limited to 'grc/gui/Param.py')

diff --git a/grc/gui/Param.py b/grc/gui/Param.py
index 6bd45fae86..3588b81d8c 100644
--- a/grc/gui/Param.py
+++ b/grc/gui/Param.py
@@ -23,7 +23,7 @@ import pygtk
 pygtk.require('2.0')
 import gtk
 
-from . import Colors, Utils, Constants
+from . import Colors, Utils, Constants, Dialogs
 from . Element import Element
 
 
@@ -173,6 +173,66 @@ class MultiLineEntryParam(InputParam):
             pass  # no tooltips for old GTK
 
 
+# try:
+#     import gtksourceview
+#     lang_manager = gtksourceview.SourceLanguagesManager()
+#     py_lang = lang_manager.get_language_from_mime_type('text/x-python')
+#
+#     class PythonEditorParam(InputParam):
+#         expand = True
+#
+#         def __init__(self, *args, **kwargs):
+#             InputParam.__init__(self, *args, **kwargs)
+#
+#             buf = self._buffer = gtksourceview.SourceBuffer()
+#             buf.set_language(py_lang)
+#             buf.set_highlight(True)
+#             buf.set_text(self.param.get_value())
+#             buf.connect('changed', self._mark_changed)
+#
+#             view = self._view = gtksourceview.SourceView(self._buffer)
+#             view.connect('focus-out-event', self._apply_change)
+#             view.connect('key-press-event', self._handle_key_press)
+#             view.set_tabs_width(4)
+#             view.set_insert_spaces_instead_of_tabs(True)
+#             view.set_auto_indent(True)
+#             view.set_border_width(2)
+#
+#             scroll = gtk.ScrolledWindow()
+#             scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+#             scroll.add_with_viewport(view)
+#             self.pack_start(scroll, True)
+#
+#         def get_text(self):
+#             buf = self._buffer
+#             return buf.get_text(buf.get_start_iter(),
+#                                 buf.get_end_iter()).strip()
+#
+# except ImportError:
+#     print "Package 'gtksourceview' not found. No Syntax highlighting."
+#     PythonEditorParam = MultiLineEntryParam
+
+class PythonEditorParam(InputParam):
+
+    def __init__(self, *args, **kwargs):
+        InputParam.__init__(self, *args, **kwargs)
+        input = gtk.Button('Open in Editor')
+        input.connect('clicked', self.open_editor)
+        self.pack_start(input, True)
+
+    def open_editor(self, widget=None):
+        if not os.path.exists(Constants.EDITOR):
+            Dialogs.ChooseEditorDialog()
+        flowgraph = self.param.get_parent().get_parent()
+        flowgraph.install_external_editor(self.param)
+
+    def get_text(self):
+        pass  # we never update the value from here
+
+    def _apply_change(self, *args):
+        pass
+
+
 class EnumParam(InputParam):
     """Provide an entry box for Enum types with a drop down menu."""
 
@@ -341,9 +401,12 @@ class Param(Element):
         elif self.get_options():
             input_widget = EnumEntryParam(self, *args, **kwargs)
 
-        elif self.get_type() in ('_multiline', '_multiline_python_external'):
+        elif self.get_type() == '_multiline':
             input_widget = MultiLineEntryParam(self, *args, **kwargs)
 
+        elif self.get_type() == '_multiline_python_external':
+            input_widget = PythonEditorParam(self, *args, **kwargs)
+
         else:
             input_widget = EntryParam(self, *args, **kwargs)
 
-- 
cgit v1.2.3