summaryrefslogtreecommitdiffstats
path: root/kalarm/alarmlistview.h
blob: 63d5bf0b0e645d807cc29ff4ef948c2622d10808 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 *  alarmlistview.h  -  widget showing list of outstanding alarms
 *  Program:  kalarm
 *  Copyright © 2001-2006 by David Jarvie <software@astrojar.org.uk>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#ifndef ALARMLISTVIEW_H
#define ALARMLISTVIEW_H

#include "kalarm.h"
#include "eventlistviewbase.h"

class AlarmListView;
class AlarmListTooltip;


class AlarmListViewItem : public EventListViewItemBase
{
	public:
		AlarmListViewItem(AlarmListView* parent, const KAEvent&, const QDateTime& now);
		QTime               showTimeToAlarm(bool show);
		void                updateTimeToAlarm(const QDateTime& now, bool forceDisplay = false);
		virtual void        paintCell(QPainter*, const QColorGroup&, int column, int width, int align);
		AlarmListView*      alarmListView() const         { return (AlarmListView*)listView(); }
		bool                messageTruncated() const      { return mMessageTruncated; }
		int                 messageColWidthNeeded() const { return mMessageColWidth; }
		static int          typeIconWidth(AlarmListView*);
		// Overridden base class methods
		AlarmListViewItem*  nextSibling() const           { return (AlarmListViewItem*)QListViewItem::nextSibling(); }
		virtual QString     key(int column, bool ascending) const;
	protected:
		virtual QString     lastColumnText() const        { return alarmText(event()); }
	private:
		QString             alarmText(const KAEvent&) const;
		QString             alarmTimeText(const DateTime&) const;
		QString             timeToAlarmText(const QDateTime& now) const;

		static int          mTimeHourPos;       // position of hour within time string, or -1 if leading zeroes included
		static int          mDigitWidth;        // display width of a digit
		QString             mDateTimeOrder;     // controls ordering of date/time column
		QString             mRepeatOrder;       // controls ordering of repeat column
		QString             mColourOrder;       // controls ordering of colour column
		QString             mTypeOrder;         // controls ordering of alarm type column
		mutable int         mMessageColWidth;   // width needed to display complete message text
		mutable bool        mMessageTruncated;  // multi-line message text has been truncated for the display
		bool                mTimeToAlarmShown;  // relative alarm time is displayed
};


class AlarmListView : public EventListViewBase
{
		Q_OBJECT       // needed by QObject::isA() calls
	public:
		enum ColumnIndex {    // default column order
			TIME_COLUMN, TIME_TO_COLUMN, REPEAT_COLUMN, COLOUR_COLUMN, TYPE_COLUMN, MESSAGE_COLUMN,
			COLUMN_COUNT
		};

		AlarmListView(const QValueList<int>& order, QWidget* parent = 0, const char* name = 0);
		~AlarmListView();
		void                   showExpired(bool show)      { mShowExpired = show; }
		bool                   showingExpired() const      { return mShowExpired; }
		bool                   showingTimeTo() const	   { return columnWidth(mColumn[TIME_TO_COLUMN]); }
		void                   selectTimeColumns(bool time, bool timeTo);
		void                   updateTimeToAlarms(bool forceDisplay = false);
		bool                   expired(AlarmListViewItem*) const;
		bool                   drawMessageInColour() const            { return mDrawMessageInColour; }
		void                   setDrawMessageInColour(bool inColour)  { mDrawMessageInColour = inColour; }
		QValueList<int>        columnOrder() const;
		int                    column(ColumnIndex i) const { return mColumn[i]; }
		static bool            dragging()                  { return mDragging; }
		// Overridden base class methods
		static void            addEvent(const KAEvent&, EventListViewBase*);
		static void            modifyEvent(const KAEvent& e, EventListViewBase* selectionView)
		                             { EventListViewBase::modifyEvent(e.id(), e, mInstanceList, selectionView); }
		static void            modifyEvent(const QString& oldEventID, const KAEvent& newEvent, EventListViewBase* selectionView)
		                             { EventListViewBase::modifyEvent(oldEventID, newEvent, mInstanceList, selectionView); }
		static void            deleteEvent(const QString& eventID)
		                             { EventListViewBase::deleteEvent(eventID, mInstanceList); }
		static void            undeleteEvent(const QString& oldEventID, const KAEvent& event, EventListViewBase* selectionView)
		                             { EventListViewBase::modifyEvent(oldEventID, event, mInstanceList, selectionView); }
		AlarmListViewItem*     getEntry(const QString& eventID)  { return (AlarmListViewItem*)EventListViewBase::getEntry(eventID); }
		AlarmListViewItem*     currentItem() const    { return (AlarmListViewItem*)EventListViewBase::currentItem(); }
		AlarmListViewItem*     firstChild() const     { return (AlarmListViewItem*)EventListViewBase::firstChild(); }
		AlarmListViewItem*     selectedItem() const   { return (AlarmListViewItem*)EventListViewBase::selectedItem(); }
		virtual void           setSelected(QListViewItem* item, bool selected)      { EventListViewBase::setSelected(item, selected); }
		virtual void           setSelected(AlarmListViewItem* item, bool selected)  { EventListViewBase::setSelected(item, selected); }
		virtual InstanceList   instances()            { return mInstanceList; }

	protected:
		virtual void           populate();
		EventListViewItemBase* createItem(const KAEvent&);
		virtual QString        whatsThisText(int column) const;
		virtual bool           shouldShowEvent(const KAEvent& e) const  { return mShowExpired || !e.expired(); }
		AlarmListViewItem*     addEntry(const KAEvent& e, bool setSize = false)
		                               { return addEntry(e, QDateTime::currentDateTime(), setSize); }
		AlarmListViewItem*     updateEntry(AlarmListViewItem* item, const KAEvent& newEvent, bool setSize = false)
		                               { return (AlarmListViewItem*)EventListViewBase::updateEntry(item, newEvent, setSize); }
		virtual void           contentsMousePressEvent(QMouseEvent*);
		virtual void           contentsMouseMoveEvent(QMouseEvent*);
		virtual void           contentsMouseReleaseEvent(QMouseEvent*);

	private:
		AlarmListViewItem*     addEntry(const KAEvent&, const QDateTime& now, bool setSize = false, bool reselect = false);

		static InstanceList    mInstanceList;         // all current instances of this class
		static bool            mDragging;
		int                    mColumn[COLUMN_COUNT]; // initial position of each column
		int                    mTimeColumnHeaderWidth;
		int                    mTimeToColumnHeaderWidth;
		AlarmListTooltip*      mTooltip;              // tooltip for showing full text of alarm messages
		QPoint                 mMousePressPos;        // where the mouse left button was last pressed
		bool                   mMousePressed;         // true while the mouse left button is pressed
		bool                   mDrawMessageInColour;
		bool                   mShowExpired;          // true to show expired alarms
};

#endif // ALARMLISTVIEW_H