From 00f8994ee17a90cc219d84d656c8b88ac93ec492 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sat, 28 Feb 2015 17:56:09 +0100 Subject: [PATCH] Eeschema: Fix a (minor but annoying) bug detected by coverity which prevent Eeschema to draw components in "fast mode" (i;e. without pin texts) when they are moved, due to a draw parameter which was incorrectly used. Move items rework: enhancements: for some items (sheets, components, bus entries) the mouse cursor is no more wrapped to the anchor. For large symbols, this is better: they are more easy to place. There is also a change when starting a move item command: the full screen is redraw, and therefore there is no artifact due to the XOR draw mode. Some other minor coverity fixes (uninitialized members). --- eeschema/block.cpp | 20 +++-- eeschema/bus-wire-junction.cpp | 2 +- eeschema/dialogs/dialog_plot_schematic.cpp | 14 +++- eeschema/edit_label.cpp | 2 +- eeschema/events_called_functions_for_edit.cpp | 4 +- eeschema/getpart.cpp | 2 +- eeschema/hierarch.cpp | 3 +- eeschema/lib_draw_item.cpp | 5 +- eeschema/lib_draw_item.h | 5 +- eeschema/lib_pin.cpp | 16 ++-- eeschema/lib_pin.h | 20 ++++- eeschema/sch_bus_entry.h | 8 ++ eeschema/sch_component.cpp | 27 ++++--- eeschema/sch_component.h | 49 ++++++++---- eeschema/sch_field.cpp | 25 +++---- eeschema/sch_field.h | 11 +-- eeschema/sch_item_struct.h | 30 ++++++-- eeschema/sch_sheet.cpp | 8 ++ eeschema/sch_sheet.h | 37 ++++++---- eeschema/sch_text.h | 32 +++----- eeschema/schedit.cpp | 73 ++++++++++++------ eeschema/schframe.h | 6 +- eeschema/sheet.cpp | 74 +++++++------------ eeschema/sheetlab.cpp | 4 +- scripts/bom-in-python/README-bom.txt | 2 +- scripts/bom-in-python/bom_csv_by_ref.py | 8 +- scripts/bom-in-python/bom_csv_by_ref_v2.py | 2 +- 27 files changed, 293 insertions(+), 196 deletions(-) diff --git a/eeschema/block.cpp b/eeschema/block.cpp index a1706ecb5e..2415ed2d6b 100644 --- a/eeschema/block.cpp +++ b/eeschema/block.cpp @@ -1,9 +1,9 @@ /* * 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) 2009-2011 Wayne Stambaugh - * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2009-2015 Wayne Stambaugh + * Copyright (C) 2004-2015 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 @@ -397,7 +397,12 @@ static void DrawMovingBlockOutlines( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wx for( unsigned ii = 0; ii < block->GetCount(); ii++ ) { schitem = (SCH_ITEM*) block->GetItem( ii ); - schitem->Draw( aPanel, aDC, block->GetMoveVector(), g_XorMode, g_GhostColor ); + + if( schitem->Type() == SCH_COMPONENT_T ) + ((SCH_COMPONENT*)schitem)->Draw( aPanel, aDC, block->GetMoveVector(), + g_XorMode, g_GhostColor, false ); + else + schitem->Draw( aPanel, aDC, block->GetMoveVector(), g_XorMode, g_GhostColor ); } } @@ -408,7 +413,12 @@ static void DrawMovingBlockOutlines( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wx for( unsigned ii = 0; ii < block->GetCount(); ii++ ) { schitem = (SCH_ITEM*) block->GetItem( ii ); - schitem->Draw( aPanel, aDC, block->GetMoveVector(), g_XorMode, g_GhostColor ); + + if( schitem->Type() == SCH_COMPONENT_T ) + ((SCH_COMPONENT*)schitem)->Draw( aPanel, aDC, block->GetMoveVector(), + g_XorMode, g_GhostColor, false ); + else + schitem->Draw( aPanel, aDC, block->GetMoveVector(), g_XorMode, g_GhostColor ); } } diff --git a/eeschema/bus-wire-junction.cpp b/eeschema/bus-wire-junction.cpp index ed78442e34..c123f2f593 100644 --- a/eeschema/bus-wire-junction.cpp +++ b/eeschema/bus-wire-junction.cpp @@ -442,7 +442,7 @@ void SCH_EDIT_FRAME::RepeatDrawItem( wxDC* DC ) ( (SCH_COMPONENT*) my_clone )->SetTimeStamp( GetNewTimeStamp() ); my_clone->Move( pos ); my_clone->Draw( m_canvas, DC, wxPoint( 0, 0 ), g_XorMode ); - MoveItem( my_clone, DC ); + PrepareMoveItem( my_clone, DC ); } else { diff --git a/eeschema/dialogs/dialog_plot_schematic.cpp b/eeschema/dialogs/dialog_plot_schematic.cpp index 9f7b6ee6ef..f6a11eadc9 100644 --- a/eeschema/dialogs/dialog_plot_schematic.cpp +++ b/eeschema/dialogs/dialog_plot_schematic.cpp @@ -4,11 +4,11 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 1992-2012 Jean-Pierre Charras * - * Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 1992-2015 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 @@ -343,7 +343,15 @@ wxFileName DIALOG_PLOT_SCHEMATIC::createPlotFileName( wxTextCtrl* aOutputDirecto wxString plotFileName = Prj().AbsolutePath( aPlotFileName + wxT(".") + aExtension); - EnsureFileDirectoryExists( &outputDir, plotFileName, aReporter ); + if( !EnsureFileDirectoryExists( &outputDir, plotFileName, aReporter ) ) + { + wxString msg; + msg.Printf( _( "Could not write plot files to folder \"%s\"." ), + GetChars( outputDir.GetPath() ) ); + msg << wxT( "\n" ); + aReporter->Report( msg ); + } + wxFileName fn( plotFileName ); fn.SetPath( outputDir.GetFullPath() ); return fn; diff --git a/eeschema/edit_label.cpp b/eeschema/edit_label.cpp index d73c3b23d1..a8e1066852 100644 --- a/eeschema/edit_label.cpp +++ b/eeschema/edit_label.cpp @@ -123,7 +123,7 @@ SCH_TEXT* SCH_EDIT_FRAME::CreateNewText( wxDC* aDC, int aType ) // Prepare display to move the new item textItem->Draw( m_canvas, aDC, wxPoint( 0, 0 ), g_XorMode ); - MoveItem( (SCH_ITEM*) textItem, aDC ); + PrepareMoveItem( (SCH_ITEM*) textItem, aDC ); return textItem; } diff --git a/eeschema/events_called_functions_for_edit.cpp b/eeschema/events_called_functions_for_edit.cpp index 44d2c3adca..bc7c69acbf 100644 --- a/eeschema/events_called_functions_for_edit.cpp +++ b/eeschema/events_called_functions_for_edit.cpp @@ -56,7 +56,7 @@ void SCH_EDIT_FRAME::OnCopySchematicItemRequest( wxCommandEvent& event ) newitem->SetFlags( IS_NEW ); // Draw the new part, MoveItem() expects it to be already on screen. newitem->Draw( m_canvas, &dc, wxPoint( 0, 0 ), g_XorMode ); - MoveItem( newitem, &dc ); + PrepareMoveItem( newitem, &dc ); } break; @@ -69,7 +69,7 @@ void SCH_EDIT_FRAME::OnCopySchematicItemRequest( wxCommandEvent& event ) newitem->SetFlags( IS_NEW ); // Draw the new item, MoveItem() expects it to be already on screen. newitem->Draw( m_canvas, &dc, wxPoint( 0, 0 ), g_XorMode ); - MoveItem( newitem, &dc ); + PrepareMoveItem( newitem, &dc ); } break; diff --git a/eeschema/getpart.cpp b/eeschema/getpart.cpp index 6fdb327b9b..c6ffbb22e2 100644 --- a/eeschema/getpart.cpp +++ b/eeschema/getpart.cpp @@ -222,7 +222,7 @@ SCH_COMPONENT* SCH_EDIT_FRAME::Load_Component( wxDC* aDC, SetMsgPanel( items ); component->Draw( m_canvas, aDC, wxPoint( 0, 0 ), g_XorMode ); component->SetFlags( IS_NEW ); - MoveItem( (SCH_ITEM*) component, aDC ); + PrepareMoveItem( (SCH_ITEM*) component, aDC ); return component; } diff --git a/eeschema/hierarch.cpp b/eeschema/hierarch.cpp index 18553aa986..6edb284388 100644 --- a/eeschema/hierarch.cpp +++ b/eeschema/hierarch.cpp @@ -56,7 +56,8 @@ class TreeItemData : public wxTreeItemData { public: SCH_SHEET_PATH m_SheetPath; - TreeItemData( SCH_SHEET_PATH sheet ) : wxTreeItemData() + + TreeItemData( SCH_SHEET_PATH& sheet ) : wxTreeItemData() { m_SheetPath = sheet; } diff --git a/eeschema/lib_draw_item.cpp b/eeschema/lib_draw_item.cpp index f78c252ab4..4c05347cfa 100644 --- a/eeschema/lib_draw_item.cpp +++ b/eeschema/lib_draw_item.cpp @@ -1,8 +1,9 @@ /* * 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) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras at wanadoo.fr + * Copyright (C) 2015 Wayne Stambaugh + * Copyright (C) 2004-2015 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 diff --git a/eeschema/lib_draw_item.h b/eeschema/lib_draw_item.h index 9015c23a07..47ca7a4ee0 100644 --- a/eeschema/lib_draw_item.h +++ b/eeschema/lib_draw_item.h @@ -1,8 +1,9 @@ /* * 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) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras at wanadoo.fr + * Copyright (C) 2015 Wayne Stambaugh + * Copyright (C) 2004-2015 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 diff --git a/eeschema/lib_pin.cpp b/eeschema/lib_pin.cpp index 24a9218cbd..6c67f8a22a 100644 --- a/eeschema/lib_pin.cpp +++ b/eeschema/lib_pin.cpp @@ -1,8 +1,9 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr - * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2015 Wayne Stambaugh + * Copyright (C) 1992-2015 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 @@ -834,11 +835,12 @@ void LIB_PIN::drawGraphic( EDA_DRAW_PANEL* aPanel, aColor = GetInvisibleItemColor(); } - LIB_PART* Entry = GetParent(); - bool DrawPinText = true; + // aData is used here as bool: if not null, draw pin texts + //(i.e = true to draw pin texts, false to draw only the pin shape, which + // is useful to draw moving component in fast mode) - if( ( aData != NULL ) && ( (bool*) aData == false ) ) - DrawPinText = false; + LIB_PART* Entry = GetParent(); + bool drawPinText = aData ? true : false; /* Calculate pin orient taking in account the component orientation. */ int orient = PinDrawOrient( aTransform ); @@ -849,7 +851,7 @@ void LIB_PIN::drawGraphic( EDA_DRAW_PANEL* aPanel, /* Drawing from the pin and the special symbol combination */ DrawPinSymbol( aPanel, aDC, pos1, orient, aDrawMode, aColor ); - if( DrawPinText ) + if( drawPinText ) { DrawPinTexts( aPanel, aDC, pos1, orient, Entry->GetPinNameOffset(), Entry->ShowPinNumbers(), Entry->ShowPinNames(), diff --git a/eeschema/lib_pin.h b/eeschema/lib_pin.h index aecc11e83d..2e17264259 100644 --- a/eeschema/lib_pin.h +++ b/eeschema/lib_pin.h @@ -1,8 +1,9 @@ /* * 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) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras at wanadoo.fr + * Copyright (C) 2015 Wayne Stambaugh + * Copyright (C) 2004-2015 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 @@ -98,8 +99,21 @@ class LIB_PIN : public LIB_ITEM ///< "G6", or "12". It is stored as "12\0\0" and does not ///< depend on endian type. int m_numTextSize; - int m_nameTextSize; /* Pin num and Pin name sizes */ + int m_nameTextSize; ///< Pin num and Pin name sizes + /** + * Draw a pin, with or without the pin texts + * + * @param aPanel DrawPanel to use (can be null) mainly used for clipping purposes. + * @param aDC Device Context (can be null) + * @param aOffset Offset to draw + * @param aColor -1 to use the normal body item color, or use this color if >= 0 + * @param aDrawMode GR_OR, GR_XOR, ... + * @param aData = used here as bool: if not null, draw pin texts + * (i.e = true to draw pin texts, false to draw only the pin shape, which + * is useful to draw moving component in fast mode) + * @param aTransform Transform Matrix (rotation, mirror ..) + */ void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData, const TRANSFORM& aTransform ); diff --git a/eeschema/sch_bus_entry.h b/eeschema/sch_bus_entry.h index 1b0a8ab0de..09e10077bf 100644 --- a/eeschema/sch_bus_entry.h +++ b/eeschema/sch_bus_entry.h @@ -51,6 +51,14 @@ public: ~SCH_BUS_ENTRY_BASE() { } + /** + * Virtual function IsMovableFromAnchorPoint + * Return true for items which are moved with the anchor point at mouse cursor + * and false for items moved with no reference to anchor + * @return false for a bus entry + */ + bool IsMovableFromAnchorPoint() { return false; } + wxPoint m_End() const; /** diff --git a/eeschema/sch_component.cpp b/eeschema/sch_component.cpp index 90a494f8b3..49270cccf3 100644 --- a/eeschema/sch_component.cpp +++ b/eeschema/sch_component.cpp @@ -1,8 +1,8 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2009 Jean-Pierre Charras, jp.charras at wanadoo.fr - * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2015 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 @@ -327,23 +327,26 @@ int SCH_COMPONENT::GetUnitCount() const } -void SCH_COMPONENT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset, - GR_DRAWMODE DrawMode, EDA_COLOR_T Color, bool DrawPinText ) +void SCH_COMPONENT::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor, + bool aDrawPinText ) { if( PART_SPTR part = m_part.lock() ) { - part->Draw( panel, DC, m_Pos + offset, m_unit, m_convert, DrawMode, Color, m_transform, DrawPinText, false ); + part->Draw( aPanel, aDC, m_Pos + aOffset, m_unit, m_convert, aDrawMode, aColor, + m_transform, aDrawPinText, false ); } else // Use dummy() part if the actual cannot be found. { - dummy()->Draw( panel, DC, m_Pos + offset, 0, 0, DrawMode, Color, m_transform, DrawPinText, false ); + dummy()->Draw( aPanel, aDC, m_Pos + aOffset, 0, 0, aDrawMode, aColor, + m_transform, aDrawPinText, false ); } SCH_FIELD* field = GetField( REFERENCE ); if( field->IsVisible() && !field->IsMoving() ) { - field->Draw( panel, DC, offset, DrawMode ); + field->Draw( aPanel, aDC, aOffset, aDrawMode ); } for( int ii = VALUE; ii < GetFieldCount(); ii++ ) @@ -353,26 +356,26 @@ void SCH_COMPONENT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset if( field->IsMoving() ) continue; - field->Draw( panel, DC, offset, DrawMode ); + field->Draw( aPanel, aDC, aOffset, aDrawMode ); } #if 0 - // Draw the component bounding box + // Only for testing purposes, draw the component bounding box { EDA_RECT boundingBox = GetBoundingBox(); - GRRect( panel->GetClipBox(), DC, boundingBox, 0, BROWN ); + GRRect( aPanel->GetClipBox(), aDC, boundingBox, 0, BROWN ); #if 1 if( GetField( REFERENCE )->IsVisible() ) { boundingBox = GetField( REFERENCE )->GetBoundingBox(); - GRRect( panel->GetClipBox(), DC, boundingBox, 0, BROWN ); + GRRect( aPanel->GetClipBox(), aDC, boundingBox, 0, BROWN ); } if( GetField( VALUE )->IsVisible() ) { boundingBox = GetField( VALUE )->GetBoundingBox(); - GRRect( panel->GetClipBox(), DC, boundingBox, 0, BROWN ); + GRRect( aPanel->GetClipBox(), aDC, boundingBox, 0, BROWN ); } #endif } diff --git a/eeschema/sch_component.h b/eeschema/sch_component.h index 0f243736d2..514e22c2f6 100644 --- a/eeschema/sch_component.h +++ b/eeschema/sch_component.h @@ -1,8 +1,10 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com - * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2014 Dick Hollenbeck, dick@softplc.com + * Copyright (C) 2015 Wayne Stambaugh + * Copyright (C) 1992-2015 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 @@ -133,6 +135,16 @@ public: return wxT( "SCH_COMPONENT" ); } + /** + * Virtual function IsMovableFromAnchorPoint + * Return true for items which are moved with the anchor point at mouse cursor + * and false for items moved with no reference to anchor + * Usually return true for small items (labels, junctions) and false for + * items which can be large (hierarchical sheets, compoments) + * @return false for a componant + */ + bool IsMovableFromAnchorPoint() { return false; } + void SetPartName( const wxString& aName, PART_LIBS* aLibs=NULL ); const wxString& GetPartName() const { return m_part_name; } @@ -287,21 +299,30 @@ public: */ LIB_PIN* GetPin( const wxString& number ); - void Draw( EDA_DRAW_PANEL* panel, - wxDC* DC, - const wxPoint& offset, - GR_DRAWMODE draw_mode, - EDA_COLOR_T Color = UNSPECIFIED_COLOR ) + /** + * Virtual function, from the base class SCH_ITEM::Draw + */ + void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR ) { - Draw( panel, DC, offset, draw_mode, Color, true ); + Draw( aPanel, aDC, aOffset, aDrawMode, aColor, true ); } - void Draw( EDA_DRAW_PANEL* panel, - wxDC* DC, - const wxPoint& offset, - GR_DRAWMODE draw_mode, - EDA_COLOR_T Color, - bool DrawPinText ); + /** + * Function Draw, specific to components. + * Draw a component, with or without pin texts. + * @param aPanel DrawPanel to use (can be null) mainly used for clipping purposes. + * @param aDC Device Context (can be null) + * @param aOffset drawing Offset (usually wxPoint(0,0), + * but can be different when moving an object) + * @param aDrawMode GR_OR, GR_XOR, ... + * @param aColor UNSPECIFIED_COLOR to use the normal body item color, or use this color if >= 0 + * @param aDrawPinText = true to draw pin texts, false to draw only the pin shape + * usually false to draw a component when moving it, and true otherwise. + */ + void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor, + bool aDrawPinText ); void SwapData( SCH_ITEM* aItem ); diff --git a/eeschema/sch_field.cpp b/eeschema/sch_field.cpp index a1fdc2d7ab..a2b277535d 100644 --- a/eeschema/sch_field.cpp +++ b/eeschema/sch_field.cpp @@ -1,8 +1,8 @@ /* * 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) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2004-2014 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 @@ -114,8 +114,8 @@ int SCH_FIELD::GetPenSize() const } -void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, - const wxPoint& offset, GR_DRAWMODE DrawMode, EDA_COLOR_T Color ) +void SCH_FIELD::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor ) { int orient; EDA_COLOR_T color; @@ -131,14 +131,13 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, LineWidth = GetDefaultLineThickness(); } - // Clip pen size for small texts: LineWidth = Clamp_Text_PenSize( LineWidth, m_Size, m_Bold ); if( ((m_Attributs & TEXT_NO_VISIBLE) && !m_forceVisible) || IsVoid() ) return; - GRSetDrawMode( DC, DrawMode ); + GRSetDrawMode( aDC, aDrawMode ); // Calculate the text orientation according to the component orientation. orient = m_Orient; @@ -163,7 +162,7 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, * and use GetBoundaryBox to know the text coordinate considered as centered */ EDA_RECT boundaryBox = GetBoundingBox(); - textpos = boundaryBox.Centre(); + textpos = boundaryBox.Centre() + aOffset; if( m_forceVisible ) { @@ -179,8 +178,8 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, color = GetLayerColor( LAYER_FIELDS ); } - EDA_RECT* clipbox = panel? panel->GetClipBox() : NULL; - DrawGraphicText( clipbox, DC, textpos, color, GetFullyQualifiedText(), orient, m_Size, + EDA_RECT* clipbox = aPanel ? aPanel->GetClipBox() : NULL; + DrawGraphicText( clipbox, aDC, textpos, color, GetFullyQualifiedText(), orient, m_Size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, LineWidth, m_Italic, m_Bold ); @@ -191,7 +190,7 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, textpos = m_Pos - origin; textpos = parentComponent->GetScreenCoord( textpos ); textpos += parentComponent->GetPosition(); - GRLine( clipbox, DC, origin, textpos, 2, DARKGRAY ); + GRLine( clipbox, aDC, origin, textpos, 2, DARKGRAY ); } /* Enable this to draw the bounding box around the text field to validate @@ -200,7 +199,7 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, #if 0 // Draw boundary box: - GRRect( panel->GetClipBox(), DC, boundaryBox, 0, BROWN ); + GRRect( aPanel->GetClipBox(), aDC, boundaryBox, 0, BROWN ); // Draw the text anchor point @@ -210,9 +209,9 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, textpos = parentComponent->GetScreenCoord( textpos ); textpos += parentComponent->GetPosition(); const int len = 10; - GRLine( clipbox, DC, + GRLine( clipbox, aDC, textpos.x - len, textpos.y, textpos.x + len, textpos.y, 0, BLUE ); - GRLine( clipbox, DC, + GRLine( clipbox, aDC, textpos.x, textpos.y - len, textpos.x, textpos.y + len, 0, BLUE ); #endif } diff --git a/eeschema/sch_field.h b/eeschema/sch_field.h index 1092bdae24..8b458bc2ab 100644 --- a/eeschema/sch_field.h +++ b/eeschema/sch_field.h @@ -1,8 +1,8 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr - * Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2004-2015 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 @@ -134,11 +134,8 @@ public: return (m_Attributs & TEXT_NO_VISIBLE) == 0 ? true : false; } - void Draw( EDA_DRAW_PANEL* aPanel, - wxDC* aDC, - const wxPoint& aOffset, - GR_DRAWMODE aDrawMode, - EDA_COLOR_T aColor = UNSPECIFIED_COLOR ); + void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR ); bool Save( FILE* aFile ) const; diff --git a/eeschema/sch_item_struct.h b/eeschema/sch_item_struct.h index f69a79cde3..329ab85425 100644 --- a/eeschema/sch_item_struct.h +++ b/eeschema/sch_item_struct.h @@ -117,6 +117,8 @@ class SCH_ITEM : public EDA_ITEM protected: LAYERSCH_ID m_Layer; EDA_ITEMS m_connections; ///< List of items connected to this item. + wxPoint m_storedPos; ///< a temporary variable used in some move commands + ///> to store a initial pos (of the item or mouse cursor) public: SCH_ITEM( EDA_ITEM* aParent, KICAD_T aType ); @@ -141,6 +143,19 @@ public: SCH_ITEM* Next() const { return static_cast( Pnext ); } SCH_ITEM* Back() const { return static_cast( Pback ); } + /** + * Virtual function IsMovableFromAnchorPoint + * @return true for items which are moved with the anchor point at mouse cursor + * and false for items moved with no reference to anchor + * Usually return true for small items (labels, junctions) and false for + * items which can be large (hierarchical sheets, compoments) + */ + virtual bool IsMovableFromAnchorPoint() { return true; } + + wxPoint& GetStoredPos() { return m_storedPos; } + void SetStoredPos( wxPoint aPos ) { m_storedPos = aPos; } + + /** * Function GetLayer * returns the layer this item is on. @@ -162,12 +177,17 @@ public: /** * Function Draw + * Draw a schematic item. Each schematic item should have its own method + * @param aPanel DrawPanel to use (can be null) mainly used for clipping purposes. + * @param aDC Device Context (can be null) + * @param aOffset drawing Offset (usually wxPoint(0,0), + * but can be different when moving an object) + * @param aDrawMode GR_OR, GR_XOR, ... + * @param aColor UNSPECIFIED_COLOR to use the normal body item color, + * or force this color if it is a valid color */ - virtual void Draw( EDA_DRAW_PANEL* aPanel, - wxDC* aDC, - const wxPoint& aOffset, - GR_DRAWMODE aDrawMode, - EDA_COLOR_T aColor = UNSPECIFIED_COLOR ) = 0; + virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR ) = 0; /** * Function Move diff --git a/eeschema/sch_sheet.cpp b/eeschema/sch_sheet.cpp index e13340d0fc..8910ad2d7c 100644 --- a/eeschema/sch_sheet.cpp +++ b/eeschema/sch_sheet.cpp @@ -887,6 +887,14 @@ void SCH_SHEET::MirrorY( int aYaxis_position ) } } +void SCH_SHEET::SetPosition( const wxPoint& aPosition ) +{ + // Remember the sheet and all pin sheet positions must be + // modified. So use Move function to do that. + Move( aPosition - m_pos ); +} + + void SCH_SHEET::Resize( const wxSize& aSize ) { diff --git a/eeschema/sch_sheet.h b/eeschema/sch_sheet.h index a663c11e28..8ceff70e73 100644 --- a/eeschema/sch_sheet.h +++ b/eeschema/sch_sheet.h @@ -1,8 +1,8 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com - * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2015 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 @@ -95,11 +95,16 @@ public: bool operator ==( const SCH_SHEET_PIN* aPin ) const; - void Draw( EDA_DRAW_PANEL* aPanel, - wxDC* aDC, - const wxPoint& aOffset, - GR_DRAWMODE aDraw_mode, - EDA_COLOR_T aColor = UNSPECIFIED_COLOR ); + /** + * Virtual function IsMovableFromAnchorPoint + * Return true for items which are moved with the anchor point at mouse cursor + * and false for items moved with no reference to anchor + * @return false for a hierarchical sheet pin + */ + bool IsMovableFromAnchorPoint() { return false; } + + void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR ); /** * Function CreateGraphicShape (virtual) @@ -247,6 +252,15 @@ public: return wxT( "SCH_SHEET" ); } + /** + * Virtual function IsMovableFromAnchorPoint + * Return true for items which are moved with the anchor point at mouse cursor + * and false for items moved with no reference to anchor + * Usually return true for small items (labels, junctions) and false for + * items which can be large (hierarchical sheets, compoments) + * @return false for a hierarchical sheet + */ + bool IsMovableFromAnchorPoint() { return false; } wxString GetName() const { return m_name; } @@ -392,11 +406,8 @@ public: int GetPenSize() const; - void Draw( EDA_DRAW_PANEL* aPanel, - wxDC* aDC, - const wxPoint& aOffset, - GR_DRAWMODE aDrawMode, - EDA_COLOR_T aColor = UNSPECIFIED_COLOR ); + void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, + GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR ); EDA_RECT const GetBoundingBox() const; @@ -549,7 +560,7 @@ public: wxPoint GetPosition() const { return m_pos; } - void SetPosition( const wxPoint& aPosition ) { m_pos = aPosition; } + void SetPosition( const wxPoint& aPosition ); bool HitTest( const wxPoint& aPosition, int aAccuracy ) const; diff --git a/eeschema/sch_text.h b/eeschema/sch_text.h index a2384ace36..6c068da39e 100644 --- a/eeschema/sch_text.h +++ b/eeschema/sch_text.h @@ -1,8 +1,8 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com - * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2015 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 @@ -131,11 +131,8 @@ public: */ virtual wxPoint GetSchematicTextOffset() const; - virtual void Draw( EDA_DRAW_PANEL* panel, - wxDC* DC, - const wxPoint& offset, - GR_DRAWMODE draw_mode, - EDA_COLOR_T Color = UNSPECIFIED_COLOR ); + virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset, + GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR ); /** * Function CreateGraphicShape @@ -230,11 +227,8 @@ public: ~SCH_LABEL() { } - void Draw( EDA_DRAW_PANEL* panel, - wxDC* DC, - const wxPoint& offset, - GR_DRAWMODE draw_mode, - EDA_COLOR_T Color = UNSPECIFIED_COLOR ); + void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset, + GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR ); wxString GetClass() const { @@ -279,11 +273,8 @@ public: ~SCH_GLOBALLABEL() { } - void Draw( EDA_DRAW_PANEL* panel, - wxDC* DC, - const wxPoint& offset, - GR_DRAWMODE draw_mode, - EDA_COLOR_T Color = UNSPECIFIED_COLOR ); + void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset, + GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR ); wxString GetClass() const { @@ -332,11 +323,8 @@ public: ~SCH_HIERLABEL() { } - void Draw( EDA_DRAW_PANEL* panel, - wxDC* DC, - const wxPoint& offset, - GR_DRAWMODE draw_mode, - EDA_COLOR_T Color = UNSPECIFIED_COLOR ); + void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset, + GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR ); wxString GetClass() const { diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index dcad6648cf..521cb18fa2 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -443,21 +443,26 @@ void SCH_EDIT_FRAME::OnMoveItem( wxCommandEvent& aEvent ) case SCH_COMPONENT_T: case SCH_SHEET_PIN_T: case SCH_FIELD_T: - MoveItem( item, &dc ); + case SCH_SHEET_T: + PrepareMoveItem( item, &dc ); break; case SCH_BITMAP_T: + // move an image is a special case: + // we cannot undraw/redraw a bitmap just using our xor mode + // the MoveImage function handle this undraw/redraw difficulty + // By redrawing the full bounding box MoveImage( (SCH_BITMAP*) item, &dc ); break; - case SCH_SHEET_T: - StartMoveSheet( (SCH_SHEET*) item, &dc ); - break; - case SCH_MARKER_T: - default: + // Moving a marker has no sense wxFAIL_MSG( wxString::Format( wxT( "Cannot move item type %s" ), GetChars( item->GetClass() ) ) ); + default: + // Unknown items cannot be moved + wxFAIL_MSG( wxString::Format( + wxT( "Cannot move unknown item type %d" ), item->Type() ) ); break; } @@ -640,25 +645,44 @@ bool SCH_EDIT_FRAME::DeleteItemAtCrossHair( wxDC* DC ) return false; } - -static void moveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase ) +// This function is a callback function, called by the mouse cursor movin event +// when an item is currently moved +static void moveItemWithMouseCursor( EDA_DRAW_PANEL* aPanel, wxDC* aDC, + const wxPoint& aPosition, bool aErase ) { SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen(); SCH_ITEM* item = screen->GetCurItem(); wxCHECK_RET( (item != NULL), wxT( "Cannot move invalid schematic item." ) ); + SCH_COMPONENT* cmp = NULL; + + if( item->Type() == SCH_COMPONENT_T ) + cmp = static_cast< SCH_COMPONENT* >( item ); + #ifndef USE_WX_OVERLAY // Erase the current item at its current position. if( aErase ) - item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + { + if( cmp ) // Use fast mode (do not draw pin texts) + cmp->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode, UNSPECIFIED_COLOR, false ); + else + item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + } #endif - item->SetPosition( aPanel->GetParent()->GetCrossHairPosition() ); + wxPoint cpos = aPanel->GetParent()->GetCrossHairPosition(); + cpos -= item->GetStoredPos(); + + item->SetPosition( cpos ); // Draw the item item at it's new position. item->SetWireImage(); // While moving, the item may choose to render differently - item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + + if( cmp ) // Use fast mode (do not draw pin texts) + cmp->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode, UNSPECIFIED_COLOR, false ); + else + item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); } @@ -714,7 +738,7 @@ static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) } -void SCH_EDIT_FRAME::MoveItem( SCH_ITEM* aItem, wxDC* aDC ) +void SCH_EDIT_FRAME::PrepareMoveItem( SCH_ITEM* aItem, wxDC* aDC ) { wxCHECK_RET( aItem != NULL, wxT( "Cannot move invalid schematic item" ) ); @@ -729,22 +753,27 @@ void SCH_EDIT_FRAME::MoveItem( SCH_ITEM* aItem, wxDC* aDC ) } aItem->SetFlags( IS_MOVED ); -#ifdef USE_WX_OVERLAY - this->Refresh(); - this->Update(); -#endif - m_canvas->CrossHairOff( aDC ); - if( aItem->Type() != SCH_SHEET_PIN_T ) + // For some items, moving the cursor to anchor is not good + // (for instance large hierarchical sheets od componants can have + // the anchor position outside the canvas) + // these items return IsMovableFromAnchorPoint() == false + // For these items, do not wrap the cursor + if( aItem->IsMovableFromAnchorPoint() ) + { SetCrossHairPosition( aItem->GetPosition() ); + m_canvas->MoveCursorToCrossHair(); + aItem->SetStoredPos( wxPoint( 0,0 ) ); + } + else + aItem->SetStoredPos( GetCrossHairPosition() - aItem->GetPosition() ); - m_canvas->MoveCursorToCrossHair(); OnModify(); - m_canvas->SetMouseCapture( moveItem, abortMoveItem ); + m_canvas->SetMouseCapture( moveItemWithMouseCursor, abortMoveItem ); GetScreen()->SetCurItem( aItem ); - moveItem( m_canvas, aDC, wxDefaultPosition, true ); - m_canvas->CrossHairOn( aDC ); + + m_canvas->Refresh(); } diff --git a/eeschema/schframe.h b/eeschema/schframe.h index bb58662eed..de58e78eeb 100644 --- a/eeschema/schframe.h +++ b/eeschema/schframe.h @@ -846,13 +846,13 @@ private: SCH_JUNCTION* AddJunction( wxDC* aDC, const wxPoint& aPosition, bool aPutInUndoList = false ); /** - * Function MoveItem + * Function PrepareMoveItem * start moving \a aItem using the mouse. * * @param aItem A pointer to an SCH_ITEM to move. * @param aDC The device context to draw \a aItem. */ - void MoveItem( SCH_ITEM* aItem, wxDC* aDC ); + void PrepareMoveItem( SCH_ITEM* aItem, wxDC* aDC ); // Text, label, glabel SCH_TEXT* CreateNewText( wxDC* aDC, int aType ); @@ -947,8 +947,6 @@ public: wxPoint GetLastSheetPinPosition() const { return m_lastSheetPinPosition; } private: - void StartMoveSheet( SCH_SHEET* sheet, wxDC* DC ); - /** * Function CreateSheetPin * creates a new SCH_SHEET_PIN object and add it to \a aSheet at the current cursor position. diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index 59b4b44d30..c3b6db7c5a 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -251,9 +251,11 @@ bool SCH_EDIT_FRAME::EditSheet( SCH_SHEET* aSheet, wxDC* aDC ) /* Move selected sheet with the cursor. - * Callback function use by m_mouseCaptureCallback. + * Callback function used by m_mouseCaptureCallback. + * Note also now this function is aclled only when resizing the sheet + * But the (very small code) relative to sheet move is still present here */ -static void MoveOrResizeSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, +static void resizeSheetWithMouseCursor( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase ) { wxPoint moveVector; @@ -265,37 +267,29 @@ static void MoveOrResizeSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& wxPoint pos = sheet->GetPosition(); - if( sheet->IsResized() ) + int width = aPanel->GetParent()->GetCrossHairPosition().x - sheet->GetPosition().x; + int height = aPanel->GetParent()->GetCrossHairPosition().y - sheet->GetPosition().y; + + // If the sheet doesn't have any pins, clamp the minimum size to the default values. + width = ( width < MIN_SHEET_WIDTH ) ? MIN_SHEET_WIDTH : width; + height = ( height < MIN_SHEET_HEIGHT ) ? MIN_SHEET_HEIGHT : height; + + if( sheet->HasPins() ) { - int width = aPanel->GetParent()->GetCrossHairPosition().x - sheet->GetPosition().x; - int height = aPanel->GetParent()->GetCrossHairPosition().y - sheet->GetPosition().y; + int gridSizeX = KiROUND( screen->GetGridSize().x ); + int gridSizeY = KiROUND( screen->GetGridSize().y ); - // If the sheet doesn't have any pins, clamp the minimum size to the default values. - width = ( width < MIN_SHEET_WIDTH ) ? MIN_SHEET_WIDTH : width; - height = ( height < MIN_SHEET_HEIGHT ) ? MIN_SHEET_HEIGHT : height; - - if( sheet->HasPins() ) - { - int gridSizeX = KiROUND( screen->GetGridSize().x ); - int gridSizeY = KiROUND( screen->GetGridSize().y ); - - // If the sheet has pins, use the pin positions to clamp the minimum height. - height = ( height < sheet->GetMinHeight() + gridSizeY ) ? - sheet->GetMinHeight() + gridSizeY : height; - width = ( width < sheet->GetMinWidth() + gridSizeX ) ? - sheet->GetMinWidth() + gridSizeX : width; - } - - wxPoint grid = aPanel->GetParent()->GetNearestGridPosition( - wxPoint( pos.x + width, pos.y + height ) ); - sheet->Resize( wxSize( grid.x - pos.x, grid.y - pos.y ) ); - } - else if( sheet->IsMoving() ) - { - moveVector = aPanel->GetParent()->GetCrossHairPosition() - pos; - sheet->Move( moveVector ); + // If the sheet has pins, use the pin positions to clamp the minimum height. + height = ( height < sheet->GetMinHeight() + gridSizeY ) ? + sheet->GetMinHeight() + gridSizeY : height; + width = ( width < sheet->GetMinWidth() + gridSizeX ) ? + sheet->GetMinWidth() + gridSizeX : width; } + wxPoint grid = aPanel->GetParent()->GetNearestGridPosition( + wxPoint( pos.x + width, pos.y + height ) ); + sheet->Resize( wxSize( grid.x - pos.x, grid.y - pos.y ) ); + sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); } @@ -360,7 +354,7 @@ SCH_SHEET* SCH_EDIT_FRAME::CreateSheet( wxDC* aDC ) // also need to update the hierarchy, if we are adding // a sheet to a screen that already has multiple instances (!) GetScreen()->SetCurItem( sheet ); - m_canvas->SetMouseCapture( MoveOrResizeSheet, ExitSheet ); + m_canvas->SetMouseCapture( resizeSheetWithMouseCursor, ExitSheet ); m_canvas->CallMouseCapture( aDC, wxDefaultPosition, false ); m_canvas->CrossHairOff( aDC ); @@ -390,28 +384,10 @@ void SCH_EDIT_FRAME::ReSizeSheet( SCH_SHEET* aSheet, wxDC* aDC ) SetUndoItem( aSheet ); aSheet->SetFlags( IS_RESIZED ); - m_canvas->SetMouseCapture( MoveOrResizeSheet, ExitSheet ); + m_canvas->SetMouseCapture( resizeSheetWithMouseCursor, ExitSheet ); m_canvas->CallMouseCapture( aDC, wxDefaultPosition, true ); if( aSheet->IsNew() ) // not already in edit, save a copy for undo/redo SetUndoItem( aSheet ); } - -void SCH_EDIT_FRAME::StartMoveSheet( SCH_SHEET* aSheet, wxDC* aDC ) -{ - if( ( aSheet == NULL ) || ( aSheet->Type() != SCH_SHEET_T ) ) - return; - - m_canvas->CrossHairOff( aDC ); - SetCrossHairPosition( aSheet->GetPosition() ); - m_canvas->MoveCursorToCrossHair(); - - if( !aSheet->IsNew() ) - SetUndoItem( aSheet ); - - aSheet->SetFlags( IS_MOVED ); - m_canvas->SetMouseCapture( MoveOrResizeSheet, ExitSheet ); - m_canvas->CallMouseCapture( aDC, wxDefaultPosition, true ); - m_canvas->CrossHairOn( aDC ); -} diff --git a/eeschema/sheetlab.cpp b/eeschema/sheetlab.cpp index c853b72950..9f9079201b 100644 --- a/eeschema/sheetlab.cpp +++ b/eeschema/sheetlab.cpp @@ -128,7 +128,7 @@ SCH_SHEET_PIN* SCH_EDIT_FRAME::CreateSheetPin( SCH_SHEET* aSheet, wxDC* aDC ) sheetPin->SetPosition( GetCrossHairPosition() ); sheetPin->Draw( m_canvas, aDC, wxPoint( 0, 0 ), g_XorMode ); - MoveItem( (SCH_ITEM*) sheetPin, aDC ); + PrepareMoveItem( (SCH_ITEM*) sheetPin, aDC ); OnModify(); return sheetPin; @@ -174,7 +174,7 @@ SCH_SHEET_PIN* SCH_EDIT_FRAME::ImportSheetPin( SCH_SHEET* aSheet, wxDC* aDC ) sheetPin->SetPosition( GetCrossHairPosition() ); sheetPin->Draw( m_canvas, aDC, wxPoint( 0, 0 ), g_XorMode ); - MoveItem( (SCH_ITEM*) sheetPin, aDC ); + PrepareMoveItem( (SCH_ITEM*) sheetPin, aDC ); return sheetPin; } diff --git a/scripts/bom-in-python/README-bom.txt b/scripts/bom-in-python/README-bom.txt index 89e10c19a7..7a53d7d7da 100644 --- a/scripts/bom-in-python/README-bom.txt +++ b/scripts/bom-in-python/README-bom.txt @@ -1,7 +1,7 @@ bom_?.py are some python scripts which read a generic xml netlist from eeschema, and create a bom. -All examples use ky_netlist_reader.py, which is a python utility to read +All examples use kicad_netlist_reader.py, which is a python utility to read and parse this generic xml netlist and create the corresponding data used to build the bom. diff --git a/scripts/bom-in-python/bom_csv_by_ref.py b/scripts/bom-in-python/bom_csv_by_ref.py index d30e8cdcb7..60a72d06a8 100644 --- a/scripts/bom-in-python/bom_csv_by_ref.py +++ b/scripts/bom-in-python/bom_csv_by_ref.py @@ -3,11 +3,12 @@ # """ @package - Generate a csv list file. - Components are sorted by ref and grouped by value + Generate a BOM list file. + Components are sorted by ref One component per line Fields are (if exist) Ref, Quantity, value, Part, footprint, 'Description', 'Vendor' + Fields are separated by tabs """ from __future__ import print_function @@ -38,7 +39,8 @@ out = csv.writer(f, lineterminator='\n', delimiter='\t', quoting=csv.QUOTE_NONE) def writerow( acsvwriter, columns ): utf8row = [] for col in columns: - utf8row.append( str(col).encode('utf8') ) + txt=str(col); + utf8row.append( txt.encode('utf-8') ) acsvwriter.writerow( utf8row ) components = net.getInterestingComponents() diff --git a/scripts/bom-in-python/bom_csv_by_ref_v2.py b/scripts/bom-in-python/bom_csv_by_ref_v2.py index c82c3286bb..9c81b89935 100644 --- a/scripts/bom-in-python/bom_csv_by_ref_v2.py +++ b/scripts/bom-in-python/bom_csv_by_ref_v2.py @@ -7,7 +7,7 @@ """ @package Generate a csv list file. - Components are sorted by ref and grouped by value + Components are sorted by ref One component per line Fields are (if exist) Ref, value, Part, footprint, Datasheet, Manufacturer, Vendor