source: trunk/hiptop/pester/net/sabi/pester/AlarmListView.java@ 238

Last change on this file since 238 was 238, checked in by Nicholas Riley, 18 years ago

First pass at control set for edit dialog.

File size: 3.5 KB
Line 
1package net.sabi.pester;
2
3import danger.app.Application;
4import danger.app.Event;
5import danger.ui.ActiveListView;
6import danger.ui.Button;
7import danger.ui.DialogWindow;
8import danger.ui.Rect;
9import danger.ui.TypeAheadTextField;
10import danger.util.ActiveList;
11import danger.util.StdActiveList;
12import danger.util.DEBUG;
13
14public class AlarmListView extends ActiveListView
15 implements Resources, Commands {
16 private static Pester sPester;
17 private static AlarmListWindow sAlarmListWindow;
18 // XXX some of these shouldn't conceptually be static, but who cares
19 private static StdActiveList sAlarmList;
20 private static Alarms sAlarms;
21
22 private static DialogWindow sEditWindow;
23 private TypeAheadTextField sMessageField;
24 private Button sDiscardAlarmButton;
25
26 private static Alarm sFocusedAlarm, sEditingAlarm;
27
28 private static final int EVENT_CANCEL_ALARM = -1; // XXX move this?
29
30 public void onDecoded() {
31 sPester = (Pester)Application.getCurrentApp();
32 sAlarmListWindow = (AlarmListWindow)getWindow();
33 sAlarmList = new StdActiveList();
34 setList(sAlarmList);
35
36 sEditWindow = sPester.getDialog(ID_ALARM_SET_DIALOG, this);
37 sEditWindow.setCancelButtonEvent(new Event(this, EVENT_CANCEL_ALARM));
38 sMessageField = (TypeAheadTextField)sEditWindow.getDescendantWithID(ID_MESSAGE_FIELD);
39 sEditWindow.disableBottomRightButtonOnEmptyField(sMessageField);
40 sDiscardAlarmButton = (Button)sEditWindow.getDescendantWithID(ID_DISCARD_ALARM_BUTTON);
41
42 super.onDecoded();
43 }
44
45 public boolean eventWidgetUp(int widget, Event e) {
46 switch (widget) {
47 case Event.DEVICE_BUTTON_BACK:
48 case Event.DEVICE_BUTTON_CANCEL:
49 sPester.returnToLauncher();
50 return true;
51 }
52 return super.eventWidgetUp(widget, e);
53 }
54
55 void editAlarm(Alarm alarm, boolean asNew) {
56 sEditingAlarm = alarm;
57 alarm.beginEditing();
58 sMessageField.setText(sEditingAlarm.getMessage());
59 if (asNew) {
60 sDiscardAlarmButton.hide();
61 } else {
62 sDiscardAlarmButton.show();
63 }
64 boolean usesPeriod = sEditingAlarm.getUsesPeriod();
65
66 sEditWindow.show();
67 }
68
69 public boolean receiveEvent(Event e) {
70 switch (e.type) {
71 case EVENT_NEW_ALARM:
72 editAlarm(new Alarm(), true);
73 return true;
74 case EVENT_SET_ALARM:
75 if (sEditingAlarm != sFocusedAlarm) { // new alarm
76 sAlarmList.addItem(sEditingAlarm);
77 setFocusedItem(sEditingAlarm);
78 }
79 sEditingAlarm.setMessage(sMessageField.toString());
80 sEditingAlarm.update();
81 case EVENT_CANCEL_ALARM:
82 // XXX (re)schedule alarm
83 sEditingAlarm.endEditing();
84 return true;
85 case EVENT_DISCARD_ALARM:
86 // XXX confirmation
87 sAlarmList.removeItem(sFocusedAlarm);
88 return true;
89 }
90 return super.receiveEvent(e);
91 }
92
93 protected void itemActivated(Object item) {
94 // XXX deschedule alarm
95 editAlarm(sFocusedAlarm, false);
96 }
97 protected void itemFocused(Object item) {
98 sFocusedAlarm = (Alarm)item;
99 }
100
101 public int alarmsSet() {
102 return getListSize();
103 }
104 public void onItemAdded(ActiveList list, Object item, int index) {
105 sAlarmListWindow.updateAlarmCount();
106 super.onItemAdded(list, item, index);
107 }
108 public void onItemRemoved(ActiveList list, Object item, int index) {
109 sAlarmListWindow.updateAlarmCount();
110 super.onItemRemoved(list, item, index);
111 }
112
113 protected CharSequence getToolTipForItem(Object item) {
114 if (item == null) // this is dumb, why do we get asked for a tooltip?
115 return null;
116 // XXX only set a tooltip if the message is truncated
117 return ((Alarm)item).getMessage();
118 }
119}
Note: See TracBrowser for help on using the repository browser.