Moved common actions to a separate file.

This commit is contained in:
Maciej Suminski 2013-09-27 20:52:34 +02:00
parent 6b74b5771a
commit 35721397bd
9 changed files with 118 additions and 46 deletions

View File

@ -66,7 +66,7 @@ void ACTION_MANAGER::UnregisterAction( TOOL_ACTION* aAction )
int ACTION_MANAGER::MakeActionId( const std::string& aActionName )
{
static int currentActionId = 0;
static int currentActionId = 1;
return currentActionId++;
}

View File

@ -228,6 +228,7 @@ set( PCBNEW_CLASS_SRCS
tools/bright_box.cpp
tools/move_tool.cpp
tools/pcb_tools.cpp
tools/common_actions.cpp
)
set( PCBNEW_SRCS ${PCBNEW_AUTOROUTER_SRCS} ${PCBNEW_CLASS_SRCS} ${PCBNEW_DIALOGS} )

View File

@ -0,0 +1,44 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 CERN
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* 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
*/
#include "common_actions.h"
#include <tool/action_manager.h>
// Selection tool actions
TOOL_ACTION COMMON_ACTIONS::selectionActivate( "pcbnew.InteractiveSelection",
AS_GLOBAL, 'S',
"Selection tool", "Allows to select items" );
// Move tool actions
TOOL_ACTION COMMON_ACTIONS::moveActivate( "pcbnew.InteractiveMove",
AS_GLOBAL, 'M',
"Move", "Moves the selected item(s)" );
TOOL_ACTION COMMON_ACTIONS::rotate( "pcbnew.InteractiveMove.rotate",
AS_CONTEXT, ' ',
"Rotate", "Rotates selected item(s)" );
TOOL_ACTION COMMON_ACTIONS::flip( "pcbnew.InteractiveMove.flip",
AS_CONTEXT, 'F',
"Flip", "Flips selected item(s)" );

View File

@ -0,0 +1,49 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 CERN
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* 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
*/
#include <tool/tool_action.h>
class ACTION_MANAGER;
/**
* Class COMMON_ACTIONS
*
* Gathers all the actions that are shared by tools. The instance of COMMON_ACTIOSN is created
* inside of ACTION_MANAGER object and registers them.
*/
class COMMON_ACTIONS
{
public:
/// Activation of the move tool
static TOOL_ACTION moveActivate;
/// Activation of the selection tool
static TOOL_ACTION selectionActivate;
/// Rotation of selected objects
static TOOL_ACTION rotate;
/// Flipping of selected objects
static TOOL_ACTION flip;
};

View File

