Fix typo in Toggle Layers action and add descriptions to hotkeys lists.

Fixes https://gitlab.com/kicad/code/kicad/issues/5494
This commit is contained in:
Jeff Young 2020-09-04 16:20:51 +01:00
parent be15053745
commit 2736becb8b
3 changed files with 15 additions and 136 deletions

View File

@ -30,20 +30,6 @@
#include <dialog_shim.h> #include <dialog_shim.h>
/**
* Minimum width of the hotkey column
*/
static const int HOTKEY_MIN_WIDTH = 100;
/**
* Extra margin to compensate for vertical scrollbar
*/
static const int HORIZ_MARGIN = 30;
std::map<wxString, int> WIDGET_HOTKEY_LIST::m_width_cache;
/** /**
* Menu IDs for the hotkey context menu * Menu IDs for the hotkey context menu
*/ */
@ -302,9 +288,10 @@ void WIDGET_HOTKEY_LIST::UpdateFromClientData()
if( hkdata ) if( hkdata )
{ {
const auto& changed_hk = hkdata->GetChangedHotkey(); const HOTKEY& changed_hk = hkdata->GetChangedHotkey();
wxString label = changed_hk.m_Actions[ 0 ]->GetLabel(); wxString label = changed_hk.m_Actions[ 0 ]->GetLabel();
wxString key_text = KeyNameFromKeyCode( changed_hk.m_EditKeycode ); wxString key_text = KeyNameFromKeyCode( changed_hk.m_EditKeycode );
wxString description = changed_hk.m_Actions[ 0 ]->GetDescription();
if( label.IsEmpty() ) if( label.IsEmpty() )
label = changed_hk.m_Actions[ 0 ]->GetName(); label = changed_hk.m_Actions[ 0 ]->GetName();
@ -315,12 +302,9 @@ void WIDGET_HOTKEY_LIST::UpdateFromClientData()
SetItemText( i, 0, label ); SetItemText( i, 0, label );
SetItemText( i, 1, key_text); SetItemText( i, 1, key_text);
SetItemText( i, 2, description );
} }
} }
// Trigger a resize in case column widths have changed
wxSizeEvent dummy_evt;
OnSize( dummy_evt );
} }
@ -366,7 +350,7 @@ void WIDGET_HOTKEY_LIST::ResetItem( wxTreeListItem aItem, int aResetId )
if( !hkdata ) if( !hkdata )
return; return;
auto& changed_hk = hkdata->GetChangedHotkey(); HOTKEY& changed_hk = hkdata->GetChangedHotkey();
if( aResetId == ID_RESET ) if( aResetId == ID_RESET )
changeHotkey( changed_hk, changed_hk.m_Actions[ 0 ]->GetHotKey() ); changeHotkey( changed_hk, changed_hk.m_Actions[ 0 ]->GetHotKey() );
@ -428,92 +412,6 @@ void WIDGET_HOTKEY_LIST::OnMenu( wxCommandEvent& aEvent )
} }
void WIDGET_HOTKEY_LIST::OnSize( wxSizeEvent& aEvent )
{
wxDataViewCtrl* view = GetDataView();
if( !view )
return;
wxRect rect = GetClientRect();
view->SetSize( rect );
#ifdef wxHAS_GENERIC_DATAVIEWCTRL
{
wxWindow* win_view = GetView();
win_view->Refresh();
win_view->Update();
}
#endif
// Find the maximum width of both columns
int clamped_column = ( m_rubber_band_column == 0 ) ? 1 : 0;
int clamped_column_width = 0;
int rubber_max_width = 0;
for( wxTreeListItem item = GetFirstItem(); item.IsOk(); item = GetNextItem( item ) )
{
const wxString& text = GetItemText( item, clamped_column );
int width = WidthFor( text );
if( clamped_column == 0 )
{
width += 4 * view->GetIndent();
}
if( width > clamped_column_width )
clamped_column_width = width;
width = MemoWidthFor( GetItemText( item, m_rubber_band_column ) );
if( width > rubber_max_width )
rubber_max_width = width;
}
if( clamped_column_width < m_clamped_min_width )
clamped_column_width = m_clamped_min_width;
// Rubber column width is only limited if the rubber column is on the LEFT.
// If on the right, let the horiz scrollbar show.
int rubber_width = 0;
if( m_rubber_band_column == 0 )
rubber_width = rect.width - clamped_column_width - HORIZ_MARGIN;
else
rubber_width = rubber_max_width;
if( rubber_width <= 0 )
rubber_width = 1;
wxASSERT( m_rubber_band_column == 0 || m_rubber_band_column == 1 );
if( GetColumnCount() >= 2 )
{
SetColumnWidth( m_rubber_band_column, rubber_width );
SetColumnWidth( clamped_column, clamped_column_width );
}
}
int WIDGET_HOTKEY_LIST::MemoWidthFor( const wxString& aStr )
{
int width;
auto found = m_width_cache.find( aStr );
if( found == m_width_cache.end() )
{
width = WidthFor( aStr );
m_width_cache[aStr] = width;
}
else
{
width = found->second;
}
return width;
}
bool WIDGET_HOTKEY_LIST::ResolveKeyConflicts( TOOL_ACTION* aAction, long aKey ) bool WIDGET_HOTKEY_LIST::ResolveKeyConflicts( TOOL_ACTION* aAction, long aKey )
{ {
HOTKEY* conflictingHotKey = nullptr; HOTKEY* conflictingHotKey = nullptr;
@ -548,17 +446,16 @@ WIDGET_HOTKEY_LIST::WIDGET_HOTKEY_LIST( wxWindow* aParent, HOTKEY_STORE& aHotkey
bool aReadOnly ) bool aReadOnly )
: wxTreeListCtrl( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTL_SINGLE ), : wxTreeListCtrl( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTL_SINGLE ),
m_hk_store( aHotkeyStore ), m_hk_store( aHotkeyStore ),
m_readOnly( aReadOnly ), m_readOnly( aReadOnly )
m_rubber_band_column( 0 ),
m_clamped_min_width( HOTKEY_MIN_WIDTH )
{ {
wxString command_header = _( "Command" ); wxString command_header = _( "Command" );
if( !m_readOnly ) if( !m_readOnly )
command_header << " " << _( "(double-click to edit)" ); command_header << " " << _( "(double-click to edit)" );
AppendColumn( command_header ); AppendColumn( command_header, 320 );
AppendColumn( _( "Hotkey" ) ); AppendColumn( _( "Hotkey" ), 110 );
AppendColumn( _( "Description" ), 1000 );
GetDataView()->SetIndent( 10 ); GetDataView()->SetIndent( 10 );
if( !m_readOnly ) if( !m_readOnly )
@ -568,8 +465,6 @@ WIDGET_HOTKEY_LIST::WIDGET_HOTKEY_LIST( wxWindow* aParent, HOTKEY_STORE& aHotkey
Bind( wxEVT_TREELIST_ITEM_CONTEXT_MENU, &WIDGET_HOTKEY_LIST::OnContextMenu, this ); Bind( wxEVT_TREELIST_ITEM_CONTEXT_MENU, &WIDGET_HOTKEY_LIST::OnContextMenu, this );
Bind( wxEVT_MENU, &WIDGET_HOTKEY_LIST::OnMenu, this ); Bind( wxEVT_MENU, &WIDGET_HOTKEY_LIST::OnMenu, this );
} }
Bind( wxEVT_SIZE, &WIDGET_HOTKEY_LIST::OnSize, this );
} }

