reterm 0.4.2 → 0.5.0
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 +4 -4
- data/designer/src/ComponentParams.rb +89 -42
- data/designer/src/ComponentsList.rb +26 -25
- data/designer/src/CreatedList.rb +9 -0
- data/designer/src/Designer.rb +23 -1
- data/designer/src/ToggleArea.rb +20 -3
- data/designer/src/about.rb +35 -0
- data/designer/src/component_factory.rb +18 -0
- data/designer/src/component_map.rb +7 -0
- data/designer/src/file_chooser.rb +25 -0
- data/designer/src/glade/Designer.glade +1 -19
- data/designer/src/images/{slist.png → scroll_list.png} +0 -0
- data/lib/reterm.rb +10 -1
- data/lib/reterm/color_pair.rb +166 -10
- data/lib/reterm/component.rb +89 -2
- data/lib/reterm/components.rb +16 -1
- data/lib/reterm/components/alphalist.rb +45 -0
- data/lib/reterm/components/ascii_text.rb +14 -1
- data/lib/reterm/components/asciimator.rb +1 -0
- data/lib/reterm/components/button.rb +35 -5
- data/lib/reterm/components/button_box.rb +108 -0
- data/lib/reterm/components/close_button.rb +22 -0
- data/lib/reterm/components/cmd_output.rb +69 -0
- data/lib/reterm/components/dial.rb +11 -2
- data/lib/reterm/components/dialog.rb +41 -1
- data/lib/reterm/components/drop_down_menu.rb +140 -0
- data/lib/reterm/components/entry.rb +42 -14
- data/lib/reterm/components/histogram.rb +55 -0
- data/lib/reterm/components/hslider.rb +9 -0
- data/lib/reterm/components/image.rb +9 -0
- data/lib/reterm/components/isometric.rb +38 -0
- data/lib/reterm/components/label.rb +20 -3
- data/lib/reterm/components/matrix.rb +9 -0
- data/lib/reterm/components/multi_line_entry.rb +54 -0
- data/lib/reterm/components/password_entry.rb +15 -0
- data/lib/reterm/components/radio.rb +10 -0
- data/lib/reterm/components/revealing_label.rb +126 -0
- data/lib/reterm/components/rocker.rb +21 -11
- data/lib/reterm/components/scroll_list.rb +96 -0
- data/lib/reterm/components/scrolling_area.rb +50 -0
- data/lib/reterm/components/select_list.rb +67 -0
- data/lib/reterm/components/splash.rb +85 -0
- data/lib/reterm/components/template.rb +12 -1
- data/lib/reterm/components/treeview.rb +1 -0
- data/lib/reterm/components/vslider.rb +11 -2
- data/lib/reterm/components/youtube.rb +20 -0
- data/lib/reterm/config.rb +22 -0
- data/lib/reterm/init.rb +131 -6
- data/lib/reterm/layout.rb +147 -11
- data/lib/reterm/layouts.rb +1 -0
- data/lib/reterm/layouts/grid.rb +69 -0
- data/lib/reterm/layouts/horizontal.rb +25 -4
- data/lib/reterm/layouts/vertical.rb +26 -5
- data/lib/reterm/loader.rb +2 -2
- data/lib/reterm/mixins/button_helpers.rb +7 -0
- data/lib/reterm/mixins/cdk_component.rb +66 -2
- data/lib/reterm/mixins/common_controls.rb +15 -0
- data/lib/reterm/mixins/common_keys.rb +20 -0
- data/lib/reterm/mixins/component_input.rb +62 -14
- data/lib/reterm/mixins/event_dispatcher.rb +2 -0
- data/lib/reterm/mixins/item_helpers.rb +8 -0
- data/lib/reterm/mixins/key_bindings.rb +23 -0
- data/lib/reterm/mixins/log_helpers.rb +13 -0
- data/lib/reterm/mixins/mouse_input.rb +58 -0
- data/lib/reterm/mixins/nav_controls.rb +33 -0
- data/lib/reterm/mixins/nav_input.rb +161 -69
- data/lib/reterm/terminal.rb +6 -2
- data/lib/reterm/util.rb +121 -0
- data/lib/reterm/version.rb +1 -1
- data/lib/reterm/window.rb +295 -29
- metadata +33 -17
- 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/lib/reterm/components/slist.rb +0 -32
- data/lib/reterm/menu.rb +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a718fe1f9ad7dbe389aaba371d9456c88957cbb
|
4
|
+
data.tar.gz: 1deb434bf5d7296cbcf7c2dd12a277490241ddec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: caeaaef04e95b928996a7e11fb49478a3b6a4365a3ede393fe6f434f24ca562e9a477a4cdfedb6a15ed44d65fc5b6bd8df754e6cbd92dc245dc8fa2b920fa1eb
|
7
|
+
data.tar.gz: d98622a223979d12bdc27c50df65ecfdd728d455fa2d2524022eb1d3cf734f619c889e9252fcb9d5dc6d30916b062b8c25a000ffc3eace21f1ee0d26040b9d80
|
@@ -18,66 +18,106 @@ class ComponentParams
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def before_show
|
21
|
+
set_title
|
22
|
+
add_component_params
|
23
|
+
add_general_params
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def set_title
|
21
29
|
@builder[:component_edit_title].text = "Edit \"#{@component}\" params"
|
30
|
+
end
|
22
31
|
|
32
|
+
def add_component_params
|
23
33
|
COMPONENTS[@component][:params].each { |label, type|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
add_row(label, type)
|
45
|
-
}
|
46
|
-
|
47
|
-
add_img.show
|
48
|
-
add_btn.show
|
49
|
-
end
|
34
|
+
add_params(label, type)
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_general_params
|
39
|
+
COMPONENTS[:generic][:params].each { |label, type|
|
40
|
+
add_params(label, type)
|
41
|
+
}
|
42
|
+
|
43
|
+
# TODO if adding to Grid Layout also add x/y params
|
44
|
+
# (required, default to 1)
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_params(label, type)
|
48
|
+
layout = Gtk::HBox.new
|
49
|
+
|
50
|
+
glabel = Gtk::Label.new label
|
51
|
+
glabel.margin = 5
|
52
|
+
layout.add glabel
|
53
|
+
glabel.show
|
50
54
|
|
55
|
+
if type.is_a?(Array)
|
56
|
+
placeholder = Gtk::Image.new(:file => "#{IMG_DIR}/blank_sm.png")
|
57
|
+
layout.pack_end placeholder
|
58
|
+
placeholder.margin = 14
|
59
|
+
placeholder.show
|
60
|
+
|
61
|
+
add_img = Gtk::Image.new(:file => "#{IMG_DIR}/add.png")
|
62
|
+
add_btn = Gtk::Button.new
|
63
|
+
add_btn.margin = 5
|
64
|
+
add_btn.add(add_img)
|
65
|
+
|
66
|
+
layout.pack_end add_btn
|
67
|
+
add_btn.signal_connect("clicked") {
|
68
|
+
add_row(type)
|
69
|
+
}
|
70
|
+
|
71
|
+
add_img.show
|
72
|
+
add_btn.show
|
73
|
+
end
|
74
|
+
|
75
|
+
if type == :bool
|
76
|
+
gchk = Gtk::CheckButton.new
|
77
|
+
layout.pack_end gchk
|
78
|
+
gchk.show
|
79
|
+
|
80
|
+
else
|
51
81
|
gedit = Gtk::Entry.new
|
52
82
|
layout.pack_end gedit
|
53
83
|
gedit.show
|
84
|
+
end
|
54
85
|
|
55
86
|
|
56
|
-
|
57
|
-
|
58
|
-
}
|
87
|
+
@builder[:component_edit_layout].add layout
|
88
|
+
layout.show
|
59
89
|
end
|
60
90
|
|
61
|
-
private
|
62
|
-
|
63
91
|
def component_params
|
64
92
|
@builder[:component_edit_layout].children.collect { |c|
|
65
93
|
p = c.children.first # label
|
66
94
|
.text
|
67
95
|
|
68
|
-
|
96
|
+
|
97
|
+
t = (COMPONENTS.key?(@component) &&
|
98
|
+
COMPONENTS[@component].key?(:params) &&
|
99
|
+
COMPONENTS[@component][:params].key?(p)) ?
|
100
|
+
COMPONENTS[@component][:params][p] :
|
101
|
+
COMPONENTS[:generic][:params][p]
|
102
|
+
|
69
103
|
t = t.first if t.is_a?(Array)
|
70
104
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
else
|
75
|
-
txt
|
105
|
+
if t == :bool
|
106
|
+
!!c.children[1].active?
|
107
|
+
|
108
|
+
else
|
109
|
+
txt = c.children[1].text
|
110
|
+
|
111
|
+
if t == :int
|
112
|
+
txt.to_i
|
113
|
+
else # if t == :string
|
114
|
+
txt
|
115
|
+
end
|
76
116
|
end
|
77
117
|
}
|
78
118
|
end
|
79
119
|
|
80
|
-
def add_row(
|
120
|
+
def add_row(type)
|
81
121
|
layout = Gtk::HBox.new
|
82
122
|
glabel = Gtk::Label.new
|
83
123
|
glabel.margin = 5
|
@@ -101,14 +141,21 @@ class ComponentParams
|
|
101
141
|
add_btn.add(add_img)
|
102
142
|
layout.pack_end add_btn
|
103
143
|
add_btn.signal_connect("clicked") {
|
104
|
-
add_row(
|
144
|
+
add_row(type)
|
105
145
|
}
|
106
146
|
add_img.show
|
107
147
|
add_btn.show
|
108
148
|
|
109
|
-
|
110
|
-
|
111
|
-
|
149
|
+
if type == :bool
|
150
|
+
gchk = Gtk::CheckButton.new
|
151
|
+
layout.pack_end gchk
|
152
|
+
gchk.show
|
153
|
+
|
154
|
+
else
|
155
|
+
gedit = Gtk::Entry.new
|
156
|
+
layout.pack_end gedit
|
157
|
+
gedit.show
|
158
|
+
end
|
112
159
|
|
113
160
|
@builder[:component_edit_layout].add layout
|
114
161
|
layout.show
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# List of supported components
|
2
2
|
class ComponentsList < VR::ListView
|
3
|
-
attr_accessor :designer
|
3
|
+
attr_accessor :designer, :selected
|
4
4
|
|
5
5
|
def initialize(designer)
|
6
6
|
@designer = designer
|
@@ -22,11 +22,24 @@ class ComponentsList < VR::ListView
|
|
22
22
|
first = true
|
23
23
|
selection.signal_connect("changed") {
|
24
24
|
unless selection.selected.nil?
|
25
|
-
|
25
|
+
_changed(selected_component) unless first
|
26
26
|
selection.unselect_all
|
27
27
|
first = false
|
28
28
|
end
|
29
29
|
}
|
30
|
+
|
31
|
+
enable_model_drag_source(Gdk::ModifierType::BUTTON1_MASK,
|
32
|
+
[["reterm", Gtk::TargetFlags::SAME_APP, 0]],
|
33
|
+
Gdk::DragAction::DEFAULT | Gdk::DragAction::COPY)
|
34
|
+
|
35
|
+
lv = self
|
36
|
+
signal_connect("drag_data_get") do |widget, context, selection_data, info, time|
|
37
|
+
selection_data.set(Gdk::Selection::TYPE_STRING, lv.selected)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def selected_component
|
42
|
+
selection.selected[1]
|
30
43
|
end
|
31
44
|
|
32
45
|
def add_component(c)
|
@@ -37,40 +50,28 @@ class ComponentsList < VR::ListView
|
|
37
50
|
end
|
38
51
|
|
39
52
|
def self__row_activated(*args)
|
40
|
-
|
53
|
+
_changed(selected_component)
|
54
|
+
end
|
55
|
+
|
56
|
+
def change_to(target)
|
57
|
+
_changed(target)
|
41
58
|
end
|
42
59
|
|
43
60
|
private
|
44
61
|
|
45
|
-
def
|
46
|
-
|
47
|
-
dialog = Gtk::MessageDialog.new(:parent => designer.window,
|
48
|
-
:flags => :destroy_with_parent,
|
49
|
-
:type => :info,
|
50
|
-
:buttons => :close,
|
51
|
-
:message => "Must select area to add component")
|
52
|
-
|
53
|
-
dialog.signal_connect("response") { |*args|
|
54
|
-
dialog.destroy
|
55
|
-
}
|
56
|
-
dialog.show
|
57
|
-
return
|
58
|
-
end
|
62
|
+
def _changed(selected)
|
63
|
+
@selected = selected
|
59
64
|
|
65
|
+
return unless designer.has_toggled_area?
|
60
66
|
|
61
|
-
|
62
|
-
|
63
|
-
if e.key?(:params)
|
64
|
-
w = ComponentParams.new(c.intern, designer)
|
65
|
-
w.show_glade(designer)
|
66
|
-
else
|
67
|
-
designer.create_component(c.intern, [])
|
68
|
-
end
|
67
|
+
w = ComponentParams.new(@selected.intern, designer)
|
68
|
+
w.show_glade(designer)
|
69
69
|
end
|
70
70
|
|
71
71
|
DEFAULT_IMG = GdkPixbuf::Pixbuf.new(:file => "#{IMG_DIR}/blank.png")
|
72
72
|
|
73
73
|
def desc_for(c)
|
74
|
+
return "" unless COMPONENTS.key?(c)
|
74
75
|
COMPONENTS[c][:desc]
|
75
76
|
end
|
76
77
|
|
data/designer/src/CreatedList.rb
CHANGED
@@ -88,6 +88,10 @@ class CreatedList < VR::TreeView
|
|
88
88
|
component_for(row_for(widget))
|
89
89
|
end
|
90
90
|
|
91
|
+
def reset!
|
92
|
+
unregister(rows_by_parent[nil].first)
|
93
|
+
end
|
94
|
+
|
91
95
|
def unregister(row)
|
92
96
|
0.upto(row.n_children-1) { |child|
|
93
97
|
unregister(row.nth_child(child))
|
@@ -95,9 +99,12 @@ class CreatedList < VR::TreeView
|
|
95
99
|
|
96
100
|
parent = parent_for(row)
|
97
101
|
widget = widget_for(row)
|
102
|
+
component = component_for(row)
|
98
103
|
|
99
104
|
rows_by_parent[parent].delete(row)
|
105
|
+
rows_by_component.delete(component)
|
100
106
|
rows_by_widget.delete(widget)
|
107
|
+
params_by_widget.delete(widget)
|
101
108
|
model.remove(row)
|
102
109
|
|
103
110
|
designer.remove_component(widget)
|
@@ -114,6 +121,8 @@ class CreatedList < VR::TreeView
|
|
114
121
|
win = {'window' => {}}
|
115
122
|
|
116
123
|
top = rows_by_parent[nil].first # there should be only one element here
|
124
|
+
return win if top.nil?
|
125
|
+
|
117
126
|
tc = component_for(top)
|
118
127
|
wg = widget_for(top)
|
119
128
|
|
data/designer/src/Designer.rb
CHANGED
@@ -28,6 +28,7 @@ class Designer
|
|
28
28
|
@builder["created_window"].add(@created_list, :expand => true)
|
29
29
|
@builder["viewer"].add(@component.btn)
|
30
30
|
@component.show
|
31
|
+
wire_menus
|
31
32
|
end
|
32
33
|
|
33
34
|
def create_component(component, params)
|
@@ -106,9 +107,30 @@ class Designer
|
|
106
107
|
end
|
107
108
|
|
108
109
|
def set_components
|
110
|
+
RETerm::Config.load_plugins
|
111
|
+
|
109
112
|
(RETerm::Layouts.all.sort +
|
110
113
|
RETerm::Components.all.sort).each { |c|
|
111
|
-
@component_list.add_component c
|
114
|
+
@component_list.add_component c
|
112
115
|
}
|
113
116
|
end
|
117
|
+
|
118
|
+
def wire_menus
|
119
|
+
@builder["file_menu_new"].signal_connect("activate") do
|
120
|
+
created_list.reset!
|
121
|
+
end
|
122
|
+
|
123
|
+
@builder["file_menu_save"].signal_connect("activate") do
|
124
|
+
file = FileChooser.new(window).show
|
125
|
+
File.write(file, created_list.schema)
|
126
|
+
end
|
127
|
+
|
128
|
+
@builder["file_menu_quit"].signal_connect("activate") do
|
129
|
+
window.destroy
|
130
|
+
end
|
131
|
+
|
132
|
+
@builder["help_menu_about"].signal_connect("activate") do
|
133
|
+
About.new
|
134
|
+
end
|
135
|
+
end
|
114
136
|
end
|
data/designer/src/ToggleArea.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
# Mechanism which user specifies area to add component
|
2
2
|
class ToggleArea
|
3
|
-
attr_accessor :toggled
|
3
|
+
attr_accessor :toggled, :designer
|
4
4
|
|
5
5
|
def toggle_on
|
6
6
|
@toggled = true
|
7
|
-
btn.remove(
|
7
|
+
btn.remove(btn.children[0])
|
8
8
|
btn.add(rm)
|
9
9
|
@designer.toggle_area = self
|
10
10
|
end
|
11
11
|
|
12
12
|
def toggle_off
|
13
13
|
@toggled = false
|
14
|
-
btn.remove(
|
14
|
+
btn.remove(btn.children[0])
|
15
15
|
btn.add(add)
|
16
16
|
show
|
17
17
|
@designer.clear_toggle_area
|
@@ -46,6 +46,23 @@ class ToggleArea
|
|
46
46
|
css_provider.load(data: "button:hover {background-image: image(#FFFF00);}")
|
47
47
|
b.style_context.add_provider(css_provider, Gtk::StyleProvider::PRIORITY_USER)
|
48
48
|
|
49
|
+
b.drag_dest_set(Gtk::DestDefaults::ALL | Gtk::DestDefaults::MOTION | Gtk::DestDefaults::HIGHLIGHT,
|
50
|
+
[["reterm", :same_app, 0]],
|
51
|
+
[Gdk::DragAction::COPY.to_i,
|
52
|
+
Gdk::DragAction::MOVE.to_i])
|
53
|
+
|
54
|
+
ta = self
|
55
|
+
dragged = nil
|
56
|
+
|
57
|
+
b.signal_connect("drag-data-received") do |widget, context, x, y, selection_data, info, time|
|
58
|
+
dragged = selection_data.text
|
59
|
+
end
|
60
|
+
|
61
|
+
b.signal_connect("drag-drop") do |widget, context, x, y, time|
|
62
|
+
ta.designer.toggle_area = self
|
63
|
+
ta.designer.component_list.change_to(dragged)
|
64
|
+
end
|
65
|
+
|
49
66
|
b
|
50
67
|
end
|
51
68
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'reterm/version'
|
2
|
+
|
3
|
+
class About
|
4
|
+
def initialize
|
5
|
+
Gtk::AboutDialog.set_email_hook {|about, link|
|
6
|
+
p "mo@morsi.org"
|
7
|
+
p link
|
8
|
+
}
|
9
|
+
Gtk::AboutDialog.set_url_hook {|about, link|
|
10
|
+
p "http://github.com/movitto/reterm"
|
11
|
+
p link
|
12
|
+
}
|
13
|
+
|
14
|
+
a = Gtk::AboutDialog.new
|
15
|
+
#a.artists = ["Artist 1 <no1@foo.bar.com>"]
|
16
|
+
a.authors = ["Mo Morsi <mo@morsi.org>"]
|
17
|
+
a.comments = "RETerm Terminal UI Designer"
|
18
|
+
a.copyright = "Copyright (C) 2017 Mo Morsi"
|
19
|
+
#a.documenters = ["Documenter 1 <no1@foo.bar.com>"]
|
20
|
+
a.license = "MIT License"
|
21
|
+
|
22
|
+
icon_theme = Gtk::IconTheme.default
|
23
|
+
a.logo = icon_theme.load_icon(icon_theme.icons.first, 48, 0)
|
24
|
+
|
25
|
+
a.program_name = "RETerm Designer"
|
26
|
+
#a.translator_credits = "Translator 1\nTranslator 2\n"
|
27
|
+
a.version = RETerm::VERSION
|
28
|
+
a.website = "http://github.com/movitto/reterm"
|
29
|
+
a.website_label = "RETerm Project Website"
|
30
|
+
|
31
|
+
a.run
|
32
|
+
a.destroy
|
33
|
+
end
|
34
|
+
end # class About
|
35
|
+
|
@@ -1,4 +1,13 @@
|
|
1
1
|
def build_component(designer, component, params)
|
2
|
+
# TODO all graphical components created here
|
3
|
+
# should be resizable by dragging widget border
|
4
|
+
# (unless fill or expand property is true).
|
5
|
+
# Widgets created in Grid layouts should be
|
6
|
+
# moveable by dragging component.
|
7
|
+
#
|
8
|
+
# Resizing or dragging component should update
|
9
|
+
# backend component / effect final output params
|
10
|
+
|
2
11
|
if component == :Horizontal
|
3
12
|
areas = []
|
4
13
|
c = Gtk::HBox.new
|
@@ -23,7 +32,16 @@ def build_component(designer, component, params)
|
|
23
32
|
|
24
33
|
return [c, areas]
|
25
34
|
|
35
|
+
# elsif component == :Grid
|
36
|
+
# TODO need to create a new component based
|
37
|
+
# on Gtk Grid Layout and use here in lieu
|
38
|
+
# of ToggleArea.
|
39
|
+
|
26
40
|
else
|
41
|
+
# TODO visual properties based on component params
|
42
|
+
# eg actually render component of width/height at
|
43
|
+
# x/y coordinate w/ component-specific params,
|
44
|
+
# such as text for labels, options for radios, etc
|
27
45
|
return designer.component_list.image_for(component)
|
28
46
|
|
29
47
|
end
|