File indexing completed on 2024-05-12 04:20:41
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Dag Andersen <danders@get2net.dk> 0003 * 0004 * This file is part of the KGantt library. 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 0010 #include "kganttdatetimetimelinedialog.h" 0011 #include "ui_kganttdatetimetimelinedialog.h" 0012 #include "kganttdatetimetimeline.h" 0013 #include "kganttpenstylecombobox.h" 0014 0015 #include <QPixmap> 0016 #include <QPainter> 0017 #include <QPen> 0018 #include <QColorDialog> 0019 #include <QTime> 0020 #include <QTimer> 0021 #include <QMetaEnum> 0022 #include <QAbstractItemModel> 0023 0024 namespace KGantt { 0025 class DateTimeTimeLineDialog::Private 0026 { 0027 public: 0028 Private() : timeLine(nullptr) {} 0029 0030 Ui::DateTimeTimeLineDialog ui; 0031 DateTimeTimeLine *timeLine; 0032 QColor penColor; 0033 }; 0034 } 0035 0036 using namespace KGantt; 0037 0038 DateTimeTimeLineDialog::DateTimeTimeLineDialog(DateTimeTimeLine *timeLine, QWidget* parent) 0039 : QDialog(parent) 0040 , d( new Private()) 0041 { 0042 d->timeLine = timeLine; 0043 d->ui.setupUi(this); 0044 0045 DateTimeTimeLine::Options opt = d->timeLine->options(); 0046 if (opt & DateTimeTimeLine::Foreground) { 0047 d->ui.foreground->setChecked(true); 0048 } else if (opt & DateTimeTimeLine::Background) { 0049 d->ui.background->setChecked(true); 0050 } 0051 d->ui.useCustomPen->setCheckState((opt & DateTimeTimeLine::UseCustomPen) ? Qt::Checked : Qt::Unchecked); 0052 0053 QPen pen = d->timeLine->pen(); // get standard if not set 0054 d->ui.penWidth->setValue(pen.width()); 0055 d->ui.penStyle->setCurrentStyle(pen.style()); 0056 d->penColor = pen.color(); 0057 0058 d->ui.updateInterval->setTime(QTime::fromMSecsSinceStartOfDay(d->timeLine->interval())); 0059 d->ui.dateTime->setDateTime(timeLine->dateTime()); 0060 0061 connect(d->ui.buttonBox, &QDialogButtonBox::accepted, this, &DateTimeTimeLineDialog::ok); 0062 connect(d->ui.openColorDialog, &QAbstractButton::clicked, this, &DateTimeTimeLineDialog::openColorDialog); 0063 0064 QTimer::singleShot(0, this, SLOT(updateColorButton())); // wait for correct button size 0065 } 0066 0067 DateTimeTimeLineDialog::~DateTimeTimeLineDialog() 0068 { 0069 } 0070 0071 void DateTimeTimeLineDialog::ok() 0072 { 0073 DateTimeTimeLine::Options opt; 0074 if (d->ui.foreground->isChecked()) { 0075 opt |= DateTimeTimeLine::Foreground; 0076 } else if (d->ui.background->isChecked()) { 0077 opt |= DateTimeTimeLine::Background; 0078 } 0079 if (d->ui.useCustomPen->checkState()) { 0080 opt |= DateTimeTimeLine::UseCustomPen; 0081 } 0082 d->timeLine->setOptions(opt); 0083 QPen pen; 0084 pen.setWidth(d->ui.penWidth->value()); 0085 pen.setStyle(static_cast<Qt::PenStyle>(d->ui.penStyle->currentData().toInt())); 0086 pen.setColor(d->penColor); 0087 d->timeLine->setPen(pen); 0088 0089 d->timeLine->setInterval(d->ui.updateInterval->time().msecsSinceStartOfDay()); 0090 d->timeLine->setDateTime(d->ui.dateTime->dateTime()); 0091 } 0092 0093 void DateTimeTimeLineDialog::updateColorButton() 0094 { 0095 QSize size = d->ui.openColorDialog->size(); 0096 qInfo()<<Q_FUNC_INFO<<size<<d->penColor; 0097 QPixmap px(size); 0098 px.fill(); 0099 QPainter painter(&px); 0100 painter.fillRect(0, 0, size.width(), size.height(), d->penColor); 0101 d->ui.openColorDialog->setIcon(QIcon(px)); 0102 } 0103 0104 void DateTimeTimeLineDialog::openColorDialog() 0105 { 0106 QColorDialog dlg; 0107 if (dlg.exec() == QDialog::Accepted) { 0108 d->penColor = dlg.selectedColor(); 0109 updateColorButton(); 0110 } 0111 }