@ -25,9 +25,9 @@
#include <class_board.h>
#include <class_module.h>
#include <tool/tool_manager.h>
#include <tool/tool_action.h>
#include <view/view_controls.h>
#include "common_actions.h"
#include "selection_tool.h"
#include "move_tool.h"
@ -35,12 +35,7 @@ using namespace KiGfx;
using boost::optional;
MOVE_TOOL::MOVE_TOOL() :
TOOL_INTERACTIVE( "pcbnew.InteractiveMove" ), m_selectionTool( NULL ),
// Available actions:
m_activate( m_toolName, AS_GLOBAL, 'M', "Move", "Moves the selected item(s)" ),
m_rotate( m_toolName + ".rotate", AS_CONTEXT, ' ', "Rotate", "Rotates selected item(s)" ),
m_flip( m_toolName + ".flip", AS_CONTEXT, 'F', "Flip", "Flips selected item(s)" )
TOOL_INTERACTIVE( "pcbnew.InteractiveMove" ), m_selectionTool( NULL )
{
}
@ -53,7 +48,7 @@ MOVE_TOOL::~MOVE_TOOL()
void MOVE_TOOL::Reset()
{
// The tool launches upon reception of action event ("pcbnew.InteractiveMove")
Go( &MOVE_TOOL::Main, m_activate.MakeEvent() );
Go( &MOVE_TOOL::Main, COMMON_ACTIONS::moveActivate.MakeEvent() );
}
@ -66,15 +61,10 @@ bool MOVE_TOOL::Init()
{
m_selectionTool = static_cast<SELECTION_TOOL*>( selectionTool );
// Activate hot keys
m_toolMgr->RegisterAction( &m_activate );
m_toolMgr->RegisterAction( &m_rotate );
m_toolMgr->RegisterAction( &m_flip );
// Add context menu entries that are displayed when selection tool is active
m_selectionTool->AddMenuItem( m_activate );
m_selectionTool->AddMenuItem( m_rotate );
m_selectionTool->AddMenuItem( m_flip );
m_selectionTool->AddMenuItem( COMMON_ACTIONS::moveActivate );
m_selectionTool->AddMenuItem( COMMON_ACTIONS::rotate );
m_selectionTool->AddMenuItem( COMMON_ACTIONS::flip );
}
else
{
@ -115,12 +105,12 @@ int MOVE_TOOL::Main( TOOL_EVENT& aEvent )
{
VECTOR2D cursorPos = getView()->ToWorld( getViewControls()->GetCursorPosition() );
if( evt->IsAction( &m_rotate ) ) // got rotation event?
if( evt->IsAction( &COMMON_ACTIONS::rotate ) ) // got rotation event?
{
m_state.Rotate( cursorPos, 900.0 );
m_items.ViewUpdate( VIEW_ITEM::GEOMETRY );
}
else if( evt->IsAction( &m_flip ) ) // got flip event?
else if( evt->IsAction( &COMMON_ACTIONS::flip ) ) // got flip event?
{
m_state.Flip( cursorPos );
m_items.ViewUpdate( VIEW_ITEM::GEOMETRY );

View File

@ -85,15 +85,6 @@ private:
/// VIEW_GROUP that helds currently moved items
KiGfx::VIEW_GROUP m_items;
/// Register hotkey for activation of the move tool
TOOL_ACTION m_activate;
/// Register hotkey for rotation of selected objects
TOOL_ACTION m_rotate;
/// Register hotkey for flipping of selected objects
TOOL_ACTION m_flip;
};
#endif

View File

@ -36,6 +36,7 @@
#include "selection_tool.h"
#include "move_tool.h"
#include "common_actions.h"
#include <router/router_tool.h>
void PCB_EDIT_FRAME::setupTools()
@ -45,6 +46,12 @@ void PCB_EDIT_FRAME::setupTools()
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, this );
m_galCanvas->SetEventDispatcher( m_toolDispatcher );
// Register tool actions
m_toolManager->RegisterAction( &COMMON_ACTIONS::moveActivate );
m_toolManager->RegisterAction( &COMMON_ACTIONS::selectionActivate );
m_toolManager->RegisterAction( &COMMON_ACTIONS::rotate );
m_toolManager->RegisterAction( &COMMON_ACTIONS::flip );
// Register tools
m_toolManager->RegisterTool( new SELECTION_TOOL );
m_toolManager->RegisterTool( new ROUTER_TOOL );
@ -54,6 +61,11 @@ void PCB_EDIT_FRAME::setupTools()
void PCB_EDIT_FRAME::destroyTools()
{
m_toolManager->UnregisterAction( &COMMON_ACTIONS::moveActivate );
m_toolManager->UnregisterAction( &COMMON_ACTIONS::selectionActivate );
m_toolManager->UnregisterAction( &COMMON_ACTIONS::rotate );
m_toolManager->UnregisterAction( &COMMON_ACTIONS::flip );
delete m_toolDispatcher;
delete m_toolManager;
}

View File

@ -44,13 +44,13 @@
#include "selection_tool.h"
#include "selection_area.h"
#include "bright_box.h"
#include "common_actions.h"
using namespace KiGfx;
using boost::optional;
SELECTION_TOOL::SELECTION_TOOL() :
TOOL_INTERACTIVE( "pcbnew.InteractiveSelection" ), m_multiple( false ),
m_activate( m_toolName, AS_GLOBAL, 'S', "Selection tool", "Allows to select items" )
TOOL_INTERACTIVE( "pcbnew.InteractiveSelection" ), m_multiple( false )
{
m_selArea = new SELECTION_AREA;
}
@ -68,15 +68,7 @@ void SELECTION_TOOL::Reset()
m_selectedItems.clear();
// The tool launches upon reception of action event ("pcbnew.InteractiveSelection")
Go( &SELECTION_TOOL::Main, m_activate.MakeEvent() );
}
bool SELECTION_TOOL::Init()
{
m_toolMgr->RegisterAction( &m_activate );
return true;
Go( &SELECTION_TOOL::Main, COMMON_ACTIONS::selectionActivate.MakeEvent() );
}

View File

@ -30,7 +30,6 @@
#include <math/vector2d.h>
#include <tool/tool_interactive.h>
#include <tool/tool_action.h>
#include <tool/context_menu.h>
class SELECTION_AREA;
@ -58,9 +57,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset();
/// @copydoc TOOL_INTERACTIVE::Init()
bool Init();
/**
* Function Main()
*
@ -194,9 +190,6 @@ private:
/// Flag saying if multiple selection mode is active
bool m_multiple;
/// Register hotkey fot activation of the selection tool
TOOL_ACTION m_activate;
/// Right click popup menu
CONTEXT_MENU m_menu;
};