reterm 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +131 -0
- data/designer/main.rb +10 -0
- data/designer/src/ComponentParams.rb +120 -0
- data/designer/src/ComponentsList.rb +90 -0
- data/designer/src/CreatedList.rb +156 -0
- data/designer/src/Designer.rb +114 -0
- data/designer/src/ToggleArea.rb +67 -0
- data/designer/src/common.rb +1 -0
- data/designer/src/component_factory.rb +30 -0
- data/designer/src/component_map.rb +116 -0
- data/designer/src/glade/ComponentParams.glade +96 -0
- data/designer/src/glade/Designer.glade +184 -0
- data/designer/src/images/add.png +0 -0
- data/designer/src/images/asciitext.png +0 -0
- data/designer/src/images/blank.png +0 -0
- data/designer/src/images/blank_sm.png +0 -0
- data/designer/src/images/button.png +0 -0
- data/designer/src/images/dial.png +0 -0
- data/designer/src/images/entry.png +0 -0
- data/designer/src/images/hslider.png +0 -0
- data/designer/src/images/label.png +0 -0
- data/designer/src/images/matrix.png +0 -0
- data/designer/src/images/orig/Check.png +0 -0
- data/designer/src/images/orig/ascii_text.png +0 -0
- data/designer/src/images/orig/button.png +0 -0
- data/designer/src/images/orig/dial.png +0 -0
- data/designer/src/images/orig/entry.png +0 -0
- data/designer/src/images/orig/hslider.png +0 -0
- data/designer/src/images/orig/label.png +0 -0
- data/designer/src/images/orig/matrix.png +0 -0
- data/designer/src/images/orig/radio.png +0 -0
- data/designer/src/images/orig/rocker.png +0 -0
- data/designer/src/images/orig/slist.png +0 -0
- data/designer/src/images/orig/vslider.png +0 -0
- data/designer/src/images/radio.png +0 -0
- data/designer/src/images/remove.png +0 -0
- data/designer/src/images/rocker.png +0 -0
- data/designer/src/images/slist.png +0 -0
- data/designer/src/images/vslider.png +0 -0
- data/lib/reterm.rb +22 -0
- data/lib/reterm/color_pair.rb +66 -0
- data/lib/reterm/component.rb +40 -0
- data/lib/reterm/components.rb +32 -0
- data/lib/reterm/components/ascii_text.rb +46 -0
- data/lib/reterm/components/button.rb +31 -0
- data/lib/reterm/components/dial.rb +95 -0
- data/lib/reterm/components/dialog.rb +34 -0
- data/lib/reterm/components/entry.rb +38 -0
- data/lib/reterm/components/hslider.rb +32 -0
- data/lib/reterm/components/image.rb +55 -0
- data/lib/reterm/components/label.rb +20 -0
- data/lib/reterm/components/matrix.rb +43 -0
- data/lib/reterm/components/radio.rb +33 -0
- data/lib/reterm/components/rocker.rb +71 -0
- data/lib/reterm/components/slist.rb +32 -0
- data/lib/reterm/components/template.rb +23 -0
- data/lib/reterm/components/vslider.rb +61 -0
- data/lib/reterm/init.rb +95 -0
- data/lib/reterm/layout.rb +63 -0
- data/lib/reterm/layouts.rb +16 -0
- data/lib/reterm/layouts/horizontal.rb +19 -0
- data/lib/reterm/layouts/vertical.rb +19 -0
- data/lib/reterm/loader.rb +126 -0
- data/lib/reterm/menu.rb +81 -0
- data/lib/reterm/mixins/cdk_component.rb +45 -0
- data/lib/reterm/mixins/component_input.rb +37 -0
- data/lib/reterm/mixins/event_dispatcher.rb +20 -0
- data/lib/reterm/mixins/nav_input.rb +126 -0
- data/lib/reterm/panel.rb +37 -0
- data/lib/reterm/resize.rb +27 -0
- data/lib/reterm/terminal.rb +33 -0
- data/lib/reterm/version.rb +3 -0
- data/lib/reterm/window.rb +260 -0
- metadata +155 -0
| @@ -0,0 +1,114 @@ | |
| 1 | 
            +
            require 'reterm'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Main designer window
         | 
| 4 | 
            +
            class Designer
         | 
| 5 | 
            +
              include GladeGUI
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              attr_accessor :component_list
         | 
| 8 | 
            +
              attr_accessor :created_list
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              attr_accessor :component
         | 
| 11 | 
            +
              attr_accessor :ta
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def initialize
         | 
