HAL
grouping_dialog.cpp
Go to the documentation of this file.
6 #include "gui/gui_globals.h"
9 
10 #include <QGridLayout>
11 #include <QPushButton>
12 #include <QHeaderView>
13 #include <QAction>
14 
15 namespace hal {
17  : QDialog(parent),
18  mSearchbar(new Searchbar(this)),
19  mGroupingTableView(new GroupingTableView(false, this)),
20  mLastUsed(nullptr),
21  mTabWidget(new QTabWidget(this)),
22  mNewGrouping(false)
23  {
24  mProxyModel = static_cast<GroupingProxyModel*>(mGroupingTableView->model());
25  setWindowTitle("Move to grouping …");
26  QGridLayout* layout = new QGridLayout(this);
27 
28  QPushButton* butNew = new QPushButton("Create new grouping", this);
30  connect(butNew, &QPushButton::pressed, this, &GroupingDialog::handleNewGroupingClicked);
31  layout->addWidget(butNew, 0, 0);
32 
33  QPushButton* butSearch = new QPushButton("Search", this);
35  connect(butSearch, &QPushButton::pressed, this, &GroupingDialog::handleToggleSearchbar);
36  layout->addWidget(butSearch, 0, 1);
37 
38  mProxyModel->setSortRole(Qt::UserRole);
39 
40  mSearchbar->hide();
41  mSearchbar->setColumnNames(mProxyModel->getColumnNames());
42 
43  layout->addWidget(mSearchbar, 1, 0, 1, 3);
44 
45  mTabWidget->addTab(mGroupingTableView, "Groupings");
46 
47  if (!GroupingTableHistory::instance()->isEmpty())
48  {
49  mLastUsed = new GroupingTableView(true, this);
50  if (mLastUsed->model()->rowCount())
51  {
53  mTabWidget->addTab(mLastUsed, "Recent selection");
54  }
55  else
56  {
57  delete mLastUsed;
58  mLastUsed = nullptr;
59  }
60  }
61 
62  layout->addWidget(mTabWidget, 2, 0, 1, 3);
63 
65  mButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
66  layout->addWidget(mButtonBox, 3, 0, 1, 3, Qt::AlignHCenter);
67 
68  mToggleSearchbar = new QAction(this);
69  mToggleSearchbar->setShortcut(QKeySequence(ContentManager::sSettingSearch->value().toString()));
70  addAction(mToggleSearchbar);
71 
72  connect(mTabWidget, &QTabWidget::currentChanged, this, &GroupingDialog::handleCurrentTabChanged);
73 
74  // connect(mSearchbar, &Searchbar::textEdited, this, &GroupingDialog::filter);
75 
76  // TODO: change parameter in filter() method
77  // connect(mSearchbar, &Searchbar::triggerNewSearch, this, &GroupingDialog::filter);
78  connect(mToggleSearchbar, &QAction::triggered, this, &GroupingDialog::handleToggleSearchbar);
83  }
84 
85  void GroupingDialog::handleNewGroupingClicked()
86  {
87  mNewGrouping = true;
89  }
90 
91  void GroupingDialog::handleToggleSearchbar()
92  {
93  if (mSearchbar->isHidden())
94  {
95  mSearchbar->show();
96  mSearchbar->setFocus();
97  }
98  else
99  {
100  mSearchbar->hide();
101  setFocus();
102  }
103  }
104 
105  void GroupingDialog::filter(const QString& text) // TODO : add int parameter search options
106  {
107  static_cast<GroupingProxyModel*>(mGroupingTableView->model())->setFilterRegularExpression(text);
108  if (mLastUsed)
109  static_cast<GroupingProxyModel*>(mLastUsed->model())->setFilterRegularExpression(text);
110  QString output = "navigation regular expression '" + text + "' entered.";
111  log_info("user", output.toStdString());
112  }
113 
114  void GroupingDialog::handleCurrentTabChanged(int index)
115  {
116  Q_UNUSED(index);
117  mGroupingTableView->clearSelection();
118  mSearchbar->clear();
119  if (mLastUsed) mLastUsed->clearSelection();
120  }
121 
122  void GroupingDialog::handleGroupingSelected(u32 groupId, bool doubleClick)
123  {
125  if (!groupId) return;
126  mGroupId = groupId;
127  if (doubleClick) accept();
128  }
129 
131  {
132  GroupingTableHistory::instance()->add(mGroupId);
133  QDialog::accept();
134  }
135 }
static SettingsItemKeybind * sSettingSearch
void accept() override
void handleGroupingSelected(u32 groupId, bool doubleClick)
GroupingDialog(QWidget *parent=nullptr)
void filter(const QString &text)
Helper model to make filtering available.
void startSearch(QString text, int options) override
static GroupingTableHistory * instance()
void groupingSelected(u32 id, bool doubleClick)
virtual QList< QString > getColumnNames()
A QFrame with a QLineEdit that can be used to input a substring to search for.
Definition: searchbar.h:48
void setColumnNames(QList< QString > list)
Definition: searchbar.cpp:130
void triggerNewSearch(const QString &text, int searchOptions)
#define log_info(channel,...)
Definition: log.h:70
quint32 u32
virtual int rowCount(const QModelIndex &parent) const const=0
QAbstractItemModel * model() const const
void setShortcut(const QKeySequence &shortcut)
void triggered(bool checked)
virtual void accept()
virtual void reject()
QPushButton * button(QDialogButtonBox::StandardButton which) const const
void addWidget(QWidget *w)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void setSortRole(int role)
AlignHCenter
UserRole
int addTab(QWidget *page, const QString &label)
void currentChanged(int index)
void addAction(QAction *action)
void setEnabled(bool)
void hide()
bool isHidden() const const
QLayout * layout() const const
void setFocus()
void show()
void setSizePolicy(QSizePolicy)
void setWindowTitle(const QString &)