#include "../headers/linboosselectionrow.h" LinboOsSelectionRow::LinboOsSelectionRow(LinboBackend* backend, QWidget *parent) : QWidget(parent) { this->backend = backend; this->showOnlySelectedButton = false; this->osButtonGroup = new QButtonGroup(); this->osButtonGroup->setExclusive(true); for(LinboOs* os : backend->getOperatingSystems()) { LinboOsSelectButton* osButton = new LinboOsSelectButton("/icons/" + os->getIconName(), os, this->osButtonGroup, this); this->osButtons.append(osButton); } // TODO: figure out by autostart this->osButtonGroup->buttons()[0]->setChecked(true); } void LinboOsSelectionRow::resizeAndPositionAllButtons() { qDebug() << "Resizing all Buttons"; int buttonWidth = this->width() / this->osButtonGroup->buttons().length(); if(this->showOnlySelectedButton) { for(int i = 0; i < this->osButtons.length(); i++) { if(!this->osButtons[i]->button->isChecked()) this->osButtons[i]->hide(); else { QPropertyAnimation* moveAnimation = new QPropertyAnimation(this->osButtons[i], "geometry"); moveAnimation->setEasingCurve(QEasingCurve::InOutQuad); moveAnimation->setDuration(400); moveAnimation->setStartValue(this->osButtons[i]->geometry()); moveAnimation->setEndValue(QRect((this->width() - buttonWidth) / 2, 0, buttonWidth, this->height())); moveAnimation->start(); } } } else { for(int i = 0; i < this->osButtons.length(); i++) { this->osButtons[i]->setGeometry(buttonWidth * i, 0, buttonWidth, this->height()); } } } LinboOs* LinboOsSelectionRow::getSelectedOs() { for(LinboOsSelectButton* button : this->osButtons) { if(button->button->isChecked()) return button->getOs(); } return nullptr; } void LinboOsSelectionRow::setShowOnlySelectedButton(bool value) { // find selected button // set its x so it is in the middle (animated) // set Opacity of all other buttons to 0 (animated) if(value == this->showOnlySelectedButton) return; this->showOnlySelectedButton = value; this->resizeAndPositionAllButtons(); } void LinboOsSelectionRow::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); qDebug() << "RESIZE EVENT: width: " << width() << " height: " << height(); this->resizeAndPositionAllButtons(); }