Dialog: Manage status only through accessors.

This commit is contained in:
Unknown W. Brackets 2021-01-18 10:46:57 -08:00
parent 6db0f5106c
commit 8bd32b6009
8 changed files with 46 additions and 38 deletions

View file

@ -28,11 +28,7 @@
#define FADE_TIME 1.0 #define FADE_TIME 1.0
const float FONT_SCALE = 0.55f; const float FONT_SCALE = 0.55f;
PSPDialog::PSPDialog() PSPDialog::PSPDialog() {
: status(SCE_UTILITY_STATUS_NONE), pendingStatus(SCE_UTILITY_STATUS_NONE),
pendingStatusTicks(0), lastButtons(0), buttons(0)
{
} }
PSPDialog::~PSPDialog() { PSPDialog::~PSPDialog() {

View file

@ -94,23 +94,23 @@ protected:
void ChangeStatus(DialogStatus newStatus, int delayUs); void ChangeStatus(DialogStatus newStatus, int delayUs);
void ChangeStatusInit(int delayUs); void ChangeStatusInit(int delayUs);
void ChangeStatusShutdown(int delayUs); void ChangeStatusShutdown(int delayUs);
DialogStatus ReadStatus() {
return status;
}
// TODO: Remove this once all dialogs are updated. // TODO: Remove this once all dialogs are updated.
virtual bool UseAutoStatus() { virtual bool UseAutoStatus() = 0;
return true;
}
void StartFade(bool fadeIn_); void StartFade(bool fadeIn_);
void UpdateFade(int animSpeed); void UpdateFade(int animSpeed);
virtual void FinishFadeOut(); virtual void FinishFadeOut();
u32 CalcFadedColor(u32 inColor); u32 CalcFadedColor(u32 inColor);
DialogStatus status; DialogStatus pendingStatus = SCE_UTILITY_STATUS_NONE;
DialogStatus pendingStatus; u64 pendingStatusTicks = 0;
u64 pendingStatusTicks;
unsigned int lastButtons; unsigned int lastButtons = 0;
unsigned int buttons; unsigned int buttons = 0;
float fadeTimer; float fadeTimer;
bool isFading; bool isFading;
@ -121,4 +121,7 @@ protected:
ImageID cancelButtonImg; ImageID cancelButtonImg;
int okButtonFlag; int okButtonFlag;
int cancelButtonFlag; int cancelButtonFlag;
private:
DialogStatus status = SCE_UTILITY_STATUS_NONE;
}; };

View file

@ -46,6 +46,12 @@ public:
int Abort(); int Abort();
std::string GetGameDataInstallFileName(SceUtilityGamedataInstallParam *param, std::string filename); std::string GetGameDataInstallFileName(SceUtilityGamedataInstallParam *param, std::string filename);
protected:
// TODO: Manage status correctly.
bool UseAutoStatus() override {
return true;
}
private: private:
void UpdateProgress(); void UpdateProgress();
void OpenNextFile(); void OpenNextFile();

View file

