mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-07-30 03:29:52 -07:00
Add DynamicGridWidget Unique Selection
This commit is contained in:
parent
264d7523ec
commit
76bf46613e
6 changed files with 65 additions and 4 deletions
|
@ -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(); }
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -33,6 +33,10 @@ class MainWindow : public QWidget
|
|||
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
|
||||
public slots:
|
||||
void ServerItemWidgetSelected();
|
||||
void ServerItemWidgetTriggered();
|
||||
};
|
||||
|
||||
#endif //CHIAKI_MAINWINDOW_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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue