class Kita::Application

LocaleSettings.new Main application class

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/kita.rb, line 19
def initialize
  super 'uk.danbishop.kita', :handles_open
  # Construct a Gtk::Builder instance
  @builder = Gtk::Builder.new(file: "#{File.expand_path(File.dirname(__dir__))}/ui/builder.ui")
  # Set menu toggles to match settings
  menu_load
  # Now connect signals
  @builder.connect_signals { |handler| method(handler) }
  # Initiate Question class
  @question = Question.new
  @button_signals = {}
  @sound = Audio.new
  new_question
  setup_about_box
  build_main_window
end

Public Instance Methods

build_main_window() click to toggle source
# File lib/kita.rb, line 72
def build_main_window
  signal_connect :activate do
    # Connect signal handlers to the constructed widgets
    window = @builder['window']
    window.signal_connect('destroy') { Gtk.main_quit }
    window.present
  end
end
correct_button(buttons, question) click to toggle source
# File lib/kita.rb, line 91
def correct_button(buttons, question)
  # Choose random letter and remove it from array
  correct = buttons.delete(buttons.sample)
  correct_button = @builder["answer_#{correct}"]
  correct_button.set_label(question[:answer])
  correct_signal = correct_button.signal_connect('clicked') do
    new_question
  end
  @button_signals[correct] = correct_signal
end
ee() click to toggle source
# File lib/kita.rb, line 67
def ee
  @ee += 1
  @sound.play('これは北です') if @ee == 3
end
new_question() click to toggle source
# File lib/kita.rb, line 81
def new_question
  reset_buttons
  question = @question.new_question
  @builder['question'].set_markup("<span font='72'>#{question[:question]}</span>")
  buttons = %w[a b c d]
  correct_button(buttons, question)
  wrong_buttons(buttons, question)
  @sound.play("#{question[:question].hiragana}#{[1, 2].sample}") if Settings.sound
end
repeat_button_click() click to toggle source
# File lib/kita.rb, line 46
def repeat_button_click
  @sound.repeat
end
reset_buttons() click to toggle source
# File lib/kita.rb, line 120
def reset_buttons
  return nil if @button_signals.empty?

  @button_signals.each do |letter, signal|
    button = @builder["answer_#{letter}"]
    button.signal_handler_disconnect(signal)
    button.set_sensitive(true)
  end
  @button_signals = {}
end
setup_about_box() click to toggle source
# File lib/kita.rb, line 36
def setup_about_box
  @ee = 0
  about_box = @builder['about_box']
  about_box.version = VERSION
  @builder['menu_about'].signal_connect('clicked') do
    about_box.run
    about_box.hide
  end
end
toggle_hiragana() click to toggle source
# File lib/kita.rb, line 56
def toggle_hiragana
  Settings.hiragana = !Settings.hiragana
  (@builder['katakana_switch'].set_active(true) && Settings.katakana = true) if !Settings.katakana && !Settings.hiragana
  save_settings
end
toggle_katakana() click to toggle source
# File lib/kita.rb, line 50
def toggle_katakana
  Settings.katakana = !Settings.katakana
  (@builder['hiragana_switch'].set_active(true) && Settings.hiragana = true) if !Settings.katakana && !Settings.hiragana
  save_settings
end
toggle_sound() click to toggle source
# File lib/kita.rb, line 62
def toggle_sound
  Settings.sound = !Settings.sound
  save_settings
end
wrong_button_click(button) click to toggle source
# File lib/kita.rb, line 111
def wrong_button_click(button)
  button.set_sensitive(false)
  label = button.child
  correction = @question.type == 'hiragana' ? button.label.hiragana : button.label.katakana
  label.set_markup(
    "<span color='#d40000'>#{button.label} #{correction}</span>"
  )
end
wrong_buttons(buttons, question) click to toggle source
# File lib/kita.rb, line 102
def wrong_buttons(buttons, question)
  buttons.each_with_index do |letter, i|
    button = @builder.get_object("answer_#{letter}")
    button.set_label(question[:choices][i])
    signal = button.signal_connect('clicked') { wrong_button_click(button) }
    @button_signals[letter] = signal
  end
end