-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdialogbase.cpp
166 lines (127 loc) · 4.79 KB
/
dialogbase.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/************************************************************************
* *
* This source file is part of libkfdialog, a helper library for *
* implementing QtWidgets-based dialogues under KDE Frameworks or *
* standalone. Originally developed as part of Kooka, a KDE *
* scanning/OCR application. *
* *
* The library is free software; you can redistribute and/or *
* modify it under the terms of the GNU General Public License *
* version 2 or (at your option) any later version, as published *
* by the Free Software Foundation and appearing in the file *
* COPYING included in the packaging of this library, or at *
* http://www.gnu.org/licenses/gpl.html *
* *
* Copyright (C) 2016-2021 Jonathan Marten *
* <jjm AT keelhaul DOT me DOT uk> *
* and Kooka authors/contributors *
* *
* Home page: https://github.com/martenjj/libkfdialog *
* *
************************************************************************/
#include "dialogbase.h"
#include <qlayout.h>
#include <qdesktopwidget.h>
#include <qframe.h>
#include <qstyle.h>
#include <qpushbutton.h>
#include <qapplication.h>
#include <QSpacerItem>
#include <kguiitem.h>
#include "dialogstatewatcher.h"
#include "libkfdialog_logging.h"
DialogBase::DialogBase(QWidget *pnt)
: QDialog(pnt)
{
qCDebug(LIBKFDIALOG_LOG);
setModal(true); // convenience, can reset if necessary
mMainWidget = nullptr; // caller not provided yet
mStateWatcher = new DialogStateWatcher(this); // use our own as default
mButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel, this);
connect(mButtonBox, &QDialogButtonBox::accepted, this, &DialogBase::accept);
connect(mButtonBox, &QDialogButtonBox::rejected, this, &DialogBase::reject);
}
void DialogBase::showEvent(QShowEvent *ev)
{
if (layout()==nullptr) // layout not yet set up
{
qCDebug(LIBKFDIALOG_LOG) << "setup layout";
QVBoxLayout *mainLayout = new QVBoxLayout;
setLayout(mainLayout);
if (mMainWidget==nullptr)
{
qCWarning(LIBKFDIALOG_LOG) << "No main widget set for" << objectName();
mMainWidget = new QWidget(this);
}
mainLayout->addWidget(mMainWidget);
mainLayout->setStretchFactor(mMainWidget, 1);
mainLayout->addWidget(mButtonBox);
}
QDialog::showEvent(ev); // show the dialogue
}
void DialogBase::setButtons(QDialogButtonBox::StandardButtons buttons)
{
qCDebug(LIBKFDIALOG_LOG) << buttons;
mButtonBox->setStandardButtons(buttons);
if (buttons & QDialogButtonBox::Ok)
{
qCDebug(LIBKFDIALOG_LOG) << "setup OK button";
QPushButton *okButton = mButtonBox->button(QDialogButtonBox::Ok);
okButton->setDefault(true);
okButton->setShortcut(Qt::CTRL|Qt::Key_Return);
}
// set F1 shortcut for Help?
}
void DialogBase::setButtonEnabled(QDialogButtonBox::StandardButton button, bool state)
{
QPushButton *but = mButtonBox->button(button);
if (but!=nullptr) but->setEnabled(state);
}
void DialogBase::setButtonText(QDialogButtonBox::StandardButton button, const QString &text)
{
QPushButton *but = mButtonBox->button(button);
if (but!=nullptr) but->setText(text);
}
void DialogBase::setButtonIcon(QDialogButtonBox::StandardButton button, const QIcon &icon)
{
QPushButton *but = mButtonBox->button(button);
if (but!=nullptr) but->setIcon(icon);
}
void DialogBase::setButtonGuiItem(QDialogButtonBox::StandardButton button, const KGuiItem &guiItem)
{
QPushButton *but = mButtonBox->button(button);
if (but!=nullptr) KGuiItem::assign(but, guiItem);
}
int DialogBase::spacingHint()
{
// from KDE4 KDialog::spacingHint()
return (QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing));
}
int DialogBase::verticalSpacing()
{
int spacing = QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing);
if (spacing==-1) spacing = QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing);
return (spacing);
}
int DialogBase::horizontalSpacing()
{
int spacing = QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing);
if (spacing==-1) spacing = QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing);
return (spacing);
}
void DialogBase::setStateSaver(DialogStateSaver *saver)
{
mStateWatcher->setStateSaver(saver);
}
DialogStateSaver *DialogBase::stateSaver() const
{
return (mStateWatcher->stateSaver());
}
QSpacerItem *DialogBase::verticalSpacerItem()
{
return (new QSpacerItem(1, verticalSpacing(), QSizePolicy::Minimum, QSizePolicy::Fixed));
}
QSpacerItem *DialogBase::horizontalSpacerItem()
{
return (new QSpacerItem(horizontalSpacing(), 1, QSizePolicy::Fixed, QSizePolicy::Minimum));
}