class Fidgit::MessageDialog
A simple dialog that manages a message with a set of buttons beneath it.
Constants
- VALID_TYPES
Attributes
type[R]
Public Class Methods
new(message, options = {}, &block)
click to toggle source
@param [String] message
@option options [Symbol] :type (:ok) One from :ok, :ok_cancel, :yes_no, :yes_no_cancel, :quit_cancel or :quit_save_cancel @option options [String] :ok_text (“OK”) @option options [String] :yes_text (“Yes”) @option options [String] :no_text (“No”) @option options [String] :cancel_text (“Cancel”) @option options [String] :save_text (“Save”) @option options [String] :quit_text (“Quit”) @option options [Boolean] :show (true) Whether to show the message immediately (otherwise need to use show
later).
@yield when the dialog is closed. @yieldparam [Symbol] result :ok, :yes, :no, :quit, :save or :cancel, depending on the button pressed.
Calls superclass method
Fidgit::DialogState::new
# File lib/fidgit/states/message_dialog.rb, line 22 def initialize(message, options = {}, &block) options = { type: :ok, ok_text: "OK", yes_text: "Yes", no_text: "No", quit_text: "Quit", save_text: "Save", cancel_text: "Cancel", show: true, background_color: DEFAULT_BACKGROUND_COLOR, border_color: DEFAULT_BORDER_COLOR, width: $window.width / 2 }.merge! options @type = options[:type] raise ArgumentError, ":type must be one of #{VALID_TYPES}, not #{@type}" unless VALID_TYPES.include? @type super(options) # Dialog is forced to the centre. options[:align_h] = options[:align_v] = :center vertical options do text_area(text: message, enabled: false, width: options[:width] - padding_left - padding_right) horizontal align_h: :center do @type.to_s.split('_').each do |type| button(options[:"#{type}_text"]) do hide block.call type.to_sym if block end end end end show if options[:show] end