topinambour 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- # Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
1
+ # Copyright 2015-2016 Cedric LE MOIGNE, cedlemo@gmx.com
2
2
  # This file is part of Topinambour.
3
3
  #
4
4
  # Topinambour is free software: you can redistribute it and/or modify
@@ -17,7 +17,7 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
17
17
  def initialize(window)
18
18
  super(nil, nil)
19
19
  @window = window
20
- set_size_request(184, @window.notebook.current.allocation.to_a[3] - 8)
20
+ set_size_request(250, @window.notebook.current.allocation.to_a[3] - 8)
21
21
  set_halign(:end)
22
22
  set_valign(:center)
23
23
  set_name("terminal_chooser")
@@ -43,11 +43,14 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
43
43
 
44
44
  def fill_grid
45
45
  @window.notebook.children.each_with_index do |child, i|
46
- button = generate_preview_button(child, i)
46
+ button = Gtk::Label.new("tab. #{(i + 1).to_s}")
47
+ button.angle = 45
47
48
  @grid.attach(button, 0, i, 1, 1)
49
+ button = generate_preview_button(child, i)
50
+ @grid.attach(button, 1, i, 1, 1)
48
51
  add_drag_and_drop_functionalities(button)
49
52
  button = generate_close_tab_button
50
- @grid.attach(button, 1, i, 1, 1)
53
+ @grid.attach(button, 2, i, 1, 1)
51
54
  end
52
55
  @grid.attach(generate_separator, 0, @window.notebook.n_pages, 2, 1)
53
56
  button = generate_quit_button
@@ -84,21 +87,20 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
84
87
 
85
88
  def update_preview_button_tooltip(range)
86
89
  (range).each do |j|
87
- puts j
88
90
  @grid.get_child_at(0, j).tooltip_text = j.to_s
89
91
  end
90
92
  end
91
93
 
92
94
  def generate_preview_button(child, i)
93
95
  button = Gtk::Button.new
94
- button.add(generate_preview_image(child.preview))
95
- button.set_tooltip_text(i.to_s)
96
+ button.image = generate_preview_image(child.preview)
97
+ button.set_tooltip_text((i + 1).to_s)
96
98
  button.signal_connect("clicked") { @window.notebook.current_page = i }
97
99
  button
98
100
  end
99
101
 
100
102
  def generate_preview_image(pixbuf)
101
- scaled_pix = pixbuf.scale(150, 75, Gdk::Pixbuf::INTERP_BILINEAR)
103
+ scaled_pix = pixbuf.scale(150, 75, :bilinear)
102
104
  img = Gtk::Image.new(:pixbuf => scaled_pix)
103
105
  img.show
104
106
  img
@@ -130,18 +132,19 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
130
132
  [["test", Gtk::TargetFlags::SAME_APP, 12_345]],
131
133
  Gdk::DragAction::COPY |
132
134
  Gdk::DragAction::MOVE)
133
- button.drag_source_set_icon_name("grab")
135
+ #button.drag_source_set_icon_name("grab")
134
136
  # Drag source signals
135
137
  # drag-begin User starts a drag Set-up drag icon
136
138
  # drag-data-get When drag data is requested by the destination Transfer drag data from source to destination
137
139
  # drag-data-delete When a drag with the action Gdk.DragAction.MOVE is completed Delete data from the source to complete the "move"
138
140
  # drag-end When the drag is complete Undo anything done in drag-begin
139
141
 
140
- # button.signal_connect "drag-begin" do
141
- # puts "drag begin for #{index}"
142
- # end
143
- button.signal_connect("drag-data-get") do |_widget, _context, selection_data, _info, _time|
144
- index = @grid.child_get_property(button, "top-attach")
142
+ button.signal_connect "drag-begin" do |widget|
143
+ widget.drag_source_set_icon_pixbuf(widget.image.pixbuf)
144
+ end
145
+
146
+ button.signal_connect("drag-data-get") do |widget, _context, selection_data, _info, _time|
147
+ index = grid_line_of(widget)
145
148
  selection_data.set(Gdk::Selection::TYPE_INTEGER, index.to_s)
146
149
  end
147
150
  # button.signal_connect "drag-data-delete" do
@@ -169,21 +172,25 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
169
172
  button.signal_connect("drag-drop") do |widget, context, _x, _y, time|
170
173
  widget.drag_get_data(context, context.targets[0], time)
