UI: Switched from the old 'native' text labels to a new custom draw text label that should (hopefully!) be a lot better about positioning and wrapping text, and fitting to windows and what-not. Also gets rid of my nasty "ideal width" hack I originally used to fix-size some of the dialogs.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3150 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2010-06-04 08:00:19 +00:00
parent 6a9950e9ef
commit 8f92cdf265
33 changed files with 523 additions and 514 deletions

View File

@ -72,7 +72,7 @@ struct RadioPanelItem
struct RadioPanelObjects struct RadioPanelObjects
{ {
wxRadioButton* LabelObj; wxRadioButton* LabelObj;
wxStaticText* SubTextObj; pxStaticText* SubTextObj;
}; };
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
@ -122,8 +122,8 @@ public:
void Reset(); void Reset();
void Realize(); void Realize();
wxStaticText* GetSubText( int idx ); pxStaticText* GetSubText( int idx );
const wxStaticText* GetSubText( int idx ) const; const pxStaticText* GetSubText( int idx ) const;
pxRadioPanel& Append( const RadioPanelItem& entry ); pxRadioPanel& Append( const RadioPanelItem& entry );
pxRadioPanel& SetToolTip( int idx, const wxString& tip ); pxRadioPanel& SetToolTip( int idx, const wxString& tip );

View File

@ -21,12 +21,6 @@
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// pxStaticText // pxStaticText
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// Important:
// Proper use of this class requires using it's custom AddTo( wxSizer& ) method, in the
// place of wxSizer.Add(). You can also use the += operator (recommended):
//
// mySizer += new pxStaticText( this, _("omg translate me?") );
//
// This class's purpose is to overcome two fundamental annoyances in wxWidgets design: // This class's purpose is to overcome two fundamental annoyances in wxWidgets design:
// //
// * An inability to wrap text to conform to a fitted window (a limitation imposed by // * An inability to wrap text to conform to a fitted window (a limitation imposed by
@ -38,85 +32,72 @@
// control within it's containing sizer. If both alignment flags do not match the result // control within it's containing sizer. If both alignment flags do not match the result
// is typically undesirable. // is typically undesirable.
// //
// The first one is very hard to fix properly. Currently this class employs a hack where it class pxStaticText : public wxPanel
// grabs the "ideal" fitting width from it's containing panel/window, and then wraps text to
// fit within those confines. Under this design, pxStaticText controls will typically be the
// "regulators" of the window's display size, since they cannot really participate in the
// normal sizer system (since their minimum height is unknown until width-based sizes are
// determined).
//
// Note that if another control in the window has extends that blow the window size larger
// than the "ideal" width, then the pxStaticText will remain consistent in it's size. It
// will not attempt to grow to fit the expanded area. That might be fixable behavior, but
// it was hard enough for me to get this much working. ;)
//
class pxStaticText : public wxStaticText
{ {
typedef wxStaticText _parent; typedef wxPanel _parent;
protected: protected:
wxString m_message; wxAlignment m_align;
int m_wrapwidth; wxString m_wrappedLabel;
int m_alignflags; bool m_autowrap;
bool m_unsetLabel; int m_wrappedWidth;
double m_centerPadding; int m_heightInLines;
int m_paddingPix_horiz;
int m_paddingPix_vert;
float m_paddingPct_horiz;
float m_paddingPct_vert;
protected:
explicit pxStaticText( wxWindow* parent=NULL );
public: public:
explicit pxStaticText( wxWindow* parent, const wxString& label=wxEmptyString, int style=wxALIGN_LEFT ); pxStaticText( wxWindow* parent, const wxString& label, wxAlignment align=wxALIGN_CENTRE_HORIZONTAL );
explicit pxStaticText( wxWindow* parent, int style ); pxStaticText( wxWindow* parent, int heightInLines, const wxString& label, wxAlignment align=wxALIGN_CENTRE_HORIZONTAL );
virtual ~pxStaticText() throw() {} virtual ~pxStaticText() throw() {}
void SetLabel( const wxString& label ); wxFont GetFontOk() const;
pxStaticText& SetWrapWidth( int newwidth );
pxStaticText& SetToolTip( const wxString& tip );
wxSize GetMinSize() const; virtual void SetLabel(const wxString& label);
//void DoMoveWindow(int x, int y, int width, int height); pxStaticText& SetHeight( int lines );
pxStaticText& Bold();
pxStaticText& WrapAt( int width );
void AddTo( wxSizer& sizer, wxSizerFlags flags=pxSizerFlags::StdSpace() ); pxStaticText& Unwrapped();
void AddTo( wxSizer* sizer, const wxSizerFlags& flags=pxSizerFlags::StdSpace() ) { AddTo( *sizer, flags ); }
void InsertAt( wxSizer& sizer, int position, wxSizerFlags flags=pxSizerFlags::StdSpace() ); pxStaticText& PaddingPixH( int pixels );
int GetIdealWidth() const; pxStaticText& PaddingPixV( int pixels );
pxStaticText& PaddingPctH( float pct );
pxStaticText& PaddingPctV( float pct );
//pxStaticText& DoBestGuessHeight();
protected: protected:
void _setLabel(); void SetPaddingDefaults();
void Init( const wxString& label );
wxSize GetBestWrappedSize( const wxClientDC& dc ) const;
wxSize DoGetBestSize() const;
int calcPaddingWidth( int newWidth ) const;
int calcPaddingHeight( int newHeight ) const;
void paintEvent(wxPaintEvent& evt);
void UpdateWrapping( bool textChanged );
bool _updateWrapping( bool textChanged );
}; };
extern void operator+=( wxSizer& target, pxStaticText* src );
extern void operator+=( wxSizer& target, pxStaticText& src );
extern void operator+=( wxSizer* target, pxStaticText& src );
template<>
inline void operator+=( wxSizer& target, const pxWindowAndFlags<pxStaticText>& src )
{
src.window->AddTo( target, src.flags );
//target.Add( src.window, src.flags );
}
template<>
inline void operator+=( wxSizer* target, const pxWindowAndFlags<pxStaticText>& src )
{
src.window->AddTo( target, src.flags );
//target.Add( src.window, src.flags );
}
// --------------------------------------------------------------------------------------
// pxStaticHeading
// --------------------------------------------------------------------------------------
// Basically like a pxStaticText, except it defaults to wxALIGN_CENTRE, and it has expanded
// left and right side padding.
//
// The padding is not an exact science and, if there isn't any other controls in the form
// that are equal to or exceeding the IdealWidth, the control will end up fitting tightly
// to the heading (padding will be nullified).
//
class pxStaticHeading : public pxStaticText class pxStaticHeading : public pxStaticText
{ {
typedef pxStaticText _parent;
public: public:
pxStaticHeading( wxWindow* parent, const wxString& label=wxEmptyString, int style=wxALIGN_CENTRE ); pxStaticHeading( wxWindow* parent=NULL, const wxString& label=wxEmptyString );
pxStaticHeading( wxWindow* parent, int heightInLines, const wxString& label=wxEmptyString );
virtual ~pxStaticHeading() throw() {} virtual ~pxStaticHeading() throw() {}
//using pxStaticText::operator wxSizerFlags; protected:
void SetPaddingDefaults();
}; };

View File

