Class: Gtk::NotebookController

Inherits:
Box
  • Object
show all
Includes:
BaseModule
Defined in:
lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb

Overview

Gtk::NotebookController

Constant Summary collapse

TITLE =
#

TITLE

#
'Notebook-Controller'
WIDTH =
#

WIDTH

#
'55% or minimum 1380px'
HEIGHT =
#

HEIGHT

#
'50% or minimum 1000px'
USE_THIS_FONT =
#

USE_THIS_FONT

#
:dejavu_condensed_22
PATH_TO_GTK_PARADISE =
#

PATH_TO_GTK_PARADISE

#
'gtk_paradise/widgets/gtk3/'

Constants included from BaseModule

BaseModule::HASH_USE_THESE_PERCENTAGE_VALUES_FOR_THE_HEADERS, BaseModule::IMG_DIR

Class Method Summary collapse

Instance Method Summary collapse

Methods included from BaseModule

#abort_on_exception, #absolute_file_path, #add_a_horizontal_spacer, #add_css_rules, #add_horizontal_spacer, #add_notebook, #add_or_append, #add_table3, #all_buttons?, #all_check_buttons?, #all_entries?, #all_labels?, #all_toggle_buttons?, #allow_only_numbers, #always_scrolled_window, #app_chooser_button, #append_gtk_paradise_project_css_file, #append_onto_the_CSS_rules, #append_project_css_file, #append_the_default_css_rules, #apply_the_default_CSS_rules, #automatic_scrolled_window, #automatically_create_widgets_based_on_this_dataset, #automatically_created_widgets?, #button_hover_colour, #button_themed_icon, #cairo_context, #cell_renderer_progress, #centered_cell_renderer_text, #centered_text, #change_directory, #check_button_is_checked, #check_for_a_manifest_yaml_file, #cliner, #clipboard_text?, #coloured_quit_button, #configuration?, #connect_the_skeleton, #create_a_new_file_chooser_dialog, #create_and_add_gtk_accel_group, #create_bold_cell_renderer, #create_centered_entry, #create_clipboard, #create_combobox_text, #create_context_menu, #create_entry_with_text_and_max_length, #create_font_chooser_dialog, #create_paned_hbox_first_big, #create_paned_vbox, #create_paned_vbox_last_big, #create_skeleton_then_connect_skeleton, #create_skeleton_then_connect_skeleton_then_apply_the_CSS_rules, #create_sourceview, #crimson, #css_background1, #css_provider?, #css_rules_to_apply?, #current_event?, #current_font_in_use?, #dd_mm_yy, #debug?, #default_application, #default_entry, default_gtk_adjustment?, #default_gtk_settings?, #default_notebook, #default_renderer, #delayed_css_change, #destroy_then_quit, #directory_content_widget, #directory_to_the_images?, #display_the_CSS_rules, #div, #do_apply_the_CSS_rules, #do_enable_debug, #do_popup, #drag_start, #drag_stop, #draggable_from_the_left_to_the_right_side, #draggable_left_to_right_pane, #drop_down_find_box, #e, #efancy, #eight_strings, #emoji, #emoji_image, #enable_default_grid_settings_for, #enable_these_key_combinations, #entry_with_this_completion, #esystem, #event_left_mouse_button_click?, #event_middle_mouse_button_click?, #event_right_mouse_button_click?, #ewarn, #exit_program, extended, #five_strings, #font_chooser_dialog, #four_strings, #gdk_screen, #gdk_selection_clipboard, #generate_css_class, #group_maximal, #gtk_about_dialog, #gtk_accel_group, #gtk_adjustment, #gtk_alignment, #gtk_application_window, #gtk_base_module, #gtk_bold_button, #gtk_bold_check_button, #gtk_bold_entry, #gtk_bold_frame, #gtk_bold_label, #gtk_bold_text_left_aligned, #gtk_button, #gtk_button_accel, #gtk_button_box, #gtk_button_box_spread, #gtk_button_with_label, #gtk_button_with_this_image, #gtk_button_xorg_buffer, #gtk_cell_renderer_centered_text, #gtk_cell_renderer_combo, #gtk_cell_renderer_pixbuf, #gtk_cell_renderer_right_aligned, #gtk_cell_renderer_text, #gtk_centered_spin_button, #gtk_check_button, #gtk_colour_black, #gtk_colour_button, #gtk_colour_grey, #gtk_colour_selection_dialog, #gtk_coloured_bar, #gtk_coloured_button, #gtk_combo_box, #gtk_combo_box_entry, #gtk_combo_box_text, #gtk_dialog, #gtk_drawing_area, #gtk_dropdown, #gtk_entry, #gtk_entry_completion, #gtk_entry_with_icon_name, #gtk_entry_with_secondary_icon_name, #gtk_eventbox, #gtk_expanded_expander, #gtk_expander, #gtk_file_chooser_button, #gtk_file_chooser_dialog, #gtk_file_filter, #gtk_fixed, #gtk_frame, #gtk_grid, #gtk_hbox, #gtk_hbox_with_vertical_pane, #gtk_hbutton_box, #gtk_header_bar, #gtk_hpaned, #gtk_hscale, #gtk_hseparator, #gtk_image, #gtk_image_menu_item, #gtk_input_field, #gtk_label, #gtk_left_aligned_bold_label, #gtk_left_aligned_button, #gtk_list_store, #gtk_list_store_table2, #gtk_list_store_table3, #gtk_list_store_table4, #gtk_main_quit, #gtk_markified_text, #gtk_markup, #gtk_menu, #gtk_menu_bar, #gtk_menu_item, #gtk_message_dialog, #gtk_message_dialog_run_then_destroy, #gtk_notebook, #gtk_option_menu, #gtk_password, #gtk_pixbuf, #gtk_popover, #gtk_progress_bar, #gtk_radio_button, #gtk_radio_menu_item, #gtk_resize_grip, #gtk_right_aligned_label, #gtk_runner_module, #gtk_scrollbar, #gtk_scrolled_window, #gtk_search_bar, #gtk_search_entry, #gtk_separator_menu_item, #gtk_size_group, #gtk_source_buffer, #gtk_source_view, #gtk_spin_button, #gtk_spinner, #gtk_state_normal, #gtk_status_icon, #gtk_statusbar, #gtk_statusbar_with_handle, #gtk_switch, #gtk_table, #gtk_table2, #gtk_table3, #gtk_text, #gtk_text_buffer, #gtk_text_left_aligned, #gtk_text_view, #gtk_themed_icon, #gtk_toggle_button, #gtk_toolbar, #gtk_tooltip_set_tip, #gtk_tooltip_widget, #gtk_tree_store, #gtk_tree_view, #gtk_tree_view_column, #gtk_vbox, #gtk_vbutton_box, #gtk_vpaned, #gtk_vruler, #gtk_vscale, #gtk_vseparator, #gtk_window, #h1, #h2, #h3, #h4, #h5, #h6, #hbox_text, #hbutton_box, #hcentered_entry, #horizontal_spacer, #html_table2, #icon_theme?, #icon_theme_default, #image_accessories_text_editor, #image_accessories_text_editor_symbolic_symbolic, #image_application_exit, #image_applications_system, #image_applications_system_symbolic_symbolic, #image_audio_speakers, #image_audio_volume_high, #image_audio_volume_low, #image_audio_x_generic_symbolic, #image_avatar_default, #image_bookmark_new, #image_cellular_signal_excellent_symbolic_symbolic, #image_computer, #image_dialog_question, #image_document_open, #image_document_revert, #image_document_save_as_symbolic_symbolic, #image_emblem_urgent, #image_folder_visiting_symbolic, #image_from_file, #image_from_pixbuf, #image_go_down, #image_go_up, #image_information, #image_inode_directory, #image_input_mouse, #image_left_arrow, #image_list_remove, #image_media_optical, #image_network_cellular_connected_symbolic_symbolic, #image_network_wireless_signal_excellent_symbolic, #image_play_button, #image_quit_action, #image_software_update_urgent, #image_starred, #image_system_search, #image_trophy_gold, #image_view_refresh_symbolic_symbolic, #image_web_browser, #increase_font_size, #initialize_gtk3, #interactive_change_the_font, #is_it_an_enter_key?, #is_mouse_button_event?, #is_mouse_button_release_event?, #is_not_decorated, #is_on_roebe?, #is_on_windows?, #label_then_entry, #left_aligned_selectable_text, #left_arrow_emoji, #left_label, #lightblue, #load_rules_from_the_project_css_file, #load_this_yaml_file, #main_file?, #main_font?, #max_height?, #max_resolution?, #max_width?, #mediumseagreen, #minimal_spacer, #missing_the_internal_hash?, #modify_bold_label, #modify_foreground, #modify_label, #more_css_then_apply_the_CSS_rules, #mouse_button_double_click?, #my_title?, #name_of_this_event?, #new_open_file_dialog, #no_file_exists_at, #options, #override_normal_background_color, #p, #padded_hbox, #padded_vbox, #paned_hbox, #paned_vbox, #pango_font_description, #parse_this_file_into_a_table, #percentage_widget, #percentage_widget_with_this_text, #pixbuf_from_file, #pixbuf_loader, #populate_the_internal_hash_with_the_default_values, #populate_this_list_store, #populate_this_list_store3, #populate_this_list_store4, #popup_over_this_widget, #popup_this_text_over_that_widget, #pre, #project_base_directory?, #project_yaml_directory?, #quit_button, #random_colour, #raw_cd, #read_in_from_this_css_theme, #register_sigint, #remove_all_pages, #remove_html, #replace_with_proper_tags, #report_current_dir, #reset_the_internal_variables, #reset_the_internal_variables_as_well_as_the_internal_hash, #resize_based_on_width_and_height_attributes, #response_type_ok?, #return_active_spinner, #return_combo_box_entry, #return_corresponding_gtk_stock_item, #return_current_time, #return_current_time_hh_mm_only, #return_debug_widget, #return_default_CSS_rules, #return_default_grid, #return_editable_cell_renderer_text, #return_emoji, #return_inactive_spinner, #return_p_tag, #return_pixbuf_based_on_the_default_icon_theme, #return_popover, #return_pwd, #return_scale_button, #return_scrollable_CSS_in_use_widget, #return_the_html_colours, #return_the_path_to_the_file_called_project_css, #return_the_title_from_the_config_file, #return_this_image_based_on_the_default_icon_theme, #return_top_bar, #rev, #right_arrow_emoji, #run_in_background, #run_in_background_if_is_on_roebe?, #run_main, #sbr, #scroll_down?, #scroll_up?, #sdir, #selectable_text, #set_background, #set_font, #set_font_in_use, #set_font_in_use_for_this_application, #set_this_widget, #set_width, #seven_strings, #sfancy, #sfile, #show_all, #show_debug_information, #simple_quit_button, #simplified_button_box, #six_strings, #smiley1, #smiley2, #smiley3, #smiley4, #smiley5, #spacer, #standard_file_chooser_dialog, #steelblue, #store_the_CSS_rules_into_a_local_file, #string_list_store, #swarn, #table2, #table3, #table4, #text_then_entry, #three_strings, #title?, #title_font, #title_height_width, #title_width_height, #title_width_height_font, #to_font_description, #to_utf, #tomato, #top_left, #try_to_require_the_open_gem, #try_to_set_the_xorg_buffer, #two_strings, #ungrab_application, #unicode_horizontal_spacer, #upon_delete_event_quit_the_application, #use_a_popular_reset_variant, #use_config_file?, #use_gtk?, #use_gtk_paradise_project_css_file, #use_lean_CSS_rules, #use_libui?, #use_these_css_classes, #uses_gtk2?, #uses_gtk3?, #uses_gtk4?, #vbutton_box, #vertical_spacer, #vte_terminal, #we_use_this_gtk_version?, #white_background, #width_height, #width_height_font, #width_title_height, #window_manager_name?, #window_or_vbox, #word_wrap, #write_what_into, #xid_value?