View File

@ -44,11 +44,6 @@ class WIDGET_HOTKEY_LIST : public wxTreeListCtrl
wxTreeListItem m_context_menu_item; wxTreeListItem m_context_menu_item;
int m_rubber_band_column;
int m_clamped_min_width;
static std::map<wxString, int> m_width_cache;
/** /**
* Method GetHKClientData * Method GetHKClientData
* Return the WIDGET_HOTKEY_CLIENT_DATA for the given item, or NULL if the item is invalid. * Return the WIDGET_HOTKEY_CLIENT_DATA for the given item, or NULL if the item is invalid.
@ -118,18 +113,6 @@ protected:
*/ */
void OnMenu( wxCommandEvent& aEvent ); void OnMenu( wxCommandEvent& aEvent );
/**
* Function OnSize
* Handle resizing of the control. Overrides the buggy wxTreeListCtrl::OnSize.
*/
void OnSize( wxSizeEvent& aEvent );
/**
* Memoized version of wxWidthFor(), which returns the width in pixels required to display
* a string. The wx version is REALLY SLOW on macOS.
*/
int MemoWidthFor( const wxString& aStr );
/** /**
* Method ResolveKeyConflicts * Method ResolveKeyConflicts
* Check if we can set a hotkey, and prompt the user if there is a conflict between keys. * Check if we can set a hotkey, and prompt the user if there is a conflict between keys.

View File

@ -997,7 +997,8 @@ TOOL_ACTION PCB_ACTIONS::layerPrev( "pcbnew.Control.layerPrev",
TOOL_ACTION PCB_ACTIONS::layerToggle( "pcbnew.Control.layerToggle", TOOL_ACTION PCB_ACTIONS::layerToggle( "pcbnew.Control.layerToggle",
AS_GLOBAL, AS_GLOBAL,
'V', LEGACY_HK_NAME( "Add Through Via" ), 'V', LEGACY_HK_NAME( "Add Through Via" ),
_( "Add Through Via" ), "", nullptr, AF_NOTIFY ); _( "Toggle Layer" ), _( "Switch between layers in active layer pair" ),
nullptr, AF_NOTIFY );
TOOL_ACTION PCB_ACTIONS::layerAlphaInc( "pcbnew.Control.layerAlphaInc", TOOL_ACTION PCB_ACTIONS::layerAlphaInc( "pcbnew.Control.layerAlphaInc",
AS_GLOBAL, AS_GLOBAL,