mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 10:13:19 +02:00
* Set default button on all dialogs that do not already have a defined default button. The only exception is the EESchema net list dialog which needs converted over to wxFormBuilder and due to it's design makes setting the default button in any tab other than the default tab problematic. * Fix escape key dialog handling bug in EESchema print post script dialog.
286 lines
7.8 KiB
C++
286 lines
7.8 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: dialog_page_settings.cpp
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
/* The "Page Settings" dialog box created by this file (and setpage.h)
|
|
* contains seven checkboxes which *are* shown when that dialog box is
|
|
* invoked in EESchema, but which are *not* shown when that dialog box is
|
|
* invoked in Pcbnew instead.
|
|
*/
|
|
|
|
#include "fctsys.h"
|
|
#include "common.h"
|
|
#include "base_struct.h"
|
|
#include "class_drawpanel.h"
|
|
#include "class_sch_screen.h"
|
|
#include "wxstruct.h"
|
|
|
|
#include "wx/valgen.h"
|
|
|
|
#ifdef EESCHEMA
|
|
#include "general.h"
|
|
#endif
|
|
|
|
#include "dialog_page_settings.h"
|
|
|
|
#define NB_ITEMS 11
|
|
Ki_PageDescr* SheetList[NB_ITEMS + 1] =
|
|
{
|
|
&g_Sheet_A4, &g_Sheet_A3, &g_Sheet_A2, &g_Sheet_A1, &g_Sheet_A0,
|
|
&g_Sheet_A, &g_Sheet_B, &g_Sheet_C, &g_Sheet_D, &g_Sheet_E,
|
|
&g_Sheet_user, NULL
|
|
};
|
|
|
|
|
|
void EDA_DRAW_FRAME::Process_PageSettings( wxCommandEvent& event )
|
|
{
|
|
DIALOG_PAGES_SETTINGS frame( this );
|
|
int diag = frame.ShowModal();
|
|
|
|
if( DrawPanel && diag )
|
|
DrawPanel->Refresh();
|
|
}
|
|
|
|
|
|
DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ) :
|
|
DIALOG_PAGES_SETTINGS_BASE( parent )
|
|
{
|
|
m_Parent = parent;
|
|
m_Screen = m_Parent->GetScreen();
|
|
m_Modified = 0;
|
|
m_SelectedSheet = NULL;
|
|
m_CurrentSelection = 0;
|
|
|
|
initDialog();
|
|
|
|
GetSizer()->SetSizeHints( this );
|
|
Centre();
|
|
}
|
|
|
|
|
|
DIALOG_PAGES_SETTINGS::~DIALOG_PAGES_SETTINGS()
|
|
{
|
|
}
|
|
|
|
|
|
void DIALOG_PAGES_SETTINGS::initDialog()
|
|
{
|
|
wxString msg;
|
|
|
|
SetFocus();
|
|
SearchPageSizeSelection();
|
|
|
|
// Init display value for sheet User size
|
|
wxString format = m_TextSheetCount->GetLabel();
|
|
msg.Printf( format, m_Screen->m_NumberOfScreen );
|
|
m_TextSheetCount->SetLabel( msg );
|
|
format = m_TextSheetNumber->GetLabel();
|
|
msg.Printf( format, m_Screen->m_ScreenNumber );
|
|
m_TextSheetNumber->SetLabel( msg );
|
|
|
|
switch( g_UserUnit )
|
|
{
|
|
case MILLIMETRES:
|
|
UserSizeX = (double) g_Sheet_user.m_Size.x * 25.4 / 1000;
|
|
UserSizeY = (double) g_Sheet_user.m_Size.y * 25.4 / 1000;
|
|
msg.Printf( wxT( "%.2f" ), UserSizeX );
|
|
m_TextUserSizeX->SetValue( msg );
|
|
msg.Printf( wxT( "%.2f" ), UserSizeY );
|
|
m_TextUserSizeY->SetValue( msg );
|
|
break;
|
|
|
|
case INCHES:
|
|
UserSizeX = (double) g_Sheet_user.m_Size.x / 1000;
|
|
UserSizeY = (double) g_Sheet_user.m_Size.y / 1000;
|
|
msg.Printf( wxT( "%.3f" ), UserSizeX );
|
|
m_TextUserSizeX->SetValue( msg );
|
|
msg.Printf( wxT( "%.3f" ), UserSizeY );
|
|
m_TextUserSizeY->SetValue( msg );
|
|
break;
|
|
|
|
case UNSCALED_UNITS:
|
|
UserSizeX = g_Sheet_user.m_Size.x;
|
|
UserSizeY = g_Sheet_user.m_Size.y;
|
|
msg.Printf( wxT( "%f" ), UserSizeX );
|
|
m_TextUserSizeX->SetValue( msg );
|
|
msg.Printf( wxT( "%f" ), UserSizeY );
|
|
m_TextUserSizeY->SetValue( msg );
|
|
break;
|
|
}
|
|
|
|
// Set validators
|
|
m_PageSizeBox->SetValidator( wxGenericValidator( &m_CurrentSelection ) );
|
|
m_TextRevision->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Revision ) );
|
|
m_TextTitle->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Title ) );
|
|
m_TextCompany->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Company ) );
|
|
m_TextComment1->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire1 ) );
|
|
m_TextComment2->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire2 ) );
|
|
m_TextComment3->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire3 ) );
|
|
m_TextComment4->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire4 ) );
|
|
|
|
#ifndef EESCHEMA
|
|
m_RevisionExport->Show( false );
|
|
m_TitleExport->Show( false );
|
|
m_CompanyExport->Show( false );
|
|
m_Comment1Export->Show( false );
|
|
m_Comment2Export->Show( false );
|
|
m_Comment3Export->Show( false );
|
|
m_Comment4Export->Show( false );
|
|
#endif
|
|
|
|
// Make the OK button the default.
|
|
m_sdbSizer1OK->SetDefault();
|
|
}
|
|
|
|
|
|
/*!
|
|
* wxEVT_CLOSE_WINDOW event handler for ID_DIALOG
|
|
*/
|
|
|
|
void DIALOG_PAGES_SETTINGS::OnCloseWindow( wxCloseEvent& event )
|
|
{
|
|
EndModal( m_Modified );
|
|
}
|
|
|
|
|
|
/*!
|
|
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
|
|
*/
|
|
|
|
void DIALOG_PAGES_SETTINGS::OnOkClick( wxCommandEvent& event )
|
|
{
|
|
SavePageSettings( event );
|
|
m_Modified = 1;
|
|
Close( true );
|
|
}
|
|
|
|
|
|
/*!
|
|
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
|
|
*/
|
|
|
|
void DIALOG_PAGES_SETTINGS::OnCancelClick( wxCommandEvent& event )
|
|
{
|
|
Close( true );
|
|
}
|
|
|
|
|
|
void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event )
|
|
{
|
|
double dtmp;
|
|
wxString msg;
|
|
|
|
m_Screen->m_Revision = m_TextRevision->GetValue();
|
|
m_Screen->m_Company = m_TextCompany->GetValue();
|
|
m_Screen->m_Title = m_TextTitle->GetValue();
|
|
m_Screen->m_Commentaire1 = m_TextComment1->GetValue();
|
|
m_Screen->m_Commentaire2 = m_TextComment2->GetValue();
|
|
m_Screen->m_Commentaire3 = m_TextComment3->GetValue();
|
|
m_Screen->m_Commentaire4 = m_TextComment4->GetValue();
|
|
|
|
msg = m_TextUserSizeX->GetValue();
|
|
msg.ToDouble( &dtmp );
|
|
UserSizeX = dtmp;
|
|
msg = m_TextUserSizeY->GetValue();
|
|
msg.ToDouble( &dtmp );
|
|
UserSizeY = dtmp;
|
|
|
|
int ii = m_PageSizeBox->GetSelection();
|
|
|
|
if( ii < 0 )
|
|
ii = 0;
|
|
|
|
m_SelectedSheet = SheetList[ii];
|
|
m_Screen->m_CurrentSheetDesc = m_SelectedSheet;
|
|
|
|
switch( g_UserUnit )
|
|
{
|
|
case MILLIMETRES:
|
|
g_Sheet_user.m_Size.x = (int) ( UserSizeX * 1000 / 25.4 );
|
|
g_Sheet_user.m_Size.y = (int) ( UserSizeY * 1000 / 25.4 );
|
|
break;
|
|
|
|
case INCHES:
|
|
g_Sheet_user.m_Size.x = (int) ( UserSizeX * 1000 );
|
|
g_Sheet_user.m_Size.y = (int) ( UserSizeY * 1000 );
|
|
break;
|
|
|
|
case UNSCALED_UNITS:
|
|
g_Sheet_user.m_Size.x = (int) ( UserSizeX );
|
|
g_Sheet_user.m_Size.y = (int) ( UserSizeY );
|
|
break;
|
|
}
|
|
|
|
if( g_Sheet_user.m_Size.x < 6000 )
|
|
g_Sheet_user.m_Size.x = 6000;
|
|
|
|
if( g_Sheet_user.m_Size.x > 44000 )
|
|
g_Sheet_user.m_Size.x = 44000;
|
|
|
|
if( g_Sheet_user.m_Size.y < 4000 )
|
|
g_Sheet_user.m_Size.y = 4000;
|
|
|
|
if( g_Sheet_user.m_Size.y > 44000 )
|
|
g_Sheet_user.m_Size.y = 44000;
|
|
|
|
#ifdef EESCHEMA
|
|
/* Exports settings to other sheets if requested: */
|
|
SCH_SCREEN* screen;
|
|
|
|
/* Build the screen list */
|
|
SCH_SCREENS ScreenList;
|
|
|
|
/* Update the datas */
|
|
for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
|
|
{
|
|
if( screen == m_Screen )
|
|
continue;
|
|
|
|
if( m_RevisionExport->IsChecked() )
|
|
screen->m_Revision = m_Screen->m_Revision;
|
|
|
|
if( m_TitleExport->IsChecked() )
|
|
screen->m_Title = m_Screen->m_Title;
|
|
|
|
if( m_CompanyExport->IsChecked() )
|
|
screen->m_Company = m_Screen->m_Company;
|
|
|
|
if( m_Comment1Export->IsChecked() )
|
|
screen->m_Commentaire1 = m_Screen->m_Commentaire1;
|
|
|
|
if( m_Comment2Export->IsChecked() )
|
|
screen->m_Commentaire2 = m_Screen->m_Commentaire2;
|
|
|
|
if( m_Comment3Export->IsChecked() )
|
|
screen->m_Commentaire3 = m_Screen->m_Commentaire3;
|
|
|
|
if( m_Comment4Export->IsChecked() )
|
|
screen->m_Commentaire4 = m_Screen->m_Commentaire4;
|
|
}
|
|
|
|
#endif
|
|
|
|
m_Screen->SetModify();
|
|
m_Parent->DrawPanel->Refresh();
|
|
}
|
|
|
|
|
|
/* Search the correct index to activate the radiobox list size selection
|
|
* according to the current page size
|
|
*/
|
|
void DIALOG_PAGES_SETTINGS::SearchPageSizeSelection()
|
|
{
|
|
Ki_PageDescr* sheet;
|
|
int ii;
|
|
|
|
m_CurrentSelection = NB_ITEMS - 1;
|
|
|
|
for( ii = 0; ii < NB_ITEMS; ii++ )
|
|
{
|
|
sheet = SheetList[ii];
|
|
|
|
if( m_Parent->GetScreen()->m_CurrentSheetDesc == sheet )
|
|
m_CurrentSelection = ii;
|
|
}
|
|
}
|