171
174
  end
172
- button.signal_connect("drag-data-received") do |_widget, context, _x, _y, selection_data, _info, _time|
173
- index = @grid.child_get_property(button, "top-attach")
175
+ button.signal_connect("drag-data-received") do |widget, context, _x, _y, selection_data, _info, _time|
176
+ index = grid_line_of(widget)
174
177
  index_of_dragged_object = index
175
178
  context.targets.each do |target|
176
179
  next unless target.name == "test" || selection_data.type == :type_integer
177
- data_len = selection_data.data[1]
178
- index_of_dragged_object = selection_data.data[0].pack("C#{data_len}").to_i
180
+ data_len = selection_data.data.size
181
+ index_of_dragged_object = selection_data.data.pack("C#{data_len}").to_i
179
182
  end
180
183
  if index_of_dragged_object != index
181
184
  dragged = @window.notebook.get_nth_page(index_of_dragged_object)
182
185
  @window.notebook.reorder_child(dragged, index)
183
186
  @window.notebook.children.each_with_index do |child, i|
184
- @grid.get_child_at(0, i).image = generate_preview_image(child.preview)
187
+ @grid.get_child_at(1, i).image = generate_preview_image(child.preview)
185
188
  end
186
189
  end
187
190
  end
188
191
  end
192
+
193
+ def grid_line_of(widget)
194
+ @grid.child_get_property(widget, "top-attach")
195
+ end
189
196
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2016 Cédric LE MOIGNE, cedlemo@gmx.com
1
+ # Copyright 2016 Cedric LE MOIGNE, cedlemo@gmx.com
2
2
  # This file is part of Topinambour.
3
3
  #
4
4
  # Topinambour is free software: you can redistribute it and/or modify
@@ -108,7 +108,8 @@ RGB_COLOR = "rgb\\s*\\(\\s*#{UINT8_CLASS}\\s*\\,\\s*#{UINT8_CLASS}\\s*\\,\\s*#{U
108
108
  RGBPERC_COLOR = "rgb\\s*\\(\\s*#{PERCENT_CLASS}\\s*\\,\\s*#{PERCENT_CLASS}\\s*\\,\\s*#{PERCENT_CLASS}\\s*\\)"
109
109
  RGBA_COLOR = "rgba\\s*\\(\\s*#{UINT8_CLASS}\\s*\\,\\s*#{UINT8_CLASS}\\s*\\,\\s*#{UINT8_CLASS}\\s*\\,\\s*[0-1](\\.[0-9]*)?\\s*\\)"
110
110
  RGBAPERC_COLOR = "rgba\\s*\\(\\s*#{PERCENT_CLASS}\\s*\\,\\s*#{PERCENT_CLASS}\\s*\\,\\s*#{PERCENT_CLASS}\\s*\\,\\s*[0-1](\\.[0-9]*)?\\s*\\)"
111
- CSS_COLORS = "#{HEX_COLOR}|#{RGB_COLOR}|#{RGBPERC_COLOR}|#{RGBA_COLOR}|#{RGBAPERC_COLOR}"
111
+ include RgbNames
112
+ CSS_COLORS = "#{HEX_COLOR}|#{RGB_COLOR}|#{RGBPERC_COLOR}|#{RGBA_COLOR}|#{RGBAPERC_COLOR}|#{COLOR_NAMES}"
112
113
  end
113
114
 
114
115
  module TopinambourRegex
data/lib/window.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
1
+ # Copyright 2015-2016 Cedric LE MOIGNE, cedlemo@gmx.com
2
2
  # This file is part of Topinambour.
3
3
  #
4
4
  # Topinambour is free software: you can redistribute it and/or modify
@@ -15,8 +15,8 @@
15
15
  # along with Topinambour. If not, see <http://www.gnu.org/licenses/>.
16
16
 
17
17
  class TopinambourWindow
18
- attr_reader :notebook, :bar, :overlay, :current_label, :current_tab, :css_editor_style
19
-
18
+ attr_reader :notebook, :bar, :overlay, :current_label, :current_tab
19
+ attr_accessor :shell, :css_editor_style
20
20
  def initialize(application)
21
21
  super(:application => application)
22
22
  set_icon_name("utilities-terminal-symbolic")
@@ -28,6 +28,9 @@ class TopinambourWindow
28
28
  signal_connect "key-press-event" do |widget, event|