| 14 | 
            +
                @component_list = ComponentsList.new(self)
         | 
| 15 | 
            +
                @created_list   = CreatedList.new(self)
         | 
| 16 | 
            +
                @component = ToggleArea.new(self)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                set_components
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def window
         | 
| 22 | 
            +
                @builder["window1"]
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def before_show
         | 
| 26 | 
            +
                window.title = "RETerm Designer"
         | 
| 27 | 
            +
                @builder["component_window"].add(@component_list, :expand => true)
         | 
| 28 | 
            +
                @builder["created_window"].add(@created_list,     :expand => true)
         | 
| 29 | 
            +
                @builder["viewer"].add(@component.btn)
         | 
| 30 | 
            +
                @component.show
         | 
| 31 | 
            +
              end  
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              def create_component(component, params)
         | 
| 34 | 
            +
                c = build_component self, component, params
         | 
| 35 | 
            +
                c, areas = *c if c.is_a?(Array)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                parent = nil
         | 
| 38 | 
            +
                if @component.is_a?(ToggleArea)
         | 
| 39 | 
            +
                  @builder["viewer"].remove(@component.btn)
         | 
| 40 | 
            +
                  @builder["viewer"].add(c)
         | 
| 41 | 
            +
                  c.show
         | 
| 42 | 
            +
                  areas.each { |a| a.show } if areas
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  @component = c
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                else
         | 
| 47 | 
            +
                  parent = component_with_toggle_area
         | 
| 48 | 
            +
                  index = parent.child_get_property(@ta.btn, :position)
         | 
| 49 | 
            +
                  parent.remove(@ta.btn)
         | 
| 50 | 
            +
                  parent.add(c, :expand => true)
         | 
| 51 | 
            +
                  parent.child_set_property(c, :position, index)
         | 
| 52 | 
            +
                  c.show
         | 
| 53 | 
            +
                  areas.each { |a| a.show } if areas
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                @created_list.register component, params, c, parent
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                self.toggle_area = nil
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              def remove_component(c)
         | 
| 62 | 
            +
                if c == @component
         | 
| 63 | 
            +
                  @component = ToggleArea.new(self)
         | 
| 64 | 
            +
                  @builder["viewer"].remove(c)
         | 
| 65 | 
            +
                  @builder["viewer"].add(@component.btn)
         | 
| 66 | 
            +
                  @component.show
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                else
         | 
| 69 | 
            +
                  parent = component_with_widget(c)
         | 
| 70 | 
            +
                  index = parent.child_get_property(c, :position)
         | 
| 71 | 
            +
                  parent.remove(c)
         | 
| 72 | 
            +
                  ta = ToggleArea.new(self)
         | 
| 73 | 
            +
                  parent.add(ta.btn, :expand => true)
         | 
| 74 | 
            +
                  parent.child_set_property(ta.btn, :position, index)
         | 
| 75 | 
            +
                  ta.show
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
              def toggle_area=(ta)
         | 
| 80 | 
            +
                @ta.toggle_off if has_toggled_area?
         | 
| 81 | 
            +
                @ta = ta
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              # XXX needed as we need to invoke from #toggle_off
         | 
| 85 | 
            +
              def clear_toggle_area
         | 
| 86 | 
            +
                @ta = nil
         | 
| 87 | 
            +
              end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
              def has_toggled_area?
         | 
| 90 | 
            +
                !!@ta
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
              private
         | 
| 94 | 
            +
             | 
| 95 | 
            +
              def component_with_toggle_area(c=component)
         | 
| 96 | 
            +
                component_with_widget(@ta.btn, c)
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              def component_with_widget(widget, c=component)
         | 
| 100 | 
            +
                return c if c.children.include?(widget)
         | 
| 101 | 
            +
                c.children.each { |child|
         | 
| 102 | 
            +
                  ch = component_with_widget(widget, child) if child.kind_of?(Gtk::Box)
         | 
| 103 | 
            +
                  return ch unless ch.nil?
         | 
| 104 | 
            +
                }
         | 
| 105 | 
            +
                nil
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
              def set_components
         | 
| 109 | 
            +
                (RETerm::Layouts.all.sort +
         | 
| 110 | 
            +
                 RETerm::Components.all.sort).each { |c|
         | 
| 111 | 
            +
                  @component_list.add_component c if COMPONENTS.key?(c)
         | 
| 112 | 
            +
                }
         | 
| 113 | 
            +
              end
         | 
| 114 | 
            +
            end
         | 
