class RBT::GUI::UniversalWidgets::CompileProgram

Constants

HEIGHT
#

HEIGHT

#
LARGER_FONT
#

LARGER_FONT

#
SMALLER_FONT
#

SMALLER_FONT

#
STATUS_BAR_CONTEXT_ID
#

STATUS_BAR_CONTEXT_ID

#
TITLE
#

TITLE

#
USE_THESE_CSS_RULES
#

USE_THESE_CSS_RULES

#
USE_THIS_FONT
#

USE_THIS_FONT

#
WIDTH
#

WIDTH

#

Public Class Methods

[](i = ARGV) click to toggle source
#

RBT::GUI::UniversalWidgets::CompileProgram[]

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 746
def self.[](i = ARGV)
  new(i)
end
new( commandline_arguments = ARGV, text_for_the_compile_button = 'Compile', run_already = true ) click to toggle source
#

initialize

The second argument is the text which can be shown on the compile-button. The default text is ‘Compile’. The reason why this option exists is because we may want to have this widget ‘Install’ rather than ‘Compile’ sometimes.

#
Calls superclass method RBT::LeanPrototype::new
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 83
def initialize(
    commandline_arguments       = ARGV,
    text_for_the_compile_button = 'Compile',
    run_already                 = true
  )
  super(:vertical) if use_gtk3?
  determine_the_GUI_to_be_used(commandline_arguments) # This must come first, even before reset().
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  on_delete_event_quit_the_application
  set_text_on_the_compile_button(
    text_for_the_compile_button
  )
  run if run_already
end
run( i = ARGV ) click to toggle source
#

RBT::GUI::Gtk::CompileProgram.run

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 727
def self.run(
    i = ARGV
  )
  require 'gtk_paradise/run'
  _ = ::RBT::GUI::Gtk::CompileProgram.new(i)
  r = ::Gtk.run
  _.set_parent_widget(r) # Must come before we enable the key-combinations.
  r << _
  r.add_shortcut(1,  'focus_on_entry', :alt)
  r.add_shortcut(:a, 'focus_on_entry', :alt)
  r.automatic_size_then_automatic_title
  r.enable_quick_exit
  r.set_background :white
  r.top_left_then_run
end

Public Instance Methods

add_msg(i = 'Starting') click to toggle source
#

add_msg

Add a message to the statusbar.

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 354
def add_msg(i = 'Starting')
  @status_bar.push(@status_bar_context_id, i)
end
available_programs?() click to toggle source
#

available_programs?

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 197
def available_programs?
  ::RBT.available_programs?
end
border_size?() click to toggle source
#

border_size?

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 174
def border_size?
  2
end
compile_program( _ = @entry_compile_this_program.text? )
Alias for: do_compile_program
compile_program_in_thread(i) click to toggle source
#

compile_program_in_thread

The argument to this method should be the name of the program, such as “htop”.

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 328
def compile_program_in_thread(i)
  @thread = Thread.new {
    @compile = RBT::Action::Installer.new(i, :do_not_run_yet)
    if ::RBT.is_this_program_included?(i)
      set_show_more_information_about_this_program(i)
    end
    if @button_traditional.active?
      _ = :traditional
    elsif @button_non_traditional.active?
      _ = :non_traditional
    end
    @compile.prefix = _
    @compile.run
    add_msg 'Finished compiling the program '\
            'called `'+i.to_s+'`! End-Time: '+
            return_current_time
  }
        # @thread.join
        @thread = nil
end
connect_the_skeleton() click to toggle source
#

