File indexing completed on 2024-04-21 15:02:45

0001 /*
0002     SPDX-FileCopyrightText: 1999, 2000 David Faure <faure@kde.org>
0003     SPDX-FileCopyrightText: 1999, 2000 Simon Hausmann <hausmann@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #include "parts.h"
0009 
0010 #include "guiactivateevent.h"
0011 
0012 #include <KActionCollection>
0013 #include <KActionMenu>
0014 #include <KPluginMetaData>
0015 
0016 #include <QAction>
0017 #include <QCheckBox>
0018 #include <QFile>
0019 #include <QJsonDocument>
0020 #include <QLineEdit>
0021 #include <QTest>
0022 #include <QTextEdit>
0023 #include <QTextStream>
0024 
0025 #include <KLocalizedString>
0026 #include <QDebug>
0027 
0028 Part1::Part1(QObject *parent, QWidget *parentWidget)
0029     : KParts::ReadOnlyPart(parent)
0030 {
0031     QJsonObject jo = QJsonDocument::fromJson(
0032                          "{ \"KPlugin\": {\n"
0033                          " \"Id\": \"kpartstestpart\",\n"
0034                          " \"Name\": \"KParts test part\",\n"
0035                          " \"Version\": \"0.1\"\n"
0036                          "}\n}")
0037                          .object();
0038     setMetaData(KPluginMetaData(jo, QString()));
0039 
0040     m_edit = new QTextEdit(parentWidget);
0041     setWidget(m_edit);
0042 
0043     setXMLFile(QFINDTESTDATA("kpartstest_part1.rc"));
0044 
0045     // An action and an action menu (test code for #70459)
0046 
0047     QAction *testAction = actionCollection()->addAction(QStringLiteral("p1_blah"));
0048     testAction->setText(QStringLiteral("Part1's action"));
0049     actionCollection()->setDefaultShortcut(testAction, Qt::CTRL | Qt::Key_B);
0050     connect(testAction, &QAction::triggered, this, &Part1::slotBlah);
0051 
0052     KActionMenu *menu = new KActionMenu(QIcon::fromTheme(QStringLiteral("mail_forward")), QStringLiteral("Foo"), this);
0053     actionCollection()->addAction(QStringLiteral("p1_foo"), menu);
0054 
0055     QAction *mailForward = new QAction(QIcon::fromTheme(QStringLiteral("mail_forward")), QStringLiteral("Bar"), this);
0056     actionCollection()->setDefaultShortcut(mailForward, Qt::CTRL | Qt::Key_F);
0057     connect(mailForward, &QAction::triggered, this, &Part1::slotFooBar);
0058     actionCollection()->addAction(QStringLiteral("p1_foo_bar"), mailForward);
0059     menu->addAction(mailForward);
0060 
0061 #if KPARTS_BUILD_DEPRECATED_SINCE(5, 90)
0062     loadPlugins();
0063 #endif
0064 }
0065 
0066 Part1::~Part1()
0067 {
0068 }
0069 
0070 void Part1::slotBlah()
0071 {
0072     m_edit->setText(QStringLiteral("Blah"));
0073 }
0074 
0075 void Part1::slotFooBar()
0076 {
0077     m_edit->setText(QStringLiteral("FooBar"));
0078 }
0079 
0080 bool Part1::openFile()
0081 {
0082     // qDebug() << "Part1: opening " << QFile::encodeName(localFilePath());
0083     // Hehe this is from a tutorial I did some time ago :)
0084     QFile f(localFilePath());
0085     QString s;
0086     if (f.open(QIODevice::ReadOnly)) {
0087         QTextStream t(&f);
0088         while (!t.atEnd()) {
0089             s += t.readLine() + QStringLiteral("\n");
0090         }
0091         f.close();
0092     } else {
0093         return false;
0094     }
0095     m_edit->setPlainText(s);
0096 
0097     Q_EMIT setStatusBarText(url().toString());
0098 
0099     return true;
0100 }
0101 
0102 Part2::Part2(QObject *parent, QWidget *parentWidget)
0103     : KParts::Part(parent)
0104 {
0105     QJsonObject jo = QJsonDocument::fromJson(
0106                          "{ \"KPlugin\": {\n"
0107                          " \"Id\": \"part2\",\n"
0108                          " \"Name\": \"Part 2\",\n"
0109                          " \"Version\": \"0.2\"\n"
0110                          "}\n}")
0111                          .object();
0112     setMetaData(KPluginMetaData(jo, QString()));
0113 
0114     QWidget *w = new QWidget(parentWidget);
0115     w->setObjectName(QStringLiteral("Part2Widget"));
0116     setWidget(w);
0117 
0118     setXMLFile(QFINDTESTDATA("kpartstest_part2.rc"));
0119 
0120     /*QCheckBox * cb =*/new QCheckBox(QStringLiteral("something"), w);
0121 
0122     // QLineEdit * l = new QLineEdit( "something", widget() );
0123     // l->move(0,50);
0124     // Since the main widget is a dummy one, we HAVE to set
0125     // strong focus for it, otherwise we get the
0126     // the famous activating-file-menu-switches-part bug.
0127     w->setFocusPolicy(Qt::ClickFocus);
0128 
0129     // loadPlugins(); // in case we want to allow plugins for this part.
0130 }
0131 
0132 Part2::~Part2()
0133 {
0134 }
0135 
0136 void Part2::guiActivateEvent(KParts::GUIActivateEvent *event)
0137 {
0138     if (event->activated()) {
0139         Q_EMIT setWindowCaption(QStringLiteral("[part2 activated]"));
0140     }
0141 }
0142 
0143 #include "moc_parts.cpp"