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 The 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 <core/arraydim.h>
27#include <eda_draw_frame.h>
28#include <eda_item.h>
29#include <embedded_files.h>
30#include <filename_resolver.h>
31#include <gr_basic.h>
32#include <kiface_base.h>
33#include <macros.h>
34#include <math/util.h> // for KiROUND
35#include <project.h>
36#include <tool/actions.h>
37#include <tool/tool_manager.h>
41#include <string_utils.h>
44#include <wx/valgen.h>
45#include <wx/tokenzr.h>
46#include <wx/filedlg.h>
47#include <wx/dcmemory.h>
48#include <wx/msgdlg.h>
49#include <confirm.h>
50
51#define MAX_PAGE_EXAMPLE_SIZE 200
52
53
54// List of page formats.
55// they are prefixed by "_HKI" (already in use for hotkeys) instead of "_",
56// because we need both the translated and the not translated version.
57// when displayed in dialog we should explicitly call wxGetTranslation()
58// to show the translated version.
59// See hotkeys_basic.h for more info
60#define _HKI( x ) wxT( x )
61static const wxString pageFmts[] =
62{
63 _HKI("A5 148x210mm"),
64 _HKI("A4 210x297mm"),
65 _HKI("A3 297x420mm"),
66 _HKI("A2 420x594mm"),
67 _HKI("A1 594x841mm"),
68 _HKI("A0 841x1189mm"),
69 _HKI("A 8.5x11in"),
70 _HKI("B 11x17in"),
71 _HKI("C 17x22in"),
72 _HKI("D 22x34in"),
73 _HKI("E 34x44in"),
74 _HKI("USLetter 8.5x11in"), // USLetter without space is correct
75 _HKI("USLegal 8.5x14in"), // USLegal without space is correct
76 _HKI("USLedger 11x17in"), // USLedger without space is correct
77 _HKI("User (Custom)"), // size defined by user. The string must contain "Custom"
78 // to be recognized in code
79};
80
82 double aIuPerMils, const VECTOR2D& aMaxUserSizeMils ) :
84 m_parent( aParent ),
85 m_screen( m_parent->GetScreen() ),
86 m_initialized( false ),
87 m_pageBitmap( nullptr ),
88 m_iuPerMils( aIuPerMils ),
89 m_embeddedFiles( aEmbeddedFiles ),
90 m_customSizeX( aParent, m_userSizeXLabel, m_userSizeXCtrl, m_userSizeXUnits ),
91 m_customSizeY( aParent, m_userSizeYLabel, m_userSizeYCtrl, m_userSizeYUnits )
92{
94 m_browseButton->SetBitmap( KiBitmapBundle( BITMAPS::small_folder ) );
95
96 m_maxPageSizeMils = aMaxUserSizeMils;
98 m_customFmt = false;
100
102 wxString serialization;
104 m_drawingSheet->SetPageLayout( TO_UTF8( serialization ) );
105
106 m_PickDate->SetValue( wxDateTime::Now() );
107
108 if( m_parent->GetName() == PL_EDITOR_FRAME_NAME )
109 {
110 SetTitle( _( "Preview Settings" ) );
111 m_staticTextPaper->SetLabel( _( "Preview Paper" ) );
112 m_staticTextTitleBlock->SetLabel( _( "Preview Title Block Data" ) );
113 }
114 else
115 {
116 SetTitle( _( "Page Settings" ) );
117 m_staticTextPaper->SetLabel( _( "Paper" ) );
118 m_staticTextTitleBlock->SetLabel( _( "Title Block" ) );
119 }
120
124
126
127 Centre();
128}
129
130
132{
133 delete m_pageBitmap;
134 delete m_drawingSheet;
135}
136
137
139{
140 // initialize page format choice box and page format list.
141 // The first shows translated strings, the second contains not translated strings
142 m_paperSizeComboBox->Clear();
143
144 for( const wxString& pageFmt : pageFmts )
145 {
146 m_pageFmt.Add( pageFmt );
147 m_paperSizeComboBox->Append( wxGetTranslation( pageFmt ) );
148 }
149
150 // initialize the drawing sheet filename
152
156
157 // only a click fires the "selection changed" event, so have to fabricate this check
158 wxCommandEvent dummy;
160
161 if( m_customFmt )
162 {
165 }
166 else
167 {
170 }
171
172 m_TextRevision->SetValue( m_tb.GetRevision() );
173 m_TextDate->SetValue( m_tb.GetDate() );
174 m_TextTitle->SetValue( m_tb.GetTitle() );
175 m_TextCompany->SetValue( m_tb.GetCompany() );
176 m_TextComment1->SetValue( m_tb.GetComment( 0 ) );
177 m_TextComment2->SetValue( m_tb.GetComment( 1 ) );
178 m_TextComment3->SetValue( m_tb.GetComment( 2 ) );
179 m_TextComment4->SetValue( m_tb.GetComment( 3 ) );
180 m_TextComment5->SetValue( m_tb.GetComment( 4 ) );
181 m_TextComment6->SetValue( m_tb.GetComment( 5 ) );
182 m_TextComment7->SetValue( m_tb.GetComment( 6 ) );
183 m_TextComment8->SetValue( m_tb.GetComment( 7 ) );
184 m_TextComment9->SetValue( m_tb.GetComment( 8 ) );
185
186 // The default is to disable aall these fields for the "generic" dialog
187 m_TextSheetCount->Show( false );
188 m_TextSheetNumber->Show( false );
189 m_PaperExport->Show( false );
190 m_RevisionExport->Show( false );
191 m_DateExport->Show( false );
192 m_TitleExport->Show( false );
193 m_CompanyExport->Show( false );
194 m_Comment1Export->Show( false );
195 m_Comment2Export->Show( false );
196 m_Comment3Export->Show( false );
197 m_Comment4Export->Show( false );
198 m_Comment5Export->Show( false );
199 m_Comment6Export->Show( false );
200 m_Comment7Export->Show( false );
201 m_Comment8Export->Show( false );
202 m_Comment9Export->Show( false );
203
205
208
209 GetSizer()->SetSizeHints( this );
210
211 m_initialized = true;
212
213 return true;
214}
215
216
218{
219 int idx = std::max( m_paperSizeComboBox->GetSelection(), 0 );
220 const wxString paperType = m_pageFmt[idx];
221
222 if( paperType.Contains( PAGE_INFO::Custom ) )
223 {
225 return false;
226
228 return false;
229 }
230
231 if( SavePageSettings() )
232 {
234
237
238 // Call the post processing (if any) after changes
240 }
241
242 return true;
243}
244
245
246void DIALOG_PAGES_SETTINGS::OnPaperSizeChoice( wxCommandEvent& event )
247{
248 int idx = m_paperSizeComboBox->GetSelection();
249
250 if( idx < 0 )
251 idx = 0;
252
253 const wxString paperType = m_pageFmt[idx];
254
255 if( paperType.Contains( PAGE_INFO::Custom ) )
256 {
257 m_staticTextOrient->Enable( false );
258 m_orientationComboBox->Enable( false );
259
260 m_staticTextCustSize->Enable( true );
261 m_customSizeX.Enable( true );
262 m_customSizeY.Enable( true );
263 m_customFmt = true;
264 }
265 else
266 {
267 m_staticTextOrient->Enable( true );
268 m_orientationComboBox->Enable( true );
269
270 m_staticTextCustSize->Enable( false );
271 m_customSizeX.Enable( false );
272 m_customSizeY.Enable( false );
273 m_customFmt = false;
274 }
275
278}
279
280
282{
283 if( m_initialized )
284 {
287 }
288}
289
290
292{
293 if( m_initialized )
294 {
297 }
298}
299
300
302{
303 if( m_initialized )
304 {
307 }
308}
309
310
312{
313 if( m_initialized && m_TextRevision->IsModified() )
314 {
316 m_tb.SetRevision( m_TextRevision->GetValue() );
318 }
319}
320
321
322void DIALOG_PAGES_SETTINGS::OnDateTextUpdated( wxCommandEvent& event )
323{
324 if( m_initialized && m_TextDate->IsModified() )
325 {
327 m_tb.SetDate( m_TextDate->GetValue() );
329 }
330}
331
332
333void DIALOG_PAGES_SETTINGS::OnTitleTextUpdated( wxCommandEvent& event )
334{
335 if( m_initialized && m_TextTitle->IsModified() )
336 {
338 m_tb.SetTitle( m_TextTitle->GetValue() );
340 }
341}
342
343
345{
346 if( m_initialized && m_TextCompany->IsModified() )
347 {
349 m_tb.SetCompany( m_TextCompany->GetValue() );
351 }
352}
353
354
356{
357 if( m_initialized && m_TextComment1->IsModified() )
358 {
360 m_tb.SetComment( 0, m_TextComment1->GetValue() );
362 }
363}
364
365
367{
368 if( m_initialized && m_TextComment2->IsModified() )
369 {
371 m_tb.SetComment( 1, m_TextComment2->GetValue() );
373 }
374}
375
376
378{
379 if( m_initialized && m_TextComment3->IsModified() )
380 {
382 m_tb.SetComment( 2, m_TextComment3->GetValue() );
384 }
385}
386
387
389{
390 if( m_initialized && m_TextComment4->IsModified() )
391 {
393 m_tb.SetComment( 3, m_TextComment4->GetValue() );
395 }
396}
397
398
400{
401 if( m_initialized && m_TextComment5->IsModified() )
402 {
404 m_tb.SetComment( 4, m_TextComment5->GetValue() );
406 }
407}
408
409
411{
412 if( m_initialized && m_TextComment6->IsModified() )
413 {
415 m_tb.SetComment( 5, m_TextComment6->GetValue() );
417 }
418}
419
420
422{
423 if( m_initialized && m_TextComment7->IsModified() )
424 {
426 m_tb.SetComment( 6, m_TextComment7->GetValue() );
428 }
429}
430
431
433{
434 if( m_initialized && m_TextComment8->IsModified() )
435 {
437 m_tb.SetComment( 7, m_TextComment8->GetValue() );
439 }
440}
441
442
444{
445 if( m_initialized && m_TextComment9->IsModified() )
446 {
448 m_tb.SetComment( 8, m_TextComment9->GetValue() );
450 }
451}
452
453
454void DIALOG_PAGES_SETTINGS::OnDateApplyClick( wxCommandEvent& event )
455{
456 wxDateTime datetime = m_PickDate->GetValue();
457 wxString date =
458 // We can choose different formats. Should probably be kept in sync with CURRENT_DATE
459 // formatting in TITLE_BLOCK.
460 //
461 // datetime.Format( wxLocale::GetInfo( wxLOCALE_SHORT_DATE_FMT ) );
462 // datetime.Format( wxLocale::GetInfo( wxLOCALE_LONG_DATE_FMT ) );
463 // datetime.Format( wxT("%Y-%b-%d") );
464 datetime.FormatISODate();
465
466 m_TextDate->SetValue( date );
467}
468
469
471{
472 bool success = false;
473 wxString msg;
474 wxString fileName = GetWksFileName();
475
476 wxString fullFileName = m_filenameResolver->ResolvePath( fileName, m_projectPath, { m_embeddedFiles } );
477
479
480 if( !DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( fullFileName, &msg ) )
481 DisplayErrorMessage( this, wxString::Format( _( "Error loading drawing sheet '%s'." ), fullFileName ), msg );
482
484
485 int idx = std::max( m_paperSizeComboBox->GetSelection(), 0 );
486 const wxString paperType = m_pageFmt[idx];
487
488 if( paperType.Contains( PAGE_INFO::Custom ) )
489 {
491
493
494 if( success )
495 {
498
501 }
502 }
503 else
504 {
505 // search for longest common string first, e.g. A4 before A
506 if( paperType.Contains( PAGE_INFO::USLetter ) ) success = m_pageInfo.SetType( PAGE_INFO::USLetter );
507 else if( paperType.Contains( PAGE_INFO::USLegal ) ) success = m_pageInfo.SetType( PAGE_INFO::USLegal );
508 else if( paperType.Contains( PAGE_INFO::USLedger ) ) success = m_pageInfo.SetType( PAGE_INFO::USLedger );
509 else if( paperType.Contains( PAGE_INFO::GERBER ) ) success = m_pageInfo.SetType( PAGE_INFO::GERBER );
510 else if( paperType.Contains( PAGE_INFO::A5 ) ) success = m_pageInfo.SetType( PAGE_INFO::A5 );
511 else if( paperType.Contains( PAGE_INFO::A4 ) ) success = m_pageInfo.SetType( PAGE_INFO::A4 );
512 else if( paperType.Contains( PAGE_INFO::A3 ) ) success = m_pageInfo.SetType( PAGE_INFO::A3 );
513 else if( paperType.Contains( PAGE_INFO::A2 ) ) success = m_pageInfo.SetType( PAGE_INFO::A2 );
514 else if( paperType.Contains( PAGE_INFO::A1 ) ) success = m_pageInfo.SetType( PAGE_INFO::A1 );
515 else if( paperType.Contains( PAGE_INFO::A0 ) ) success = m_pageInfo.SetType( PAGE_INFO::A0 );
516 else if( paperType.Contains( PAGE_INFO::A ) ) success = m_pageInfo.SetType( PAGE_INFO::A );
517 else if( paperType.Contains( PAGE_INFO::B ) ) success = m_pageInfo.SetType( PAGE_INFO::B );
518 else if( paperType.Contains( PAGE_INFO::C ) ) success = m_pageInfo.SetType( PAGE_INFO::C );
519 else if( paperType.Contains( PAGE_INFO::D ) ) success = m_pageInfo.SetType( PAGE_INFO::D );
520 else if( paperType.Contains( PAGE_INFO::E ) ) success = m_pageInfo.SetType( PAGE_INFO::E );
521
522 if( success )
523 {
524 int choice = m_orientationComboBox->GetSelection();
525 m_pageInfo.SetPortrait( choice != 0 );
526 }
527 }
528
529 if( !success )
530 {
531 wxFAIL_MSG( "The translation for paper size must preserve original spellings" );
533 }
534
536
537 m_tb.SetRevision( m_TextRevision->GetValue() );
538 m_tb.SetDate( m_TextDate->GetValue() );
539 m_tb.SetCompany( m_TextCompany->GetValue() );
540 m_tb.SetTitle( m_TextTitle->GetValue() );
541 m_tb.SetComment( 0, m_TextComment1->GetValue() );
542 m_tb.SetComment( 1, m_TextComment2->GetValue() );
543 m_tb.SetComment( 2, m_TextComment3->GetValue() );
544 m_tb.SetComment( 3, m_TextComment4->GetValue() );
545 m_tb.SetComment( 4, m_TextComment5->GetValue() );
546 m_tb.SetComment( 5, m_TextComment6->GetValue() );
547 m_tb.SetComment( 6, m_TextComment7->GetValue() );
548 m_tb.SetComment( 7, m_TextComment8->GetValue() );
549 m_tb.SetComment( 8, m_TextComment9->GetValue() );
550
552
553 return onSavePageSettings();
554}
555
556
558{
559 // search all the not translated label list containing our paper type
560 for( unsigned i = 0; i < m_pageFmt.GetCount(); ++i )
561 {
562 // parse each label looking for aPaperSize within it
563 wxStringTokenizer st( m_pageFmt[i] );
564
565 while( st.HasMoreTokens() )
566 {
567 if( st.GetNextToken() == aPaperSize )
568 {
569 m_paperSizeComboBox->SetSelection( i );
570 return;
571 }
572 }
573 }
574}
575
576
578{
579 int lyWidth, lyHeight;
580
581 VECTOR2D clamped_layout_size( std::clamp( m_layout_size.x, (double) MIN_PAGE_SIZE_MILS,
583 std::clamp( m_layout_size.y, (double) MIN_PAGE_SIZE_MILS,
585
586 double lyRatio = clamped_layout_size.x < clamped_layout_size.y ?
587 (double) clamped_layout_size.y / clamped_layout_size.x :
588 (double) clamped_layout_size.x / clamped_layout_size.y;
589
590 if( clamped_layout_size.x < clamped_layout_size.y )
591 {
592 lyHeight = MAX_PAGE_EXAMPLE_SIZE;
593 lyWidth = KiROUND( (double) lyHeight / lyRatio );
594 }
595 else
596 {
597 lyWidth = MAX_PAGE_EXAMPLE_SIZE;
598 lyHeight = KiROUND( (double) lyWidth / lyRatio );
599 }
600
601 if( m_pageBitmap )
602 {
603 m_PageLayoutExampleBitmap->SetBitmap( wxNullBitmap );
604 delete m_pageBitmap;
605 }
606
607 m_pageBitmap = new wxBitmap( lyWidth + 1, lyHeight + 1 );
608
609 if( m_pageBitmap->IsOk() )
610 {
611 double scaleW = (double) lyWidth / clamped_layout_size.x;
612 double scaleH = (double) lyHeight / clamped_layout_size.y;
613 double scale = std::min( scaleW, scaleH );
614
615 // Prepare DC.
616 wxSize example_size( lyWidth + 1, lyHeight + 1 );
617 wxMemoryDC memDC;
618 memDC.SelectObject( *m_pageBitmap );
619 memDC.SetClippingRegion( wxPoint( 0, 0 ), example_size );
620 memDC.Clear();
621 memDC.SetUserScale( scale, scale );
622
623 // Get logical page size and margins.
624 PAGE_INFO pageDUMMY;
625
626 // Get page type
627 int idx = m_paperSizeComboBox->GetSelection();
628
629 if( idx < 0 )
630 idx = 0;
631
632 wxString pageFmtName = m_pageFmt[idx].BeforeFirst( ' ' );
633 bool portrait = clamped_layout_size.x < clamped_layout_size.y;
634 pageDUMMY.SetType( pageFmtName, portrait );
635
636 if( m_customFmt )
637 {
638 pageDUMMY.SetWidthMils( clamped_layout_size.x );
639 pageDUMMY.SetHeightMils( clamped_layout_size.y );
640 }
641
642 // Draw layout preview.
643 KIGFX::DS_RENDER_SETTINGS renderSettings;
644 COLOR_SETTINGS* colorSettings = m_parent->GetColorSettings();
645 COLOR4D bgColor = m_parent->GetDrawBgColor();
646 wxString emptyString;
647
649 {
650 GRResetPenAndBrush( &memDC );
651 renderSettings.SetDefaultPenWidth( 1 );
652 renderSettings.LoadColors( colorSettings );
653 renderSettings.SetPrintDC( &memDC );
654
658 {
660 renderSettings.SetLayerColor( LAYER_DRAWINGSHEET, color );
661 }
662
663 GRFilledRect( &memDC, VECTOR2I( 0, 0 ), m_layout_size, 0, bgColor, bgColor );
664
665 PrintDrawingSheet( &renderSettings, pageDUMMY, emptyString, emptyString, emptyString,
667 1, &Prj(), wxEmptyString, m_screen->GetVirtualPageNumber() == 1 );
668
669 memDC.SelectObject( wxNullBitmap );
671 }
672
674
675 // Refresh the dialog.
676 Layout();
677 Refresh();
678 }
679}
680
681
683{
684 int idx = std::max( m_paperSizeComboBox->GetSelection(), 0 );
685 const wxString paperType = m_pageFmt[idx];
686
687 // here we assume translators will keep original paper size spellings
688 if( paperType.Contains( PAGE_INFO::Custom ) )
689 {
691
693 {
695 m_orientationComboBox->SetStringSelection( _( "Portrait" ) );
696 else
697 m_orientationComboBox->SetStringSelection( _( "Landscape" ) );
698 }
699 }
700 else
701 {
702 PAGE_INFO pageInfo; // SetType() later to lookup size
703
704 static const wxChar* papers[] = {
705 // longest common string first, since sequential search below
720 };
721
722 unsigned i;
723
724 for( i=0; i < arrayDim( papers ); ++i )
725 {
726 if( paperType.Contains( papers[i] ) )
727 {
728 pageInfo.SetType( papers[i] );
729 break;
730 }
731 }
732
733 wxASSERT( i != arrayDim(papers) ); // dialog UI match the above list?
734
735 VECTOR2D sz = pageInfo.GetSizeMils();
736 m_layout_size = VECTOR2D( sz.x, sz.y );
737
738 // swap sizes to match orientation
739 bool isPortrait = (bool) m_orientationComboBox->GetSelection();
740
741 if( ( isPortrait && m_layout_size.x >= m_layout_size.y ) ||
742 ( !isPortrait && m_layout_size.x < m_layout_size.y ) )
743 {
744 std::swap( m_layout_size.x, m_layout_size.y );
745 }
746 }
747}
748
749
751{
752 double customSizeX = (double) m_customSizeX.GetDoubleValue() / m_iuPerMils;
753 double customSizeY = (double) m_customSizeY.GetDoubleValue() / m_iuPerMils;
754
755 // Ensure layout size can be converted to int coordinates later
756 customSizeX = std::clamp( customSizeX, double( INT_MIN ), double( INT_MAX ) );
757 customSizeY = std::clamp( customSizeY, double( INT_MIN ), double( INT_MAX ) );
758 m_layout_size = VECTOR2D( customSizeX, customSizeY );
759}
760
761
762void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxCommandEvent& event )
763{
764 wxFileName fn = GetWksFileName();
765 wxString name = fn.GetFullName();
766 wxString path;
767 wxString msg;
768
769 if( fn.IsAbsolute() )
770 {
771 path = fn.GetPath();
772 }
773 else
774 {
775 wxFileName expanded( ExpandEnvVarSubstitutions( GetWksFileName(), &m_parentFrame->Prj() ) );
776
777 if( expanded.IsAbsolute() )
778 path = expanded.GetPath();
779 else
781 }
782
783 // Display a file picker dialog
784 FILEDLG_HOOK_EMBED_FILE customize;
785 wxFileDialog fileDialog( this, _( "Drawing Sheet File" ), path, name, FILEEXT::DrawingSheetFileWildcard(),
786 wxFD_DEFAULT_STYLE | wxFD_FILE_MUST_EXIST );
787
788 if( m_embeddedFiles )
789 fileDialog.SetCustomizeHook( customize );
790
791 if( fileDialog.ShowModal() != wxID_OK )
792 return;
793
794 wxString fileName = fileDialog.GetPath();
795 wxString shortFileName;
796
797 if( m_embeddedFiles && customize.GetEmbed() )
798 {
799 fn.Assign( fileName );
801 shortFileName = result->GetLink();
802 fileName = m_embeddedFiles->GetTemporaryFileName( result->name ).GetFullPath();
803 }
804 else if( !m_projectPath.IsEmpty() && fileName.StartsWith( m_projectPath ) )
805 {
806 // Try to use a project-relative path
807 fn = wxFileName( fileName );
808 fn.MakeRelativeTo( m_projectPath );
809 shortFileName = fn.GetFullPath();
810 }
811 else
812 {
813 // Failing that see if we can shorten it with env vars:
814 shortFileName = NormalizePath( fileName, &Pgm().GetLocalEnvVariables(), nullptr );
815 }
816
817 std::unique_ptr<DS_DATA_MODEL> ws = std::make_unique<DS_DATA_MODEL>();
818
819 if( !ws->LoadDrawingSheet( fileName, &msg ) )
820 {
822 wxString::Format( _( "Error loading drawing sheet '%s'.\n%s" ),
823 fileName ),
824 msg );
825 return;
826 }
827
828 delete m_drawingSheet;
829
830 m_drawingSheet = ws.release();
831
832 SetWksFileName( shortFileName );
833
836}
int color
Definition: DXF_plotter.cpp:63
const char * name
Definition: DXF_plotter.cpp:62
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, int aMinHeight)
Definition: bitmap.cpp:110
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
Definition: box2.h:990
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:70
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.
FILENAME_RESOLVER * m_filenameResolver
DS_DATA_MODEL * m_drawingSheet
Temporary title block (basic inscriptions).
DIALOG_PAGES_SETTINGS(EDA_DRAW_FRAME *aParent, EMBEDDED_FILES *aEmbeddedFiles, double aIuPerMils, const VECTOR2D &aMaxUserSizeMils)
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
EMBEDDED_FILES * m_embeddedFiles
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
void SetupStandardButtons(std::map< int, wxString > aLabels={})
EDA_BASE_FRAME * m_parentFrame
Definition: dialog_shim.h:254
Handle the graphic items list to draw/plot the frame and title block.
Definition: ds_data_model.h:39
static DS_DATA_MODEL & GetTheInstance()
Return 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.
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
wxFileName GetTemporaryFileName(const wxString &aName) const
EMBEDDED_FILE * AddFile(const wxFileName &aName, bool aOverwrite)
Load a file from disk and adds it to the collection.
Provide an extensible class to resolve 3D model paths.
wxString ResolvePath(const wxString &aFileName, const wxString &aWorkingPath, std::vector< const EMBEDDED_FILES * > aEmbeddedFilesStack)
Determine the full path of the given file name.
void SetProgramBase(PGM_BASE *aBase)
Set a pointer to the application's PGM_BASE instance used to extract the local env vars.
bool SetProject(const PROJECT *aProject, bool *flgChanged=nullptr)
Set the current KiCad project directory as the first entry in the model path list.
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:236
static const wxChar Custom[]
"User" defined page type
Definition: page_info.h:82
void SetHeightMils(double aHeightInMils)
Definition: page_info.cpp:262
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:248
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:242
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:149
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:355
The common library.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:194
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:73
Helper functions to substitute paths with environmental variables.
@ 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:404
static wxString DrawingSheetFileWildcard()
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
Definition: layer_ids.h:277
@ LAYER_SCHEMATIC_DRAWINGSHEET
Definition: layer_ids.h:485
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...
PGM_BASE & Pgm()
The global program "get" accessor.
Definition: pgm_base.cpp:902
see class PGM_BASE
static const char * emptyString
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:429
VECTOR2< int32_t > VECTOR2I
Definition: vector2d.h:695
VECTOR2< double > VECTOR2D
Definition: vector2d.h:694
Definition of file extensions used in Kicad.