connect_the_skeleton (connect tag)

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 502
def connect_the_skeleton
  abort_on_exception

  outer_vbox = create_vbox # A new vbox.

  hbox_containing_the_label_compile_and_the_entry_compile_this_program = create_hbox
  hbox_containing_the_label_compile_and_the_entry_compile_this_program.minimal(
    @label_compile, 2
  )
  hbox_containing_the_label_compile_and_the_entry_compile_this_program.maximal(
    @entry_compile_this_program, 2
  )
  hbox_containing_the_label_compile_and_the_entry_compile_this_program.minimal(
    @button_compile, 2
  )

  outer_vbox.add(
    hbox_containing_the_label_compile_and_the_entry_compile_this_program
  )
  # ======================================================================= #
  # Build up the vBox that is in the middle.
  # ======================================================================= #
  vbox_middle = vbox
  vbox_middle.minimal(@button_check)
  vbox_middle.minimal(@button_traditional)
  vbox_middle.minimal(@button_non_traditional)
  # ======================================================================= #
  # The arguments to .attach_defaults() are:
  #
  #   left_attach, right_attach, top_attach, bottom_attach
  #
  # ======================================================================= #
  @main_vbox_in_the_middle.minimal(vbox_middle)

  outer_vbox.maximal(@main_vbox_in_the_middle, 4)
  hbox1 = hbox
  hbox1.minimal(@button_kill_the_main_pid)
  outer_vbox.minimal(hbox1, 4)

  @main_vbox_in_the_middle.maximal(
    @widget_holding_information_about_a_particular_program, 1
  )

  outer_vbox.minimal(@status_bar)
  @frame.add(outer_vbox)

  window = create_window_or_runner
  window << @frame

  properly_prepare_this_window(window,
    {
      title:       title?,
      font:        font?,
      width:       width?,
      height:      height?,
      padding:     padding?,
      border_size: border_size?
    }
  )
  window.show_all
  window.top_left
  do_all_startup_related_actions
  run_main
end
create_gtk_entries_and_completions() click to toggle source
#

create_gtk_entries_and_completions

Completion for our EntryCompletion.

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 606
def create_gtk_entries_and_completions
  # ======================================================================= #
  # === @entry_compile_this_program
  #
  # This is the entry that will keep track of the programs that can
  # be compiled.
  # ======================================================================= #
  @entry_compile_this_program = create_entry
  @entry_compile_this_program.bblack1
  @entry_compile_this_program.yellow_background

  completion = gtk_entry_completion
  @entry_compile_this_program.completion = completion

  @list_store = ::Gtk::ListStore.new(String)
  available_programs?.each { |word|
    iter = @list_store.append
    iter[0] = word
  }
  @entry_compile_this_program.on_key_press_event { |widget, event|
    do_compile_the_program if ::Gdk::Keyval.to_name(event.keyval) == 'Return'
  }

  completion.model = @list_store
  completion.text_column = 0
  @entry_compile_this_program.set_max_length(80)
  @entry_compile_this_program.set_text('')
  @entry_compile_this_program.do_focus
  @entry_compile_this_program.align_into_the_middle
  @entry_compile_this_program.enable_scroll_events
  @entry_compile_this_program.signal_connect(:event) { |widget, event|
    case event.event_type.name
    when 'GDK_KEY_PRESS' # on-key-press events
      if enter_key?(event)
        do_compile_this_program(
          @entry_compile_this_program.text?
        )
      end
    else
      # =================================================================== #
      # === Scroll up event
      # =================================================================== #
      if scroll_up?(event)
        unless @active_counter < 1
          @active_counter -= 1
          @combo_box_entry.active = @active_counter
        end
      # =================================================================== #
      # === Scroll down event
      # =================================================================== #
      elsif scroll_down?(event)
        unless @active_counter >= available_programs?.size 
          @active_counter += 1
          @combo_box_entry.active = @active_counter
        end
      end
    end
  }
end
create_the_buttons() click to toggle source
#

create_the_buttons (buttons tag, button tag)

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 361
def create_the_buttons
  # ======================================================================= #
  # === @button_kill_the_main_pid
  # ======================================================================= #
  @button_kill_the_main_pid = button(
    '_Stop the current compilation run', self, :use_mnemonics
  ) {
    :do_kill_the_main_pid
  }
  @button_kill_the_main_pid.clear_background
  @button_kill_the_main_pid.bblack1
  @button_kill_the_main_pid.set_size_request(120, 30)
  @button_kill_the_main_pid.on_hover(:lightblue)
  # ======================================================================= #
  # === @button_compile
  #
  # Add the compile-button next.
  # ======================================================================= #
  @button_compile = button("_#{@text_on_the_compile_button}")
  @button_compile.on_clicked { do_compile_program }
  @button_compile.modify_background(:active,   :coral)
  @button_compile.modify_background(:normal,   :cornsilk)
  @button_compile.modify_background(:prelight, :aliceblue)
  @button_compile.bblack2
  @button_compile.hint =
    'Compile the given program by <b>clicking on this button</b>.'
