Class: MultimediaParadise::GUI::UniversalWidgets::InformationAboutAMp3File

Inherits:
Base
  • Object
show all
Includes:
UniversalWidgets::BaseModule
Defined in:
lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb

Overview

MultimediaParadise::GUI::UniversalWidgets::InformationAboutAMp3File

Constant Summary collapse

TITLE =
#

TITLE

#
'Information about a .mp3 file'
WIDTH =
#

WIDTH

#
'45% or minimum 550px'
HEIGHT =
#

HEIGHT

#
'12% or minimum 80px'
ID_TAGGER_TO_USE_FOR_THE_MP3_FILES =
#

ID_TAGGER_TO_USE_FOR_THE_MP3_FILES

This constant presently can be either :taglib or :id3lib.

:taglib is the default since as of 2021. I transitioned away from :id3lib for several reasons.

Depending on the value of this constant, a different library will be used for tagging the .mp3 files at hand.

#
:taglib
PATH_TO_THE_LOCAL_AUDIO_DIRECTORY =
#

PATH_TO_THE_LOCAL_AUDIO_DIRECTORY

#
MultimediaParadise.local_audio_directory?
N_TIMES_UNICODE_HORIZONTAL_SPACER =
#

N_TIMES_UNICODE_HORIZONTAL_SPACER

#
11
FONT_SIZE =
#

FONT_SIZE

#
18
USE_THIS_FONT =
#

USE_THIS_FONT

#
"Liberation serif #{FONT_SIZE}"
LARGER_FONT =
#

LARGER_FONT

#
"Liberation serif #{FONT_SIZE+6}"
SLIGHTLY_SMALLER_FONT =
#

SLIGHTLY_SMALLER_FONT

#
"Liberation serif #{FONT_SIZE-2}"
SMALLEST_FONT =
#

SMALLEST_FONT

#
"Liberation serif #{FONT_SIZE-4}"
FONT_TO_USE_FOR_THE_MAIN_DESCRIPTION =
#

FONT_TO_USE_FOR_THE_MAIN_DESCRIPTION

This is the font for use in the top header-bar. The user will typically see this font first.

Miriam Libre is better than Noto Serif, in my opinion.

#
'Miriam Libre 20'

Constants inherited from Base

Base::ERROR, Base::ERROR_LINE, Base::NAMESPACE, Base::USE_THIS_NAMESPACE_FOR_THE_COLOURS, Base::USE_THIS_NAMESPACE_FOR_THE_CORE_COLOURS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#actions, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #cartoons_directory?, #clear_the_internal_hash, #cliner, #cliner_with_time_stamp, #colourized_comment, #copy_file, #crimson, #dataset_from_file_video_collection, #dd_mm_yyyy, #debug?, #default_readlines, #directory_to_realvids?, #do_not_use_opn, #dodgerblue, #does_the_video_player_support_this_commandline?, #e, #ecomment, #ecrimson, #efancy, #enable_debug, #ensure_main_encoding, #ensure_that_the_output_directory_exists, #eparse, #erev, #esystem, #ewarn, #file_video_collection?, #filter_for_audio_files, #filter_for_video_files, #forestgreen, #gold, #grey, #hh_mm_ss, #home_x_video?, #indianred, #infer_the_namespace, #internal_hash?, #is_audio_file?, #is_mkv?, #is_mp3?, #is_mp4?, #is_multimedia_file?, #is_on_roebe?, #is_video_file?, #konsole_colour_peru, #lightblue, #lightgreen, #load_yaml, #local_audio_directory?, #log_dir?, #map_symbol_to_locally_existing_file, #mediumorchid, #mediumpurple, #mediumslateblue, #mkdir, #move_file, #namespace?, #no_file_exists, #no_file_exists_at, #olive, #olivedrab, #opne, #opnecomment, #opnn, #orange, #palegoldenrod, #palegreen, #powderblue, #project_base_directory?, #rds, #register_sigint, #remove_file, #report_pwd, #reset_the_internal_hash, #return_all_video_files, #return_pwd, #return_random_video, #rev, #royalblue, #save_what_into, #sdir, #seagreen, #seconds_to_time_format, #select_only_video_files_from, #set_be_verbose, #set_use_colours, #sfancy, #sfile, #simp, #skyblue, #slateblue, #springgreen, #steelblue, #swarn, #teal, #time_right_now, #to_hh_mm_ss, #tomato, #true_rev, #try_to_rename_kde_konsole_tab, #ucliner, #use_colours?, #use_opn?, #use_which_video_player?, #verbose_truth, #video_collection?, #violet, #yaml_directory?, #yel

