2020-10-26 03:54:36 -07:00
|
|
|
/*
|
|
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2021 Andrew Lutsenko, anlutsenko at gmail dot com
|
2025-01-01 13:30:11 -08:00
|
|
|
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
|
2020-10-26 03:54:36 -07:00
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by the
|
|
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
|
|
* option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef DIALOG_PCM_H_
|
|
|
|
#define DIALOG_PCM_H_
|
|
|
|
|
|
|
|
#include "core/wx_stl_compat.h"
|
|
|
|
#include "dialog_pcm_base.h"
|
|
|
|
#include "panel_package.h"
|
|
|
|
#include "panel_packages_view.h"
|
|
|
|
#include "pcm.h"
|
|
|
|
#include "pcm_data.h"
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
2025-02-23 18:07:02 -05:00
|
|
|
class EDA_BASE_FRAME;
|
|
|
|
|
2020-10-26 03:54:36 -07:00
|
|
|
|
|
|
|
/** Implementing pcm main dialog. */
|
|
|
|
class DIALOG_PCM : public DIALOG_PCM_BASE
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/** Constructor */
|
2025-02-23 18:07:02 -05:00
|
|
|
DIALOG_PCM( EDA_BASE_FRAME* parent, std::shared_ptr<PLUGIN_CONTENT_MANAGER> pcm );
|
2020-10-26 03:54:36 -07:00
|
|
|
~DIALOG_PCM();
|
|
|
|
|
2025-02-23 18:07:02 -05:00
|
|
|
EDA_BASE_FRAME* ParentFrame() const { return m_parentFrame; }
|
|
|
|
|
2020-10-26 03:54:36 -07:00
|
|
|
///< Closes the window, asks user confirmation if there are pending actions
|
|
|
|
void OnCloseClicked( wxCommandEvent& event ) override;
|
2021-11-11 00:32:50 +00:00
|
|
|
void OnCloseWindow( wxCloseEvent& aEvent );
|
2020-10-26 03:54:36 -07:00
|
|
|
|
|
|
|
///< Opens repository management dialog, saves changes to PCM
|
|
|
|
void OnManageRepositoriesClicked( wxCommandEvent& event ) override;
|
|
|
|
|
|
|
|
///< Discards current repo cache, fetches it anew and displays
|
|
|
|
void OnRefreshClicked( wxCommandEvent& event ) override;
|
|
|
|
|
|
|
|
///< Opens file selection dialog and installs selected package archive
|
|
|
|
void OnInstallFromFileClicked( wxCommandEvent& event ) override;
|
|
|
|
|
2022-05-13 05:15:46 -07:00
|
|
|
///< Opens local directory where packages are installed in file manager
|
|
|
|
void OnOpenPackageDirClicked( wxCommandEvent& event ) override;
|
|
|
|
|
2020-10-26 03:54:36 -07:00
|
|
|
///< Enqueues current pending actions in PCM_TASK_MANAGER and runs the queue
|
|
|
|
void OnApplyChangesClicked( wxCommandEvent& event ) override;
|
|
|
|
|
|
|
|
///< Discards all pending changes
|
|
|
|
void OnDiscardChangesClicked( wxCommandEvent& event ) override;
|
|
|
|
|
|
|
|
///< Switches to another repository
|
|
|
|
void OnRepositoryChoice( wxCommandEvent& event ) override;
|
|
|
|
|
|
|
|
///< Selects the whole row in the grid if a cell is clicked
|
|
|
|
void OnPendingActionsCellClicked( wxGridEvent& event ) override;
|
|
|
|
|
|
|
|
///< Discards selected pending actions
|
|
|
|
void OnDiscardActionClicked( wxCommandEvent& event ) override;
|
|
|
|
|
2022-05-11 13:47:50 -07:00
|
|
|
///< Handles modification of the buttons' status
|
|
|
|
void OnUpdateEventButtons( wxUpdateUIEvent& event );
|
|
|
|
|
2023-01-18 16:14:31 -08:00
|
|
|
///< Returns types of packages that were installed/uninstalled
|
|
|
|
const std::unordered_set<PCM_PACKAGE_TYPE>& GetChangedPackageTypes() const
|
|
|
|
{
|
|
|
|
return m_changed_package_types;
|
|
|
|
};
|
|
|
|
|
2020-10-26 03:54:36 -07:00
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* @brief Gets package data from PCM and displays it on repository tab
|
|
|
|
*
|
|
|
|
* @param aRepositoryId id of the repository
|
|
|
|
*/
|
|
|
|
void setRepositoryData( const wxString& aRepositoryId );
|
|
|
|
|
|
|
|
///< Sets repository choice list values
|
|
|
|
void setRepositoryListFromPcm();
|
|
|
|
|
|
|
|
///< Updates pending actions tab caption and content-fits the grid
|
|
|
|
void updatePendingActionsTab();
|
|
|
|
|
|
|
|
///< Gets installed packages list from PCM and displays it on installed tab
|
|
|
|
void setInstalledPackages();
|
|
|
|
|
2022-08-28 04:40:06 -07:00
|
|
|
///< Reflects new state of the package in all panels where it is displayed
|
|
|
|
void updatePackageState( const wxString& aPackageId, const PCM_PACKAGE_STATE aState );
|
|
|
|
|
2020-10-26 03:54:36 -07:00
|
|
|
///< Discards specified pending action
|
|
|
|
void discardAction( int aIndex );
|
|
|
|
|
2025-02-23 18:07:02 -05:00
|
|
|
EDA_BASE_FRAME* m_parentFrame;
|
2020-10-26 03:54:36 -07:00
|
|
|
std::shared_ptr<PLUGIN_CONTENT_MANAGER> m_pcm;
|
2022-08-28 04:40:06 -07:00
|
|
|
ActionCallback m_actionCallback;
|
|
|
|
PinCallback m_pinCallback;
|
2020-10-26 03:54:36 -07:00
|
|
|
PANEL_PACKAGES_VIEW* m_installedPanel;
|
|
|
|
std::unordered_map<PCM_PACKAGE_TYPE, PANEL_PACKAGES_VIEW*> m_repositoryContentPanels;
|
|
|
|
wxString m_selectedRepositoryId;
|
|
|
|
std::unordered_map<wxString, wxBitmap> m_packageBitmaps;
|
|
|
|
std::unordered_map<wxString, wxBitmap> m_installedBitmaps;
|
|
|
|
wxBitmap m_defaultBitmap;
|
2023-01-18 16:14:31 -08:00
|
|
|
std::unordered_set<PCM_PACKAGE_TYPE> m_changed_package_types;
|
2020-10-26 03:54:36 -07:00
|
|
|
|
|
|
|
struct PENDING_ACTION
|
|
|
|
{
|
|
|
|
PCM_PACKAGE_ACTION action;
|
|
|
|
wxString repository_id;
|
|
|
|
PCM_PACKAGE package;
|
|
|
|
wxString version;
|
|
|
|
PENDING_ACTION( const PCM_PACKAGE_ACTION& aAction, const wxString& aRepositoryId,
|
|
|
|
const PCM_PACKAGE& aPackage, const wxString& aVersion ) :
|
|
|
|
action( aAction ),
|
|
|
|
repository_id( aRepositoryId ), package( aPackage ), version( aVersion )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
std::vector<PENDING_ACTION> m_pendingActions;
|
|
|
|
|
|
|
|
enum PendingActionsGridColumns
|
|
|
|
{
|
|
|
|
PENDING_COL_ACTION = 0,
|
|
|
|
PENDING_COL_NAME,
|
|
|
|
PENDING_COL_VERSION,
|
|
|
|
PENDING_COL_REPOSITORY
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // DIALOG_PCM_H_
|