Browse Source

Pcbnew fix: "create array" extremely slow in GAL mode, due to a useless call of a time consuming method for each new item created.

pull/3/merge
jean-pierre charras 9 years ago
parent
commit
a35a46804e
  1. 4
      pcbnew/array_creator.cpp
  2. 18
      pcbnew/tools/edit_tool.cpp
  3. 2
      pcbnew/tools/pcbnew_control.cpp

4
pcbnew/array_creator.cpp

@ -27,7 +27,6 @@
*/
#include "array_creator.h"
#include <board_commit.h>
#include <dialogs/dialog_create_array.h>
@ -41,7 +40,6 @@ void ARRAY_CREATOR::Invoke()
if( numItems == 0 )
return;
BOARD_COMMIT commit( &m_parent );
MODULE* const module = getModule();
const bool isModuleEditor = module != NULL;
@ -56,6 +54,8 @@ void ARRAY_CREATOR::Invoke()
if( ret != wxID_OK || array_opts == NULL )
return;
BOARD_COMMIT commit( &m_parent );
for ( int i = 0; i < numItems; ++i )
{
BOARD_ITEM* item = getNthItemToArray( i );

18
pcbnew/tools/edit_tool.cpp

@ -828,7 +828,7 @@ int EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
}
return 0;
};
}
class GAL_ARRAY_CREATOR: public ARRAY_CREATOR
@ -873,10 +873,20 @@ private:
return wxPoint( rp.x, rp.y );
}
void prePushAction( BOARD_ITEM* new_item ) override
void prePushAction( BOARD_ITEM* aItem ) override
{
m_parent.GetToolManager()->RunAction( PCB_ACTIONS::unselectItem,
true, new_item );
// Because aItem is/can be created from a selected item, and inherits from
// it this state, reset the selected stated of aItem:
aItem->ClearSelected();
if( aItem->Type() == PCB_MODULE_T )
{
static_cast<MODULE*>( aItem )->RunOnChildren( [&] ( BOARD_ITEM* item )
{
item->ClearSelected();
}
);
}
}
void postPushAction( BOARD_ITEM* new_item ) override

2
pcbnew/tools/pcbnew_control.cpp

@ -906,7 +906,7 @@ int PCBNEW_CONTROL::AppendBoard( const TOOL_EVENT& aEvent )
board->GetRatsnest()->ProcessBoard();
// Start dragging the appended board
if( selection.Front() ) // be sure at least one item is selected
if( selection.Size() ) // be sure at least one item is loaded
{
// Inform other potentially interested tools
m_toolMgr->ProcessEvent( SELECTION_TOOL::SelectedEvent );

Loading…
Cancel
Save