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 }