Methods included from CommandlineArgumentsModule

#all_input_starts_with_a_number?, #commandline_arguments?, #commandline_arguments_as_a_string, #first_argument?, #first_non_hyphened_commandline_argument?, #set_commandline_arguments

Constructor Details

#initialize(commandline_arguments = nil, run_already = true) ⇒ InformationAboutAMp3File

#

initialize

#


108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 108

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  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
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

MultimediaParadise::GUI::UniversalWidgets::InformationAboutAMp3File[]

#


589
590
591
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 589

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

.run(i = ARGV) ⇒ Object

#

MultimediaParadise::GUI::UniversalWidgets::InformationAboutAMp3File.run

#


571
572
573
574
575
576
577
578
579
580
581
582
583
584
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 571

def self.run(
    i = ARGV
  )
  require 'gtk_paradise/run'
  _ = ::MultimediaParadise::GUI::Gtk::InformationAboutAMp3File.new(i)
  r = ::Gtk.run
  _.set_parent_widget(r) # Must come before we enable the key-combinations.
  r << _
  r.automatic_size_then_automatic_title
  r.enable_quick_exit
  r.set_background :white
  r.maximize
  r.top_left_then_run
end

Instance Method Details

#border_size?Boolean

#

border_size?

#

Returns:

  • (Boolean)


256
257
258
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 256

def border_size?
  2
end

#connect_the_skeletonObject

#

connect_the_skeleton (connect tag)

#


497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 497

def connect_the_skeleton
  abort_on_exception

  outer_vbox = create_vbox
  outer_vbox.minimal(@widget_that_can_be_dragged)

  window = create_window_or_runner(nil, width?, height?, title?)
  window << outer_vbox

  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
  window.set_size(width?, height?)
  do_all_startup_related_actions
  handle_CSS_rules if use_gtk3?
  run_main
end

#create_the_labelsObject

#

create_the_labels (labels tag, label tag)

#


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
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 198

def create_the_labels
  # ======================================================================= #
  # === @label_sample_rate_content
  # ======================================================================= #
  @label_sample_rate_content = modify_bold_label('','black',:right)
  # ======================================================================= #
  # === @label_mpeg_level_content
  # ======================================================================= #
  @label_mpeg_level_content = modify_label('','black',:left)
  # ======================================================================= #
  # === @label_bit_rate_content
  # ======================================================================= #
  @label_bit_rate_content = create_text('')
  # ======================================================================= #
  # === @label_file_size_content
  # ======================================================================= #
  @label_file_size_content = create_label # Keep track of the filesize.
  @label_file_size_content.make_selectable # And it can be selected by the user.
  # ======================================================================= #
  # === @label_duration_content
  #
  # Keep track of the duration of the song, in n seconds.
  # ======================================================================= #
  @label_duration_content = create_label
  @label_duration_content.make_selectable
end

#create_the_skeletonObject

#

create_the_skeleton (create tag, skeleton tag)

#


263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 263

