diff --git a/pcbnew/dialogs/wizard_3DShape_Libs_downloader.cpp b/pcbnew/dialogs/wizard_3DShape_Libs_downloader.cpp index b79be80dfe..08e61ffc15 100644 --- a/pcbnew/dialogs/wizard_3DShape_Libs_downloader.cpp +++ b/pcbnew/dialogs/wizard_3DShape_Libs_downloader.cpp @@ -71,8 +71,9 @@ WIZARD_3DSHAPE_LIBS_DOWNLOADER::WIZARD_3DSHAPE_LIBS_DOWNLOADER( wxWindow* aParen wxGetEnv( KISYS3DMOD, &default_path ); wxConfigBase* cfg = Pgm().CommonSettings(); - cfg->Read( KICAD_3DLIBS_LAST_DOWNLOAD_DIR, &m_lastGithubDownloadDirectory, default_path ); - setDownloadDir( m_lastGithubDownloadDirectory ); + wxString tmp; + cfg->Read( KICAD_3DLIBS_LAST_DOWNLOAD_DIR, &tmp, default_path ); + setDownloadDir( tmp ); // Restore the Github 3D shapes libs url wxString githubUrl; @@ -411,7 +412,7 @@ bool WIZARD_3DSHAPE_LIBS_DOWNLOADER::downloadOneLib( const wxString& aLibURL, // Github gives the current url of files inside .3dshapes folders like: // "https://github.com/KiCad/kicad-library/blob/master/modules/packages3d/Capacitors_SMD.3dshapes/C_0402.wrl" - // which displays a html page showing the file in htmp form. + // which displays a html page showing the file in html form. // // the URL of the corresponding raw file is // "https://github.com/KiCad/kicad-library/raw/master/modules/packages3d/Capacitors_SMD.3dshapes/C_0402.wrl" @@ -420,7 +421,7 @@ bool WIZARD_3DSHAPE_LIBS_DOWNLOADER::downloadOneLib( const wxString& aLibURL, // when trying to download raw files. // "https://github.com/KiCad/kicad-library/raw/master/modules/packages3d/Capacitors_SMD.3dshapes/C_0402.wrl" // would be redirected to: - // "https://codeload.github.com/KiCad/kicad-library/master/modules/packages3d/Capacitors_SMD.3dshapes/C_0402.wrl" + // "https://raw.githubusercontent.com/KiCad/kicad-library/master/modules/packages3d/Capacitors_SMD.3dshapes/C_0402.wrl" // So use raw.githubusercontent.com instead of github.com // (and removes the "/raw" in path) speed up the downloads (x2 faster). // @@ -506,11 +507,31 @@ void WIZARD_3DSHAPE_LIBS_DOWNLOADER::updateGithubControls() { bool valid = wxFileName::IsDirWritable( getDownloadDir() ); - // Do not allow to go further unless there is a valid directory selected - m_invalidDir->Show( !valid ); + // Shows or not the warning text if the target 3d folder does not exist, or is not + // writable. + m_invalidDirWarningText->Show( !valid ); + m_bitmapDirWarn->Show( !valid ); + + // If the dialog starts with m_invalidDirWarningText and m_bitmapDirWarn not shown + // the size and position of the sizer containing these widgets can be incorrect, + // until a wxSizeEvent is fired, and the widgets are not shown, or truncated, + // at least on Windows. So fire a dummy wxSizeEvent if the size looks bad + if( m_invalidDirWarningText->IsShown() && m_invalidDirWarningText->GetSize().x < 2 ) + { + wxSizeEvent event( GetSize() ); + wxPostEvent( this, event ); + } + + // Allow to go further only if there is a valid target directory selected enableNext( valid ); } +// Called when the local folder name is edited. +void WIZARD_3DSHAPE_LIBS_DOWNLOADER::OnLocalFolderChange( wxCommandEvent& event ) +{ + updateGithubControls(); +} + void WIZARD_3DSHAPE_LIBS_DOWNLOADER::setupDialogOrder() { diff --git a/pcbnew/dialogs/wizard_3DShape_Libs_downloader.h b/pcbnew/dialogs/wizard_3DShape_Libs_downloader.h index e3cf00ddce..8ea13f1d36 100644 --- a/pcbnew/dialogs/wizard_3DShape_Libs_downloader.h +++ b/pcbnew/dialogs/wizard_3DShape_Libs_downloader.h @@ -74,6 +74,7 @@ public: void OnCheckSaveCopy( wxCommandEvent& aEvent ); void OnDefault3DPathButtonClick( wxCommandEvent& event ); void OnGridLibReviewSize( wxSizeEvent& event ); + void OnLocalFolderChange( wxCommandEvent& event ); protected: // Initialization of wizard pages @@ -140,7 +141,4 @@ protected: wxWizardPageSimple* m_welcomeDlg; wxWizardPageSimple* m_githubListDlg; wxWizardPageSimple* m_reviewDlg; - - // path to the most recently used download directory from Github. - wxString m_lastGithubDownloadDirectory; }; diff --git a/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.cpp b/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.cpp index efe08dc9ec..8cde4a3986 100644 --- a/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.cpp +++ b/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.cpp @@ -22,9 +22,9 @@ WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE( wxWind wxBoxSizer* bSizer1; bSizer1 = new wxBoxSizer( wxVERTICAL ); - m_staticText1 = new wxStaticText( m_wizPage1, wxID_ANY, _("Welcome to the 3D shape Libraries downloader Wizard!"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1->Wrap( -1 ); - bSizer1->Add( m_staticText1, 0, wxALL|wxEXPAND, 5 ); + m_staticTextWelcome = new wxStaticText( m_wizPage1, wxID_ANY, _("Welcome to the 3D shape Libraries downloader Wizard!"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextWelcome->Wrap( -1 ); + bSizer1->Add( m_staticTextWelcome, 0, wxALL|wxEXPAND, 5 ); bSizer1->Add( 0, 20, 0, 0, 5 ); @@ -44,8 +44,11 @@ WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE( wxWind bSizer19->Add( 0, 10, 0, 0, 5 ); - wxBoxSizer* bSizerLocalFolder; - bSizerLocalFolder = new wxBoxSizer( wxHORIZONTAL ); + wxFlexGridSizer* fgSizerLocalFolder; + fgSizerLocalFolder = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizerLocalFolder->AddGrowableCol( 0 ); + fgSizerLocalFolder->SetFlexibleDirection( wxBOTH ); + fgSizerLocalFolder->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); wxBoxSizer* bSizerDinname; bSizerDinname = new wxBoxSizer( wxVERTICAL ); @@ -58,7 +61,7 @@ WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE( wxWind bSizerDinname->Add( m_downloadDir, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - bSizerLocalFolder->Add( bSizerDinname, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizerLocalFolder->Add( bSizerDinname, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); wxBoxSizer* bSizerButts; bSizerButts = new wxBoxSizer( wxVERTICAL ); @@ -70,19 +73,28 @@ WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE( wxWind bSizerButts->Add( m_buttonDefault3DPath, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizerLocalFolder->Add( bSizerButts, 0, wxEXPAND, 5 ); + fgSizerLocalFolder->Add( bSizerButts, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizerWarnMsg; + bSizerWarnMsg = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapDirWarn = new wxStaticBitmap( m_wizPage1, wxID_ANY, wxArtProvider::GetBitmap( wxART_ERROR, wxART_OTHER ), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerWarnMsg->Add( m_bitmapDirWarn, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_invalidDirWarningText = new wxStaticText( m_wizPage1, wxID_ANY, _("It is not possible to write in the selected directory.\nPlease choose another one."), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE ); + m_invalidDirWarningText->Wrap( -1 ); + m_invalidDirWarningText->SetForegroundColour( wxColour( 255, 0, 0 ) ); + + bSizerWarnMsg->Add( m_invalidDirWarningText, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - bSizer19->Add( bSizerLocalFolder, 0, wxEXPAND, 5 ); + fgSizerLocalFolder->Add( bSizerWarnMsg, 1, wxEXPAND, 5 ); - bSizer19->Add( 0, 10, 0, 0, 5 ); + fgSizerLocalFolder->Add( 10, 40, 0, 0, 5 ); - m_invalidDir = new wxStaticText( m_wizPage1, wxID_ANY, _("It is not possible to write in the selected directory.\nPlease choose another one."), wxDefaultPosition, wxDefaultSize, 0 ); - m_invalidDir->Wrap( -1 ); - m_invalidDir->SetForegroundColour( wxColour( 255, 0, 0 ) ); - bSizer19->Add( m_invalidDir, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer19->Add( fgSizerLocalFolder, 1, wxEXPAND, 5 ); bSizer1->Add( bSizer19, 1, wxEXPAND, 5 ); @@ -210,6 +222,7 @@ WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE( wxWind this->Connect( wxID_ANY, wxEVT_WIZARD_FINISHED, wxWizardEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnWizardFinished ) ); this->Connect( wxID_ANY, wxEVT_WIZARD_PAGE_CHANGED, wxWizardEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnPageChanged ) ); this->Connect( wxID_ANY, wxEVT_WIZARD_PAGE_CHANGING, wxWizardEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnPageChanging ) ); + m_downloadDir->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnLocalFolderChange ), NULL, this ); m_btnBrowse->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnBrowseButtonClick ), NULL, this ); m_buttonDefault3DPath->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnDefault3DPathButtonClick ), NULL, this ); m_btnSelectAll3Dlibs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnSelectAll3Dlibs ), NULL, this ); @@ -224,6 +237,7 @@ WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::~WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE() this->Disconnect( wxID_ANY, wxEVT_WIZARD_FINISHED, wxWizardEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnWizardFinished ) ); this->Disconnect( wxID_ANY, wxEVT_WIZARD_PAGE_CHANGED, wxWizardEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnPageChanged ) ); this->Disconnect( wxID_ANY, wxEVT_WIZARD_PAGE_CHANGING, wxWizardEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnPageChanging ) ); + m_downloadDir->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnLocalFolderChange ), NULL, this ); m_btnBrowse->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnBrowseButtonClick ), NULL, this ); m_buttonDefault3DPath->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnDefault3DPathButtonClick ), NULL, this ); m_btnSelectAll3Dlibs->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE::OnSelectAll3Dlibs ), NULL, this ); diff --git a/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.fbp b/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.fbp index 59273ad644..83cedb813f 100644 --- a/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.fbp +++ b/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.fbp @@ -43,7 +43,7 @@ -1,-1 WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE - 591,405 + 591,386 wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ; Add 3D Shape Libraries Wizard @@ -175,7 +175,7 @@ 0 1 - m_staticText1 + m_staticTextWelcome 1 @@ -424,12 +424,19 @@ 5 wxEXPAND - 0 - + 1 + + 2 + wxBOTH + 0 + + 0 - bSizerLocalFolder - wxHORIZONTAL + fgSizerLocalFolder + wxFLEX_GROWMODE_SPECIFIED none + 0 + 0 5 wxEXPAND|wxALIGN_CENTER_VERTICAL @@ -606,7 +613,7 @@ - + OnLocalFolderChange @@ -802,99 +809,191 @@ - - - - 5 - - 0 - - 10 - protected - 0 - - - - 5 - wxALL|wxALIGN_CENTER_HORIZONTAL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - 255,0,0 - 1 - - 0 - 0 - wxID_ANY - It is not possible to write in the selected directory. Please choose another one. - - 0 - - - 0 - - 1 - m_invalidDir - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - + + 5 + wxEXPAND + 1 + + + bSizerWarnMsg + wxHORIZONTAL + none + + 5 + wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + Load From Art Provider; wxART_ERROR; wxART_OTHER + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_bitmapDirWarn + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + 255,0,0 + 1 + + 0 + 0 + wxID_ANY + It is not possible to write in the selected directory. Please choose another one. + + 0 + + + 0 + -1,-1 + 1 + m_invalidDirWarningText + 1 + + + protected + 1 + + Resizable + 1 + + wxALIGN_CENTRE + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + 40 + protected + 10 + + diff --git a/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.h b/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.h index eff150d291..1e14d9db64 100644 --- a/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.h +++ b/pcbnew/dialogs/wizard_3DShape_Libs_downloader_base.h @@ -43,14 +43,15 @@ class WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE : public wxWizard private: protected: - wxStaticText* m_staticText1; + wxStaticText* m_staticTextWelcome; wxStaticText* m_staticText8; wxTextCtrl* m_textCtrlGithubURL; wxStaticText* m_staticText9; wxTextCtrl* m_downloadDir; wxButton* m_btnBrowse; wxButton* m_buttonDefault3DPath; - wxStaticText* m_invalidDir; + wxStaticBitmap* m_bitmapDirWarn; + wxStaticText* m_invalidDirWarningText; wxStaticBitmap* m_bitmapRepo; wxHyperlinkCtrl* m_hyperlinkGithubKicad; wxStaticText* m_staticText112; @@ -67,6 +68,7 @@ class WIZARD_3DSHAPE_LIBS_DOWNLOADER_BASE : public wxWizard virtual void OnWizardFinished( wxWizardEvent& event ) { event.Skip(); } virtual void OnPageChanged( wxWizardEvent& event ) { event.Skip(); } virtual void OnPageChanging( wxWizardEvent& event ) { event.Skip(); } + virtual void OnLocalFolderChange( wxCommandEvent& event ) { event.Skip(); } virtual void OnBrowseButtonClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnDefault3DPathButtonClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnSelectAll3Dlibs( wxCommandEvent& event ) { event.Skip(); }