mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-08-27 21:20:11 +02:00
Update to v094r40 release.
byuu says: Changelog: - updated to newest hiro API - SFC performance profile builds once again - hiro: Qt port completed Errata 1: the hiro/Qt target won't run tomoko just yet. Starts by crashing inside InputSettings because hiro/Qt isn't forcefully selecting the first item added to a ComboButton just yet. Even with a monkey patch to get around that, the UI is incredibly unstable. Lots of geometry calculation bugs, and a crash when you try and access certain folders in the browser dialog. Lots of work left to be done there, sadly. Errata 2: the hiro/Windows port has black backgrounds on all ListView items. It's because I need to test for unassigned colors and grab the default Windows brush colors in those cases. Note: alternating row colors on multi-column ListView widgets is gone now. Not a bug. May add it back later, but I'm not sure. It doesn't interact nicely with per-cell background colors. Things left to do: First, I have to fix the Windows and Qt target bugs. Next, I need to go through and revise the hiro API even more (nothing too major.) Next, I need to update icarus to use the new hiro API, and add support for the SFC games database. Next, I have to rewrite my TSV->BML cheat code tool. Next, I need to post a final WIP of higan+icarus publicly and wait a few days. Next, I need to fix any bugs reported from the final WIP that I can. Finally, I should be able to release v095.
This commit is contained in:
@@ -1,63 +1,65 @@
|
||||
namespace phoenix {
|
||||
#if defined(Hiro_RadioLabel)
|
||||
|
||||
Size pRadioLabel::minimumSize() {
|
||||
Size size = pFont::size(qtWidget->font(), radioLabel.state.text);
|
||||
return {size.width + 26, size.height + 6};
|
||||
}
|
||||
namespace hiro {
|
||||
|
||||
void pRadioLabel::setChecked() {
|
||||
parent().lock();
|
||||
for(auto& item : radioLabel.state.group) {
|
||||
bool checked = &item == &radioLabel;
|
||||
item.p.qtRadioLabel->setChecked(item.state.checked = checked);
|
||||
}
|
||||
parent().unlock();
|
||||
}
|
||||
|
||||
void pRadioLabel::setGroup(const group<RadioLabel>& group) {
|
||||
parent().lock();
|
||||
for(auto& item : radioLabel.state.group) {
|
||||
item.p.qtRadioLabel->setChecked(item.state.checked);
|
||||
}
|
||||
parent().unlock();
|
||||
}
|
||||
|
||||
void pRadioLabel::setText(string text) {
|
||||
qtRadioLabel->setText(QString::fromUtf8(text));
|
||||
}
|
||||
|
||||
pRadioLabel& pRadioLabel::parent() {
|
||||
if(radioLabel.state.group.size()) return radioLabel.state.group.first().p;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void pRadioLabel::constructor() {
|
||||
qtWidget = qtRadioLabel = new QRadioButton;
|
||||
auto pRadioLabel::construct() -> void {
|
||||
qtWidget = qtRadioLabel = new QtRadioLabel(*this);
|
||||
qtRadioLabel->setAutoExclusive(false);
|
||||
connect(qtRadioLabel, SIGNAL(toggled(bool)), SLOT(onActivate()));
|
||||
qtRadioLabel->connect(qtRadioLabel, SIGNAL(toggled(bool)), SLOT(onActivate()));
|
||||
|
||||
pWidget::synchronizeState();
|
||||
setGroup(radioLabel.state.group);
|
||||
setText(radioLabel.state.text);
|
||||
pWidget::construct();
|
||||
_setState();
|
||||
}
|
||||
|
||||
void pRadioLabel::destructor() {
|
||||
auto pRadioLabel::destruct() -> void {
|
||||
if(qtRadioLabel) delete qtRadioLabel;
|
||||
qtWidget = qtRadioLabel = nullptr;
|
||||
}
|
||||
|
||||
void pRadioLabel::orphan() {
|
||||
destructor();
|
||||
constructor();
|
||||
auto pRadioLabel::minimumSize() const -> Size {
|
||||
auto size = pFont::size(qtWidget->font(), state().text);
|
||||
return {size.width() + 26, size.height() + 6};
|
||||
}
|
||||
|
||||
void pRadioLabel::onActivate() {
|
||||
if(parent().locked()) return;
|
||||
bool wasChecked = radioLabel.state.checked;
|
||||
setChecked();
|
||||
if(!wasChecked) {
|
||||
if(radioLabel.onActivate) radioLabel.onActivate();
|
||||
auto pRadioLabel::setChecked() -> void {
|
||||
_setState();
|
||||
}
|
||||
|
||||
auto pRadioLabel::setGroup(sGroup group) -> void {
|
||||
_setState();
|
||||
}
|
||||
|
||||
auto pRadioLabel::setText(const string& text) -> void {
|
||||
_setState();
|
||||
}
|
||||
|
||||
auto pRadioLabel::_setState() -> void {
|
||||
if(auto& group = state().group) {
|
||||
group->self()->lock();
|
||||
for(auto& weak : group->state.objects) {
|
||||
if(auto object = weak.acquire()) {
|
||||
if(auto radioLabel = dynamic_cast<mRadioLabel*>(object.data())) {
|
||||
if(auto self = radioLabel->self()) {
|
||||
self->qtRadioLabel->setChecked(radioLabel->state.checked);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
group->self()->unlock();
|
||||
}
|
||||
qtRadioLabel->setText(QString::fromUtf8(state().text));
|
||||
}
|
||||
|
||||
auto QtRadioLabel::onActivate() -> void {
|
||||
if(auto& group = p.state().group) {
|
||||
if(!group->self()->locked()) {
|
||||
bool wasChecked = p.state().checked;
|
||||
p.self().setChecked();
|
||||
if(!wasChecked) p.self().doActivate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user