Krita Source Code Documentation
Loading...
Searching...
No Matches
pyqtpluginsettings.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-only
5 */
7
8#include "ui_manager.h"
9
10#include <QVBoxLayout>
11#include <QSortFilterProxyModel>
12#include <QTreeView>
13#include <QTextBrowser>
14
15#include <kconfiggroup.h>
16
17#include "kis_config.h"
18#include "kis_icon_utils.h"
19#include "PythonPluginManager.h"
20
25
27 : KisPreferenceSet(parent)
28 , m_pluginManager(pluginManager)
29 , m_page(new Ui::ManagerPage)
30{
31 m_page->setupUi(this);
32
33 QSortFilterProxyModel* const proxy_model = new QSortFilterProxyModel(this);
34 proxy_model->setSourceModel(pluginManager->model());
35 m_page->pluginsList->setModel(proxy_model);
36 m_page->pluginsList->resizeColumnToContents(PythonPluginsModel::COL_ENABLED);
37 m_page->pluginsList->resizeColumnToContents(PythonPluginsModel::COL_NAME);
38 m_page->pluginsList->header()->setSectionResizeMode(PythonPluginsModel::COL_COMMENT, QHeaderView::Stretch);
39 m_page->pluginsList->header()->setSectionResizeMode(PythonPluginsModel::COL_STATUS, QHeaderView::ResizeToContents);
40 m_page->pluginsList->header()->setStretchLastSection(false);
41 m_page->pluginsList->sortByColumn(PythonPluginsModel::COL_NAME, Qt::AscendingOrder);
42 m_page->pluginsList->setSortingEnabled(true);
43
44 const bool is_enabled = bool(pluginManager);
45 const bool is_visible = !is_enabled;
46 m_page->errorLabel->setVisible(is_visible);
47 m_page->pluginsList->setEnabled(is_enabled);
48 m_page->textTabWidget->setEnabled(is_enabled);
49
50 m_manualBrowser = new QTextBrowser();
51 m_page->textTabWidget->addTab(m_manualBrowser, i18nc("@title:tab plugin manual", "Manual"));
52 m_statusBrowser = new QTextBrowser();
53 m_page->textTabWidget->addTab(m_statusBrowser, i18nc("@title:tab plugin status", "Status"));
54
55 connect(m_page->pluginsList, SIGNAL(clicked(QModelIndex)), SLOT(updateTextBrowser(QModelIndex)));
56}
57
62
64{
65 return QString("pykritapluginmanager");
66}
67
69{
70 return header();
71}
72
74{
75 return QString(i18n("Python Plugin Manager"));
76}
77
78
80{
81 return KisIconUtils::loadIcon("python");
82}
83
84
86{
87 Q_EMIT(settingsChanged());
88}
89
93
97
98void PyQtPluginSettings::updateTextBrowser(const QModelIndex &index)
99{
100 QModelIndex unsortedIndex = static_cast<QSortFilterProxyModel*>(m_page->pluginsList->model())->mapToSource(index);
101 PythonPlugin *plugin = m_pluginManager->model()->plugin(unsortedIndex);
102 if (!plugin) { return; }
103
104 QString manual = plugin->manual();
105 if (manual.isEmpty()) {
106 m_manualBrowser->setHtml("<html><body><h1>No Manual Available</h2></body></html>");
107 } else if (manual.startsWith("<html")) {
108 m_manualBrowser->setHtml(manual);
109 } else {
110 m_manualBrowser->setText(manual);
111 }
112
113 m_statusBrowser->setHtml(
114 QString(i18nc("%1 plugin file path", "Location: %1")).arg(plugin->desktopFilePath()) + "<br>" +
115 (plugin->isEnabled() ? i18n("Enabled: true") : i18n("Enabled: false")) + "<br>" +
116 QString(i18nc("%1 plugin status text",
117 "Status: %1")).arg(plugin->statusText()) + "<br>" +
118 QString(i18nc("%1 plugin error message",
119 "Error: %1")).arg(!plugin->errorReason().isEmpty() ?
120 plugin->errorReason() : i18n("None")) + "<br>"
121 );
122
123 if (index.column() == PythonPluginsModel::COL_STATUS) {
124 m_page->textTabWidget->setCurrentIndex(TextBrowserTab::Status);
125 } else {
126 m_page->textTabWidget->setCurrentIndex(TextBrowserTab::Manual);
127 }
128}
QTextBrowser * m_statusBrowser
QString name() override
void loadDefaultPreferences() override
QTextBrowser * m_manualBrowser
QString id() override
QString header() override
void savePreferences() const override
Ui::ManagerPage * m_page
void loadPreferences() override
PythonPluginManager * m_pluginManager
void updateTextBrowser(const QModelIndex &index)
PyQtPluginSettings(PythonPluginManager *pluginManager, QWidget *parent=nullptr)
void settingsChanged() const
PythonPluginsModel * model()
bool isEnabled() const
QString desktopFilePath() const
const QString & errorReason() const
PythonPlugin * plugin(const QModelIndex &) const
QIcon loadIcon(const QString &name)