recording: Improve NewRecordingFrame window

* File browsing will be required when creating a new input recording if at any point the filename box is empty.
* Removes the "Current Frame" selection if GS is closed. Corethread check in InputRecordingFile::openNew() no longer necesaary.
This commit is contained in:
sonicfind 2020-12-15 19:06:30 -06:00 committed by refractionpcsx2
parent a6b2d30bd0
commit c278e6414c
4 changed files with 54 additions and 27 deletions

View File

@ -130,26 +130,10 @@ bool InputRecordingFile::open(const wxString path, bool newRecording)
bool InputRecordingFile::OpenNew(const wxString& path, bool fromSavestate) bool InputRecordingFile::OpenNew(const wxString& path, bool fromSavestate)
{ {
if (fromSavestate) if (!open(path, true))
{
if (CoreThread.IsOpen())
{
if (open(path, true))
{
savestate.fromSavestate = true;
return true;
}
}
else
inputRec::consoleLog("Game is not open, aborting playing input recording which starts on a save-state.");
return false; return false;
} savestate.fromSavestate = fromSavestate;
else if (open(path, true)) return true;
{
savestate.fromSavestate = false;
return true;
}
return false;
} }
bool InputRecordingFile::OpenExisting(const wxString& path) bool InputRecordingFile::OpenExisting(const wxString& path)

View File

@ -33,13 +33,10 @@ NewRecordingFrame::NewRecordingFrame(wxWindow* parent)
m_filePicker = new wxFilePickerCtrl(panel, MenuIds_New_Recording_Frame_File, wxEmptyString, "File", L"p2m2 file(*.p2m2)|*.p2m2", wxDefaultPosition, wxDefaultSize, wxFLP_SAVE | wxFLP_OVERWRITE_PROMPT | wxFLP_USE_TEXTCTRL); m_filePicker = new wxFilePickerCtrl(panel, MenuIds_New_Recording_Frame_File, wxEmptyString, "File", L"p2m2 file(*.p2m2)|*.p2m2", wxDefaultPosition, wxDefaultSize, wxFLP_SAVE | wxFLP_OVERWRITE_PROMPT | wxFLP_USE_TEXTCTRL);
m_authorInput = new wxTextCtrl(panel, MenuIds_New_Recording_Frame_Author, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); m_authorInput = new wxTextCtrl(panel, MenuIds_New_Recording_Frame_Author, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
wxArrayString choices; m_fromChoice = new wxChoice(panel, MenuIds_New_Recording_Frame_From, wxDefaultPosition, wxDefaultSize, NULL);
choices.Add("Current Frame");
choices.Add("Power-On");
m_fromChoice = new wxChoice(panel, MenuIds_New_Recording_Frame_From, wxDefaultPosition, wxDefaultSize, choices);
m_fromChoice->SetSelection(0);
m_startRecording = new wxButton(panel, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize); m_startRecording = new wxButton(panel, wxID_OK, _("Browse Required"), wxDefaultPosition, wxDefaultSize);
m_startRecording->Enable(false);
m_cancelRecording = new wxButton(panel, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize); m_cancelRecording = new wxButton(panel, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize);
fgs->Add(m_fileLabel, 1); fgs->Add(m_fileLabel, 1);
@ -58,6 +55,45 @@ NewRecordingFrame::NewRecordingFrame(wxWindow* parent)
panel->SetSizer(container); panel->SetSizer(container);
panel->GetSizer()->Fit(this); panel->GetSizer()->Fit(this);
Centre(); Centre();
m_fileBrowsed = false;
m_filePicker->GetPickerCtrl()->Bind(wxEVT_FILEPICKER_CHANGED, &NewRecordingFrame::OnFileDirChange, this);
m_filePicker->Bind(wxEVT_FILEPICKER_CHANGED, &NewRecordingFrame::OnFileChanged, this);
}
int NewRecordingFrame::ShowModal(const bool isCoreThreadOpen)
{
static const char* choices[2] = {"Boot", "Current Frame"};
m_fromChoice->Set(wxArrayString(1 + isCoreThreadOpen, &choices[0]));
m_fromChoice->SetSelection(isCoreThreadOpen);
return wxDialog::ShowModal();
}
void NewRecordingFrame::OnFileDirChange(wxFileDirPickerEvent& event)
{
m_filePicker->wxFileDirPickerCtrlBase::OnFileDirChange(event);
m_fileBrowsed = true;
EnableOkBox();
}
void NewRecordingFrame::OnFileChanged(wxFileDirPickerEvent& event)
{
EnableOkBox();
}
void NewRecordingFrame::EnableOkBox()
{
if (m_filePicker->GetPath().length() == 0)
{
m_fileBrowsed = false;
m_startRecording->SetLabel(_("Browse Required"));
m_startRecording->Enable(false);
}
else if (m_fileBrowsed)
{
m_startRecording->SetLabel(_("Start"));
m_startRecording->Enable(true);
}
} }
wxString NewRecordingFrame::GetFile() const wxString NewRecordingFrame::GetFile() const

View File

@ -32,14 +32,21 @@ class NewRecordingFrame : public wxDialog
{ {
public: public:
NewRecordingFrame(wxWindow* parent); NewRecordingFrame(wxWindow* parent);
int ShowModal(const bool isCoreThreadOpen);
wxString GetFile() const; wxString GetFile() const;
wxString GetAuthor() const; wxString GetAuthor() const;
int GetFrom() const; int GetFrom() const;
protected:
void OnFileDirChange(wxFileDirPickerEvent& event);
void OnFileChanged(wxFileDirPickerEvent& event);
void EnableOkBox();
private: private:
wxStaticText* m_fileLabel; wxStaticText* m_fileLabel;
wxFilePickerCtrl* m_filePicker; wxFilePickerCtrl* m_filePicker;
bool m_fileBrowsed;
wxStaticText* m_authorLabel; wxStaticText* m_authorLabel;
wxTextCtrl* m_authorInput; wxTextCtrl* m_authorInput;
wxStaticText* m_fromLabel; wxStaticText* m_fromLabel;

View File

@ -956,9 +956,9 @@ void MainEmuFrame::Menu_Recording_New_Click(wxCommandEvent& event)
NewRecordingFrame* newRecordingFrame = wxGetApp().GetNewRecordingFramePtr(); NewRecordingFrame* newRecordingFrame = wxGetApp().GetNewRecordingFramePtr();
if (newRecordingFrame) if (newRecordingFrame)
{ {
if (newRecordingFrame->ShowModal() != wxID_CANCEL) if (newRecordingFrame->ShowModal(CoreThread.IsOpen()) != wxID_CANCEL)
{ {
if (g_InputRecording.Create(newRecordingFrame->GetFile(), !newRecordingFrame->GetFrom(), newRecordingFrame->GetAuthor())) if (g_InputRecording.Create(newRecordingFrame->GetFile(), newRecordingFrame->GetFrom(), newRecordingFrame->GetAuthor()))
{ {
if (!g_InputRecording.GetInputRecordingData().FromSaveState()) if (!g_InputRecording.GetInputRecordingData().FromSaveState())
StartInputRecording(); StartInputRecording();