@ -58,6 +58,11 @@ struct pxAlignmentType
return Apply( _flgs ); return Apply( _flgs );
} }
wxSizerFlags Expand() const
{
return Apply().Expand();
}
wxSizerFlags Border( int dir, int padding ) const wxSizerFlags Border( int dir, int padding ) const
{ {
return Apply().Border( dir, padding ); return Apply().Border( dir, padding );
@ -280,7 +285,7 @@ void operator+=( wxSizer* target, const pxWindowAndFlags<WinType>& src )
namespace pxSizerFlags namespace pxSizerFlags
{ {
static const int StdPadding = 5; static const int StdPadding = 4;
extern wxSizerFlags StdSpace(); extern wxSizerFlags StdSpace();
extern wxSizerFlags StdCenter(); extern wxSizerFlags StdCenter();
@ -305,7 +310,6 @@ class wxDialogWithHelpers : public wxDialog
protected: protected:
bool m_hasContextHelp; bool m_hasContextHelp;
int m_idealWidth;
wxBoxSizer* m_extraButtonSizer; wxBoxSizer* m_extraButtonSizer;
public: public:
@ -328,13 +332,11 @@ public:
// screenshots to disk) // screenshots to disk)
virtual wxString GetDialogName() const; virtual wxString GetDialogName() const;
virtual pxStaticText* Text( const wxString& label ); virtual wxStaticText& Label( const wxString& label );
virtual pxStaticHeading* Heading( const wxString& label ); virtual pxStaticText& Text( const wxString& label );
virtual pxStaticText& Heading( const wxString& label );
virtual wxDialogWithHelpers& SetIdealWidth( int newWidth ) { m_idealWidth = newWidth; return *this; } virtual wxDialogWithHelpers& SetMinWidth( int newWidth );
int GetIdealWidth() const { return m_idealWidth; }
bool HasIdealWidth() const { return m_idealWidth != wxDefaultCoord; }
protected: protected:
void OnDialogCreated( wxCommandEvent& evt ); void OnDialogCreated( wxCommandEvent& evt );
@ -363,9 +365,6 @@ class wxPanelWithHelpers : public wxPanel
{ {
DECLARE_DYNAMIC_CLASS_NO_COPY(wxPanelWithHelpers) DECLARE_DYNAMIC_CLASS_NO_COPY(wxPanelWithHelpers)
protected:
int m_idealWidth;
public: public:
wxPanelWithHelpers( wxWindow* parent, wxOrientation orient, const wxString& staticBoxLabel ); wxPanelWithHelpers( wxWindow* parent, wxOrientation orient, const wxString& staticBoxLabel );
wxPanelWithHelpers( wxWindow* parent, wxOrientation orient ); wxPanelWithHelpers( wxWindow* parent, wxOrientation orient );
@ -374,13 +373,11 @@ public:
wxPanelWithHelpers* AddFrame( const wxString& label, wxOrientation orient=wxVERTICAL ); wxPanelWithHelpers* AddFrame( const wxString& label, wxOrientation orient=wxVERTICAL );
pxStaticText* Text( const wxString& label ); wxStaticText& Label( const wxString& label );
pxStaticHeading* Heading( const wxString& label ); pxStaticText& Text( const wxString& label );
pxStaticText& Heading( const wxString& label );
// TODO : Propagate to children? virtual wxPanelWithHelpers& SetMinWidth( int newWidth );
wxPanelWithHelpers& SetIdealWidth( int width ) { m_idealWidth = width; return *this; }
int GetIdealWidth() const { return m_idealWidth; }
bool HasIdealWidth() const { return m_idealWidth != wxDefaultCoord; }
protected: protected:
void Init(); void Init();
@ -479,25 +476,14 @@ protected:
void _DoWrite( const wxChar* msg ); void _DoWrite( const wxChar* msg );
public: public:
pxWindowTextWriter( wxDC& dc ) pxWindowTextWriter( wxDC& dc );
: m_dc( dc ) virtual ~pxWindowTextWriter() throw() { }
{
m_curpos = wxPoint();
m_align = wxALIGN_CENTER;
m_leading = 2;
OnFontChanged();
}
virtual ~pxWindowTextWriter() throw()
{
}
virtual void OnFontChanged(); virtual void OnFontChanged();
pxWindowTextWriter& WriteLn(); pxWindowTextWriter& WriteLn();
pxWindowTextWriter& WriteLn( const wxChar* fmt, ... ); pxWindowTextWriter& FormatLn( const wxChar* fmt, ... );
pxWindowTextWriter& WriteLn( const wxChar* fmt );
pxWindowTextWriter& SetFont( const wxFont& font ); pxWindowTextWriter& SetFont( const wxFont& font );
pxWindowTextWriter& Align( const wxAlignment& align ); pxWindowTextWriter& Align( const wxAlignment& align );
@ -538,35 +524,6 @@ public:
pxWindowTextWriter& MoveY( int ydelta ); pxWindowTextWriter& MoveY( int ydelta );
}; };
// --------------------------------------------------------------------------------------
// pxStaticTextImproved
// --------------------------------------------------------------------------------------
class pxStaticTextImproved : public wxPanelWithHelpers
{
typedef wxPanelWithHelpers _parent;
protected:
wxAlignment m_align;
wxString m_wrappedLabel;
bool m_autowrap;
int m_wrappedWidth;
int m_padding_horiz;
public:
pxStaticTextImproved( wxWindow* parent=NULL, const wxString& label=wxEmptyString, wxAlignment align=wxALIGN_CENTER );
pxStaticTextImproved( wxWindow* parent, int heightInLines, const wxString& label=wxEmptyString, wxAlignment align=wxALIGN_CENTER );
virtual ~pxStaticTextImproved() throw() {}
virtual void SetLabel(const wxString& label);
pxStaticTextImproved& Unwrapped();
protected:
void Init();
void paintEvent(wxPaintEvent& evt);
void UpdateWrapping( bool textChanged );
};
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// MoreStockCursors // MoreStockCursors
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------

View File

@ -17,6 +17,7 @@
#include "ThreadingDialogs.h" #include "ThreadingDialogs.h"
#include "pxStaticText.h" #include "pxStaticText.h"
using namespace pxSizerFlags;
DEFINE_EVENT_TYPE(pxEvt_ThreadedTaskComplete); DEFINE_EVENT_TYPE(pxEvt_ThreadedTaskComplete);
@ -40,13 +41,8 @@ Threading::WaitForTaskDialog::WaitForTaskDialog( const wxString& title, const wx
Connect( pxEvt_ThreadedTaskComplete, wxCommandEventHandler(WaitForTaskDialog::OnTaskComplete) ); Connect( pxEvt_ThreadedTaskComplete, wxCommandEventHandler(WaitForTaskDialog::OnTaskComplete) );
wxBoxSizer& paddedMsg( *new wxBoxSizer( wxHORIZONTAL ) );
paddedMsg += 24;
paddedMsg += Heading(m_heading);
paddedMsg += 24;
*this += 12; *this += 12;
*this += paddedMsg; *this += Heading(m_heading) | StdExpand();
*this += 12; *this += 12;
// TODO : Implement a cancel button. Not quite sure the best way to do // TODO : Implement a cancel button. Not quite sure the best way to do

View File

@ -37,16 +37,15 @@ void pxCheckBox::Init(const wxString& label, const wxString& subtext)
static const int Indentation = 23; static const int Indentation = 23;
if( !subtext.IsEmpty() ) if( !subtext.IsEmpty() )
{ {
m_subtext = new pxStaticText( this, subtext ); m_subtext = new pxStaticText( this, subtext, wxALIGN_LEFT );
if( HasIdealWidth() )
m_subtext->SetWrapWidth( m_idealWidth - Indentation );
wxBoxSizer& spaced( *new wxBoxSizer( wxHORIZONTAL ) ); wxFlexGridSizer& spaced( *new wxFlexGridSizer(3) );
spaced.AddGrowableCol( 1 );
spaced += Indentation; spaced += Indentation;
spaced += m_subtext | pxBorder( wxBOTTOM, 9 ); spaced += m_subtext | pxBorder( wxBOTTOM, 9 ).Expand();
spaced += pxSizerFlags::StdPadding; spaced += pxSizerFlags::StdPadding;
*this += &spaced; *this += &spaced | pxExpand;
} }
Connect( m_checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(pxCheckBox::OnCheckpartCommand) ); Connect( m_checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(pxCheckBox::OnCheckpartCommand) );

View File

@ -15,7 +15,7 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "pxRadioPanel.h" #include "pxRadioPanel.h"
#include "pxStaticText.h"
// =========================================================================================== // ===========================================================================================
// pxRadioPanel Implementations // pxRadioPanel Implementations
@ -80,9 +80,7 @@ void pxRadioPanel::Realize()
{ {
m_objects[i].SubTextObj = NULL; m_objects[i].SubTextObj = NULL;
if( m_buttonStrings[i].SubText.IsEmpty() ) continue; if( m_buttonStrings[i].SubText.IsEmpty() ) continue;
m_objects[i].SubTextObj = new wxStaticText( this, wxID_ANY, m_buttonStrings[i].SubText ); m_objects[i].SubTextObj = new pxStaticText( this, m_buttonStrings[i].SubText );
if( (m_idealWidth > 0) && pxAssertMsg( m_idealWidth > 40, "Unusably short text wrapping specified!" ) )
m_objects[i].SubTextObj->Wrap( m_idealWidth - m_Indentation );
} }
pxAssert( GetSizer() != NULL ); pxAssert( GetSizer() != NULL );
@ -91,9 +89,9 @@ void pxRadioPanel::Realize()
{ {
*this += m_objects[i].LabelObj | pxSizerFlags::StdExpand(); *this += m_objects[i].LabelObj | pxSizerFlags::StdExpand();
if( wxStaticText* subobj = m_objects[i].SubTextObj ) if( pxStaticText* subobj = m_objects[i].SubTextObj )
{ {
*this += subobj | pxBorder( wxLEFT, m_Indentation ); *this += subobj | pxBorder( wxLEFT, m_Indentation ).Expand();
*this += 9 + m_padding.GetHeight(); *this += 9 + m_padding.GetHeight();
} }
if( !m_buttonStrings[i].ToolTip.IsEmpty() ) if( !m_buttonStrings[i].ToolTip.IsEmpty() )
@ -109,7 +107,7 @@ void pxRadioPanel::_setToolTipImmediate( int idx, const wxString &tip )
if( wxRadioButton* woot = m_objects[idx].LabelObj ) if( wxRadioButton* woot = m_objects[idx].LabelObj )
woot->SetToolTip( wrapped ); woot->SetToolTip( wrapped );
if( wxStaticText* woot = m_objects[idx].SubTextObj ) if( pxStaticText* woot = m_objects[idx].SubTextObj )
woot->SetToolTip( wrapped ); woot->SetToolTip( wrapped );
} }
@ -222,13 +220,13 @@ bool pxRadioPanel::IsSelected( int idx ) const
return m_objects[idx].LabelObj->GetValue(); return m_objects[idx].LabelObj->GetValue();
} }
wxStaticText* pxRadioPanel::GetSubText( int idx ) pxStaticText* pxRadioPanel::GetSubText( int idx )
{ {
if( !VerifyRealizedState() ) return NULL; if( !VerifyRealizedState() ) return NULL;
return m_objects[idx].SubTextObj; return m_objects[idx].SubTextObj;
} }
const wxStaticText* pxRadioPanel::GetSubText( int idx ) const const pxStaticText* pxRadioPanel::GetSubText( int idx ) const
{ {
if( !VerifyRealizedState() ) return NULL; if( !VerifyRealizedState() ) return NULL;
return m_objects[idx].SubTextObj; return m_objects[idx].SubTextObj;

View File

@ -15,124 +15,328 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "pxStaticText.h" #include "pxStaticText.h"
#include <wx/wizard.h>
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// pxStaticText Implementations // pxStaticText (implementations)
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
pxStaticText::pxStaticText( wxWindow* parent )
pxStaticText::pxStaticText( wxWindow* parent, const wxString& label, int style ) : _parent( parent )
: wxStaticText( parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, style )
, m_message( label )
{ {
m_alignflags = style & wxALIGN_MASK; m_heightInLines = 1;
m_wrapwidth = wxDefaultCoord;
m_centerPadding = 0.08;
} }
pxStaticText::pxStaticText( wxWindow* parent, int style ) pxStaticText::pxStaticText( wxWindow* parent, const wxString& label, wxAlignment align )
: wxStaticText( parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, style ) : _parent( parent )
{ {
m_alignflags = style & wxALIGN_MASK; m_heightInLines = 1;
m_wrapwidth = wxDefaultCoord; m_align = align;
m_centerPadding = 0.08;
SetPaddingDefaults();
Init( label );
} }
pxStaticText& pxStaticText::SetWrapWidth( int newwidth ) void pxStaticText::Init( const wxString& label )
{ {
m_wrapwidth = newwidth; m_autowrap = true;
SetLabel( m_message ); m_wrappedWidth = -1;
//SetHeight( 1 );
SetLabel( label );
Connect( wxEVT_PAINT, wxPaintEventHandler(pxStaticText::paintEvent) );
}
void pxStaticText::SetPaddingDefaults()
{
m_paddingPix_horiz = 7;
m_paddingPix_vert = 1;
m_paddingPct_horiz = 0.0f;
m_paddingPct_vert = 0.0f;
}
pxStaticText& pxStaticText::SetHeight( int lines )
{
if( !pxAssert(lines > 0) ) lines = 2;
m_heightInLines = lines;
int width, height;
GetTextExtent( _("MyjS 23"), &width, &height );
const int newHeight = ((height+1)*m_heightInLines) + (m_paddingPix_vert*2);
SetMinSize( wxSize(GetMinWidth(), newHeight) );
return *this; return *this;
} }
void pxStaticText::SetLabel( const wxString& label ) pxStaticText& pxStaticText::Bold()
{ {
m_message = label; wxFont bold( GetFont() );
_setLabel(); bold.SetWeight(wxBOLD);
} SetFont( bold );
void pxStaticText::_setLabel()
{
_parent::SetLabel( pxTextWrapper().Wrap( *this, m_message, GetIdealWidth() ).GetResult() );
}
pxStaticText& pxStaticText::SetToolTip( const wxString& tip )
{
pxSetToolTip( this, tip );
return *this; return *this;
} }
void pxStaticText::AddTo( wxSizer& sizer, wxSizerFlags flags ) pxStaticText& pxStaticText::PaddingPixH( int pixels )
{ {
sizer.Add( this, flags.Align( m_alignflags | (flags.GetFlags() & wxALIGN_MASK) ) ); m_paddingPix_horiz = pixels;
_setLabel(); UpdateWrapping( false );
Refresh();
return *this;
} }
void pxStaticText::InsertAt( wxSizer& sizer, int position, wxSizerFlags flags ) pxStaticText& pxStaticText::PaddingPixV( int pixels )
{ {
sizer.Insert( position, this, flags.Align( m_alignflags | (flags.GetFlags() & wxALIGN_MASK) ) ); m_paddingPix_vert = pixels;
_setLabel(); Refresh();
return *this;
} }
int pxStaticText::GetIdealWidth() const pxStaticText& pxStaticText::PaddingPctH( float pct )
{ {
if( m_wrapwidth != wxDefaultCoord ) return m_wrapwidth; pxAssume( pct < 0.5 );
m_paddingPct_horiz = pct;
UpdateWrapping( false );
Refresh();
return *this;
}
pxStaticText& pxStaticText::PaddingPctV( float pct )
{
pxAssume( pct < 0.5 );
m_paddingPct_vert = pct;
Refresh();
return *this;
}
pxStaticText& pxStaticText::Unwrapped()
{
m_autowrap = false;
UpdateWrapping( false );
return *this;
}
int pxStaticText::calcPaddingWidth( int newWidth ) const
{
return (int)(newWidth*m_paddingPct_horiz*2) + (m_paddingPix_horiz*2);
}
int pxStaticText::calcPaddingHeight( int newHeight ) const
{
return (int)(newHeight*m_paddingPct_vert*2) + (m_paddingPix_vert*2);
}
wxSize pxStaticText::GetBestWrappedSize( const wxClientDC& dc ) const
{
pxAssume( m_autowrap );
// Find an ideal(-ish) width, based on a search of all parent controls and their
// valid Minimum sizes.
//pxAssertDev( GetContainingSizer() != NULL, "The Static Text must first belong to a Sizer!!" );
int idealWidth = wxDefaultCoord; int idealWidth = wxDefaultCoord;
int parentalAdjust = 0;
// Find the first parent with a fixed width: const wxWindow* millrun = this;
wxWindow* millrun = this->GetParent();
while( (idealWidth == wxDefaultCoord) && millrun != NULL ) while( millrun )
{ {
if( wxPanelWithHelpers* panel = wxDynamicCast( millrun, wxPanelWithHelpers ) ) // IMPORTANT : wxWizard changes its min size and then expects everything else
idealWidth = panel->GetIdealWidth(); // to play nice and NOT resize according to the new min size. (wtf stupid)
// Anyway, this fixes it -- ignore min size specifier on wxWizard!
if( wxIsKindOf( millrun, wxWizard ) ) break;
else if( wxDialogWithHelpers* dialog = wxDynamicCast( millrun, wxDialogWithHelpers ) ) int min = millrun->GetMinWidth() - parentalAdjust;
idealWidth = dialog->GetIdealWidth();
if( min > 0 && ((idealWidth < 0 ) || (min < idealWidth)) )
{
idealWidth = min;
}
parentalAdjust += pxSizerFlags::StdPadding*2;
millrun = millrun->GetParent(); millrun = millrun->GetParent();
} }
if( idealWidth != wxDefaultCoord ) if( idealWidth <= 0 )
{ {
idealWidth -= 6; // FIXME: The minimum size of this control is unknown, so let's just pick a guess based on some
// heuristics of the string content.. maybe? For now I just return 360. It's round. And happy.
if( GetWindowStyle() & wxALIGN_CENTRE )
idealWidth *= (1.0 - m_centerPadding); idealWidth = 360;
} }
return idealWidth; wxString label(GetLabel());
return dc.GetMultiLineTextExtent(pxTextWrapper().Wrap( this, label, idealWidth - calcPaddingWidth(idealWidth) ).GetResult());
} }
wxSize pxStaticText::GetMinSize() const pxStaticText& pxStaticText::WrapAt( int width )
{ {
int ideal = GetIdealWidth(); m_autowrap = false;
wxSize minSize( _parent::GetMinSize() );
if( ideal == wxDefaultCoord ) return minSize; if( (width <= 1) || (width == m_wrappedWidth) ) return *this;
return wxSize( std::min( ideal, minSize.x ), minSize.y );
wxString wrappedLabel;
m_wrappedWidth = width;
if( width > 1 )
{
wxString label( GetLabel() );
wrappedLabel = pxTextWrapper().Wrap( this, label, width ).GetResult();
}
if(m_wrappedLabel != wrappedLabel )
{
m_wrappedLabel = wrappedLabel;
wxSize area = wxClientDC( this ).GetMultiLineTextExtent(m_wrappedLabel);
SetMinSize( wxSize(
area.GetWidth() + calcPaddingWidth(area.GetWidth()),
area.GetHeight() + calcPaddingHeight(area.GetHeight())
) );
}
return *this;
}
bool pxStaticText::_updateWrapping( bool textChanged )
{
if( !m_autowrap )
{
//m_wrappedLabel = wxEmptyString;
//m_wrappedWidth = -1;
return false;
}
wxString wrappedLabel;
int newWidth = GetSize().GetWidth();
newWidth -= (int)(newWidth*m_paddingPct_horiz*2) + (m_paddingPix_horiz*2);
if( !textChanged && (newWidth == m_wrappedWidth) ) return false;
// Note: during various stages of sizer-calc, width can be 1, 0, or -1.
// We ignore wrapping in these cases. (the PaintEvent also checks the wrapping
// and updates it if needed, in case the control's size isn't figured out prior
// to being painted).
m_wrappedWidth = newWidth;
if( m_wrappedWidth > 1 )
{
wxString label( GetLabel() );
wrappedLabel = pxTextWrapper().Wrap( this, label, m_wrappedWidth ).GetResult();
}
if( m_wrappedLabel == wrappedLabel ) return false;
m_wrappedLabel = wrappedLabel;
return true;
}
void pxStaticText::UpdateWrapping( bool textChanged )
{
if( _updateWrapping( textChanged ) ) Refresh();
}
void pxStaticText::SetLabel(const wxString& label)
{
const bool labelChanged( label != GetLabel() );
if( labelChanged )
{
_parent::SetLabel( label );
Refresh();
}
// Always update wrapping, in case window width or something else also changed.
UpdateWrapping( labelChanged );
}
wxFont pxStaticText::GetFontOk() const
{
wxFont font( GetFont() );
if( !font.Ok() ) return wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
return font;
}
void pxStaticText::paintEvent(wxPaintEvent& evt)
{
wxPaintDC dc( this );
const int dcWidth = dc.GetSize().GetWidth();
const int dcHeight = dc.GetSize().GetHeight();
if( dcWidth < 1 ) return;
dc.SetFont( GetFontOk() );
dc.SetTextForeground(GetForegroundColour());
pxWindowTextWriter writer( dc );
writer.Align( m_align );
wxString label;
if( m_autowrap )
{
_updateWrapping( false );
label = m_wrappedLabel;
}
else
{
label = GetLabel();
}
int tWidth, tHeight;
dc.GetMultiLineTextExtent( label, &tWidth, &tHeight );
writer.Align( m_align );
if( m_align & wxALIGN_CENTER_VERTICAL )
writer.SetY( (dcHeight - tHeight) / 2 );
else
writer.SetY( (int)(dcHeight*m_paddingPct_vert) + m_paddingPix_vert );
writer.WriteLn( label ); // without formatting please.
//dc.SetBrush( *wxTRANSPARENT_BRUSH );
//dc.DrawRectangle(wxPoint(), dc.GetSize());
}
// Overloaded form wxPanel and friends.
wxSize pxStaticText::DoGetBestSize() const
{
wxClientDC dc( const_cast<pxStaticText*>(this) );
dc.SetFont( GetFontOk() );
wxSize best;
if( m_autowrap )
{
best = GetBestWrappedSize(dc);
best.x = wxDefaultCoord;
}
else
{
// No autowrapping, so we can force a specific size here!
best = dc.GetMultiLineTextExtent( GetLabel() );
best.x += calcPaddingWidth( best.x );
}
best.y += calcPaddingHeight( best.y );
CacheBestSize(best);
return best;
} }
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// pxStaticHeading Implementations // pxStaticHeading (implementations)
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
pxStaticHeading::pxStaticHeading( wxWindow* parent, const wxString& label, int style ) pxStaticHeading::pxStaticHeading( wxWindow* parent, const wxString& label )
: pxStaticText( parent, label, style ) : _parent( parent )
{ {
m_centerPadding = 0.18; m_align = wxALIGN_CENTER;
SetPaddingDefaults();
Init( label );
} }
void operator+=( wxSizer& target, pxStaticText* src ) void pxStaticHeading::SetPaddingDefaults()
{ {
if( !pxAssert( src != NULL ) ) return; m_paddingPix_horiz = 4;
src->AddTo( target ); m_paddingPix_vert = 1;
m_paddingPct_horiz = 0.08f;
m_paddingPct_vert = 0.0f;
} }
void operator+=( wxSizer& target, pxStaticText& src )
{
src.AddTo( target );
}
void operator+=( wxSizer* target, pxStaticText& src )
{
src.AddTo( target );
}

View File

@ -19,6 +19,16 @@
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// pxWindowTextWriter Implementations // pxWindowTextWriter Implementations
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
pxWindowTextWriter::pxWindowTextWriter( wxDC& dc )
: m_dc( dc )
{
m_curpos = wxPoint();
m_align = wxALIGN_CENTER;
m_leading = 0;
OnFontChanged();
}
void pxWindowTextWriter::OnFontChanged() void pxWindowTextWriter::OnFontChanged()
{ {
} }
@ -116,7 +126,8 @@ pxWindowTextWriter& pxWindowTextWriter::SetFont( const wxFont& font )
pxWindowTextWriter& pxWindowTextWriter::Align( const wxAlignment& align ) pxWindowTextWriter& pxWindowTextWriter::Align( const wxAlignment& align )
{ {
m_align = align; m_align = align;
m_curpos.x = 0;
return *this; return *this;
} }
@ -126,128 +137,18 @@ pxWindowTextWriter& pxWindowTextWriter::WriteLn()
return *this; return *this;
} }
pxWindowTextWriter& pxWindowTextWriter::WriteLn( const wxChar* fmt, ... ) pxWindowTextWriter& pxWindowTextWriter::WriteLn( const wxChar* fmt )
{
_DoWrite( fmt );
return *this;
}
pxWindowTextWriter& pxWindowTextWriter::FormatLn( const wxChar* fmt, ... )
{ {
va_list args; va_list args;
va_start(args,fmt); va_start(args,fmt);
_DoWrite( FastFormatString_Unicode(fmt, args) ); _DoWrite( FastFormatString_Unicode(fmt, args) );
va_end(args); va_end(args);
return *this; return *this;
} }
// --------------------------------------------------------------------------------------
// pxStaticTextImproved (implementations)
// --------------------------------------------------------------------------------------
pxStaticTextImproved::pxStaticTextImproved( wxWindow* parent, const wxString& label, wxAlignment align )
: wxPanelWithHelpers( parent )
{
Init();
m_align = align;
SetLabel( label );
}
pxStaticTextImproved::pxStaticTextImproved( wxWindow* parent, int heightInLines, const wxString& label, wxAlignment align )
: wxPanelWithHelpers( parent )
{
SetMinSize( wxSize( wxDefaultCoord, heightInLines*16 ) );
Init();
m_align = align;
SetLabel( label );
}
void pxStaticTextImproved::Init()
{
m_autowrap = true;
m_wrappedWidth = -1;
m_padding_horiz = 8;
Connect( wxEVT_PAINT, wxPaintEventHandler(pxStaticTextImproved::paintEvent) );
}
pxStaticTextImproved& pxStaticTextImproved::Unwrapped()
{
m_autowrap = false;
UpdateWrapping( false );
return *this;
}
void pxStaticTextImproved::UpdateWrapping( bool textChanged )
{
if( !m_autowrap )
{
m_wrappedLabel = wxEmptyString;
m_wrappedWidth = -1;
return;
}
wxString wrappedLabel;
const int newWidth( GetSize().GetWidth() );
if( !textChanged && (newWidth == m_wrappedWidth) ) return;
// Note: during various stages of sizer-calc, width can be 1, 0, or -1.
// We ignore wrapping in these cases. (the PaintEvent also checks the wrapping
// and updates it if needed, in case the control's size isn't figured out prior
// to being painted).
m_wrappedWidth = newWidth;
if( m_wrappedWidth > 1 )
{
wxString label( GetLabel() );
wrappedLabel = pxTextWrapper().Wrap( this, label, m_wrappedWidth-(m_padding_horiz*2) ).GetResult();
}
if( m_wrappedLabel == wrappedLabel ) return;
m_wrappedLabel = wrappedLabel;
Refresh();
}
void pxStaticTextImproved::SetLabel(const wxString& label)
{
const bool labelChanged( label != GetLabel() );
if( labelChanged )
{
_parent::SetLabel( label );
Refresh();
}
// Always update wrapping, in case window width or something else also changed.
UpdateWrapping( labelChanged );
}
void pxStaticTextImproved::paintEvent(wxPaintEvent& evt)
{
wxPaintDC dc( this );
const int dcWidth( dc.GetSize().GetWidth() );
if( dcWidth < 1 ) return;
dc.SetFont( GetFont() );
pxWindowTextWriter writer( dc );
wxString label;
if( m_autowrap )
{
if( m_wrappedLabel.IsEmpty() || m_wrappedWidth != dcWidth )
{
const wxString original( GetLabel() );
if( original.IsEmpty() ) return;
m_wrappedLabel = pxTextWrapper().Wrap( this, original, dcWidth-(m_padding_horiz*2) ).GetResult();
}
label = m_wrappedLabel;
}
else
{
label = GetLabel();
}
int tWidth, tHeight;
GetTextExtent( label, &tWidth, &tHeight );
writer.Align( m_align );
if( m_align & wxALIGN_CENTER_VERTICAL )
writer.SetY( (dc.GetSize().GetHeight() - tHeight) / 2 );
writer.WriteLn( label );
}

View File

@ -129,7 +129,7 @@ wxDialogWithHelpers::wxDialogWithHelpers(wxWindow* parent, const wxString& title
SetSizer( new wxBoxSizer( orient ) ); SetSizer( new wxBoxSizer( orient ) );
Init(); Init();
m_idealWidth = 500; SetMinWidth( 500 );
*this += StdPadding; *this += StdPadding;
} }
@ -139,7 +139,6 @@ wxDialogWithHelpers::~wxDialogWithHelpers() throw()
void wxDialogWithHelpers::Init() void wxDialogWithHelpers::Init()
{ {
m_idealWidth = wxDefaultCoord;
m_extraButtonSizer = NULL; m_extraButtonSizer = NULL;
if( m_hasContextHelp ) if( m_hasContextHelp )
@ -215,14 +214,19 @@ bool wxDialogWithHelpers::Show( bool show )
return wxDialog::Show( show ); return wxDialog::Show( show );
} }
pxStaticText* wxDialogWithHelpers::Text( const wxString& label ) wxStaticText& wxDialogWithHelpers::Label( const wxString& label )
{ {
return new pxStaticText( this, label ); return *new wxStaticText( this, wxID_ANY, label, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER_VERTICAL );
} }
pxStaticHeading* wxDialogWithHelpers::Heading( const wxString& label ) pxStaticText& wxDialogWithHelpers::Text( const wxString& label )
{ {
return new pxStaticHeading( this, label ); return *new pxStaticText( this, label );
}
pxStaticText& wxDialogWithHelpers::Heading( const wxString& label )
{
return *new pxStaticHeading( this, label );
} }
void wxDialogWithHelpers::OnCloseWindow( wxCloseEvent& evt ) void wxDialogWithHelpers::OnCloseWindow( wxCloseEvent& evt )
@ -280,6 +284,14 @@ void wxDialogWithHelpers::AddOkCancel( wxSizer *sizer, bool hasApply )
AddOkCancel( *sizer, hasApply ); AddOkCancel( *sizer, hasApply );
} }
wxDialogWithHelpers& wxDialogWithHelpers::SetMinWidth( int newWidth )
{
SetMinSize( wxSize( newWidth, GetMinHeight() ) );
if( wxSizer* sizer = GetSizer() )
sizer->SetMinSize( wxSize( newWidth, sizer->GetMinSize().GetHeight() ) );
return *this;
}
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// wxPanelWithHelpers Implementations // wxPanelWithHelpers Implementations
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
@ -288,42 +300,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxPanelWithHelpers, wxPanel)
void wxPanelWithHelpers::Init() void wxPanelWithHelpers::Init()
{ {
m_idealWidth = wxDefaultCoord;
// Find the first parent with a fixed width:
wxWindow* millrun = this->GetParent();
while( (m_idealWidth == wxDefaultCoord) && millrun != NULL )
{
if( wxIsKindOf( millrun, wxPanelWithHelpers ) )
m_idealWidth = ((wxPanelWithHelpers*)millrun)->GetIdealWidth();
else if( wxIsKindOf( millrun, wxDialogWithHelpers ) )
m_idealWidth = ((wxDialogWithHelpers*)millrun)->GetIdealWidth();
millrun = millrun->GetParent();
}
if( m_idealWidth == wxDefaultCoord || GetParent() == NULL )
return;
// Check for a StaticBox -- if we belong to one then we'll want to "downgrade" the
// inherited textbox width automatically.
wxSizer* guess = GetSizer();
if( guess == NULL ) guess = GetParent()->GetSizer();
if( guess == NULL ) guess = GetParent()->GetContainingSizer();
if( guess != NULL )
{
if( wxIsKindOf( guess, wxStaticBoxSizer ) )
{
int top=0, others=0;
((wxStaticBoxSizer*)guess)->GetStaticBox()->GetBordersForSizer( &top, &others );
m_idealWidth -= others*2;
}
else
m_idealWidth -= 2; // generic padding compensation (no exact sciences to be found here)
}
} }
// Creates a Static Box container for this panel. the static box sizer becomes the default // Creates a Static Box container for this panel. the static box sizer becomes the default
@ -343,14 +319,19 @@ wxPanelWithHelpers* wxPanelWithHelpers::AddFrame( const wxString& label, wxOrien
return this; return this;
} }
pxStaticText* wxPanelWithHelpers::Text( const wxString& label ) wxStaticText& wxPanelWithHelpers::Label( const wxString& label )
{ {
return new pxStaticText( this, label ); return *new wxStaticText( this, wxID_ANY, label );
} }
pxStaticHeading* wxPanelWithHelpers::Heading( const wxString& label ) pxStaticText& wxPanelWithHelpers::Text( const wxString& label )
{ {
return new pxStaticHeading( this, label ); return *new pxStaticText( this, label );
}
pxStaticText& wxPanelWithHelpers::Heading( const wxString& label )
{
return *new pxStaticHeading( this, label );
} }
wxPanelWithHelpers::wxPanelWithHelpers( wxWindow* parent, wxOrientation orient, const wxString& staticBoxLabel ) wxPanelWithHelpers::wxPanelWithHelpers( wxWindow* parent, wxOrientation orient, const wxString& staticBoxLabel )
@ -378,3 +359,11 @@ wxPanelWithHelpers::wxPanelWithHelpers( wxWindow* parent, const wxPoint& pos, co
{ {
Init(); Init();
} }
wxPanelWithHelpers& wxPanelWithHelpers::SetMinWidth( int newWidth )
{
SetMinSize( wxSize( newWidth, GetMinHeight() ) );
if( wxSizer* sizer = GetSizer() )
sizer->SetMinSize( wxSize( newWidth, sizer->GetMinSize().GetHeight() ) );
return *this;
}

View File

@ -111,7 +111,7 @@ Dialogs::AboutBoxDialog::AboutBoxDialog( wxWindow* parent )
// Main (top-level) layout // Main (top-level) layout
*this += Text(_("PCSX2 - Playstation 2 Emulator")); *this += Text(_("PCSX2 - Playstation 2 Emulator")) | StdCenter();
*this += AuthLogoSizer | StdSpace(); *this += AuthLogoSizer | StdSpace();
*this += new wxHyperlinkCtrl( this, wxID_ANY, *this += new wxHyperlinkCtrl( this, wxID_ANY,

View File

@ -22,7 +22,7 @@ using namespace pxSizerFlags;
Dialogs::AssertionDialog::AssertionDialog( const wxString& text, const wxString& stacktrace ) Dialogs::AssertionDialog::AssertionDialog( const wxString& text, const wxString& stacktrace )
: wxDialogWithHelpers( NULL, _("PCSX2 Assertion Failure"), false, !stacktrace.IsEmpty() ) : wxDialogWithHelpers( NULL, _("PCSX2 Assertion Failure"), false, !stacktrace.IsEmpty() )
{ {
m_idealWidth = 720; SetMinWidth( 720 );
wxFlexGridSizer* flexgrid = new wxFlexGridSizer( 1 ); wxFlexGridSizer* flexgrid = new wxFlexGridSizer( 1 );
flexgrid->AddGrowableCol( 0 ); flexgrid->AddGrowableCol( 0 );
@ -46,19 +46,19 @@ Dialogs::AssertionDialog::AssertionDialog( const wxString& text, const wxString&
traceArea->GetTextExtent( L"blaH yeah", NULL, &fonty ); traceArea->GetTextExtent( L"blaH yeah", NULL, &fonty );
traceArea->WriteText( stacktrace ); traceArea->WriteText( stacktrace );
traceArea->SetMinSize( wxSize( GetIdealWidth()-24, (fonty+1)*18 ) ); traceArea->SetMinSize( wxSize( traceArea->GetMinWidth(), (fonty+1)*18 ) );
traceArea->SetInsertionPoint( 0 ); traceArea->SetInsertionPoint( 0 );
traceArea->ShowPosition( 0 ); traceArea->ShowPosition( 0 );
} }
*this += Heading( text ); *this += Heading( text ) | StdExpand();
if( traceArea != NULL ) *this += traceArea | pxExpand.Border(wxTOP|wxLEFT|wxRIGHT,8); if( traceArea != NULL ) *this += traceArea | pxExpand.Border(wxTOP|wxLEFT|wxRIGHT,8);
*this += Heading( *this += Heading(
L"\nDo you want to stop the program [Yes/No]?" L"\nDo you want to stop the program [Yes/No]?"
L"\nOr press [Ignore] to suppress further assertions." L"\nOr press [Ignore] to suppress further assertions."
); ) | StdExpand();
*this += new ModalButtonPanel( this, MsgButtons().YesNo().Ignore() ) | StdCenter(); *this += new ModalButtonPanel( this, MsgButtons().YesNo().Ignore() ) | StdCenter();

View File

@ -93,9 +93,9 @@ void BaseApplicableDialog::OnSettingsApplied( wxCommandEvent& evt )
Dialogs::BaseConfigurationDialog::BaseConfigurationDialog( wxWindow* parent, const wxString& title, int idealWidth ) Dialogs::BaseConfigurationDialog::BaseConfigurationDialog( wxWindow* parent, const wxString& title, int idealWidth )
: _parent( parent, title, wxVERTICAL ) : _parent( parent, title, wxVERTICAL )
{ {
m_idealWidth = idealWidth; SetMinWidth( idealWidth );
m_listbook = NULL; m_listbook = NULL;
Connect( wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnOk_Click ) ); Connect( wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnOk_Click ) );
Connect( wxID_CANCEL, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnCancel_Click ) ); Connect( wxID_CANCEL, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnCancel_Click ) );
Connect( wxID_APPLY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnApply_Click ) ); Connect( wxID_APPLY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnApply_Click ) );

