diff --git a/common/base_screen.cpp b/common/base_screen.cpp index 72132644ed..559bfd7bb8 100644 --- a/common/base_screen.cpp +++ b/common/base_screen.cpp @@ -87,13 +87,6 @@ void BASE_SCREEN::InitDatas() } -/** - * Get screen units scalar. - * - * Default implementation returns scalar used for schematic screen. The - * internal units used by the schematic screen is 1 mil (0.001"). Override - * this in derived classes that require internal units other than 1 mil. - */ int BASE_SCREEN::GetInternalUnits( void ) { return EESCHEMA_INTERNAL_UNIT; @@ -119,23 +112,13 @@ void BASE_SCREEN::SetPageSize( wxSize& aPageSize ) } -/** - * Function GetScalingFactor - * @return the the current scale used to draw items on screen - * draw coordinates are user coordinates * GetScalingFactor( ) - */ double BASE_SCREEN::GetScalingFactor() const { double scale = 1.0 / GetZoom(); return scale; } -/** - * Function SetScalingFactor - * calculates the .m_Zoom member to have a given scaling factor - * @param aScale - the the current scale used to draw items on screen - * draw coordinates are user coordinates * GetScalingFactor() - */ + void BASE_SCREEN::SetScalingFactor(double aScale ) { double zoom = aScale; @@ -152,6 +135,7 @@ void BASE_SCREEN::SetScalingFactor(double aScale ) SetZoom( zoom ); } + void BASE_SCREEN::SetZoomList( const wxArrayDouble& zoomlist ) { if( !m_ZoomList.IsEmpty() ) @@ -293,7 +277,6 @@ void BASE_SCREEN::SetGrid( const wxRealPoint& size ) } -/* Set grid size from command ID. */ void BASE_SCREEN::SetGrid( int id ) { wxASSERT( !m_grids.empty() ); @@ -462,6 +445,7 @@ wxPoint BASE_SCREEN::GetCrossHairScreenPosition() const return pos; } + void BASE_SCREEN::SetCrossHairPosition( const wxPoint& aPosition, bool aSnapToGrid ) { if( aSnapToGrid ) diff --git a/common/drawframe.cpp b/common/drawframe.cpp index 8c92cac215..779ef087bd 100644 --- a/common/drawframe.cpp +++ b/common/drawframe.cpp @@ -1,10 +1,31 @@ -/*****************/ -/* drawframe.cpp */ -/*****************/ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2008-2011 Wayne Stambaugh + * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ -#ifdef __GNUG__ -#pragma implementation -#endif +/** + * @file drawframe.cpp + */ #include "fctsys.h" #include "appl_wxstruct.h" @@ -23,10 +44,11 @@ #include -/* Definitions for enabling and disabling extra debugging output. Please - * remember to set these to 0 before committing changes to SVN. +/** + * Definition for enabling and disabling scroll bar setting trace output. See the + * wxWidgets documentation on useing the WXTRACE environment variable. */ -#define DEBUG_DUMP_SCROLLBAR_SETTINGS 0 // Set to 1 to print scroll bar settings. +static const wxString traceScrollSettings( wxT( "KicadScrollSettings" ) ); /* Configuration entry names. */ @@ -83,7 +105,7 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* father, int idtype, const wxString& ti m_Draw_Axis = FALSE; // TRUE to draw axis. m_Draw_Sheet_Ref = FALSE; // TRUE to display reference sheet. m_Print_Sheet_Ref = TRUE; // TRUE to print reference sheet. - m_Draw_Auxiliary_Axis = FALSE; // TRUE draw auxilary axis. + m_Draw_Auxiliary_Axis = FALSE; // TRUE draw auxiliary axis. m_Draw_Grid_Axis = FALSE; // TRUE to draw the grid axis m_CursorShape = 0; m_LastGridSizeId = 0; @@ -253,44 +275,32 @@ void EDA_DRAW_FRAME::OnUpdateCrossHairStyle( wxUpdateUIEvent& aEvent ) } -// Virtual function void EDA_DRAW_FRAME::ReCreateAuxiliaryToolbar() { } -// Virtual function void EDA_DRAW_FRAME::ReCreateMenuBar() { } -// Virtual function void EDA_DRAW_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem ) { } -// Virtual function void EDA_DRAW_FRAME::ToolOnRightClick( wxCommandEvent& event ) { } -/** - * Function PrintPage (virtual) - * used to print a page - * this basic function must be derived to be used for printing - * because EDA_DRAW_FRAME does not know how to print a page - * This is the reason it is a virtual function - */ void EDA_DRAW_FRAME::PrintPage( wxDC* aDC,int aPrintMask, bool aPrintMirrorMode, void* aData ) { wxMessageBox( wxT("EDA_DRAW_FRAME::PrintPage() error") ); } -// Virtual function void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event ) { int* clientData; @@ -352,14 +362,6 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event ) } -/** - * Set the zoom when selected by the Zoom List Box - * Note: - * position 0 = Fit in Page - * position >= 1 = zoom (1 to zoom max) - * last position : special zoom - * virtual function - */ void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event ) { if( m_SelZoomBox == NULL ) @@ -388,7 +390,6 @@ void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event ) } -/* Return the current zoom level */ double EDA_DRAW_FRAME::GetZoom( void ) { return GetScreen()->GetZoom(); @@ -401,7 +402,6 @@ void EDA_DRAW_FRAME::OnMouseEvent( wxMouseEvent& event ) } -// Virtual void EDA_DRAW_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) { } @@ -413,8 +413,6 @@ void EDA_DRAW_FRAME::DisplayToolMsg( const wxString& msg ) } -/* Display current unit Selection on Statusbar - */ void EDA_DRAW_FRAME::DisplayUnitsMsg() { wxString msg; @@ -439,8 +437,6 @@ void EDA_DRAW_FRAME::DisplayUnitsMsg() -/* Recalculate the size of toolbars and display panel. - */ void EDA_DRAW_FRAME::OnSize( wxSizeEvent& SizeEv ) { m_FrameSize = GetClientSize( ); @@ -470,10 +466,6 @@ void EDA_DRAW_FRAME::SetToolID( int aId, int aCursor, const wxString& aToolMsg ) } -/*****************************/ -/* default virtual functions */ -/*****************************/ - void EDA_DRAW_FRAME::OnGrid( int grid_type ) { } @@ -517,41 +509,134 @@ bool EDA_DRAW_FRAME::HandleBlockEnd( wxDC* DC ) void EDA_DRAW_FRAME::AdjustScrollBars( const wxPoint& aCenterPosition ) { int unitsX, unitsY, posX, posY; - wxSize drawingSize, clientSize; + wxSize clientSize, logicalClientSize, virtualSize; BASE_SCREEN* screen = GetScreen(); bool noRefresh = true; if( screen == NULL || DrawPanel == NULL ) return; - // The drawing size is twice the current page size. - drawingSize = screen->ReturnPageSize() * 2; + double scalar = screen->GetScalingFactor(); + + wxLogTrace( traceScrollSettings, wxT( "Center Position = ( %d, %d ), scalar = %0.5f." ), + aCenterPosition.x, aCenterPosition.y, scalar ); // Calculate the portion of the drawing that can be displayed in the // client area at the current zoom level. clientSize = DrawPanel->GetClientSize(); - double scalar = screen->GetScalingFactor(); - clientSize.x = wxRound( (double) clientSize.x / scalar ); - clientSize.y = wxRound( (double) clientSize.y / scalar ); + // The logical size of the client window. + logicalClientSize.x = wxRound( (double) clientSize.x / scalar ); + logicalClientSize.y = wxRound( (double) clientSize.y / scalar ); - /* Adjust drawing size when zooming way out to prevent centering around - * cursor problems. */ - if( clientSize.x > drawingSize.x || clientSize.y > drawingSize.y ) - drawingSize = clientSize; + // The upper left corner of the drawing in device units. + int w = screen->ReturnPageSize().x; + int h = screen->ReturnPageSize().y; - drawingSize.x += wxRound( (double) clientSize.x / 2.0 ); - drawingSize.y += wxRound( (double) clientSize.y / 2.0 ); + // The drawing rectangle logical units + wxRect drawingRect( wxPoint( 0, 0 ), wxSize( w, h ) ); + wxLogTrace( traceScrollSettings, wxT( "Logical drawing rect = ( %d, %d, %d, %d )." ), + drawingRect.x, drawingRect.y, drawingRect.width, drawingRect.height ); + wxLogTrace( traceScrollSettings, wxT( " left %d, right %d, top %d, bottome %d" ), + drawingRect.GetLeft(), drawingRect.GetRight(), + drawingRect.GetTop(), drawingRect.GetBottom() ); + + // The size of the client rectangle in logical units. + int x = wxRound( (double) aCenterPosition.x - ( (double) logicalClientSize.x / 2.0 ) ); + int y = wxRound( (double) aCenterPosition.y - ( (double) logicalClientSize.y / 2.0 ) ); + + // If drawn around the center, adjust the client rectangle accordingly. if( screen->m_Center ) { - screen->m_DrawOrg.x = -wxRound( (double) drawingSize.x / 2.0 ); - screen->m_DrawOrg.y = -wxRound( (double) drawingSize.y / 2.0 ); + x += wxRound( (double) drawingRect.width / 2.0 ); + y += wxRound( (double) drawingRect.height / 2.0 ); + } + + wxRect logicalClientRect( wxPoint( x, y ), logicalClientSize ); + + wxLogTrace( traceScrollSettings, wxT( "Logical client rect = ( %d, %d, %d, %d )." ), + logicalClientRect.x, logicalClientRect.y, + logicalClientRect.width, logicalClientRect.height ); + wxLogTrace( traceScrollSettings, wxT( " left %d, right %d, top %d, bottome %d" ), + logicalClientRect.GetLeft(), logicalClientRect.GetRight(), + logicalClientRect.GetTop(), logicalClientRect.GetBottom() ); + + if( drawingRect == logicalClientRect ) + { + virtualSize = drawingRect.GetSize(); + } + else if( drawingRect.Contains( logicalClientRect ) ) + { + virtualSize = drawingRect.GetSize(); } else { - screen->m_DrawOrg.x = -wxRound( (double) clientSize.x / 2.0 ); - screen->m_DrawOrg.y = -wxRound( (double) clientSize.y / 2.0 ); + int drawingCenterX = drawingRect.x + ( drawingRect.width / 2 ); + int clientCenterX = logicalClientRect.x + ( logicalClientRect.width / 2 ); + int drawingCenterY = drawingRect.y + ( drawingRect.height / 2 ); + int clientCenterY = logicalClientRect.y + ( logicalClientRect.height / 2 ); + + if( logicalClientRect.width > drawingRect.width ) + { + if( drawingCenterX > clientCenterX ) + virtualSize.x = ( drawingCenterX - logicalClientRect.GetLeft() ) * 2; + else if( drawingCenterX < clientCenterX ) + virtualSize.x = ( logicalClientRect.GetRight() - drawingCenterX ) * 2; + else + virtualSize.x = logicalClientRect.width; + } + else if( logicalClientRect.width < drawingRect.width ) + { + if( drawingCenterX > clientCenterX ) + virtualSize.x = drawingRect.width + + ( (drawingRect.GetLeft() - logicalClientRect.GetLeft() ) * 2 ); + else if( drawingCenterX < clientCenterX ) + virtualSize.x = drawingRect.width + + ( (logicalClientRect.GetRight() - drawingRect.GetRight() ) * 2 ); + else + virtualSize.x = drawingRect.width; + } + else + { + virtualSize.x = drawingRect.width; + } + + if( logicalClientRect.height > drawingRect.height ) + { + if( drawingCenterY > clientCenterY ) + virtualSize.y = ( drawingCenterY - logicalClientRect.GetTop() ) * 2; + else if( drawingCenterY < clientCenterY ) + virtualSize.y = ( logicalClientRect.GetBottom() - drawingCenterY ) * 2; + else + virtualSize.y = logicalClientRect.height; + } + else if( logicalClientRect.height < drawingRect.height ) + { + if( drawingCenterY > clientCenterY ) + virtualSize.y = drawingRect.height + + ( ( drawingRect.GetTop() - logicalClientRect.GetTop() ) * 2 ); + else if( drawingCenterY < clientCenterY ) + virtualSize.y = drawingRect.height + + ( ( logicalClientRect.GetBottom() - drawingRect.GetBottom() ) * 2 ); + else + virtualSize.y = drawingRect.height; + } + else + { + virtualSize.y = drawingRect.height; + } + } + + if( screen->m_Center ) + { + screen->m_DrawOrg.x = -( wxRound( (double) virtualSize.x / 2.0 ) ); + screen->m_DrawOrg.y = -( wxRound( (double) virtualSize.y / 2.0 ) ); + } + else + { + screen->m_DrawOrg.x = -( wxRound( (double) (virtualSize.x - drawingRect.width) / 2.0 ) ); + screen->m_DrawOrg.y = -( wxRound( (double) (virtualSize.y - drawingRect.height) / 2.0 ) ); } /* Always set scrollbar pixels per unit to 1 unless you want the zoom @@ -562,36 +647,57 @@ void EDA_DRAW_FRAME::AdjustScrollBars( const wxPoint& aCenterPosition ) */ screen->m_ScrollPixelsPerUnitX = screen->m_ScrollPixelsPerUnitY = 1; - // Calculate the number of scroll bar units for the given zoom level. */ - unitsX = wxRound( (double) drawingSize.x * scalar ); - unitsY = wxRound( (double) drawingSize.y * scalar ); + // Calculate the number of scroll bar units for the given zoom level in device units. + unitsX = wxRound( (double) virtualSize.x * scalar ); + unitsY = wxRound( (double) virtualSize.y * scalar ); - // Calculate the position, place the cursor at the center of screen. + // Calculate the scroll bar position in logical units to place the center position at + // the center of client rectangle. screen->SetScrollCenterPosition( aCenterPosition ); - posX = aCenterPosition.x - screen->m_DrawOrg.x; - posY = aCenterPosition.y - screen->m_DrawOrg.y; - - posX -= wxRound( (double) clientSize.x / 2.0 ); - posY -= wxRound( (double) clientSize.y / 2.0 ); - - if( posX < 0 ) - posX = 0; - - if( posY < 0 ) - posY = 0; + posX = aCenterPosition.x - wxRound( (double) logicalClientRect.width / 2.0 ) - + screen->m_DrawOrg.x; + posY = aCenterPosition.y - wxRound( (double) logicalClientRect.height / 2.0 ) - + screen->m_DrawOrg.y; + // Convert scroll bar position to device units. posX = wxRound( (double) posX * scalar ); posY = wxRound( (double) posY * scalar ); + if( posX < 0 ) + { + wxLogTrace( traceScrollSettings, wxT( "Required scroll bar X position %d" ), posX ); + posX = 0; + } + + if( posX > unitsX ) + { + wxLogTrace( traceScrollSettings, wxT( "Required scroll bar X position %d" ), posX ); + posX = unitsX; + } + + if( posY < 0 ) + { + wxLogTrace( traceScrollSettings, wxT( "Required scroll bar Y position %d" ), posY ); + posY = 0; + } + + if( posY > unitsY ) + { + wxLogTrace( traceScrollSettings, wxT( "Required scroll bar Y position %d" ), posY ); + posY = unitsY; + } + screen->m_ScrollbarPos = wxPoint( posX, posY ); screen->m_ScrollbarNumber = wxSize( unitsX, unitsY ); -#if DEBUG_DUMP_SCROLLBAR_SETTINGS - wxLogDebug( wxT( "SetScrollbars(%d, %d, %d, %d, %d, %d)" ), + wxLogTrace( traceScrollSettings, + wxT( "Drawing = (%d, %d), Client = (%d, %d), Offset = (%d, %d), \ +SetScrollbars(%d, %d, %d, %d, %d, %d)" ), + virtualSize.x, virtualSize.y, logicalClientSize.x, logicalClientSize.y, + screen->m_DrawOrg.x, screen->m_DrawOrg.y, screen->m_ScrollPixelsPerUnitX, screen->m_ScrollPixelsPerUnitY, screen->m_ScrollbarNumber.x, screen->m_ScrollbarNumber.y, screen->m_ScrollbarPos.x, screen->m_ScrollbarPos.y ); -#endif DrawPanel->SetScrollbars( screen->m_ScrollPixelsPerUnitX, screen->m_ScrollPixelsPerUnitY, @@ -602,11 +708,6 @@ void EDA_DRAW_FRAME::AdjustScrollBars( const wxPoint& aCenterPosition ) } -/** - * Function SetLanguage - * called on a language menu selection - * when using a derived function, do not forget to call this one - */ void EDA_DRAW_FRAME::SetLanguage( wxCommandEvent& event ) { EDA_BASE_FRAME::SetLanguage( event ); @@ -644,15 +745,6 @@ double RoundTo0( double x, double precision ) } -/** - * Function UpdateStatusBar - * Displays in the bottom of the main window a stust: - * - Absolute Cursor coordinates - * - Relative Cursor coordinates (relative to the last coordinate stored - * when actiavte the space bar) - * ( in this status is also displayed the zoom level, but this is not made - * by this function ) - */ void EDA_DRAW_FRAME::UpdateStatusBar() { wxString Line; @@ -740,12 +832,6 @@ void EDA_DRAW_FRAME::UpdateStatusBar() } -/** - * Load draw frame specific configuration settings. - * - * Don't forget to call this base method from any derived classes or the - * settings will not get loaded. - */ void EDA_DRAW_FRAME::LoadSettings() { wxASSERT( wxGetApp().m_EDA_Config != NULL ); @@ -768,12 +854,6 @@ void EDA_DRAW_FRAME::LoadSettings() } -/** - * Save draw frame specific configuration settings. - * - * Don't forget to call this base method from any derived classes or the - * settings will not get saved. - */ void EDA_DRAW_FRAME::SaveSettings() { wxASSERT( wxGetApp().m_EDA_Config != NULL ); diff --git a/common/drawpanel.cpp b/common/drawpanel.cpp index 61db33efaa..0d40e02564 100644 --- a/common/drawpanel.cpp +++ b/common/drawpanel.cpp @@ -1162,7 +1162,24 @@ void EDA_DRAW_PANEL::OnKeyEvent( wxKeyEvent& event ) GetParent()->GeneralControl( &DC, pos, localkey ); #ifdef __WINDOWS__ - event.Skip(); // Allow menu shortcut processing on Windows. + // Disable the default scrolling command keys which break KiCad's zooming and + // panning. This is also likely the reason skip was disabled for other platforms. + // There probably needs to be some more investigation done here. + switch( event.GetKeyCode() ) + { + case WXK_HOME: + case WXK_END: + case WXK_PAGEUP: + case WXK_PAGEDOWN: + case WXK_UP: + case WXK_DOWN: + case WXK_LEFT: + case WXK_RIGHT: + break; + + default: + event.Skip(); // Allow menu shortcut processing on Windows. + } #endif } diff --git a/eeschema/viewlib_frame.cpp b/eeschema/viewlib_frame.cpp index 46202138b4..05f2d389bb 100644 --- a/eeschema/viewlib_frame.cpp +++ b/eeschema/viewlib_frame.cpp @@ -1,3 +1,28 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2008-2011 Wayne Stambaugh + * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /** * @file viewlib_frame.cpp */ @@ -24,13 +49,11 @@ wxString LIB_VIEW_FRAME::m_entryName; int LIB_VIEW_FRAME::m_unit = 1; int LIB_VIEW_FRAME::m_convert = 1; -// When the viewer is used to select a component in schematic, the selected component is here. + +/// When the viewer is used to select a component in schematic, the selected component is here. wxString LIB_VIEW_FRAME::m_exportToEeschemaCmpName; -/*****************************/ -/* class WinEDA_ViewlibFrame */ -/*****************************/ BEGIN_EVENT_TABLE( LIB_VIEW_FRAME, EDA_DRAW_FRAME ) /* Window events */ EVT_CLOSE( LIB_VIEW_FRAME::OnCloseWindow ) @@ -212,8 +235,8 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( wxWindow* father, CMP_LIBRARY* Library, wxSemaph wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom().Layer(10) ); /* Now the minimum windows are fixed, set library list - and component list of the previous values from last viewlib use - */ + * and component list of the previous values from last viewlib use + */ if( m_LibListWindow ) { wxAuiPaneInfo& pane = m_auimgr.GetPane(m_LibListWindow); @@ -253,15 +276,13 @@ void LIB_VIEW_FRAME::OnCloseWindow( wxCloseEvent& Event ) // This window will be destroyed by the calling function, // to avoid side effects } - else + { Destroy(); + } } -/* - * Resize sub windows when dragging a sash window border - */ void LIB_VIEW_FRAME::OnSashDrag( wxSashEvent& event ) { if( event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE ) @@ -340,9 +361,9 @@ double LIB_VIEW_FRAME::BestZoom() // Reserve a 10% margin around component bounding box. double margin_scale_factor = 0.8; double zx =(double) BoundaryBox.GetWidth() / - ( margin_scale_factor * (double)size.x ); + ( margin_scale_factor * (double)size.x ); double zy = (double) BoundaryBox.GetHeight() / - ( margin_scale_factor * (double)size.y); + ( margin_scale_factor * (double)size.y); // Calculates the best zoom bestzoom = MAX( zx, zy ); @@ -358,12 +379,6 @@ double LIB_VIEW_FRAME::BestZoom() } -/** - * Function ReCreateListLib - * - * Creates or recreates the list of current loaded libraries. - * This list is sorted, with the library cache always at end of the list - */ void LIB_VIEW_FRAME::ReCreateListLib() { if( m_LibList == NULL ) @@ -475,10 +490,6 @@ void LIB_VIEW_FRAME::ClickOnCmpList( wxCommandEvent& event ) } - -/* - * Export the current component to schematic and close the library browser - */ void LIB_VIEW_FRAME::ExportToSchematicLibraryPart( wxCommandEvent& event ) { int ii = m_CmpList->GetSelection(); @@ -496,12 +507,6 @@ void LIB_VIEW_FRAME::ExportToSchematicLibraryPart( wxCommandEvent& event ) #define CMPLIST_WIDTH_KEY wxT( "Cmplist_width" ) -/** - * Load library viewer frame specific configuration settings. - * - * Don't forget to call this base method from any derived classes or the - * settings will not get loaded. - */ void LIB_VIEW_FRAME::LoadSettings( ) { wxConfig* cfg ; @@ -526,12 +531,6 @@ void LIB_VIEW_FRAME::LoadSettings( ) } -/** - * Save library viewer frame specific configuration settings. - * - * Don't forget to call this base method from any derived classes or the - * settings will not get saved. - */ void LIB_VIEW_FRAME::SaveSettings() { wxConfig* cfg; @@ -547,9 +546,7 @@ void LIB_VIEW_FRAME::SaveSettings() cfg->Write( CMPLIST_WIDTH_KEY, m_CmpListSize.x ); } -/** Called on activate the frame. - * Reload the libraries lists that can be changed by the schematic editor or the library editor - */ + void LIB_VIEW_FRAME::OnActivate( wxActivateEvent& event ) { EDA_DRAW_FRAME::OnActivate( event ); diff --git a/eeschema/viewlib_frame.h b/eeschema/viewlib_frame.h index 08e0868902..4520df1952 100644 --- a/eeschema/viewlib_frame.h +++ b/eeschema/viewlib_frame.h @@ -1,3 +1,32 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2008-2011 Wayne Stambaugh + * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/** + * @file viewlib_frame.h + */ + #ifndef __LIBVIEWFRM_H__ #define __LIBVIEWFRM_H__ @@ -50,8 +79,22 @@ public: ~LIB_VIEW_FRAME(); void OnSize( wxSizeEvent& event ); + + /** + * Function OnSashDrag + * resizes the child windows when dragging a sash window border. + */ + void OnSashDrag( wxSashEvent& event ); + + /** + * Function ReCreateListLib + * + * Creates or recreates the list of current loaded libraries. + * This list is sorted, with the library cache always at end of the list + */ void ReCreateListLib(); + void ReCreateListCmp(); void Process_Special_Functions( wxCommandEvent& event ); void DisplayLibInfos(); @@ -69,7 +112,22 @@ public: void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 ); + /** + * Function LoadSettings + * loads the library viewer frame specific configuration settings. + * + * Don't forget to call this base method from any derived classes or the + * settings will not get loaded. + */ void LoadSettings(); + + /** + * Function SaveSettings + * save library viewer frame specific configuration settings. + * + * Don't forget to call this base method from any derived classes or the + * settings will not get saved. + */ void SaveSettings(); wxString& GetEntryName( void ) const { return m_entryName; } @@ -79,12 +137,20 @@ public: int GetConvert( void ) { return m_convert; } private: - /** OnActivate event funtion( virtual ) + /** + * Function OnActivate + * is called when the frame frame is activate to reload the libraries and component lists + * that can be changed by the schematic editor or the library editor. */ - virtual void OnActivate( wxActivateEvent& event ); + virtual void OnActivate( wxActivateEvent& event ); void SelectCurrentLibrary(); void SelectAndViewLibraryPart( int option ); + + /** + * Function ExportToSchematicLibraryPart + * exports the current component to schematic and close the library browser. + */ void ExportToSchematicLibraryPart( wxCommandEvent& event ); void ViewOneLibraryContent( CMP_LIBRARY* Lib, int Flag ); bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); diff --git a/include/class_base_screen.h b/include/class_base_screen.h index 08b07c8f19..7b94c53d25 100644 --- a/include/class_base_screen.h +++ b/include/class_base_screen.h @@ -171,15 +171,24 @@ public: virtual void SetDrawItems( EDA_ITEM* aItem ) { m_drawList = aItem; } - void InitDatas(); + void InitDatas(); - void SetFileName( const wxString& aFileName ) { m_fileName = aFileName; } + void SetFileName( const wxString& aFileName ) { m_fileName = aFileName; } - wxString GetFileName() const { return m_fileName; } + wxString GetFileName() const { return m_fileName; } - void SetPageSize( wxSize& aPageSize ); - wxSize ReturnPageSize( void ); - virtual int GetInternalUnits( void ); + void SetPageSize( wxSize& aPageSize ); + wxSize ReturnPageSize( void ); + + /** + * Function GetInternalUnits + * @return the screen units scalar. + * + * Default implementation returns scalar used for schematic screen. The + * internal units used by the schematic screen is 1 mil (0.001"). Override + * this in derived classes that require internal units other than 1 mil. + */ + virtual int GetInternalUnits( void ); /** * Function GetCrossHairPosition @@ -227,7 +236,7 @@ public: * picked items are deleted by ClearUndoORRedoList() according to their * status */ - virtual void ClearUndoRedoList(); + virtual void ClearUndoRedoList(); /** * Function PushCommandToUndoList @@ -236,7 +245,7 @@ public: * reached * ( using ClearUndoORRedoList) */ - virtual void PushCommandToUndoList( PICKED_ITEMS_LIST* aItem ); + virtual void PushCommandToUndoList( PICKED_ITEMS_LIST* aItem ); /** * Function PushCommandToRedoList @@ -245,7 +254,7 @@ public: * reached * ( using ClearUndoORRedoList) */ - virtual void PushCommandToRedoList( PICKED_ITEMS_LIST* aItem ); + virtual void PushCommandToRedoList( PICKED_ITEMS_LIST* aItem ); /** PopCommandFromUndoList * return the last command to undo and remove it from list @@ -271,12 +280,12 @@ public: } - void SetModify() { m_FlagModified = true; } - void ClrModify() { m_FlagModified = false;; } - void SetSave() { m_FlagSave = true; } - void ClrSave() { m_FlagSave = false; } - int IsModify() { return m_FlagModified; } - int IsSave() { return m_FlagSave; } + void SetModify() { m_FlagModified = true; } + void ClrModify() { m_FlagModified = false;; } + void SetSave() { m_FlagSave = true; } + void ClrSave() { m_FlagSave = false; } + int IsModify() { return m_FlagModified; } + int IsSave() { return m_FlagSave; } //------------------------------------------------------------- @@ -284,16 +293,16 @@ public: /** * Function GetScalingFactor * @return the the current scale used to draw items on screen - * draw coordinates are user coordinates * GetScalingFactor( ) + * draw coordinates are user coordinates * GetScalingFactor() */ - double GetScalingFactor() const; + double GetScalingFactor() const; /** * Function SetScalingFactor * @param aScale = the the current scale used to draw items on screen - * draw coordinates are user coordinates * GetScalingFactor( ) + * draw coordinates are user coordinates * GetScalingFactor() */ - void SetScalingFactor( double aScale ); + void SetScalingFactor( double aScale ); /** * Function GetZoom @@ -301,26 +310,26 @@ public: * Note: the zoom factor is NOT the scaling factor * the scaling factor is m_ZoomScalar * GetZoom() */ - double GetZoom() const; + double GetZoom() const; /** * Function SetZoom * adjusts the current zoom factor * @param coeff - Zoom coefficient. */ - bool SetZoom( double coeff ); + bool SetZoom( double coeff ); /** * Function SetZoomList * sets the list of zoom factors. * @param aZoomList An array of zoom factors in ascending order, zero terminated */ - void SetZoomList( const wxArrayDouble& aZoomList ); + void SetZoomList( const wxArrayDouble& aZoomList ); - bool SetNextZoom(); - bool SetPreviousZoom(); - bool SetFirstZoom(); - bool SetLastZoom(); + bool SetNextZoom(); + bool SetPreviousZoom(); + bool SetFirstZoom(); + bool SetLastZoom(); //-------------------------------------------------------------- @@ -329,7 +338,7 @@ public: * * @return int - Currently selected grid command ID. */ - int GetGridId(); + int GetGridId(); /** * Return the grid size of the currently selected grid. @@ -343,15 +352,20 @@ public: * * @return GRID_TYPE - The currently selected grid. */ - GRID_TYPE GetGrid(); + GRID_TYPE GetGrid(); const wxPoint& GetGridOrigin(); - void SetGrid( const wxRealPoint& size ); - void SetGrid( int id ); - void SetGridList( GRIDS& sizelist ); - void AddGrid( const GRID_TYPE& grid ); - void AddGrid( const wxRealPoint& size, int id ); - void AddGrid( const wxRealPoint& size, EDA_UNITS_T aUnit, int id ); + void SetGrid( const wxRealPoint& size ); + + /** + * Function SetGrid + * sets the grid size from command ID. + */ + void SetGrid( int id ); + void SetGridList( GRIDS& sizelist ); + void AddGrid( const GRID_TYPE& grid ); + void AddGrid( const wxRealPoint& size, int id ); + void AddGrid( const wxRealPoint& size, EDA_UNITS_T aUnit, int id ); /** * Function GetGridCount(). @@ -359,7 +373,7 @@ public: * * @returns - The size of the grid list. */ - size_t GetGridCount() const { return m_grids.size(); } + size_t GetGridCount() const { return m_grids.size(); } /** * Function GetGrid() @@ -368,7 +382,7 @@ public: * @param aIndex - The grid list index. * @return - The grid object at \a aIndex or the current grid if the grid list is empty. */ - GRID_TYPE& GetGrid( size_t aIndex ); + GRID_TYPE& GetGrid( size_t aIndex ); /** * Function GetGrids(). @@ -376,7 +390,7 @@ public: * * @param aList - List to copy to. */ - void GetGrids( GRIDS& aList ); + void GetGrids( GRIDS& aList ); void SetMousePosition( const wxPoint& aPosition ) { m_MousePosition = aPosition; } diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h index 474f3a8a8d..49bea22417 100644 --- a/include/wxBasePcbFrame.h +++ b/include/wxBasePcbFrame.h @@ -1,3 +1,28 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2008-2011 Wayne Stambaugh + * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /** * @file wxBasePcbFrame.h * @brief Classes used in Pcbnew, CvPcb and GerbView. @@ -100,6 +125,11 @@ public: return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); } + /** + * Function BestZoom + * @return the "best" zoom to show the entire board or footprint on the screen. + */ + virtual double BestZoom(); virtual void Show3D_Frame( wxCommandEvent& event ); diff --git a/include/wxstruct.h b/include/wxstruct.h index 75a960d5e2..f3de177ead 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -557,6 +557,14 @@ public: * grid size combobox on the toolbar. */ virtual void OnSelectGrid( wxCommandEvent& event ); + + /** + * Functions OnSelectZoom + * sets the zoom factor when selected by the zoom list box in the main tool bar. + * @note List position 0 is fit to page + * List position >= 1 = zoom (1 to zoom max) + * Last list position is custom zoom not in zoom list. + */ virtual void OnSelectZoom( wxCommandEvent& event ); // Command event handlers shared by all applications derived from EDA_DRAW_FRAME. @@ -585,7 +593,12 @@ public: */ virtual void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 ) { } + /** + * Function OnSize + * recalculates the size of toolbars and display panel when the frame size changes. + */ virtual void OnSize( wxSizeEvent& event ); + void OnEraseBackground( wxEraseEvent& SizeEvent ); virtual void OnZoom( wxCommandEvent& event ); @@ -608,7 +621,10 @@ public: /* Return the zoom level which displays the full page on screen */ virtual double BestZoom() = 0; - /* Return the current zoom level */ + /** + * Function GetZoom + * @return The current zoom level. + */ double GetZoom( void ); void TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_width ); @@ -655,6 +671,10 @@ public: */ virtual void UpdateStatusBar(); + /** + * Function DisplayUnitsMsg + * displays current unit pane on the status bar. + */ void DisplayUnitsMsg(); /* Handlers for block commands */ @@ -698,7 +718,22 @@ public: void OnSockRequest( wxSocketEvent& evt ); void OnSockRequestServer( wxSocketEvent& evt ); + /** + * Function LoadSettings + * loads the draw frame specific configuration settings. + * + * Don't forget to call this base method from any derived classes or the + * settings common to the draw frame will not get loaded. + */ virtual void LoadSettings(); + + /** + * Funxtion SaveSettings + * saves the draw frame specific configuration settings. + * + * Don't forget to call this base method from any derived classes or the + * settings common to the draw frame will not get saved. + */ virtual void SaveSettings(); /** @@ -1056,7 +1091,7 @@ static inline void AddMenuItem( wxMenu* aMenu, * Each panel has rows, starting at 0. Each row has positions starting at 0. Each item in a panel * can have it's row and position set. * - * Eventually panels will be moveable. Each initialization function sets up the panel for this, + * Eventually panels will be movable. Each initialization function sets up the panel for this, * then after a //==// break has additional calls to anchor toolbars in a way that matches * present functionality. */ @@ -1076,7 +1111,7 @@ public: CloseButton( false ); LeftDockable( false ); RightDockable( false ); - //==================== Remove calls below here for moveable toolbars // + //==================== Remove calls below here for movable toolbars // Gripper( false ); DockFixed( true ); Movable( false ); @@ -1094,7 +1129,7 @@ public: CloseButton( false ); TopDockable( false ); BottomDockable( false ); - //==================== Remove calls below here for moveable toolbars // + //==================== Remove calls below here for movable toolbars // Gripper( false ); DockFixed( true ); Movable( false ); diff --git a/pcbnew/basepcbframe.cpp b/pcbnew/basepcbframe.cpp index 212b680a06..ba86c83c08 100644 --- a/pcbnew/basepcbframe.cpp +++ b/pcbnew/basepcbframe.cpp @@ -122,9 +122,6 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard ) } -/** - * Return the "best" zoom, i.e. the zoom which shows the entire board on screen - */ double PCB_BASE_FRAME::BestZoom( void ) { int dx, dy; @@ -151,6 +148,7 @@ double PCB_BASE_FRAME::BestZoom( void ) jj = 32.0; double bestzoom = MAX( ii, jj ); + GetScreen()->SetScrollCenterPosition( m_Pcb->m_BoundaryBox.Centre() ); return bestzoom ; diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index dfaa98bb75..8490e6c779 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -314,6 +314,7 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title, m_InternalUnits = PCB_INTERNAL_UNIT; // Unites internes = 1/10000 inch SetScreen( new PCB_SCREEN() ); + GetScreen()->m_Center = false; // PCB drawings start in the upper left corner. // LoadSettings() *after* creating m_LayersManager, because LoadSettings() // initialize parameters in m_LayersManager diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index 64248aa14b..26430536a5 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -156,7 +156,6 @@ Changing extension to .brd." ), GetChars( fn.GetFullPath() ) ); } frame->Zoom_Automatique( true ); - frame->GetScreen()->m_FirstRedraw = false; /* Load file specified in the command line. */ if( fn.IsOk() )