mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-07-31 04:00:04 -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);
|
explicit DynamicGridWidget(unsigned int item_width, QWidget *parent = nullptr);
|
||||||
|
|
||||||
void AddWidget(QWidget *widget);
|
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:
|
public:
|
||||||
explicit MainWindow(QWidget *parent = nullptr);
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void ServerItemWidgetSelected();
|
||||||
|
void ServerItemWidgetTriggered();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //CHIAKI_MAINWINDOW_H
|
#endif //CHIAKI_MAINWINDOW_H
|
||||||
|
|
|
@ -36,6 +36,10 @@ class ServerItemWidget : public QWidget
|
||||||
|
|
||||||
bool IsSelected() { return selected; }
|
bool IsSelected() { return selected; }
|
||||||
void SetSelected(bool selected);
|
void SetSelected(bool selected);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void Selected();
|
||||||
|
void Triggered();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //CHIAKI_CONSOLEITEMWIDGET_H
|
#endif //CHIAKI_CONSOLEITEMWIDGET_H
|
||||||
|
|
|
@ -38,11 +38,35 @@ void DynamicGridWidget::AddWidget(QWidget *widget)
|
||||||
UpdateLayout();
|
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)
|
void DynamicGridWidget::RemoveWidget(QWidget *widget)
|
||||||
{
|
{
|
||||||
layout->removeWidget(widget);
|
layout->removeWidget(widget);
|
||||||
widget->setParent(nullptr);
|
widget->setParent(nullptr);
|
||||||
widgets.removeAll(widget);
|
widgets.removeAll(widget);
|
||||||
|
UpdateLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DynamicGridWidget::ClearWidgets()
|
||||||
|
{
|
||||||
|
for(auto widget : widgets)
|
||||||
|
{
|
||||||
|
layout->removeWidget(widget);
|
||||||
|
widget->setParent(nullptr);
|
||||||
|
}
|
||||||
|
widgets.clear();
|
||||||
|
UpdateLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DynamicGridWidget::CalculateColumns()
|
unsigned int DynamicGridWidget::CalculateColumns()
|
||||||
|
|
|
@ -46,8 +46,34 @@ MainWindow::MainWindow(QWidget *parent) : QWidget(parent)
|
||||||
for(int i=0; i<10; i++)
|
for(int i=0; i<10; i++)
|
||||||
{
|
{
|
||||||
auto w = new ServerItemWidget(grid_widget);
|
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);
|
grid_widget->AddWidget(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
resize(800, 600);
|
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)
|
void ServerItemWidget::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
SetSelected(!IsSelected());
|
emit Selected();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerItemWidget::mouseDoubleClickEvent(QMouseEvent *event)
|
void ServerItemWidget::mouseDoubleClickEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
|
emit Triggered();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerItemWidget::SetSelected(bool selected)
|
void ServerItemWidget::SetSelected(bool selected)
|
||||||
|
@ -49,5 +50,4 @@ void ServerItemWidget::SetSelected(bool selected)
|
||||||
return;
|
return;
|
||||||
this->selected = selected;
|
this->selected = selected;
|
||||||
setStyleSheet(selected ? "background-color: palette(highlight);" : "");
|
setStyleSheet(selected ? "background-color: palette(highlight);" : "");
|
||||||
update();
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue