package net.sabi.pester; import danger.app.Application; import danger.app.Event; import danger.ui.ActiveListView; import danger.ui.DialogWindow; import danger.ui.Rect; import danger.ui.TypeAheadTextField; import danger.util.ActiveList; import danger.util.StdActiveList; import danger.util.DEBUG; public class AlarmListView extends ActiveListView implements Resources, Commands { private static Pester sPester; private static AlarmListWindow sAlarmListWindow; // XXX some of these shouldn't conceptually be static, but who cares private static StdActiveList sAlarmList; private static Alarms sAlarms; private static DialogWindow sEditWindow; private TypeAheadTextField sMessageField; private static Alarm sFocusedAlarm, sEditingAlarm; private static final int EVENT_CANCEL_ALARM = -1; // XXX move this? public void onDecoded() { sPester = (Pester)Application.getCurrentApp(); sAlarmListWindow = (AlarmListWindow)getWindow(); sAlarmList = new StdActiveList(); setList(sAlarmList); sEditWindow = sPester.getDialog(ID_ALARM_SET_DIALOG, this); sEditWindow.setCancelButtonEvent(new Event(this, EVENT_CANCEL_ALARM)); sMessageField = (TypeAheadTextField)sEditWindow.getDescendantWithID(ID_MESSAGE_FIELD); sEditWindow.disableBottomRightButtonOnEmptyField(sMessageField); super.onDecoded(); } public boolean eventWidgetUp(int widget, Event e) { switch (widget) { case Event.DEVICE_BUTTON_BACK: case Event.DEVICE_BUTTON_CANCEL: sPester.returnToLauncher(); return true; } return super.eventWidgetUp(widget, e); } void editAlarm(Alarm alarm) { sEditingAlarm = alarm; alarm.beginEditing(); sMessageField.setText(sEditingAlarm.getMessage()); sEditWindow.show(); } public boolean receiveEvent(Event e) { switch (e.type) { case EVENT_NEW_ALARM: editAlarm(new Alarm()); return true; case EVENT_SET_ALARM: if (sEditingAlarm != sFocusedAlarm) { // new alarm sAlarmList.addItem(sEditingAlarm); setFocusedItem(sEditingAlarm); } sEditingAlarm.setMessage(sMessageField.toString()); sEditingAlarm.update(); case EVENT_CANCEL_ALARM: // XXX (re)schedule alarm sEditingAlarm.endEditing(); return true; case EVENT_DISCARD_ALARM: // XXX confirmation sAlarmList.removeItem(sFocusedAlarm); return true; } return super.receiveEvent(e); } protected void itemActivated(Object item) { // XXX deschedule alarm editAlarm(sFocusedAlarm); } protected void itemFocused(Object item) { sFocusedAlarm = (Alarm)item; } public int alarmsSet() { return getListSize(); } public void onItemAdded(ActiveList list, Object item, int index) { sAlarmListWindow.updateAlarmCount(); super.onItemAdded(list, item, index); } public void onItemRemoved(ActiveList list, Object item, int index) { sAlarmListWindow.updateAlarmCount(); super.onItemRemoved(list, item, index); } protected CharSequence getToolTipForItem(Object item) { if (item == null) // this is dumb, why do we get asked for a tooltip? return null; // XXX only set a tooltip if the message is truncated return ((Alarm)item).getMessage(); } }