KiCad PCB EDA Suite
Loading...
Searching...
No Matches
dialog_page_settings.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-2023 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 <env_paths.h>
21#include <pgm_base.h>
22#include <bitmaps.h>
23#include <base_screen.h>
24#include <common.h> // ExpandEnvVarSubstitutions
25#include <confirm.h>
26#include <core/arraydim.h>
28#include <eda_draw_frame.h>
29#include <eda_item.h>
30#include <gr_basic.h>
31#include <kiface_base.h>
32#include <macros.h>
33#include <math/util.h> // for KiROUND, Clamp
34#include <project.h>
35#include <tool/actions.h>
36#include <tool/tool_manager.h>
40#include <string_utils.h>
42#include <wx/valgen.h>
43#include <wx/tokenzr.h>
44#include <wx/filedlg.h>
45#include <wx/dcmemory.h>
46
47#define MAX_PAGE_EXAMPLE_SIZE 200
48
49
50// List of page formats.
51// they are prefixed by "_HKI" (already in use for hotkeys) instead of "_",
52// because we need both the translated and the not translated version.
53// when displayed in dialog we should explicitly call wxGetTranslation()
54// to show the translated version.
55// See hotkeys_basic.h for more info
56#define _HKI( x ) wxT( x )
57static const wxString pageFmts[] =
58{
59 _HKI("A5 148x210mm"),
60 _HKI("A4 210x297mm"),
61 _HKI("A3 297x420mm"),
62 _HKI("A2 420x594mm"),
63 _HKI("A1 594x841mm"),
64 _HKI("A0 841x1189mm"),
65 _HKI("A 8.5x11in"),
66 _HKI("B 11x17in"),
67 _HKI("C 17x22in"),
68 _HKI("D 22x34in"),
69 _HKI("E 34x44in"),
70 _HKI("USLetter 8.5x11in"), // USLetter without space is correct
71 _HKI("USLegal 8.5x14in"), // USLegal without space is correct
72 _HKI("USLedger 11x17in"), // USLedger without space is correct
73 _HKI("User (Custom)"), // size defined by user. The string must contain "Custom"
74 // to be recognized in code
75};
76
78 const VECTOR2D& aMaxUserSizeMils ) :
80 m_parent( aParent ),
81 m_screen( m_parent->GetScreen() ),
82 m_initialized( false ),
83 m_pageBitmap( nullptr ),
84 m_iuPerMils( aIuPerMils ),
85 m_customSizeX( aParent, m_userSizeXLabel, m_userSizeXCtrl, m_userSizeXUnits ),
86 m_customSizeY( aParent, m_userSizeYLabel, m_userSizeYCtrl, m_userSizeYUnits )
87{
89 m_browseButton->SetBitmap( KiBitmapBundle( BITMAPS::small_folder ) );
90
91 m_maxPageSizeMils = aMaxUserSizeMils;
93 m_customFmt = false;
95
97 wxString serialization;
99 m_drawingSheet->SetPageLayout( TO_UTF8( serialization ) );
100
101 m_PickDate->SetValue( wxDateTime::Now() );
102
103 if( m_parent->GetName() == PL_EDITOR_FRAME_NAME )
104 {
105 SetTitle( _( "Preview Settings" ) );
106 m_staticTextPaper->SetLabel( _( "Preview Paper" ) );
107 m_staticTextTitleBlock->SetLabel( _( "Preview Title Block Data" ) );
108 }
109 else
110 {
111 SetTitle( _( "Page Settings" ) );
112 m_staticTextPaper->SetLabel( _( "Paper" ) );
113 m_staticTextTitleBlock->SetLabel( _( "Title Block" ) );
114 }
115
117
118 Centre();
119}
120
121
123{
124 delete m_pageBitmap;
125 delete m_drawingSheet;
126}
127
128
130{
131 // initialize page format choice box and page format list.
132 // The first shows translated strings, the second contains not translated strings
133 m_paperSizeComboBox->Clear();
134
135 for( const wxString& pageFmt : pageFmts )
136 {
137 m_pageFmt.Add( pageFmt );
138 m_paperSizeComboBox->Append( wxGetTranslation( pageFmt ) );
139 }
140
141 // initialize the drawing sheet filename
143
147
148 // only a click fires the "selection changed" event, so have to fabricate this check
149 wxCommandEvent dummy;
151
152 if( m_customFmt )
153 {
156 }
157 else
158 {
161 }
162
163 m_TextRevision->SetValue( m_tb.GetRevision() );
164 m_TextDate->SetValue( m_tb.GetDate() );
165 m_TextTitle->SetValue( m_tb.GetTitle() );
166 m_TextCompany->SetValue( m_tb.GetCompany() );
167 m_TextComment1->SetValue( m_tb.GetComment( 0 ) );
168 m_TextComment2->SetValue( m_tb.GetComment( 1 ) );
169 m_TextComment3->SetValue( m_tb.GetComment( 2 ) );
170 m_TextComment4->SetValue( m_tb.GetComment( 3 ) );
171 m_TextComment5->SetValue( m_tb.GetComment( 4 ) );
172 m_TextComment6->SetValue( m_tb.GetComment( 5 ) );
173 m_TextComment7->SetValue( m_tb.GetComment( 6 ) );
174 m_TextComment8->SetValue( m_tb.GetComment( 7 ) );
175 m_TextComment9->SetValue( m_tb.GetComment( 8 ) );
176
177 // The default is to disable aall these fields for the "generic" dialog
178 m_TextSheetCount->Show( false );
179 m_TextSheetNumber->Show( false );
180 m_PaperExport->Show( false );
181 m_RevisionExport->Show( false );
182 m_DateExport->Show( false );
183 m_TitleExport->Show( false );
184 m_CompanyExport->Show( false );
185 m_Comment1Export->Show( false );
186 m_Comment2Export->Show( false );
187 m_Comment3Export->Show( false );
188 m_Comment4Export->Show( false );
189 m_Comment5Export->Show( false );
190 m_Comment6Export->Show( false );
191 m_Comment7Export->Show( false );
192 m_Comment8Export->Show( false );
193 m_Comment9Export->Show( false );
194
196
199
200 GetSizer()->SetSizeHints( this );
201
202 m_initialized = true;
203
204 return true;
205}
206
207
209{
210 int idx = std::max( m_paperSizeComboBox->GetSelection(), 0 );
211 const wxString paperType = m_pageFmt[idx];
212
213 if( paperType.Contains( PAGE_INFO::Custom ) )
214 {
216 return false;
217
219 return false;
220 }
221
222 if( SavePageSettings() )
223 {
225
228
229 // Call the post processing (if any) after changes
231 }
232
233 return true;
234}
235
236
237void DIALOG_PAGES_SETTINGS::OnPaperSizeChoice( wxCommandEvent& event )
238{
239 int idx = m_paperSizeComboBox->GetSelection();
240
241 if( idx < 0 )
242 idx = 0;
243
244 const wxString paperType = m_pageFmt[idx];
245
246 if( paperType.Contains( PAGE_INFO::Custom ) )
247 {
248 m_staticTextOrient->Enable( false );
249 m_orientationComboBox->Enable( false );
250
251 m_staticTextCustSize->Enable( true );
252 m_customSizeX.Enable( true );
253 m_customSizeY.Enable( true );
254 m_customFmt = true;
255 }
256 else
257 {
258 m_staticTextOrient->Enable( true );
259 m_orientationComboBox->Enable( true );
260
261 m_staticTextCustSize->Enable( false );
262 m_customSizeX.Enable( false );
263 m_customSizeY.Enable( false );
264 m_customFmt = false;
265 }
266
269}
270
271
273{
274 if( m_initialized )
275 {
278 }
279}
280
281
283{
284 if( m_initialized )
285 {
288 }
289}
290
291
293{
294 if( m_initialized )
295 {
298 }
299}
300
301
303{
304 if( m_initialized && m_TextRevision->IsModified() )
305 {
307 m_tb.SetRevision( m_TextRevision->GetValue() );
309 }
310}
311
312
313void DIALOG_PAGES_SETTINGS::OnDateTextUpdated( wxCommandEvent& event )
314{
315 if( m_initialized && m_TextDate->IsModified() )
316 {
318 m_tb.SetDate( m_TextDate->GetValue() );
320 }
321}
322
323
324void DIALOG_PAGES_SETTINGS::OnTitleTextUpdated( wxCommandEvent& event )
325{
326 if( m_initialized && m_TextTitle->IsModified() )
327 {
329 m_tb.SetTitle( m_TextTitle->GetValue() );
331 }
332}
333
334
336{
337 if( m_initialized && m_TextCompany->IsModified() )
338 {
340 m_tb.SetCompany( m_TextCompany->GetValue() );
342 }
343}
344
345
347{
348 if( m_initialized && m_TextComment1->IsModified() )
349 {
351 m_tb.SetComment( 0, m_TextComment1->GetValue() );
353 }
354}
355
356
358{
359 if( m_initialized && m_TextComment2->IsModified() )
360 {
362 m_tb.SetComment( 1, m_TextComment2->GetValue() );
364 }
365}
366
367
369{
370 if( m_initialized && m_TextComment3->IsModified() )
371 {
373 m_tb.SetComment( 2, m_TextComment3->GetValue() );
375 }
376}
377
378
380{
381 if( m_initialized && m_TextComment4->IsModified() )
382 {
384 m_tb.SetComment( 3, m_TextComment4->GetValue() );
386 }
387}
388
389
391{
392 if( m_initialized && m_TextComment5->IsModified() )
393 {
395 m_tb.SetComment( 4, m_TextComment5->GetValue() );
397 }
398}
399
400
402{
403 if( m_initialized && m_TextComment6->IsModified() )
404 {
406 m_tb.SetComment( 5, m_TextComment6->GetValue() );
408 }
409}
410
411
413{
414 if( m_initialized && m_TextComment7->IsModified() )
415 {
417 m_tb.SetComment( 6, m_TextComment7->GetValue() );
419 }
420}
421
422
424{
425 if( m_initialized && m_TextComment8->IsModified() )
426 {
428 m_tb.SetComment( 7, m_TextComment8->GetValue() );
430 }
431}
432
433
435{
436 if( m_initialized && m_TextComment9->IsModified() )
437 {
439 m_tb.SetComment( 8, m_TextComment9->GetValue() );
441 }
442}
443
444
445void DIALOG_PAGES_SETTINGS::OnDateApplyClick( wxCommandEvent& event )
446{
447 wxDateTime datetime = m_PickDate->GetValue();
448 wxString date =
449 // We can choose different formats. Should probably be kept in sync with CURRENT_DATE
450 // formatting in TITLE_BLOCK.
451 //
452 // datetime.Format( wxLocale::GetInfo( wxLOCALE_SHORT_DATE_FMT ) );
453 // datetime.Format( wxLocale::GetInfo( wxLOCALE_LONG_DATE_FMT ) );
454 // datetime.Format( wxT("%Y-%b-%d") );
455 datetime.FormatISODate();
456
457 m_TextDate->SetValue( date );
458}
459
460
462{
463 bool success = false;
464
465 wxString fileName = GetWksFileName();
466
468 {
469 wxString fullFileName = DS_DATA_MODEL::ResolvePath( fileName, m_projectPath );
470
471 if( !fullFileName.IsEmpty() && !wxFileExists( fullFileName ) )
472 {
473 wxString msg;
474 msg.Printf( _( "Drawing sheet file '%s' not found." ), fullFileName );
475 wxMessageBox( msg );
476 return false;
477 }
478
482 }
483
484 int idx = std::max( m_paperSizeComboBox->GetSelection(), 0 );
485 const wxString paperType = m_pageFmt[idx];
486
487 if( paperType.Contains( PAGE_INFO::Custom ) )
488 {
490
492
493 if( success )
494 {
497
500 }
501 }
502 else
503 {
504 // search for longest common string first, e.g. A4 before A
505 if( paperType.Contains( PAGE_INFO::USLetter ) )
507 else if( paperType.Contains( PAGE_INFO::USLegal ) )
509 else if( paperType.Contains( PAGE_INFO::USLedger ) )
511 else if( paperType.Contains( PAGE_INFO::GERBER ) )
513 else if( paperType.Contains( PAGE_INFO::A5 ) )
514 success = m_pageInfo.SetType( PAGE_INFO::A5 );
515 else if( paperType.Contains( PAGE_INFO::A4 ) )
516 success = m_pageInfo.SetType( PAGE_INFO::A4 );
517 else if( paperType.Contains( PAGE_INFO::A3 ) )
518 success = m_pageInfo.SetType( PAGE_INFO::A3 );
519 else if( paperType.Contains( PAGE_INFO::A2 ) )
520 success = m_pageInfo.SetType( PAGE_INFO::A2 );
521 else if( paperType.Contains( PAGE_INFO::A1 ) )
522 success = m_pageInfo.SetType( PAGE_INFO::A1 );
523 else if( paperType.Contains( PAGE_INFO::A0 ) )
524 success = m_pageInfo.SetType( PAGE_INFO::A0 );
525 else if( paperType.Contains( PAGE_INFO::A ) )
526 success = m_pageInfo.SetType( PAGE_INFO::A );
527 else if( paperType.Contains( PAGE_INFO::B ) )
528 success = m_pageInfo.SetType( PAGE_INFO::B );
529 else if( paperType.Contains( PAGE_INFO::C ) )
530 success = m_pageInfo.SetType( PAGE_INFO::C );
531 else if( paperType.Contains( PAGE_INFO::D ) )
532 success = m_pageInfo.SetType( PAGE_INFO::D );
533 else if( paperType.Contains( PAGE_INFO::E ) )
534 success = m_pageInfo.SetType( PAGE_INFO::E );
535
536 if( success )
537 {
538 int choice = m_orientationComboBox->GetSelection();
539 m_pageInfo.SetPortrait( choice != 0 );
540 }
541 }
542
543 if( !success )
544 {
545 wxFAIL_MSG( "The translation for paper size must preserve original spellings" );
547 }
548
550
551 m_tb.SetRevision( m_TextRevision->GetValue() );
552 m_tb.SetDate( m_TextDate->GetValue() );
553 m_tb.SetCompany( m_TextCompany->GetValue() );
554 m_tb.SetTitle( m_TextTitle->GetValue() );
555 m_tb.SetComment( 0, m_TextComment1->GetValue() );
556 m_tb.SetComment( 1, m_TextComment2->GetValue() );
557 m_tb.SetComment( 2, m_TextComment3->GetValue() );
558 m_tb.SetComment( 3, m_TextComment4->GetValue() );
559 m_tb.SetComment( 4, m_TextComment5->GetValue() );
560 m_tb.SetComment( 5, m_TextComment6->GetValue() );
561 m_tb.SetComment( 6, m_TextComment7->GetValue() );
562 m_tb.SetComment( 7, m_TextComment8->GetValue() );
563 m_tb.SetComment( 8, m_TextComment9->GetValue() );
564
566
567 return onSavePageSettings();
568}
569
570
572{
573 // search all the not translated label list containing our paper type
574 for( unsigned i = 0; i < m_pageFmt.GetCount(); ++i )
575 {
576 // parse each label looking for aPaperSize within it
577 wxStringTokenizer st( m_pageFmt[i] );
578
579 while( st.HasMoreTokens() )
580 {
581 if( st.GetNextToken() == aPaperSize )
582 {
583 m_paperSizeComboBox->SetSelection( i );
584 return;
585 }
586 }
587 }
588}
589
590
592{
593 int lyWidth, lyHeight;
594
595 VECTOR2D clamped_layout_size( Clamp( (double)MIN_PAGE_SIZE_MILS, m_layout_size.x, m_maxPageSizeMils.x ),
597
598 double lyRatio = clamped_layout_size.x < clamped_layout_size.y ?
599 (double) clamped_layout_size.y / clamped_layout_size.x :
600 (double) clamped_layout_size.x / clamped_layout_size.y;
601
602 if( clamped_layout_size.x < clamped_layout_size.y )
603 {
604 lyHeight = MAX_PAGE_EXAMPLE_SIZE;
605 lyWidth = KiROUND( (double) lyHeight / lyRatio );
606 }
607 else
608 {
609 lyWidth = MAX_PAGE_EXAMPLE_SIZE;
610 lyHeight = KiROUND( (double) lyWidth / lyRatio );
611 }
612
613 if( m_pageBitmap )
614 {
615 m_PageLayoutExampleBitmap->SetBitmap( wxNullBitmap );
616 delete m_pageBitmap;
617 }
618
619 m_pageBitmap = new wxBitmap( lyWidth + 1, lyHeight + 1 );
620
621 if( m_pageBitmap->IsOk() )
622 {
623 double scaleW = (double) lyWidth / clamped_layout_size.x;
624 double scaleH = (double) lyHeight / clamped_layout_size.y;
625 double scale = std::min( scaleW, scaleH );
626
627 // Prepare DC.
628 wxSize example_size( lyWidth + 1, lyHeight + 1 );
629 wxMemoryDC memDC;
630 memDC.SelectObject( *m_pageBitmap );
631 memDC.SetClippingRegion( wxPoint( 0, 0 ), example_size );
632 memDC.Clear();
633 memDC.SetUserScale( scale, scale );
634
635 // Get logical page size and margins.
636 PAGE_INFO pageDUMMY;
637
638 // Get page type
639 int idx = m_paperSizeComboBox->GetSelection();
640
641 if( idx < 0 )
642 idx = 0;
643
644 wxString pageFmtName = m_pageFmt[idx].BeforeFirst( ' ' );
645 bool portrait = clamped_layout_size.x < clamped_layout_size.y;
646 pageDUMMY.SetType( pageFmtName, portrait );
647
648 if( m_customFmt )
649 {
650 pageDUMMY.SetWidthMils( clamped_layout_size.x );
651 pageDUMMY.SetHeightMils( clamped_layout_size.y );
652 }
653
654 // Draw layout preview.
655 KIGFX::DS_RENDER_SETTINGS renderSettings;
656 COLOR_SETTINGS* colorSettings = m_parent->GetColorSettings();
657 COLOR4D bgColor = m_parent->GetDrawBgColor();
658 wxString emptyString;
659
661 {
662 GRResetPenAndBrush( &memDC );
663 renderSettings.SetDefaultPenWidth( 1 );
664 renderSettings.LoadColors( colorSettings );
665 renderSettings.SetPrintDC( &memDC );
666
670 {
672 renderSettings.SetLayerColor( LAYER_DRAWINGSHEET, color );
673 }
674
675 GRFilledRect( &memDC, VECTOR2I( 0, 0 ), m_layout_size, 0, bgColor, bgColor );
676
677 PrintDrawingSheet( &renderSettings, pageDUMMY, emptyString, emptyString, emptyString,
679 1, &Prj(), wxEmptyString, m_screen->GetVirtualPageNumber() == 1 );
680
681 memDC.SelectObject( wxNullBitmap );
683 }
684
686
687 // Refresh the dialog.
688 Layout();
689 Refresh();
690 }
691}
692
693
695{
696 int idx = std::max( m_paperSizeComboBox->GetSelection(), 0 );
697 const wxString paperType = m_pageFmt[idx];
698
699 // here we assume translators will keep original paper size spellings
700 if( paperType.Contains( PAGE_INFO::Custom ) )
701 {
703
705 {
707 m_orientationComboBox->SetStringSelection( _( "Portrait" ) );
708 else
709 m_orientationComboBox->SetStringSelection( _( "Landscape" ) );
710 }
711 }
712 else
713 {
714 PAGE_INFO pageInfo; // SetType() later to lookup size
715
716 static const wxChar* papers[] = {
717 // longest common string first, since sequential search below
732 };
733
734 unsigned i;
735
736 for( i=0; i < arrayDim( papers ); ++i )
737 {
738 if( paperType.Contains( papers[i] ) )
739 {
740 pageInfo.SetType( papers[i] );
741 break;
742 }
743 }
744
745 wxASSERT( i != arrayDim(papers) ); // dialog UI match the above list?
746
747 VECTOR2D sz = pageInfo.GetSizeMils();
748 m_layout_size = VECTOR2D( sz.x, sz.y );
749
750 // swap sizes to match orientation
751 bool isPortrait = (bool) m_orientationComboBox->GetSelection();
752
753 if( ( isPortrait && m_layout_size.x >= m_layout_size.y ) ||
754 ( !isPortrait && m_layout_size.x < m_layout_size.y ) )
755 {
756 std::swap( m_layout_size.x, m_layout_size.y );
757 }
758 }
759}
760
761
763{
764 double customSizeX = (double) m_customSizeX.GetDoubleValue() / m_iuPerMils;
765 double customSizeY = (double) m_customSizeY.GetDoubleValue() / m_iuPerMils;
766
767 // Ensure layout size can be converted to int coordinates later
768 customSizeX = Clamp( double( INT_MIN ), customSizeX, double( INT_MAX ) );
769 customSizeY = Clamp( double( INT_MIN ), customSizeY, double( INT_MAX ) );
770 m_layout_size = VECTOR2D( customSizeX, customSizeY );
771}
772
773
774void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxCommandEvent& event )
775{
776 wxFileName fn = GetWksFileName();
777 wxString name = fn.GetFullName();
778 wxString path;
779
780 if( fn.IsAbsolute() )
781 {
782 path = fn.GetPath();
783 }
784 else
785 {
786 wxFileName expanded( ExpandEnvVarSubstitutions( GetWksFileName(), &m_parentFrame->Prj() ) );
787
788 if( expanded.IsAbsolute() )
789 path = expanded.GetPath();
790 else
792 }
793
794 // Display a file picker dialog
795 wxFileDialog fileDialog( this, _( "Drawing Sheet File" ), path, name,
797 wxFD_DEFAULT_STYLE | wxFD_FILE_MUST_EXIST );
798
799 if( fileDialog.ShowModal() != wxID_OK )
800 return;
801
802 wxString fileName = fileDialog.GetPath();
803 wxString shortFileName;
804
805 // Try to use a project-relative path first:
806 if( !m_projectPath.IsEmpty() && fileName.StartsWith( m_projectPath ) )
807 {
808 fn = wxFileName( fileName );
809 fn.MakeRelativeTo( m_projectPath );
810 shortFileName = fn.GetFullPath();
811 }
812 else
813 {
814 // Failing that see if we can shorten it with env vars:
815 shortFileName = NormalizePath( fileName, &Pgm().GetLocalEnvVariables(), nullptr );
816 }
817
818 std::unique_ptr<DS_DATA_MODEL> ws = std::make_unique<DS_DATA_MODEL>();
819
820 if( ws->LoadDrawingSheet( fileName ) )
821 {
822 delete m_drawingSheet;
823
824 m_drawingSheet = ws.release();
825
826 SetWksFileName( shortFileName );
827
830 }
831}
int color
Definition: DXF_plotter.cpp:58
const char * name
Definition: DXF_plotter.cpp:57
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
Definition: arraydim.h:31
BASE_SCREEN class implementation.
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
Definition: bitmap.cpp:110
int GetPageCount() const
Definition: base_screen.h:72
int GetVirtualPageNumber() const
Definition: base_screen.h:75
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
Definition: base_screen.h:85
const wxString & GetPageNumber() const
Definition: base_screen.cpp:71
void SetContentModified(bool aModified=true)
Definition: base_screen.h:59
Color settings are a bit different than most of the settings objects in that there can be more than o...
Class DIALOG_PAGES_SETTINGS_BASE.
bool m_initialized
list of page sizes (not translated)
void SetCurrentPageSizeSelection(const wxString &aPaperSize)
void OnComment4TextUpdated(wxCommandEvent &event) override
void OnPageOrientationChoice(wxCommandEvent &event) override
void OnUserPageSizeYTextUpdated(wxCommandEvent &event) override
PAGE_INFO m_pageInfo
The max page size allowed by the caller frame.
DS_DATA_MODEL * m_drawingSheet
Temporary title block (basic inscriptions).
void OnRevisionTextUpdated(wxCommandEvent &event) override
const wxString GetWksFileName()
void OnComment6TextUpdated(wxCommandEvent &event) override
void OnDateApplyClick(wxCommandEvent &event) override
TITLE_BLOCK m_tb
true if the page selection is custom
void OnDateTextUpdated(wxCommandEvent &event) override
VECTOR2D m_layout_size
Temporary bitmap for the drawing sheet example.
void OnComment3TextUpdated(wxCommandEvent &event) override
void OnCompanyTextUpdated(wxCommandEvent &event) override
void OnUserPageSizeXTextUpdated(wxCommandEvent &event) override
void OnComment7TextUpdated(wxCommandEvent &event) override
void OnPaperSizeChoice(wxCommandEvent &event) override
virtual bool onSavePageSettings()
virtual void onTransferDataToWindow()
void OnComment5TextUpdated(wxCommandEvent &event) override
void OnComment9TextUpdated(wxCommandEvent &event) override
void OnComment1TextUpdated(wxCommandEvent &event) override
void OnComment8TextUpdated(wxCommandEvent &event) override
void OnWksFileSelection(wxCommandEvent &event) override
VECTOR2D m_maxPageSizeMils
Logical drawing sheet size.
virtual bool TransferDataToWindow() override
virtual bool TransferDataFromWindow() override
void SetWksFileName(const wxString &aFilename)
bool m_customFmt
Temporary page info.
void OnComment2TextUpdated(wxCommandEvent &event) override
wxBitmap * m_pageBitmap
the page layuout filename was changed
void OnTitleTextUpdated(wxCommandEvent &event) override
DIALOG_PAGES_SETTINGS(EDA_DRAW_FRAME *aParent, double aIuPerMils, const VECTOR2D &aMaxUserSizeMils)
void SetupStandardButtons(std::map< int, wxString > aLabels={})
EDA_BASE_FRAME * m_parentFrame
Definition: dialog_shim.h:223
Handle the graphic items list to draw/plot the frame and title block.
Definition: ds_data_model.h:39
static DS_DATA_MODEL & GetTheInstance()
static function: returns the instance of DS_DATA_MODEL used in the application
void SaveInString(wxString *aOutputString)
Save the description in a buffer.
void SetPageLayout(const char *aPageLayout, bool aAppend=false, const wxString &aSource=wxT("Sexpr_string"))
Populate the list from a S expr description stored in a string.
static void SetAltInstance(DS_DATA_MODEL *aLayout=nullptr)
Set an alternate instance of DS_DATA_MODEL.
bool LoadDrawingSheet(const wxString &aFullFileName=wxEmptyString, bool Append=false)
Populates the list with a custom layout or the default layout if no custom layout is available.
static const wxString ResolvePath(const wxString &aPath, const wxString &aProjectPath)
Resolve a path which might be project-relative or contain env variable references.
virtual void OnModify()
Must be called after a model change in order to set the "modify" flag and do other frame-specific pro...
bool IsType(FRAME_T aType) const
The base class for create windows for drawing purpose.
virtual void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)=0
virtual const TITLE_BLOCK & GetTitleBlock() const =0
virtual const PAGE_INFO & GetPageSettings() const =0
virtual void SetPageSettings(const PAGE_INFO &aPageSettings)=0
virtual COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const
Returns a pointer to the active color theme settings.
virtual void OnPageSettingsChange()
Called when modifying the page settings.
virtual COLOR4D GetDrawBgColor() const
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
Store page-layout-specific render settings.
Definition: ds_painter.h:46
void LoadColors(const COLOR_SETTINGS *aSettings) override
Definition: ds_painter.cpp:57
void SetDefaultPenWidth(int aWidth)
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Change the color used to draw a layer.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
void SetPrintDC(wxDC *aDC)
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:59
static const wxChar A3[]
Definition: page_info.h:69
static const wxChar USLedger[]
Definition: page_info.h:81
static const wxChar USLetter[]
Definition: page_info.h:79
static const wxChar USLegal[]
Definition: page_info.h:80
static const wxChar A0[]
Definition: page_info.h:72
static const wxChar A4[]
Definition: page_info.h:68
void SetPortrait(bool aIsPortrait)
Rotate the paper page 90 degrees.
Definition: page_info.cpp:189
static void SetCustomWidthMils(double aWidthInMils)
Set the width of Custom page in mils for any custom page constructed or made via SetType() after maki...
Definition: page_info.cpp:235
static const wxChar Custom[]
"User" defined page type
Definition: page_info.h:82
void SetHeightMils(double aHeightInMils)
Definition: page_info.cpp:261
static const wxChar A1[]
Definition: page_info.h:71
static const wxChar E[]
Definition: page_info.h:77
static const wxChar B[]
Definition: page_info.h:74
static const wxChar A2[]
Definition: page_info.h:70
const VECTOR2D & GetSizeMils() const
Definition: page_info.h:144
static double GetCustomHeightMils()
Definition: page_info.h:196
double GetHeightMils() const
Definition: page_info.h:141
static const wxChar GERBER[]
Definition: page_info.h:78
const wxString & GetType() const
Definition: page_info.h:99
double GetWidthMils() const
Definition: page_info.h:136
bool IsPortrait() const
Definition: page_info.h:122
static const wxChar D[]
Definition: page_info.h:76
static const wxChar C[]
Definition: page_info.h:75
void SetWidthMils(double aWidthInMils)
Definition: page_info.cpp:247
static double GetCustomWidthMils()
Definition: page_info.h:191
static void SetCustomHeightMils(double aHeightInMils)
Set the height of Custom page in mils for any custom page constructed or made via SetType() after mak...
Definition: page_info.cpp:241
static const wxChar A5[]
Definition: page_info.h:67
static const wxChar A[]
Definition: page_info.h:73
bool SetType(const wxString &aStandardPageDescriptionName, bool aIsPortrait=false)
Set the name of the page type and also the sizes and margins commonly associated with that type name.
Definition: page_info.cpp:122
virtual const wxString GetProjectPath() const
Return the full path of the project.
Definition: project.cpp:135
void SetBitmap(const wxBitmapBundle &aBmp)
const wxString & GetCompany() const
Definition: title_block.h:96
void SetRevision(const wxString &aRevision)
Definition: title_block.h:81
void SetComment(int aIdx, const wxString &aComment)
Definition: title_block.h:101
const wxString & GetRevision() const
Definition: title_block.h:86
void SetTitle(const wxString &aTitle)
Definition: title_block.h:58
const wxString & GetDate() const
Definition: title_block.h:76
const wxString & GetComment(int aIdx) const
Definition: title_block.h:107
void SetCompany(const wxString &aCompany)
Definition: title_block.h:91
const wxString & GetTitle() const
Definition: title_block.h:63
void SetDate(const wxString &aDate)
Set the date field, and defaults to the current time and date.
Definition: title_block.h:71
void Enable(bool aEnable)
Enable/disable the label, widget and units label.
virtual double GetDoubleValue()
Return the current value in Internal Units.
virtual void SetDoubleValue(double aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
virtual bool Validate(double aMin, double aMax, EDA_UNITS aUnits=EDA_UNITS::UNSCALED)
Validate the control against the given range, informing the user of any errors found.
const wxString ExpandEnvVarSubstitutions(const wxString &aString, const PROJECT *aProject)
Replace any environment variable & text variable references with their values.
Definition: common.cpp:334
The common library.
This file is part of the common library.
#define _HKI(x)
#define MAX_PAGE_EXAMPLE_SIZE
static const wxString pageFmts[]
#define _(s)
void PrintDrawingSheet(const RENDER_SETTINGS *aSettings, const PAGE_INFO &aPageInfo, const wxString &aSheetName, const wxString &aSheetPath, const wxString &aFileName, const TITLE_BLOCK &aTitleBlock, const std::map< wxString, wxString > *aProperties, int aSheetCount, const wxString &aPageNumber, double aMils2Iu, const PROJECT *aProject, const wxString &aSheetLayer, bool aIsFirstPage)
Print the border and title block.
#define PL_EDITOR_FRAME_NAME
wxString NormalizePath(const wxFileName &aFilePath, const ENV_VAR_MAP *aEnvVars, const wxString &aProjectPath)
Normalize a file path to an environmental variable, if possible.
Definition: env_paths.cpp:71
@ FRAME_SCH_SYMBOL_EDITOR
Definition: frame_type.h:35
@ FRAME_SCH_VIEWER
Definition: frame_type.h:36
@ FRAME_SCH
Definition: frame_type.h:34
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:73
void GRFilledRect(wxDC *DC, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aWidth, const COLOR4D &aColor, const COLOR4D &aBgColor)
Definition: gr_basic.cpp:403
static wxString DrawingSheetFileWildcard()
@ LAYER_DRAWINGSHEET
drawingsheet frame and titleblock
Definition: layer_ids.h:220
@ LAYER_SCHEMATIC_DRAWINGSHEET
Definition: layer_ids.h:394
This file contains miscellaneous commonly used macros and functions.
#define MIN_PAGE_SIZE_MILS
Min and max page sizes for clamping, in mils.
Definition: page_info.h:38
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
see class PGM_BASE
static const char * emptyString
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:119
const int scale
std::vector< FAB_LAYER_COLOR > dummy
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: string_utils.h:391
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:85
constexpr T Clamp(const T &lower, const T &value, const T &upper)
Limit value within the range lower <= value <= upper.
Definition: util.h:64
VECTOR2< double > VECTOR2D
Definition: vector2d.h:587
VECTOR2< int > VECTOR2I
Definition: vector2d.h:588
Definition of file extensions used in Kicad.