def create_the_skeleton
  create_the_labels
  # ======================================================================= #
  # === grid tag
  #
  # In the old code base before the rewrite in 2021, the resulting widget
  # was a gtk-table rather than a gtk-grid, and the instance variable
  # @table1 was assigned to it. In the rewrite it is now a grid, and
  # the instance variable is no longer necessary. (table tag, grid tag)
  # ======================================================================= #
  grid_containing_the_bitrate_and_associated_values = default_grid
  grid_containing_the_bitrate_and_associated_values.width_height(300, 100)
  grid_containing_the_bitrate_and_associated_values.set_column_spacing(8)
  grid_containing_the_bitrate_and_associated_values.set_row_spacing(8)
  grid_containing_the_bitrate_and_associated_values.set_border_width(2)
  grid_containing_the_bitrate_and_associated_values.clear
  grid_containing_the_bitrate_and_associated_values.use_this_font(smallest_font?)
  label_bit_rate = modify_bold_label(
    'Bit rate:','black',:right, 1
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_bit_rate, :default, :default, 1
  )
  grid_containing_the_bitrate_and_associated_values.right(
    @label_bit_rate_content, :default, :default, 1
  )
  # ======================================================================= #
  # === label_bit_rate_content
  #
  #   label_bit_rate_content = gtk_label('')
  #   grid_containing_the_bitrate_and_associated_values.left(
  #     label_bit_rate_content, :default, :default, 2
  #   )
  #
  # ======================================================================= #
  label_mpeg_level = modify_bold_label(
    'MPEG Level:','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_mpeg_level, :default, :default, 1
  )
  grid_containing_the_bitrate_and_associated_values.right(
    @label_mpeg_level_content, :default, :default, 1
  )
  label_sample_rate = modify_bold_label(
    'Sample rate:','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_sample_rate, :default, :default, 1
  )
  grid_containing_the_bitrate_and_associated_values.right(
    @label_sample_rate_content, :default, :default, 1
  )
  # ======================================================================= #
  # === The Frames-label
  # ======================================================================= #
  label_frames = modify_bold_label(
    'Frames:','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_frames, :default, :default, 1
  )
  label_frames_content = modify_label(
    '','black',:left
  ).right
  grid_containing_the_bitrate_and_associated_values.right(
    label_frames_content, :default, :default, 1
  )
  # ======================================================================= #
  # === The file size of the .mp3 file at hand comes next
  # ======================================================================= #
  label_file_size = modify_bold_label(
    'File size:','black',:right
  ).align_to_the_right

  grid_containing_the_bitrate_and_associated_values.left(
    label_file_size, :default, :default, 1
  )
  grid_containing_the_bitrate_and_associated_values.right(
    @label_file_size_content.left, :default, :default, 1
  )
  # ======================================================================= #
  # === The duration of the song
  # ======================================================================= #
  label_duration = modify_bold_label(
    'Duration (in n seconds):','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_duration, :default, :default, 1
  )
  grid_containing_the_bitrate_and_associated_values.right(
    @label_duration_content.left, :default, :default, 1
  )
  # ======================================================================= #
  # === Spacer
  #
  # Next, we add a "spacer" element - an empty line in the table.
  # ======================================================================= #
  spacer = unicode_horizontal_spacer * n_times_unicode_horizontal_spacer?
  grid_containing_the_bitrate_and_associated_values.left(
    create_text(spacer), :default, :default, 1
  )
  grid_containing_the_bitrate_and_associated_values.new_row

  label_error_protection = modify_bold_label(
    'Error Protection:','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_error_protection, :default, :default, 1
  )
  label_error_protection_content = modify_label('','black',:left).left
  grid_containing_the_bitrate_and_associated_values.right(
    label_error_protection_content, :default, :default, 1
  )
  # ======================================================================= #
  # === Copyright
  # ======================================================================= #
  label_copyright = modify_bold_label(
    'Copyright:','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_copyright, :default, :default, 1
  )
  label_copyright_content = modify_label('','black',:left).left
  grid_containing_the_bitrate_and_associated_values.right(
    label_copyright_content, :default, :default, 1
  )
  # ======================================================================= #
  # === Original
  # ======================================================================= #
  label_original = modify_bold_label(
    'Original:','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_original, :default, :default, 1
  )
  label_original_content = modify_label('','black',:left).left
  grid_containing_the_bitrate_and_associated_values.right(
    label_original_content, :default, :default, 1
  )
  # ======================================================================= #
  # === Emphasis
  # ======================================================================= #
  label_emphasis = modify_bold_label(
    'Emphasis:','black',:right
  ).align_to_the_right
  grid_containing_the_bitrate_and_associated_values.left(
    label_emphasis, :default, :default, 1
  )
  label_emphasis_content = modify_label('','black',:left).left
  grid_containing_the_bitrate_and_associated_values.right(
    label_emphasis_content, :default, :default, 1
  )
  # ======================================================================= #
  # === @widget_that_can_be_dragged
  # ======================================================================= #
  @widget_that_can_be_dragged = can_be_dragged_up_and_down(
    grid_containing_the_bitrate_and_associated_values,
    return_widget_files_in_directory
  )
end
#
#


527
528
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 527

def do_all_startup_related_actions
end

#files_in_directory?Boolean

#

files_in_directory?

#

Returns:

  • (Boolean)


490
491
492
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 490

def files_in_directory?
  @files_in_directory
end

#handle_CSS_rulesObject

#

handle_CSS_rules (CSS tag)

This is currently only in use if gtk3 is in use.

#


173
174
175
176
177
178
179
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 173

def handle_CSS_rules
  use_gtk_paradise_project_css_file
  append_project_css_file
  more_CSS_then_apply_it '

'
end

#label_bit_rate_content?Boolean

#

label_bit_rate_content?

#

Returns:

  • (Boolean)


469
470
471
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 469

def label_bit_rate_content?
  @label_bit_rate_content
end

#label_duration_content?Boolean Also known as: label_duration_content

#

label_duration_content?

#

Returns:

  • (Boolean)