29
29
  TopinambourShortcuts.handle_key_press(widget, event)
30
30
  end
31
+ signal_connect "scroll-event" do |widget, event|
32
+ TopinambourShortcuts.handle_scroll(widget, event)
33
+ end
31
34
  end
32
35
 
33
36
  def add_terminal(cmd = @shell)
@@ -82,6 +85,10 @@ class TopinambourWindow
82
85
  toggle_overlay(TopinambourTermChooser)
83
86
  end
84
87
 
88
+ def show_terminal_chooser2
89
+ toggle_overlay(TopinambourTermChooserb)
90
+ end
91
+
85
92
  def exit_overlay_mode
86
93
  @overlay.children[1].destroy if in_overlay_mode?
87
94
  end
@@ -90,20 +97,19 @@ class TopinambourWindow
90
97
  @default_width = style_get_property("width")
91
98
  @default_height = style_get_property("height")
92
99
  set_default_size(@default_width, @default_height)
93
- set_size_request(@default_width, @default_height)
94
100
  @shell = style_get_property("shell")
95
101
  @css_editor_style = style_get_property("css-editor-style")
96
102
  end
97
103
 
98
104
  def display_about
99
105
  Gtk::AboutDialog.show(self,
100
- "authors" => ["Cédric Le Moigne <cedlemo@gmx.com>"],
106
+ "authors" => ["Cedric Le Moigne <cedlemo@gmx.com>"],
101
107
  "comments" => "Terminal Emulator based on the ruby bindings of Gtk3 and Vte3",
102
- "copyright" => "Copyright (C) 2015-2016 Cédric Le Moigne",
108
+ "copyright" => "Copyright (C) 2015-2016 Cedric Le Moigne",
103
109
  "license" => "This program is licenced under the licence GPL-3.0 and later.",
104
110
  "logo_icon_name" => "utilities-terminal-symbolic",
105
111
  "program_name" => "Topinambour",
106
- "version" => "1.0.7",
112
+ "version" => "1.0.9",
107
113
  "website" => "https://github.com/cedlemo/topinambour",
108
114
  "website_label" => "Topinambour github repository"
109
115
  )
@@ -118,11 +124,28 @@ class TopinambourWindow
118
124
  @overlay.children.size > 1 ? true : false
119
125
  end
120
126
 
127
+ def show_searchbar
128
+ toggle_overlay(TopinambourSearchBar)
129
+ overlayed_widget = @overlay.children[1]
130
+ overlayed_widget.search_mode = true if overlayed_widget
131
+ end
132
+
133
+ def toggle_shrink
134
+ w, h = size
135
+ if @shrink_saved_height
136
+ resize(w, @shrink_saved_height)
137
+ @shrink_saved_height = nil
138
+ else
139
+ resize(w, 1)
140
+ @shrink_saved_height = h
141
+ end
142
+ end
143
+
121
144
  private
122
145
 
123
146
  def add_overlay(widget)
124
147
  @overlay.add_overlay(widget)
125
- @overlay.set_overlay_pass_through(widget, true)
148
+ @overlay.set_overlay_pass_through(widget, false)
126
149
  end
127
150
 
128
151
  def create_containers
@@ -133,33 +156,75 @@ class TopinambourWindow
133
156
  end
134
157
 
135
158
  def create_header_bar
