mirror of https://github.com/PCSX2/pcsx2.git
UI:
* Fix for random crashes when recording movies (F12). It still doesn't seem 100% stable, but it's a heckuva lot better than before. * Log options dialog behavior bugfixes. * Cleaned out some old hacks for handling hotkeys from the GS window, and implemented proper use of GSwindow-local hotkey mappings vs. global hotket mappings. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3292 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
4ad1e48950
commit
976cb072a0
|
@ -19,18 +19,19 @@
|
||||||
|
|
||||||
class CheckedStaticBox : public wxPanelWithHelpers
|
class CheckedStaticBox : public wxPanelWithHelpers
|
||||||
{
|
{
|
||||||
|
typedef wxPanelWithHelpers _parent;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
wxBoxSizer& ThisSizer; // Boxsizer which holds all child items.
|
wxBoxSizer& ThisSizer; // Boxsizer which holds all child items.
|
||||||
wxCheckBox& ThisToggle; // toggle which can enable/disable all child controls
|
wxCheckBox& ThisToggle; // toggle which can enable/disable all child controls
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CheckedStaticBox( wxWindow* parent, int orientation, const wxString& title=wxEmptyString, int id=wxID_ANY );
|
CheckedStaticBox( wxWindow* parent, int orientation, const wxString& title=wxEmptyString );
|
||||||
|
|
||||||
void SetValue( bool val );
|
void SetValue( bool val );
|
||||||
bool GetValue() const;
|
bool GetValue() const;
|
||||||
|
bool Enable( bool enable = true );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Event handler for click events for the main checkbox (default behavior: enables/disables all child controls)
|
|
||||||
// This function can be overridden to implement custom handling of check enable/disable behavior.
|
|
||||||
virtual void MainToggle_Click( wxCommandEvent& evt );
|
virtual void MainToggle_Click( wxCommandEvent& evt );
|
||||||
};
|
};
|
||||||
|
|
|
@ -591,11 +591,15 @@ public:
|
||||||
/// parameter. This is a more favorable alternative to the indexer operator since the
|
/// parameter. This is a more favorable alternative to the indexer operator since the
|
||||||
/// indexer implementation can and will create new entries for every request that
|
/// indexer implementation can and will create new entries for every request that
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
void TryGetValue( const Key& key, T& outval ) const
|
bool TryGetValue( const Key& key, T& outval ) const
|
||||||
{
|
{
|
||||||
const_iterator iter( find(key) );
|
const_iterator iter( find(key) );
|
||||||
if( iter != end() )
|
if( iter != end() )
|
||||||
|
{
|
||||||
outval = iter->second;
|
outval = iter->second;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const T& GetValue( Key key ) const
|
const T& GetValue( Key key ) const
|
||||||
|
|
|
@ -16,20 +16,22 @@
|
||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
#include "CheckedStaticBox.h"
|
#include "CheckedStaticBox.h"
|
||||||
|
|
||||||
CheckedStaticBox::CheckedStaticBox( wxWindow* parent, int orientation, const wxString& title, int id )
|
CheckedStaticBox::CheckedStaticBox( wxWindow* parent, int orientation, const wxString& title )
|
||||||
: wxPanelWithHelpers( parent, wxVERTICAL )
|
: wxPanelWithHelpers( parent, wxVERTICAL )
|
||||||
, ThisToggle( *new wxCheckBox( this, id, title, wxPoint( 8, 0 ) ) )
|
, ThisToggle( *new wxCheckBox( this, wxID_ANY, title, wxPoint( 8, 0 ) ) )
|
||||||
, ThisSizer( *new wxStaticBoxSizer( orientation, this ) )
|
, ThisSizer( *new wxStaticBoxSizer( orientation, this ) )
|
||||||
{
|
{
|
||||||
GetSizer()->Add( &ThisToggle );
|
this += ThisToggle;
|
||||||
GetSizer()->Add( &ThisSizer, wxSizerFlags().Expand() );
|
this += ThisSizer;
|
||||||
|
|
||||||
// Ensure that the right-side of the static group box isn't too cozy:
|
// Ensure that the right-side of the static group box isn't too cozy:
|
||||||
GetSizer()->SetMinSize( ThisToggle.GetSize() + wxSize( 32, 0 ) );
|
SetMinWidth( ThisToggle.GetSize().GetWidth() + 32 );
|
||||||
|
|
||||||
Connect( ThisToggle.GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( CheckedStaticBox::MainToggle_Click ) );
|
Connect( ThisToggle.GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( CheckedStaticBox::MainToggle_Click ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Event handler for click events for the main checkbox (default behavior: enables/disables all child controls)
|
||||||
|
// This function can be overridden to implement custom handling of check enable/disable behavior.
|
||||||
void CheckedStaticBox::MainToggle_Click( wxCommandEvent& evt )
|
void CheckedStaticBox::MainToggle_Click( wxCommandEvent& evt )
|
||||||
{
|
{
|
||||||
SetValue( evt.IsChecked() );
|
SetValue( evt.IsChecked() );
|
||||||
|
@ -54,3 +56,22 @@ bool CheckedStaticBox::GetValue() const
|
||||||
{
|
{
|
||||||
return ThisToggle.GetValue();
|
return ThisToggle.GetValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This override is here so to only enable the children if both the main toggle and
|
||||||
|
// the enable request are true. If not, disable them!
|
||||||
|
bool CheckedStaticBox::Enable( bool enable )
|
||||||
|
{
|
||||||
|
if (!_parent::Enable(enable)) return false;
|
||||||
|
|
||||||
|
bool val = enable && ThisToggle.GetValue();
|
||||||
|
wxWindowList& list = GetChildren();
|
||||||
|
|
||||||
|
for( wxWindowList::iterator iter = list.begin(); iter != list.end(); ++iter)
|
||||||
|
{
|
||||||
|
wxWindow *current = *iter;
|
||||||
|
if( current != &ThisToggle )
|
||||||
|
current->Enable( val );
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -185,7 +185,6 @@ enum MTGS_RingCommand
|
||||||
, GS_RINGTYPE_VSYNC
|
, GS_RINGTYPE_VSYNC
|
||||||
, GS_RINGTYPE_FRAMESKIP
|
, GS_RINGTYPE_FRAMESKIP
|
||||||
, GS_RINGTYPE_FREEZE
|
, GS_RINGTYPE_FREEZE
|
||||||
, GS_RINGTYPE_RECORD
|
|
||||||
, GS_RINGTYPE_RESET // issues a GSreset() command.
|
, GS_RINGTYPE_RESET // issues a GSreset() command.
|
||||||
, GS_RINGTYPE_SOFTRESET // issues a soft reset for the GIF
|
, GS_RINGTYPE_SOFTRESET // issues a soft reset for the GIF
|
||||||
, GS_RINGTYPE_WRITECSR
|
, GS_RINGTYPE_WRITECSR
|
||||||
|
|
|
@ -403,14 +403,6 @@ void SysMtgsThread::ExecuteTaskInThread()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GS_RINGTYPE_RECORD:
|
|
||||||
{
|
|
||||||
int record = tag.data[0];
|
|
||||||
if( GSsetupRecording != NULL ) GSsetupRecording(record, NULL);
|
|
||||||
if( SPU2setupRecording != NULL ) SPU2setupRecording(record, NULL);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GS_RINGTYPE_RESET:
|
case GS_RINGTYPE_RESET:
|
||||||
MTGS_LOG( "(MTGS Packet Read) ringtype=Reset" );
|
MTGS_LOG( "(MTGS Packet Read) ringtype=Reset" );
|
||||||
if( GSreset != NULL ) GSreset();
|
if( GSreset != NULL ) GSreset();
|
||||||
|
|
|
@ -245,31 +245,28 @@ void Pcsx2App::PadKeyDispatch( const keyEvent& ev )
|
||||||
|
|
||||||
m_kevt.m_keyCode = vkey;
|
m_kevt.m_keyCode = vkey;
|
||||||
|
|
||||||
// HACK: Legacy PAD plugins expect PCSX2 to ignore keyboard messages on the
|
if( m_kevt.GetEventType() == wxEVT_KEY_DOWN )
|
||||||
// GS window while the PAD plugin is open, so send messages to the APP handler
|
|
||||||
// only if *either* the GS or PAD plugins are in legacy mode.
|
|
||||||
|
|
||||||
GSFrame* gsFrame = wxGetApp().GetGsFramePtr();
|
|
||||||
|
|
||||||
if( gsFrame == NULL || (PADopen != NULL) )
|
|
||||||
{
|
{
|
||||||
if( m_kevt.GetEventType() == wxEVT_KEY_DOWN )
|
if( GSFrame* gsFrame = wxGetApp().GetGsFramePtr() )
|
||||||
|
{
|
||||||
|
gsFrame->GetViewport()->DirectKeyCommand( m_kevt );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
m_kevt.SetId( pxID_PadHandler_Keydown );
|
m_kevt.SetId( pxID_PadHandler_Keydown );
|
||||||
wxGetApp().ProcessEvent( m_kevt );
|
wxGetApp().ProcessEvent( m_kevt );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_kevt.SetId( gsFrame->GetViewport()->GetId() );
|
|
||||||
gsFrame->ProcessEvent( m_kevt );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
// Pcsx2AppTraits (implementations)
|
// Pcsx2AppTraits (implementations) [includes pxMessageOutputMessageBox]
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
|
// This is here to override pxMessageOutputMessageBox behavior, which itself is ONLY used
|
||||||
|
// by wxWidgets' command line processor. The default edition is totally inadequate for
|
||||||
|
// displaying a readable --help command line list, so I replace it here with a custom one
|
||||||
|
// that formats things nicer.
|
||||||
|
//
|
||||||
class pxMessageOutputMessageBox : public wxMessageOutput
|
class pxMessageOutputMessageBox : public wxMessageOutput
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -37,12 +37,16 @@ void GSPanel::InitDefaultAccelerators()
|
||||||
m_Accels->Map( AAC( WXK_F2 ), "States_CycleSlotForward" );
|
m_Accels->Map( AAC( WXK_F2 ), "States_CycleSlotForward" );
|
||||||
m_Accels->Map( AAC( WXK_F2 ).Shift(), "States_CycleSlotBackward" );
|
m_Accels->Map( AAC( WXK_F2 ).Shift(), "States_CycleSlotBackward" );
|
||||||
|
|
||||||
m_Accels->Map( AAC( WXK_F4 ), "Frameskip_Toggle" );
|
m_Accels->Map( AAC( WXK_F4 ), "Framelimiter_MasterToggle");
|
||||||
|
m_Accels->Map( AAC( WXK_F4 ).Shift(), "Frameskip_Toggle");
|
||||||
m_Accels->Map( AAC( WXK_TAB ), "Framelimiter_TurboToggle" );
|
m_Accels->Map( AAC( WXK_TAB ), "Framelimiter_TurboToggle" );
|
||||||
m_Accels->Map( AAC( WXK_TAB ).Shift(), "Framelimiter_MasterToggle" );
|
m_Accels->Map( AAC( WXK_TAB ).Shift(), "Framelimiter_MasterToggle" );
|
||||||
|
|
||||||
m_Accels->Map( AAC( WXK_ESCAPE ), "Sys_Suspend" );
|
m_Accels->Map( AAC( WXK_ESCAPE ), "Sys_Suspend" );
|
||||||
m_Accels->Map( AAC( WXK_F8 ), "Sys_TakeSnapshot" );
|
m_Accels->Map( AAC( WXK_F8 ), "Sys_TakeSnapshot" );
|
||||||
|
m_Accels->Map( AAC( WXK_F8 ).Shift(), "Sys_TakeSnapshot");
|
||||||
|
m_Accels->Map( AAC( WXK_F8 ).Shift().Cmd(), "Sys_TakeSnapshot");
|
||||||
|
m_Accels->Map( AAC( WXK_F9 ), "Sys_RenderswitchToggle");
|
||||||
m_Accels->Map( AAC( WXK_F9 ), "Sys_RenderswitchToggle" );
|
m_Accels->Map( AAC( WXK_F9 ), "Sys_RenderswitchToggle" );
|
||||||
|
|
||||||
//m_Accels->Map( AAC( WXK_F10 ), "Sys_LoggingToggle" );
|
//m_Accels->Map( AAC( WXK_F10 ), "Sys_LoggingToggle" );
|
||||||
|
@ -185,20 +189,17 @@ void GSPanel::OnKeyDown( wxKeyEvent& evt )
|
||||||
// silly, but oh well).
|
// silly, but oh well).
|
||||||
|
|
||||||
if( (PADopen != NULL) && CoreThread.IsOpen() ) return;
|
if( (PADopen != NULL) && CoreThread.IsOpen() ) return;
|
||||||
|
DirectKeyCommand( evt );
|
||||||
|
}
|
||||||
|
|
||||||
|
void GSPanel::DirectKeyCommand( wxKeyEvent& evt )
|
||||||
|
{
|
||||||
const GlobalCommandDescriptor* cmd = NULL;
|
const GlobalCommandDescriptor* cmd = NULL;
|
||||||
m_Accels->TryGetValue( KeyAcceleratorCode( evt ).val32, cmd );
|
m_Accels->TryGetValue( KeyAcceleratorCode( evt ).val32, cmd );
|
||||||
if( cmd == NULL )
|
if( cmd == NULL ) return;
|
||||||
{
|
|
||||||
evt.Skip(); // Let the global APP handle it if it wants
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( cmd != NULL )
|
DbgCon.WriteLn( "(gsFrame) Invoking command: %s", cmd->Id );
|
||||||
{
|
cmd->Invoke();
|
||||||
DbgCon.WriteLn( "(gsFrame) Invoking command: %s", cmd->Id );
|
|
||||||
cmd->Invoke();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSPanel::OnFocus( wxFocusEvent& evt )
|
void GSPanel::OnFocus( wxFocusEvent& evt )
|
||||||
|
|
|
@ -50,6 +50,7 @@ public:
|
||||||
|
|
||||||
void DoResize();
|
void DoResize();
|
||||||
void DoShowMouse();
|
void DoShowMouse();
|
||||||
|
void DirectKeyCommand( wxKeyEvent& evt );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void AppStatusEvent_OnSettingsApplied();
|
void AppStatusEvent_OnSettingsApplied();
|
||||||
|
|
|
@ -203,10 +203,13 @@ namespace Implementations
|
||||||
|
|
||||||
void Sys_RecordingToggle()
|
void Sys_RecordingToggle()
|
||||||
{
|
{
|
||||||
|
ScopedCoreThreadPause paused_core;
|
||||||
|
paused_core.AllowResume();
|
||||||
|
|
||||||
g_Pcsx2Recording ^= 1;
|
g_Pcsx2Recording ^= 1;
|
||||||
|
|
||||||
GetMTGS().WaitGS(); // make sure GS is in sync with the audio stream when we start.
|
GetMTGS().WaitGS(); // make sure GS is in sync with the audio stream when we start.
|
||||||
GetMTGS().SendSimplePacket(GS_RINGTYPE_RECORD, g_Pcsx2Recording, 0, 0);
|
if( GSsetupRecording != NULL ) GSsetupRecording(g_Pcsx2Recording, NULL);
|
||||||
if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL);
|
if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,14 +397,8 @@ void Pcsx2App::InitDefaultGlobalAccelerators()
|
||||||
|
|
||||||
GlobalAccels->Map( AAC( WXK_F4 ), "Framelimiter_MasterToggle");
|
GlobalAccels->Map( AAC( WXK_F4 ), "Framelimiter_MasterToggle");
|
||||||
GlobalAccels->Map( AAC( WXK_F4 ).Shift(), "Frameskip_Toggle");
|
GlobalAccels->Map( AAC( WXK_F4 ).Shift(), "Frameskip_Toggle");
|
||||||
GlobalAccels->Map( AAC( WXK_TAB ), "Framelimiter_TurboToggle" );
|
|
||||||
GlobalAccels->Map( AAC( WXK_TAB ).Shift(), "Framelimiter_SlomoToggle" );
|
|
||||||
|
|
||||||
// Hack! The following bindings are temporary hacks which are needed because of issues
|
/*GlobalAccels->Map( AAC( WXK_ESCAPE ), "Sys_Suspend");
|
||||||
// with PAD plugin interfacing (the local window-based accelerators in GSPanel are
|
|
||||||
// currently ignored).
|
|
||||||
|
|
||||||
GlobalAccels->Map( AAC( WXK_ESCAPE ), "Sys_Suspend");
|
|
||||||
GlobalAccels->Map( AAC( WXK_F8 ), "Sys_TakeSnapshot");
|
GlobalAccels->Map( AAC( WXK_F8 ), "Sys_TakeSnapshot");
|
||||||
GlobalAccels->Map( AAC( WXK_F8 ).Shift(), "Sys_TakeSnapshot");
|
GlobalAccels->Map( AAC( WXK_F8 ).Shift(), "Sys_TakeSnapshot");
|
||||||
GlobalAccels->Map( AAC( WXK_F8 ).Shift().Cmd(),"Sys_TakeSnapshot");
|
GlobalAccels->Map( AAC( WXK_F8 ).Shift().Cmd(),"Sys_TakeSnapshot");
|
||||||
|
@ -411,5 +408,5 @@ void Pcsx2App::InitDefaultGlobalAccelerators()
|
||||||
GlobalAccels->Map( AAC( WXK_F11 ), "Sys_FreezeGS");
|
GlobalAccels->Map( AAC( WXK_F11 ), "Sys_FreezeGS");
|
||||||
GlobalAccels->Map( AAC( WXK_F12 ), "Sys_RecordingToggle");
|
GlobalAccels->Map( AAC( WXK_F12 ), "Sys_RecordingToggle");
|
||||||
|
|
||||||
GlobalAccels->Map( AAC( WXK_RETURN ).Alt(), "FullscreenToggle" );
|
GlobalAccels->Map( AAC( WXK_RETURN ).Alt(), "FullscreenToggle" );*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,8 +142,8 @@ void Panels::eeLogOptionsPanel::OnSettingsChanged()
|
||||||
m_evtPanel->SetValue( conf.EE.m_EnableEvents );
|
m_evtPanel->SetValue( conf.EE.m_EnableEvents );
|
||||||
m_hwPanel->SetValue( conf.EE.m_EnableHardware );
|
m_hwPanel->SetValue( conf.EE.m_EnableHardware );
|
||||||
|
|
||||||
SetCheckValue( EE, Memory );
|
|
||||||
SetCheckValue( EE, Bios );
|
SetCheckValue( EE, Bios );
|
||||||
|
SetCheckValue( EE, Memory );
|
||||||
SetCheckValue( EE, Cache );
|
SetCheckValue( EE, Cache );
|
||||||
SetCheckValue( EE, SysCtrl );
|
SetCheckValue( EE, SysCtrl );
|
||||||
|
|
||||||
|
@ -151,7 +151,6 @@ void Panels::eeLogOptionsPanel::OnSettingsChanged()
|
||||||
SetCheckValue( EE, COP0 );
|
SetCheckValue( EE, COP0 );
|
||||||
SetCheckValue( EE, COP1 );
|
SetCheckValue( EE, COP1 );
|
||||||
SetCheckValue( EE, COP2 );
|
SetCheckValue( EE, COP2 );
|
||||||
|
|
||||||
SetCheckValue(EE, VU0micro);
|
SetCheckValue(EE, VU0micro);
|
||||||
SetCheckValue(EE, VU1micro);
|
SetCheckValue(EE, VU1micro);
|
||||||
|
|
||||||
|
@ -162,8 +161,8 @@ void Panels::eeLogOptionsPanel::OnSettingsChanged()
|
||||||
SetCheckValue(EE, Counters);
|
SetCheckValue(EE, Counters);
|
||||||
SetCheckValue(EE, VIF);
|
SetCheckValue(EE, VIF);
|
||||||
SetCheckValue(EE, GIF);
|
SetCheckValue(EE, GIF);
|
||||||
SetCheckValue(EE, SPR);
|
|
||||||
SetCheckValue(EE, IPU);
|
SetCheckValue(EE, IPU);
|
||||||
|
SetCheckValue(EE, SPR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Panels::iopLogOptionsPanel::OnSettingsChanged()
|
void Panels::iopLogOptionsPanel::OnSettingsChanged()
|
||||||
|
@ -178,6 +177,7 @@ void Panels::iopLogOptionsPanel::OnSettingsChanged()
|
||||||
|
|
||||||
SetCheckValue(IOP, Bios);
|
SetCheckValue(IOP, Bios);
|
||||||
SetCheckValue(IOP, Memory);
|
SetCheckValue(IOP, Memory);
|
||||||
|
SetCheckValue(IOP, GPU);
|
||||||
|
|
||||||
SetCheckValue(IOP, R3000A);
|
SetCheckValue(IOP, R3000A);
|
||||||
SetCheckValue(IOP, COP2);
|
SetCheckValue(IOP, COP2);
|
||||||
|
@ -190,9 +190,9 @@ void Panels::iopLogOptionsPanel::OnSettingsChanged()
|
||||||
SetCheckValue(IOP, Memcards);
|
SetCheckValue(IOP, Memcards);
|
||||||
SetCheckValue(IOP, PAD);
|
SetCheckValue(IOP, PAD);
|
||||||
SetCheckValue(IOP, SPU2);
|
SetCheckValue(IOP, SPU2);
|
||||||
|
SetCheckValue(IOP, CDVD);
|
||||||
SetCheckValue(IOP, USB);
|
SetCheckValue(IOP, USB);
|
||||||
SetCheckValue(IOP, FW);
|
SetCheckValue(IOP, FW);
|
||||||
SetCheckValue(IOP, CDVD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue