Move wxComboBox to wxBitmapComboBox in hopes it will work better.

(Not sure if it solves the MSW issues yet, but at least it highlights
the items in the dropdown on rollover on OSX.)

Also added some text to the dropdown menu for intersheet references in
the PDF.
This commit is contained in:
Jeff Young 2022-08-28 12:04:23 +01:00
parent 11a96252db
commit 95fd7cb80a
6 changed files with 119 additions and 109 deletions

View File

@ -978,7 +978,7 @@ bool PDF_PLOTTER::EndPlot()
for( const std::pair<wxString, int>& page : pages )
{
js += wxString::Format( wxT( "{ cName: '%s', cReturn: '%d' }, " ),
page.first,
wxString::Format( _( "Show Page %s" ), page.first ),
page.second );
}

View File

@ -134,14 +134,14 @@ DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_ITE
wxString sheetPageNum = sheet.GetPageNumber();
wxString sheetName = sheet.size() == 1 ? _( "<root sheet>" ) : sheet.Last()->GetName();
m_hyperlinkCtrl->Append( wxString::Format( _( "Page %s (%s)" ), sheetPageNum, sheetName ) );
m_hyperlinkCombo->Append( wxString::Format( _( "Page %s (%s)" ), sheetPageNum, sheetName ) );
m_pageNumbers.push_back( sheetPageNum );
}
m_hyperlinkCtrl->Append( wxT( "---------------------" ) );
m_hyperlinkCtrl->Append( wxT( "file://..." ) );
m_hyperlinkCtrl->Append( wxT( "http://..." ) );
m_hyperlinkCtrl->Append( wxT( "https://..." ) );
m_hyperlinkCombo->Append( wxT( "---" ) );
m_hyperlinkCombo->Append( wxT( "file://..." ), KiBitmap( BITMAPS::small_folder ) );
m_hyperlinkCombo->Append( wxT( "http://..." ), KiBitmap( BITMAPS::www ) );
m_hyperlinkCombo->Append( wxT( "https://..." ), KiBitmap( BITMAPS::www ) );
SetupStandardButtons();
Layout();
@ -176,8 +176,7 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataToWindow()
SCHEMATIC& schematic = m_frame->Schematic();
m_hyperlinkCb->SetValue( m_currentText->HasHyperlink() );
m_hyperlinkCtrl->Enable( m_currentText->HasHyperlink() );
m_hyperlinkCtrl->SetValue( m_currentText->GetHyperlink() );
m_hyperlinkCombo->SetValue( m_currentText->GetHyperlink() );
// show text variable cross-references in a human-readable format
m_textCtrl->SetValue( schematic.ConvertKIIDsToRefs( m_currentText->GetText() ) );
@ -283,26 +282,24 @@ void DIALOG_TEXT_PROPERTIES::onFillChecked( wxCommandEvent& aEvent )
void DIALOG_TEXT_PROPERTIES::onHyperlinkChecked( wxCommandEvent& aEvent )
{
if( aEvent.IsChecked() && !m_hyperlinkCtrl->IsEnabled() )
if( aEvent.IsChecked() && m_hyperlinkCombo->GetValue().IsEmpty() )
{
m_hyperlinkCtrl->Enable( true );
m_hyperlinkCtrl->ChangeValue( m_lastLink );
m_hyperlinkCtrl->SetFocus();
m_hyperlinkCombo->ChangeValue( m_lastLink );
}
else if( !aEvent.IsChecked() && m_hyperlinkCtrl->IsEnabled() )
else if( !aEvent.IsChecked() && !m_hyperlinkCombo->GetValue().IsEmpty() )
{
m_hyperlinkCtrl->Enable( false );
m_lastLink = m_hyperlinkCtrl->GetValue();
m_hyperlinkCtrl->SetValue( wxEmptyString );
m_lastLink = m_hyperlinkCombo->GetValue();
m_hyperlinkCombo->SetValue( wxEmptyString );
}
aEvent.Skip();
}
void DIALOG_TEXT_PROPERTIES::onHyperlinkDropdown( wxCommandEvent& aEvent )
void DIALOG_TEXT_PROPERTIES::onHyperlinkText( wxCommandEvent& event )
{
m_lastLink = m_hyperlinkCtrl->GetValue();
if( !m_hyperlinkCombo->GetValue().IsEmpty() )
m_hyperlinkCb->SetValue( true );
}
@ -314,38 +311,35 @@ void DIALOG_TEXT_PROPERTIES::onHyperlinkCombo( wxCommandEvent& aEvent )
{
// user clicked outside dropdown; leave current value
}
else if( sel == m_hyperlinkCtrl->GetCount() - 4 )
else if( sel == m_hyperlinkCombo->GetCount() - 4 )
{
// separator (and wxWidgets already updated our value to it);
// replace value with that saved in the dropdown event
m_hyperlinkCtrl->ChangeValue( m_lastLink );
m_hyperlinkCtrl->SetSelection( 0, m_hyperlinkCtrl->GetValue().Length() );
// separator
}
else if( sel == m_hyperlinkCtrl->GetCount() - 3 )
else if( sel == m_hyperlinkCombo->GetCount() - 3 )
{
static wxString helper = wxT( "file://" );
m_hyperlinkCtrl->ChangeValue( helper );
m_hyperlinkCtrl->SetInsertionPointEnd();
m_hyperlinkCombo->ChangeValue( helper );
m_hyperlinkCombo->SetInsertionPointEnd();
}
else if( sel == m_hyperlinkCtrl->GetCount() - 2 )
else if( sel == m_hyperlinkCombo->GetCount() - 2 )
{
static wxString helper = wxT( "http://" );
m_hyperlinkCtrl->ChangeValue( helper );
m_hyperlinkCtrl->SetInsertionPointEnd();
m_hyperlinkCombo->ChangeValue( helper );
m_hyperlinkCombo->SetInsertionPointEnd();
}
else if( sel == m_hyperlinkCtrl->GetCount() - 1 )
else if( sel == m_hyperlinkCombo->GetCount() - 1 )
{
static wxString helper = wxT( "https://" );
m_hyperlinkCtrl->ChangeValue( helper );
m_hyperlinkCtrl->SetInsertionPointEnd();
m_hyperlinkCombo->ChangeValue( helper );
m_hyperlinkCombo->SetInsertionPointEnd();
}
else
{
m_hyperlinkCtrl->ChangeValue( wxT( "#" ) + m_pageNumbers[ sel ] );
m_hyperlinkCtrl->SetSelection( 0, m_hyperlinkCtrl->GetValue().Length() );
m_hyperlinkCombo->ChangeValue( wxT( "#" ) + m_pageNumbers[ sel ] );
m_hyperlinkCombo->SelectAll();
}
}
@ -469,7 +463,7 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataFromWindow()
return false;
}
if( !m_currentText->ValidateHyperlink( m_hyperlinkCtrl->GetValue() ) )
if( !m_currentText->ValidateHyperlink( m_hyperlinkCombo->GetValue() ) )
{
DisplayError( this, _( "Invalid hyperlink destination. Please enter either a valid URL "
"(e.g. file:// or http(s)://) or \"#<page number>\" to create "
@ -478,7 +472,7 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataFromWindow()
}
else
{
m_currentText->SetHyperlink( m_hyperlinkCtrl->GetValue() );
m_currentText->SetHyperlink( m_hyperlinkCombo->GetValue() );
}
if( m_currentText->GetTextWidth() != m_textSize.GetValue() )

View File

@ -47,7 +47,7 @@ private:
void onBorderChecked( wxCommandEvent& aEvent ) override;
void onFillChecked( wxCommandEvent& aEvent ) override;
void onHyperlinkChecked( wxCommandEvent& aEvent ) override;
void onHyperlinkDropdown( wxCommandEvent& aEvent ) override;
void onHyperlinkText( wxCommandEvent& aEvent ) override;
void onHyperlinkCombo( wxCommandEvent& aEvent ) override;
void OnFormattingHelp( wxHyperlinkEvent& aEvent ) override;

View File

@ -233,7 +233,7 @@ DIALOG_TEXT_PROPERTIES_BASE::DIALOG_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWi
m_borderStyleLabel->Wrap( -1 );
m_textEntrySizer->Add( m_borderStyleLabel, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
m_borderStyleCombo = new wxBitmapComboBox( this, wxID_ANY, _("Combo!"), wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY );
m_borderStyleCombo = new wxBitmapComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY );
m_borderStyleCombo->SetMinSize( wxSize( 240,-1 ) );
m_textEntrySizer->Add( m_borderStyleCombo, wxGBPosition( 7, 1 ), wxGBSpan( 1, 2 ), wxEXPAND, 5 );
@ -270,8 +270,14 @@ DIALOG_TEXT_PROPERTIES_BASE::DIALOG_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWi
m_textEntrySizer->Add( m_hyperlinkCb, wxGBPosition( 9, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_hyperlinkCtrl = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
m_textEntrySizer->Add( m_hyperlinkCtrl, wxGBPosition( 9, 1 ), wxGBSpan( 1, 6 ), wxEXPAND|wxBOTTOM, 5 );
wxBoxSizer* bSizer11;
bSizer11 = new wxBoxSizer( wxHORIZONTAL );
m_hyperlinkCombo = new wxBitmapComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
bSizer11->Add( m_hyperlinkCombo, 1, wxALIGN_CENTER_VERTICAL, 5 );
m_textEntrySizer->Add( bSizer11, wxGBPosition( 9, 1 ), wxGBSpan( 1, 6 ), wxEXPAND|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 5 );
m_textEntrySizer->AddGrowableCol( 3 );
@ -307,8 +313,8 @@ DIALOG_TEXT_PROPERTIES_BASE::DIALOG_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWi
m_borderCheckbox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onBorderChecked ), NULL, this );
m_filledCtrl->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onFillChecked ), NULL, this );
m_hyperlinkCb->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkChecked ), NULL, this );
m_hyperlinkCtrl->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkCombo ), NULL, this );
m_hyperlinkCtrl->Connect( wxEVT_COMBOBOX_DROPDOWN, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkDropdown ), NULL, this );
m_hyperlinkCombo->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkCombo ), NULL, this );
m_hyperlinkCombo->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkText ), NULL, this );
}
DIALOG_TEXT_PROPERTIES_BASE::~DIALOG_TEXT_PROPERTIES_BASE()
@ -319,7 +325,7 @@ DIALOG_TEXT_PROPERTIES_BASE::~DIALOG_TEXT_PROPERTIES_BASE()
m_borderCheckbox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onBorderChecked ), NULL, this );
m_filledCtrl->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onFillChecked ), NULL, this );
m_hyperlinkCb->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkChecked ), NULL, this );
m_hyperlinkCtrl->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkCombo ), NULL, this );
m_hyperlinkCtrl->Disconnect( wxEVT_COMBOBOX_DROPDOWN, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkDropdown ), NULL, this );
m_hyperlinkCombo->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkCombo ), NULL, this );
m_hyperlinkCombo->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onHyperlinkText ), NULL, this );
}

