module RBT::GUI::Gtk::CompileProgramModule

Constants

HEIGHT
#

HEIGHT

#
STATUS_BAR_CONTEXT_ID
#

STATUS_BAR_CONTEXT_ID

#
TITLE
#

TITLE

#
USE_THIS_FONT
#

USE_THIS_FONT

#
WIDTH
#

WIDTH

#

Public Class Methods

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
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 62
def initialize(
    commandline_arguments       = ARGV,
    text_for_the_compile_button = 'Compile',
    run_already                 = true
  )
  super(:vertical)
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  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::CompileProgramModule.run

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 489
def self.run(
    i = ARGV
  )
  require 'gtk_paradise/run'
  _ = ::RBT::GUI::Gtk::CompileProgram.new(i)
  r = ::Gtk.run
  r << _
  r.add_shortcut(1,  'focus_on_entry', :alt)
  r.add_shortcut(:a, 'focus_on_entry', :alt)
  r.modify_background(:normal, :white)
  r.automatic_title
  r.determine_the_size_from_the_child_widget
  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/shared_code/compile_program/compile_program_module.rb, line 611
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/shared_code/compile_program/compile_program_module.rb, line 136
def available_programs?
  ::RBT.available_programs?
end
border_size?() click to toggle source
#

border_size?

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 111
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/shared_code/compile_program/compile_program_module.rb, line 585
def compile_program_in_thread(i)
  @thread = Thread.new {
    @compile = RBT::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_skeleton() click to toggle source
#

connect_skeleton (connect tag)

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 219
def connect_skeleton
  abort_on_exception
  hbox_containing_the_label_compile_and_the_entry_compile_this_program = gtk_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 = gtk_vbox
  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)
  maximal(@frame, 8)
end
create_gtk_combo_box() click to toggle source
#

create_gtk_combo_box

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

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 355
def create_gtk_combo_box
  @combo_box_entry = gtk_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_gtk_entries_and_completions() click to toggle source
#

create_gtk_entries_and_completions

Completion for our EntryCompletion.

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 389
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 = gtk_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_list_store(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_skeleton() click to toggle source
#

create_skeleton (create tag)

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 338
def create_skeleton
  create_the_main_vbox_in_the_middle
  create_gtk_entries_and_completions
  create_the_labels
  create_the_statusbar
  create_the_main_gtk_frame
  create_the_buttons
  create_the_checkboxes
  create_the_widget_holding_information_about_a_particular_program
  create_gtk_combo_box
end
create_the_buttons() click to toggle source
#

create_the_buttons (buttons tag, button tag)

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 452
def create_the_buttons
  # ======================================================================= #
  # === @button_kill_the_main_pid
  # ======================================================================= #
  @button_kill_the_main_pid = button(
    '_Stop the current compilation run'
  )
  @button_kill_the_main_pid.on_clicked { 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/shared_code/compile_program/compile_program_module.rb, line 186
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: /usr/' 
  @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_labels() click to toggle source
#

create_the_labels

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 118
def create_the_labels
  # ======================================================================= #
  # === @label_compile
  # ======================================================================= #
  @label_compile = label(
    'Input which program you wish to compile → '
  )
  @label_compile.make_selectable
  @label_compile.set_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_gtk_frame() click to toggle source
#

create_the_main_gtk_frame

This is the outer gtk-frame.

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 156
def create_the_main_gtk_frame
  @frame = gtk_frame
  @frame.set_border_width(15)
  @frame.label_widget = gtk_label.set_markup(
    %Q(<span size="large" weight="bold" foreground="#183503"> RBT Version: #{RBT::VERSION} </span>), true
  )
end
create_the_main_vbox_in_the_middle() click to toggle source
#

create_the_main_vbox_in_the_middle

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 324
def create_the_main_vbox_in_the_middle
  @main_vbox_in_the_middle = gtk_vbox
end
create_the_statusbar() click to toggle source
#

create_the_statusbar

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 143
def create_the_statusbar
  @status_bar = gtk_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/shared_code/compile_program/compile_program_module.rb, line 268
def create_the_widget_holding_information_about_a_particular_program
  @widget_holding_information_about_a_particular_program = gtk_hbox
  button = gtk_button("_Show information about\nthis program →")
  button.bblack2
  button.modify_background(:active, :coral)
  button.modify_background(:normal, :cornsilk)
  button.modify_background(:prelight, :aliceblue)
  button.fancy_tooltips = ' 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 = gtk_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 = gtk_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
  )
  @text_buffer_showing_information_about_the_given_program = gtk_text_buffer
  @source_view_showing_information_about_the_given_program = gtk_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 = gtk_scrolled_window(
    @source_view_showing_information_about_the_given_program
  )
  @widget_holding_information_about_a_particular_program.maximal(
    @scrolled_window
  )
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/shared_code/compile_program/compile_program_module.rb, line 555
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/shared_code/compile_program/compile_program_module.rb, line 574
def do_kill_the_main_pid
  @compile.kill_the_main_pid if @compile
end
entry_for_compiling_this_program?() click to toggle source
#

entry_for_compiling_this_program?

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 380
def entry_for_compiling_this_program?
  @entry_compile_this_program
end
focus_on_entry() click to toggle source
#

focus_on_entry

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 179
def focus_on_entry
  @entry_compile_this_program.do_focus 
end
padding?() click to toggle source
#

padding?

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

reset (reset tag)

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 81
def reset
  reset_the_internal_variables
  infer_the_namespace
  # ======================================================================= #
  # === @configuration
  # ======================================================================= #
  @configuration = [true, __dir__, namespace?]
  title_width_height_font(TITLE, WIDTH, HEIGHT, USE_THIS_FONT)
  # ======================================================================= #
  # === @active_counter
  # ======================================================================= #
  @active_counter = 0 # will denote which program is active
  # ======================================================================= #
  # === @compile
  # ======================================================================= #
  @compile = nil
  use_gtk_paradise_project_css_file
  infer_the_size_automatically
end
run() click to toggle source
#

run (run tag)

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 482
def run
  create_skeleton_then_connect_skeleton
end
set_show_more_information_about_this_program(i) click to toggle source
#

set_show_more_information_about_this_program

#
# File lib/rbt/gui/shared_code/compile_program/compile_program_module.rb, line 507
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/shared_code/compile_program/compile_program_module.rb, line 167
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/shared_code/compile_program/compile_program_module.rb, line 515
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
text_buffer_showing_information_about_the_given_program?() click to toggle source
#

text_buffer_showing_information_about_the_given_program?

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