136
- @bar = TopinambourHeaderBar.generate_header_bar(self)
137
- @current_label = TopinambourHeaderBar.generate_current_label(self)
138
- @current_tab = TopinambourHeaderBar.generate_current_tab
139
- add_buttons_at_begining
140
- add_buttons_at_end
141
- end
142
-
143
- def add_buttons_at_begining
144
- button = TopinambourHeaderBar.generate_prev_button(self)
145
- @bar.pack_start(button)
146
- @bar.pack_start(@current_tab)
147
- button = TopinambourHeaderBar.generate_next_button(self)
148
- @bar.pack_start(button)
149
- @bar.pack_start(@current_label)
150
- button = TopinambourHeaderBar.generate_new_tab_button(self)
151
- @bar.pack_start(button)
152
- end
153
-
154
- def add_buttons_at_end
155
- button = TopinambourHeaderBar.generate_open_menu_button(self)
156
- @bar.pack_end(button)
157
- button = TopinambourHeaderBar.generate_font_sel_button(self)
158
- @bar.pack_end(button)
159
- button = TopinambourHeaderBar.generate_color_sel_button(self)
160
- @bar.pack_end(button)
161
- button = TopinambourHeaderBar.generate_term_overv_button(self)
162
- @bar.pack_end(button)
159
+ resource_file = "/com/github/cedlemo/topinambour/headerbar.ui"
160
+ builder = Gtk::Builder.new(:resource => resource_file)
161
+ set_titlebar(builder["headerbar"])
162
+ @current_label = builder["current_label"]
163
+ current_label_signals
164
+ @current_tab = builder["current_tab"]
165
+ next_prev_new_signals(builder)
166
+ overview_font_color_signals(builder)
167
+ main_menu_signal(builder)
168
+ end
169
+
170
+ def current_label_signals
171
+ @current_label.signal_connect "activate" do |entry|
172
+ @notebook.current.custom_title = entry.text
173
+ @notebook.current.grab_focus
174
+ end
175
+
176
+ @current_label.signal_connect "icon-release" do |entry, position|
177
+ if position == :primary
178
+ close_current_tab
179
+ elsif position == :secondary
180
+ @notebook.current.custom_title = nil
181
+ entry.text = @notebook.current.window_title
182
+ end
183
+ end
184
+ end
185
+
186
+ def next_prev_new_signals(builder)
187
+ builder["prev_button"].signal_connect "clicked" do
188
+ show_prev_tab
189
+ end
190
+
191
+ builder["next_button"].signal_connect "clicked" do
192
+ show_next_tab
193
+ end
194
+
195
+ builder["new_term"].signal_connect "clicked" do
196
+ add_terminal
197
+ end
198
+ end
199
+
200
+ def overview_font_color_signals(builder)
201
+ builder["term_overv_button"].signal_connect "clicked" do
202
+ show_terminal_chooser
203
+ end
204
+
205
+ builder["font_sel_button"].signal_connect "clicked" do
206
+ show_font_selector
207
+ end
208
+
209
+ builder["colors_sel_button"].signal_connect "clicked" do
210
+ show_color_selector
211
+ end
212
+ end
213
+
214
+ def main_menu_signal(builder)
215
+ builder["menu_button"].signal_connect "clicked" do |button|
216
+ ui_file = "/com/github/cedlemo/topinambour/window-menu.ui"
217
+ winmenu = Gtk::Builder.new(:resource => ui_file)["winmenu"]
218
+ event = Gtk.current_event
219
+ menu = Gtk::Popover.new(button, winmenu)
220
+ x, y = event.window.coords_to_parent(event.x,
221
+ event.y)
222
+ rect = Gdk::Rectangle.new(x - button.allocation.x,
223
+ y - button.allocation.y,
224
+ 1, 1)
225
+ menu.set_pointing_to(rect)
226
+ menu.show
227
+ end
163
228
  end
164
229
 
165
230
  def toggle_overlay(klass)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: topinambour
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
- - Cédric LE MOIGNE
7
+ - Cedric LE MOIGNE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-23 00:00:00.000000000 Z
11
+ date: 2016-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: vte3
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '3.0'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 3.0.7
22
+ version: 3.0.9
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '3.0'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 3.0.7
32
+ version: 3.0.9
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: gtksourceview3
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '3.0'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 3.0.7
42
+ version: 3.0.9
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: '3.0'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 3.0.7
52
+ version: 3.0.9
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: sass
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -86,8 +86,10 @@ files:
86
86
  - data/color-select-symbolic.svg
87
87
  - data/emblem-photos-symbolic.svg
88
88
  - data/font-select-symbolic.svg
89
+ - data/headerbar.ui
89
90
  - data/pan-end-symbolic.svg
90
91
  - data/pan-start-symbolic.svg
92
+ - data/prefs-dialog.ui
91
93
  - data/tab-new-symbolic.svg
92
94
  - data/terminal-menu.ui
93
95
  - data/topinambour.css
@@ -102,9 +104,11 @@ files:
102
104
  - lib/css_editor.rb
103
105
  - lib/css_handler.rb
104
106
  - lib/font_selector.rb
105
- - lib/headerbar.rb
106
107
  - lib/notebook.rb
108
+ - lib/preferences.rb
107
109
  - lib/resize_message.rb
110
+ - lib/rgb_names_regexes.rb
111
+ - lib/searchbar.rb
108
112
  - lib/shortcuts.rb
