Work-around incorrect spacing (and order) of buttons on Mac.

This commit is contained in:
Jeff Young 2021-08-31 22:38:45 +01:00
parent 345f506f0c
commit 2cdd3c9ebf
3 changed files with 31 additions and 26 deletions

View File

@ -151,14 +151,23 @@ long KIDIALOG::getStyle( KD_TYPE aType )
}
bool OverrideLock( wxWindow* aParent, const wxString& aMessage )
bool OverrideLock( wxWindow* aParent, const wxString& aMessage )
{
#ifdef __APPLE__
// wxMessageDialog gets the button spacing wrong on Mac so we have to use wxRichMessageDialog.
// Note that its warning icon is more like wxMessageDialog's error icon, so we use it instead
// of wxICON_ERROR.
wxRichMessageDialog dlg( aParent, aMessage, _( "File Open Error" ),
wxYES_NO | wxICON_WARNING | wxCENTER );
dlg.SetExtendedMessage( _( "Interleaved saves may produce very unexpected results." )
+ wxS( "\n" ) );
dlg.SetYesNoLabels( _( "OK" ), _( "Open Anyway" ) );
#else
wxMessageDialog dlg( aParent, aMessage, _( "File Open Error" ),
wxYES_NO | wxICON_ERROR | wxCENTER );
// Note: must use the "no" label to get the correct positioning/spacing for a (potentially)
// destructive action
dlg.SetYesNoLabels( _( "Do Not Open" ), _( "Open Anyway" ) );
wxYES_NO | wxICON_ERROR | wxCENTER );
dlg.SetExtendedMessage( _( "Interleaved saves may produce very unexpected results." ) );
dlg.SetYesNoLabels( _( "OK" ), _( "Open Anyway" ) );
#endif
return dlg.ShowModal() == wxID_NO;
}
@ -170,7 +179,8 @@ int UnsavedChangesDialog( wxWindow* parent, const wxString& aMessage, bool* aApp
wxRichMessageDialog dlg( parent, aMessage, _( "Save Changes?" ),
wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxICON_WARNING | wxCENTER );
dlg.SetExtendedMessage( _( "If you don't save, all your changes will be permanently lost." ) );
dlg.SetExtendedMessage( _( "If you don't save, all your changes will be permanently lost." )
+ wxS( "\n" ) );
dlg.SetYesNoLabels( _( "Save" ), _( "Discard Changes" ) );
if( aApplyToAll )
@ -192,7 +202,8 @@ int UnsavedChangesDialog( wxWindow* parent, const wxString& aMessage, bool* aApp
int UnsavedChangesDialog( wxWindow* parent, const wxString& aMessage )
{
#ifdef __APPLE__
// wxWidgets gets the button order wrong on Mac so use the other dialog.
// wxMessageDialog gets the button order (and spacing) wrong on Mac so we have to use
// wxRichMessageDialog.
return UnsavedChangesDialog( parent, aMessage, nullptr );
#else
wxMessageDialog dlg( parent, aMessage, _( "Save Changes?" ),

View File

@ -113,16 +113,15 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
return false;
}
wxString fullFileName( aFileSet[0] );
wxString fullFileName( aFileSet[0] );
wxFileName wx_filename( fullFileName );
// We insist on caller sending us an absolute path, if it does not, we say it's a bug.
wxASSERT_MSG( wxFileName( fullFileName ).IsAbsolute(), wxT( "Path is not absolute!" ) );
wxASSERT_MSG( wx_filename.IsAbsolute(), wxT( "Path is not absolute!" ) );
if( !LockFile( fullFileName ) )
{
msg.Printf( _( "Schematic file '%s' is already open.\n\n"
"Interleaved saves may produce very unexpected results.\n" ),
fullFileName );
msg.Printf( _( "Schematic '%s' is already open." ), wx_filename.GetFullName() );
if( !OverrideLock( this, msg ) )
return false;
@ -1119,6 +1118,7 @@ bool SCH_EDIT_FRAME::doAutoSave()
bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
{
wxFileName filename( aFileName );
wxFileName newfilename;
SCH_SHEET_LIST sheetList = Schematic().GetSheets();
SCH_IO_MGR::SCH_FILE_T fileType = (SCH_IO_MGR::SCH_FILE_T) aFileType;
@ -1129,15 +1129,12 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
case SCH_IO_MGR::SCH_CADSTAR_ARCHIVE:
case SCH_IO_MGR::SCH_EAGLE:
// We insist on caller sending us an absolute path, if it does not, we say it's a bug.
wxASSERT_MSG( wxFileName( aFileName ).IsAbsolute(),
wxT( "Import schematic caller didn't send full filename" ) );
wxASSERT_MSG( filename.IsAbsolute(), wxT( "Import schematic: path is not absolute!" ) );
if( !LockFile( aFileName ) )
{
wxString msg;
msg.Printf( _( "Schematic file '%s' is already open.\n\n"
"Interleaved saves may produce very unexpected results.\n" ),
aFileName );
msg.Printf( _( "Schematic '%s' is already open." ), filename.GetFullName() );
if( !OverrideLock( this, msg ) )
return false;

View File

@ -563,24 +563,21 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
return false;
}
wxString fullFileName( aFileSet[0] );
wxString msg;
wxString fullFileName( aFileSet[0] );
wxFileName wx_filename( fullFileName );
wxString msg;
if( Kiface().IsSingle() )
{
KIPLATFORM::APP::RegisterApplicationRestart( fullFileName );
}
// We insist on caller sending us an absolute path, if it does not, we say it's a bug.
wxASSERT_MSG( wxFileName( fullFileName ).IsAbsolute(), wxT( "Path is not absolute!" ) );
wxASSERT_MSG( wx_filename.IsAbsolute(), wxT( "Path is not absolute!" ) );
std::unique_ptr<wxSingleInstanceChecker> lockFile = ::LockFile( fullFileName );
if( !lockFile || lockFile->IsAnotherRunning() )
{
msg.Printf( _( "PCB file '%s' is already open.\n\n"
"Interleaved saves may produce very unexpected results.\n" ),
fullFileName );
msg.Printf( _( "PCB '%s' is already open." ), wx_filename.GetFullName() );
if( !OverrideLock( this, msg ) )
return false;