bsnes/hiro/qt/widget/tab-frame.cpp
Tim Allen 393c2395bb Update to v106r48 release.
byuu says:

The problems with the Windows and Qt4 ports have all been resolved,
although there's a fairly gross hack on a few Qt widgets to not destruct
once Application::quit() is called to avoid a double free crash (I'm
unsure where Qt is destructing the widgets internally.) The Cocoa port
compiles again at least, though it's bound to have endless problems. I
improved the Label painting in the GTK ports, which fixes the background
color on labels inside TabFrame widgets.

I've optimized the Makefile system even further.

I added a "redo state" command to bsnes, which is created whenever you
load the undo state. There are also hotkeys for both now, although I
don't think they're really something you want to map hotkeys to.

I moved the nall::Locale object inside hiro::Application, so that it can
be used to translate the BrowserDialog and MessageDialog window strings.

I improved the Super Game Boy emulation of `MLT_REQ`, fixing Pokemon
Yellow's custom border and probably more stuff.

Lots of other small fixes and improvements. Things are finally stable
once again after the harrowing layout redesign catastrophe.

Errata:

  - ICD::joypID should be set to 3 on reset(). joypWrite() may as well
    take uint1 instead of bool.
  - hiro/Qt: remove pWindow::setMaximumSize() comment; found a
    workaround for it
  - nall/GNUmakefile: don't set object.path if it's already set (allow
    overrides before including the file)
2018-07-16 16:16:26 +10:00

67 lines
1.9 KiB
C++

#if defined(Hiro_TabFrame)
namespace hiro {
auto pTabFrame::construct() -> void {
qtWidget = qtTabFrame = new QtTabFrame(*this);
qtTabFrame->connect(qtTabFrame, SIGNAL(currentChanged(int)), SLOT(onChange(int)));
pWidget::construct();
_setState();
}
auto pTabFrame::destruct() -> void {
if(Application::state.quit) return; //TODO: hack
delete qtTabFrame;
qtWidget = qtTabFrame = nullptr;
}
auto pTabFrame::append(sTabFrameItem item) -> void {
setGeometry(self().geometry());
}
auto pTabFrame::remove(sTabFrameItem item) -> void {
}
auto pTabFrame::setGeometry(Geometry geometry) -> void {
pWidget::setGeometry(geometry);
for(auto& item : state().items) {
if(auto self = item->self()) self->setGeometry(geometry);
}
}
auto pTabFrame::setNavigation(Navigation navigation) -> void {
_setState();
}
auto pTabFrame::_setState() -> void {
switch(state().navigation) { default:
case Navigation::Top: qtTabFrame->setTabPosition(QTabWidget::TabPosition::North); break;
case Navigation::Bottom: qtTabFrame->setTabPosition(QTabWidget::TabPosition::South); break;
case Navigation::Left: qtTabFrame->setTabPosition(QTabWidget::TabPosition::West); break;
case Navigation::Right: qtTabFrame->setTabPosition(QTabWidget::TabPosition::East); break;
}
for(auto& item : state().items) {
if(auto self = item->self()) self->_setState();
}
}
auto QtTabFrame::showEvent(QShowEvent* event) -> void {
QTabWidget::showEvent(event);
p._setState(); //needed to capture geometry of TabFrame for TabFrameItem layouts
}
auto QtTabFrame::onChange(int selection) -> void {
//geometry of tab frames is only valid once said tab frame is visible
//as such, as need to call _setState() to update the TabFrameItem's geometry here
if(auto item = p.self().item(selection)) {
if(auto self = item->self()) self->_setState();
}
if(!p.locked()) p.self().doChange();
}
}
#endif