end
create_the_checkboxes() click to toggle source
#

create_the_checkboxes

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 223
def create_the_checkboxes
  @button_check           = check_button('Include Dependencies', :do_not_underline)
  @button_check.hint = 'Check this button if you want to compile '\
    'dependencies as well. This may lead to problems, though, so '\
    'it is almost always better to compile single programs, as-is.'
  @button_traditional     = check_button('traditional')
  @button_traditional.hint =
    'This will use the following target prefix: <b>/usr/</b>' 
  @button_non_traditional = check_button('non-traditional')
  @button_non_traditional.hint = 'This will use the app-dir '\
    'prefix for the program that is to be compiled.'
  # ======================================================================= #
  # By default, the traditional button is enabled.
  # ======================================================================= #
  @button_traditional.set_active(true)
  @button_traditional.on_clicked {
    if @button_traditional.active?
      @button_non_traditional.is_inactive
    else
      @button_non_traditional.is_active
    end
  }
  @button_non_traditional.on_clicked {
    if @button_non_traditional.active?
      @button_traditional.is_inactive
    else
      @button_traditional.is_active
    end
  }
end
create_the_combo_box() click to toggle source
#

create_the_combo_box

It appears as if the gtk-combo-box is currently (March 2021) not in use.

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 572
def create_the_combo_box
  @combo_box_entry = create_combo_box_entry
  available_programs?.each { |val|
    @combo_box_entry.append_text(val)
  }
  @combo_box_entry.add_tearoffs = true
  @combo_box_entry.active = 0
  # @combo_box_entry.on_changed {
  #   # ===================================================================== #
  #   # Whenever the main entry in the combo-box is changed, we will
  #   # also update other parts of this widget.
  #   # ===================================================================== #
  #   @entry_compile_this_program.set_text(
  #     @combo_box_entry.active_text.to_s
  #   )
  #   @entry_show_information_about_this_program.set_text(
  #     @combo_box_entry.active_text.to_s
  #   )
  #   show_information_about_the_given_program # And update the view on the bottom right as well.
  # }
end
create_the_labels() click to toggle source
#

create_the_labels

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 683
def create_the_labels
  # ======================================================================= #
  # === @label_compile
  # ======================================================================= #
  @label_compile = create_label(
    'Input the program you wish to compile there → '
  )
  @label_compile.make_selectable
  @label_compile.use_this_font = :hack_18
  @label_compile.hint =
    'Type <b>the name of the program</b> that you '\
    '<b>wish to compile</b> here.'
end
create_the_main_frame() click to toggle source
#

create_the_main_frame (frame tag)

This is the outer gtk-frame.

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 465
def create_the_main_frame
  @frame = create_frame
  @frame.set_border_width(15)
  @frame.label_widget = create_label.set_markup(
    %Q(<span size="large" weight="bold" foreground="#183503"> RBT Version: #{RBT::VERSION} </span>), use_underline: true
  )
  @frame.label_widget.make_selectable
end
create_the_main_vbox_in_the_middle() click to toggle source
#

create_the_main_vbox_in_the_middle

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 392
def create_the_main_vbox_in_the_middle
  @main_vbox_in_the_middle = create_vbox
end
create_the_skeleton() click to toggle source
#

create_the_skeleton (create tag, skeleton tag)

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 181
def create_the_skeleton
  create_the_labels
  create_the_main_vbox_in_the_middle
  create_gtk_entries_and_completions
  create_the_statusbar
  create_the_main_frame
  create_the_buttons
  create_the_checkboxes
  create_the_widget_holding_information_about_a_particular_program
  create_the_combo_box
end
create_the_statusbar() click to toggle source
#

create_the_statusbar

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 484
def create_the_statusbar
  @status_bar = create_statusbar { :has_resize_grip }
  if @status_bar.respond_to? :has_resize_grip=
    @status_bar.has_resize_grip = true
  end
  @status_bar_context_id = @status_bar.get_context_id(STATUS_BAR_CONTEXT_ID)
end
create_the_widget_holding_information_about_a_particular_program() click to toggle source
#

create_the_widget_holding_information_about_a_particular_program (middle tag)

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 406
def create_the_widget_holding_information_about_a_particular_program
  @widget_holding_information_about_a_particular_program = create_hbox
  button = create_button("_Show information about\nthis program →")
  button.bblack2
  button.modify_background(:active, :coral)
  button.modify_background(:normal, :cornsilk)
  button.modify_background(:prelight, :aliceblue)
  button.hint = ' Clicking on this button will <b>display information '\
                ' about the program</b> on the right-hand side. '
  button.on_clicked {
    show_information_about_the_given_program
  }
  @widget_holding_information_about_a_particular_program.minimal(
    button, 3
  )
  # ======================================================================= #
  # === @entry_show_information_about_this_program
  #
  # Next add the user-input for the program the user wants to see
  # more information about.
  # ======================================================================= #
  @entry_show_information_about_this_program = create_entry
  @entry_show_information_about_this_program.bblack1
  @entry_show_information_about_this_program.center
  @entry_show_information_about_this_program.on_enter {
    show_information_about_the_given_program
  }
  vbox = create_vbox
  _ = image_accessories_text_editor_symbolic_symbolic
  _.hint = 'Input the name of the program that you want to see '\
           'more information shown about, below this image.'
  vbox.minimal(_, 2)
  vbox.maximal(@entry_show_information_about_this_program, 2)
  @widget_holding_information_about_a_particular_program.minimal(
    vbox, 3
  )
  # Next create, then add, the text-buffer and text-view.
  @text_buffer_showing_information_about_the_given_program = create_text_buffer
  @source_view_showing_information_about_the_given_program = create_text_view(
    @text_buffer_showing_information_about_the_given_program
  )
  @source_view_showing_information_about_the_given_program.css_class('blightgreen1')
  @source_view_showing_information_about_the_given_program.set_font(:noto_mono_18)
  @source_view_showing_information_about_the_given_program.set_size_request(
    400, 200
  )
  @scrolled_window = create_scrolled_window(
    @source_view_showing_information_about_the_given_program
  )
  @widget_holding_information_about_a_particular_program.maximal(
    @scrolled_window
  )
end
deselect_the_first_label() click to toggle source
#

deselect_the_first_label

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 676
def deselect_the_first_label
  @label_compile.deselect
end
deselect_the_frame() click to toggle source
#

deselect_the_frame

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 477
def deselect_the_frame
  @frame.label_widget.deselect
end
do_compile_program( _ = @entry_compile_this_program.text? ) click to toggle source
#

do_compile_program

Use this is you want to compile something.

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 305
def do_compile_program(
    _ = @entry_compile_this_program.text?
  )
  if _.empty?
    add_msg('Please supply a valid program name.')
  else
    e "Compiling #{_} now."
    add_msg 'Trying to compile the program '\
            'called `'+_+'` now. Start-Time: '+
            return_current_time
    compile_program_in_thread(_)
  end
end
do_compile_the_program( _ = @entry_compile_this_program.text? )
Alias for: do_compile_program
do_compile_this_program( _ = @entry_compile_this_program.text? )
Alias for: do_compile_program
do_kill_the_main_pid() click to toggle source
#

do_kill_the_main_pid

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 700
def do_kill_the_main_pid
  if @compile
    if is_on_roebe?
      e ::Colours.steelblue(
        'Now delegating towards the compile-object, to kill the main PID.'
        )
    end
    @compile.kill_the_main_pid
  end
end
entry_for_compiling_this_program?() click to toggle source
#

entry_for_compiling_this_program?

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 597
def entry_for_compiling_this_program?
  @entry_compile_this_program
end
favicon?() click to toggle source
#

favicon?

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 135
def favicon?
  :tabble
end
focus_on_entry() click to toggle source
#

focus_on_entry

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 216
def focus_on_entry
  @entry_compile_this_program.do_focus 
end
Also aliased as: jump_into_the_main_entry
handle_CSS_rules() click to toggle source
#

handle_CSS_rules (CSS tag)

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 149
def handle_CSS_rules
  use_gtk_paradise_project_css_file
  append_project_css_file
  more_CSS_then_apply_it(USE_THESE_CSS_RULES)
end
jump_into_the_main_entry()
Alias for: focus_on_entry
jump_into_the_main_textview() click to toggle source
#

jump_into_the_main_textview

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 669
def jump_into_the_main_textview
  @source_view_showing_information_about_the_given_program.do_focus
end
padding?() click to toggle source
#

padding?

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 167
def padding?
  10
end
reset() click to toggle source
#

reset (reset tag)

#
Calls superclass method RBT::LeanPrototype#reset
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 104
def reset
  super() if respond_to?(:super)
  reset_the_shared_module # This can come early.
  reset_the_base_module
  reset_the_internal_variables
  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)
  if use_gtk3?
    handle_CSS_rules
  end
  infer_the_size_automatically
  # ======================================================================= #
  # === @active_counter
  # ======================================================================= #
  @active_counter = 0 # will denote which program is active
  # ======================================================================= #
  # === @compile
  # ======================================================================= #
  @compile = nil
