kalarm
alarmlistdelegate.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kalarm.h"
00022
00023 #include <QAbstractProxyModel>
00024 #include <QMouseEvent>
00025 #include <QApplication>
00026
00027 #include <kdebug.h>
00028
00029 #include "resources/kcalendar.h"
00030 #include "alarmlistview.h"
00031 #include "alarmresources.h"
00032 #include "eventlistmodel.h"
00033 #include "functions.h"
00034 #include "alarmlistdelegate.moc"
00035
00036
00037 void AlarmListDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
00038 {
00039 if (index.isValid() && index.column() == EventListModel::TimeColumn)
00040 {
00041 QString str = index.data(Qt::DisplayRole).toString();
00042
00043 int i = str.indexOf(" ~");
00044 if (i >= 0)
00045 {
00046 QStyleOptionViewItem opt = option;
00047 QVariant value;
00048 value = index.data(Qt::ForegroundRole);
00049 if (value.isValid())
00050 opt.palette.setColor(QPalette::Text, value.value<QColor>());
00051 int digitWidth = opt.fontMetrics.width("0");
00052 QString date = str.left(i + 1);
00053 int w = opt.fontMetrics.width(date) + digitWidth;
00054 drawDisplay(painter, opt, opt.rect, date);
00055 QRect rect(opt.rect);
00056 rect.setLeft(rect.left() + w);
00057 drawDisplay(painter, opt, rect, str.mid(i + 2));
00058 return;
00059 }
00060 }
00061 QItemDelegate::paint(painter, option, index);
00062 }
00063
00064 QSize AlarmListDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
00065 {
00066 if (index.isValid())
00067 {
00068 switch (index.column())
00069 {
00070 case EventListModel::TimeColumn:
00071 {
00072 int h = option.fontMetrics.lineSpacing();
00073 const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
00074 int w = 2 * textMargin;
00075 QString str = index.data(Qt::DisplayRole).toString();
00076
00077 int i = str.indexOf(" ~");
00078 if (i >= 0)
00079 {
00080 int digitWidth = option.fontMetrics.width("0");
00081 QString date = str.left(i + 1);
00082 w += option.fontMetrics.width(date) + digitWidth + option.fontMetrics.width(str.mid(i + 2));;
00083 }
00084 else
00085 w += option.fontMetrics.width(str);
00086 return QSize(w, h);
00087 }
00088 case EventListModel::ColourColumn:
00089 {
00090 int h = option.fontMetrics.lineSpacing();
00091 return QSize(h * 3 / 4, h);
00092 }
00093 }
00094 }
00095 return QItemDelegate::sizeHint(option, index);
00096 }
00097
00098 void AlarmListDelegate::edit(KAEvent* event, EventListView* view)
00099 {
00100 KAlarm::editAlarm(event, static_cast<AlarmListView*>(view));
00101 }