41#include <wx/filedlg.h>
45#define GRID_CELL_MARGIN 4
60 SetDoubleBuffered(
true );
64 m_pcm->SetDialogWindow(
this );
65 m_pcm->StopBackgroundUpdate();
73 const wxString& aVersion )
77 if( wxMessageBox( wxString::Format(
_(
"Are you sure you want to update pinned package "
78 "from version %s to %s?" ),
80 _(
"Confirm update" ), wxICON_QUESTION | wxYES_NO,
this )
110 wxString::Format( wxT(
"%s \u279C %s" ), aData.
current_version, aVersion ) );
133 [
this](
const wxString& aPackageId,
const PCM_PACKAGE_STATE aState,
const bool aPinned )
135 m_pcm->SetPinned( aPackageId, aPinned );
149 wxString label = wxGetTranslation( entry.second );
154 m_dialogNotebook->SetPageText( 0, wxString::Format(
_(
"Repository (%d)" ), 0 ) );
162 { wxID_APPLY,
_(
"Apply Pending Changes" ) },
163 { wxID_CANCEL,
_(
"Discard Pending Changes" ) } } );
187 m_pcm->SaveInstalledPackages();
188 m_pcm->SetDialogWindow(
nullptr );
189 m_pcm->RunBackgroundUpdate();
204 || wxMessageBox(
_(
"Are you sure you want to close the package manager "
205 "and discard pending changes?" ),
206 _(
"Plugin and Content Manager" ), wxICON_QUESTION | wxYES_NO,
this )
216 wxCommandEvent
dummy;
226 std::vector<std::pair<wxString, wxString>> dialog_data;
227 std::vector<std::tuple<wxString, wxString, wxString>> repo_list =
m_pcm->GetRepositoryList();
229 for(
const std::tuple<wxString, wxString, wxString>& repo : repo_list )
230 dialog_data.push_back( std::make_pair( std::get<1>( repo ), std::get<2>( repo ) ) );
232 dialog->
SetData( dialog_data );
234 if( dialog->ShowModal() == wxID_SAVE )
236 dialog_data = dialog->
GetData();
237 m_pcm->SetRepositoryList( dialog_data );
253 std::vector<std::tuple<wxString, wxString, wxString>> repositories =
m_pcm->GetRepositoryList();
257 for(
const std::tuple<wxString, wxString, wxString>& entry : repositories )
260 new wxStringClientData( std::get<0>( entry ) ) );
263 if( repositories.size() > 0 )
285 wxFileDialog open_file_dialog(
this,
_(
"Choose package file" ), wxEmptyString, wxEmptyString,
286 wxT(
"Zip files (*.zip)|*.zip" ),
287 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
289 if( open_file_dialog.ShowModal() == wxID_CANCEL )
306 wxStringClientData* data =
static_cast<wxStringClientData*
>(
319 if(
m_pcm->CacheRepository( aRepositoryId ) )
322 packagesView->ClearData();
326 const std::vector<PCM_PACKAGE> packages =
m_pcm->GetRepositoryPackages( aRepositoryId );
328 std::unordered_map<PCM_PACKAGE_TYPE, std::vector<PACKAGE_VIEW_DATA>> data;
339 package_data.
state =
m_pcm->GetPackageState( aRepositoryId, pkg.identifier );
344 package_data.
pinned =
m_pcm->IsPackagePinned( pkg.identifier );
353 if( action.package.identifier != pkg.identifier )
356 switch( action.action )
369 data[pkg.type].emplace_back( package_data );
378 (
int) data[type].size() ) );
382 (
int) packages.size() ) );
413 const std::vector<PCM_INSTALLATION_ENTRY> installed =
m_pcm->GetInstalledPackages();
414 std::vector<PACKAGE_VIEW_DATA> package_list;
427 package_data.
state =
m_pcm->GetPackageState( entry.repository_id,
428 entry.package.identifier );
433 package_list.emplace_back( package_data );
439 (
int) package_list.size() ) );
458 task_manager.
Uninstall( action.package );
463 task_manager.
DownloadAndInstall( action.package, action.version, action.repository_id,
477 wxCommandEvent
dummy;
501 std::sort( rows.begin(), rows.end(),
502 [](
const int& a,
const int& b )
509 for(
int row : rows )
534 bool pinned =
m_pcm->IsPackagePinned( aPackageId );
539 packagesView->SetPackageState( aPackageId, aState, pinned );
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Implementing DIALOG_MANAGE_REPOSITORIES_BASE.
std::vector< std::pair< wxString, wxString > > GetData()
void SetData(const std::vector< std::pair< wxString, wxString > > &aData)
wxChoice * m_choiceRepository
wxNotebook * m_contentNotebook
WX_GRID * m_gridPendingActions
wxButton * m_sdbSizer1Cancel
wxBitmapButton * m_discardActionButton
wxNotebook * m_dialogNotebook
wxButton * m_sdbSizer1Apply
wxPanel * m_panelInstalledHolder
ActionCallback m_actionCallback
void OnDiscardChangesClicked(wxCommandEvent &event) override
Switches to another repository.
std::unordered_map< wxString, wxBitmap > m_installedBitmaps
std::unordered_map< wxString, wxBitmap > m_packageBitmaps
void OnManageRepositoriesClicked(wxCommandEvent &event) override
Discards current repo cache, fetches it anew and displays.
void updatePackageState(const wxString &aPackageId, const PCM_PACKAGE_STATE aState)
Discards specified pending action.
void OnApplyChangesClicked(wxCommandEvent &event) override
Discards all pending changes.
void OnDiscardActionClicked(wxCommandEvent &event) override
Handles modification of the buttons' status.
void OnUpdateEventButtons(wxUpdateUIEvent &event)
Returns types of packages that were installed/uninstalled.
std::unordered_map< PCM_PACKAGE_TYPE, PANEL_PACKAGES_VIEW * > m_repositoryContentPanels
void OnOpenPackageDirClicked(wxCommandEvent &event) override
Enqueues current pending actions in PCM_TASK_MANAGER and runs the queue.
PinCallback m_pinCallback
DIALOG_PCM(wxWindow *parent, std::shared_ptr< PLUGIN_CONTENT_MANAGER > pcm)
Constructor.
std::unordered_set< PCM_PACKAGE_TYPE > m_changed_package_types
void updatePendingActionsTab()
Gets installed packages list from PCM and displays it on installed tab.
std::vector< PENDING_ACTION > m_pendingActions
void setRepositoryListFromPcm()
Updates pending actions tab caption and content-fits the grid.
void OnInstallFromFileClicked(wxCommandEvent &event) override
Opens local directory where packages are installed in file manager.
void OnCloseWindow(wxCloseEvent &aEvent)
Opens repository management dialog, saves changes to PCM.
std::shared_ptr< PLUGIN_CONTENT_MANAGER > m_pcm
void OnRepositoryChoice(wxCommandEvent &event) override
Selects the whole row in the grid if a cell is clicked.
wxString m_selectedRepositoryId
PANEL_PACKAGES_VIEW * m_installedPanel
~DIALOG_PCM()
Closes the window, asks user confirmation if there are pending actions.
void setInstalledPackages()
Reflects new state of the package in all panels where it is displayed.
void OnPendingActionsCellClicked(wxGridEvent &event) override
Discards selected pending actions.
void setRepositoryData(const wxString &aRepositoryId)
Gets package data from PCM and displays it on repository tab.
void discardAction(int aIndex)
void OnRefreshClicked(wxCommandEvent &event) override
Opens file selection dialog and installs selected package archive.
void OnCloseClicked(wxCommandEvent &event) override
void SetupStandardButtons(std::map< int, wxString > aLabels={})
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
std::vector< std::pair< wxString, wxString > > m_PcmRepositories
void ClearData()
Selects full row of the clicked cell.
void SetData(const std::vector< PACKAGE_VIEW_DATA > &aPackageData)
Recreates package panels and displays data.
void SetPackageState(const wxString &aPackageId, const PCM_PACKAGE_STATE aState, const bool aPinned)
Set the state of package.
Helper class that handles package (un)installation.
void InstallFromFile(wxWindow *aParent, const wxString &aFilePath)
Installs package from an archive file on disk.
void Uninstall(const PCM_PACKAGE &aPackage)
Enqueue package uninstallation.
void DownloadAndInstall(const PCM_PACKAGE &aPackage, const wxString &aVersion, const wxString &aRepositoryId, const bool isUpdate)
Enqueue package download and installation.
std::unordered_set< PCM_PACKAGE_TYPE > & GetChangedPackageTypes()
void RunQueue(wxWindow *aParent)
Run queue of pending actions.
T * GetAppSettings()
Returns a handle to the a given settings by type If the settings have already been loaded,...
int GetVisibleWidth(int aCol, bool aHeader=true, bool aContents=true, bool aKeep=false)
Calculates the specified column based on the actual size of the text on screen.
static std::vector< std::pair< PCM_PACKAGE_TYPE, wxString > > PACKAGE_TYPE_LIST
bool LaunchExternal(const wxString &aPath)
Launches the given file or folder in the host OS.
PCM_PACKAGE_TYPE
< Supported package types
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
std::vector< FAB_LAYER_COLOR > dummy
< Collection of data relevant to the package display panel Callback for (un)install button
const PCM_PACKAGE package
Repository reference to a resource.