class GerminalWindow

Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com 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/>.

Attributes

bar[R]
css_editor_style[R]
current_label[R]
current_tab[R]
notebook[R]
overlay[R]

Public Class Methods

new(application) click to toggle source
Calls superclass method
# File lib/window.rb, line 27
def initialize(application)
  super(:application => application)
  set_icon_from_file("#{DATA_PATH}/germinal-icon.png")
  load_css_properties
  set_position(:center)
  create_header_bar
  create_containers
  show_all
  signal_connect "key-press-event" do |widget, event|
    GerminalShortcuts.handle_key_press(widget, event)
  end
end

Public Instance Methods

add_terminal(cmd = @shell) click to toggle source
# File lib/window.rb, line 40
def add_terminal(cmd = @shell)
  exit_overlay_mode
  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.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)
  @notebook.set_page(@notebook.n_pages - 1)
end
close_current_tab() click to toggle source
# File lib/window.rb, line 129
def close_current_tab
  exit_overlay_mode
  @notebook.remove_current_page
end
display_about() click to toggle source
# File lib/window.rb, line 115
def display_about
  Gtk::AboutDialog.show(self,
                        "authors" => ["Cédric Le Moigne <cedlemo@gmx.com>"],
                        "comments" => "Terminal Emulator based on the ruby bindings of Gtk3 and Vte3",
                        "copyright" => "Copyright (C) 2015-2016 Cédric Le Moigne",
                        "license" => "This program is licenced under the licence GPL-3.0 and later.",
                        "logo" => Gdk::Pixbuf.new("#{DATA_PATH}/germinal-icon-128.png"),
                        "program_name" => "Germinal",
                        "version" => "1.2.3",
                        "website" => "https://github.com/cedlemo/germinal",
                        "website_label" => "Germinal github repository"
                       )
end
exit_overlay_mode() click to toggle source
# File lib/window.rb, line 102
def exit_overlay_mode
  @overlay.children[1].destroy if in_overlay_mode?
end
in_overlay_mode?() click to toggle source
# File lib/window.rb, line 134
def in_overlay_mode?
  @overlay.children.size > 1 ? true : false
end
load_css_properties() click to toggle source
# File lib/window.rb, line 106
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_gracefully() click to toggle source
# File lib/window.rb, line 68
def quit_gracefully
  exit_overlay_mode
  @notebook.remove_all_pages
  application.quit
end
show_color_selector() click to toggle source
# File lib/window.rb, line 74
def show_color_selector
  toggle_overlay(GerminalColorSelector) if @notebook.current.class == GerminalTerminal
end
show_css_editor() click to toggle source
# File lib/window.rb, line 96
def show_css_editor
  css_editor = GerminalCssEditor.new(self)
  @notebook.append_page(css_editor, Gtk::Label.new)
  @notebook.set_page(window.notebook.n_pages - 1)
end
show_font_selector() click to toggle source
# File lib/window.rb, line 92
def show_font_selector
  toggle_overlay(GerminalFontSelector) if @notebook.current.class == GerminalTerminal
end
show_next_tab() click to toggle source
# File lib/window.rb, line 83
def show_next_tab
  exit_overlay_mode
  @notebook.cycle_next_page
end
show_prev_tab() click to toggle source
# File lib/window.rb, line 78
def show_prev_tab
  exit_overlay_mode
  @notebook.cycle_prev_page
end
show_terminal_chooser() click to toggle source
# File lib/window.rb, line 88
def show_terminal_chooser
  toggle_overlay(GerminalTermChooser)
end

Private Instance Methods

add_buttons_at_begining() click to toggle source
# File lib/window.rb, line 160
def add_buttons_at_begining
  button = GerminalHeaderBar.generate_prev_button(self)
  @bar.pack_start(button)
  @bar.pack_start(@current_tab)
  button = GerminalHeaderBar.generate_next_button(self)
  @bar.pack_start(button)
  @bar.pack_start(@current_label)
  button = GerminalHeaderBar.generate_new_tab_button(self)
  @bar.pack_start(button)
end
add_buttons_at_end() click to toggle source
# File lib/window.rb, line 171
def add_buttons_at_end
  button = GerminalHeaderBar.generate_open_menu_button(self)
  @bar.pack_end(button)
  button = GerminalHeaderBar.generate_font_sel_button(self)
  @bar.pack_end(button)
  button = GerminalHeaderBar.generate_color_sel_button(self)
  @bar.pack_end(button)
  button = GerminalHeaderBar.generate_term_overv_button(self)
  @bar.pack_end(button)
end
add_overlay(widget) click to toggle source
# File lib/window.rb, line 140
def add_overlay(widget)
  @overlay.add_overlay(widget)
  @overlay.set_overlay_pass_through(widget, true)
end
add_resize_timeout() click to toggle source
# File lib/window.rb, line 182
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
create_containers() click to toggle source
# File lib/window.rb, line 145
def create_containers
  @notebook = GerminalNotebook.new
  @overlay = Gtk::Overlay.new
  @overlay.add(@notebook)
  add(@overlay)
end
create_header_bar() click to toggle source
# File lib/window.rb, line 152
def create_header_bar
  @bar = GerminalHeaderBar.generate_header_bar(self)
  @current_label = GerminalHeaderBar.generate_current_label(self)
  @current_tab = GerminalHeaderBar.generate_current_tab
  add_buttons_at_begining
  add_buttons_at_end
end
toggle_overlay(klass) click to toggle source
# File lib/window.rb, line 191
def toggle_overlay(klass)
  if in_overlay_mode? && @overlay.children[1].class == klass
    exit_overlay_mode
  else
    exit_overlay_mode
    add_overlay(klass.new(self))
    @overlay.children[1].show_all
  end
end