diff --git a/CHANGELOG.txt b/CHANGELOG.txt index d0f9ec05a3..d780c7d8d8 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -16,10 +16,13 @@ email address. 2009-Jan-29 UPDATE Dick Hollenbeck ================================================================================ +++all + common.c added EnsureTextCtrlWidth() ++eeschema - dialog edit component in schematic: make sure chipname text control is wide - enough to handle unusually long chip names. Did not have time to look at - dialog edit component in library. + * dialog edit component in schematic: make sure chipname text control is wide + enough to handle unusually long chip names. + * Retain and re-use user's desired dialog edit component window size. + Did not have time to look at dialog edit component in library. 2009-Jan-27 UPDATE Vesa Solonen diff --git a/common/common.cpp b/common/common.cpp index ad6c93df15..79cedf866b 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -72,6 +72,42 @@ void SetLocaleTo_Default( void ) } +/********************************************************************/ +bool EnsureTextCtrlWidth( wxTextCtrl* aCtrl, const wxString* aString ) +/********************************************************************/ +{ + wxWindow* window = aCtrl->GetParent(); + if( !window ) + window = aCtrl; + + wxString ctrlText; + + if( !aString ) + { + ctrlText = aCtrl->GetValue(); + aString = &ctrlText; + } + + wxCoord width; + wxCoord height; + + { + wxClientDC dc( window ); + dc.SetFont( aCtrl->GetFont() ); + dc.GetTextExtent( *aString, &width, &height ); + } + + wxSize size = aCtrl->GetSize(); + if( size.GetWidth() < width + 10 ) + { + size.SetWidth( width + 10 ); + aCtrl->SetSizeHints( size ); + return true; + } + return false; +} + + /*********************************************************************************************/ Ki_PageDescr::Ki_PageDescr( const wxSize& size, const wxPoint& offset, const wxString& name ) /*********************************************************************************************/ diff --git a/eeschema/dialog_edit_component_in_schematic.cpp b/eeschema/dialog_edit_component_in_schematic.cpp index 1db515ccc1..0c35512cf1 100644 --- a/eeschema/dialog_edit_component_in_schematic.cpp +++ b/eeschema/dialog_edit_component_in_schematic.cpp @@ -19,21 +19,7 @@ int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::s_SelectedRow; -/** - * Function GetTextSize - * computes the size of a text string in pixels from the wxFont used within a wxTextCtrl. - * @param aString is the text string to measure, must be a single line, no newlines. - * @param aWindow is the wxWindow which is the parent of the wxTextCtrl \a aCtrl. - * @param aWidth is where to put the width of the string in pixels. - * @param aHeight is where to put the heigth of the string in pixels. - */ -static void GetTextSize( const wxString& aString, wxWindow* aWindow, wxTextCtrl* aCtrl, wxCoord* aWidth, wxCoord* aHeight ) -{ - wxClientDC dc( aWindow ); - - dc.SetFont( aCtrl->GetFont() ); - dc.GetTextExtent( aString, aWidth, aHeight ); -} +wxSize DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::s_LastSize = wxDefaultSize; /**********************************************************************/ @@ -57,24 +43,25 @@ void InstallCmpeditFrame( WinEDA_SchematicFrame* parent, wxPoint& pos, dialog->InitBuffers( aComponent ); - // make sure the chipnameTextCtrl is wide enough to hold any unusually long chip names: + wxSize sizeNow = dialog->GetSize(); + + // this relies on wxDefaultSize being -1,-1, be careful here. + if( sizeNow.GetWidth() < DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::s_LastSize.GetWidth() + || sizeNow.GetHeight() < DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::s_LastSize.GetHeight() ) { - wxCoord width; - wxCoord height; - - GetTextSize( dialog->chipnameTextCtrl->GetValue(), dialog, dialog->chipnameTextCtrl, &width, &height ); - - wxSize size = dialog->chipnameTextCtrl->GetSize(); - - if( size.GetWidth() < width + 10 ) - { - size.SetWidth( width + 10 ); - dialog->chipnameTextCtrl->SetSizeHints( size ); - dialog->Layout(); - } + dialog->SetSize( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::s_LastSize ); } + // make sure the chipnameTextCtrl is wide enough to hold any unusually long chip names: + EnsureTextCtrlWidth( dialog->chipnameTextCtrl ); + dialog->ShowModal(); + + // Some of the field values are long and are not always fully visible + // because the window comes up too narrow. + // Remember user's manual window resizing efforts here so it comes up wide enough next time. + DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::s_LastSize = dialog->GetSize(); + dialog->Destroy(); } diff --git a/eeschema/dialog_edit_component_in_schematic.h b/eeschema/dialog_edit_component_in_schematic.h index c49f774668..72a2bb7889 100644 --- a/eeschema/dialog_edit_component_in_schematic.h +++ b/eeschema/dialog_edit_component_in_schematic.h @@ -22,6 +22,9 @@ class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC : public DIALOG_EDIT_COMPONENT_IN_SCHEM static int s_SelectedRow; + /// The size of the dialog window last time it was displayed; + static wxSize s_LastSize; + /// a copy of the edited component's SCH_CMP_FIELDs SCH_CMP_FIELDS m_FieldsBuf; diff --git a/include/common.h b/include/common.h index ed10b764c3..aed89f4587 100644 --- a/include/common.h +++ b/include/common.h @@ -389,6 +389,21 @@ but could make more easier an optional use of locale in kicad */ void SetLocaleTo_Default(void); + +/** + * Function EnsureTextCtrlWidth + * sets the minimum pixel width on a text control in order to make a text string + * be fully visible within it. The current font within the text control is considered. + * The text can come either from the control or be given as an argument. + * If the text control is larger than needed, then nothing is done. + * @param aCtrl the text control to potentially make wider. + * @param aString the text that is used in sizing the control's pixel width. If NULL, then + * the text already within the control is used. + * @return bool - true if the \a aCtrl had its size changed, else false. + */ +bool EnsureTextCtrlWidth( wxTextCtrl* aCtrl, const wxString* aString = NULL ); + + /** * Operator << overload * outputs a point to the argument string in a format resembling