View File

@ -30,8 +30,6 @@ using namespace pxSizerFlags;
Dialogs::BiosSelectorDialog::BiosSelectorDialog( wxWindow* parent ) Dialogs::BiosSelectorDialog::BiosSelectorDialog( wxWindow* parent )
: BaseApplicableDialog( parent, _("BIOS Selector"), wxVERTICAL ) : BaseApplicableDialog( parent, _("BIOS Selector"), wxVERTICAL )
{ {
m_idealWidth = 500;
m_selpan = new Panels::BiosSelectorPanel( this ); m_selpan = new Panels::BiosSelectorPanel( this );
*this += m_selpan | StdExpand(); *this += m_selpan | StdExpand();

View File

@ -42,7 +42,7 @@ Dialogs::CreateMemoryCardDialog::CreateMemoryCardDialog( wxWindow* parent, uint
, m_mcdpath( mcdpath.IsOk() ? mcdpath : (wxDirName)g_Conf->Mcd[slot].Filename.GetPath() ) , m_mcdpath( mcdpath.IsOk() ? mcdpath : (wxDirName)g_Conf->Mcd[slot].Filename.GetPath() )
, m_mcdfile( mcdfile.IsEmpty() ? g_Conf->Mcd[slot].Filename.GetFullName() : mcdfile ) , m_mcdfile( mcdfile.IsEmpty() ? g_Conf->Mcd[slot].Filename.GetFullName() : mcdfile )
{ {
m_idealWidth = 472; SetMinWidth( 472 );
m_filepicker = NULL; m_filepicker = NULL;
m_slot = slot; m_slot = slot;
@ -69,8 +69,8 @@ Dialogs::CreateMemoryCardDialog::CreateMemoryCardDialog( wxWindow* parent, uint
s_padding += m_filepicker | StdExpand(); s_padding += m_filepicker | StdExpand();
else else
{ {
s_padding += Heading( _( "New card will be saved to:" ) ); s_padding += Heading( _( "New card will be saved to:" ) ) | StdExpand();
s_padding += Heading( (m_mcdpath + m_mcdfile).GetFullPath() ); s_padding += Heading( (m_mcdpath + m_mcdfile).GetFullPath() ).Unwrapped() | StdExpand();
} }
s_padding += m_radio_CardSize | StdExpand(); s_padding += m_radio_CardSize | StdExpand();

View File

@ -42,41 +42,34 @@ bool ApplicableWizardPage::PrepForApply()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
Panels::SettingsDirPickerPanel::SettingsDirPickerPanel( wxWindow* parent ) : Panels::SettingsDirPickerPanel::SettingsDirPickerPanel( wxWindow* parent )
DirPickerPanel( parent, FolderId_Settings, _("Settings"), _("Select a folder for PCSX2 settings") ) : DirPickerPanel( parent, FolderId_Settings, _("Settings"), _("Select a folder for PCSX2 settings") )
{ {
pxSetToolTip( this, pxE( ".Tooltip:Folders:Settings", pxSetToolTip( this, pxE( ".Tooltip:Folders:Settings",
L"This is the folder where PCSX2 saves your settings, including settings generated " L"This is the folder where PCSX2 saves your settings, including settings generated "
L"by most plugins (some older plugins may not respect this value)." L"by most plugins (some older plugins may not respect this value)."
) ); ) );
// Insert this into the top of the staticboxsizer created by the constructor. SetStaticDesc( pxE( ".Panel:Folders:Settings",
GetSizer()->Insert( 0, L"You may optionally specify a location for your PCSX2 settings here. If the location "
new wxStaticText( this, wxID_ANY, L"contains existing PCSX2 settings, you will be given the option to import or overwrite them."
pxE( ".Panel:SettingsDirPicker", ) );
L"You may optionally specify a location for your PCSX2 settings here. If the location \n"
L"contains existing PCSX2 settings, you will be given the option to import or overwrite them."
), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE
), wxSizerFlags().Expand().Border( wxBOTTOM, 6 )
);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
FirstTimeWizard::UsermodePage::UsermodePage( wxWizard* parent ) : FirstTimeWizard::UsermodePage::UsermodePage( wxWizard* parent ) :
ApplicableWizardPage( parent ) ApplicableWizardPage( parent )
{ {
SetMinSize( wxSize(640, GetMinHeight()) );
SetSizer( new wxBoxSizer( wxVERTICAL ) ); SetSizer( new wxBoxSizer( wxVERTICAL ) );
wxPanelWithHelpers& panel( *new wxPanelWithHelpers( this, wxVERTICAL ) ); wxPanelWithHelpers& panel( *new wxPanelWithHelpers( this, wxVERTICAL ) );
panel.SetIdealWidth( 640 );
m_dirpick_settings = new SettingsDirPickerPanel( &panel ); m_dirpick_settings = new SettingsDirPickerPanel( &panel );
m_panel_LangSel = new LanguageSelectionPanel( &panel ); m_panel_LangSel = new LanguageSelectionPanel( &panel );
m_panel_UserSel = new DocsFolderPickerPanel( &panel ); m_panel_UserSel = new DocsFolderPickerPanel( &panel );
panel += new pxStaticTextImproved( this, panel += panel.Heading(_("PCSX2 is starting from a new or unknown folder and needs to be configured.")).Bold() | pxExpand;
_("PCSX2 is starting from a new or unknown folder and needs to be configured.")
) | pxExpand;
panel += m_panel_LangSel | StdCenter(); panel += m_panel_LangSel | StdCenter();
panel += m_panel_UserSel | pxExpand.Border( wxALL, 8 ); panel += m_panel_UserSel | pxExpand.Border( wxALL, 8 );
@ -162,7 +155,7 @@ FirstTimeWizard::FirstTimeWizard( wxWindow* parent )
L"You cannot use a copy obtained from a friend or the Internet.\n" L"You cannot use a copy obtained from a friend or the Internet.\n"
L"You must dump the BIOS from your *own* Playstation 2 console." L"You must dump the BIOS from your *own* Playstation 2 console."
) )
); ) | StdExpand();
// Assign page indexes as client data // Assign page indexes as client data
m_page_usermode .SetClientData( (void*)0 ); m_page_usermode .SetClientData( (void*)0 );
@ -180,9 +173,6 @@ FirstTimeWizard::FirstTimeWizard( wxWindow* parent )
// this doesn't descent from wxDialogWithHelpers, so we need to explicitly // this doesn't descent from wxDialogWithHelpers, so we need to explicitly
// fit and center it. :( // fit and center it. :(
Fit();
CenterOnScreen();
Connect( wxEVT_WIZARD_PAGE_CHANGED, wxWizardEventHandler (FirstTimeWizard::OnPageChanged) ); Connect( wxEVT_WIZARD_PAGE_CHANGED, wxWizardEventHandler (FirstTimeWizard::OnPageChanged) );
Connect( wxEVT_WIZARD_PAGE_CHANGING, wxWizardEventHandler (FirstTimeWizard::OnPageChanging) ); Connect( wxEVT_WIZARD_PAGE_CHANGING, wxWizardEventHandler (FirstTimeWizard::OnPageChanging) );
Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler (FirstTimeWizard::OnDoubleClicked) ); Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler (FirstTimeWizard::OnDoubleClicked) );

View File

@ -23,9 +23,9 @@ using namespace pxSizerFlags;
Dialogs::ImportSettingsDialog::ImportSettingsDialog( wxWindow* parent ) Dialogs::ImportSettingsDialog::ImportSettingsDialog( wxWindow* parent )
: wxDialogWithHelpers( parent, _("Import Existing Settings?"), wxVERTICAL ) : wxDialogWithHelpers( parent, _("Import Existing Settings?"), wxVERTICAL )
{ {
m_idealWidth = 440; SetMinWidth( 440 );
pxStaticText* heading = new pxStaticHeading( this, pxE( ".Popup:ImportExistingSettings", pxStaticText& heading = Text( pxE( ".Popup:ImportExistingSettings",
L"Existing PCSX2 settings have been found in the configured settings folder. " L"Existing PCSX2 settings have been found in the configured settings folder. "
L"Would you like to import these settings or overwrite them with PCSX2 default values?" L"Would you like to import these settings or overwrite them with PCSX2 default values?"
L"\n\n(or press Cancel to select a different settings folder)" ) L"\n\n(or press Cancel to select a different settings folder)" )
@ -45,7 +45,7 @@ Dialogs::ImportSettingsDialog::ImportSettingsDialog( wxWindow* parent )
s_buttons += new wxButton( this, wxID_CANCEL ) | StdButton(); s_buttons += new wxButton( this, wxID_CANCEL ) | StdButton();
*this += 4; *this += 4;
*this += heading; *this += heading | StdExpand();
*this += 12; *this += 12;
*this += &s_buttons | StdCenter(); *this += &s_buttons | StdCenter();

View File

@ -24,8 +24,6 @@ using namespace Panels;
Dialogs::LogOptionsDialog::LogOptionsDialog( wxWindow* parent ) Dialogs::LogOptionsDialog::LogOptionsDialog( wxWindow* parent )
: BaseApplicableDialog( parent, _("Trace Logging"), wxVERTICAL ) : BaseApplicableDialog( parent, _("Trace Logging"), wxVERTICAL )
{ {
m_idealWidth = 480;
*this += new LogOptionsPanel( this ); *this += new LogOptionsPanel( this );
AddOkCancel( *GetSizer(), true ); AddOkCancel( *GetSizer(), true );

View File

@ -36,8 +36,6 @@ wxString GetMsg_McdNtfsCompress()
Panels::McdConfigPanel_Toggles::McdConfigPanel_Toggles(wxWindow *parent) Panels::McdConfigPanel_Toggles::McdConfigPanel_Toggles(wxWindow *parent)
: _parent( parent ) : _parent( parent )
{ {
m_idealWidth -= 48;
m_check_Ejection = new pxCheckBox( this, m_check_Ejection = new pxCheckBox( this,
_("Auto-eject memory cards when loading savestates"), _("Auto-eject memory cards when loading savestates"),
pxE( ".Panel:Mcd:EnableEjection", pxE( ".Panel:Mcd:EnableEjection",
@ -113,7 +111,7 @@ Dialogs::McdConfigDialog::McdConfigDialog( wxWindow* parent )
//AddPage<McdConfigPanel_Toggles> ( wxLt("Settings"), cfgid.MemoryCard ); //AddPage<McdConfigPanel_Toggles> ( wxLt("Settings"), cfgid.MemoryCard );
//AddPage<McdConfigPanel_Standard> ( wxLt("Slots 1/2"), cfgid.MemoryCard ); //AddPage<McdConfigPanel_Standard> ( wxLt("Slots 1/2"), cfgid.MemoryCard );
*this += Heading(_("Drag items over other items in the list to swap or copy memory cards.")); *this += Heading(_("Drag items over other items in the list to swap or copy memory cards.")) | StdExpand();
*this += StdPadding; *this += StdPadding;
*this += m_panel_mcdlist | StdExpand(); *this += m_panel_mcdlist | StdExpand();

View File

@ -27,8 +27,6 @@ using namespace Threading;
Dialogs::StuckThreadDialog::StuckThreadDialog( wxWindow* parent, StuckThreadActionType action, PersistentThread& stuck_thread ) Dialogs::StuckThreadDialog::StuckThreadDialog( wxWindow* parent, StuckThreadActionType action, PersistentThread& stuck_thread )
: wxDialogWithHelpers( parent, _("PCSX2 Thread is not responding"), wxVERTICAL ) : wxDialogWithHelpers( parent, _("PCSX2 Thread is not responding"), wxVERTICAL )
{ {
//m_idealWidth = 720;
stuck_thread.AddListener( this ); stuck_thread.AddListener( this );
*this += Heading( wxsFormat( *this += Heading( wxsFormat(

View File

@ -25,7 +25,7 @@
using namespace Panels; using namespace Panels;
Dialogs::SysConfigDialog::SysConfigDialog(wxWindow* parent) Dialogs::SysConfigDialog::SysConfigDialog(wxWindow* parent)
: BaseConfigurationDialog( parent, _("PS2 Settings - PCSX2"), 600 ) : BaseConfigurationDialog( parent, _("PS2 Settings - PCSX2"), 580 )
{ {
CreateListbook( wxGetApp().GetImgList_Config() ); CreateListbook( wxGetApp().GetImgList_Config() );
const AppImageIds::ConfigIds& cfgid( wxGetApp().GetImgId().Config ); const AppImageIds::ConfigIds& cfgid( wxGetApp().GetImgId().Config );

View File

@ -16,6 +16,7 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "App.h" #include "App.h"
using namespace pxSizerFlags;
wxString SysExecEvent::GetEventName() const wxString SysExecEvent::GetEventName() const
{ {
@ -373,13 +374,14 @@ protected:
WaitingForThreadedTaskDialog::WaitingForThreadedTaskDialog( PersistentThread* thr, wxWindow* parent, const wxString& title, const wxString& content ) WaitingForThreadedTaskDialog::WaitingForThreadedTaskDialog( PersistentThread* thr, wxWindow* parent, const wxString& title, const wxString& content )
: wxDialogWithHelpers( parent, title, wxVERTICAL ) : wxDialogWithHelpers( parent, title, wxVERTICAL )
{ {
SetMinWidth( 500 );
m_thread = thr; m_thread = thr;
m_idealWidth = 500;
*this += Heading( content ); *this += Text( content ) | StdExpand();
*this += 15; *this += 15;
*this += Heading( _("Press Cancel to attempt to cancel the action.") ); *this += Heading( _("Press Cancel to attempt to cancel the action.") ) | pxExpand;
*this += Heading( _("Press Terminate to kill PCSX2 immediately.") ); *this += Heading( _("Press Terminate to kill PCSX2 immediately.") ) | pxExpand;
*this += new wxButton( this, wxID_CANCEL ); *this += new wxButton( this, wxID_CANCEL );
*this += new wxButton( this, wxID_ANY, _("Terminate App") ); *this += new wxButton( this, wxID_ANY, _("Terminate App") );

View File

@ -82,10 +82,10 @@ void Panels::BaseSelectorPanel::OnFolderChanged( wxFileDirPickerEvent& evt )
// ===================================================================================================== // =====================================================================================================
// BiosSelectorPanel // BiosSelectorPanel
// ===================================================================================================== // =====================================================================================================
Panels::BiosSelectorPanel::BiosSelectorPanel( wxWindow* parent, int idealWidth ) Panels::BiosSelectorPanel::BiosSelectorPanel( wxWindow* parent )
: BaseSelectorPanel( parent ) : BaseSelectorPanel( parent )
{ {
if( idealWidth != wxDefaultCoord ) m_idealWidth = idealWidth; SetMinWidth( 480 );
m_ComboBox = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE | wxLB_SORT | wxLB_NEEDED_SB ); m_ComboBox = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE | wxLB_SORT | wxLB_NEEDED_SB );
m_FolderPicker = new DirPickerPanel( this, FolderId_Bios, m_FolderPicker = new DirPickerPanel( this, FolderId_Bios,
@ -100,7 +100,7 @@ Panels::BiosSelectorPanel::BiosSelectorPanel( wxWindow* parent, int idealWidth )
wxButton* refreshButton = new wxButton( this, wxID_ANY, _("Refresh list") ); wxButton* refreshButton = new wxButton( this, wxID_ANY, _("Refresh list") );
*this += Text(_("Select a BIOS rom:")); *this += Label(_("Select a BIOS rom:"));
*this += m_ComboBox | StdExpand(); *this += m_ComboBox | StdExpand();
*this += refreshButton | pxBorder(wxLEFT, StdPadding); *this += refreshButton | pxBorder(wxLEFT, StdPadding);
*this += 8; *this += 8;

View File

@ -401,7 +401,7 @@ namespace Panels
DirPickerPanel* m_FolderPicker; DirPickerPanel* m_FolderPicker;
public: public:
BiosSelectorPanel( wxWindow* parent, int idealWidth=wxDefaultCoord ); BiosSelectorPanel( wxWindow* parent );
virtual ~BiosSelectorPanel() throw(); virtual ~BiosSelectorPanel() throw();
protected: protected:
@ -505,7 +505,7 @@ namespace Panels
public: public:
virtual ~PluginSelectorPanel() throw(); virtual ~PluginSelectorPanel() throw();
PluginSelectorPanel( wxWindow* parent, int idealWidth=wxDefaultCoord ); PluginSelectorPanel( wxWindow* parent );
void CancelRefresh(); // used from destructor, stays non-virtual void CancelRefresh(); // used from destructor, stays non-virtual
void Apply(); void Apply();

View File

@ -56,7 +56,7 @@ void Panels::DirPickerPanel::Explore_Click( wxCommandEvent &evt )
if( !wxDirExists(path) ) if( !wxDirExists(path) )
{ {
wxDialogWithHelpers createPathDlg( NULL, _("Path does not exist"), wxVERTICAL ); wxDialogWithHelpers createPathDlg( NULL, _("Path does not exist"), wxVERTICAL );
createPathDlg.SetIdealWidth( 600 ); createPathDlg.SetMinWidth( 600 );
createPathDlg += createPathDlg.Text( path ) | StdCenter(); createPathDlg += createPathDlg.Text( path ) | StdCenter();
@ -167,7 +167,7 @@ void Panels::DirPickerPanel::Init( FoldersEnum_t folderid, const wxString& dialo
Panels::DirPickerPanel& Panels::DirPickerPanel::SetStaticDesc( const wxString& msg ) Panels::DirPickerPanel& Panels::DirPickerPanel::SetStaticDesc( const wxString& msg )
{ {
(new pxStaticText( this, msg ))->InsertAt( *GetSizer(), 0 ); GetSizer()->Insert( 0, &Heading( msg ), pxExpand );
return *this; return *this;
} }

View File

@ -79,16 +79,16 @@ Panels::GSWindowSettingsPanel::GSWindowSettingsPanel( wxWindow* parent )
wxBoxSizer& s_customsize( *new wxBoxSizer( wxHORIZONTAL ) ); wxBoxSizer& s_customsize( *new wxBoxSizer( wxHORIZONTAL ) );
s_customsize += m_text_WindowWidth; s_customsize += m_text_WindowWidth;
s_customsize += Text( L"x" ); s_customsize += Label( L"x" ) | StdExpand();
s_customsize += m_text_WindowHeight; s_customsize += m_text_WindowHeight;
wxFlexGridSizer& s_AspectRatio( *new wxFlexGridSizer( 2, StdPadding, StdPadding ) ); wxFlexGridSizer& s_AspectRatio( *new wxFlexGridSizer( 2, StdPadding, StdPadding ) );
//s_AspectRatio.AddGrowableCol( 0 ); //s_AspectRatio.AddGrowableCol( 0 );
s_AspectRatio.AddGrowableCol( 1 ); s_AspectRatio.AddGrowableCol( 1 );
s_AspectRatio += Text(_("Aspect Ratio:")) | pxMiddle; s_AspectRatio += Label(_("Aspect Ratio:")) | pxMiddle;
s_AspectRatio += m_combo_AspectRatio | pxExpand; s_AspectRatio += m_combo_AspectRatio | pxExpand;
s_AspectRatio += Text(_("Custom Window Size:")) | pxMiddle; s_AspectRatio += Label(_("Custom Window Size:")) | pxMiddle;
s_AspectRatio += s_customsize | pxAlignRight; s_AspectRatio += s_customsize | pxAlignRight;
*this += s_AspectRatio | StdExpand(); *this += s_AspectRatio | StdExpand();

View File

@ -18,12 +18,9 @@
using namespace pxSizerFlags; using namespace pxSizerFlags;
Panels::GameFixesPanel::GameFixesPanel( wxWindow* parent ) : Panels::GameFixesPanel::GameFixesPanel( wxWindow* parent )
BaseApplicableConfigPanel( parent ) : BaseApplicableConfigPanel( parent )
{ {
*this += new pxStaticHeading( this, _("Some games need special settings.\nEnable them here."));
wxStaticBoxSizer& groupSizer = *new wxStaticBoxSizer( wxVERTICAL, this, _("PCSX2 Gamefixes") ); wxStaticBoxSizer& groupSizer = *new wxStaticBoxSizer( wxVERTICAL, this, _("PCSX2 Gamefixes") );
// NOTE: Order of checkboxes must match the order of the bits in the GamefixOptions structure! // NOTE: Order of checkboxes must match the order of the bits in the GamefixOptions structure!
@ -90,13 +87,16 @@ Panels::GameFixesPanel::GameFixesPanel( wxWindow* parent ) :
m_check_Enable->SetToolTip(_("The safest way to make sure that all game fixes are completely disabled.")); m_check_Enable->SetToolTip(_("The safest way to make sure that all game fixes are completely disabled."));
m_check_Enable->SetValue( g_Conf->EnableGameFixes ); m_check_Enable->SetValue( g_Conf->EnableGameFixes );
*this += Heading(_("Some games need special settings.\nEnable them here.")).Bold() | StdExpand();
*this += groupSizer | pxCenter; *this += groupSizer | pxCenter;
*this += m_check_Enable | StdExpand(); *this += m_check_Enable | StdExpand();
*this += Heading( pxE( ".Panel:Gamefixes:Compat Warning", *this += Heading(
L"Enabling game fixes can cause compatibility or performance issues in other games. You " pxE( ".Panel:Gamefixes:Compat Warning",
L"will need to turn off fixes manually when changing games." L"Enabling game fixes can cause compatibility or performance issues in other games. You "
)); L"will need to turn off fixes manually when changing games."
)
) | StdExpand();
Connect( m_check_Enable->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( GameFixesPanel::OnEnable_Toggled ) ); Connect( m_check_Enable->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( GameFixesPanel::OnEnable_Toggled ) );

View File

@ -124,6 +124,8 @@ Panels::iopLogOptionsPanel::iopLogOptionsPanel( LogOptionsPanel* parent )
void Panels::eeLogOptionsPanel::OnSettingsChanged() void Panels::eeLogOptionsPanel::OnSettingsChanged()
{ {
SetMinWidth( 230 );
const TraceLogFilters& conf( g_Conf->EmuOptions.Trace ); const TraceLogFilters& conf( g_Conf->EmuOptions.Trace );
SetValue( conf.EE.m_EnableAll ); SetValue( conf.EE.m_EnableAll );
@ -158,6 +160,8 @@ void Panels::eeLogOptionsPanel::OnSettingsChanged()
void Panels::iopLogOptionsPanel::OnSettingsChanged() void Panels::iopLogOptionsPanel::OnSettingsChanged()
{ {
SetMinWidth( 230 );
const TraceLogFilters& conf( g_Conf->EmuOptions.Trace ); const TraceLogFilters& conf( g_Conf->EmuOptions.Trace );
SetValue( conf.IOP.m_EnableAll ); SetValue( conf.IOP.m_EnableAll );

View File

@ -160,7 +160,7 @@ void Panels::BaseMcdListPanel::RefreshMcds() const
void Panels::BaseMcdListPanel::CreateLayout() void Panels::BaseMcdListPanel::CreateLayout()
{ {
if( m_listview ) m_listview->SetMinSize( wxSize( m_idealWidth, 140 ) ); //if( m_listview ) m_listview->SetMinSize( wxSize( 480, 140 ) );
wxBoxSizer& s_buttons(*new wxBoxSizer( wxHORIZONTAL )); wxBoxSizer& s_buttons(*new wxBoxSizer( wxHORIZONTAL ));
s_leftside_buttons = new wxBoxSizer( wxHORIZONTAL ); s_leftside_buttons = new wxBoxSizer( wxHORIZONTAL );

View File

@ -32,8 +32,6 @@ using namespace pxSizerFlags;
Panels::DocsFolderPickerPanel::DocsFolderPickerPanel( wxWindow* parent, bool isFirstTime ) Panels::DocsFolderPickerPanel::DocsFolderPickerPanel( wxWindow* parent, bool isFirstTime )
: BaseApplicableConfigPanel( parent, wxVERTICAL, _("Usermode Selection") ) : BaseApplicableConfigPanel( parent, wxVERTICAL, _("Usermode Selection") )
{ {
SetMinSize( wxSize( GetIdealWidth() - 16, wxDefaultCoord ) );
const wxString usermodeExplained( pxE( ".Panel:Usermode:Explained", const wxString usermodeExplained( pxE( ".Panel:Usermode:Explained",
L"Please select your preferred default location for PCSX2 user-level documents below " L"Please select your preferred default location for PCSX2 user-level documents below "
L"(includes memory cards, screenshots, settings, and savestates). " L"(includes memory cards, screenshots, settings, and savestates). "
@ -66,7 +64,7 @@ Panels::DocsFolderPickerPanel::DocsFolderPickerPanel( wxWindow* parent, bool isF
m_dirpicker_custom = new DirPickerPanel( this, FolderId_Documents, _("Select a document root for PCSX2") ); m_dirpicker_custom = new DirPickerPanel( this, FolderId_Documents, _("Select a document root for PCSX2") );
*this += new pxStaticTextImproved( this, 3, isFirstTime ? usermodeExplained : usermodeWarning ) | pxExpand; *this += Heading( isFirstTime ? usermodeExplained : usermodeWarning ) | pxExpand;
*this += m_radio_UserMode | StdExpand(); *this += m_radio_UserMode | StdExpand();
*this += m_dirpicker_custom | pxExpand.Border( wxLEFT, StdPadding + m_radio_UserMode->GetIndentation() ); *this += m_dirpicker_custom | pxExpand.Border( wxLEFT, StdPadding + m_radio_UserMode->GetIndentation() );
*this += 4; *this += 4;
@ -125,7 +123,7 @@ Panels::LanguageSelectionPanel::LanguageSelectionPanel( wxWindow* parent )
m_picker = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, m_picker = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize,
size, compiled.GetPtr(), wxCB_READONLY | wxCB_SORT ); size, compiled.GetPtr(), wxCB_READONLY | wxCB_SORT );
*this += Text(_("Select a language: (unimplemented)")) | pxMiddle; *this += Label(_("Select a language: (unimplemented)")) | pxMiddle;
*this += 5; *this += 5;
*this += m_picker | pxSizerFlags::StdSpace(); *this += m_picker | pxSizerFlags::StdSpace();

View File

@ -308,7 +308,7 @@ Panels::PluginSelectorPanel::StatusPanel::StatusPanel( wxWindow* parent )
m_gauge.SetToolTip( _("I'm givin' her all she's got, Captain!") ); m_gauge.SetToolTip( _("I'm givin' her all she's got, Captain!") );
*this += new pxStaticHeading( this, _( "Enumerating available plugins..." ) ); *this += Heading(_( "Enumerating available plugins..." )).Bold() | StdExpand();
*this += m_gauge | pxExpand.Border( wxLEFT | wxRIGHT, 32 ); *this += m_gauge | pxExpand.Border( wxLEFT | wxRIGHT, 32 );
*this += m_label | StdExpand(); *this += m_label | StdExpand();
@ -352,15 +352,14 @@ Panels::PluginSelectorPanel::ComboBoxPanel::ComboBoxPanel( PluginSelectorPanel*
const PluginInfo* pi = tbl_PluginInfo; do const PluginInfo* pi = tbl_PluginInfo; do
{ {
const PluginsEnum_t pid = pi->id; const PluginsEnum_t pid = pi->id;
wxStaticText* text = new wxStaticText( this, wxID_ANY, pi->GetShortname() );
m_combobox[pid] = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY ); m_combobox[pid] = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY );
m_configbutton[pid] = new wxButton( this, ButtonId_Configure, L"Configure..." ); m_configbutton[pid] = new wxButton( this, ButtonId_Configure, L"Configure..." );
m_configbutton[pid]->SetClientData( (void*)(int)pid ); m_configbutton[pid]->SetClientData( (void*)(int)pid );
s_plugin += text | pxBorder( wxTOP | wxLEFT, 2 ); s_plugin += Label( pi->GetShortname() ) | pxBorder( wxTOP | wxLEFT, 2 );
s_plugin += m_combobox[pid] | pxExpand; s_plugin += m_combobox[pid] | pxExpand;
s_plugin += m_configbutton[pid]; s_plugin += m_configbutton[pid];
} while( ++pi, pi->shortname != NULL ); } while( ++pi, pi->shortname != NULL );
@ -403,11 +402,9 @@ void Panels::PluginSelectorPanel::DispatchEvent( const PluginEventType& evt )
} }
Panels::PluginSelectorPanel::PluginSelectorPanel( wxWindow* parent, int idealWidth ) Panels::PluginSelectorPanel::PluginSelectorPanel( wxWindow* parent )
: BaseSelectorPanel( parent ) : BaseSelectorPanel( parent )
{ {
if( idealWidth != wxDefaultCoord ) m_idealWidth = idealWidth;
m_StatusPanel = new StatusPanel( this ); m_StatusPanel = new StatusPanel( this );
m_ComponentBoxes = new ComboBoxPanel( this ); m_ComponentBoxes = new ComboBoxPanel( this );

View File

@ -115,8 +115,6 @@ Panels::SpeedHacksPanel::SpeedHacksPanel( wxWindow* parent )
wxPanelWithHelpers* left = new wxPanelWithHelpers( this, wxVERTICAL ); wxPanelWithHelpers* left = new wxPanelWithHelpers( this, wxVERTICAL );
wxPanelWithHelpers* right = new wxPanelWithHelpers( this, wxVERTICAL ); wxPanelWithHelpers* right = new wxPanelWithHelpers( this, wxVERTICAL );
left->SetIdealWidth( (left->GetIdealWidth() - 16) / 2 );
right->SetIdealWidth( (right->GetIdealWidth() - 16) / 2 );
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// EE Cyclerate Hack Section: // EE Cyclerate Hack Section:
@ -130,7 +128,7 @@ Panels::SpeedHacksPanel::SpeedHacksPanel( wxWindow* parent )
m_slider_eecycle = new wxSlider( eeSliderPanel, wxID_ANY, 1, 1, 3, m_slider_eecycle = new wxSlider( eeSliderPanel, wxID_ANY, 1, 1, 3,
wxDefaultPosition, wxDefaultSize, wxHORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS ); wxDefaultPosition, wxDefaultSize, wxHORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS );
m_msg_eecycle = new pxStaticHeading( eeSliderPanel ) ;//, GetEEcycleSliderMsg( 1 ) ); m_msg_eecycle = new pxStaticHeading( eeSliderPanel );
m_msg_eecycle->SetForegroundColour( wxColour( L"Red" ) ); m_msg_eecycle->SetForegroundColour( wxColour( L"Red" ) );
m_msg_eecycle->SetMinSize( wxSize( wxDefaultCoord, pxGetTextHeight(m_msg_eecycle, 3) ) ); m_msg_eecycle->SetMinSize( wxSize( wxDefaultCoord, pxGetTextHeight(m_msg_eecycle, 3) ) );
@ -151,7 +149,7 @@ Panels::SpeedHacksPanel::SpeedHacksPanel( wxWindow* parent )
m_slider_vustealer = new wxSlider( vuSliderPanel, wxID_ANY, 0, 0, 3, wxDefaultPosition, wxDefaultSize, m_slider_vustealer = new wxSlider( vuSliderPanel, wxID_ANY, 0, 0, 3, wxDefaultPosition, wxDefaultSize,
wxHORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS ); wxHORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS );
m_msg_vustealer = new pxStaticHeading( vuSliderPanel ); //, GetVUcycleSliderMsg( 0 ) ); m_msg_vustealer = new pxStaticHeading( vuSliderPanel );
m_msg_vustealer->SetForegroundColour( wxColour( L"Red" ) ); m_msg_vustealer->SetForegroundColour( wxColour( L"Red" ) );
m_msg_vustealer->SetMinSize( wxSize( wxDefaultCoord, pxGetTextHeight(m_msg_vustealer, 3) ) ); m_msg_vustealer->SetMinSize( wxSize( wxDefaultCoord, pxGetTextHeight(m_msg_vustealer, 3) ) );
@ -219,10 +217,13 @@ Panels::SpeedHacksPanel::SpeedHacksPanel( wxWindow* parent )
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// Layout and Size ---> (!!) // Layout and Size ---> (!!)
wxFlexGridSizer& DefEnableSizer( *new wxFlexGridSizer( 2, 0, 12 ) ); wxFlexGridSizer& DefEnableSizer( *new wxFlexGridSizer( 3, 0, 12 ) );
DefEnableSizer.AddGrowableCol( 1, 1 ); DefEnableSizer.AddGrowableCol( 1, 1 );
DefEnableSizer.AddGrowableCol( 2, 10 );
//DefEnableSizer.AddGrowableCol( 1, 1 );
DefEnableSizer += m_button_Defaults | StdSpace().Align( wxALIGN_LEFT ); DefEnableSizer += m_button_Defaults | StdSpace().Align( wxALIGN_LEFT );
DefEnableSizer += m_check_Enable | StdSpace().Align( wxALIGN_RIGHT ); DefEnableSizer += pxStretchSpacer(1);
DefEnableSizer += m_check_Enable | StdExpand().Align( wxALIGN_RIGHT );
*eeSliderPanel += m_slider_eecycle | sliderFlags; *eeSliderPanel += m_slider_eecycle | sliderFlags;
*eeSliderPanel += m_msg_eecycle | sliderFlags; *eeSliderPanel += m_msg_eecycle | sliderFlags;
@ -244,12 +245,12 @@ Panels::SpeedHacksPanel::SpeedHacksPanel( wxWindow* parent )
*right += vuHacksPanel | StdExpand(); *right += vuHacksPanel | StdExpand();
s_table = new wxFlexGridSizer( 2 ); s_table = new wxFlexGridSizer( 2 );
s_table->AddGrowableCol( 0 ); s_table->AddGrowableCol( 0, 1 );
s_table->AddGrowableCol( 1 ); s_table->AddGrowableCol( 1, 1 );
*s_table+= left | pxExpand; *s_table+= left | pxExpand;
*s_table+= right | pxExpand; *s_table+= right | pxExpand;
*this += heading; *this += heading->Bold() | pxExpand;
*this += s_table | pxExpand; *this += s_table | pxExpand;
*this += DefEnableSizer | pxExpand; *this += DefEnableSizer | pxExpand;

View File

@ -29,6 +29,8 @@ using namespace pxSizerFlags;
Panels::FramelimiterPanel::FramelimiterPanel( wxWindow* parent ) Panels::FramelimiterPanel::FramelimiterPanel( wxWindow* parent )
: BaseApplicableConfigPanel( parent ) : BaseApplicableConfigPanel( parent )
{ {
SetMinWidth( 280 );
m_check_LimiterDisable = new pxCheckBox( this, _("Disable Framelimiting"), m_check_LimiterDisable = new pxCheckBox( this, _("Disable Framelimiting"),
_("Useful for running benchmarks. Toggle this option in-game by pressing F4.") ); _("Useful for running benchmarks. Toggle this option in-game by pressing F4.") );
@ -56,22 +58,22 @@ Panels::FramelimiterPanel::FramelimiterPanel( wxWindow* parent )
wxFlexGridSizer& s_spins( *new wxFlexGridSizer( 5 ) ); wxFlexGridSizer& s_spins( *new wxFlexGridSizer( 5 ) );
s_spins.AddGrowableCol( 0 ); s_spins.AddGrowableCol( 0 );
s_spins += Text(_("Base Framerate Adjust:")); s_spins += Label(_("Base Framerate Adjust:")) | StdExpand();
s_spins += 5; s_spins += 5;
s_spins += m_spin_NominalPct | pxBorder(wxTOP, 3); s_spins += m_spin_NominalPct | pxBorder(wxTOP, 3);
s_spins += Text(L"%" ); s_spins += Label(L"%") | StdExpand();
s_spins += 5; s_spins += 5;
s_spins += Text(_("Slow Motion Adjust:")); s_spins += Label(_("Slow Motion Adjust:")) | StdExpand();
s_spins += 5; s_spins += 5;
s_spins += m_spin_SlomoPct | pxBorder(wxTOP, 3); s_spins += m_spin_SlomoPct | pxBorder(wxTOP, 3);
s_spins += Text(L"%" ); s_spins += Label(L"%") | StdExpand();
s_spins += 5; s_spins += 5;
s_spins += Text(_("Turbo Adjust:")); s_spins += Label(_("Turbo Adjust:")) | StdExpand();
s_spins += 5; s_spins += 5;
s_spins += m_spin_TurboPct | pxBorder(wxTOP, 3); s_spins += m_spin_TurboPct | pxBorder(wxTOP, 3);
s_spins += Text(L"%" ); s_spins += Label(L"%" ) | StdExpand();
s_spins += 5; s_spins += 5;
s_spins += 15; s_spins += 15;
@ -83,16 +85,16 @@ Panels::FramelimiterPanel::FramelimiterPanel( wxWindow* parent )
wxFlexGridSizer& s_fps( *new wxFlexGridSizer( 5 ) ); wxFlexGridSizer& s_fps( *new wxFlexGridSizer( 5 ) );
s_fps.AddGrowableCol( 0 ); s_fps.AddGrowableCol( 0 );
s_fps += Text(_("NTSC Framerate:")); s_fps += Label(_("NTSC Framerate:")) | StdExpand();
s_fps += 5; s_fps += 5;
s_fps += m_text_BaseNtsc | wxSF.Right().Border(wxTOP, 3); s_fps += m_text_BaseNtsc | pxBorder(wxTOP, 2).Right();
s_fps += Text(_("FPS")); s_fps += Label(_("FPS")) | StdExpand();
s_fps += 5; s_fps += 5;
s_fps += Text(_("PAL Framerate:")); s_fps += Label(_("PAL Framerate:")) | StdExpand();
s_fps += 5; s_fps += 5;
s_fps += m_text_BasePal | wxSF.Right().Border(wxTOP, 3); s_fps += m_text_BasePal | pxBorder(wxTOP, 2).Right();
s_fps += Text(_("FPS")); s_fps += Label(_("FPS")) | StdExpand();
s_fps += 5; s_fps += 5;
*this += s_spins | pxExpand; *this += s_spins | pxExpand;
@ -101,7 +103,7 @@ Panels::FramelimiterPanel::FramelimiterPanel( wxWindow* parent )
*this += 5; *this += 5;
//*this += Heading( pxE( ".Panel:Framelimiter:Heading", //*this += Heading( pxE( ".Panel:Framelimiter:Heading",
*this += new pxStaticTextImproved( this, pxE( ".Panel:Framelimiter:Heading", *this += new pxStaticText( this, pxE( ".Panel:Framelimiter:Heading",
L"The internal framelimiter regulates the speed of the virtual machine. Adjustment values below are in " L"The internal framelimiter regulates the speed of the virtual machine. Adjustment values below are in "
L"percentages of the default region-based framerate, which can also be configured below." ) L"percentages of the default region-based framerate, which can also be configured below." )
); );
@ -157,6 +159,7 @@ void Panels::FramelimiterPanel::Apply()
Panels::FrameSkipPanel::FrameSkipPanel( wxWindow* parent ) Panels::FrameSkipPanel::FrameSkipPanel( wxWindow* parent )
: BaseApplicableConfigPanel( parent ) : BaseApplicableConfigPanel( parent )
{ {
SetMinWidth( 280 );
/*m_check_EnableSkipOnTurbo = new pxCheckBox( this, _("Use Frameskip for Turbo") ); /*m_check_EnableSkipOnTurbo = new pxCheckBox( this, _("Use Frameskip for Turbo") );
m_check_EnableSkip = new pxCheckBox( this, _("Use Frameskip"), m_check_EnableSkip = new pxCheckBox( this, _("Use Frameskip"),
@ -190,7 +193,6 @@ Panels::FrameSkipPanel::FrameSkipPanel( wxWindow* parent )
}; };
m_radio_SkipMode = new pxRadioPanel( this, FrameskipOptions ); m_radio_SkipMode = new pxRadioPanel( this, FrameskipOptions );
//m_radio_SkipMode->SetPaddingHoriz( m_radio_UserMode->GetPaddingHoriz() + 4 );
m_radio_SkipMode->Realize(); m_radio_SkipMode->Realize();
pxFitToDigits( m_spin_FramesToDraw = new wxSpinCtrl( this ), 6 ); pxFitToDigits( m_spin_FramesToDraw = new wxSpinCtrl( this ), 6 );
@ -210,22 +212,22 @@ Panels::FrameSkipPanel::FrameSkipPanel( wxWindow* parent )
wxFlexGridSizer& s_spins( *new wxFlexGridSizer( 4 ) ); wxFlexGridSizer& s_spins( *new wxFlexGridSizer( 4 ) );
//s_spins.AddGrowableCol( 0 ); //s_spins.AddGrowableCol( 0 );
s_spins += m_spin_FramesToDraw | pxBorder(wxTOP, 3); s_spins += m_spin_FramesToDraw | pxBorder(wxTOP, 2);
s_spins += 10; s_spins += 10;
s_spins += Text(_("Frames to Draw")); s_spins += Label(_("Frames to Draw")) | StdExpand();
s_spins += 10; s_spins += 10;
s_spins += m_spin_FramesToSkip | pxBorder(wxTOP, 3); s_spins += m_spin_FramesToSkip | pxBorder(wxTOP, 2);
s_spins += 10; s_spins += 10;
s_spins += Text(_("Frames to Skip")); s_spins += Label(_("Frames to Skip")) | StdExpand();
s_spins += 10; s_spins += 10;
*this += s_spins | StdExpand(); *this += s_spins | StdExpand();
*this += Heading( pxE( ".Panel:Frameskip:Heading", *this += Text( pxE( ".Panel:Frameskip:Heading",
L"Notice: Due to PS2 hardware design, precise frame skipping is impossible. " L"Notice: Due to PS2 hardware design, precise frame skipping is impossible. "
L"Enabling it will cause severe graphical errors in some games, and so it should be considered a speedhack." ) L"Enabling it will cause severe graphical errors in some games." )
); ) | StdExpand();
AppStatusEvent_OnSettingsApplied(); AppStatusEvent_OnSettingsApplied();
} }
@ -235,7 +237,7 @@ void Panels::FrameSkipPanel::AppStatusEvent_OnSettingsApplied()
const AppConfig::FramerateOptions& appfps( g_Conf->Framerate ); const AppConfig::FramerateOptions& appfps( g_Conf->Framerate );
const Pcsx2Config::GSOptions& gsconf( g_Conf->EmuOptions.GS ); const Pcsx2Config::GSOptions& gsconf( g_Conf->EmuOptions.GS );
//m_check_EnableSkip ->SetValue( !appfps.SkipOnLimit ); //m_check_EnableSkip ->SetValue( !appfps.SkipOnLimit );
//m_check_EnableSkipOnTurbo ->SetValue( !appfps.SkipOnTurbo ); //m_check_EnableSkipOnTurbo ->SetValue( !appfps.SkipOnTurbo );
m_radio_SkipMode ->SetSelection( appfps.SkipOnLimit ? 2 : (appfps.SkipOnTurbo ? 1 : 0) ); m_radio_SkipMode ->SetSelection( appfps.SkipOnLimit ? 2 : (appfps.SkipOnTurbo ? 1 : 0) );
@ -282,8 +284,6 @@ Panels::VideoPanel::VideoPanel( wxWindow* parent ) :
{ {
wxPanelWithHelpers* left = new wxPanelWithHelpers( this, wxVERTICAL ); wxPanelWithHelpers* left = new wxPanelWithHelpers( this, wxVERTICAL );
wxPanelWithHelpers* right = new wxPanelWithHelpers( this, wxVERTICAL ); wxPanelWithHelpers* right = new wxPanelWithHelpers( this, wxVERTICAL );
left->SetIdealWidth( (left->GetIdealWidth()) / 2 );
right->SetIdealWidth( (right->GetIdealWidth()-24) / 2 );
m_check_SynchronousGS = new pxCheckBox( right, _("Use Synchronized MTGS"), m_check_SynchronousGS = new pxCheckBox( right, _("Use Synchronized MTGS"),
_("For troubleshooting potential bugs in the MTGS only, as it is potentially very slow.") _("For troubleshooting potential bugs in the MTGS only, as it is potentially very slow.")
@ -313,8 +313,8 @@ Panels::VideoPanel::VideoPanel( wxWindow* parent ) :
fpan->AddFrame(_("Framelimiter")); fpan->AddFrame(_("Framelimiter"));
wxFlexGridSizer* s_table = new wxFlexGridSizer( 2 ); wxFlexGridSizer* s_table = new wxFlexGridSizer( 2 );
s_table->AddGrowableCol( 0 ); s_table->AddGrowableCol( 0, 1 );
s_table->AddGrowableCol( 1 ); s_table->AddGrowableCol( 1, 1 );
*right += span | pxExpand; *right += span | pxExpand;
*right += 5; *right += 5;

View File

@ -24,17 +24,17 @@ static bool IsEnglish( int id )
return ( id == wxLANGUAGE_ENGLISH || id == wxLANGUAGE_ENGLISH_US ); return ( id == wxLANGUAGE_ENGLISH || id == wxLANGUAGE_ENGLISH_US );
} }
LangPackEnumeration::LangPackEnumeration( wxLanguage langId ) : LangPackEnumeration::LangPackEnumeration( wxLanguage langId )
wxLangId( langId ) : wxLangId( langId )
, englishName( wxLocale::GetLanguageName( wxLangId ) ) , englishName( wxLocale::GetLanguageName( wxLangId ) )
, xlatedName( IsEnglish( wxLangId ) ? wxEmptyString : wxGetTranslation( L"NativeName" ) ) , xlatedName( IsEnglish( wxLangId ) ? wxEmptyString : wxGetTranslation( L"NativeName" ) )
{ {
} }
LangPackEnumeration::LangPackEnumeration() : LangPackEnumeration::LangPackEnumeration()
wxLangId( wxLANGUAGE_DEFAULT ) : wxLangId( wxLANGUAGE_DEFAULT )
, englishName( L" System Default" ) // left-side space forces it to sort to the front of the lists , englishName( L" System Default" ) // left-side space forces it to sort to the front of the lists
, xlatedName() , xlatedName()
{ {
int sysLang( wxLocale::GetSystemLanguage() ); int sysLang( wxLocale::GetSystemLanguage() );
if( sysLang != wxLANGUAGE_UNKNOWN ) if( sysLang != wxLANGUAGE_UNKNOWN )