File indexing completed on 2024-05-05 12:21:10
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"