Set all the alarms to something, it doesn’t matter what except sometime
in the future and out of the way except for #1. Set the first alarm on,
to maybe 2 minutes from the time you run the program. Every time I run
it I get a segfault or a runtime error. What’s wrong?
Only works if turned on before it goes off on the the day that it will
$statusChoice = [“On”, “Off”]
$hourChoice = [“00”, “01”, “02”, “03”, “04”, “05”, “06”, “07”, “08”,
“09”, “10”, “11”, “12”, “13”, “14”, “15”, “16”, “17”, “18”, “19”, “20”,
“21”, “22”, “23”]
$minChoice = [“00”, “15”, “30”, “45”]
$secChoice = [“00”, “15”, “30”, “45”]
require “Wx”
include Wx
require ‘on-off.rb’
require ‘Sets1.rb’
class SetsFrame < Frame
def initialize()
super(nil, -1, ‘Settings’)
choices = ['Alarm # 1', 'Alarm # 2', 'Alarm # 3', 'Alarm # 4']
@setsPanel = Panel.new(self)
$whichAlarm = ComboBox.new(@setsPanel, -1, 'Alarm # 1',
DEFAULT_POSITION, DEFAULT_SIZE, choices, CB_READONLY)
@editButton = Button.new(@setsPanel, -1, ‘Edit’)
evt_button(@editButton.get_id()) {|event|editButtonClick(event)}
@setsPanelSizer = BoxSizer.new(VERTICAL)
@setsPanel.set_sizer(@setsPanelSizer)
@setsPanel.sizer.add($whichAlarm, 0, GROW|ALL, 2)
@setsPanel.sizer.add(@editButton, 0, GROW|ALL, 2)
show()
end
def editButtonClick(event)
$whichAlarmVal = $whichAlarm.get_value()
if $whichAlarmVal == ‘Alarm # 1’
require ‘Sets1.rb’
elsif $whichAlarmVal == ‘Alarm # 2’
require ‘Sets2.rb’
elsif $whichAlarmVal == ‘Alarm # 3’
require ‘Sets3.rb’
elsif $whichAlarmVal == ‘Alarm # 4’
require ‘Sets4.rb’
else
# Nothings
end
EditFrame.new
end
end
class EditFrame < Frame
def initialize()
super(nil, -1, ‘Edit’)
@aPanel = Panel.new(self)
@someText = StaticText.new(@aPanel, -1, "Edit", DEFAULT_POSITION,
DEFAULT_SIZE, ALIGN_CENTER)
@comboStatus = ComboBox.new(@aPanel, -1, $statusDef,
DEFAULT_POSITION, DEFAULT_SIZE, $statusChoice, CB_READONLY)
@hourText = StaticText.new(@aPanel, -1, “Hours”)
@comboHour = ComboBox.new(@aPanel, -1, $hourDef, DEFAULT_POSITION,
DEFAULT_SIZE, $hourChoice, CB_DROPDOWN)
@minText = StaticText.new(@aPanel, -1, “Minutes”)
@comboMin = ComboBox.new(@aPanel, -1, $minDef, DEFAULT_POSITION,
DEFAULT_SIZE, $minChoice, CB_DROPDOWN)
@secText = StaticText.new(@aPanel, -1, “Seconds”)
@comboSec = ComboBox.new(@aPanel, -1, $secDef, DEFAULT_POSITION,
DEFAULT_SIZE, $secChoice, CB_DROPDOWN)
@textAlarm = StaticText.new(@aPanel, -1, “Alarm Text”)
@alarmText = TextCtrl.new(@aPanel, -1, $textDef, DEFAULT_POSITION,
DEFAULT_SIZE, TE_MULTILINE)
@dayText = StaticText.new(@aPanel, -1, “Days”)
@checkSun = CheckBox.new(@aPanel, -1, “Sunday”)
@checkMon = CheckBox.new(@aPanel, -1, “Monday”)
@checkTue = CheckBox.new(@aPanel, -1, “Tuesday”)
@checkWed = CheckBox.new(@aPanel, -1, “Wednesday”)
@checkThu = CheckBox.new(@aPanel, -1, “Thursday”)
@checkFri = CheckBox.new(@aPanel, -1, “Friday”)
@checkSat = CheckBox.new(@aPanel, -1, “Saturday”)
@saveButton = Button.new(@aPanel, -1, ‘Save’)
@defButton = Button.new(@aPanel, -1, ‘Return to Defaults’)
evt_button(@saveButton.get_id()) {|event|saveButtonClick(event)}
evt_button(@defButton.get_id()) {|event|defButtonClick(event)}
@aPanelSizer = BoxSizer.new(VERTICAL)
@aPanel.set_sizer(@aPanelSizer)
@aPanel.sizer.add(@someText, 0, GROW|ALL, 2)
@aPanel.sizer.add(@comboStatus, 0, GROW|ALL, 2)
@aPanel.sizer.add(@hourText, 0, GROW|ALL, 2)
@aPanel.sizer.add(@comboHour, 0, GROW|ALL, 2)
@aPanel.sizer.add(@minText, 0, GROW|ALL, 2)
@aPanel.sizer.add(@comboMin, 0, GROW|ALL, 2)
@aPanel.sizer.add(@secText, 0, GROW|ALL, 2)
@aPanel.sizer.add(@comboSec, 0, GROW|ALL, 2)
@aPanel.sizer.add(@textAlarm, 0, GROW|ALL, 2)
@aPanel.sizer.add(@alarmText, 0, GROW|ALL, 2)
@aPanel.sizer.add(@dayText, 0, GROW|ALL, 2)
@aPanel.sizer.add(@checkSun, 0, GROW|ALL, 2)
@aPanel.sizer.add(@checkMon, 0, GROW|ALL, 2)
@aPanel.sizer.add(@checkTue, 0, GROW|ALL, 2)
@aPanel.sizer.add(@checkWed, 0, GROW|ALL, 2)
@aPanel.sizer.add(@checkThu, 0, GROW|ALL, 2)
@aPanel.sizer.add(@checkFri, 0, GROW|ALL, 2)
@aPanel.sizer.add(@checkSat, 0, GROW|ALL, 2)
@aPanel.sizer.add(@saveButton, 0, GROW|ALL, 2)
@aPanel.sizer.add(@defButton, 0, GROW|ALL, 2)
@checkSun.set_value($sun)
@checkMon.set_value($mon)
@checkTue.set_value($tue)
@checkWed.set_value($wed)
@checkThu.set_value($thu)
@checkFri.set_value($fri)
@checkSat.set_value($sat)
show()
end
def sets1
File.open(‘Sets1.rb’, ‘w’) do |f|
f.puts “$statusDef = “#{$comboStatusVal}”
$hourDef = “#{$comboHourVal}”
$minDef = “#{$comboMinVal}”
$secDef = “#{$comboSecVal}”
$textDef = “#{$alarmTextVal}”
$sun = #{$checkSunVal}
$mon = #{$checkMonVal}
$tue = #{$checkTueVal}
$wed = #{$checkWedVal}
$thu = #{$checkThuVal}
$fri = #{$checkFriVal}
$sat = #{$checkSatVal}”
end
end
def sets2
File.open(‘Sets2.rb’, ‘w’) do |f|
f.puts “$statusDef = “#{$comboStatusVal}”
$hourDef = “#{$comboHourVal}”
$minDef = “#{$comboMinVal}”
$secDef = “#{$comboSecVal}”
$textDef = “#{$alarmTextVal}”
$sun = #{$checkSunVal}
$mon = #{$checkMonVal}
$tue = #{$checkTueVal}
$wed = #{$checkWedVal}
$thu = #{$checkThuVal}
$fri = #{$checkFriVal}
$sat = #{$checkSatVal}”
end
end
def sets3
File.open(‘Sets3.rb’, ‘w’) do |f|
f.puts “$statusDef = “#{$comboStatusVal}”
$hourDef = “#{$comboHourVal}”
$minDef = “#{$comboMinVal}”
$secDef = “#{$comboSecVal}”
$textDef = “#{$alarmTextVal}”
$sun = #{$checkSunVal}
$mon = #{$checkMonVal}
$tue = #{$checkTueVal}
$wed = #{$checkWedVal}
$thu = #{$checkThuVal}
$fri = #{$checkFriVal}
$sat = #{$checkSatVal}”
end
end
def sets4
File.open(‘Sets4.rb’, ‘w’) do |f|
f.puts “$statusDef = “#{$comboStatusVal}”
$hourDef = “#{$comboHourVal}”
$minDef = “#{$comboMinVal}”
$secDef = “#{$comboSecVal}”
$textDef = “#{$alarmTextVal}”
$sun = #{$checkSunVal}
$mon = #{$checkMonVal}
$tue = #{$checkTueVal}
$wed = #{$checkWedVal}
$thu = #{$checkThuVal}
$fri = #{$checkFriVal}
$sat = #{$checkSatVal}”
end
end
def saveButtonClick(event)
$comboStatusVal = @comboStatus.get_value()
$comboHourVal = @comboHour.get_value()
$comboMinVal = @comboMin.get_value()
$comboSecVal = @comboSec.get_value()
$alarmTextVal = @alarmText.get_value()
$checkSunVal = @checkSun.get_value()
$checkMonVal = @checkMon.get_value()
$checkTueVal = @checkTue.get_value()
$checkWedVal = @checkWed.get_value()
$checkThuVal = @checkThu.get_value()
$checkFriVal = @checkFri.get_value()
$checkSatVal = @checkSat.get_value()
if $comboStatusVal == “On”
$boolStatus = true
elsif $comboStatusVal == “Off”
$boolStatus = false
else
# Nothings
end
$whichAlarmVal = $whichAlarm.get_value()
if $whichAlarmVal == ‘Alarm # 1’
sets1
elsif $whichAlarmVal == ‘Alarm # 2’
sets2
elsif $whichAlarmVal == ‘Alarm # 3’
sets3
elsif $whichAlarmVal == ‘Alarm # 4’
sets4
else
# Nothing
end
bool1 = $onOff.fetch(0)
bool2 = $onOff.fetch(1)
bool3 = $onOff.fetch(2)
bool4 = $onOff.fetch(3)
if $whichAlarmVal == ‘Alarm # 1’
File.open(‘on-off.rb’, ‘w’) do |f|
f.puts “$onOff = [#{$boolStatus}, #{bool2}, #{bool3}, #{bool4}]”
end
elsif $whichAlarmVal == ‘Alarm # 2’
File.open(‘on-off.rb’, ‘w’) do |f|
f.puts “$onOff = [#{bool1}, #{$boolStatus}, #{bool3}, #{bool4}]”
end
elsif $whichAlarmVal == ‘Alarm # 3’
File.open(‘on-off.rb’, ‘w’) do |f|
f.puts “$onOff = [#{bool1}, #{bool2}, #{$boolStatus}, #{bool4}]”
end
elsif $whichAlarmVal == ‘Alarm # 4’
File.open(‘on-off.rb’, ‘w’) do |f|
f.puts “$onOff = [#{bool1}, #{bool2}, #{bool3}, #{$boolStatus}]”
end
else
# Nothing
end
end
def defButtonClick(event)
results = []
bool1 = $onOff.fetch(0)
bool2 = $onOff.fetch(1)
bool3 = $onOff.fetch(2)
bool4 = $onOff.fetch(3)
File.open(‘Defaults.rb’, ‘r’).each { |line| results << line }
if $whichAlarmVal == ‘Alarm # 1’
File.open(‘Sets1.rb’, ‘w’) do |f1|
f1.puts results
end
elsif $whichAlarmVal == ‘Alarm # 2’
File.open(‘Sets2.rb’, ‘w’) do |f1|
f1.puts results
end
elsif $whichAlarmVal == ‘Alarm # 3’
File.open(‘Sets3.rb’, ‘w’) do |f1|
f1.puts results
end
elsif $whichAlarmVal == ‘Alarm # 4’
File.open(‘Sets4.rb’, ‘w’) do |f1|
f1.puts results
end
else
# Nothing
end
if $whichAlarmVal == 'Alarm # 1'
File.open('on-off.rb', 'w') do |f|
f.puts "$onOff = [false, #{bool2}, #{bool3}, #{bool4}]"
end
elsif $whichAlarmVal == 'Alarm # 2'
File.open('on-off.rb', 'w') do |f|
f.puts "$onOff = [#{bool1}, false, #{bool3}, #{bool4}]"
end
elsif $whichAlarmVal == 'Alarm # 3'
File.open('on-off.rb', 'w') do |f|
f.puts "$onOff = [#{bool1}, #{bool2}, false, #{bool4}]"
end
elsif $whichAlarmVal == 'Alarm # 4'
File.open('on-off.rb', 'w') do |f|
f.puts "$onOff = [#{bool1}, #{bool2}, #{bool3}, false]"
end
else
# Nothing
end
end
end
class AlarmFrame < Frame
def initialize()
super(nil, -1, ‘Alarm’)
@aPanel = Panel.new(self)
@someText = StaticText.new(@aPanel, -1, “Time’s up! Go to bed!”,
DEFAULT_POSITION, DEFAULT_SIZE, ALIGN_CENTER)
@stopButton = Button.new(@aPanel, -1, ‘Ok’)
evt_button(@stopButton.get_id()) {|event|stopButtonClick(event)}
@aPanelSizer = BoxSizer.new(VERTICAL)
@aPanel.set_sizer(@aPanelSizer)
@aPanel.sizer.add(@someText, 0, GROW|ALL, 2)
@aPanel.sizer.add(@stopButton, 0, GROW|ALL, 2)
Sound.play(“beep4.wav”, flags = SOUND_ASYNC|SOUND_LOOP)
show()
end
def stopButtonClick(event)
Sound.stop()
end
end
class Alarm
def initialize
$bool1 = $onOff.fetch(0)
$bool2 = $onOff.fetch(1)
$bool3 = $onOff.fetch(2)
$bool4 = $onOff.fetch(3)
end
def one
if $bool1 == true
require ‘Sets1.rb’
t = Time.now
goOff0 = $hourDef
goOff1 = $minDef
goOff2 = $secDef
sleepTime =
(goOff0.to_i3600+goOff1.to_i60+goOff2.to_i)-(t.strftime("%H").to_i3600+t.strftime("%M").to_i60+t.strftime("%S").to_i)
sleep(sleepTime)
AlarmFrame.new
else
# Nothings
end
end
def two
if $bool2 == true
require ‘Sets2.rb’
t = Time.now
goOff0 = $hourDef
goOff1 = $minDef
goOff2 = $secDef
sleepTime =
(goOff0.to_i3600+goOff1.to_i60+goOff2.to_i)-(t.strftime("%H").to_i3600+t.strftime("%M").to_i60+t.strftime("%S").to_i)
sleep(sleepTime)
AlarmFrame.new
else
# Nothings
end
end
def three
if $bool3 == true
require ‘Sets3.rb’
t = Time.now
goOff0 = $hourDef
goOff1 = $minDef
goOff2 = $secDef
sleepTime =
(goOff0.to_i3600+goOff1.to_i60+goOff2.to_i)-(t.strftime("%H").to_i3600+t.strftime("%M").to_i60+t.strftime("%S").to_i)
sleep(sleepTime)
AlarmFrame.new
else
# Nothings
end
end
def four
if $bool4 == true
require ‘Sets4.rb’
t = Time.now
goOff0 = $hourDef
goOff1 = $minDef
goOff2 = $secDef
sleepTime =
(goOff0.to_i3600+goOff1.to_i60+goOff2.to_i)-(t.strftime("%H").to_i3600+t.strftime("%M").to_i60+t.strftime("%S").to_i)
sleep(sleepTime)
AlarmFrame.new
else
# Nothings
end
end
end
class MainApp < App
def on_init
SetsFrame.new
end
end
_ = Thread.new {MainApp.new.main_loop()}
a = Thread.new {Alarm.new.one}
b = Thread.new {Alarm.new.two}
#c = Thread.new {Alarm.new.three}
#d = Thread.new {Alarm.new.four}
_.join
a.join
b.join
#c.join
#d.join