From 76bf46613e978cd8b847b3b2bd9a1d0afaaed51a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Fri, 28 Jun 2019 12:29:28 +0200 Subject: [PATCH] Add DynamicGridWidget Unique Selection --- gui/include/dynamicgridwidget.h | 7 +++++-- gui/include/mainwindow.h | 4 ++++ gui/include/serveritemwidget.h | 4 ++++ gui/src/dynamicgridwidget.cpp | 24 ++++++++++++++++++++++++ gui/src/mainwindow.cpp | 26 ++++++++++++++++++++++++++ gui/src/serveritemwidget.cpp | 4 ++-- 6 files changed, 65 insertions(+), 4 deletions(-) diff --git a/gui/include/dynamicgridwidget.h b/gui/include/dynamicgridwidget.h index 30c6c27..efae63f 100644 --- a/gui/include/dynamicgridwidget.h +++ b/gui/include/dynamicgridwidget.h @@ -43,9 +43,12 @@ class DynamicGridWidget : public QWidget explicit DynamicGridWidget(unsigned int item_width, QWidget *parent = nullptr); void AddWidget(QWidget *widget); - void RemoveWidget(QWidget *widget); + void AddWidgets(const QList &widgets); - void SetItemWidth(int item_width) { this->item_width = item_width; UpdateLayoutIfNecessary(); } + void RemoveWidget(QWidget *widget); + void ClearWidgets(); + + void SetItemWidth(unsigned int item_width) { this->item_width = item_width; UpdateLayoutIfNecessary(); } }; diff --git a/gui/include/mainwindow.h b/gui/include/mainwindow.h index 34bbb9a..f8e44f6 100644 --- a/gui/include/mainwindow.h +++ b/gui/include/mainwindow.h @@ -33,6 +33,10 @@ class MainWindow : public QWidget public: explicit MainWindow(QWidget *parent = nullptr); + + public slots: + void ServerItemWidgetSelected(); + void ServerItemWidgetTriggered(); }; #endif //CHIAKI_MAINWINDOW_H diff --git a/gui/include/serveritemwidget.h b/gui/include/serveritemwidget.h index ca5c5db..6398631 100644 --- a/gui/include/serveritemwidget.h +++ b/gui/include/serveritemwidget.h @@ -36,6 +36,10 @@ class ServerItemWidget : public QWidget bool IsSelected() { return selected; } void SetSelected(bool selected); + + signals: + void Selected(); + void Triggered(); }; #endif //CHIAKI_CONSOLEITEMWIDGET_H diff --git a/gui/src/dynamicgridwidget.cpp b/gui/src/dynamicgridwidget.cpp index 443a87e..b5974d7 100644 --- a/gui/src/dynamicgridwidget.cpp +++ b/gui/src/dynamicgridwidget.cpp @@ -38,11 +38,35 @@ void DynamicGridWidget::AddWidget(QWidget *widget) UpdateLayout(); } +void DynamicGridWidget::AddWidgets(const QList &widgets) +{ + for(auto widget : widgets) + { + if(this->widgets.contains(widget)) + continue; + widget->setParent(this); + this->widgets.append(widget); + } + UpdateLayout(); +} + void DynamicGridWidget::RemoveWidget(QWidget *widget) { layout->removeWidget(widget); widget->setParent(nullptr); widgets.removeAll(widget); + UpdateLayout(); +} + +void DynamicGridWidget::ClearWidgets() +{ + for(auto widget : widgets) + { + layout->removeWidget(widget); + widget->setParent(nullptr); + } + widgets.clear(); + UpdateLayout(); } unsigned int DynamicGridWidget::CalculateColumns() diff --git a/gui/src/mainwindow.cpp b/gui/src/mainwindow.cpp index ce6f1b0..527e1ef 100644 --- a/gui/src/mainwindow.cpp +++ b/gui/src/mainwindow.cpp @@ -46,8 +46,34 @@ MainWindow::MainWindow(QWidget *parent) : QWidget(parent) for(int i=0; i<10; i++) { auto w = new ServerItemWidget(grid_widget); + connect(w, &ServerItemWidget::Selected, this, &MainWindow::ServerItemWidgetSelected); + connect(w, &ServerItemWidget::Triggered, this, &MainWindow::ServerItemWidgetTriggered); + server_item_widgets.append(w); grid_widget->AddWidget(w); } resize(800, 600); } + +void MainWindow::ServerItemWidgetSelected() +{ + auto server_item_widget = qobject_cast(sender()); + if(!server_item_widget) + return; + + for(auto widget : server_item_widgets) + { + if(widget != server_item_widget) + widget->SetSelected(false); + } + server_item_widget->SetSelected(true); +} + +void MainWindow::ServerItemWidgetTriggered() +{ + auto server_item_widget = qobject_cast(sender()); + if(!server_item_widget) + return; + + // TODO: connect +} \ No newline at end of file diff --git a/gui/src/serveritemwidget.cpp b/gui/src/serveritemwidget.cpp index dab5164..fee59e4 100644 --- a/gui/src/serveritemwidget.cpp +++ b/gui/src/serveritemwidget.cpp @@ -36,11 +36,12 @@ ServerItemWidget::ServerItemWidget(QWidget *parent) : QWidget(parent) void ServerItemWidget::mousePressEvent(QMouseEvent *event) { - SetSelected(!IsSelected()); + emit Selected(); } void ServerItemWidget::mouseDoubleClickEvent(QMouseEvent *event) { + emit Triggered(); } void ServerItemWidget::SetSelected(bool selected) @@ -49,5 +50,4 @@ void ServerItemWidget::SetSelected(bool selected) return; this->selected = selected; setStyleSheet(selected ? "background-color: palette(highlight);" : ""); - update(); }