diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-12-29 19:36:17 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-01-02 15:38:16 +0100 |
| commit | 7e2c52133960b7d1bbb0fe72a37cee1c2b67c0ec (patch) | |
| tree | 686e359ad1576ddc7bff6d4177029dd1a760c5fd /src/modlistview.h | |
| parent | 68c9ae8592a51b87dc3228b8ebd13737bf2dc7f5 (diff) | |
Refactoring and fixes.
- Move codes from MainWindow to ModListView.
- Fix enable/disable all visible.
- Fix changing style of the mod list.
Diffstat (limited to 'src/modlistview.h')
| -rw-r--r-- | src/modlistview.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/modlistview.h b/src/modlistview.h index 9cf1c0d9..1e6c5ceb 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -1,12 +1,21 @@ #ifndef MODLISTVIEW_H
#define MODLISTVIEW_H
+#include <vector>
+
#include <QTreeView>
#include <QDragEnterEvent>
+#include <QLCDNumber>
+
+#include "qtgroupingproxy.h"
#include "viewmarkingscrollbar.h"
+#include "modlistsortproxy.h"
namespace Ui { class MainWindow; }
+
class OrganizerCore;
+class Profile;
+class ModListByPriorityProxy;
class ModListView : public QTreeView
{
@@ -26,15 +35,81 @@ public: explicit ModListView(QWidget* parent = 0);
void setModel(QAbstractItemModel* model) override;
+ void setup(OrganizerCore& core, Ui::MainWindow* mwui);
+
+ // set the current profile
+ //
+ void setProfile(Profile* profile);
+
+ // check if collapsible separators are currently used
+ //
+ bool hasCollapsibleSeparators() const;
+
+ // the column by which the mod list is currently sorted
+ //
+ int sortColumn() const;
+
+ // retrieve the next/previous mod in the current view, the given index
+ // should be a mod index (not a model row), and the return value will be
+ // a mod index or -1 if no mod was found
+ //
+ int nextMod(int index) const;
+ int prevMod(int index) const;
+
+ // invalidate the top-level model
+ //
+ void invalidate();
+
+ // enable/disable all visible mods
+ //
+ void enableAllVisible();
+ void disableAllVisible();
+
+ // enable/disable all selected mods
+ //
+ void enableSelected();
+ void disableSelected();
+
+ // set the filter criteria/options for mods
+ //
+ void setFilterCriteria(const std::vector<ModListSortProxy::Criteria>& criteria);
+ void setFilterOptions(ModListSortProxy::FilterMode mode, ModListSortProxy::SeparatorsMode sep);
+
+ // check if the given mod is visible
+ //
+ bool isModVisible(unsigned int index) const;
+ bool isModVisible(ModInfo::Ptr mod) const;
+
+ // re-implemented to fix indentation with collapsible separators
+ //
QRect visualRect(const QModelIndex& index) const override;
+ // refresh the style of the mod list, this needs to be called when the
+ // stylesheet is changed
+ //
+ void refreshStyle();
+
signals:
void dragEntered(const QMimeData* mimeData);
void dropEntered(const QMimeData* mimeData, DropPosition position);
+public slots:
+
+ void updateModCount();
+
protected:
+ // map from/to the view indexes to the model
+ //
+ QModelIndex indexModelToView(const QModelIndex& index) const;
+ QModelIndex indexViewToModel(const QModelIndex& index) const;
+
+ // all index for the given model under the given index, recursively
+ //
+ std::vector<QModelIndex> allIndex(
+ const QAbstractItemModel* model, int column = 0, const QModelIndex& index = QModelIndex()) const;
+
// re-implemented to fake the return value to allow drag-and-drop on
// itself for separators
//
@@ -47,6 +122,50 @@ protected: private:
+ void onModPrioritiesChanged(std::vector<int> const& indices);
+ void onModInstalled(const QString& modName);
+ void onModFilterActive(bool filterActive);
+
+ // call expand() after fixing the index if it comes from the source
+ // of the proxy
+ //
+ void expandItem(const QModelIndex& index);
+
+ // refresh the group-by proxy, if the index is -1 will refresh the
+ // current one (e.g. when changing the sort column)
+ //
+ void updateGroupByProxy(int groupIndex);
+
+ enum GroupBy {
+ NONE = 0,
+ CATEGORY = 1,
+ NEXUS_ID = 2
+ };
+
+private:
+
+ struct ModListViewUi
+ {
+ // the group by combo box
+ QComboBox* groupBy;
+
+ // the mod counter
+ QLCDNumber* counter;
+
+ // the text filter and clear filter button
+ QLineEdit* filter;
+ QPushButton* clearFilters;
+ };
+
+ OrganizerCore* m_core;
+ ModListViewUi ui;
+
+ ModListSortProxy* m_sortProxy;
+ ModListByPriorityProxy* m_byPriorityProxy;
+
+ QtGroupingProxy* m_byCategoryProxy;
+ QtGroupingProxy* m_byNexusIdProxy;
+
ViewMarkingScrollBar* m_scrollbar;
bool m_inDragMoveEvent = false;
|
