File indexing completed on 2024-04-28 05:51:10

0001 /*
0002  *  SPDX-FileCopyrightText: 2002-2003 Jesper K. Pedersen <blackie@kde.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-only
0005  **/
0006 
0007 #include "widgetwindow.h"
0008 
0009 #include <QHBoxLayout>
0010 #include <QVBoxLayout>
0011 
0012 #include <KLocalizedString>
0013 #include <QListWidget>
0014 
0015 #include <QDialogButtonBox>
0016 
0017 #include "kmultiformlistboxentry.h"
0018 #include "kmultiformlistboxfactory.h"
0019 #include "windowlistboxitem.h"
0020 
0021 WidgetWindow::WidgetWindow(KMultiFormListBoxFactory *factory, QListWidget *lb)
0022     : QDialog(nullptr)
0023 {
0024     init(factory, lb);
0025 }
0026 
0027 WidgetWindow::WidgetWindow(KMultiFormListBoxFactory *factory, KMultiFormListBoxEntry *widget, QListWidget *lb)
0028     : QDialog(nullptr)
0029 {
0030     init(factory, lb, widget);
0031 }
0032 
0033 void WidgetWindow::init(KMultiFormListBoxFactory *factory, QListWidget *lb, KMultiFormListBoxEntry *widget)
0034 {
0035     setWindowTitle(i18n("Widget Configuration"));
0036     setLayout(new QVBoxLayout);
0037 
0038     listbox = lb;
0039     myFact = factory;
0040 
0041     QFrame *frame = new QFrame;
0042     QHBoxLayout *lay = new QHBoxLayout;
0043     frame->setLayout(lay);
0044     lay->setObjectName(QStringLiteral("WidgetWindow::init::lay"));
0045     lay->setSpacing(-1);
0046     lay->setContentsMargins(0, 0, 0, 0);
0047 
0048     if (widget != nullptr) {
0049         myWidget = widget;
0050         widget->setParent(frame);
0051     } else {
0052         myWidget = factory->create(frame);
0053     }
0054     QDataStream stream(&_backup, QIODeviceBase::WriteOnly);
0055 
0056     stream.setVersion(QDataStream::Qt_3_1);
0057     myFact->toStream(myWidget, stream);
0058 
0059     lay->addWidget(myWidget);
0060 
0061     if (widget != nullptr) {
0062         initialShow = false;
0063         myListboxItem = new WindowListboxItem(listbox, myWidget->idxString(), this);
0064     } else {
0065         initialShow = true;
0066     }
0067 
0068     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0069     connect(buttonBox, &QDialogButtonBox::accepted, this, &WidgetWindow::slotOk);
0070     connect(buttonBox, &QDialogButtonBox::rejected, this, &WidgetWindow::slotCancel);
0071     layout()->addWidget(frame);
0072     layout()->addWidget(buttonBox);
0073 }
0074 
0075 WidgetWindow::~WidgetWindow()
0076 {
0077     delete myWidget;
0078 }
0079 
0080 void WidgetWindow::slotOk()
0081 {
0082     if (initialShow) {
0083         myListboxItem = new WindowListboxItem(listbox, myWidget->idxString(), this);
0084     } else {
0085         myListboxItem->setText(myWidget->idxString());
0086     }
0087     initialShow = false;
0088     QDialog::accept();
0089 }
0090 
0091 void WidgetWindow::slotCancel()
0092 {
0093     if (initialShow) {
0094         deleteLater();
0095     } else {
0096         QDataStream stream(&_backup, QIODeviceBase::ReadOnly);
0097 
0098         stream.setVersion(QDataStream::Qt_3_1);
0099         myFact->fromStream(stream, myWidget);
0100     }
0101     QDialog::reject();
0102 }
0103 
0104 WidgetWindow *WidgetWindow::clone()
0105 {
0106     WidgetWindow *item = new WidgetWindow(myFact, listbox);
0107     QByteArray data;
0108     QDataStream ws(&data, QIODeviceBase::WriteOnly);
0109 
0110     ws.setVersion(QDataStream::Qt_3_1);
0111     myFact->toStream(myWidget, ws);
0112     QDataStream rs(&data, QIODeviceBase::ReadOnly);
0113 
0114     rs.setVersion(QDataStream::Qt_3_1);
0115     myFact->fromStream(rs, item->myWidget);
0116 
0117     item->slotOk();
0118     return item;
0119 }
0120 
0121 void WidgetWindow::display()
0122 {
0123     QDataStream stream(&_backup, QIODeviceBase::WriteOnly);
0124 
0125     stream.setVersion(QDataStream::Qt_3_1);
0126     myFact->toStream(myWidget, stream);
0127     show();
0128 }
0129 
0130 KMultiFormListBoxEntry *WidgetWindow::entry()
0131 {
0132     return myWidget;
0133 }