dialog_page_settings.cpp 7.76 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/////////////////////////////////////////////////////////////////////////////
// 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"
15
#include "class_sch_screen.h"
16 17 18 19 20 21 22 23 24 25 26
#include "wxstruct.h"

#include "wx/valgen.h"

#ifdef EESCHEMA
#include "general.h"
#endif

#include "dialog_page_settings.h"

#define NB_ITEMS 11
27
Ki_PageDescr* SheetList[NB_ITEMS + 1] =
28
{
29 30
    &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,
31 32 33 34
    &g_Sheet_user, NULL
};


35
void EDA_DRAW_FRAME::Process_PageSettings( wxCommandEvent& event )
36
{
37
    DIALOG_PAGES_SETTINGS frame( this );
38
    int diag = frame.ShowModal();
39 40

    if( DrawPanel && diag )
41 42 43 44
        DrawPanel->Refresh();
}


45
DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ) :
46 47
    DIALOG_PAGES_SETTINGS_BASE( parent )
{
48 49
    m_Parent   = parent;
    m_Screen   = m_Parent->GetScreen();
50
    m_Modified = 0;
51
    m_SelectedSheet    = NULL;
52 53
    m_CurrentSelection = 0;

54
    initDialog();
55

56
    GetSizer()->SetSizeHints( this );
57 58 59
    Centre();
}

60

61 62 63 64
DIALOG_PAGES_SETTINGS::~DIALOG_PAGES_SETTINGS()
{
}

65

66 67 68 69 70 71 72 73 74
void DIALOG_PAGES_SETTINGS::initDialog()
{
    wxString msg;

    SetFocus();
    SearchPageSizeSelection();

    // Init display value for sheet User size
    wxString format = m_TextSheetCount->GetLabel();
75 76
    msg.Printf( format, m_Screen->m_NumberOfScreen );
    m_TextSheetCount->SetLabel( msg );
77
    format = m_TextSheetNumber->GetLabel();
78 79
    msg.Printf( format, m_Screen->m_ScreenNumber );
    m_TextSheetNumber->SetLabel( msg );
80

81
    switch( g_UserUnit )
82
    {
83
    case MILLIMETRES:
84 85
        UserSizeX  = (double) g_Sheet_user.m_Size.x * 25.4 / 1000;
        UserSizeY  = (double) g_Sheet_user.m_Size.y * 25.4 / 1000;
86 87 88 89 90 91 92
        msg.Printf( wxT( "%.2f" ), UserSizeX );
        m_TextUserSizeX->SetValue( msg );
        msg.Printf( wxT( "%.2f" ), UserSizeY );
        m_TextUserSizeY->SetValue( msg );
        break;

    case INCHES:
93 94
        UserSizeX  = (double) g_Sheet_user.m_Size.x / 1000;
        UserSizeY  = (double) g_Sheet_user.m_Size.y / 1000;
95 96 97 98 99 100 101
        msg.Printf( wxT( "%.3f" ), UserSizeX );
        m_TextUserSizeX->SetValue( msg );
        msg.Printf( wxT( "%.3f" ), UserSizeY );
        m_TextUserSizeY->SetValue( msg );
        break;

    case UNSCALED_UNITS:
102 103
        UserSizeX  = g_Sheet_user.m_Size.x;
        UserSizeY  = g_Sheet_user.m_Size.y;
104 105 106 107 108
        msg.Printf( wxT( "%f" ), UserSizeX );
        m_TextUserSizeX->SetValue( msg );
        msg.Printf( wxT( "%f" ), UserSizeY );
        m_TextUserSizeY->SetValue( msg );
        break;
109
    }
110

111
    // Set validators
112 113 114 115 116 117 118 119
    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 ) );
120 121

#ifndef EESCHEMA
122 123 124 125 126 127 128
    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 );
129
#endif
130 131 132

    // Make the OK button the default.
    m_sdbSizer1OK->SetDefault();
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
}


/*!
 * 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;
154
    Close( true );
155 156 157 158 159 160 161 162 163
}


/*!
 * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
 */

void DIALOG_PAGES_SETTINGS::OnCancelClick( wxCommandEvent& event )
{
164
    Close( true );
165 166 167
}


168
void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event )
169
{
170 171
    double      dtmp;
    wxString    msg;
172

173 174 175 176 177 178 179
    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();
180 181

    msg = m_TextUserSizeX->GetValue();
182
    msg.ToDouble( &dtmp );
183 184
    UserSizeX = dtmp;
    msg = m_TextUserSizeY->GetValue();
185
    msg.ToDouble( &dtmp );
186 187 188 189 190 191 192 193 194 195
    UserSizeY = dtmp;

    int ii = m_PageSizeBox->GetSelection();

    if( ii < 0 )
        ii = 0;

    m_SelectedSheet = SheetList[ii];
    m_Screen->m_CurrentSheetDesc = m_SelectedSheet;

196
    switch( g_UserUnit )
197
    {
198
    case MILLIMETRES:
199 200
        g_Sheet_user.m_Size.x  = (int) ( UserSizeX * 1000 / 25.4 );
        g_Sheet_user.m_Size.y  = (int) ( UserSizeY * 1000 / 25.4 );
201 202 203
        break;

    case INCHES:
204 205
        g_Sheet_user.m_Size.x  = (int) ( UserSizeX * 1000 );
        g_Sheet_user.m_Size.y  = (int) ( UserSizeY * 1000 );
206 207 208
        break;

    case UNSCALED_UNITS:
209 210
        g_Sheet_user.m_Size.x  = (int) ( UserSizeX );
        g_Sheet_user.m_Size.y  = (int) ( UserSizeY );
211
        break;
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
    }

    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: */
228 229
    SCH_SCREEN* screen;

230
    /* Build the screen list */
231
    SCH_SCREENS ScreenList;
232

233 234 235 236 237 238 239 240 241 242
    /* 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() )
243
            screen->m_Title = m_Screen->m_Title;
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259

        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;
    }
260

261 262 263
#endif

    m_Screen->SetModify();
264
    m_Parent->DrawPanel->Refresh();
265 266 267 268 269 270
}


/* Search the correct index to activate the radiobox list size selection
 * according to the current page size
 */
271
void DIALOG_PAGES_SETTINGS::SearchPageSizeSelection()
272
{
273 274
    Ki_PageDescr*   sheet;
    int             ii;
275 276

    m_CurrentSelection = NB_ITEMS - 1;
277

278 279 280
    for( ii = 0; ii < NB_ITEMS; ii++ )
    {
        sheet = SheetList[ii];
281 282

        if( m_Parent->GetScreen()->m_CurrentSheetDesc == sheet )
283 284 285
            m_CurrentSelection = ii;
    }
}