| @@ -0,0 +1,67 @@ | |
| 1 | 
            +
            # Mechanism which user specifies area to add component
         | 
| 2 | 
            +
            class ToggleArea
         | 
| 3 | 
            +
              attr_accessor :toggled
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def toggle_on
         | 
| 6 | 
            +
                @toggled = true
         | 
| 7 | 
            +
                btn.remove(add)
         | 
| 8 | 
            +
                btn.add(rm)
         | 
| 9 | 
            +
                @designer.toggle_area = self
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def toggle_off
         | 
| 13 | 
            +
                @toggled = false
         | 
| 14 | 
            +
                btn.remove(rm)
         | 
| 15 | 
            +
                btn.add(add)
         | 
| 16 | 
            +
                show
         | 
| 17 | 
            +
                @designer.clear_toggle_area
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def add
         | 
| 21 | 
            +
                @add ||= Gtk::Image.new :file => "#{IMG_DIR}/add.png"
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              def rm
         | 
| 25 | 
            +
                @rm ||= Gtk::Image.new :file => "#{IMG_DIR}/remove.png"
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
             | 
| 29 | 
            +
              def btn
         | 
| 30 | 
            +
                @btn ||=
         | 
| 31 | 
            +
                  begin
         | 
| 32 | 
            +
                    b = Gtk::Button.new
         | 
| 33 | 
            +
                    b.add add
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    b.signal_connect("clicked") { |*args|
         | 
| 36 | 
            +
                      if @toggled
         | 
| 37 | 
            +
                        toggle_off
         | 
| 38 | 
            +
                      else
         | 
| 39 | 
            +
                        toggle_on
         | 
| 40 | 
            +
                      end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                      show
         | 
| 43 | 
            +
                    }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    css_provider = Gtk::CssProvider.new
         | 
| 46 | 
            +
                    css_provider.load(data: "button:hover {background-image: image(#FFFF00);}")
         | 
| 47 | 
            +
                    b.style_context.add_provider(css_provider, Gtk::StyleProvider::PRIORITY_USER)
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    b
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              def show
         | 
| 54 | 
            +
                btn.show
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                if @toggled
         | 
| 57 | 
            +
                  rm.show
         | 
| 58 | 
            +
                else
         | 
| 59 | 
            +
                  add.show
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              def initialize(designer)
         | 
| 64 | 
            +
                @designer = designer
         | 
| 65 | 
            +
                @toggled = false
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            IMG_DIR = File.join(File.dirname(__FILE__), "images")
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            def build_component(designer, component, params)
         | 
| 2 | 
            +
              if component == :Horizontal
         | 
| 3 | 
            +
                areas = []
         | 
| 4 | 
            +
                c = Gtk::HBox.new
         | 
| 5 | 
            +
                cols = params.first
         | 
| 6 | 
            +
                0.upto(cols-1) {
         | 
| 7 | 
            +
                  area = ToggleArea.new(designer)
         | 
| 8 | 
            +
                  areas << area
         | 
| 9 | 
            +
                  c.add area.btn, :expand => true
         | 
| 10 | 
            +
                }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                return [c, areas]
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              elsif component == :Vertical
         | 
| 15 | 
            +
                areas = []
         | 
| 16 | 
            +
                c = Gtk::VBox.new
         | 
| 17 | 
            +
                rows = params.first
         | 
| 18 | 
            +
                0.upto(rows-1) {
         | 
| 19 | 
            +
                  area = ToggleArea.new(designer)
         | 
| 20 | 
            +
                  areas << area
         | 
| 21 | 
            +
                  c.add area.btn, :expand => true
         | 
| 22 | 
            +
                }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                return [c, areas]
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              else
         | 
