bsnes/phoenix/qt/widget/combo-button.cpp

68 lines
1.7 KiB
C++

namespace phoenix {
void pComboButton::append(string text) {
locked = true;
qtComboButton->addItem(QString::fromUtf8(text));
locked = false;
}
Size pComboButton::minimumSize() {
unsigned maximumWidth = 0;
for(auto& text : comboButton.state.text) maximumWidth = max(maximumWidth, pFont::size(qtWidget->font(), text).width);
Size size = pFont::size(qtWidget->font(), " ");
return {maximumWidth + 32, size.height + 12};
}
void pComboButton::remove(unsigned selection) {
locked = true;
qtComboButton->removeItem(selection);
locked = false;
if(selection == comboButton.state.selection) comboButton.setSelection(0);
}
void pComboButton::reset() {
locked = true;
while(qtComboButton->count()) qtComboButton->removeItem(0);
locked = false;
}
void pComboButton::setSelection(unsigned selection) {
locked = true;
qtComboButton->setCurrentIndex(selection);
locked = false;
}
void pComboButton::setText(unsigned selection, string text) {
qtComboButton->setItemText(selection, text);
}
void pComboButton::constructor() {
qtWidget = qtComboButton = new QComboBox;
connect(qtComboButton, SIGNAL(currentIndexChanged(int)), SLOT(onChange()));
pWidget::synchronizeState();
unsigned selection = comboButton.state.selection;
locked = true;
for(auto& text : comboButton.state.text) append(text);
locked = false;
comboButton.setSelection(selection);
}
void pComboButton::destructor() {
delete qtComboButton;
qtWidget = qtComboButton = nullptr;
}
void pComboButton::orphan() {
destructor();
constructor();
}
void pComboButton::onChange() {
comboButton.state.selection = qtComboButton->currentIndex();
if(!locked && comboButton.onChange) comboButton.onChange();
}
}