Methods included from InternalHashModule

#clear_the_internal_hash, #commandline_arguments?, #first_argument?, #height?, #infer_the_namespace, #internal_hash?, #my_title?, #namespace?, #parent_widget?, #reset_the_internal_hash, #set_commandline_arguments, #set_height, #set_my_title, #set_parent_widget, #set_width, #width?

Methods inherited from Box

#add_space, #left_aligned_text, #text

Constructor Details

#initialize(commandline_arguments = ARGV, run_already = true) ⇒ NotebookController

#

initialize

#


54
55
56
57
58
59
60
61
62
63
64
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 54

def initialize(
    commandline_arguments = ARGV,
    run_already           = true
  )
  super(:vertical)
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

Gtk::NotebookController[]

#


314
315
316
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 314

def self.[](i = ARGV)
  new(i)
end

.run(i = ARGV) ⇒ Object

#

Gtk::NotebookController.run

#


321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 321

def self.run(
    i = ARGV
  )
  require 'gtk_paradise/run'
  _ = ::Gtk::NotebookController.new(i)
  r = ::Gtk.run
  r << _
  # ======================================================================= #
  # Next we will add several alt+key shortcuts.
  # ======================================================================= #
  r.alt_shortcut(1, 'focus_entry(0)')
  r.alt_shortcut(2, 'focus_entry(1)')
  r.alt_shortcut(3, 'focus_entry(2)')
  r.alt_shortcut(4, 'focus_entry(3)')
  r.alt_shortcut(5, 'focus_entry(4)')
  r.alt_shortcut(6, 'focus_entry(5)')
  r.alt_shortcut(7, 'focus_entry(6)')
  r.alt_shortcut(8, 'focus_entry(7)')
  r.alt_shortcut(9, 'focus_entry(8)')
  r.automatic
  r.top_left_then_run
