summaryrefslogtreecommitdiff
path: root/src/pluginlistview.h
blob: eea7665c8493d4ebb73cd5f12cca8d87a8516396 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#ifndef PLUGINLISTVIEW_H
#define PLUGINLISTVIEW_H

#include "viewmarkingscrollbar.h"
#include <QDragEnterEvent>
#include <QTreeView>

namespace Ui
{
class MainWindow;
}

class OrganizerCore;
class MainWindow;
class ModListViewActions;
class PluginListSortProxy;

class PluginListView : public QTreeView
{
  Q_OBJECT
public:
  explicit PluginListView(QWidget* parent = nullptr);

  void activated();
  void setup(OrganizerCore& core, MainWindow* mw, Ui::MainWindow* mwui);

  // the column by which the plugin list is currently sorted
  //
  int sortColumn() const;

  // update the plugin counter
  //
  void updatePluginCount();

protected slots:

  void onCustomContextMenuRequested(const QPoint& pos);
  void onDoubleClicked(const QModelIndex& index);

  void onFilterChanged(const QString& filter);
  void onSortButtonClicked();

protected:
  friend class PluginListContextMenu;

  // map from/to the view indexes to the model
  //
  QModelIndex indexModelToView(const QModelIndex& index) const;
  QModelIndexList indexModelToView(const QModelIndexList& index) const;
  QModelIndex indexViewToModel(const QModelIndex& index) const;
  QModelIndexList indexViewToModel(const QModelIndexList& index) const;

  // method to react to various key events
  //
  bool moveSelection(int key);
  bool toggleSelectionState();

  // get/set the selected items on the view, this method return/take indices
  // from the mod list model, not the view, so it's safe to restore
  //
  std::pair<QModelIndex, QModelIndexList> selected() const;
  void setSelected(const QModelIndex& current, const QModelIndexList& selected);

  bool event(QEvent* event) override;

private:
  struct PluginListViewUi
  {
    // the plguin counter
    QLCDNumber* counter;

    // the filter
    QLineEdit* filter;
  };

  OrganizerCore* m_core;
  PluginListViewUi ui;

  PluginListSortProxy* m_sortProxy;
  ModListViewActions* m_modActions;
  ViewMarkingScrollBar* m_Scrollbar;

  bool m_didUpdateMasterList;
};

#endif  // PLUGINLISTVIEW_H