diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2015-07-17 09:58:55 +0200 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2015-07-17 09:58:55 +0200 |
commit | 93caad2a76027d0026dc021da2fd925ca295d477 (patch) | |
tree | 05c05cf36368eae9631a9a476fb94d5bb091b981 | |
parent | 2aad7187ddab012dd21f60e0d346add03869a20d (diff) |
grc: show preview of generated code in each blocks properties dialog
-rw-r--r-- | grc/gui/PropsDialog.py | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/grc/gui/PropsDialog.py b/grc/gui/PropsDialog.py index 470e2d59d8..009c763dd4 100644 --- a/grc/gui/PropsDialog.py +++ b/grc/gui/PropsDialog.py @@ -21,9 +21,11 @@ import pygtk pygtk.require('2.0') import gtk +import Actions from Dialogs import SimpleTextDisplay -from Constants import MIN_DIALOG_WIDTH, MIN_DIALOG_HEIGHT +from Constants import MIN_DIALOG_WIDTH, MIN_DIALOG_HEIGHT, FONT_SIZE import Utils +import pango TAB_LABEL_MARKUP_TMPL="""\ #set $foreground = $valid and 'black' or 'red' @@ -101,6 +103,17 @@ class PropsDialog(gtk.Dialog): self._docs_box.add_with_viewport(self._docs_text_display) notebook.append_page(self._docs_box, gtk.Label("Documentation")) + # Generated code for the block + self._code_text_display = code_view = SimpleTextDisplay() + code_view.set_wrap_mode(gtk.WRAP_NONE) + code_view.get_buffer().create_tag('b', weight=pango.WEIGHT_BOLD) + code_view.modify_font(pango.FontDescription( + 'monospace %d' % FONT_SIZE)) + code_box = gtk.ScrolledWindow() + code_box.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + code_box.add_with_viewport(self._code_text_display) + notebook.append_page(code_box, gtk.Label("Generated Code")) + # Error Messages for the block self._error_messages_text_display = SimpleTextDisplay() self._error_box = gtk.ScrolledWindow() @@ -127,7 +140,7 @@ class PropsDialog(gtk.Dialog): true if changed """ old_hash = self._hash - #create a tuple of things from each param that affects the params box + # create a tuple of things from each param that affects the params box self._hash = hash(tuple([( hash(param), param.get_type(), param.get_hide() == 'all', ) for param in self._block.get_params()])) @@ -138,7 +151,7 @@ class PropsDialog(gtk.Dialog): A change occurred within a param: Rewrite/validate the block and update the gui. """ - #update for the block + # update for the block self._block.rewrite() self._block.validate() self._update_gui() @@ -155,9 +168,9 @@ class PropsDialog(gtk.Dialog): Update the documentation block. Hide the box if there are no docs. """ - #update the params box + # update the params box if self._params_changed(): - #hide params box before changing + # hide params box before changing for tab, label, vbox in self._params_boxes: vbox.hide_all() # empty the params box @@ -173,17 +186,35 @@ class PropsDialog(gtk.Dialog): input_widget = param.get_input(self._handle_changed, self._activate_apply) vbox.pack_start(input_widget, input_widget.expand) label.set_markup(Utils.parse_template(TAB_LABEL_MARKUP_TMPL, valid=box_all_valid, tab=tab)) - #show params box with new params + # show params box with new params vbox.show_all() - #update the errors box + # update the errors box if self._block.is_valid(): self._error_box.hide() else: self._error_box.show() messages = '\n\n'.join(self._block.get_error_messages()) self._error_messages_text_display.set_text(messages) - #update the docs box + # update the docs box self._docs_text_display.set_text(self._block.get_doc()) + # update the generated code + self._update_generated_code_page() + + def _update_generated_code_page(self): + buffer = self._code_text_display.get_buffer() + block = self._block + + def insert(header, text): + if not text: + return + buffer.insert_with_tags_by_name(buffer.get_end_iter(), header, 'b') + buffer.insert(buffer.get_end_iter(), text) + + buffer.delete(buffer.get_start_iter(), buffer.get_end_iter()) + insert('# Imports\n', '\n'.join(block.get_imports())) + if block.get_key().startswith('variable'): + insert('\n\n# Variables\n', block.get_var_make()) + insert('\n\n# Blocks\n', block.get_make()) def _handle_key_press(self, widget, event): """ @@ -209,3 +240,5 @@ class PropsDialog(gtk.Dialog): self.set_response_sensitive(gtk.RESPONSE_APPLY, False) return True return False + + |