228
229
230
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 228

def label_duration_content?
  @label_duration_content
end

#label_file_size_content?Boolean Also known as: label_file_size_content

#

label_file_size_content?

#

Returns:

  • (Boolean)


235
236
237
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 235

def label_file_size_content?
  @label_file_size_content
end

#label_mpeg_level_content?Boolean Also known as: label_mpeg_level_content

#

label_mpeg_level_content?

#

Returns:

  • (Boolean)


184
185
186
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 184

def label_mpeg_level_content?
  @label_mpeg_level_content
end

#label_sample_rate_content?Boolean Also known as: label_sample_rate_content

#

label_sample_rate_content?

#

Returns:

  • (Boolean)


191
192
193
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 191

def label_sample_rate_content?
  @label_sample_rate_content
end

#large_font_in_use?Boolean

#

large_font_in_use?

This is like the main font, but a bit larger.

#

Returns:

  • (Boolean)


437
438
439
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 437

def large_font_in_use?
  LARGER_FONT
end

#main_font?Boolean Also known as: normal_font?

#

main_font?

#

Returns:

  • (Boolean)


444
445
446
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 444

def main_font?
  USE_THIS_FONT
end

#n_times_unicode_horizontal_spacer?Boolean

#

n_times_unicode_horizontal_spacer?

#

Returns:

  • (Boolean)


428
429
430
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 428

def n_times_unicode_horizontal_spacer?
  N_TIMES_UNICODE_HORIZONTAL_SPACER
end

#padding?Boolean

#

padding?

#

Returns:

  • (Boolean)


249
250
251
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 249

def padding?
  4
end

#resetObject

#

reset (reset tag)

#


124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 124

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)
  infer_the_size_automatically
  # ======================================================================= #
  # === @parent_widget
  # ======================================================================= #
  @parent_widget = nil
end

#reset_the_shared_moduleObject

#

reset_the_shared_module

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

#


151
152
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 151

def reset_the_shared_module
end

#return_path_to_the_local_songs_directory_or_return_pwdObject

#

return_path_to_the_local_songs_directory_or_return_pwd

#


458
459
460
461
462
463
464
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 458

def return_path_to_the_local_songs_directory_or_return_pwd
  _ = "#{Dir.pwd}/".squeeze('/')
  if File.directory? PATH_TO_THE_LOCAL_AUDIO_DIRECTORY
    _ = PATH_TO_THE_LOCAL_AUDIO_DIRECTORY # Use this directory instead.
  end
  return _
end

#return_widget_files_in_directoryObject

#

return_widget_files_in_directory

#


544
545
546
547
548
549
550
551
552
553
554
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 544

def return_widget_files_in_directory
  @files_in_directory = ::Gtk::FilesInDirectory.new
  # ======================================================================= #
  # We must designate the proper parent widget here.
  # ======================================================================= #
  _ = @parent_widget
  _ = self if _.nil?
  @files_in_directory.set_parent_widget(_)
  @files_in_directory.on_click_use_green_border
  return @files_in_directory
end

#runObject

#

run (run tag)

#


533
534
535
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 533

def run
  run_super
end

#set_duration(i) ⇒ Object

#

set_duration

#


476
477
478
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 476

def set_duration(i)
  @label_duration_content.set_text(i.to_s)
end

#set_filesize(i) ⇒ Object

#

set_filesize

#


242
243
244
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 242

def set_filesize(i)
  @label_file_size_content.set_text(i.to_s)
end

#set_main_entry(i) ⇒ Object

#

set_main_entry

This method will be propagated back onto the parent widget, if one has been defined.

#


562
563
564
565
566
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 562

def set_main_entry(i)
  if @parent_widget and @parent_widget.respond_to?(:set_main_entry)
    @parent_widget.set_main_entry(i)
  end
end

#set_parent_widget(i) ⇒ Object

#

set_parent_widget

#


483
484
485
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 483

def set_parent_widget(i)
  @parent_widget = i
end

#slightly_smaller_font?Boolean

#

slightly_smaller_font?

#

Returns:

  • (Boolean)


451
452
453
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 451

def slightly_smaller_font?
  SLIGHTLY_SMALLER_FONT
end

#smaller_font?Boolean

#

smaller_font?

#

Returns:

  • (Boolean)


157
158
159
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 157

def smaller_font?
  SMALLER_FONT
end

#smallest_font?Boolean

#

smallest_font?

#

Returns:

  • (Boolean)


164
165
166
# File 'lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb', line 164

def smallest_font?
  SMALLEST_FONT
end