Class: GerminalWindow

Inherits:
Gtk::ApplicationWindow
  • Object
show all
Defined in:
lib/window.rb

Overview

Copyright 2015-2016 Cédric LE MOIGNE, [email protected] This file is part of Germinal.

Germinal is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.

Germinal is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Germinal. If not, see <www.gnu.org/licenses/>. require “#CURRENT_PATH/resize_message.rb” require “#CURRENT_PATH/css_editor.rb”

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(application) ⇒ GerminalWindow

Returns a new instance of GerminalWindow.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/window.rb', line 59

def initialize(application)
  super(:application => application)
  load_css_properties
  set_position(:center)
  create_header_bar
  @notebook = GerminalNotebook.new
  @overlay = Gtk::Overlay.new
  @overlay.add(@notebook)
  add(@overlay)

  show_all
  signal_connect "key-press-event" do |widget, event|
    keyval = event.keyval
    if (event.state & (Gdk::ModifierType::CONTROL_MASK | Gdk::ModifierType::SHIFT_MASK)) ==
        (Gdk::ModifierType::CONTROL_MASK | Gdk::ModifierType::SHIFT_MASK)
      widget.grab_focus
      case
      when keyval == Gdk::Keyval::KEY_W # close the current tab
        exit_overlay_mode
        @notebook.remove_current_page
        true
      when keyval == Gdk::Keyval::KEY_Q # Quit
        exit_overlay_mode
        quit_gracefully
        true
      when keyval == Gdk::Keyval::KEY_T # New tab
        exit_overlay_mode
        add_terminal
        @notebook.set_page(@notebook.n_pages - 1)
        true
      when keyval == Gdk::Keyval::KEY_C
        toggle_overlay(GerminalColorSelector) if @notebook.current.class == GerminalTerminal
        true
      when keyval == Gdk::Keyval::KEY_F
        toggle_overlay(GerminalFontSelector) if @notebook.current.class == GerminalTerminal
        true
      when keyval == Gdk::Keyval::KEY_Left # previous tab
        exit_overlay_mode
        @notebook.cycle_prev_page
        true
      when keyval == Gdk::Keyval::KEY_Right # next tab
        exit_overlay_mode
        @notebook.cycle_next_page
        true
      when keyval == Gdk::Keyval::KEY_O # next tab
        toggle_overlay(GerminalTermChooser)
        true
      when keyval == Gdk::Keyval::KEY_E 
        css_editor = GerminalCssEditor.new(self)
        @notebook.append_page(css_editor, Gtk::Label.new)
        @notebook.set_page(@notebook.n_pages - 1)
        true
      end
    else
      grab_focus
      case
      when in_overlay_mode? && keyval == Gdk::Keyval::KEY_Escape # escape from overlay mode
        exit_overlay_mode
        @notebook.current.grab_focus
        true
      else
        false
      end
    end
  end
end

Instance Attribute Details

#barObject (readonly)

Returns the value of attribute bar.



20
21
22
# File 'lib/window.rb', line 20

def bar
  @bar
end

#css_editor_styleObject (readonly)

Returns the value of attribute css_editor_style.



20
21
22
# File 'lib/window.rb', line 20

def css_editor_style
  @css_editor_style
end

#current_labelObject (readonly)

Returns the value of attribute current_label.



20
21
22
# File 'lib/window.rb', line 20

def current_label
  @current_label
end

#current_tabObject (readonly)

Returns the value of attribute current_tab.



20
21
22
# File 'lib/window.rb', line 20

def current_tab
  @current_tab
end

#notebookObject (readonly)

Returns the value of attribute notebook.



20
21
22
# File 'lib/window.rb', line 20

def notebook
  @notebook
end

#overlayObject (readonly)

Returns the value of attribute overlay.



20
21
22
# File 'lib/window.rb', line 20

def overlay
  @overlay
end

Instance Method Details

#add_overlay(widget) ⇒ Object



161
162
163
164
# File 'lib/window.rb', line 161

def add_overlay(widget)
  @overlay.add_overlay(widget)
  @overlay.set_overlay_pass_through(widget, true)
end

#add_resize_timeoutObject



170
171
172
173
174
175
176
177
# File 'lib/window.rb', line 170

def add_resize_timeout
  @resize_timeout = GLib::Timeout.add_seconds(2) do
    second_child = @overlay.children[1] || nil
    if second_child && second_child.class == GerminalResizeMessage
      @overlay.children[1].hide
    end
  end
end

#add_terminal(cmd = @shell) ⇒ Object



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/window.rb', line 126

def add_terminal(cmd = @shell)
  working_dir = nil
  # Check if current tab is a GerminalTerminal (can be GerminalCssEditor)
  if @notebook.current.class == GerminalTerminal && @notebook.n_pages > 0
    working_dir = @notebook.current.get_pid_dir
  end

  terminal = GerminalTerminal.new(cmd, working_dir)
  terminal.show
  terminal.signal_connect "size-allocate" do |widget|
    w = widget.column_count
    h = widget.row_count
    size_infos = "#{w}x#{h}"
    if @overlay.children.size == 1
      add_overlay(GerminalResizeMessage.new(size_infos))
      add_resize_timeout
    elsif @overlay.children[1].class == GerminalResizeMessage
      GLib::Source.remove(@resize_timeout) if @resize_timeout
      @overlay.children[1].text = size_infos
      add_resize_timeout
    end
  end
  @notebook.append_page(terminal, Gtk::Label.new)
  @notebook.set_tab_reorderable(terminal, true)
end

#exit_overlay_modeObject



166
167
168
# File 'lib/window.rb', line 166

def exit_overlay_mode
  @overlay.children[1].destroy if in_overlay_mode?
end

#in_overlay_mode?Boolean

Returns:

  • (Boolean)


157
158
159
# File 'lib/window.rb', line 157

def in_overlay_mode?
  @overlay.children.size > 1 ? true : false
end

#load_css_propertiesObject



179
180
181
182
183
184
185
186
# File 'lib/window.rb', line 179

def load_css_properties
  @default_width = style_get_property("width")
  @default_height = style_get_property("height")
  set_default_size(@default_width, @default_height)
  set_size_request(@default_width, @default_height)
  @shell = style_get_property("shell")
  @css_editor_style = style_get_property("css-editor-style")
end

#quit_gracefullyObject



152
153
154
155
# File 'lib/window.rb', line 152

def quit_gracefully
  @notebook.remove_all_pages
  application.quit
end