Add mouse gestures to List Hotkeys.

Fixes: lp:1778437
* https://bugs.launchpad.net/kicad/+bug/1778437
This commit is contained in:
Jeff Young 2019-06-12 15:39:47 +01:00
parent 4043a15482
commit 158e05adea
6 changed files with 65 additions and 10 deletions

View File

@ -24,9 +24,28 @@
#include <hotkey_store.h>
#include <tool/tool_manager.h>
#include <tool/action_manager.h>
#include <tool/tool_event.h>
#include <tool/tool_action.h>
class GESTURE_PSEUDO_ACTION : public TOOL_ACTION
{
public:
GESTURE_PSEUDO_ACTION( const wxString& aLabel, int aHotKey )
{
m_label = aLabel;
m_hotKey = aHotKey;
}
};
static GESTURE_PSEUDO_ACTION g_gesturePseudoActions[] = {
GESTURE_PSEUDO_ACTION( _( "Highlight Net" ), MD_CTRL + PSEUDO_WXK_LMB ),
GESTURE_PSEUDO_ACTION( _( "Clear Net Highlighting" ), MD_CTRL + PSEUDO_WXK_LMB ),
GESTURE_PSEUDO_ACTION( _( "Pan Left/Right" ), MD_CTRL + PSEUDO_WXK_WHEEL ),
GESTURE_PSEUDO_ACTION( _( "Pan Up/Down" ), MD_SHIFT + PSEUDO_WXK_WHEEL ),
};
wxString HOTKEY_STORE::GetAppName( TOOL_ACTION* aAction )
{
wxString name( aAction->GetName() );
@ -50,7 +69,7 @@ wxString HOTKEY_STORE::GetSectionName( TOOL_ACTION* aAction )
if( s_AppNames.count( appName ) )
return s_AppNames[ appName ];
else
return wxT( "XXX" + appName );
return appName;
}
@ -81,7 +100,6 @@ void HOTKEY_STORE::Init( std::vector<TOOL_MANAGER*> aToolManagerList )
wxString currentApp;
HOTKEY_SECTION* currentSection = nullptr;
HOTKEY* currentHotKey = nullptr;
for( const auto& entry : masterMap )
{
@ -95,11 +113,15 @@ void HOTKEY_STORE::Init( std::vector<TOOL_MANAGER*> aToolManagerList )
currentSection->m_SectionName = GetSectionName( entry.second );
}
currentSection->m_HotKeys.emplace_back( HOTKEY() );
currentHotKey = &currentSection->m_HotKeys.back();
currentHotKey->m_Parent = entry.second;
currentHotKey->m_EditKeycode = entry.second->GetHotKey();
currentSection->m_HotKeys.emplace_back( HOTKEY( entry.second ) );
}
m_hk_sections.emplace_back( HOTKEY_SECTION() );
currentSection = &m_hk_sections.back();
currentSection->m_SectionName = _( "Gestures" );
for( TOOL_ACTION& gesture : g_gesturePseudoActions )
currentSection->m_HotKeys.emplace_back( HOTKEY( &gesture ) );
}

View File

@ -98,6 +98,11 @@ static struct hotkey_name_descr hotkeyNameList[] =
{ wxT( "<unassigned>" ), 0 },
{ wxT( "Left Button" ), PSEUDO_WXK_LMB },
{ wxT( "Middle Button" ), PSEUDO_WXK_MMB },
{ wxT( "Right Button" ), PSEUDO_WXK_RMB },
{ wxT( "Mouse Wheel" ), PSEUDO_WXK_WHEEL },
// Do not change this line: end of list
{ wxT( "" ), KEY_NON_FOUND }
};

View File

@ -48,6 +48,18 @@ TOOL_ACTION::TOOL_ACTION( const std::string& aName, TOOL_ACTION_SCOPE aScope,
}
TOOL_ACTION::TOOL_ACTION() :
m_scope( AS_GLOBAL ),
m_defaultHotKey( 0 ),
m_icon( nullptr ),
m_id( -1 ),
m_flags( AF_NONE ),
m_param( nullptr )
{
SetHotKey( 0 );
}
TOOL_ACTION::~TOOL_ACTION()
{
ACTION_MANAGER::GetActionList().remove( this );

View File

@ -25,6 +25,7 @@
#define HOTKEY_STORE__H
#include <hotkeys_basic.h>
#include <tool/tool_action.h>
class TOOL_MANAGER;
@ -33,6 +34,11 @@ struct HOTKEY
{
TOOL_ACTION* m_Parent;
int m_EditKeycode;
HOTKEY( TOOL_ACTION* aParent ) :
m_Parent( aParent ),
m_EditKeycode( aParent->GetHotKey() )
{ }
};

View File

@ -44,6 +44,14 @@ class TOOL_MANAGER;
class EDA_BASE_FRAME;
/*
* Keep these out of the ASCII range, and out of the WXK range
*/
#define PSEUDO_WXK_LMB 400
#define PSEUDO_WXK_MMB 401
#define PSEUDO_WXK_RMB 402
#define PSEUDO_WXK_WHEEL 403
/**
* Function KeyCodeFromKeyName
* return the key code from its user-friendly key name (ie: "Ctrl+M")

View File

@ -150,7 +150,9 @@ public:
return m_icon;
}
private:
protected:
TOOL_ACTION();
friend class ACTION_MANAGER;
/// Name of the action (convention is "app.tool.actionName")
@ -161,7 +163,7 @@ private:
int m_hotKey; // The curret hotkey (post-user-settings-application)
const std::string m_legacyName; // Name for reading legacy hotkey settings
const wxString m_label;
wxString m_label;
wxString m_menuItem; // Label + hotkey text for menus
wxString m_tooltip;
const BITMAP_OPAQUE* m_icon; // Icon for the menu entry