Germinal 1.1.7
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/COPYING +674 -0
- data/README.md +166 -0
- data/bin/Germinal +167 -0
- data/data/germinal.css +54 -0
- data/data/germinal.gresource.xml +7 -0
- data/data/window.ui +58 -0
- data/lib/color_selector.rb +82 -0
- data/lib/css_editor.rb +159 -0
- data/lib/font_selector.rb +61 -0
- data/lib/notebook.rb +90 -0
- data/lib/resize_message.rb +32 -0
- data/lib/terminal.rb +164 -0
- data/lib/terminal_chooser.rb +214 -0
- data/lib/terminal_overview.rb +60 -0
- data/lib/window.rb +273 -0
- metadata +121 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
# Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
|
2
|
+
# This file is part of Germinal.
|
3
|
+
#
|
4
|
+
# Germinal is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# any later version.
|
8
|
+
#
|
9
|
+
# Germinal is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with Germinal. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
class GerminalFontSelector < Gtk::Box
|
17
|
+
attr_reader :font
|
18
|
+
def initialize(window)
|
19
|
+
@window = window
|
20
|
+
@font = @window.notebook.current.font
|
21
|
+
super(:horizontal, 0)
|
22
|
+
|
23
|
+
reset_button = Gtk::Button.new(:label => "Reset")
|
24
|
+
reset_button.signal_connect "clicked" do
|
25
|
+
font_desc = Pango::FontDescription.new(@font)
|
26
|
+
@window.notebook.current.set_font(font_desc)
|
27
|
+
end
|
28
|
+
pack_start(reset_button, :expand => false, :fill => false, :padding => 0)
|
29
|
+
|
30
|
+
font_button = Gtk::FontButton.new
|
31
|
+
font_button.set_font(@font)
|
32
|
+
font_button.set_show_style(true)
|
33
|
+
font_button.set_show_size(true)
|
34
|
+
font_button.set_use_font(true)
|
35
|
+
font_button.set_use_size(false)
|
36
|
+
font_button.signal_connect "font-set" do
|
37
|
+
font_desc = Pango::FontDescription.new(font_button.font_name)
|
38
|
+
@window.notebook.current.set_font(font_desc)
|
39
|
+
end
|
40
|
+
pack_start(font_button, :expand => false, :fill => false, :padding => 0)
|
41
|
+
|
42
|
+
save_button = Gtk::Button.new(:label => "Save")
|
43
|
+
save_button.signal_connect "clicked" do
|
44
|
+
new_props={}
|
45
|
+
font = @window.notebook.current.font
|
46
|
+
new_props["-GerminalTerminal-font"] = font.to_s
|
47
|
+
toplevel.application.update_css(new_props)
|
48
|
+
toplevel.notebook.each do |tab|
|
49
|
+
if tab.class == GerminalTerminal
|
50
|
+
tab.set_font(font)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
toplevel.exit_overlay_mode
|
54
|
+
end
|
55
|
+
pack_start(save_button, :expand => false, :fill => false, :padding => 0)
|
56
|
+
set_name("font_selector")
|
57
|
+
show_all
|
58
|
+
set_halign(:center)
|
59
|
+
set_valign(:end)
|
60
|
+
end
|
61
|
+
end
|
data/lib/notebook.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
# Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
|
2
|
+
# This file is part of Germinal.
|
3
|
+
#
|
4
|
+
# Germinal is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# any later version.
|
8
|
+
#
|
9
|
+
# Germinal is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with Germinal. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
class GerminalNotebook < Gtk::Notebook
|
17
|
+
attr_reader :visible
|
18
|
+
attr_accessor :gen_preview
|
19
|
+
def initialize
|
20
|
+
super()
|
21
|
+
@gen_preview = true
|
22
|
+
signal_connect "hide" do |widget|
|
23
|
+
@visible = false
|
24
|
+
end
|
25
|
+
signal_connect "show" do |widget|
|
26
|
+
@visible = true
|
27
|
+
end
|
28
|
+
|
29
|
+
signal_connect "switch-page" do |widget, next_page, next_page_num|
|
30
|
+
if next_page.tab_label
|
31
|
+
toplevel.current_label.text = next_page.tab_label
|
32
|
+
else
|
33
|
+
next_label = get_tab_label(next_page)
|
34
|
+
toplevel.current_label.text = next_label.text
|
35
|
+
end
|
36
|
+
toplevel.current_tab.text = "#{next_page_num + 1}/#{n_pages}"
|
37
|
+
|
38
|
+
if page >= 0 && @gen_preview
|
39
|
+
current.queue_draw
|
40
|
+
_x,_y,w,h = current.allocation.to_a
|
41
|
+
pix = current.window.to_pixbuf(0, 0, w, h)
|
42
|
+
current.preview = pix if pix
|
43
|
+
elsif !@gen_preview
|
44
|
+
@gen_preview = true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
signal_connect "page-reordered" do |widget, child, new_page_num|
|
49
|
+
toplevel.current_tab.text = "#{page + 1}/#{n_pages}"
|
50
|
+
end
|
51
|
+
|
52
|
+
signal_connect "page-removed" do
|
53
|
+
toplevel.current_tab.text = "#{page + 1}/#{n_pages}" if toplevel.class == GerminalWindow
|
54
|
+
end
|
55
|
+
|
56
|
+
set_show_tabs(false)
|
57
|
+
end
|
58
|
+
|
59
|
+
def remove_all_pages
|
60
|
+
each do |widget|
|
61
|
+
index = page_num(widget)
|
62
|
+
remove_page(index)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def cycle_next_page
|
67
|
+
page < (n_pages - 1) ? next_page : set_page(0)
|
68
|
+
end
|
69
|
+
|
70
|
+
def cycle_prev_page
|
71
|
+
page > 0 ? prev_page : set_page(n_pages - 1)
|
72
|
+
end
|
73
|
+
|
74
|
+
def current
|
75
|
+
get_nth_page(page)
|
76
|
+
end
|
77
|
+
|
78
|
+
def remove_current_page
|
79
|
+
if n_pages == 1
|
80
|
+
toplevel.quit_gracefully
|
81
|
+
else
|
82
|
+
remove(current)
|
83
|
+
current.grab_focus
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def toggle_visibility
|
88
|
+
@visible ? hide : show
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
|
2
|
+
# This file is part of Germinal.
|
3
|
+
#
|
4
|
+
# Germinal is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# any later version.
|
8
|
+
#
|
9
|
+
# Germinal is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with Germinal. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
class GerminalResizeMessage < Gtk::Box
|
17
|
+
def initialize(text)
|
18
|
+
super(:vertical)
|
19
|
+
text = text || ""
|
20
|
+
add(Gtk::Label.new(text))
|
21
|
+
set_halign(:end)
|
22
|
+
set_valign(:end)
|
23
|
+
set_border_width(4)
|
24
|
+
show_all
|
25
|
+
set_name("resize_box")
|
26
|
+
end
|
27
|
+
|
28
|
+
def text=(text)
|
29
|
+
children[0].text = text
|
30
|
+
show_all
|
31
|
+
end
|
32
|
+
end
|
data/lib/terminal.rb
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
# Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
|
2
|
+
# This file is part of Germinal.
|
3
|
+
#
|
4
|
+
# Germinal is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# any later version.
|
8
|
+
#
|
9
|
+
# Germinal is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with Germinal. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
class GerminalMenu < Gtk::Menu
|
17
|
+
def initialize(vte)
|
18
|
+
super()
|
19
|
+
copyitem = Gtk::MenuItem.new(:label => "Copy")
|
20
|
+
copyitem.signal_connect "activate" do
|
21
|
+
vte.copy_clipboard
|
22
|
+
end
|
23
|
+
append(copyitem)
|
24
|
+
|
25
|
+
pasteitem = Gtk::MenuItem.new(:label => "Paste")
|
26
|
+
pasteitem.signal_connect "activate" do
|
27
|
+
vte.paste_clipboard
|
28
|
+
end
|
29
|
+
append(pasteitem)
|
30
|
+
show_all
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
TERMINAL_COLOR_NAMES = [:foreground, :background, :black, :red, :green, :yellow, :blue, :magenta, :cyan, :white,
|
35
|
+
:brightblack, :brightred, :brightgreen, :brightyellow, :brightblue, :brightmagenta, :brightcyan, :brightwhite]
|
36
|
+
DEFAULT_TERMINAL_COLORS = %w(#aeafad #323232 #000000 #b9214f #A6E22E #ff9800 #3399ff #8e33ff #06a2dc
|
37
|
+
#B0B0B0 #5D5D5D #ff5c8d #CDEE69 #ffff00 #9CD9F0 #FBB1F9 #77DFD8 #F7F7F7)
|
38
|
+
DEFAULT_TERMINAL_FONT = "Monospace 11"
|
39
|
+
##
|
40
|
+
# The default vte terminal customized
|
41
|
+
class GerminalTerminal < Vte::Terminal
|
42
|
+
attr_reader :pid, :menu
|
43
|
+
attr_accessor :preview, :colors, :tab_label
|
44
|
+
type_register
|
45
|
+
TERMINAL_COLOR_NAMES.each_with_index do |c, i|
|
46
|
+
name = c.to_s
|
47
|
+
install_style_property(
|
48
|
+
GLib::Param::Boxed.new(name, # name
|
49
|
+
name.capitalize, # nick
|
50
|
+
name.upcase, # blurb
|
51
|
+
GLib::Type["GdkRGBA"],
|
52
|
+
GLib::Param::READABLE |
|
53
|
+
GLib::Param::WRITABLE)
|
54
|
+
)
|
55
|
+
end
|
56
|
+
install_style_property(
|
57
|
+
GLib::Param::Boxed.new("font", # name
|
58
|
+
"font".capitalize, # nick
|
59
|
+
"font".upcase, # blurb
|
60
|
+
GLib::Type["PangoFontDescription"],
|
61
|
+
GLib::Param::READABLE |
|
62
|
+
GLib::Param::WRITABLE)
|
63
|
+
)
|
64
|
+
##
|
65
|
+
# Create a new GerminalTerminal instance that runs command_string
|
66
|
+
def initialize(command_string, working_dir = nil)
|
67
|
+
super()
|
68
|
+
# TODO: make a begin/rescue like in glib2-2.2.4/sample/shell.rb
|
69
|
+
command_array = GLib::Shell.parse(command_string)
|
70
|
+
@pid = spawn(:argv => command_array,
|
71
|
+
:working_directory => working_dir,
|
72
|
+
:spawn_flags => GLib::Spawn::SEARCH_PATH)
|
73
|
+
|
74
|
+
signal_connect "child-exited" do |widget|
|
75
|
+
notebook = widget.parent
|
76
|
+
current_page = notebook.page_num(widget)
|
77
|
+
if notebook.n_pages > 1
|
78
|
+
notebook.remove_page(current_page)
|
79
|
+
notebook.get_nth_page(notebook.page).grab_focus
|
80
|
+
else
|
81
|
+
notebook.remove_page(current_page)
|
82
|
+
notebook.toplevel.application.quit
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
signal_connect "window-title-changed" do |widget|
|
87
|
+
if parent && parent.current == self
|
88
|
+
current_label = parent.get_tab_label(widget)
|
89
|
+
if @tab_label.class == String
|
90
|
+
current_label.text = @tab_label
|
91
|
+
else
|
92
|
+
current_label.text = window_title
|
93
|
+
parent.toplevel.current_label.text = window_title
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
@menu = GerminalMenu.new(self)
|
99
|
+
signal_connect "button-press-event" do |widget, event|
|
100
|
+
if event.type == Gdk::EventType::BUTTON_PRESS &&
|
101
|
+
event.button == Gdk::BUTTON_SECONDARY
|
102
|
+
|
103
|
+
widget.menu.popup(nil, nil, event.button, event.time)
|
104
|
+
true
|
105
|
+
else
|
106
|
+
false
|
107
|
+
end
|
108
|
+
end
|
109
|
+
configure
|
110
|
+
end
|
111
|
+
|
112
|
+
def get_pid_dir
|
113
|
+
File.readlink("/proc/#{@pid}/cwd")
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_css_colors
|
117
|
+
background = nil
|
118
|
+
foreground = nil
|
119
|
+
colors = []
|
120
|
+
background = parse_css_color(TERMINAL_COLOR_NAMES[0].to_s)
|
121
|
+
foreground = parse_css_color(TERMINAL_COLOR_NAMES[1].to_s)
|
122
|
+
TERMINAL_COLOR_NAMES[2..-1].each do |c|
|
123
|
+
color = parse_css_color(c.to_s)
|
124
|
+
colors << color
|
125
|
+
end
|
126
|
+
[background, foreground] + colors
|
127
|
+
end
|
128
|
+
|
129
|
+
def get_css_font
|
130
|
+
font = style_get_property("font")
|
131
|
+
unless font
|
132
|
+
font = Pango::FontDescription.new(DEFAULT_TERMINAL_FONT)
|
133
|
+
end
|
134
|
+
font
|
135
|
+
end
|
136
|
+
|
137
|
+
def apply_colors
|
138
|
+
set_colors(@colors[0], @colors[1], @colors[2..-1])
|
139
|
+
end
|
140
|
+
|
141
|
+
private
|
142
|
+
|
143
|
+
def parse_css_color(color_name)
|
144
|
+
default_color = Gdk::RGBA.parse(DEFAULT_TERMINAL_COLORS[TERMINAL_COLOR_NAMES.index(color_name.to_sym)])
|
145
|
+
color_from_css = style_get_property(color_name)
|
146
|
+
color = color_from_css ? color_from_css : default_color
|
147
|
+
color
|
148
|
+
end
|
149
|
+
|
150
|
+
def configure
|
151
|
+
set_rewrap_on_resize(true)
|
152
|
+
set_scrollback_lines(-1)
|
153
|
+
@colors = get_css_colors
|
154
|
+
set_font(get_css_font)
|
155
|
+
apply_colors
|
156
|
+
#add_matches
|
157
|
+
end
|
158
|
+
|
159
|
+
def add_matches
|
160
|
+
puts methods.grep(/rege/)
|
161
|
+
match_add_gregex("cedlemo")
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
@@ -0,0 +1,214 @@
|
|
1
|
+
# Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
|
2
|
+
# This file is part of Germinal.
|
3
|
+
#
|
4
|
+
# Germinal is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# any later version.
|
8
|
+
#
|
9
|
+
# Germinal is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with Germinal. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
class GerminalTermChooser < Gtk::ScrolledWindow
|
17
|
+
def initialize(window)
|
18
|
+
super(nil, nil)
|
19
|
+
@window = window
|
20
|
+
set_size_request( 184, @window.notebook.current.allocation.to_a[3] - 8)
|
21
|
+
set_halign(:end)
|
22
|
+
set_valign(:center)
|
23
|
+
set_name("terminal_chooser")
|
24
|
+
|
25
|
+
generate_previews_pixbufs
|
26
|
+
generate_grid
|
27
|
+
fill_grid
|
28
|
+
|
29
|
+
@box = Gtk::Box.new(:vertical, 4)
|
30
|
+
@box.pack_start(@grid, :expand => true, :fill => true, :padding => 4)
|
31
|
+
add(@box)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def generate_grid
|
36
|
+
@grid = Gtk::Grid.new
|
37
|
+
@grid.valign = :start
|
38
|
+
@grid.halign = :center
|
39
|
+
@grid.row_spacing = 2
|
40
|
+
end
|
41
|
+
|
42
|
+
def fill_grid
|
43
|
+
@window.notebook.children.each_with_index do |child,i|
|
44
|
+
button = generate_preview_button(child, i)
|
45
|
+
@grid.attach(button, 0 , i, 1, 1)
|
46
|
+
add_drag_and_drop_functionalities(button)
|
47
|
+
button = generate_close_tab_button
|
48
|
+
@grid.attach(button, 1 , i, 1, 1)
|
49
|
+
end
|
50
|
+
@grid.attach(generate_separator, 0, @window.notebook.n_pages, 2, 1)
|
51
|
+
button = generate_quit_button
|
52
|
+
@grid.attach(button, 0, @window.notebook.n_pages + 1, 2, 1)
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_close_tab_button
|
56
|
+
button = Gtk::EventBox.new
|
57
|
+
button.tooltip_text = "Close Tab"
|
58
|
+
image = Gtk::Image.new(:stock => Gtk::Stock::CLOSE, :size => :button)
|
59
|
+
button.add(image)
|
60
|
+
button.hexpand = false
|
61
|
+
button.vexpand = false
|
62
|
+
button.valign = :start
|
63
|
+
button.halign = :center
|
64
|
+
button.signal_connect "button_press_event" do
|
65
|
+
n = @grid.child_get_property(button, "top-attach")
|
66
|
+
tab = @window.notebook.get_nth_page(n)
|
67
|
+
if @window.notebook.n_pages == 1
|
68
|
+
@window.quit_gracefully
|
69
|
+
else
|
70
|
+
remove_tab(tab, n)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
button
|
74
|
+
end
|
75
|
+
|
76
|
+
def remove_tab(tab, n)
|
77
|
+
@window.notebook.remove(tab)
|
78
|
+
@grid.remove_row(n)
|
79
|
+
last_tab = @window.notebook.n_pages - 1
|
80
|
+
update_preview_button_tooltip(n..last_tab)
|
81
|
+
end
|
82
|
+
|
83
|
+
def update_preview_button_tooltip(range)
|
84
|
+
(range).each do |j|
|
85
|
+
puts j
|
86
|
+
@grid.get_child_at(0, j).tooltip_text = j.to_s
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def generate_preview_button(child, i)
|
91
|
+
button = Gtk::Button.new
|
92
|
+
button.add(generate_preview_image(child.preview))
|
93
|
+
button.set_tooltip_text(i.to_s)
|
94
|
+
button.signal_connect "clicked" do
|
95
|
+
@window.notebook.gen_preview = false
|
96
|
+
@window.notebook.set_current_page(i)
|
97
|
+
end
|
98
|
+
button
|
99
|
+
end
|
100
|
+
|
101
|
+
def generate_preview_image(pixbuf)
|
102
|
+
ratio = pixbuf.width / pixbuf.height
|
103
|
+
scaled_pix = pixbuf.scale(150, 75, Gdk::Pixbuf::INTERP_BILINEAR)
|
104
|
+
img = Gtk::Image.new(:pixbuf => scaled_pix)
|
105
|
+
img.show
|
106
|
+
img
|
107
|
+
end
|
108
|
+
|
109
|
+
def generate_separator
|
110
|
+
Gtk::Separator.new(:horizontal)
|
111
|
+
end
|
112
|
+
|
113
|
+
def generate_quit_button
|
114
|
+
button = Gtk::EventBox.new
|
115
|
+
button.tooltip_text = "Quit Germinal"
|
116
|
+
image = Gtk::Image.new(:stock => Gtk::Stock::QUIT, :size => :button)
|
117
|
+
button.add(image)
|
118
|
+
button
|
119
|
+
end
|
120
|
+
def generate_previews_pixbufs
|
121
|
+
current_page = @window.notebook.page
|
122
|
+
|
123
|
+
if @window.notebook.children.size == 1
|
124
|
+
# If we have only one vte, just generate the preview
|
125
|
+
_x,_y,w,h = @window.notebook.current.allocation.to_a
|
126
|
+
@window.notebook.current.preview = @window.notebook.current.window.to_pixbuf(0, 0, w, h)
|
127
|
+
else
|
128
|
+
# If we have more terminals, just cycle through them
|
129
|
+
# the previews will be generated in the "switch-page" event of the notebook
|
130
|
+
begin
|
131
|
+
@window.notebook.cycle_next_page
|
132
|
+
end while @window.notebook.page == current_page
|
133
|
+
# Here I disable the preview generation in the notebook "switch-page" event
|
134
|
+
# before returning to the current page.
|
135
|
+
# This is a Hack, If I don't disable the preview, all the previews will be
|
136
|
+
# the same.
|
137
|
+
@window.notebook.gen_preview = false
|
138
|
+
@window.notebook.set_current_page(current_page)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def add_drag_and_drop_functionalities(button)
|
143
|
+
add_dnd_source(button)
|
144
|
+
add_dnd_destination(button)
|
145
|
+
end
|
146
|
+
|
147
|
+
def add_dnd_source(button)
|
148
|
+
button.drag_source_set(Gdk::ModifierType::BUTTON1_MASK |
|
149
|
+
Gdk::ModifierType::BUTTON2_MASK,
|
150
|
+
[["test", Gtk::TargetFlags::SAME_APP, 12_345]],
|
151
|
+
Gdk::DragAction::COPY |
|
152
|
+
Gdk::DragAction::MOVE)
|
153
|
+
button.drag_source_set_icon_name("grab")
|
154
|
+
# Drag source signals
|
155
|
+
# drag-begin User starts a drag Set-up drag icon
|
156
|
+
# drag-data-get When drag data is requested by the destination Transfer drag data from source to destination
|
157
|
+
# drag-data-delete When a drag with the action Gdk.DragAction.MOVE is completed Delete data from the source to complete the ‘move’
|
158
|
+
# drag-end When the drag is complete Undo anything done in drag-begin
|
159
|
+
|
160
|
+
#button.signal_connect "drag-begin" do
|
161
|
+
# puts "drag begin for #{index}"
|
162
|
+
#end
|
163
|
+
button.signal_connect("drag-data-get") do |_widget, _context, selection_data, _info, _time|
|
164
|
+
|
165
|
+
index = @grid.child_get_property(button, "top-attach")
|
166
|
+
selection_data.set(Gdk::Selection::TYPE_INTEGER, index.to_s)
|
167
|
+
end
|
168
|
+
#button.signal_connect "drag-data-delete" do
|
169
|
+
# puts "drag data delete for #{inex}"
|
170
|
+
#end
|
171
|
+
#button.signal_connect "drag-end" do
|
172
|
+
# puts "drag end for #{index}"
|
173
|
+
#end
|
174
|
+
end
|
175
|
+
|
176
|
+
def add_dnd_destination(button)
|
177
|
+
button.drag_dest_set(Gtk::DestDefaults::MOTION |
|
178
|
+
Gtk::DestDefaults::HIGHLIGHT,
|
179
|
+
[["test", :same_app, 12_345]],
|
180
|
+
Gdk::DragAction::COPY |
|
181
|
+
Gdk::DragAction::MOVE)
|
182
|
+
|
183
|
+
# Drag destination signals
|
184
|
+
# drag-motion Drag icon moves over a drop area Allow only certain areas to be dropped onto
|
185
|
+
# drag-drop Icon is dropped onto a drag area Allow only certain areas to be dropped onto
|
186
|
+
# drag-data-received When drag data is received by the destination Transfer drag data from source to destination
|
187
|
+
#button.signal_connect "drag-motion" do
|
188
|
+
# puts "drag motion for #{index}"
|
189
|
+
#end
|
190
|
+
button.signal_connect("drag-drop") do |widget, context, _x, _y, time|
|
191
|
+
widget.drag_get_data(context, context.targets[0], time)
|
192
|
+
end
|
193
|
+
button.signal_connect("drag-data-received") do |_widget, context, _x, _y, selection_data, _info, _time|
|
194
|
+
index = @grid.child_get_property(button, "top-attach")
|
195
|
+
index_of_dragged_object = index
|
196
|
+
context.targets.each do |target|
|
197
|
+
if target.name == "test" ||
|
198
|
+
selection_data.type == Gdk::Selection::TYPE_INTEGER
|
199
|
+
data_len = selection_data.data[1]
|
200
|
+
index_of_dragged_object = selection_data.data[0].pack("C#{data_len}").to_i
|
201
|
+
else
|
202
|
+
next
|
203
|
+
end
|
204
|
+
end
|
205
|
+
if index_of_dragged_object != index
|
206
|
+
child = @window.notebook.get_nth_page(index_of_dragged_object)
|
207
|
+
@window.notebook.reorder_child(child, index)
|
208
|
+
@window.notebook.children.each_with_index do |child, i|
|
209
|
+
@grid.get_child_at(0, i).image = generate_preview_image(child.preview)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
|
2
|
+
# This file is part of Germinal.
|
3
|
+
#
|
4
|
+
# Germinal is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# any later version.
|
8
|
+
#
|
9
|
+
# Germinal is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with Germinal. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
class GerminalTermOverview < Gtk::ScrolledWindow
|
17
|
+
def initialize(window)
|
18
|
+
puts "new term chooser"
|
19
|
+
@window = window
|
20
|
+
super(nil, nil)
|
21
|
+
vbox = Gtk::Box.new(:vertical, 0)
|
22
|
+
add(vbox)
|
23
|
+
current_page = @window.notebook.page
|
24
|
+
@window.notebook.children.each_with_index do |child, i|
|
25
|
+
child.show
|
26
|
+
_x,_y,w,h = child.allocation.to_a
|
27
|
+
done, x, y = child.translate_coordinates(@window.notebook, 0, 0)
|
28
|
+
t_hadjustment = child.hadjustment
|
29
|
+
t_vadjustment = child.vadjustment
|
30
|
+
|
31
|
+
puts t_hadjustment.class
|
32
|
+
#@window.notebook.set_current_page(i)
|
33
|
+
#@window.notebook.queue_draw
|
34
|
+
#@window.show_all
|
35
|
+
child.window.show
|
36
|
+
term_pixbuf = child.window.to_pixbuf(0,0,w,h)
|
37
|
+
#surf = child.window.create_similar_surface(Cairo::CONTENT_COLOR,
|
38
|
+
# w,
|
39
|
+
# h)
|
40
|
+
#an = surf.to_pixbuf(0,0,w,h)
|
41
|
+
#child.unmap
|
42
|
+
ratio = term_pixbuf.width / term_pixbuf.height
|
43
|
+
term_pixbuf = term_pixbuf.scale(100, 100 / ratio, Gdk::Pixbuf::INTERP_BILINEAR)
|
44
|
+
img = Gtk::Image.new(:pixbuf => term_pixbuf)
|
45
|
+
img.show
|
46
|
+
vbox.pack_start(img, :expand => true, :fill => true)
|
47
|
+
end
|
48
|
+
@window.notebook.current.window.show
|
49
|
+
@window.notebook.current.window.raise
|
50
|
+
#vbox.pack_start(img, :expand => true, :fill => true)
|
51
|
+
# img = Gtk::Image.new(:file => "2.png")
|
52
|
+
# img.show
|
53
|
+
# vbox.pack_start(img, :expand => true, :fill => true)
|
54
|
+
vbox.show
|
55
|
+
set_size_request(75,100)
|
56
|
+
set_halign(:end)
|
57
|
+
set_valign(:center)
|
58
|
+
show_all
|
59
|
+
end
|
60
|
+
end
|