ButcherImage *ButcherProjectAreaConfigPreview::GetPreview() { if (ConfigChanged()) { if (GetProject()->Views().Exists(viewid_) && NeedImage()) { ButcherProjectBaseAutoProgress progress(this, wxString::Format(_("Generating preview for %s, please wait..."), areaconfig_->GetArea()->GetDescription().c_str())); try { std::auto_ptr<ButcherImage> simage(GetProject()->Views()[viewid_]->CreateAreaImage(areaconfig_->GetArea())); if (HavePreview() && simage.get()) SetPreview(simage->Save(areaconfig_->ImageInfo().GetSaveParams())); else SetPreview(simage.release()); } catch(...) { //lasterror_=true; //throw; SetPreview(GetProject()->Views()[viewid_]->CreateAreaErrorImage(areaconfig_->GetArea())); } } else SetPreview(NULL); } return preview_; }
bool ConfigChanged(const Config *c) { switch (c->Type) { case CONFIG_TYPE_STRING: return strcmp(c->u.String.Value, c->u.String.Last) != 0; case CONFIG_TYPE_INT: return c->u.Int.Value != c->u.Int.Last; case CONFIG_TYPE_FLOAT: return c->u.Float.Value != c->u.Float.Last; case CONFIG_TYPE_BOOL: return c->u.Bool.Value != c->u.Bool.Last; case CONFIG_TYPE_ENUM: return c->u.Enum.Value != c->u.Enum.Last; case CONFIG_TYPE_GROUP: CA_FOREACH(Config, child, c->u.Group) if (ConfigChanged(child)) { return true; } CA_FOREACH_END() return false; default: CASSERT(false, "Unknown config type"); return false; } }
Settings::Settings() { qRegisterMetaType<Core::State>(); Core::SetOnStateChangedCallback([this](Core::State new_state) { QueueOnObject(this, [this, new_state] { emit EmulationStateChanged(new_state); }); }); Config::AddConfigChangedCallback( [this] { QueueOnObject(this, [this] { emit ConfigChanged(); }); }); SetCurrentUserStyle(GetCurrentUserStyle()); }