| 27 | 
            +
                return designer.component_list.image_for(component)
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,116 @@ | |
| 1 | 
            +
            COMPONENTS = {
         | 
| 2 | 
            +
              # Layouts
         | 
| 3 | 
            +
              :Horizontal => {
         | 
| 4 | 
            +
                :desc => "Horizontal Layout",
         | 
| 5 | 
            +
                :params => {
         | 
| 6 | 
            +
                  "Columns" => :int
         | 
| 7 | 
            +
                }
         | 
| 8 | 
            +
              },
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              :Vertical => {
         | 
| 11 | 
            +
                :desc => "Vertical Layout",
         | 
| 12 | 
            +
                :params => {
         | 
| 13 | 
            +
                  "Rows" => :int
         | 
| 14 | 
            +
                }
         | 
| 15 | 
            +
              },
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              :AsciiText => {
         | 
| 18 | 
            +
                :desc => "Text Rendered Using Ascii Font",
         | 
| 19 | 
            +
                :params => {
         | 
| 20 | 
            +
                  "Text" => :string
         | 
| 21 | 
            +
                },
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                :init_keys => ["text"]
         | 
| 24 | 
            +
              },
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              :Button => {
         | 
| 27 | 
            +
                :desc => "Clickable Button",
         | 
| 28 | 
            +
                :params => {
         | 
| 29 | 
            +
                  "Text" => :string
         | 
| 30 | 
            +
                },
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                :init_keys => ["text"]
         | 
| 33 | 
            +
              },
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              :Dial => {
         | 
| 36 | 
            +
                :desc => "Rotatable Dial"
         | 
| 37 | 
            +
              },
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              #:Dialog => {
         | 
| 40 | 
            +
              #  :desc => "Popup Dialog"
         | 
| 41 | 
            +
              #},
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              :Entry => {
         | 
| 44 | 
            +
                :desc => "Text Entry",
         | 
| 45 | 
            +
                :params => {
         | 
| 46 | 
            +
                  "Title" => :string,
         | 
| 47 | 
            +
                  "Label" => :string
         | 
| 48 | 
            +
                },
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                :init_keys => ["title", "label"]
         | 
| 51 | 
            +
              },
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              :HSlider => {
         | 
| 54 | 
            +
                :desc => "Horizontal Slider"
         | 
| 55 | 
            +
              },
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              :Image => {
         | 
| 58 | 
            +
                :desc => "Image rendered with ascii art",
         | 
| 59 | 
            +
                :params => {
         | 
| 60 | 
            +
                  "Path" => :string
         | 
| 61 | 
            +
                },
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                :init_keys => ["file"]
         | 
| 64 | 
            +
              },
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              :Label => {
         | 
| 67 | 
            +
                :desc   => "Static String",
         | 
| 68 | 
            +
                :params => {
         | 
| 69 | 
            +
                  "Text" => :string
         | 
| 70 | 
            +
                },
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                :init_keys => ["text"]
         | 
| 73 | 
            +
              },
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              :Matrix => {
         | 
| 76 | 
            +
                :desc => "X/Y grid",
         | 
| 77 | 
            +
                :params => {
         | 
| 78 | 
            +
                  "Rows" => :int,
         | 
| 79 | 
            +
                  "Columns" => :int
         | 
| 80 | 
            +
                },
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                :init_keys => ["rows", "cols"]
         | 
| 83 | 
            +
              },
         | 
| 84 | 
            +
             | 
| 85 | 
            +
              :Radio => {
         | 
| 86 | 
            +
                :desc => "Choice selection control",
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                :params => {
         | 
| 89 | 
            +
                  "Choices" => [:string]
         | 
| 90 | 
            +
                }
         | 
| 91 | 
            +
              },
         | 
| 92 | 
            +
             | 
| 93 | 
            +
              :Rocker => {
         | 
| 94 | 
            +
                :desc => "Toggleable input",
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                :params => {
         | 
| 97 | 
            +
                  "Choices" => [:string]
         | 
| 98 | 
            +
                },
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                :init_keys => ["items"]
         | 
| 101 | 
            +
              },
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              :SList => {
         | 
| 104 | 
            +
                :desc => "Selectable List of Items",
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                :params => {
         | 
| 107 | 
            +
                  "Choices" => [:string]
         | 
| 108 | 
            +
                },
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                :init_keys => ["items"]
         | 
| 111 | 
            +
              },
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              :VSlider => {
         | 
| 114 | 
            +
                :desc => "Vertical Slider"
         | 
| 115 | 
            +
              }
         | 
| 116 | 
            +
            }
         | 
| @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 2 | 
            +
            <!-- Generated with glade 3.20.0 -->
         | 
| 3 | 
            +
            <interface>
         | 
| 4 | 
            +
              <requires lib="gtk+" version="3.20"/>
         | 
| 5 | 
            +
              <object class="GtkWindow" id="window1">
         | 
| 6 | 
            +
                <property name="can_focus">False</property>
         | 
| 7 | 
            +
                <property name="resizable">False</property>
         | 
| 8 | 
            +
                <property name="modal">True</property>
         | 
| 9 | 
            +
                <child>
         | 
| 10 | 
            +
                  <object class="GtkBox">
         | 
| 11 | 
            +
                    <property name="visible">True</property>
         | 
