Sandboxie/SandboxiePlus/SandMan/Views/SbieView.h

231 lines
6.9 KiB
C
Raw Normal View History

2021-10-15 16:39:43 +01:00
#pragma once
#include "../../MiscHelpers/Common/PanelView.h"
#include "../../MiscHelpers/Common/TreeviewEx.h"
#include "../Models/SbieModel.h"
2022-05-16 20:30:40 +01:00
#include <QFileIconProvider>
2021-10-15 16:39:43 +01:00
2023-05-23 21:17:50 +01:00
class CMenuEx : public QMenu
{
Q_OBJECT
public:
explicit CMenuEx(QWidget* parent = nullptr) : QMenu(parent) { m_MouseDown = false; }
explicit CMenuEx(const QString &title, QWidget *parent = nullptr) : QMenu(title, parent) { m_MouseDown = false; }
//void keyPressEvent(QKeyEvent *) override;
//void mouseMoveEvent(QMouseEvent *) override;
void mousePressEvent(QMouseEvent* e) override {
if (e->button() == Qt::RightButton) {
m_MouseDown = true;
return;
}
QMenu::mousePressEvent(e);
}
void mouseReleaseEvent(QMouseEvent* e) override {
if (e->button() == Qt::RightButton && m_MouseDown) {
m_MouseDown = false;
emit customContextMenuRequested(e->pos());
return;
}
QMenu::mouseReleaseEvent(e);
}
private:
bool m_MouseDown;
};
2021-10-15 16:39:43 +01:00
class CSbieView : public CPanelView
{
Q_OBJECT
public:
CSbieView(QWidget* parent = 0);
virtual ~CSbieView();
2022-10-07 11:53:45 +01:00
virtual void SaveState();
2021-10-15 16:39:43 +01:00
virtual QTreeViewEx* GetTree() { return m_pSbieTree; }
virtual QList<CSandBoxPtr> GetSelectedBoxes();
virtual QList<CBoxedProcessPtr> GetSelectedProcesses();
virtual QStringList GetSelectedGroups(bool bAndBoxes = false);
//virtual void UpdateRunMenu();
2023-01-29 10:48:28 +00:00
virtual QString AddNewBox(bool bAlowTemp = false);
2023-05-23 21:17:50 +01:00
virtual QString ImportSandbox();
2021-10-15 16:39:43 +01:00
virtual QString AddNewGroup();
2022-04-16 14:01:01 +01:00
virtual bool TestNameAndWarn(const QString& Name);
2021-10-15 16:39:43 +01:00
virtual void SelectBox(const QString& Name);
virtual void PopUpMenu(const QString& Name);
2022-07-09 10:46:07 +01:00
virtual QMenu* GetMenu(const QString& Name);
2021-10-15 16:39:43 +01:00
virtual void ShowOptions(const QString& Name);
2022-07-09 10:46:07 +01:00
virtual void ShowOptions(const CSandBoxPtr& pBox);
virtual void ShowBrowse(const CSandBoxPtr& pBox);
2021-10-15 16:39:43 +01:00
QMap<QString, QStringList> GetGroups() { return m_Groups; }
2023-08-03 19:17:52 +01:00
static bool CreateShortcutEx(const QString& LinkPath, const QString& BoxName, QString LinkName = QString(), const QString& IconPath = QString(), int IconIndex = 0, const QString& WorkDir = QString());
2023-07-01 17:54:53 +01:00
2022-09-01 18:29:07 +01:00
signals:
void BoxSelected();
2021-10-15 16:39:43 +01:00
public slots:
void Clear();
void Refresh();
void ReloadUserConfig();
2022-09-21 10:54:58 +01:00
void ClearUserUIConfig(const QMap<QString, CSandBoxPtr> AllBoxes = QMap<QString, CSandBoxPtr>());
2023-05-29 13:11:34 +01:00
void SaveBoxGrouping();
2021-10-15 16:39:43 +01:00
private slots:
void OnToolTipCallback(const QVariant& ID, QString& ToolTip);
void OnCustomSortByColumn(int column);
void OnDoubleClicked(const QModelIndex& index);
2022-11-05 13:42:23 +00:00
void OnClicked(const QModelIndex& index);
2021-10-15 16:39:43 +01:00
void ProcessSelection(const QItemSelection& selected, const QItemSelection& deselected);
2023-05-23 21:17:50 +01:00
void OnMenuContextMenu(const QPoint& point);
void OnMenuContextAction();
2021-10-15 16:39:43 +01:00
void OnGroupAction();
2022-04-16 14:01:01 +01:00
void OnGroupAction(QAction* pAction);
2021-10-15 16:39:43 +01:00
void OnSandBoxAction();
2022-07-22 21:47:52 +01:00
void OnSandBoxAction(QAction* pAction);
2022-07-12 08:35:00 +01:00
void OnSandBoxAction(QAction* pAction, const QList<CSandBoxPtr>& SandBoxes);
2021-10-15 16:39:43 +01:00
void OnProcessAction();
2022-07-12 08:35:00 +01:00
void OnProcessAction(QAction* pAction, const QList<CBoxedProcessPtr>& Processes);
2021-10-15 16:39:43 +01:00
void OnExpanded(const QModelIndex& index) { ChangeExpand(index, true); }
void OnCollapsed(const QModelIndex& index) { ChangeExpand(index, false); }
2022-06-04 20:07:04 +01:00
void OnMoveItem(const QString& Name, const QString& To, int row);
2022-04-16 14:01:01 +01:00
void OnRemoveItem();
2021-10-15 16:39:43 +01:00
protected:
virtual void OnMenu(const QPoint& Point);
virtual QTreeView* GetView() { return m_pSbieTree; }
virtual QAbstractItemModel* GetModel() { return m_pSortProxy; }
2022-09-29 17:28:48 +01:00
virtual void UpdateStartMenu(CSandBoxPlus* pBoxEx);
2021-10-15 16:39:43 +01:00
virtual void UpdateRunMenu(const CSandBoxPtr& pBox);
QMap<QString, QStringList> m_Groups;
QSet<QString> m_Collapsed;
2023-04-20 20:52:30 +01:00
bool m_HoldExpand;
2021-10-15 16:39:43 +01:00
private:
2022-07-09 10:46:07 +01:00
void CreateMenu();
void CreateOldMenu();
2022-07-12 17:23:28 +01:00
void CreateGroupMenu();
void CreateTrayMenu();
2022-07-09 10:46:07 +01:00
2022-07-12 17:23:28 +01:00
bool UpdateMenu(bool bAdvanced, const CSandBoxPtr &pBox, int iSandBoxeCount = 1, bool bBoxBusy = false);
2023-07-30 13:28:35 +01:00
void UpdateProcMenu(const CBoxedProcessPtr &pProcess = CBoxedProcessPtr(), int iProcessCount = 0, int iSuspendedCount = 0);
2022-02-05 14:09:53 +00:00
bool UpdateMenu();
2022-07-12 17:23:28 +01:00
void UpdateMoveMenu();
2021-10-15 16:39:43 +01:00
void RenameGroup(const QString OldName, const QString NewName);
2022-07-10 20:44:24 +01:00
void RenameItem(const QString OldName, const QString NewName);
2022-04-16 14:01:01 +01:00
2022-06-04 20:20:27 +01:00
void SetCustomOrder();
2022-07-10 20:44:24 +01:00
bool MoveItem(const QString& Name, const QString& To, int pos = -1);
2021-10-15 16:39:43 +01:00
QString FindParent(const QString& Name);
bool IsParentOf(const QString& Name, const QString& Group);
void ChangeExpand(const QModelIndex& index, bool bExpand);
2023-02-07 19:17:29 +00:00
QMenu* GetMenuFolder(const QString& Folder, QMenu* pParent, QMap<QString, QMenu*>& Folders);
2022-09-29 17:28:48 +01:00
2021-10-15 16:39:43 +01:00
QVBoxLayout* m_pMainLayout;
QTreeViewEx* m_pSbieTree;
CSbieModel* m_pSbieModel;
QSortFilterProxyModel* m_pSortProxy;
2022-07-12 17:23:28 +01:00
QMenu* m_pMenuBox;
QMenu* m_pMenuProcess;
QMenu* m_pMenuGroup;
QMenu* m_pMenuTray;
2021-10-15 16:39:43 +01:00
QAction* m_pNewBox;
2023-05-23 21:17:50 +01:00
QAction* m_pImportBox;
2021-10-15 16:39:43 +01:00
QAction* m_pAddGroupe;
QAction* m_pRenGroupe;
QAction* m_pDelGroupe;
2022-02-05 14:09:53 +00:00
QAction* m_pStopAsync;
2021-10-15 16:39:43 +01:00
QMenu* m_pMenuRun;
QAction* m_pMenuRunAny;
QAction* m_pMenuRunMenu;
2022-09-29 17:28:48 +01:00
QMenu* m_pMenuRunStart;
QMap<QString, QMenu*> m_MenuFolders;
2023-02-07 19:17:29 +00:00
QMap<QString, QMenu*> m_RunFolders;
2021-10-15 16:39:43 +01:00
QAction* m_pMenuRunBrowser;
QAction* m_pMenuRunMailer;
QMenu* m_pMenuRunTools;
QAction* m_pMenuRunExplorer;
QAction* m_pMenuRunRegEdit;
QAction* m_pMenuRunAppWiz;
QAction* m_pMenuAutoRun;
QAction* m_pMenuRunCmd;
QAction* m_pMenuRunCmdAdmin;
QAction* m_pMenuRunCmd32;
QAction* m_pMenuMkLink;
QMenu* m_pMenuPresets;
QActionGroup* m_pMenuPresetsAdmin;
QAction* m_pMenuPresetsShowUAC;
QAction* m_pMenuPresetsNoAdmin;
QAction* m_pMenuPresetsFakeAdmin;
QAction* m_pMenuPresetsINet;
QAction* m_pMenuPresetsShares;
2022-06-13 19:12:53 +01:00
QAction* m_pMenuPresetsRecovery;
QAction* m_pMenuPresetsForce;
2021-10-15 16:39:43 +01:00
QAction* m_pMenuOptions;
QAction* m_pMenuSnapshots;
QAction* m_pMenuEmptyBox;
QMenu* m_pMenuContent;
QAction* m_pMenuExplore;
QAction* m_pMenuBrowse;
2022-06-13 19:12:53 +01:00
QAction* m_pMenuRefresh;
2021-10-15 16:39:43 +01:00
QAction* m_pMenuRegEdit;
QAction* m_pMenuRecover;
QAction* m_pMenuCleanUp;
QAction* m_pMenuRemove;
2022-07-09 10:46:07 +01:00
QMenu* m_pMenuTools;
2021-11-13 08:28:32 +00:00
QAction* m_pMenuDuplicate;
2022-11-12 09:45:35 +00:00
QAction* m_pMenuExport;
2021-10-15 16:39:43 +01:00
QAction* m_pMenuMoveUp;
//QAction* m_pMenuMoveBy;
QAction* m_pMenuMoveDown;
QMenu* m_pMenuMoveTo;
QAction* m_pMenuRename;
QAction* m_pMenuTerminate;
QAction* m_pMenuLinkTo;
QMenu* m_pMenuPreset;
QAction* m_pMenuBlackList;
QAction* m_pMenuAllowInternet;
QAction* m_pMenuMarkForced;
QAction* m_pMenuMarkLinger;
QAction* m_pMenuMarkLeader;
QAction* m_pMenuPinToRun;
2023-07-30 13:28:35 +01:00
QAction* m_pMenuSuspend;
QAction* m_pMenuResume;
2021-10-15 16:39:43 +01:00
2022-04-16 14:01:01 +01:00
QAction* m_pRemove;
2021-10-15 16:39:43 +01:00
int m_iMenuRun;
2022-05-16 20:30:40 +01:00
2023-05-23 21:17:50 +01:00
QMenu* m_pCtxMenu;
QAction* m_pCtxPinToRun;
QAction* m_pCtxMkLink;
2022-05-16 20:30:40 +01:00
QFileIconProvider m_IconProvider;
2022-07-12 08:35:00 +01:00
QList<CSandBoxPtr> m_CurSandBoxes;
QList<CBoxedProcessPtr> m_CurProcesses;
};