Krita Source Code Documentation
Loading...
Searching...
No Matches
KoDialog.cpp
Go to the documentation of this file.
1/* This file is part of the KDE Libraries
2 * SPDX-FileCopyrightText: 1998 Thomas Tanghus (tanghus@earthling.net)
3 * SPDX-FileCopyrightText: 1999-2000 Espen Sand (espen@kde.org)
4 * SPDX-FileCopyrightText: 1999-2000 Holger Freyther <freyther@kde.org>
5 * SPDX-FileCopyrightText: 2005-2009 Olivier Goffart (ogoffart at kde.org)
6 *
7 * SPDX-License-Identifier: LGPL-2.0-or-later
8 */
9
10#include "KoDialog.h"
11#include "KoDialog_p.h"
12
13#include <QWindow>
14#include <QApplication>
15#include <QGuiApplication>
16#include <QDialogButtonBox>
17#include <QHBoxLayout>
18#include <QHideEvent>
19#include <QPointer>
20#include <QStyle>
21#include <QTimer>
22#include <QVBoxLayout>
23#include <QWhatsThis>
24#include <QDebug>
25#include <QPushButton>
26#include <QScreen>
27#include <QTimer>
28
29#include <kconfig.h>
30#include <klocalizedstring.h>
31
32#include <kseparator.h>
33#include <kstandardguiitem.h>
34#include <khelpclient.h>
35#include <kurllabel.h>
36#include <kwindowconfig.h>
37
39{
40 Q_Q(KoDialog);
41 if (!dirty) {
42 QMetaObject::invokeMethod(q, "queuedLayoutUpdate", Qt::QueuedConnection);
43 dirty = true;
44 }
45}
46
48{
49 if (!dirty) {
50 return;
51 }
52
53 dirty = false;
54
55 Q_Q(KoDialog);
56
57 // Don't lose the focus widget when re-creating the layout.
58 // Testcase: KOrganizer's "Select Categories" dialog
59 QPointer<QWidget> focusWidget = mMainWidget ? mMainWidget->focusWidget() : 0;
60
61 if (q->layout() && q->layout() != mTopLayout) {
62 qWarning() << q->metaObject()->className() << "created with a layout; don't do that, KoDialog takes care of it, use mainWidget or setMainWidget instead";
63 delete q->layout();
64 }
65
66 delete mTopLayout;
67
68 if (mButtonOrientation == Qt::Horizontal) {
69 mTopLayout = new QVBoxLayout(q);
70 } else {
71 mTopLayout = new QHBoxLayout(q);
72 }
73
74 if (mUrlHelp) {
75 mTopLayout->addWidget(mUrlHelp, 0, Qt::AlignRight);
76 }
77
78 if (mMainWidget) {
79 mTopLayout->addWidget(mMainWidget, 10);
80 }
81
82 if (mDetailsWidget) {
83 mTopLayout->addWidget(mDetailsWidget);
84 }
85
86 if (mActionSeparator) {
87 mTopLayout->addWidget(mActionSeparator);
88 }
89
90 if (mButtonBox) {
91 mButtonBox->setOrientation(mButtonOrientation);
92 mTopLayout->addWidget(mButtonBox);
93 }
94
95 if (focusWidget) {
96 focusWidget->setFocus();
97 }
98}
99
101{
102 Q_Q(KoDialog);
103
104 QDialogButtonBox::ButtonRole role = QDialogButtonBox::InvalidRole;
105 switch (key) {
106 case KoDialog::Help:
108 role = QDialogButtonBox::HelpRole;
109 break;
111 case KoDialog::Reset:
112 role = QDialogButtonBox::ResetRole;
113 break;
114 case KoDialog::Ok:
115 role = QDialogButtonBox::AcceptRole;
116 break;
117 case KoDialog::Apply:
118 role = QDialogButtonBox::ApplyRole;
119 break;
120 case KoDialog::Try:
121 case KoDialog::Yes:
122 role = QDialogButtonBox::YesRole;
123 break;
124 case KoDialog::Close:
125 case KoDialog::Cancel:
126 role = QDialogButtonBox::RejectRole;
127 break;
128 case KoDialog::No:
129 role = QDialogButtonBox::NoRole;
130 break;
131 case KoDialog::User1:
132 case KoDialog::User2:
133 case KoDialog::User3:
134 role = QDialogButtonBox::ActionRole;
135 break;
136 default:
137 role = QDialogButtonBox::InvalidRole;
138 break;
139 }
140
141 if (role == QDialogButtonBox::InvalidRole) {
142 return;
143 }
144
145 QPushButton *button = new QPushButton;
146 KGuiItem::assign(button, item);
147 mButtonBox->addButton(button, role);
148
149 mButtonList.insert(key, button);
150
151 QObject::connect(button, &QPushButton::clicked, q, [=] { q->slotButtonClicked(key); });
152
153 if (key == mDefaultButton) {
154 // Now that it exists, set it as default
155 q->setDefaultButton(mDefaultButton);
156 }
157}
158
160{
161 q_ptr = q;
162
163 dirty = false;
164
167
168 q->setPlainCaption(qApp->applicationDisplayName()); // set appropriate initial window title for case it gets not set later
169}
170
175
176KoDialog::KoDialog(QWidget *parent, Qt::WindowFlags flags)
177 : QDialog(parent ? parent : qApp->activeWindow(), flags)
178 , d_ptr(new KoDialogPrivate)
179{
180 d_ptr->init(this);
181}
182
183KoDialog::KoDialog(KoDialogPrivate &dd, QWidget *parent, Qt::WindowFlags flags)
184 : QDialog(parent ? parent : qApp->activeWindow(), flags)
185 , d_ptr(&dd)
186{
187 d_ptr->init(this);
188}
189
191{
192 delete d_ptr;
193}
194
195void KoDialog::setButtons(ButtonCodes buttonMask)
196{
197 Q_D(KoDialog);
198 if (d->mButtonBox) {
199 d->mButtonList.clear();
200
201 delete d->mButtonBox;
202 d->mButtonBox = 0;
203 }
204
205 if (buttonMask & Cancel) {
206 buttonMask &= ~Close;
207 }
208
209 if (buttonMask & Apply) {
210 buttonMask &= ~Try;
211 }
212
213 if (buttonMask & Details) {
214 buttonMask &= ~Default;
215 }
216
217 if (buttonMask == None) {
218 d->setupLayout();
219 return; // When we want no button box
220 }
221
222 d->mEscapeButton = (buttonMask & Cancel) ? Cancel : Close;
223 d->mButtonBox = new QDialogButtonBox(this);
224
225 if (buttonMask & Help) {
226 d->appendButton(Help, KStandardGuiItem::help());
227 }
228 if (buttonMask & Default) {
229 d->appendButton(Default, KStandardGuiItem::defaults());
230 }
231 if (buttonMask & Reset) {
232 d->appendButton(Reset, KStandardGuiItem::reset());
233 }
234 if (buttonMask & User3) {
235 d->appendButton(User3, KGuiItem());
236 }
237 if (buttonMask & User2) {
238 d->appendButton(User2, KGuiItem());
239 }
240 if (buttonMask & User1) {
241 d->appendButton(User1, KGuiItem());
242 }
243 if (buttonMask & Ok) {
244 d->appendButton(Ok, KStandardGuiItem::ok());
245 }
246 if (buttonMask & Apply) {
247 d->appendButton(Apply, KStandardGuiItem::apply());
248 }
249 if (buttonMask & Try) {
250 d->appendButton(Try, KGuiItem(i18n("&Try")));
251 }
252 if (buttonMask & Cancel) {
253 d->appendButton(Cancel, KStandardGuiItem::cancel());
254 }
255 if (buttonMask & Close) {
256 d->appendButton(Close, KStandardGuiItem::close());
257 }
258 if (buttonMask & Yes) {
259 d->appendButton(Yes, KStandardGuiItem::apply());
260 }
261 if (buttonMask & No) {
262 d->appendButton(No, KStandardGuiItem::cancel());
263 }
264 if (buttonMask & Details) {
265 d->appendButton(Details, KGuiItem(QString(), "help-about"));
267 }
268
269 d->setupLayout();
270}
271
272void KoDialog::setButtonsOrientation(Qt::Orientation orientation)
273{
274 Q_D(KoDialog);
275 if (d->mButtonOrientation != orientation) {
276 d->mButtonOrientation = orientation;
277
278 if (d->mActionSeparator) {
279 d->mActionSeparator->setOrientation(d->mButtonOrientation);
280 }
281
282 if (d->mButtonOrientation == Qt::Vertical) {
283 enableLinkedHelp(false); // 2000-06-18 Espen: No support for this yet.
284 }
285 }
286}
287
289{
290 d_func()->mEscapeButton = id;
291}
292
294{
295 Q_D(KoDialog);
296
297 if (newDefaultButton == None) {
298 newDefaultButton = NoDefault; // #148969
299 }
300
301 const KoDialog::ButtonCode oldDefault = defaultButton();
302
303 bool oldDefaultHadFocus = false;
304
305 if (oldDefault != NoDefault) {
306 QPushButton *old = button(oldDefault);
307 if (old) {
308 oldDefaultHadFocus = (focusWidget() == old);
309 old->setDefault(false);
310 }
311 }
312
313 if (newDefaultButton != NoDefault) {
314 QPushButton *b = button(newDefaultButton);
315 if (b) {
316 b->setDefault(true);
317 if (focusWidget() == 0 || oldDefaultHadFocus) {
318 // No widget had focus yet, or the old default button had
319 // -> ok to give focus to the new default button, so that it's
320 // really default (Enter triggers it).
321 // But we don't do this if the kdialog user gave focus to a
322 // specific widget in the dialog.
323 b->setFocus();
324 }
325 }
326 }
327 d->mDefaultButton = newDefaultButton;
328 Q_ASSERT(defaultButton() == newDefaultButton);
329}
330
332{
333 Q_D(const KoDialog);
334 QHashIterator<int, QPushButton *> it(d->mButtonList);
335 while (it.hasNext()) {
336 it.next();
337 if (it.value()->isDefault()) {
338 return (ButtonCode)it.key();
339 }
340 }
341
342 return d->mDefaultButton;
343}
344
345void KoDialog::setMainWidget(QWidget *widget)
346{
347 Q_D(KoDialog);
348 if (d->mMainWidget == widget) {
349 return;
350 }
351 d->mMainWidget = widget;
352 if (d->mMainWidget && d->mMainWidget->layout()) {
353 // Avoid double-margin problem
354 d->mMainWidget->layout()->setContentsMargins(0, 0, 0, 0);
355 }
356 d->setupLayout();
357}
358
360{
361 Q_D(KoDialog);
362 if (!d->mMainWidget) {
363 setMainWidget(new QWidget(this));
364 }
365 return d->mMainWidget;
366}
367
369{
370 Q_D(const KoDialog);
371
372 if (!d->mMinSize.isEmpty()) {
373 return d->mMinSize.expandedTo(minimumSizeHint()) + d->mIncSize;
374 } else {
375 if (d->dirty) {
376 const_cast<KoDialogPrivate *>(d)->queuedLayoutUpdate();
377 }
378 return QDialog::sizeHint() + d->mIncSize;
379 }
380}
381
383{
384 Q_D(const KoDialog);
385
386 if (d->dirty) {
387 const_cast<KoDialogPrivate *>(d)->queuedLayoutUpdate();
388 }
389 return QDialog::minimumSizeHint() + d->mIncSize;
390}
391
392//
393// Grab QDialogs keypresses if non-modal.
394//
395void KoDialog::keyPressEvent(QKeyEvent *event)
396{
397 Q_D(KoDialog);
398 if (event->modifiers() == 0) {
399 if (event->key() == Qt::Key_F1) {
400 QPushButton *button = this->button(Help);
401
402 if (button) {
403 button->animateClick();
404 event->accept();
405 return;
406 }
407 }
408
409 if (event->key() == Qt::Key_Escape) {
410 QPushButton *button = this->button(d->mEscapeButton);
411
412 if (button) {
413 button->animateClick();
414 event->accept();
415 return;
416 }
417
418 }
419 } else if (event->key() == Qt::Key_F1 && event->modifiers() == Qt::ShiftModifier) {
420 QWhatsThis::enterWhatsThisMode();
421 event->accept();
422 return;
423 } else if (event->modifiers() == Qt::ControlModifier &&
424 (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)) {
425 // accept the dialog when Ctrl-Return is pressed
426 QPushButton *button = this->button(Ok);
427
428 if (button) {
429 button->animateClick();
430 event->accept();
431 return;
432 }
433 }
434
435 QDialog::keyPressEvent(event);
436}
437
438void KoDialog::showEvent(QShowEvent *e)
439{
440 QDialog::showEvent(e);
441 QTimer::singleShot(5, Qt::CoarseTimer, [&]() {
442 adjustPosition(parentWidget());
443 });
444}
445
447{
448 return QApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin);
449}
450
452{
453 return QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing);
454}
455
457{
458 return QFontMetricsF(QApplication::font()).lineSpacing();
459}
460
461QString KoDialog::makeStandardCaption(const QString &userCaption,
462 QWidget *window,
463 CaptionFlags flags)
464{
465 Q_UNUSED(window);
466 QString caption = qApp->applicationDisplayName();
467 QString captionString = userCaption.isEmpty() ? caption : userCaption;
468
469 // If the document is modified, add '[modified]'.
470 if (flags & ModifiedCaption) {
471 captionString += QString::fromUtf8(" [") + i18n("modified") + QString::fromUtf8("]");
472 }
473
474 if (!userCaption.isEmpty()) {
475 // Add the application name if:
476 // User asked for it, it's not a duplication and the app name (caption()) is not empty
477 if (flags & AppNameCaption &&
478 !caption.isEmpty() &&
479 !userCaption.endsWith(caption)) {
480 // TODO: check to see if this is a transient/secondary window before trying to add the app name
481 // on platforms that need this
482 captionString += i18nc("Document/application separator in titlebar", " – ") + caption;
483 }
484 }
485
486 return captionString;
487}
488
489void KoDialog::setCaption(const QString &_caption)
490{
491 const QString caption = makeStandardCaption(_caption, this);
492 setPlainCaption(caption);
493}
494
495void KoDialog::setCaption(const QString &caption, bool modified)
496{
497 CaptionFlags flags = HIGCompliantCaption;
498
499 // ### Qt5 TODO: port to [*], see QWidget::setWindowFilePath
500 if (modified) {
501 flags |= ModifiedCaption;
502 }
503
504 setPlainCaption(makeStandardCaption(caption, this, flags));
505}
506
507void KoDialog::setPlainCaption(const QString &caption)
508{
509 if (QWidget *win = window()) {
510 win->setWindowTitle(caption);
511 }
512}
513
514void KoDialog::resizeLayout(QWidget *widget, int margin, int spacing) //static
515{
516 if (widget->layout()) {
517 resizeLayout(widget->layout(), margin, spacing);
518 }
519
520 if (widget->children().count() > 0) {
521 const QList<QObject *> list = widget->children();
522 foreach (QObject *object, list) {
523 if (object->isWidgetType()) {
524 resizeLayout((QWidget *)object, margin, spacing);
525 }
526 }
527 }
528}
529
530void KoDialog::resizeLayout(QLayout *layout, int margin, int spacing) //static
531{
532 QLayoutItem *child;
533 int pos = 0;
534
535 while ((child = layout->itemAt(pos))) {
536 if (child->layout()) {
537 resizeLayout(child->layout(), margin, spacing);
538 }
539
540 ++pos;
541 }
542
543 if (layout->layout()) {
544 layout->layout()->setContentsMargins(margin, margin, margin, margin);
545 layout->layout()->setSpacing(spacing);
546 }
547}
548
550{
551 Q_D(KoDialog);
552 if ((d->mActionSeparator != 0) == state) {
553 return;
554 }
555 if (state) {
556 if (d->mActionSeparator) {
557 return;
558 }
559
560 d->mActionSeparator = new KSeparator(this);
561 d->mActionSeparator->setOrientation(d->mButtonOrientation);
562 } else {
563 delete d->mActionSeparator;
564 d->mActionSeparator = 0;
565 }
566
567 d->setupLayout();
568}
569
570void KoDialog::setInitialSize(const QSize &size)
571{
572 d_func()->mMinSize = size;
573 adjustSize();
574}
575
576void KoDialog::incrementInitialSize(const QSize &size)
577{
578 d_func()->mIncSize = size;
579 adjustSize();
580}
581
582QPushButton *KoDialog::button(ButtonCode id) const
583{
584 Q_D(const KoDialog);
585 return d->mButtonList.value(id, 0);
586}
587
589{
590 QPushButton *button = this->button(id);
591 if (button) {
592 button->setEnabled(state);
593 }
594}
595
597{
598 QPushButton *button = this->button(id);
599 if (button) {
600 return button->isEnabled();
601 }
602
603 return false;
604}
605
607{
608 enableButton(Ok, state);
609}
610
612{
613 enableButton(Apply, state);
614}
615
617{
618 enableButton(Cancel, state);
619}
620
622{
623 QPushButton *button = this->button(id);
624 if (button) {
625 state ? button->show() : button->hide();
626 }
627}
628
629void KoDialog::setButtonGuiItem(ButtonCode id, const KGuiItem &item)
630{
631 QPushButton *button = this->button(id);
632 if (!button) {
633 return;
634 }
635
636 KGuiItem::assign(button, item);
637}
638
639void KoDialog::setButtonText(ButtonCode id, const QString &text)
640{
641 Q_D(KoDialog);
642 if (!d->mSettingDetails && (id == Details)) {
643 d->mDetailsButtonText = text;
644 setDetailsWidgetVisible(d->mDetailsVisible);
645 return;
646 }
647
648 QPushButton *button = this->button(id);
649 if (button) {
650 button->setText(text);
651 }
652}
653
655{
656 QPushButton *button = this->button(id);
657 if (button) {
658 return button->text();
659 } else {
660 return QString();
661 }
662}
663
664void KoDialog::setButtonIcon(ButtonCode id, const QIcon &icon)
665{
666 QPushButton *button = this->button(id);
667 if (button) {
668 button->setIcon(icon);
669 }
670}
671
673{
674 QPushButton *button = this->button(id);
675 if (button) {
676 return button->icon();
677 } else {
678 return QIcon();
679 }
680}
681
682void KoDialog::setButtonToolTip(ButtonCode id, const QString &text)
683{
684 QPushButton *button = this->button(id);
685 if (button) {
686 if (text.isEmpty()) {
687 button->setToolTip(QString());
688 } else {
689 button->setToolTip(text);
690 }
691 }
692}
693
695{
696 QPushButton *button = this->button(id);
697 if (button) {
698 return button->toolTip();
699 } else {
700 return QString();
701 }
702}
703
704void KoDialog::setButtonWhatsThis(ButtonCode id, const QString &text)
705{
706 QPushButton *button = this->button(id);
707 if (button) {
708 if (text.isEmpty()) {
709 button->setWhatsThis(QString());
710 } else {
711 button->setWhatsThis(text);
712 }
713 }
714}
715
717{
718 QPushButton *button = this->button(id);
719 if (button) {
720 return button->whatsThis();
721 } else {
722 return QString();
723 }
724}
725
727{
728 QPushButton *button = this->button(id);
729 if (button) {
730 button->setFocus();
731 }
732}
733
734void KoDialog::setDetailsWidget(QWidget *detailsWidget)
735{
736 Q_D(KoDialog);
737 if (d->mDetailsWidget == detailsWidget) {
738 return;
739 }
740 delete d->mDetailsWidget;
741 d->mDetailsWidget = detailsWidget;
742
743 if (d->mDetailsWidget->parentWidget() != this) {
744 d->mDetailsWidget->setParent(this);
745 }
746
747 d->mDetailsWidget->hide();
748 d->setupLayout();
749
750 if (!d->mSettingDetails) {
751 setDetailsWidgetVisible(d->mDetailsVisible);
752 }
753}
754
756{
757 return d_func()->mDetailsVisible;
758}
759
761{
762 Q_D(KoDialog);
763 if (d->mDetailsButtonText.isEmpty()) {
764 d->mDetailsButtonText = i18n("&Details");
765 }
766
767 d->mSettingDetails = true;
768 d->mDetailsVisible = visible;
769 if (d->mDetailsVisible) {
770 Q_EMIT aboutToShowDetails();
771 setButtonText(Details, d->mDetailsButtonText + " <<");
772 if (d->mDetailsWidget) {
773 if (layout()) {
774 layout()->setEnabled(false);
775 }
776
777 d->mDetailsWidget->show();
778
779 adjustSize();
780
781 if (layout()) {
782 layout()->activate();
783 layout()->setEnabled(true);
784 }
785 }
786 } else {
787 setButtonText(Details, d->mDetailsButtonText + " >>");
788 if (d->mDetailsWidget) {
789 d->mDetailsWidget->hide();
790 }
791
792 if (layout()) {
793 layout()->activate();
794 adjustSize();
795 }
796
797 }
798
799 d->mSettingDetails = false;
800}
801
803{
804 if (isVisible()) {
805 hide();
806 }
807
808 deleteLater();
809}
810
812{
813 Q_D(KoDialog);
814 Q_EMIT buttonClicked(static_cast<KoDialog::ButtonCode>(button));
815
816 switch (button) {
817 case Ok:
818 Q_EMIT okClicked();
819 accept();
820 break;
821 case Apply:
822 Q_EMIT applyClicked();
823 break;
824 case Try:
825 Q_EMIT tryClicked();
826 break;
827 case User3:
828 Q_EMIT user3Clicked();
829 break;
830 case User2:
831 Q_EMIT user2Clicked();
832 break;
833 case User1:
834 Q_EMIT user1Clicked();
835 break;
836 case Yes:
837 Q_EMIT yesClicked();
838 done(Yes);
839 break;
840 case No:
841 Q_EMIT noClicked();
842 done(No);
843 break;
844 case Cancel:
845 Q_EMIT cancelClicked();
846 reject();
847 break;
848 case Close:
849 Q_EMIT closeClicked();
850 done(Close); // KDE5: call reject() instead; more QDialog-like.
851 break;
852 case Help:
853 Q_EMIT helpClicked();
854 if (!d->mAnchor.isEmpty() || !d->mHelpApp.isEmpty()) {
855 KHelpClient::invokeHelp(d->mAnchor, d->mHelpApp);
856 }
857 break;
858 case Default:
859 Q_EMIT defaultClicked();
860 break;
861 case Reset:
862 Q_EMIT resetClicked();
863 break;
864 case Details:
865 setDetailsWidgetVisible(!d->mDetailsVisible);
866 break;
867 }
868
869 // If we're here from the closeEvent, and auto-delete is on, well, auto-delete now.
870 if (d->mDeferredDelete) {
871 d->mDeferredDelete = false;
873 }
874}
875
877{
878 Q_D(KoDialog);
879 if ((d->mUrlHelp != 0) == state) {
880 return;
881 }
882 if (state) {
883 if (d->mUrlHelp) {
884 return;
885 }
886
887 d->mUrlHelp = new KUrlLabel(this);
888 d->mUrlHelp->setText(helpLinkText());
889 d->mUrlHelp->setFloatEnabled(true);
890 d->mUrlHelp->setUnderline(true);
891 d->mUrlHelp->setMinimumHeight(fontMetrics().height() + marginHint());
892 connect(d->mUrlHelp, SIGNAL(leftClickedUrl()), SLOT(helpLinkClicked()));
893
894 d->mUrlHelp->show();
895 } else {
896 delete d->mUrlHelp;
897 d->mUrlHelp = 0;
898 }
899
900 d->setupLayout();
901}
902
903void KoDialog::setHelp(const QString &anchor, const QString &appname)
904{
905 Q_D(KoDialog);
906 d->mAnchor = anchor;
907 d->mHelpApp = appname;
908}
909
910void KoDialog::setHelpLinkText(const QString &text)
911{
912 Q_D(KoDialog);
913 d->mHelpLinkText = text;
914 if (d->mUrlHelp) {
915 d->mUrlHelp->setText(helpLinkText());
916 }
917}
918
920{
921 Q_D(const KoDialog);
922 return (d->mHelpLinkText.isEmpty() ? i18n("Get help...") : d->mHelpLinkText);
923}
924
925void KoDialog::hideEvent(QHideEvent *event)
926{
927 Q_EMIT hidden();
928
929 if (!event->spontaneous()) {
930 Q_EMIT finished();
931 }
932}
933
934void KoDialog::closeEvent(QCloseEvent *event)
935{
936 Q_D(KoDialog);
937 QPushButton *button = this->button(d->mEscapeButton);
938 if (button && !isHidden()) {
939 button->animateClick();
940
941 if (testAttribute(Qt::WA_DeleteOnClose)) {
942 // Don't let QWidget::close do a deferred delete just yet, wait for the click first
943 d->mDeferredDelete = true;
944 setAttribute(Qt::WA_DeleteOnClose, false);
945 }
946 } else {
947 QDialog::closeEvent(event);
948 }
949}
950
951#include "moc_KoDialog.cpp"
KSeparator * mActionSeparator
Definition KoDialog_p.h:55
KoDialog::ButtonCode mDefaultButton
Definition KoDialog_p.h:62
KUrlLabel * mUrlHelp
Definition KoDialog_p.h:54
void init(KoDialog *)
Definition KoDialog.cpp:159
QHash< int, QPushButton * > mButtonList
Definition KoDialog_p.h:66
QWidget * mDetailsWidget
Definition KoDialog_p.h:47
QPointer< QWidget > mMainWidget
Definition KoDialog_p.h:53
void appendButton(KoDialog::ButtonCode code, const KGuiItem &item)
Definition KoDialog.cpp:100
Qt::Orientation mButtonOrientation
Definition KoDialog_p.h:61
void setupLayout()
Definition KoDialog.cpp:38
QDialogButtonBox * mButtonBox
Definition KoDialog_p.h:65
KoDialog * q_ptr
Definition KoDialog_p.h:39
void queuedLayoutUpdate()
Definition KoDialog.cpp:47
void helpLinkClicked()
Definition KoDialog.cpp:171
QBoxLayout * mTopLayout
Definition KoDialog_p.h:52
A dialog base class with standard buttons and predefined layouts.
Definition KoDialog.h:116
void enableButtonCancel(bool state)
Definition KoDialog.cpp:616
void user1Clicked()
static int groupSpacingHint()
Definition KoDialog.cpp:456
void setButtonGuiItem(ButtonCode id, const KGuiItem &item)
Definition KoDialog.cpp:629
QWidget * mainWidget()
Definition KoDialog.cpp:359
void enableButton(ButtonCode id, bool state)
Definition KoDialog.cpp:588
void user3Clicked()
void finished()
void setButtonFocus(ButtonCode id)
Definition KoDialog.cpp:726
void applyClicked()
void setButtonsOrientation(Qt::Orientation orientation)
Definition KoDialog.cpp:272
static int marginHint()
Definition KoDialog.cpp:446
void setHelp(const QString &anchor, const QString &appname=QString())
Definition KoDialog.cpp:903
virtual void slotButtonClicked(int button)
Definition KoDialog.cpp:811
static QString makeStandardCaption(const QString &userCaption, QWidget *window=0, CaptionFlags flags=HIGCompliantCaption)
Definition KoDialog.cpp:461
QIcon buttonIcon(ButtonCode id) const
Definition KoDialog.cpp:672
void showButton(ButtonCode id, bool state)
Definition KoDialog.cpp:621
QPushButton * button(ButtonCode id) const
Definition KoDialog.cpp:582
void tryClicked()
void enableLinkedHelp(bool state)
Definition KoDialog.cpp:876
void enableButtonOk(bool state)
Definition KoDialog.cpp:606
ButtonCode defaultButton() const
Definition KoDialog.cpp:331
static void resizeLayout(QWidget *widget, int margin, int spacing)
Definition KoDialog.cpp:514
void aboutToShowDetails()
void resetClicked()
void delayedDestruct()
Definition KoDialog.cpp:802
@ ModifiedCaption
Definition KoDialog.h:401
@ AppNameCaption
Definition KoDialog.h:400
@ HIGCompliantCaption
Definition KoDialog.h:402
void incrementInitialSize(const QSize &size)
Definition KoDialog.cpp:576
void setButtonToolTip(ButtonCode id, const QString &text)
Definition KoDialog.cpp:682
void yesClicked()
void closeEvent(QCloseEvent *e) override
Definition KoDialog.cpp:934
void setEscapeButton(ButtonCode id)
Definition KoDialog.cpp:288
QString helpLinkText() const
Definition KoDialog.cpp:919
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:345
void setButtonText(ButtonCode id, const QString &text)
Definition KoDialog.cpp:639
void setButtonWhatsThis(ButtonCode id, const QString &text)
Definition KoDialog.cpp:704
QString buttonWhatsThis(ButtonCode id) const
Definition KoDialog.cpp:716
void defaultClicked()
void setDetailsWidgetVisible(bool visible)
Definition KoDialog.cpp:760
QSize sizeHint() const override
Definition KoDialog.cpp:368
static int spacingHint()
Definition KoDialog.cpp:451
bool isDetailsWidgetVisible() const
Definition KoDialog.cpp:755
void helpClicked()
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:489
void buttonClicked(KoDialog::ButtonCode button)
void user2Clicked()
void setButtons(ButtonCodes buttonMask)
Definition KoDialog.cpp:195
void hideEvent(QHideEvent *) override
Definition KoDialog.cpp:925
bool isButtonEnabled(ButtonCode id) const
Definition KoDialog.cpp:596
void setButtonIcon(ButtonCode id, const QIcon &icon)
Definition KoDialog.cpp:664
void setInitialSize(const QSize &size)
Definition KoDialog.cpp:570
QString buttonText(ButtonCode id) const
Definition KoDialog.cpp:654
void showButtonSeparator(bool state)
Definition KoDialog.cpp:549
void setDetailsWidget(QWidget *detailsWidget)
Definition KoDialog.cpp:734
void enableButtonApply(bool state)
Definition KoDialog.cpp:611
virtual void setPlainCaption(const QString &caption)
Definition KoDialog.cpp:507
void noClicked()
QString buttonToolTip(ButtonCode id) const
Definition KoDialog.cpp:694
void cancelClicked()
void setDefaultButton(ButtonCode id)
Definition KoDialog.cpp:293
void hidden()
~KoDialog() override
Definition KoDialog.cpp:190
QSize minimumSizeHint() const override
Definition KoDialog.cpp:382
KoDialogPrivate *const d_ptr
Definition KoDialog.h:787
@ User2
Show User defined button 2.
Definition KoDialog.h:137
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
@ No
Show No button. (this button closes the dialog and sets the result to KoDialog::No)
Definition KoDialog.h:132
@ Reset
Show Reset button.
Definition KoDialog.h:134
@ Apply
Show Apply button.
Definition KoDialog.h:128
@ User3
Show User defined button 3.
Definition KoDialog.h:138
@ Yes
Show Yes button. (this button closes the dialog and sets the result to KoDialog::Yes)
Definition KoDialog.h:133
@ Default
Show Default button.
Definition KoDialog.h:126
@ NoDefault
Used when specifying a default button; indicates that no button should be marked by default.
Definition KoDialog.h:139
@ User1
Show User defined button 1.
Definition KoDialog.h:136
@ Details
Show Details button. (this button will show the detail widget set with setDetailsWidget)
Definition KoDialog.h:135
@ Cancel
Show Cancel-button. (this button reject()s the dialog; result set to QDialog::Rejected)
Definition KoDialog.h:130
@ Help
Show Help button. (this button will run the help set with setHelp)
Definition KoDialog.h:125
@ Try
Show Try button.
Definition KoDialog.h:129
@ Close
Show Close-button. (this button closes the dialog)
Definition KoDialog.h:131
KoDialog(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
Definition KoDialog.cpp:176
void closeClicked()
void keyPressEvent(QKeyEvent *) override
Definition KoDialog.cpp:395
void setHelpLinkText(const QString &text)
Definition KoDialog.cpp:910
void okClicked()
void showEvent(QShowEvent *e) override
Definition KoDialog.cpp:438
QString button(const QWheelEvent &ev)
KRITAWIDGETUTILS_EXPORT void invokeHelp(const QString &anchor=QString(), const QString &appname=QString())