GarminWatchfaces/KittieCats/source/KittieCatsSettingsView.mc

128 lines
2.6 KiB
MonkeyC

import Toybox.Lang;
import Toybox.WatchUi;
class KittieCatsSettingsView extends WatchUi.Menu2
{
private var themeMenuItem;
function initialize()
{
Menu2.initialize(null);
Menu2.setTitle(Rez.Strings.SettingsTitle);
self.themeMenuItem = new WatchUi.MenuItem(Rez.Strings.SettingsTheme, "", "theme", null);
Menu2.addItem(self.themeMenuItem);
// TODO add settings for low power mode
}
function onShow()
{
var currentTheme = ThemeManager.getInstance().getLocalizedCurrentTheme();
self.themeMenuItem.setSubLabel(currentTheme.Name);
}
}
class KittieCatsSettingsMenuDelegate extends WatchUi.Menu2InputDelegate
{
function initialize()
{
Menu2InputDelegate.initialize();
}
function onSelect(item)
{
var id = item.getId();
switch (id)
{
case "theme":
{
var themes = ThemeManager.getInstance().getLocalizedThemes();
var currentTheme = ThemeManager.getInstance().getLocalizedCurrentTheme();
// Not sure if I like the picker UI, but it'll do for now
WatchUi.pushView(new Picker({
:title => new WatchUi.Text({ :text => Rez.Strings.SettingsTheme }),
:pattern => [new ThemePickerFactory(themes)],
:defaults => [themes.indexOf(currentTheme)]
}), new ThemePickerDelegate(), WatchUi.SLIDE_LEFT);
break;
}
}
}
function onBack()
{
WatchUi.popView(WatchUi.SLIDE_IMMEDIATE);
}
}
class ThemePickerFactory extends WatchUi.PickerFactory
{
private var themes as Array<ThemeInfo>;
function initialize(themes)
{
PickerFactory.initialize();
self.themes = themes;
}
function getDrawable(item, isSelected)
{
return new WatchUi.Text({
:text => self.themes[item].Name,
:color => Graphics.COLOR_WHITE,
:font => Graphics.FONT_SMALL,
:justification => Graphics.TEXT_JUSTIFY_LEFT
});
}
function getSize()
{
return self.themes.size();
}
function getValue(item)
{
return self.themes[item].Id;
}
}
class ThemePickerDelegate extends WatchUi.PickerDelegate
{
function initialize()
{
PickerDelegate.initialize();
}
function onAccept(values)
{
ThemeManager.getInstance().setCurrentThemeId(values[0]);
WatchUi.popView(WatchUi.SLIDE_DOWN);
return true;
}
function onCancel()
{
return true;
}
}