kalarm

alarmlistview.h

00001 /*
00002  *  alarmlistview.h  -  widget showing list of outstanding alarms
00003  *  Program:  kalarm
00004  *  Copyright © 2001-2006 by David Jarvie <software@astrojar.org.uk>
00005  *
00006  *  This program is free software; you can redistribute it and/or modify
00007  *  it under the terms of the GNU General Public License as published by
00008  *  the Free Software Foundation; either version 2 of the License, or
00009  *  (at your option) any later version.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License along
00017  *  with this program; if not, write to the Free Software Foundation, Inc.,
00018  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00019  */
00020 
00021 #ifndef ALARMLISTVIEW_H
00022 #define ALARMLISTVIEW_H
00023 
00024 #include "kalarm.h"
00025 #include "eventlistviewbase.h"
00026 
00027 class AlarmListView;
00028 class AlarmListTooltip;
00029 
00030 
00031 class AlarmListViewItem : public EventListViewItemBase
00032 {
00033     public:
00034         AlarmListViewItem(AlarmListView* parent, const KAEvent&, const QDateTime& now);
00035         QTime               showTimeToAlarm(bool show);
00036         void                updateTimeToAlarm(const QDateTime& now, bool forceDisplay = false);
00037         virtual void        paintCell(QPainter*, const QColorGroup&, int column, int width, int align);
00038         AlarmListView*      alarmListView() const         { return (AlarmListView*)listView(); }
00039         bool                messageTruncated() const      { return mMessageTruncated; }
00040         int                 messageColWidthNeeded() const { return mMessageColWidth; }
00041         static int          typeIconWidth(AlarmListView*);
00042         // Overridden base class methods
00043         AlarmListViewItem*  nextSibling() const           { return (AlarmListViewItem*)QListViewItem::nextSibling(); }
00044         virtual QString     key(int column, bool ascending) const;
00045     protected:
00046         virtual QString     lastColumnText() const        { return alarmText(event()); }
00047     private:
00048         QString             alarmText(const KAEvent&) const;
00049         QString             alarmTimeText(const DateTime&) const;
00050         QString             timeToAlarmText(const QDateTime& now) const;
00051 
00052         static int          mTimeHourPos;       // position of hour within time string, or -1 if leading zeroes included
00053         static int          mDigitWidth;        // display width of a digit
00054         QString             mDateTimeOrder;     // controls ordering of date/time column
00055         QString             mRepeatOrder;       // controls ordering of repeat column
00056         QString             mColourOrder;       // controls ordering of colour column
00057         QString             mTypeOrder;         // controls ordering of alarm type column
00058         mutable int         mMessageColWidth;   // width needed to display complete message text
00059         mutable bool        mMessageTruncated;  // multi-line message text has been truncated for the display
00060         bool                mTimeToAlarmShown;  // relative alarm time is displayed
00061 };
00062 
00063 
00064 class AlarmListView : public EventListViewBase
00065 {
00066         Q_OBJECT       // needed by QObject::isA() calls
00067     public:
00068         enum ColumnIndex {    // default column order
00069             TIME_COLUMN, TIME_TO_COLUMN, REPEAT_COLUMN, COLOUR_COLUMN, TYPE_COLUMN, MESSAGE_COLUMN,
00070             COLUMN_COUNT
00071         };
00072 
00073         AlarmListView(const QValueList<int>& order, QWidget* parent = 0, const char* name = 0);
00074         ~AlarmListView();
00075         void                   showExpired(bool show)      { mShowExpired = show; }
00076         bool                   showingExpired() const      { return mShowExpired; }
00077         bool                   showingTimeTo() const       { return columnWidth(mColumn[TIME_TO_COLUMN]); }
00078         void                   selectTimeColumns(bool time, bool timeTo);
00079         void                   updateTimeToAlarms(bool forceDisplay = false);
00080         bool                   expired(AlarmListViewItem*) const;
00081         bool                   drawMessageInColour() const            { return mDrawMessageInColour; }
00082         void                   setDrawMessageInColour(bool inColour)  { mDrawMessageInColour = inColour; }
00083         QValueList<int>        columnOrder() const;
00084         int                    column(ColumnIndex i) const { return mColumn[i]; }
00085         static bool            dragging()                  { return mDragging; }
00086         // Overridden base class methods
00087         static void            addEvent(const KAEvent&, EventListViewBase*);
00088         static void            modifyEvent(const KAEvent& e, EventListViewBase* selectionView)
00089                                      { EventListViewBase::modifyEvent(e.id(), e, mInstanceList, selectionView); }
00090         static void            modifyEvent(const QString& oldEventID, const KAEvent& newEvent, EventListViewBase* selectionView)
00091                                      { EventListViewBase::modifyEvent(oldEventID, newEvent, mInstanceList, selectionView); }
00092         static void            deleteEvent(const QString& eventID)
00093                                      { EventListViewBase::deleteEvent(eventID, mInstanceList); }
00094         static void            undeleteEvent(const QString& oldEventID, const KAEvent& event, EventListViewBase* selectionView)
00095                                      { EventListViewBase::modifyEvent(oldEventID, event, mInstanceList, selectionView); }
00096         AlarmListViewItem*     getEntry(const QString& eventID)  { return (AlarmListViewItem*)EventListViewBase::getEntry(eventID); }
00097         AlarmListViewItem*     currentItem() const    { return (AlarmListViewItem*)EventListViewBase::currentItem(); }
00098         AlarmListViewItem*     firstChild() const     { return (AlarmListViewItem*)EventListViewBase::firstChild(); }
00099         AlarmListViewItem*     selectedItem() const   { return (AlarmListViewItem*)EventListViewBase::selectedItem(); }
00100         virtual void           setSelected(QListViewItem* item, bool selected)      { EventListViewBase::setSelected(item, selected); }
00101         virtual void           setSelected(AlarmListViewItem* item, bool selected)  { EventListViewBase::setSelected(item, selected); }
00102         virtual InstanceList   instances()            { return mInstanceList; }
00103 
00104     protected:
00105         virtual void           populate();
00106         EventListViewItemBase* createItem(const KAEvent&);
00107         virtual QString        whatsThisText(int column) const;
00108         virtual bool           shouldShowEvent(const KAEvent& e) const  { return mShowExpired || !e.expired(); }
00109         AlarmListViewItem*     addEntry(const KAEvent& e, bool setSize = false)
00110                                        { return addEntry(e, QDateTime::currentDateTime(), setSize); }
00111         AlarmListViewItem*     updateEntry(AlarmListViewItem* item, const KAEvent& newEvent, bool setSize = false)
00112                                        { return (AlarmListViewItem*)EventListViewBase::updateEntry(item, newEvent, setSize); }
00113         virtual void           contentsMousePressEvent(QMouseEvent*);
00114         virtual void           contentsMouseMoveEvent(QMouseEvent*);
00115         virtual void           contentsMouseReleaseEvent(QMouseEvent*);
00116 
00117     private:
00118         AlarmListViewItem*     addEntry(const KAEvent&, const QDateTime& now, bool setSize = false, bool reselect = false);
00119 
00120         static InstanceList    mInstanceList;         // all current instances of this class
00121         static bool            mDragging;
00122         int                    mColumn[COLUMN_COUNT]; // initial position of each column
00123         int                    mTimeColumnHeaderWidth;
00124         int                    mTimeToColumnHeaderWidth;
00125         AlarmListTooltip*      mTooltip;              // tooltip for showing full text of alarm messages
00126         QPoint                 mMousePressPos;        // where the mouse left button was last pressed
00127         bool                   mMousePressed;         // true while the mouse left button is pressed
00128         bool                   mDrawMessageInColour;
00129         bool                   mShowExpired;          // true to show expired alarms
00130 };
00131 
00132 #endif // ALARMLISTVIEW_H
00133 
KDE Home | KDE Accessibility Home | Description of Access Keys