end
reset_the_shared_module() click to toggle source
#

reset_the_shared_module

This method can be used for ruby-gtk3 and ruby-libui, among other toolkits.

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 161
def reset_the_shared_module
end
run() click to toggle source
#

run (run tag)

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 495
def run
  run_super
end
Also aliased as: start_gui_application
set_show_more_information_about_this_program(i) click to toggle source
#

set_show_more_information_about_this_program

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 257
def set_show_more_information_about_this_program(i)
  @entry_show_information_about_this_program.set_text(i)
  show_information_about_the_given_program
end
set_text_on_the_compile_button( i ) click to toggle source
#

set_text_on_the_compile_button

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 204
def set_text_on_the_compile_button(
    i
  )
  if i.is_a? Array
    i = i.join(' ').strip
  end
  @text_on_the_compile_button = i
end
show_information_about_the_given_program( i = @entry_show_information_about_this_program.text? ) click to toggle source
#

show_information_about_the_given_program

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 265
def show_information_about_the_given_program(
    i = @entry_show_information_about_this_program.text?
  )
  if i.empty?
    do_popup(
      message:          'Please supply a name for a program.',
      over_this_widget: @entry_show_information_about_this_program
    )
  else
    # ===================================================================== #
    # Next, we will build up the string that will be displayed in the
    # text-buffer.
    # ===================================================================== #
    dataset = RBT.cookbook_dataset_for(i) # This will return a Hash.
    binaries = dataset[:binaries]
    _ = ''.dup
    _ << '<b>short description</b>: '+dataset[:short_description].to_s+N
    _ << '<b>description</b>: '+
          RBT.word_wrap(dataset[:description].to_s, 45).strip+N
    if binaries and !binaries.empty?
      _ << '<b>binaries installed by this program</b>: '+
            binaries.join(', ').strip+"\n"
    end
    _ << '<b>url1</b>: '+dataset[:url1].to_s+N
    _ << '<b>url2</b>: '+dataset[:url2].to_s+N
    _ << '<b>homepage</b>: '+dataset[:homepage].to_s+N
    _ << '<b>last_update</b>: '+dataset[:last_update].to_s+N
    # ===================================================================== #
    # Modify the text. The variable next is a Gtk::TextView instance.
    # ===================================================================== #
    text_buffer?.set_text(_)
    text_buffer?.do_markify
  end
end
smaller_font?() click to toggle source
#

smaller_font?

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 142
def smaller_font?
  SMALLER_FONT
end
start_gui_application()
Alias for: run
text_buffer_showing_information_about_the_given_program?() click to toggle source
#

text_buffer_showing_information_about_the_given_program?

#
# File lib/rbt/gui/universal_widgets/compile_program/compile_program.rb, line 399
def text_buffer_showing_information_about_the_given_program?
  @text_buffer_showing_information_about_the_given_program
end
Also aliased as: text_buffer?