| 12 | 
            +
                    <property name="can_focus">False</property>
         | 
| 13 | 
            +
                    <property name="margin_left">5</property>
         | 
| 14 | 
            +
                    <property name="margin_right">6</property>
         | 
| 15 | 
            +
                    <property name="margin_top">5</property>
         | 
| 16 | 
            +
                    <property name="margin_bottom">5</property>
         | 
| 17 | 
            +
                    <property name="orientation">vertical</property>
         | 
| 18 | 
            +
                    <child>
         | 
| 19 | 
            +
                      <object class="GtkLabel" id="component_edit_title">
         | 
| 20 | 
            +
                        <property name="visible">True</property>
         | 
| 21 | 
            +
                        <property name="can_focus">False</property>
         | 
| 22 | 
            +
                        <property name="margin_left">5</property>
         | 
| 23 | 
            +
                        <property name="margin_right">5</property>
         | 
| 24 | 
            +
                        <property name="margin_top">5</property>
         | 
| 25 | 
            +
                        <property name="margin_bottom">5</property>
         | 
| 26 | 
            +
                      </object>
         | 
| 27 | 
            +
                      <packing>
         | 
| 28 | 
            +
                        <property name="expand">False</property>
         | 
| 29 | 
            +
                        <property name="fill">True</property>
         | 
| 30 | 
            +
                        <property name="position">0</property>
         | 
| 31 | 
            +
                      </packing>
         | 
| 32 | 
            +
                    </child>
         | 
| 33 | 
            +
                    <child>
         | 
| 34 | 
            +
                      <object class="GtkBox" id="component_edit_layout">
         | 
| 35 | 
            +
                        <property name="visible">True</property>
         | 
| 36 | 
            +
                        <property name="can_focus">False</property>
         | 
| 37 | 
            +
                        <property name="orientation">vertical</property>
         | 
| 38 | 
            +
                        <child>
         | 
| 39 | 
            +
                          <placeholder/>
         | 
| 40 | 
            +
                        </child>
         | 
| 41 | 
            +
                      </object>
         | 
| 42 | 
            +
                      <packing>
         | 
| 43 | 
            +
                        <property name="expand">False</property>
         | 
| 44 | 
            +
                        <property name="fill">True</property>
         | 
| 45 | 
            +
                        <property name="position">1</property>
         | 
| 46 | 
            +
                      </packing>
         | 
| 47 | 
            +
                    </child>
         | 
| 48 | 
            +
                    <child>
         | 
| 49 | 
            +
                      <object class="GtkBox">
         | 
| 50 | 
            +
                        <property name="visible">True</property>
         | 
| 51 | 
            +
                        <property name="can_focus">False</property>
         | 
| 52 | 
            +
                        <child>
         | 
| 53 | 
            +
                          <object class="GtkButton" id="submit_button">
         | 
| 54 | 
            +
                            <property name="label" translatable="yes">Submit</property>
         | 
| 55 | 
            +
                            <property name="visible">True</property>
         | 
| 56 | 
            +
                            <property name="can_focus">True</property>
         | 
| 57 | 
            +
                            <property name="receives_default">True</property>
         | 
| 58 | 
            +
                            <property name="margin_left">5</property>
         | 
| 59 | 
            +
                            <property name="margin_right">5</property>
         | 
| 60 | 
            +
                            <property name="margin_top">5</property>
         | 
| 61 | 
            +
                            <property name="margin_bottom">5</property>
         | 
| 62 | 
            +
                          </object>
         | 
| 63 | 
            +
                          <packing>
         | 
| 64 | 
            +
                            <property name="expand">True</property>
         | 
| 65 | 
            +
                            <property name="fill">True</property>
         | 
| 66 | 
            +
                            <property name="position">0</property>
         | 
| 67 | 
            +
                          </packing>
         | 
| 68 | 
            +
                        </child>
         | 
| 69 | 
            +
                        <child>
         | 
| 70 | 
            +
                          <object class="GtkButton" id="cancel_button">
         | 
| 71 | 
            +
                            <property name="label" translatable="yes">Cancel</property>
         | 
| 72 | 
            +
                            <property name="visible">True</property>
         | 
| 73 | 
            +
                            <property name="can_focus">True</property>
         | 
| 74 | 
            +
                            <property name="receives_default">True</property>
         | 
| 75 | 
            +
                            <property name="margin_left">5</property>
         | 
| 76 | 
            +
                            <property name="margin_right">5</property>
         | 
