bool WinEDA_DrawFrame::HandleBlockBegin(wxDC * DC, int key, const wxPoint & startpos) /*************************************************************************/ /* First command block function: Init the Block infos: command type, initial position, and other variables.. */ { DrawBlockStruct * Block = & GetScreen()->BlockLocate; if ( (Block->m_Command != BLOCK_IDLE) || ( Block->m_State != STATE_NO_BLOCK) ) return FALSE; Block->m_Flags = 0; Block->m_Command = (CmdBlockType) ReturnBlockCommand(key); if ( Block->m_Command == 0 ) return FALSE; switch(Block->m_Command) { case BLOCK_IDLE: break; case BLOCK_MOVE: /* Move */ case BLOCK_DRAG: /* Drag */ case BLOCK_COPY: /* Copy */ case BLOCK_DELETE: /* Delete */ case BLOCK_SAVE: /* Save */ case BLOCK_ROTATE: /* Rotate 90 deg */ case BLOCK_INVERT: /* Flip */ case BLOCK_ZOOM: /* Window Zoom */ case BLOCK_MIRROR_X: case BLOCK_MIRROR_Y: /* mirror */ case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/ InitBlockLocateDatas(GetScreen(),startpos); break; case BLOCK_PASTE: InitBlockLocateDatas(GetScreen(),startpos); Block->m_BlockLastCursorPosition.x = 0; Block->m_BlockLastCursorPosition.y = 0; InitBlockPasteInfos(); if( Block->m_BlockDrawStruct == NULL ) /* No data to paste */ { DisplayError(this, wxT("No Block to paste"), 20); GetScreen()->BlockLocate.m_Command = BLOCK_IDLE; GetScreen()->ManageCurseur = NULL; return TRUE; } if ( GetScreen()->ManageCurseur == NULL ) { Block->m_BlockDrawStruct = NULL; DisplayError(this, wxT("WinEDA_DrawFrame::HandleBlockBegin() Err: ManageCurseur NULL")); return TRUE; } Block->m_State = STATE_BLOCK_MOVE; GetScreen()->ManageCurseur(DrawPanel, DC, FALSE); break; default: DisplayError(this, wxT("WinEDA_DrawFrame::HandleBlockBegin() error: Unknown command")); break; } Block->SetMessageBlock(this); return TRUE; }
bool EDA_DRAW_FRAME::HandleBlockBegin( wxDC* aDC, int aKey, const wxPoint& aPosition ) { BLOCK_SELECTOR* Block = &GetScreen()->m_BlockLocate; if( ( Block->GetCommand() != BLOCK_IDLE ) || ( Block->GetState() != STATE_NO_BLOCK ) ) return false; Block->SetCommand( (BLOCK_COMMAND_T) BlockCommand( aKey ) ); if( Block->GetCommand() == 0 ) return false; switch( Block->GetCommand() ) { case BLOCK_IDLE: break; case BLOCK_MOVE: // Move case BLOCK_DRAG: // Drag (block defined) case BLOCK_DRAG_ITEM: // Drag from a drag item command case BLOCK_COPY: // Copy case BLOCK_DELETE: // Delete case BLOCK_SAVE: // Save case BLOCK_ROTATE: // Rotate 90 deg case BLOCK_FLIP: // Flip case BLOCK_ZOOM: // Window Zoom case BLOCK_MIRROR_X: case BLOCK_MIRROR_Y: // mirror case BLOCK_PRESELECT_MOVE: // Move with preselection list Block->InitData( m_canvas, aPosition ); break; case BLOCK_PASTE: Block->InitData( m_canvas, aPosition ); Block->SetLastCursorPosition( wxPoint( 0, 0 ) ); InitBlockPasteInfos(); if( Block->GetCount() == 0 ) // No data to paste { DisplayError( this, wxT( "No Block to paste" ), 20 ); GetScreen()->m_BlockLocate.SetCommand( BLOCK_IDLE ); m_canvas->SetMouseCaptureCallback( NULL ); return true; } if( !m_canvas->IsMouseCaptured() ) { Block->ClearItemsList(); DisplayError( this, wxT( "EDA_DRAW_FRAME::HandleBlockBegin() Err: m_mouseCaptureCallback NULL" ) ); return true; } Block->SetState( STATE_BLOCK_MOVE ); m_canvas->CallMouseCapture( aDC, aPosition, false ); break; default: { wxString msg; msg << wxT( "EDA_DRAW_FRAME::HandleBlockBegin() error: Unknown command " ) << Block->GetCommand(); DisplayError( this, msg ); } break; } Block->SetMessageBlock( this ); return true; }