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

View file

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

View file

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

View file

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

View file

@ -1013,7 +1013,7 @@ int PSPSaveDialog::Update(int animSpeed)
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);
return 0;

View file

@ -61,7 +61,7 @@ PSPScreenshotDialog::~PSPScreenshotDialog() {
int PSPScreenshotDialog::Init(u32 paramAddr) {
// 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);
return SCE_ERROR_UTILITY_INVALID_STATUS;
}
@ -84,23 +84,23 @@ int PSPScreenshotDialog::Init(u32 paramAddr) {
}
mode = params_->mode;
status = SCE_UTILITY_STATUS_INITIALIZE;
ChangeStatus(SCE_UTILITY_STATUS_INITIALIZE, 0);
return 0;
}
int PSPScreenshotDialog::Update(int animSpeed) {
if (UseAutoStatus()) {
if (status == SCE_UTILITY_STATUS_INITIALIZE) {
status = SCE_UTILITY_STATUS_RUNNING;
} else if (status == SCE_UTILITY_STATUS_RUNNING) {
if (ReadStatus() == SCE_UTILITY_STATUS_INITIALIZE) {
ChangeStatus(SCE_UTILITY_STATUS_RUNNING, 0);
} else if (ReadStatus() == SCE_UTILITY_STATUS_RUNNING) {
if (mode == SCE_UTILITY_SCREENSHOT_TYPE_CONT_START) {
status = SCE_UTILITY_STATUS_SCREENSHOT_UNKNOWN;
ChangeStatus(SCE_UTILITY_STATUS_SCREENSHOT_UNKNOWN, 0);
} else {
status = SCE_UTILITY_STATUS_FINISHED;
ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0);
}
} else if (status == SCE_UTILITY_STATUS_FINISHED) {
status = SCE_UTILITY_STATUS_SHUTDOWN;
} else if (ReadStatus() == SCE_UTILITY_STATUS_FINISHED) {
ChangeStatus(SCE_UTILITY_STATUS_SHUTDOWN, 0);
}
}
return 0;
@ -108,11 +108,11 @@ int PSPScreenshotDialog::Update(int animSpeed) {
int PSPScreenshotDialog::ContStart() {
// 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;
// Check with JPCSPTrace log of Dream Club Portable
status = SCE_UTILITY_STATUS_FINISHED;
ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0);
return 0;
}

View file

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