| 77 | 
            +
                            <property name="margin_top">5</property>
         | 
| 78 | 
            +
                            <property name="margin_bottom">5</property>
         | 
| 79 | 
            +
                          </object>
         | 
| 80 | 
            +
                          <packing>
         | 
| 81 | 
            +
                            <property name="expand">True</property>
         | 
| 82 | 
            +
                            <property name="fill">True</property>
         | 
| 83 | 
            +
                            <property name="position">1</property>
         | 
| 84 | 
            +
                          </packing>
         | 
| 85 | 
            +
                        </child>
         | 
| 86 | 
            +
                      </object>
         | 
| 87 | 
            +
                      <packing>
         | 
| 88 | 
            +
                        <property name="expand">False</property>
         | 
| 89 | 
            +
                        <property name="fill">True</property>
         | 
| 90 | 
            +
                        <property name="position">2</property>
         | 
| 91 | 
            +
                      </packing>
         | 
| 92 | 
            +
                    </child>
         | 
| 93 | 
            +
                  </object>
         | 
| 94 | 
            +
                </child>
         | 
| 95 | 
            +
              </object>
         | 
| 96 | 
            +
            </interface>
         | 
| @@ -0,0 +1,184 @@ | |
| 1 | 
            +
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 2 | 
            +
            <!-- Generated with glade 3.20.0 -->
         | 
| 3 | 
            +
            <interface>
         | 
| 4 | 
            +
              <requires lib="gtk+" version="3.0"/>
         | 
| 5 | 
            +
              <object class="GtkWindow" id="window1">
         | 
| 6 | 
            +
                <property name="can_focus">False</property>
         | 
| 7 | 
            +
                <property name="window_position">center</property>
         | 
| 8 | 
            +
                <child>
         | 
| 9 | 
            +
                  <object class="GtkBox">
         | 
| 10 | 
            +
                    <property name="visible">True</property>
         | 
| 11 | 
            +
                    <property name="can_focus">False</property>
         | 
| 12 | 
            +
                    <property name="orientation">vertical</property>
         | 
| 13 | 
            +
                    <child>
         | 
| 14 | 
            +
                      <object class="GtkMenuBar" id="main_menu">
         | 
| 15 | 
            +
                        <property name="visible">True</property>
         | 
| 16 | 
            +
                        <property name="can_focus">False</property>
         | 
| 17 | 
            +
                        <child>
         | 
| 18 | 
            +
                          <object class="GtkMenuItem" id="file_menu">
         | 
| 19 | 
            +
                            <property name="visible">True</property>
         | 
| 20 | 
            +
                            <property name="can_focus">False</property>
         | 
| 21 | 
            +
                            <property name="label" translatable="yes">_File</property>
         | 
| 22 | 
            +
                            <property name="use_underline">True</property>
         | 
| 23 | 
            +
                            <child type="submenu">
         | 
| 24 | 
            +
                              <object class="GtkMenu">
         | 
| 25 | 
            +
                                <property name="visible">True</property>
         | 
| 26 | 
            +
                                <property name="can_focus">False</property>
         | 
| 27 | 
            +
                                <child>
         | 
| 28 | 
            +
                                  <object class="GtkImageMenuItem" id="file_menu_new">
         | 
| 29 | 
            +
                                    <property name="label">gtk-new</property>
         | 
| 30 | 
            +
                                    <property name="visible">True</property>
         | 
| 31 | 
            +
                                    <property name="can_focus">False</property>
         | 
| 32 | 
            +
                                    <property name="use_underline">True</property>
         | 
| 33 | 
            +
                                    <property name="use_stock">True</property>
         | 
| 34 | 
            +
                                  </object>
         | 
| 35 | 
            +
                                </child>
         | 
| 36 | 
            +
                                <child>
         | 
| 37 | 
            +
                                  <object class="GtkImageMenuItem" id="file_menu_open">
         | 
| 38 | 
            +
                                    <property name="label">gtk-open</property>
         | 
| 39 | 
            +
                                    <property name="visible">True</property>
         | 
| 40 | 
            +
                                    <property name="can_focus">False</property>
         | 
| 41 | 
            +
                                    <property name="use_underline">True</property>
         | 
| 42 | 
            +
                                    <property name="use_stock">True</property>
         | 
| 43 | 
            +
                                  </object>
         | 
| 44 | 
            +
                                </child>
         | 
| 45 | 
            +
                                <child>
         | 
| 46 | 
            +
                                  <object class="GtkImageMenuItem" id="file_menu_save">
         | 
