KiCad PCB EDA Suite
Loading...
Searching...
No Matches
font_choice.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2021-2022 KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <widgets/font_choice.h>
21#include <kiplatform/ui.h>
22#include <wx/fontenum.h>
23#include <font/fontconfig.h>
24#include <pgm_base.h>
25
26// The "official" name of the building Kicad stroke font (always existing)
28
29
30FONT_CHOICE::FONT_CHOICE( wxWindow* aParent, int aId, wxPoint aPosition, wxSize aSize,
31 int nChoices, wxString* aChoices, int aStyle ) :
32 wxChoice( aParent, aId, aPosition, aSize, nChoices, aChoices, aStyle )
33{
34 m_systemFontCount = wxChoice::GetCount();
35
36 std::vector<std::string> fontNames;
37 Fontconfig()->ListFonts( fontNames, std::string( Pgm().GetLanguageTag().utf8_str() ) );
38
39 wxArrayString menuList;
40
41 // The initial list of fonts has on top 1 or 2 options
42 // only "KiCad Font" (KICAD_FONT_NAME)
43 // "Default Font" and "KiCad Font" (KICAD_FONT_NAME)
44 // "KiCad Font" is also a keyword, and cannot be translated.
45 // So rebuilt the starting list
46 wxChoice::Clear();
47
48 if( m_systemFontCount > 1 )
49 Append( _( "Default Font" ) );
50
51 Append( KICAD_FONT_NAME );
52 m_systemFontCount = wxChoice::GetCount();
53
54 for( const std::string& name : fontNames )
55 menuList.Add( wxString( name ) );
56
57 menuList.Sort();
58
59 Freeze();
60 Append( menuList );
62 Thaw();
63
64 m_notFound = wxS( " " ) + _( "<not found>" );
65}
66
67
69{
70}
71
72
73void FONT_CHOICE::SetFontSelection( KIFONT::FONT* aFont, bool aSilentMode )
74{
75 if( !aFont )
76 {
77 SetSelection( 0 );
78 }
79 else
80 {
81 bool result = SetStringSelection( aFont->GetName() );
82
83 if( !result )
84 {
85 Append( aFont->GetName() + m_notFound );
86 SetSelection( GetCount() - 1 );
87 }
88 }
89
90 if( !aSilentMode )
91 SendSelectionChangedEvent( wxEVT_CHOICE );
92}
93
94
96{
97 int sel = GetSelection();
98
99 if( sel < 0 )
100 return false;
101
102 if( GetString( sel ).EndsWith( m_notFound ) )
103 return false;
104
105 return true;
106}
107
108
109KIFONT::FONT* FONT_CHOICE::GetFontSelection( bool aBold, bool aItalic, bool aForDrawingSheet ) const
110{
111 if( GetSelection() <= 0 )
112 {
113 return nullptr;
114 }
115 else if( GetSelection() == 1 && m_systemFontCount == 2 )
116 {
117 return KIFONT::FONT::GetFont( KICAD_FONT_NAME, aBold, aItalic );
118 }
119 else
120 {
121 return KIFONT::FONT::GetFont( GetStringSelection(), aBold, aItalic, nullptr,
122 aForDrawingSheet );
123 }
124}
125
const char * name
Definition: DXF_plotter.cpp:57
void SetFontSelection(KIFONT::FONT *aFont, bool aSilentMode=false)
Set the selection in wxChoice widget.
Definition: font_choice.cpp:73
KIFONT::FONT * GetFontSelection(bool aBold, bool aItalic, bool aForDrawingSheet=false) const
bool HaveFontSelection() const
Definition: font_choice.cpp:95
FONT_CHOICE(wxWindow *aParent, int aId, wxPoint aPosition, wxSize aSize, int nChoices, wxString *aChoices, int aStyle)
Definition: font_choice.cpp:30
int m_systemFontCount
Definition: font_choice.h:50
virtual ~FONT_CHOICE()
Definition: font_choice.cpp:68
wxString m_notFound
Definition: font_choice.h:51
FONT is an abstract base class for both outline and stroke fonts.
Definition: font.h:131
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
Definition: font.cpp:146
const wxString & GetName() const
Definition: font.h:149
#define _(s)
FONTCONFIG * Fontconfig()
Definition: fontconfig.cpp:100
#define KICAD_FONT_NAME
void LargeChoiceBoxHack(wxChoice *aChoice)
Configure a wxChoice control to support a lot of entries by disabling functionality that makes adding...
Definition: wxgtk/ui.cpp:136
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: pgm_base.cpp:1060
see class PGM_BASE