end

Instance Method Details

#add_the_componentsObject

#

add_the_components

This method will add the individual components onto the main gtk-notebook widget.

#


173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 173

def add_the_components
  # === @notebook
  @notebook = gtk_notebook
  @notebook.focus_on_the_first_tab
  @notebook.do_show_the_tabs
  @notebook.do_show_the_border
  @notebook.the_tabs_appear_on_top
  @notebook.is_scrollable
  @notebook.enable_popup = true
  @dataset.each_pair {|file_that_is_to_be_required, widget_namespace|
    # ===================================================================== #
    # The entries may look like this:
    #
    #   "wget_wrapper"=>"Gtk::WgetWrapper"
    #
    # ===================================================================== #
    # ===================================================================== #
    # The next case-when menu is used to sanitize some "shortcuts".
    # That way we do not have to hardcode it into the .yml file,
    # but could still do so if we'd like to.
    # ===================================================================== #
    case file_that_is_to_be_required # case tag
    # ===================================================================== #
    # === wetter_app
    # ===================================================================== #
    when /wetter(_|-)?app/
      file_that_is_to_be_required = 'chemistry_paradise/gui/gtk3/wetter/wetter.rb'
    # ===================================================================== #
    # === ask_exam_question
    # ===================================================================== #
    when 'ask_exam_question'
      file_that_is_to_be_required = 'studium/gui/gtk3/ask_exam_question/ask_exam_question.rb'
    # ===================================================================== #
    # === shell
    # ===================================================================== #
    when 'shell'
      file_that_is_to_be_required = 'roebe/gui/gtk3/shell/shell.rb'
    # ===================================================================== #
    # === my_calendar
    # ===================================================================== #
    when 'my_calendar'
      file_that_is_to_be_required = 'gtk_paradise/widgets/gtk3/my_calendar/my_calendar.rb'
    # ===================================================================== #
    # === tabble
    # ===================================================================== #
    when 'application_menu',
         'tabble'
      file_that_is_to_be_required = 'gtk_paradise/widgets/gtk3/application_menu/application_menu.rb'
    # ===================================================================== #
    # === Custom entries
    # ===================================================================== #
    when 'show_icon_theme',
         'select_file',
         'lspci',
         'vote_box_widget',
         'user',
         'google_searcher',
         'flip_state_widget',
         'contacts',
         'colour_filled_widget',
         'unicode_clock',
         'emoji_toggle_widget',
         'sys_message',
         'random_image',
         'editor',
         'coloured_bar',
         'cdripper',
         'maximize_button',
         'pid_displayer',
         'list_store_table3',
         'psaux_viewer',
         'directory_content_widget',
         'tabby',
         'simple_clock',
         'burning_widget',
         'wget_wrapper',
         'mini_clock',
         'coloured_square',
         'emoji_widget',
         'stopwatch',
         'lsmod',
         'conky'
         # 'file_viewer' 
      file_that_is_to_be_required = PATH_TO_GTK_PARADISE+
                                    file_that_is_to_be_required+'/'+
                                    file_that_is_to_be_required+'.rb'
    end
    if file_that_is_to_be_required
      begin
        require file_that_is_to_be_required
        _ = eval(widget_namespace).new
        use_this_title = File.basename(
          file_that_is_to_be_required
        ).sub(
          /#{File.extname(file_that_is_to_be_required)}$/,''
        )
        if _.respond_to?(:title?) and _.title? and
          !_.title?.empty?
          use_this_title = _.title?.to_s
        end
        # =================================================================== #
        # Finally append that widget onto the notebook.
        # =================================================================== #
        @notebook.append_this_widget(_, use_this_title)
      rescue LoadError => error
        pp error
        e 'Unavailable: '+
          sfile(file_that_is_to_be_required)
      end
    end
  }
  add_the_notebook
end

#add_the_notebookObject

#

add_the_notebook

#


290
291
292
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 290

def add_the_notebook
  add(@notebook)
end

#border_size?Boolean

#

border_size?

#

Returns:

  • (Boolean)


105
106
107
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 105

def border_size?
  2
end

#connect_skeletonObject

#

connect_skeleton (connect tag)

#


297
298
299
300
301
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 297

def connect_skeleton
  abort_on_exception
  add_the_components
  handle_middle_mouse_button_click_event
end

#create_skeletonObject

#

create_skeleton (create tag, skeleton tag)

#


150
151
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 150

def create_skeleton
end

#focus_entry(i = 0) ⇒ Object

#

focus_entry

#


123
124
125
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 123

def focus_entry(i = 0)
  @notebook.focus_on_this_tab(i.to_i)
end

#grab_applicationObject

#

grab_application

Use this to grab the application. This is mostly legacy code only, though.

#


159
160
161
162
163
164
165
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 159

def grab_application
  Gtk.grab_add(self)
  Gdk.pointer_grab(self.window, 
    true, Gdk::Event::BUTTON_PRESS_MASK, self.window, 
    Gdk::Cursor.new(Gdk::Cursor::FLEUR),
    Gdk::Event::CURRENT_TIME)
end

#handle_middle_mouse_button_click_eventObject