109
113
  - lib/style_properties.rb
110
114
  - lib/terminal.rb
@@ -136,4 +140,3 @@ signing_key:
136
140
  specification_version: 4
137
141
  summary: Ruby-gnome2 Terminal emulator
138
142
  test_files: []
139
- has_rdoc:
data/lib/headerbar.rb DELETED
@@ -1,126 +0,0 @@
1
- # Copyright 2016 Cédric LE MOIGNE, cedlemo@gmx.com
2
- # This file is part of Topinambour.
3
- #
4
- # Topinambour 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
- # Topinambour 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 Topinambour. If not, see <http://www.gnu.org/licenses/>.
16
-
17
- module TopinambourHeaderBar
18
- def self.generate_header_bar(window)
19
- bar = Gtk::HeaderBar.new
20
- bar.title = "Topinambour"
21
- bar.has_subtitle = false
22
- bar.show_close_button = true
23
- window.set_titlebar(bar)
24
- bar
25
- end
26
-
27
- def self.generate_current_label_tooltips(label)
28
- label.tooltip_text = <<-TOOLTIP
29
- Change the name of the tab and hit
30
- enter in order to validate
31
- TOOLTIP
32
- label.set_icon_tooltip_text(:secondary, <<-SECTOOLTIP)
33
- Reset your changes and use the
34
- default label for the current tab
35
- SECTOOLTIP
36
- end
37
-
38
- def self.generate_current_label_signals(label, window)
39
- label.signal_connect "activate" do |entry|
40
- window.notebook.current.custom_title = entry.text
41
- end
42
-
43
- label.signal_connect "icon-release" do |entry, position|
44
- if position == :secondary
45
- window.notebook.current.custom_title = nil
46
- entry.text = window.notebook.current.window_title
47
- end
48
- end
49
- end
50
-
51
- def self.generate_current_label(window)
52
- label = Gtk::Entry.new
53
- label.has_frame = false
54
- label.width_chars = 35
55
- label.set_icon_from_icon_name(:secondary, "edit-clear")
56
-
57
- generate_current_label_tooltips(label)
58
- generate_current_label_signals(label, window)
59
- label
60
- end
61
-
62
- def self.generate_prev_button(window)
63
- gen_icon_button("pan-start-symbolic", "prev") do
64
- window.show_prev_tab
65
- end
66
- end
67
-
68
- def self.generate_current_tab
69
- Gtk::Label.new("1/1")
70
- end
71
-
72
- def self.generate_next_button(window)
73
- gen_icon_button("pan-end-symbolic", "next") do
74
- window.show_next_tab
75
- end
76
- end
77
-
78
- def self.generate_new_tab_button(window)
79
- gen_icon_button("tab-new-symbolic", "New terminal") do
80
- window.add_terminal
81
- end
82
- end
83
-
84
- def self.generate_open_menu_button(window)
85
- gen_icon_button("open-menu-symbolic", "Main Menu") do |button|
86
- builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/topinambour/window-menu.ui")
87
- menu = Gtk::Menu.new(builder["winmenu"])
88
- menu.attach_to_widget(button)
89
- menu.children[0].signal_connect("activate") { window.show_css_editor }
90
-
91
- menu.show_all
92
- event = Gtk.current_event
93
- menu.popup(nil, nil, event.button, event.time)
94
- end
95
- end
96
-
97
- def self.generate_font_sel_button(window)
98
- gen_icon_button("font-select-symbolic", "Set font") do
99
- window.show_font_selector
100
- end
101
- end
102
-
103
- def self.generate_color_sel_button(window)
104
- gen_icon_button("color-select-symbolic", "Set colors") do
105
- window.show_color_selector
106
- end
107
- end
108
-
109
- def self.generate_term_overv_button(window)
110
- gen_icon_button("emblem-photos-symbolic", "Terminals overview") do
111
- window.show_terminal_chooser
112
- end
113
- end
114
- def self.gen_icon_button(icon_name, tooltip)
115
- button = Gtk::Button.new
116
- image = Gtk::Image.new(:icon_name => icon_name, :size => :button)
117
- button.add(image)
118
- button.tooltip_text = tooltip
119
- if block_given?
120
- button.signal_connect "clicked" do |widget|
121
- yield(widget)
122
- end
123
- end
124
- button
125
- end
126
- end