summaryrefslogtreecommitdiff
path: root/src/pluginlistview.cpp
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-12-31 21:02:04 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-02 15:38:18 +0100
commitf2d8469ed6cd0fafc22097cdba2ee8f325f00513 (patch)
treecd61150c0187a93f1b68602a26d1d501c4d67ed7 /src/pluginlistview.cpp
parent8dffe65032c498a218079f941d88af6053b28d7f (diff)
Start moving stuff from MainWindow to PluginListView.
Diffstat (limited to 'src/pluginlistview.cpp')
-rw-r--r--src/pluginlistview.cpp150
1 files changed, 114 insertions, 36 deletions
diff --git a/src/pluginlistview.cpp b/src/pluginlistview.cpp
index a265d5d4..a401ab06 100644
--- a/src/pluginlistview.cpp
+++ b/src/pluginlistview.cpp
@@ -1,58 +1,136 @@
#include "pluginlistview.h"
-#include <widgetutility.h>
+
#include <QUrl>
#include <QMimeData>
-#include <QProxyStyle>
+#include <widgetutility.h>
-class PluginListViewStyle : public QProxyStyle {
-public:
- PluginListViewStyle(QStyle *style, int indentation);
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "organizercore.h"
+#include "pluginlistsortproxy.h"
+#include "genericicondelegate.h"
+#include "modelutils.h"
- void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
- QPainter *painter, const QWidget *widget = 0) const;
-private:
- int m_Indentation;
-};
+PluginListView::PluginListView(QWidget *parent)
+ : QTreeView(parent)
+ , m_Scrollbar(new ViewMarkingScrollBar(this->model(), this))
+{
+ setVerticalScrollBar(m_Scrollbar);
+ MOBase::setCustomizableColumns(this);
+}
-PluginListViewStyle::PluginListViewStyle(QStyle *style, int indentation)
- : QProxyStyle(style), m_Indentation(indentation)
+void PluginListView::setModel(QAbstractItemModel *model)
{
+ QTreeView::setModel(model);
+ setVerticalScrollBar(new ViewMarkingScrollBar(model, this));
}
-void PluginListViewStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,
- QPainter *painter, const QWidget *widget) const
+int PluginListView::sortColumn() const
{
- if (element == QStyle::PE_IndicatorItemViewItemDrop && !option->rect.isNull()) {
- QStyleOption opt(*option);
- opt.rect.setLeft(m_Indentation);
- if (widget) {
- opt.rect.setRight(widget->width() - 5); // 5 is an arbitrary value that seems to work ok
- }
- QProxyStyle::drawPrimitive(element, &opt, painter, widget);
- }
- else {
- QProxyStyle::drawPrimitive(element, option, painter, widget);
- }
+ return m_sortProxy ? m_sortProxy->sortColumn() : -1;
}
-PluginListView::PluginListView(QWidget *parent)
- : QTreeView(parent)
- , m_Scrollbar(new ViewMarkingScrollBar(this->model(), this))
+QModelIndex PluginListView::indexModelToView(const QModelIndex& index) const
{
- setVerticalScrollBar(m_Scrollbar);
- MOBase::setCustomizableColumns(this);
+ return ::indexModelToView(index, this);
}
-void PluginListView::dragEnterEvent(QDragEnterEvent *event)
+QModelIndexList PluginListView::indexModelToView(const QModelIndexList& index) const
{
- emit dropModeUpdate(event->mimeData()->hasUrls());
+ return ::indexModelToView(index, this);
+}
- QTreeView::dragEnterEvent(event);
+QModelIndex PluginListView::indexViewToModel(const QModelIndex& index) const
+{
+ return ::indexViewToModel(index, m_core->pluginList());
}
-void PluginListView::setModel(QAbstractItemModel *model)
+QModelIndexList PluginListView::indexViewToModel(const QModelIndexList& index) const
{
- QTreeView::setModel(model);
- setVerticalScrollBar(new ViewMarkingScrollBar(model, this));
+ return ::indexViewToModel(index, m_core->pluginList());
+}
+
+void PluginListView::updatePluginCount()
+{
+ int activeMasterCount = 0;
+ int activeLightMasterCount = 0;
+ int activeRegularCount = 0;
+ int masterCount = 0;
+ int lightMasterCount = 0;
+ int regularCount = 0;
+ int activeVisibleCount = 0;
+
+ PluginList* list = m_core->pluginList();
+ QString filter = ui.filter->text();
+
+ for (QString plugin : list->pluginNames()) {
+ bool active = list->isEnabled(plugin);
+ bool visible = m_sortProxy->filterMatchesPlugin(plugin);
+ if (list->isLight(plugin) || list->isLightFlagged(plugin)) {
+ lightMasterCount++;
+ activeLightMasterCount += active;
+ activeVisibleCount += visible && active;
+ }
+ else if (list->isMaster(plugin)) {
+ masterCount++;
+ activeMasterCount += active;
+ activeVisibleCount += visible && active;
+ }
+ else {
+ regularCount++;
+ activeRegularCount += active;
+ activeVisibleCount += visible && active;
+ }
+ }
+
+ int activeCount = activeMasterCount + activeLightMasterCount + activeRegularCount;
+ int totalCount = masterCount + lightMasterCount + regularCount;
+
+ ui.counter->display(activeVisibleCount);
+ ui.counter->setToolTip(tr("<table cellspacing=\"6\">"
+ "<tr><th>Type</th><th>Active </th><th>Total</th></tr>"
+ "<tr><td>All plugins:</td><td align=right>%1 </td><td align=right>%2</td></tr>"
+ "<tr><td>ESMs:</td><td align=right>%3 </td><td align=right>%4</td></tr>"
+ "<tr><td>ESPs:</td><td align=right>%7 </td><td align=right>%8</td></tr>"
+ "<tr><td>ESMs+ESPs:</td><td align=right>%9 </td><td align=right>%10</td></tr>"
+ "<tr><td>ESLs:</td><td align=right>%5 </td><td align=right>%6</td></tr>"
+ "</table>")
+ .arg(activeCount).arg(totalCount)
+ .arg(activeMasterCount).arg(masterCount)
+ .arg(activeLightMasterCount).arg(lightMasterCount)
+ .arg(activeRegularCount).arg(regularCount)
+ .arg(activeMasterCount + activeRegularCount).arg(masterCount + regularCount)
+ );
+}
+
+void PluginListView::onFilterChanged(const QString& filter)
+{
+ if (!filter.isEmpty()) {
+ setStyleSheet("QTreeView { border: 2px ridge #f00; }");
+ ui.counter->setStyleSheet("QLCDNumber { border: 2px ridge #f00; }");
+ }
+ else {
+ setStyleSheet("");
+ ui.counter->setStyleSheet("");
+ }
+ updatePluginCount();
+}
+
+void PluginListView::setup(OrganizerCore& core, MainWindow* mw, Ui::MainWindow* mwui)
+{
+ m_core = &core;
+ ui = { mwui->activePluginsCounter, mwui->espFilterEdit };
+
+ m_sortProxy = new PluginListSortProxy(&core);
+ m_sortProxy->setSourceModel(core.pluginList());
+ setModel(m_sortProxy);
+
+ sortByColumn(PluginList::COL_PRIORITY, Qt::AscendingOrder);
+ setItemDelegateForColumn(PluginList::COL_FLAGS, new GenericIconDelegate(this));
+ installEventFilter(core.pluginList());
+
+ connect(ui.filter, &QLineEdit::textChanged, m_sortProxy, &PluginListSortProxy::updateFilter);
+ connect(ui.filter, &QLineEdit::textChanged, this, &PluginListView::onFilterChanged);
+
}