/* * alarmlistview.h - widget showing list of outstanding alarms * Program: kalarm * Copyright © 2001-2006 by David Jarvie * * 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 TQDateTime& now); TQTime showTimeToAlarm(bool show); void updateTimeToAlarm(const TQDateTime& now, bool forceDisplay = false); virtual void paintCell(TQPainter*, const TQColorGroup&, 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*)TQListViewItem::nextSibling(); } virtual TQString key(int column, bool ascending) const; protected: virtual TQString lastColumnText() const { return alarmText(event()); } private: TQString alarmText(const KAEvent&) const; TQString alarmTimeText(const DateTime&) const; TQString timeToAlarmText(const TQDateTime& 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 TQString mDateTimeOrder; // controls ordering of date/time column TQString mRepeatOrder; // controls ordering of repeat column TQString mColourOrder; // controls ordering of colour column TQString 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 TQObject::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 TQValueList& order, TQWidget* 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; } TQValueList 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 TQString& oldEventID, const KAEvent& newEvent, EventListViewBase* selectionView) { EventListViewBase::modifyEvent(oldEventID, newEvent, mInstanceList, selectionView); } static void deleteEvent(const TQString& eventID) { EventListViewBase::deleteEvent(eventID, mInstanceList); } static void undeleteEvent(const TQString& oldEventID, const KAEvent& event, EventListViewBase* selectionView) { EventListViewBase::modifyEvent(oldEventID, event, mInstanceList, selectionView); } AlarmListViewItem* getEntry(const TQString& 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(TQListViewItem* 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 TQString 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, TQDateTime::currentDateTime(), setSize); } AlarmListViewItem* updateEntry(AlarmListViewItem* item, const KAEvent& newEvent, bool setSize = false) { return (AlarmListViewItem*)EventListViewBase::updateEntry(item, newEvent, setSize); } virtual void contentsMousePressEvent(TQMouseEvent*); virtual void contentsMouseMoveEvent(TQMouseEvent*); virtual void contentsMouseReleaseEvent(TQMouseEvent*); private: AlarmListViewItem* addEntry(const KAEvent&, const TQDateTime& 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 TQPoint 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