View File

@ -2289,7 +2289,7 @@
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value">Combo!</property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
@ -2635,70 +2635,81 @@
<property name="border">5</property>
<property name="colspan">6</property>
<property name="column">1</property>
<property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="flag">wxEXPAND|wxBOTTOM|wxALIGN_CENTER_VERTICAL</property>
<property name="row">9</property>
<property name="rowspan">1</property>
<object class="wxComboBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_hyperlinkCtrl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">-1</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnCombobox">onHyperlinkCombo</event>
<event name="OnComboboxDropdown">onHyperlinkDropdown</event>
<property name="name">bSizer11</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">1</property>
<object class="wxBitmapComboBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_hyperlinkCombo</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">-1</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnCombobox">onHyperlinkCombo</event>
<event name="OnText">onHyperlinkText</event>
</object>
</object>
</object>
</object>
</object>

View File

@ -36,7 +36,6 @@ class WX_INFOBAR;
#include <wx/panel.h>
#include <wx/checkbox.h>
#include <wx/bmpcbox.h>
#include <wx/combobox.h>
#include <wx/gbsizer.h>
#include <wx/statline.h>
#include <wx/dialog.h>
@ -89,7 +88,7 @@ class DIALOG_TEXT_PROPERTIES_BASE : public DIALOG_SHIM
wxPanel* m_panelFillColor;
COLOR_SWATCH* m_fillColorSwatch;
wxCheckBox* m_hyperlinkCb;
wxComboBox* m_hyperlinkCtrl;
wxBitmapComboBox* m_hyperlinkCombo;
wxStaticLine* m_staticline;
wxStdDialogButtonSizer* m_sdbSizer1;
wxButton* m_sdbSizer1OK;
@ -102,7 +101,7 @@ class DIALOG_TEXT_PROPERTIES_BASE : public DIALOG_SHIM
virtual void onFillChecked( wxCommandEvent& event ) { event.Skip(); }
virtual void onHyperlinkChecked( wxCommandEvent& event ) { event.Skip(); }
virtual void onHyperlinkCombo( wxCommandEvent& event ) { event.Skip(); }
virtual void onHyperlinkDropdown( wxCommandEvent& event ) { event.Skip(); }
virtual void onHyperlinkText( wxCommandEvent& event ) { event.Skip(); }
public: