reterm 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|