From 9b5bbd7c770cabd16b4c574a128c2468071ab7d8 Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Sat, 14 Apr 2018 10:51:15 -0400 Subject: [PATCH] Fix wxFileDialog assertion when worksheet file has absolute path. Fixes lp: 1763887 https://bugs.launchpad.net/kicad/+bug/1763887 --- common/dialogs/dialog_page_settings.cpp | 41 +++++++++++++++++-------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp index 1762470e55..a632a6b53d 100644 --- a/common/dialogs/dialog_page_settings.cpp +++ b/common/dialogs/dialog_page_settings.cpp @@ -1,7 +1,7 @@ /* * This program source code file is part of KICAD, a free EDA CAD application. * - * Copyright (C) 1992-2017 Kicad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 1992-2018 Kicad Developers, see AUTHORS.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -54,7 +54,7 @@ // List of page formats. // they are prefixed by "_HKI" (already in use for hotkeys) instead of "_", // because we need both the translated and the not translated version. -// when displayed in dialog we should explicitely call wxGetTranslation() +// when displayed in dialog we should explicitly call wxGetTranslation() // to show the translated version. // See hotkeys_basic.h for more info #define _HKI( x ) wxT( x ) @@ -74,7 +74,7 @@ static const wxString pageFmts[] = _HKI("USLegal 8.5x14in"), // USLegal without space is correct _HKI("USLedger 11x17in"), // USLedger without space is correct _HKI("User (Custom)"), // size defined by user. The string must contain "Custom" - // to be reconized in code + // to be recognized in code }; void EDA_DRAW_FRAME::Process_PageSettings( wxCommandEvent& event ) @@ -125,7 +125,7 @@ void DIALOG_PAGES_SETTINGS::initDialog() double customSizeX; double customSizeY; - // initalize page format choice box and page format list. + // initialize page format choice box and page format list. // The first shows translated strings, the second contains not translated strings m_paperSizeComboBox->Clear(); @@ -138,7 +138,6 @@ void DIALOG_PAGES_SETTINGS::initDialog() // initialize the page layout descr filename SetWksFileName( BASE_SCREEN::m_PageLayoutDescrFileName ); - #ifdef EESCHEMA // Init display value for schematic sub-sheet number wxString format = m_TextSheetCount->GetLabel(); @@ -464,13 +463,16 @@ bool DIALOG_PAGES_SETTINGS::SavePageSettings() if( m_layout_size.x < MIN_PAGE_SIZE || m_layout_size.y < MIN_PAGE_SIZE || m_layout_size.x > MAX_PAGE_SIZE || m_layout_size.y > MAX_PAGE_SIZE ) { - wxString msg = wxString::Format( _( "Selected custom paper size\nis out of the permissible \ -limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), + wxString msg = wxString::Format( _( "Selected custom paper size\n" + "is out of the permissible limits\n" + "%.1f - %.1f %s!\nSelect another custom " + "paper size?" ), g_UserUnit == INCHES ? MIN_PAGE_SIZE / 1000. : MIN_PAGE_SIZE * 25.4 / 1000, g_UserUnit == INCHES ? MAX_PAGE_SIZE / 1000. : MAX_PAGE_SIZE * 25.4 / 1000, g_UserUnit == INCHES ? _( "inches" ) : _( "mm" ) ); - if( wxMessageBox( msg, _( "Warning!" ), wxYES_NO | wxICON_EXCLAMATION, this ) == wxYES ) + if( wxMessageBox( msg, _( "Warning!" ), + wxYES_NO | wxICON_EXCLAMATION, this ) == wxYES ) { return false; } @@ -799,13 +801,26 @@ void DIALOG_PAGES_SETTINGS::GetCustomSizeMilsFromDialog() m_layout_size = wxSize( KiROUND( customSizeX ), KiROUND( customSizeY ) ); } -// Called on .kicad_wks file description selection change + void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxCommandEvent& event ) { + wxFileName fn = GetWksFileName(); + wxString name = GetWksFileName(); + wxString path; + + if( fn.IsAbsolute() ) + { + path = fn.GetPath(); + name = fn.GetFullName(); + } + else + { + path = m_projectPath; + } + // Display a file picker dialog wxFileDialog fileDialog( this, _( "Select Page Layout Description File" ), - m_projectPath, GetWksFileName(), - PageLayoutDescrFileWildcard(), + path, name, PageLayoutDescrFileWildcard(), wxFD_DEFAULT_STYLE | wxFD_FILE_MUST_EXIST ); if( fileDialog.ShowModal() != wxID_OK ) @@ -821,11 +836,11 @@ void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxCommandEvent& event ) if( shortFileName != GetWksFileName() && shortFileName != fileName ) { wxString msg = wxString::Format( _( - "The page layout descr filename has changed.\n" + "The page layout description file name has changed.\n" "Do you want to use the relative path:\n" "\"%s\"\n" "instead of\n" - "\"%s\"" ), GetChars( shortFileName ), GetChars( fileName ) ); + "\"%s\"?" ), GetChars( shortFileName ), GetChars( fileName ) ); if( !IsOK( this, msg ) ) shortFileName = fileName;