diff --git a/common/dialogs/dialog_configure_paths.cpp b/common/dialogs/dialog_configure_paths.cpp index 43c5b130bb..d303e13916 100644 --- a/common/dialogs/dialog_configure_paths.cpp +++ b/common/dialogs/dialog_configure_paths.cpp @@ -348,7 +348,8 @@ void DIALOG_CONFIGURE_PATHS::OnGridCellChanging( wxGridEvent& event ) if( grid == m_EnvVars ) { - if( col == TV_VALUE_COL && m_EnvVars->GetCellValue( row, TV_FLAG_COL ).Length() ) + if( col == TV_VALUE_COL && m_EnvVars->GetCellValue( row, TV_FLAG_COL ).Length() + && !Pgm().GetCommonSettings()->m_DoNotShowAgain.env_var_overwrite_warning ) { wxString msg1 = _( "This path was defined externally to the running process and\n" "will only be temporarily overwritten." ); @@ -361,14 +362,16 @@ void DIALOG_CONFIGURE_PATHS::OnGridCellChanging( wxGridEvent& event ) dlg.ShowDetailedText( msg2 ); dlg.DoNotShowCheckbox( __FILE__, __LINE__ ); dlg.ShowModal(); + + if( dlg.DoNotShowAgain() ) + Pgm().GetCommonSettings()->m_DoNotShowAgain.env_var_overwrite_warning = true; } else if( col == TV_NAME_COL && m_EnvVars->GetCellValue( row, TV_NAME_COL ) != text ) { // This env var name is reserved and cannot be added here. if( text == PROJECT_VAR_NAME ) { - wxMessageBox( wxString::Format( - _( "The name %s is reserved, and cannot be used here" ), + wxMessageBox( wxString::Format( _( "The name %s is reserved, and cannot be used." ), PROJECT_VAR_NAME ) ); event.Veto(); } diff --git a/common/pgm_base.cpp b/common/pgm_base.cpp index 5b2aa4a27e..1435888a8c 100644 --- a/common/pgm_base.cpp +++ b/common/pgm_base.cpp @@ -106,8 +106,6 @@ PGM_BASE::PGM_BASE() m_Printing = false; m_ModalDialogCount = 0; - m_show_env_var_dialog = true; - setLanguageId( wxLANGUAGE_DEFAULT ); ForceSystemPdfBrowser( false ); @@ -338,7 +336,6 @@ bool PGM_BASE::setExecutablePath() void PGM_BASE::loadCommonSettings() { - m_show_env_var_dialog = GetCommonSettings()->m_Env.show_warning_dialog; m_editor_name = GetCommonSettings()->m_System.editor_name; for( const std::pair<wxString, ENV_VAR_ITEM> it : GetCommonSettings()->m_Env.vars ) @@ -369,10 +366,7 @@ void PGM_BASE::SaveCommonSettings() // GetCommonSettings() is not initialized until fairly late in the // process startup: InitPgm(), so test before using: if( GetCommonSettings() ) - { GetCommonSettings()->m_System.working_dir = wxGetCwd(); - GetCommonSettings()->m_Env.show_warning_dialog = m_show_env_var_dialog; - } } diff --git a/common/settings/common_settings.cpp b/common/settings/common_settings.cpp index 6ff93f11f9..6b60237cad 100644 --- a/common/settings/common_settings.cpp +++ b/common/settings/common_settings.cpp @@ -97,9 +97,6 @@ COMMON_SETTINGS::COMMON_SETTINGS() : m_params.emplace_back( new PARAM<int>( "auto_backup.min_interval", &m_Backup.min_interval, 300 ) ); - m_params.emplace_back( new PARAM<bool>( "environment.show_warning_dialog", - &m_Env.show_warning_dialog, false ) ); - m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "environment.vars", [&]() -> nlohmann::json { @@ -276,6 +273,15 @@ COMMON_SETTINGS::COMMON_SETTINGS() : m_params.emplace_back( new PARAM<int>( "system.clear_3d_cache_interval", &m_System.clear_3d_cache_interval, 30 ) ); + m_params.emplace_back( new PARAM<bool>( "do_not_show_again.zone_fill_warning", + &m_DoNotShowAgain.zone_fill_warning, false ) ); + + m_params.emplace_back( new PARAM<bool>( "do_not_show_again.env_var_overwrite_warning", + &m_DoNotShowAgain.env_var_overwrite_warning, false ) ); + + m_params.emplace_back( new PARAM<bool>( "do_not_show_again.scaled_3d_models_warning", + &m_DoNotShowAgain.scaled_3d_models_warning, false ) ); + m_params.emplace_back( new PARAM<bool>( "session.remember_open_files", &m_Session.remember_open_files, false ) ); diff --git a/include/pgm_base.h b/include/pgm_base.h index 56c8112631..2b81c9e7ef 100644 --- a/include/pgm_base.h +++ b/include/pgm_base.h @@ -327,9 +327,6 @@ protected: wxString m_pdf_browser; wxString m_editor_name; - /// Flag to indicate if the environment variable overwrite warning dialog should be shown. - bool m_show_env_var_dialog; - }; diff --git a/include/settings/common_settings.h b/include/settings/common_settings.h index f05499abcb..00ad7980e2 100644 --- a/include/settings/common_settings.h +++ b/include/settings/common_settings.h @@ -69,7 +69,6 @@ public: struct ENVIRONMENT { - bool show_warning_dialog; ENV_VAR_MAP vars; }; @@ -118,6 +117,13 @@ public: int clear_3d_cache_interval; }; + struct DO_NOT_SHOW_AGAIN + { + bool zone_fill_warning; + bool env_var_overwrite_warning; + bool scaled_3d_models_warning; + }; + struct NETCLASS_PANEL { int sash_pos; @@ -153,12 +159,9 @@ public: SYSTEM m_System; + DO_NOT_SHOW_AGAIN m_DoNotShowAgain; + NETCLASS_PANEL m_NetclassPanel; - - // TODO: These may not want to be in common - wxString m_3DLibsUrl; - - wxString m_3DLibsDownloadPath; }; #endif diff --git a/pcbnew/dialogs/dialog_export_step.cpp b/pcbnew/dialogs/dialog_export_step.cpp index 9af0e768de..bc2681a2c0 100644 --- a/pcbnew/dialogs/dialog_export_step.cpp +++ b/pcbnew/dialogs/dialog_export_step.cpp @@ -26,7 +26,7 @@ #include <wx/stdpaths.h> #include <wx/process.h> - +#include <pgm_base.h> #include <board.h> #include <confirm.h> #include <dialog_export_step_base.h> @@ -182,17 +182,21 @@ DIALOG_EXPORT_STEP::DIALOG_EXPORT_STEP( PCB_EDIT_FRAME* aParent, const wxString& break; } - if( !bad_scales.empty() ) + if( !bad_scales.empty() + && !Pgm().GetCommonSettings()->m_DoNotShowAgain.scaled_3d_models_warning ) { wxString extendedMsg = _( "Non-unity scaled models:" ) + "\n" + bad_scales; KIDIALOG msgDlg( m_parent, _( "Scaled models detected. " - "Model scaling is not reliable for mechanical export." ), + "Model scaling is not reliable for mechanical export." ), _( "Model Scale Warning" ), wxOK | wxICON_WARNING ); msgDlg.SetExtendedMessage( extendedMsg ); msgDlg.DoNotShowCheckbox( __FILE__, __LINE__ ); msgDlg.ShowModal(); + + if( msgDlg.DoNotShowAgain() ) + Pgm().GetCommonSettings()->m_DoNotShowAgain.scaled_3d_models_warning = true; } // Now all widgets have the size fixed, call FinishDialogSettings finishDialogSettings(); diff --git a/pcbnew/tools/pcb_control.cpp b/pcbnew/tools/pcb_control.cpp index 7be561aca0..723614d22e 100644 --- a/pcbnew/tools/pcb_control.cpp +++ b/pcbnew/tools/pcb_control.cpp @@ -24,6 +24,7 @@ */ #include "edit_tool.h" +#include <pgm_base.h> #include "pcb_actions.h" #include "pcb_control.h" #include "pcb_picker_tool.h" @@ -52,10 +53,11 @@ #include <properties.h> #include <settings/color_settings.h> #include <tool/tool_manager.h> -#include <view/view_controls.h> #include <footprint_viewer_frame.h> #include <footprint_edit_frame.h> #include <widgets/progress_reporter.h> +#include <widgets/infobar.h> +#include <wx/hyperlink.h> using namespace std::placeholders; @@ -185,6 +187,53 @@ int PCB_CONTROL::ViaDisplayMode( const TOOL_EVENT& aEvent ) } +/** + * We have bug reports indicating that some new users confuse zone filling/unfilling with the + * display modes. This will put up a warning if they show zone fills when one or more zones + * are unfilled. + */ +void PCB_CONTROL::unfilledZoneCheck() +{ + if( Pgm().GetCommonSettings()->m_DoNotShowAgain.zone_fill_warning ) + return; + + bool unfilledZones = false; + + for( const ZONE* zone : board()->Zones() ) + { + if( !zone->IsFilled() ) + { + unfilledZones = true; + break; + } + } + + if( unfilledZones ) + { + WX_INFOBAR* infobar = frame()->GetInfoBar(); + wxHyperlinkCtrl* button = new wxHyperlinkCtrl( infobar, wxID_ANY, _( "Don't show again" ), + wxEmptyString ); + + button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<void( wxHyperlinkEvent& aEvent )>( + [&]( wxHyperlinkEvent& aEvent ) + { + Pgm().GetCommonSettings()->m_DoNotShowAgain.zone_fill_warning = true; + frame()->GetInfoBar()->Dismiss(); + } ) ); + + infobar->RemoveAllButtons(); + infobar->AddButton( button ); + + wxString msg; + msg.Printf( _( "Not all zones are filled. Use Edit > Fill All Zones (%s) " + "if you wish to see all fills." ), + KeyNameFromKeyCode( PCB_ACTIONS::zoneFillAll.GetHotKey() ) ); + + infobar->ShowMessageFor( msg, 10000, wxICON_WARNING ); + } +} + + int PCB_CONTROL::ZoneDisplayMode( const TOOL_EVENT& aEvent ) { PCB_DISPLAY_OPTIONS opts = displayOptions(); @@ -192,22 +241,7 @@ int PCB_CONTROL::ZoneDisplayMode( const TOOL_EVENT& aEvent ) // Apply new display options to the GAL canvas if( aEvent.IsAction( &PCB_ACTIONS::zoneDisplayFilled ) ) { - if( opts.m_ZoneDisplayMode == ZONE_DISPLAY_MODE::SHOW_FILLED ) - { - // Check for user misunderstanding between fills and display mode - for( const ZONE* zone : board()->Zones() ) - { - if( !zone->IsFilled() ) - { - wxString msg; - msg.Printf( _( "Not all zones are filled. Use Edit > Fill All Zones (%s) " - "if you wish to see all fills." ), - KeyNameFromKeyCode( PCB_ACTIONS::zoneFillAll.GetHotKey() ) ); - m_frame->ShowInfoBarMsg( msg, true ); - break; - } - } - } + unfilledZoneCheck(); opts.m_ZoneDisplayMode = ZONE_DISPLAY_MODE::SHOW_FILLED; } diff --git a/pcbnew/tools/pcb_control.h b/pcbnew/tools/pcb_control.h index 0bff88fa5d..ffb428bbc8 100644 --- a/pcbnew/tools/pcb_control.h +++ b/pcbnew/tools/pcb_control.h @@ -100,6 +100,13 @@ private: ///< Sets up handlers for various events. void setTransitions() override; + /** + * We have bug reports indicating that some new users confuse zone filling/unfilling with + * the display modes. This will put up a warning if they show zone fills when one or more + * zones are unfilled. + */ + void unfilledZoneCheck(); + /** * Add and select or just select for move/place command a list of board items. *