#

handle_middle_mouse_button_click_event

This method will handle the event when the user presses the middle mouse button.

#


133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 133

def handle_middle_mouse_button_click_event
  signal_connect(:event) { |widget, event|
    # ===================================================================== #
    # The user pressed the middle mouse button here. For now this
    # means that the user wants to get rid of the tab; in the future
    # we may modify this behaviour, but for now this has to suffice.
    # ===================================================================== #
    if is_middle_mouse_button_click_event?(event)
      current_tab = @notebook.page
      @notebook.remove_page(current_tab)
    end
  }
end

#padding?Boolean

#

padding?

#

Returns:

  • (Boolean)


98
99
100
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 98

def padding?
  4
end

#resetObject

#

reset (reset tag)

#


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
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 69

def reset
  reset_the_internal_variables_as_well_as_the_internal_hash
  infer_the_namespace
  # ======================================================================= #
  # === @configuration
  # ======================================================================= #
  @configuration = [true, __dir__, namespace?]
  # ======================================================================= #
  # === Set the title, width, height and the font in use.
  # ======================================================================= #
  title_width_height_font(TITLE, WIDTH, HEIGHT, USE_THIS_FONT)
  upon_delete_event_quit_the_application
  use_gtk_paradise_project_css_file 
  infer_the_size_automatically
  # ======================================================================= #
  # === @file_control_panel
  #
  # See: bl $GTK_PARADISE/yaml/notebook_controller.yml
  # ======================================================================= #
  @file_control_panel = "#{Gtk.project_yaml_directory?}notebook_controller.yml"
  # ======================================================================= #
  # === @dataset
  # ======================================================================= #
  @dataset = nil
end

#runObject

#

run (run tag)

#


306
307
308
309
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 306

def run
  try_to_load_the_yaml_file
  create_skeleton_then_connect_skeleton
end

#try_to_load_the_yaml_file(i = @file_control_panel) ⇒ Object

#

try_to_load_the_yaml_file

#


112
113
114
115
116
117
118
# File 'lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb', line 112

def try_to_load_the_yaml_file(
    i = @file_control_panel
  )
  if File.exist? i
    @dataset = YAML.load_file(i)
  end
end