| 47 | 
            +
                                    <property name="label">gtk-save</property>
         | 
| 48 | 
            +
                                    <property name="visible">True</property>
         | 
| 49 | 
            +
                                    <property name="can_focus">False</property>
         | 
| 50 | 
            +
                                    <property name="use_underline">True</property>
         | 
| 51 | 
            +
                                    <property name="use_stock">True</property>
         | 
| 52 | 
            +
                                  </object>
         | 
| 53 | 
            +
                                </child>
         | 
| 54 | 
            +
                                <child>
         | 
| 55 | 
            +
                                  <object class="GtkImageMenuItem" id="file_menu_save_as">
         | 
| 56 | 
            +
                                    <property name="label">gtk-save-as</property>
         | 
| 57 | 
            +
                                    <property name="visible">True</property>
         | 
| 58 | 
            +
                                    <property name="can_focus">False</property>
         | 
| 59 | 
            +
                                    <property name="use_underline">True</property>
         | 
| 60 | 
            +
                                    <property name="use_stock">True</property>
         | 
| 61 | 
            +
                                  </object>
         | 
| 62 | 
            +
                                </child>
         | 
| 63 | 
            +
                                <child>
         | 
| 64 | 
            +
                                  <object class="GtkSeparatorMenuItem">
         | 
| 65 | 
            +
                                    <property name="visible">True</property>
         | 
| 66 | 
            +
                                    <property name="can_focus">False</property>
         | 
| 67 | 
            +
                                  </object>
         | 
| 68 | 
            +
                                </child>
         | 
| 69 | 
            +
                                <child>
         | 
| 70 | 
            +
                                  <object class="GtkImageMenuItem" id="file_menu_quit">
         | 
| 71 | 
            +
                                    <property name="label">gtk-quit</property>
         | 
| 72 | 
            +
                                    <property name="visible">True</property>
         | 
| 73 | 
            +
                                    <property name="can_focus">False</property>
         | 
| 74 | 
            +
                                    <property name="use_underline">True</property>
         | 
| 75 | 
            +
                                    <property name="use_stock">True</property>
         | 
| 76 | 
            +
                                  </object>
         | 
| 77 | 
            +
                                </child>
         | 
| 78 | 
            +
                              </object>
         | 
| 79 | 
            +
                            </child>
         | 
| 80 | 
            +
                          </object>
         | 
| 81 | 
            +
                        </child>
         | 
| 82 | 
            +
                        <child>
         | 
| 83 | 
            +
                          <object class="GtkMenuItem">
         | 
| 84 | 
            +
                            <property name="visible">True</property>
         | 
| 85 | 
            +
                            <property name="can_focus">False</property>
         | 
| 86 | 
            +
                            <property name="label" translatable="yes">_Help</property>
         | 
| 87 | 
            +
                            <property name="use_underline">True</property>
         | 
| 88 | 
            +
                            <child type="submenu">
         | 
| 89 | 
            +
                              <object class="GtkMenu">
         | 
| 90 | 
            +
                                <property name="visible">True</property>
         | 
| 91 | 
            +
                                <property name="can_focus">False</property>
         | 
| 92 | 
            +
                                <child>
         | 
| 93 | 
            +
                                  <object class="GtkImageMenuItem">
         | 
| 94 | 
            +
                                    <property name="label">gtk-about</property>
         | 
| 95 | 
            +
                                    <property name="visible">True</property>
         | 
| 96 | 
            +
                                    <property name="can_focus">False</property>
         | 
| 97 | 
            +
                                    <property name="use_underline">True</property>
         | 
| 98 | 
            +
                                    <property name="use_stock">True</property>
         | 
| 99 | 
            +
                                  </object>
         | 
| 100 | 
            +
                                </child>
         | 
| 101 | 
            +
                              </object>
         | 
| 102 | 
            +
                            </child>
         | 
| 103 | 
            +
                          </object>
         | 
| 104 | 
            +
                        </child>
         | 
| 105 | 
            +
                      </object>
         | 
| 106 | 
            +
                      <packing>
         | 
| 107 | 
            +
                        <property name="expand">False</property>
         | 
| 108 | 
            +
                        <property name="fill">True</property>
         | 
| 109 | 
            +
                        <property name="position">0</property>
         | 
| 110 | 
            +
                      </packing>
         | 
| 111 | 
            +
                    </child>
         | 
| 112 | 
            +
                    <child>
         | 
| 113 | 
            +
                      <object class="GtkPaned">
         | 
