Add DynamicGridWidget Unique Selection

This commit is contained in:
Florian Märkl 2019-06-28 12:29:28 +02:00
parent 264d7523ec
commit 76bf46613e
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
6 changed files with 65 additions and 4 deletions

View file

@ -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<QWidget *> &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(); }
};

View file

@ -33,6 +33,10 @@ class MainWindow : public QWidget
public:
explicit MainWindow(QWidget *parent = nullptr);
public slots:
void ServerItemWidgetSelected();
void ServerItemWidgetTriggered();
};
#endif //CHIAKI_MAINWINDOW_H

View file

@ -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

View file

@ -38,11 +38,35 @@ void DynamicGridWidget::AddWidget(QWidget *widget)
UpdateLayout();
}
void DynamicGridWidget::AddWidgets(const QList<QWidget *> &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()

View file

@ -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<ServerItemWidget *>(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<ServerItemWidget *>(sender());
if(!server_item_widget)
return;
// TODO: connect
}

View file

@ -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();
}