/*
* Copyright (c) 2010-2012 Célio Cidral Junior.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.tomighty.config;
import java.io.File;
import org.tomighty.bus.Bus;
import org.tomighty.bus.messages.config.TimeOnTrayConfigChanged;
import org.tomighty.bus.messages.ui.LookChanged;
import org.tomighty.ui.theme.Theme;
import org.tomighty.ui.theme.themes.Shiny;
import javax.inject.Inject;
public class Options {
private static final String TIME_POMODORO = "option.time.pomodoro";
private static final String TIME_SHORT_BREAK = "option.time.shortBreak";
private static final String TIME_LONG_BREAK = "option.time.longBreak";
private static final String UI_THEME = "option.ui.theme";
private static final String UI_AUTOHIDE_WINDOW = "option.ui.window.autohide";
private static final String UI_DRAGGABLE_WINDOW = "option.ui.window.draggable";
private static final String UI_SHOW_TIME_ON_TRAY = "option.ui.showTimeOnTray";
private static final String SOUND_WIND = "option.sound.timer.wind";
private static final String SOUND_TICTAC = "option.sound.timer.tictac";
private static final String SOUND_DING = "option.sound.timer.ding";
@Inject private Configuration config;
@Inject private Bus bus;
private UserInterfaceOptions ui = new UserInterfaceOptions();
private SoundOptions sound = new SoundOptions();
private TimeOptions time = new TimeOptions();
public UserInterfaceOptions ui() {
return ui;
}
public SoundOptions sound() {
return sound;
}
public TimeOptions time() {
return time;
}
public class TimeOptions {
public int pomodoro() {
return config.asInt(TIME_POMODORO, 25);
}
public int shortBreak() {
return config.asInt(TIME_SHORT_BREAK, 5);
}
public int longBreak() {
return config.asInt(TIME_LONG_BREAK, 15);
}
public void pomodoro(int minutes) {
config.set(TIME_POMODORO, minutes);
}
public void shortBreak(int minutes) {
config.set(TIME_SHORT_BREAK, minutes);
}
public void longBreak(int minutes) {
config.set(TIME_LONG_BREAK, minutes);
}
}
public class UserInterfaceOptions {
public boolean autoHideWindow() {
return config.asBoolean(UI_AUTOHIDE_WINDOW, true);
}
public void autoHide(boolean autoHide) {
config.set(UI_AUTOHIDE_WINDOW, autoHide);
}
public Theme theme() {
return config.asObject(UI_THEME, Shiny.class);
}
public void theme(Class<? extends Theme> clazz) {
Class<? extends Theme> currentClass = config.asClass(UI_THEME, Shiny.class);
if(!clazz.equals(currentClass)) {
config.set(UI_THEME, clazz);
bus.publish(new LookChanged());
}
}
public boolean showTimeOnTray() {
return config.asBoolean(UI_SHOW_TIME_ON_TRAY, true);
}
public void showTimeOnTray(boolean show) {
if(show != showTimeOnTray()) {
config.set(UI_SHOW_TIME_ON_TRAY, show);
bus.publish(new TimeOnTrayConfigChanged(show));
}
}
public boolean draggableWindow() {
return config.asBoolean(UI_DRAGGABLE_WINDOW, false);
}
public void draggableWindow(boolean draggable) {
config.set(UI_DRAGGABLE_WINDOW, draggable);
}
}
public class SoundOptions {
private SoundConfig wind = new SoundConfig(SOUND_WIND);
private SoundConfig tictac = new SoundConfig(SOUND_TICTAC);
private SoundConfig ding = new SoundConfig(SOUND_DING);
public SoundConfig wind() {
return wind;
}
public SoundConfig tictac() {
return tictac;
}
public SoundConfig ding() {
return ding;
}
}
public class SoundConfig {
private String enabledKey;
private String fileKey;
public SoundConfig(String key) {
this.enabledKey = key+".enabled";
this.fileKey = key+".file";
}
public boolean enabled() {
return config.asBoolean(enabledKey, true);
}
public void enable(boolean enable) {
config.set(enabledKey, enable);
}
public File file() {
return config.asFile(fileKey);
}
public void file(File file) {
config.set(fileKey, file);
}
}
}