| 114 | 
            +
                        <property name="visible">True</property>
         | 
| 115 | 
            +
                        <property name="can_focus">True</property>
         | 
| 116 | 
            +
                        <child>
         | 
| 117 | 
            +
                          <object class="GtkBox">
         | 
| 118 | 
            +
                            <property name="visible">True</property>
         | 
| 119 | 
            +
                            <property name="can_focus">False</property>
         | 
| 120 | 
            +
                            <property name="orientation">vertical</property>
         | 
| 121 | 
            +
                            <child>
         | 
| 122 | 
            +
                              <object class="GtkScrolledWindow" id="component_window">
         | 
| 123 | 
            +
                                <property name="width_request">300</property>
         | 
| 124 | 
            +
                                <property name="height_request">500</property>
         | 
| 125 | 
            +
                                <property name="visible">True</property>
         | 
| 126 | 
            +
                                <property name="can_focus">True</property>
         | 
| 127 | 
            +
                                <property name="shadow_type">in</property>
         | 
| 128 | 
            +
                                <child>
         | 
| 129 | 
            +
                                  <placeholder/>
         | 
| 130 | 
            +
                                </child>
         | 
| 131 | 
            +
                              </object>
         | 
| 132 | 
            +
                              <packing>
         | 
| 133 | 
            +
                                <property name="expand">True</property>
         | 
| 134 | 
            +
                                <property name="fill">True</property>
         | 
| 135 | 
            +
                                <property name="position">0</property>
         | 
| 136 | 
            +
                              </packing>
         | 
| 137 | 
            +
                            </child>
         | 
| 138 | 
            +
                            <child>
         | 
| 139 | 
            +
                              <object class="GtkScrolledWindow" id="created_window">
         | 
| 140 | 
            +
                                <property name="can_focus">True</property>
         | 
| 141 | 
            +
                                <property name="shadow_type">in</property>
         | 
| 142 | 
            +
                                <child>
         | 
| 143 | 
            +
                                  <placeholder/>
         | 
| 144 | 
            +
                                </child>
         | 
| 145 | 
            +
                              </object>
         | 
| 146 | 
            +
                              <packing>
         | 
| 147 | 
            +
                                <property name="expand">False</property>
         | 
| 148 | 
            +
                                <property name="fill">False</property>
         | 
| 149 | 
            +
                                <property name="position">1</property>
         | 
| 150 | 
            +
                              </packing>
         | 
| 151 | 
            +
                            </child>
         | 
| 152 | 
            +
                          </object>
         | 
| 153 | 
            +
                          <packing>
         | 
| 154 | 
            +
                            <property name="resize">False</property>
         | 
| 155 | 
            +
                            <property name="shrink">True</property>
         | 
| 156 | 
            +
                          </packing>
         | 
| 157 | 
            +
                        </child>
         | 
| 158 | 
            +
                        <child>
         | 
| 159 | 
            +
                          <object class="GtkEventBox" id="viewer">
         | 
| 160 | 
            +
                            <property name="width_request">500</property>
         | 
| 161 | 
            +
                            <property name="visible">True</property>
         | 
| 162 | 
            +
                            <property name="can_focus">False</property>
         | 
| 163 | 
            +
                            <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK | GDK_TOUCH_MASK | GDK_SMOOTH_SCROLL_MASK</property>
         | 
| 164 | 
            +
                            <property name="visible_window">False</property>
         | 
| 165 | 
            +
                            <child>
         | 
| 166 | 
            +
                              <placeholder/>
         | 
| 167 | 
            +
                            </child>
         | 
| 168 | 
            +
                          </object>
         | 
| 169 | 
            +
                          <packing>
         | 
| 170 | 
            +
                            <property name="resize">True</property>
         | 
| 171 | 
            +
                            <property name="shrink">True</property>
         | 
| 172 | 
            +
                          </packing>
         | 
| 173 | 
            +
                        </child>
         | 
| 174 | 
            +
                      </object>
         | 
| 175 | 
            +
                      <packing>
         | 
| 176 | 
            +
                        <property name="expand">True</property>
         | 
| 177 | 
            +
                        <property name="fill">True</property>
         | 
| 178 | 
            +
                        <property name="position">2</property>
         | 
| 179 | 
            +
                      </packing>
         | 
| 180 | 
            +
                    </child>
         | 
| 181 | 
            +
                  </object>
         | 
| 182 | 
            +
                </child>
         | 
| 183 | 
            +
              </object>
         | 
| 184 | 
            +
            </interface>
         |