@ -62,7 +62,7 @@ PSPNetconfDialog::~PSPNetconfDialog() {
int PSPNetconfDialog::Init(u32 paramAddr) { int PSPNetconfDialog::Init(u32 paramAddr) {
// Already running // Already running
if (status != SCE_UTILITY_STATUS_NONE) if (ReadStatus() != SCE_UTILITY_STATUS_NONE)
return SCE_ERROR_UTILITY_INVALID_STATUS; return SCE_ERROR_UTILITY_INVALID_STATUS;
requestAddr = paramAddr; requestAddr = paramAddr;
@ -471,7 +471,7 @@ int PSPNetconfDialog::Update(int animSpeed) {
} }
int PSPNetconfDialog::Shutdown(bool force) { int PSPNetconfDialog::Shutdown(bool force) {
if (status != SCE_UTILITY_STATUS_FINISHED && !force) if (ReadStatus() != SCE_UTILITY_STATUS_FINISHED && !force)
return SCE_ERROR_UTILITY_INVALID_STATUS; return SCE_ERROR_UTILITY_INVALID_STATUS;
PSPDialog::Shutdown(force); PSPDialog::Shutdown(force);

View file

@ -25,20 +25,18 @@ PSPPlaceholderDialog::~PSPPlaceholderDialog() {
} }
int PSPPlaceholderDialog::Init() int PSPPlaceholderDialog::Init() {
{ ChangeStatus(SCE_UTILITY_STATUS_INITIALIZE, 0);
status = SCE_UTILITY_STATUS_INITIALIZE;
return 0; return 0;
} }
int PSPPlaceholderDialog::Update(int animSpeed) int PSPPlaceholderDialog::Update(int animSpeed) {
{ if (ReadStatus() == SCE_UTILITY_STATUS_INITIALIZE) {
if (status == SCE_UTILITY_STATUS_INITIALIZE) { ChangeStatus(SCE_UTILITY_STATUS_RUNNING, 0);
status = SCE_UTILITY_STATUS_RUNNING; } else if (ReadStatus() == SCE_UTILITY_STATUS_RUNNING) {
} else if (status == SCE_UTILITY_STATUS_RUNNING) { ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0);
status = SCE_UTILITY_STATUS_FINISHED; } else if (ReadStatus() == SCE_UTILITY_STATUS_FINISHED) {
} else if (status == SCE_UTILITY_STATUS_FINISHED) { ChangeStatus(SCE_UTILITY_STATUS_SHUTDOWN, 0);
status = SCE_UTILITY_STATUS_SHUTDOWN;
} }
return 0; return 0;

View file

@ -1013,7 +1013,7 @@ int PSPSaveDialog::Update(int animSpeed)
break; break;
} }
if (status == SCE_UTILITY_STATUS_FINISHED || pendingStatus == SCE_UTILITY_STATUS_FINISHED) if (ReadStatus() == SCE_UTILITY_STATUS_FINISHED || pendingStatus == SCE_UTILITY_STATUS_FINISHED)
Memory::Memcpy(requestAddr, &request, request.common.size); Memory::Memcpy(requestAddr, &request, request.common.size);
return 0; return 0;

View file

@ -61,7 +61,7 @@ PSPScreenshotDialog::~PSPScreenshotDialog() {
int PSPScreenshotDialog::Init(u32 paramAddr) { int PSPScreenshotDialog::Init(u32 paramAddr) {
// Already running // Already running
if (status != SCE_UTILITY_STATUS_NONE && status != SCE_UTILITY_STATUS_SHUTDOWN) { if (ReadStatus() != SCE_UTILITY_STATUS_NONE && ReadStatus() != SCE_UTILITY_STATUS_SHUTDOWN) {
ERROR_LOG_REPORT(HLE, "sceUtilityScreenshotInitStart(%08x): invalid status", paramAddr); ERROR_LOG_REPORT(HLE, "sceUtilityScreenshotInitStart(%08x): invalid status", paramAddr);
return SCE_ERROR_UTILITY_INVALID_STATUS; return SCE_ERROR_UTILITY_INVALID_STATUS;
} }
@ -84,23 +84,23 @@ int PSPScreenshotDialog::Init(u32 paramAddr) {
} }
mode = params_->mode; mode = params_->mode;
status = SCE_UTILITY_STATUS_INITIALIZE; ChangeStatus(SCE_UTILITY_STATUS_INITIALIZE, 0);
return 0; return 0;
} }
int PSPScreenshotDialog::Update(int animSpeed) { int PSPScreenshotDialog::Update(int animSpeed) {
if (UseAutoStatus()) { if (UseAutoStatus()) {
if (status == SCE_UTILITY_STATUS_INITIALIZE) { if (ReadStatus() == SCE_UTILITY_STATUS_INITIALIZE) {
status = SCE_UTILITY_STATUS_RUNNING; ChangeStatus(SCE_UTILITY_STATUS_RUNNING, 0);
} else if (status == SCE_UTILITY_STATUS_RUNNING) { } else if (ReadStatus() == SCE_UTILITY_STATUS_RUNNING) {
if (mode == SCE_UTILITY_SCREENSHOT_TYPE_CONT_START) { if (mode == SCE_UTILITY_SCREENSHOT_TYPE_CONT_START) {
status = SCE_UTILITY_STATUS_SCREENSHOT_UNKNOWN; ChangeStatus(SCE_UTILITY_STATUS_SCREENSHOT_UNKNOWN, 0);
} else { } else {
status = SCE_UTILITY_STATUS_FINISHED; ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0);
} }
} else if (status == SCE_UTILITY_STATUS_FINISHED) { } else if (ReadStatus() == SCE_UTILITY_STATUS_FINISHED) {
status = SCE_UTILITY_STATUS_SHUTDOWN; ChangeStatus(SCE_UTILITY_STATUS_SHUTDOWN, 0);
} }
} }
return 0; return 0;
@ -108,11 +108,11 @@ int PSPScreenshotDialog::Update(int animSpeed) {
int PSPScreenshotDialog::ContStart() { int PSPScreenshotDialog::ContStart() {
// Based on JPCSP http://code.google.com/p/jpcsp/source/detail?r=3381 // Based on JPCSP http://code.google.com/p/jpcsp/source/detail?r=3381
if (status != SCE_UTILITY_STATUS_SCREENSHOT_UNKNOWN) if (ReadStatus() != SCE_UTILITY_STATUS_SCREENSHOT_UNKNOWN)
return SCE_ERROR_UTILITY_INVALID_STATUS; return SCE_ERROR_UTILITY_INVALID_STATUS;
// Check with JPCSPTrace log of Dream Club Portable // Check with JPCSPTrace log of Dream Club Portable
status = SCE_UTILITY_STATUS_FINISHED; ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0);
return 0; return 0;
} }

View file

@ -33,6 +33,11 @@ public:
virtual void DoState(PointerWrap &p) override; virtual void DoState(PointerWrap &p) override;
protected: protected:
// TODO: Manage status correctly.
bool UseAutoStatus() override {
return true;
}
int mode; int mode;
PSPPointer<SceUtilityScreenshotParams> params_; PSPPointer<SceUtilityScreenshotParams> params_;
}; };