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

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

Properly update display of periodic alarms when time changes. Add calendar IPC message creation (not hooked up yet, maybe never). Be slightly more efficient about tooltip drawing.

File size: 3.7 KB
Line 
1package net.sabi.pester;
2
3import danger.app.Application;
4import danger.app.Event;
5import danger.ui.AlertWindow;
6import danger.ui.ActiveListView;
7import danger.ui.Rect;
8import danger.ui.ToolTipWindow;
9import danger.util.ActiveList;
10import danger.util.DEBUG;
11
12public class AlarmListView extends ActiveListView
13 implements Resources, Commands {
14
15 // XXX some of these shouldn't conceptually be static
16 private static AlarmListWindow sAlarmListWindow;
17 private static AlarmSetDialog sAlarmSetDialog;
18
19 private danger.app.Alarm mToolTipAlarm;
20 private ToolTipWindow mToolTipWindow;
21
22 public void onDecoded() {
23 sAlarmListWindow = (AlarmListWindow)getWindow();
24 mToolTipAlarm = new danger.app.Alarm(0, this);
25 setAutoResize(true);
26 setList(Alarms.getList());
27 if (alarmsSet() == 0)
28 setHasBorder(false); // this doesn't work in the rsrc file
29 Application.registerForEvent(this, Event.EVENT_TIME_CHANGED);
30 super.onDecoded();
31 }
32
33 protected AlarmSetDialog alarmSetDialog() {
34 if (sAlarmSetDialog == null)
35 sAlarmSetDialog = AlarmSetDialog.getDialog();
36 return sAlarmSetDialog;
37 }
38
39 public boolean eventWidgetUp(int widget, Event e) {
40 switch (widget) {
41 case Event.DEVICE_BUTTON_BACK:
42 case Event.DEVICE_BUTTON_CANCEL:
43 Application.getCurrentApp().returnToLauncher();
44 return true;
45 }
46 return super.eventWidgetUp(widget, e);
47 }
48
49 public boolean receiveEvent(Event e) {
50 switch (e.type) {
51 case EVENT_NEW_ALARM:
52 // XXX check for max alarms
53 alarmSetDialog().editAlarm(new Alarm(), true);
54 return true;
55 case EVENT_CONFIRM_DISCARD_ALARM:
56 AlertWindow alert =
57 Application.getCurrentApp().getAlert(ID_DISCARD_ALERT, this);
58 // XXX localize
59 alert.setMessage("Permanently discard \u201c" +
60 ((Alarm)getFocusedItem()).getMessage() +
61 "\u201d?");
62 alert.show();
63 return true;
64 case EVENT_DISCARD_ALARM:
65 Alarms.removeAlarm((Alarm)getFocusedItem());
66 return true;
67 case Event.EVENT_TIME_CHANGED: // XXX EVENT_TIME_FORMAT_CHANGED too
68 if (mToolTipWindow == null || !mToolTipWindow.isVisible())
69 return true;
70 case Event.EVENT_ALARM: // tooltip invalid
71 showToolTip();
72 return true;
73 }
74 return super.receiveEvent(e);
75 }
76
77 protected void itemActivated(Object item) {
78 if (item == null)
79 return;
80 alarmSetDialog().editAlarm((Alarm)item, false);
81 }
82
83 protected void itemFocused(Object item) {
84 mToolTipAlarm.deactivate();
85 }
86
87 public void loseFocus() {
88 mToolTipAlarm.deactivate();
89 super.loseFocus();
90 }
91
92 public void showToolTip() {
93 Alarm alarm = (Alarm)getFocusedItem();
94 if (alarm == null)
95 return;
96 Rect rect = new Rect();
97 rect = localToGlobal(getInterestingRect(rect));
98 if (mToolTipWindow != null)
99 mToolTipWindow.hide();
100 mToolTipWindow =
101 ToolTipWindow.showToolTip(alarm.getDateTimeString() + " - " +
102 alarm.getIntervalString(),
103 localToGlobalH(10),
104 localToGlobalV(mToolTipY),
105 1, sAlarmListWindow);
106 int secondsUntilUpdate = alarm.getSecondsUntilNextIntervalStringUpdate();
107 if (secondsUntilUpdate == 0)
108 return;
109 mToolTipAlarm.resetWake(secondsUntilUpdate);
110 }
111
112 public int alarmsSet() {
113 return getListSize();
114 }
115 public void onItemAdded(ActiveList list, Object item, int index) {
116 sAlarmListWindow.updateAlarmCount();
117 super.onItemAdded(list, item, index);
118 // super's default behavior is to preserve the existing selection,
119 // which is admirable in general, but not what we want
120 setFocus(index);
121 setHasBorder(true);
122 }
123 public void onItemRemoved(ActiveList list, Object item, int index) {
124 ((Alarm)item).cancel();
125 sAlarmListWindow.updateAlarmCount();
126 super.onItemRemoved(list, item, index);
127 if (alarmsSet() == 0)
128 setHasBorder(false);
129 }
130}
Note: See TracBrowser for help on using the repository browser.