@ -1,3 +1,29 @@
/*
* This program source code file is part of KiCad , a free EDA CAD application .
*
* Copyright ( C ) 2004 - 2014 KiCad Developers , see CHANGELOG . 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
* 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
*/
/**
* @ file dialog_hotkeys_editor . h
*/
# ifndef __dialog_hotkeys_editor__
# define __dialog_hotkeys_editor__
@ -22,14 +48,40 @@
class HOTKEYS_EDITOR_DIALOG ;
/**
* Class HOTKEY_LIST_CTRL
* is a class to contain the contents of a hotkey editor tab page .
*/
class HOTKEY_LIST_CTRL : public wxListCtrl
{
public :
HOTKEY_LIST_CTRL ( wxWindow * aParent , struct EDA_HOTKEY_CONFIG * aSection ) ;
~ HOTKEY_LIST_CTRL ( ) { } ;
/**
* Function DeselectRow
* Deselect the given row
*
* @ param aRow is the row to deselect
*/
void DeselectRow ( int aRow ) ;
/**
* Function GetHotkeys
* Access to return the vector used for the list control data . This will contain the
* " live " state of the user ' s configuration .
*
* @ return Pointer to vector of hotkey settings
*/
std : : vector < EDA_HOTKEY * > & GetHotkeys ( ) { return m_hotkeys ; }
/**
* Function RestoreFrom
* Restores list control hotkey keycodes to the keycodes present in the
* given hotkey configuration array .
*
* @ param aSection is a pointer to the hotkey configuration array
*/
void RestoreFrom ( struct EDA_HOTKEY_CONFIG * aSection ) ;
private :
@ -37,13 +89,56 @@ private:
wxString * m_sectionTag ;
std : : vector < EDA_HOTKEY * > m_hotkeys ;
/**
* Function recalculateColumns
* Adjusts the width of grid columns in proportion of the max text length of both
*/
void recalculateColumns ( ) ;
protected :
/**
* Function OnGetItemText
* Returns the requested row , column data to the list control .
*
* @ param aRow is the row of the data which matches our hotkeys vector as a index
* @ param aColumn is the column of the data which is either Command ( 0 ) or KeyCode ( 1 )
*
* @ return String containing the text for the specified row , column combination
*/
wxString OnGetItemText ( long aRow , long aColumn ) const ;
/**
* Function OnChar
* Decoded key press handler which is used to set key codes in the list control
*
* @ param aEvent is the key press event , the keycode is retrieved from it
*/
void OnChar ( wxKeyEvent & aEvent ) ;
/**
* Function OnListItemSelected
* Item selection handler which is used to record what index is selected to alter
* update with the key press
*
* @ param aEvent is the button press event , unused
*/
void OnListItemSelected ( wxListEvent & aEvent ) ;
/**
* Function OnSize
* Sizing update handler to recompute the column widths dynamically and maximize them .
* Due to wxWidget ' s broken autosizing support ( it ' s completely inconsistent across
* platforms ) , we just do it based on a scale of
*
* @ param aEvent is the button press event , unused
*/
void OnSize ( wxSizeEvent & aEvent ) ;
} ;
/**
* Class HOTKEY_SECTION_PAGE
* is a class to contain the contents of a hotkey editor tab page .
*/
class HOTKEY_SECTION_PAGE : public wxPanel
{
public :
@ -59,25 +154,53 @@ public:
* @ param title = title ( name ) of the notebook page
* @ param id_NetType = netlist type id
*/
HOTKEY_SECTION_PAGE ( HOTKEYS_EDITOR_DIALOG * aDialog , wxNotebook * aParent ,
HOTKEY_SECTION_PAGE ( HOTKEYS_EDITOR_DIALOG * aDialog , wxNotebook * aParent ,
const wxString & aTitle ,
EDA_HOTKEY_CONFIG * aSection ) ;
~ HOTKEY_SECTION_PAGE ( ) { } ;
/**
* Function Restore
* Resets the hotkeys back to their original unedited state
*/
void Restore ( ) ;
/**
* Function GetHotkeys
* Accessor to retrieve hotkeys list from list control
*
* @ return Pointer to vector used for list control data
*/
std : : vector < EDA_HOTKEY * > & GetHotkeys ( ) { return m_hotkeyList - > GetHotkeys ( ) ; }
/**
* Function GetHotkeySection
* Accessor to retrieve hotkey configuration array assigned to a tab control page
*
* @ return Pointer to hotkey configuration array
*/
EDA_HOTKEY_CONFIG * GetHotkeySection ( ) { return m_hotkeySection ; }
/**
* Function GetDialog
* Returns pointer to parent dialog window
*
* @ return Pointer to parent dialog window
*/
HOTKEYS_EDITOR_DIALOG * GetDialog ( ) { return m_dialog ; }
} ;
/**
* Class HOTKEYS_EDITOR_DIALOG
* is the child class of HOTKEYS_EDITOR_DIALOG_BASE . This is the class
* used to create a hotkey editor .
*/
class HOTKEYS_EDITOR_DIALOG : public HOTKEYS_EDITOR_DIALOG_BASE
{
protected :
EDA_DRAW_FRAME * m_parent ;
struct EDA_HOTKEY_CONFIG * m_hotkeys ;
std : : vector < HOTKEY_SECTION_PAGE * > m_hotkeySectionPages ;
public :
@ -85,14 +208,57 @@ public:
~ HOTKEYS_EDITOR_DIALOG ( ) { } ;
/**
* Function CanSetKey
* Check if we can set a hotkey , this will prompt the user if there
* is a conflict between keys . The key code should have already been
* checked that it ' s not for the same entry as its currently in or else
* it ' ll prompt the change on itself .
* The function will do conflict detection depending on aSectionTag .
* g_CommonSectionTag means the key code must be checked with all sections .
* While other tags means the key code only must be checked with the aSectionTag
* section and g_CommonSectionTag section .
*
* @ param aKey is the key code that wants to be set
* @ param aSectionTag is the section tag that the key code came from
*
* @ return True if the user accepted the overwrite or no conflict existed
*/
bool CanSetKey ( long aKey , const wxString * aSectionTag ) ;
private :
/**
* Function OnOKClicked
* Close the dialog and make save all changes to hotkeys
*
* @ param aEvent is the button press event , unused
*/
void OnOKClicked ( wxCommandEvent & aEvent ) ;
/**
* Function CancelClicked
* Close the dialog and make no changes to hotkeys
*
* @ param aEvent is the button press event , unused
*/
void CancelClicked ( wxCommandEvent & aEvent ) ;
/**
* Function UndoClicked
* Reinit the hotkeys to the initial state ( removes all pending changes )
*
* @ param aEvent is the button press event , unused
*/
void UndoClicked ( wxCommandEvent & aEvent ) ;
} ;
/**
* Function InstallHotkeyFrame
* Create a hotkey editor dialog window with the provided hotkey configuration array
*
* @ param aParent is the parent window
* @ param aHotkeys is the hotkey configuration array
*/
void InstallHotkeyFrame ( EDA_DRAW_FRAME * aParent , EDA_HOTKEY_CONFIG * aHotkeys ) ;
# endif