mirror of
https://github.com/tnodir/fort
synced 2024-11-15 11:55:09 +00:00
UI: Prepare ServicesWindow
This commit is contained in:
parent
109aee7ff1
commit
6d0046e4cb
@ -57,7 +57,6 @@ SOURCES += \
|
|||||||
form/opt/pages/optmainpage.cpp \
|
form/opt/pages/optmainpage.cpp \
|
||||||
form/opt/pages/rulespage.cpp \
|
form/opt/pages/rulespage.cpp \
|
||||||
form/opt/pages/schedulepage.cpp \
|
form/opt/pages/schedulepage.cpp \
|
||||||
form/opt/pages/servicespage.cpp \
|
|
||||||
form/opt/pages/statisticspage.cpp \
|
form/opt/pages/statisticspage.cpp \
|
||||||
form/prog/programeditdialog.cpp \
|
form/prog/programeditdialog.cpp \
|
||||||
form/prog/programscontroller.cpp \
|
form/prog/programscontroller.cpp \
|
||||||
@ -68,6 +67,8 @@ SOURCES += \
|
|||||||
form/stat/pages/trafficpage.cpp \
|
form/stat/pages/trafficpage.cpp \
|
||||||
form/stat/statisticscontroller.cpp \
|
form/stat/statisticscontroller.cpp \
|
||||||
form/stat/statisticswindow.cpp \
|
form/stat/statisticswindow.cpp \
|
||||||
|
form/svc/servicescontroller.cpp \
|
||||||
|
form/svc/serviceswindow.cpp \
|
||||||
form/tray/traycontroller.cpp \
|
form/tray/traycontroller.cpp \
|
||||||
form/tray/trayicon.cpp \
|
form/tray/trayicon.cpp \
|
||||||
form/zone/zonescontroller.cpp \
|
form/zone/zonescontroller.cpp \
|
||||||
@ -209,7 +210,6 @@ HEADERS += \
|
|||||||
form/opt/pages/optmainpage.h \
|
form/opt/pages/optmainpage.h \
|
||||||
form/opt/pages/rulespage.h \
|
form/opt/pages/rulespage.h \
|
||||||
form/opt/pages/schedulepage.h \
|
form/opt/pages/schedulepage.h \
|
||||||
form/opt/pages/servicespage.h \
|
|
||||||
form/opt/pages/statisticspage.h \
|
form/opt/pages/statisticspage.h \
|
||||||
form/prog/programeditdialog.h \
|
form/prog/programeditdialog.h \
|
||||||
form/prog/programscontroller.h \
|
form/prog/programscontroller.h \
|
||||||
@ -220,6 +220,8 @@ HEADERS += \
|
|||||||
form/stat/pages/trafficpage.h \
|
form/stat/pages/trafficpage.h \
|
||||||
form/stat/statisticscontroller.h \
|
form/stat/statisticscontroller.h \
|
||||||
form/stat/statisticswindow.h \
|
form/stat/statisticswindow.h \
|
||||||
|
form/svc/servicescontroller.h \
|
||||||
|
form/svc/serviceswindow.h \
|
||||||
form/tray/traycontroller.h \
|
form/tray/traycontroller.h \
|
||||||
form/tray/trayicon.h \
|
form/tray/trayicon.h \
|
||||||
form/zone/zonescontroller.h \
|
form/zone/zonescontroller.h \
|
||||||
|
@ -1,134 +0,0 @@
|
|||||||
#include "servicespage.h"
|
|
||||||
|
|
||||||
#include <QCheckBox>
|
|
||||||
#include <QHeaderView>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QPushButton>
|
|
||||||
#include <QVBoxLayout>
|
|
||||||
|
|
||||||
#include <conf/firewallconf.h>
|
|
||||||
#include <form/controls/controlutil.h>
|
|
||||||
#include <form/controls/tableview.h>
|
|
||||||
#include <form/opt/optionscontroller.h>
|
|
||||||
#include <model/servicelistmodel.h>
|
|
||||||
#include <serviceinfo/serviceinfomanager.h>
|
|
||||||
#include <user/iniuser.h>
|
|
||||||
#include <util/iconcache.h>
|
|
||||||
#include <util/ioc/ioccontainer.h>
|
|
||||||
|
|
||||||
ServicesPage::ServicesPage(OptionsController *ctrl, QWidget *parent) :
|
|
||||||
OptBasePage(ctrl, parent), m_serviceListModel(new ServiceListModel(this))
|
|
||||||
{
|
|
||||||
setupUi();
|
|
||||||
}
|
|
||||||
|
|
||||||
ServiceInfoManager *ServicesPage::serviceInfoManager() const
|
|
||||||
{
|
|
||||||
return IoC<ServiceInfoManager>();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServicesPage::onPageActivated()
|
|
||||||
{
|
|
||||||
serviceListModel()->initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServicesPage::onRetranslateUi()
|
|
||||||
{
|
|
||||||
m_btRefresh->setText(tr("Refresh"));
|
|
||||||
m_btEdit->setText(tr("Edit"));
|
|
||||||
m_actEditService->setText(tr("Edit Service"));
|
|
||||||
|
|
||||||
m_btOptions->setText(tr("Options"));
|
|
||||||
|
|
||||||
serviceListModel()->refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServicesPage::setupUi()
|
|
||||||
{
|
|
||||||
auto layout = new QVBoxLayout();
|
|
||||||
layout->setContentsMargins(6, 6, 6, 6);
|
|
||||||
|
|
||||||
// Header
|
|
||||||
auto header = setupHeader();
|
|
||||||
layout->addLayout(header);
|
|
||||||
|
|
||||||
// Table
|
|
||||||
setupTableServiceList();
|
|
||||||
setupTableServiceListHeader();
|
|
||||||
layout->addWidget(m_serviceListView, 1);
|
|
||||||
|
|
||||||
this->setLayout(layout);
|
|
||||||
}
|
|
||||||
|
|
||||||
QLayout *ServicesPage::setupHeader()
|
|
||||||
{
|
|
||||||
auto layout = new QHBoxLayout();
|
|
||||||
|
|
||||||
m_btRefresh = ControlUtil::createButton(
|
|
||||||
":/icons/arrow_refresh_small.png", [&] { serviceListModel()->initialize(); });
|
|
||||||
|
|
||||||
// Edit Menu
|
|
||||||
auto editMenu = new QMenu(this);
|
|
||||||
|
|
||||||
m_actEditService = editMenu->addAction(IconCache::icon(":/icons/pencil.png"), QString());
|
|
||||||
m_actEditService->setShortcut(Qt::Key_Return);
|
|
||||||
|
|
||||||
connect(m_actEditService, &QAction::triggered, this, [&] {
|
|
||||||
// const auto connIndex = serviceListCurrentIndex();
|
|
||||||
// const auto connRow = serviceListModel()->connRowAt(connIndex);
|
|
||||||
|
|
||||||
// showServiceEditForm(connRow.appPath);
|
|
||||||
});
|
|
||||||
|
|
||||||
m_btEdit = ControlUtil::createButton(":/icons/pencil.png");
|
|
||||||
m_btEdit->setMenu(editMenu);
|
|
||||||
|
|
||||||
// Options
|
|
||||||
setupOptions();
|
|
||||||
|
|
||||||
layout->addWidget(m_btRefresh);
|
|
||||||
layout->addWidget(m_btEdit);
|
|
||||||
layout->addStretch();
|
|
||||||
layout->addWidget(m_btOptions);
|
|
||||||
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServicesPage::setupOptions()
|
|
||||||
{
|
|
||||||
// Menu
|
|
||||||
const QList<QWidget *> menuWidgets = {};
|
|
||||||
auto layout = ControlUtil::createLayoutByWidgets(menuWidgets);
|
|
||||||
|
|
||||||
auto menu = ControlUtil::createMenuByLayout(layout, this);
|
|
||||||
|
|
||||||
m_btOptions = ControlUtil::createButton(":/icons/gear_in.png");
|
|
||||||
m_btOptions->setMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServicesPage::setupTableServiceList()
|
|
||||||
{
|
|
||||||
m_serviceListView = new TableView();
|
|
||||||
m_serviceListView->setAlternatingRowColors(true);
|
|
||||||
m_serviceListView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
|
||||||
m_serviceListView->setSelectionBehavior(QAbstractItemView::SelectItems);
|
|
||||||
|
|
||||||
m_serviceListView->setModel(serviceListModel());
|
|
||||||
|
|
||||||
m_serviceListView->setMenu(m_btEdit->menu());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServicesPage::setupTableServiceListHeader()
|
|
||||||
{
|
|
||||||
auto header = m_serviceListView->horizontalHeader();
|
|
||||||
|
|
||||||
header->setSectionResizeMode(0, QHeaderView::Interactive);
|
|
||||||
header->setSectionResizeMode(1, QHeaderView::Stretch);
|
|
||||||
header->setSectionResizeMode(2, QHeaderView::Interactive);
|
|
||||||
header->setSectionResizeMode(3, QHeaderView::Interactive);
|
|
||||||
|
|
||||||
header->resizeSection(0, 240);
|
|
||||||
header->resizeSection(1, 290);
|
|
||||||
header->resizeSection(2, 80);
|
|
||||||
header->resizeSection(3, 90);
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
#ifndef SERVICESPAGE_H
|
|
||||||
#define SERVICESPAGE_H
|
|
||||||
|
|
||||||
#include "optbasepage.h"
|
|
||||||
|
|
||||||
class ServiceInfoManager;
|
|
||||||
class ServiceListModel;
|
|
||||||
class TableView;
|
|
||||||
|
|
||||||
class ServicesPage : public OptBasePage
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit ServicesPage(OptionsController *ctrl = nullptr, QWidget *parent = nullptr);
|
|
||||||
|
|
||||||
ServiceListModel *serviceListModel() const { return m_serviceListModel; }
|
|
||||||
ServiceInfoManager *serviceInfoManager() const;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void onPageActivated() override;
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void onRetranslateUi() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void setupUi();
|
|
||||||
QLayout *setupHeader();
|
|
||||||
void setupOptions();
|
|
||||||
void setupTableServiceList();
|
|
||||||
void setupTableServiceListHeader();
|
|
||||||
|
|
||||||
private:
|
|
||||||
ServiceListModel *m_serviceListModel;
|
|
||||||
|
|
||||||
QPushButton *m_btRefresh = nullptr;
|
|
||||||
QPushButton *m_btEdit = nullptr;
|
|
||||||
QAction *m_actEditService = nullptr;
|
|
||||||
QPushButton *m_btOptions = nullptr;
|
|
||||||
TableView *m_serviceListView = nullptr;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SERVICESPAGE_H
|
|
@ -128,6 +128,8 @@ void ProgramsWindow::retranslateUi()
|
|||||||
m_btBlockApp->setText(tr("Block"));
|
m_btBlockApp->setText(tr("Block"));
|
||||||
m_btRemoveApp->setText(tr("Remove"));
|
m_btRemoveApp->setText(tr("Remove"));
|
||||||
|
|
||||||
|
m_btServices->setText(tr("Services"));
|
||||||
|
|
||||||
m_btLogOptions->setText(tr("Options"));
|
m_btLogOptions->setText(tr("Options"));
|
||||||
m_cbLogBlocked->setText(tr("Collect New Blocked Programs"));
|
m_cbLogBlocked->setText(tr("Collect New Blocked Programs"));
|
||||||
|
|
||||||
@ -227,6 +229,12 @@ QLayout *ProgramsWindow::setupHeader()
|
|||||||
connect(m_btBlockApp, &QAbstractButton::clicked, m_actBlockApp, &QAction::trigger);
|
connect(m_btBlockApp, &QAbstractButton::clicked, m_actBlockApp, &QAction::trigger);
|
||||||
connect(m_btRemoveApp, &QAbstractButton::clicked, m_actRemoveApp, &QAction::trigger);
|
connect(m_btRemoveApp, &QAbstractButton::clicked, m_actRemoveApp, &QAction::trigger);
|
||||||
|
|
||||||
|
// Services button
|
||||||
|
m_btServices = ControlUtil::createLinkButton(":/icons/windows-48.png");
|
||||||
|
|
||||||
|
connect(m_btServices, &QAbstractButton::clicked, windowManager(),
|
||||||
|
&WindowManager::showServicesWindow);
|
||||||
|
|
||||||
// Log Options
|
// Log Options
|
||||||
setupLogOptions();
|
setupLogOptions();
|
||||||
|
|
||||||
@ -237,6 +245,8 @@ QLayout *ProgramsWindow::setupHeader()
|
|||||||
layout->addWidget(ControlUtil::createSeparator(Qt::Vertical));
|
layout->addWidget(ControlUtil::createSeparator(Qt::Vertical));
|
||||||
layout->addWidget(m_btRemoveApp);
|
layout->addWidget(m_btRemoveApp);
|
||||||
layout->addStretch();
|
layout->addStretch();
|
||||||
|
layout->addWidget(m_btServices);
|
||||||
|
layout->addWidget(ControlUtil::createSeparator(Qt::Vertical));
|
||||||
layout->addWidget(m_btLogOptions);
|
layout->addWidget(m_btLogOptions);
|
||||||
|
|
||||||
return layout;
|
return layout;
|
||||||
|
@ -89,6 +89,7 @@ private:
|
|||||||
QPushButton *m_btBlockApp = nullptr;
|
QPushButton *m_btBlockApp = nullptr;
|
||||||
QPushButton *m_btRemoveApp = nullptr;
|
QPushButton *m_btRemoveApp = nullptr;
|
||||||
QPushButton *m_btEdit = nullptr;
|
QPushButton *m_btEdit = nullptr;
|
||||||
|
QPushButton *m_btServices = nullptr;
|
||||||
QPushButton *m_btLogOptions = nullptr;
|
QPushButton *m_btLogOptions = nullptr;
|
||||||
QCheckBox *m_cbLogBlocked = nullptr;
|
QCheckBox *m_cbLogBlocked = nullptr;
|
||||||
ProgramEditDialog *m_formAppEdit = nullptr;
|
ProgramEditDialog *m_formAppEdit = nullptr;
|
||||||
|
39
src/ui/form/svc/servicescontroller.cpp
Normal file
39
src/ui/form/svc/servicescontroller.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "servicescontroller.h"
|
||||||
|
|
||||||
|
#include <conf/confmanager.h>
|
||||||
|
#include <manager/translationmanager.h>
|
||||||
|
#include <manager/windowmanager.h>
|
||||||
|
#include <model/servicelistmodel.h>
|
||||||
|
#include <util/ioc/ioccontainer.h>
|
||||||
|
|
||||||
|
ServicesController::ServicesController(QObject *parent) :
|
||||||
|
QObject(parent), m_serviceListModel(new ServiceListModel(this))
|
||||||
|
{
|
||||||
|
connect(translationManager(), &TranslationManager::languageChanged, this,
|
||||||
|
&ServicesController::retranslateUi);
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfManager *ServicesController::confManager() const
|
||||||
|
{
|
||||||
|
return IoC<ConfManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
IniUser *ServicesController::iniUser() const
|
||||||
|
{
|
||||||
|
return confManager()->iniUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
TranslationManager *ServicesController::translationManager() const
|
||||||
|
{
|
||||||
|
return IoC<TranslationManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowManager *ServicesController::windowManager() const
|
||||||
|
{
|
||||||
|
return IoC<WindowManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesController::initialize()
|
||||||
|
{
|
||||||
|
serviceListModel()->initialize();
|
||||||
|
}
|
34
src/ui/form/svc/servicescontroller.h
Normal file
34
src/ui/form/svc/servicescontroller.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef SERVICESCONTROLLER_H
|
||||||
|
#define SERVICESCONTROLLER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class ConfManager;
|
||||||
|
class IniUser;
|
||||||
|
class ServiceListModel;
|
||||||
|
class TranslationManager;
|
||||||
|
class WindowManager;
|
||||||
|
|
||||||
|
class ServicesController : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ServicesController(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
ConfManager *confManager() const;
|
||||||
|
IniUser *iniUser() const;
|
||||||
|
TranslationManager *translationManager() const;
|
||||||
|
WindowManager *windowManager() const;
|
||||||
|
ServiceListModel *serviceListModel() const { return m_serviceListModel; }
|
||||||
|
|
||||||
|
void initialize();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void retranslateUi();
|
||||||
|
|
||||||
|
private:
|
||||||
|
ServiceListModel *m_serviceListModel = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SERVICESCONTROLLER_H
|
226
src/ui/form/svc/serviceswindow.cpp
Normal file
226
src/ui/form/svc/serviceswindow.cpp
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
#include "serviceswindow.h"
|
||||||
|
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QFormLayout>
|
||||||
|
#include <QHeaderView>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
|
#include <conf/confmanager.h>
|
||||||
|
#include <form/controls/controlutil.h>
|
||||||
|
#include <form/controls/tableview.h>
|
||||||
|
#include <form/opt/optionscontroller.h>
|
||||||
|
#include <manager/windowmanager.h>
|
||||||
|
#include <model/servicelistmodel.h>
|
||||||
|
#include <serviceinfo/serviceinfomanager.h>
|
||||||
|
#include <user/iniuser.h>
|
||||||
|
#include <util/guiutil.h>
|
||||||
|
#include <util/iconcache.h>
|
||||||
|
#include <util/ioc/ioccontainer.h>
|
||||||
|
#include <util/window/widgetwindowstatewatcher.h>
|
||||||
|
|
||||||
|
#include "servicescontroller.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
#define SERVICES_HEADER_VERSION 1
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ServicesWindow::ServicesWindow(QWidget *parent) :
|
||||||
|
WidgetWindow(parent),
|
||||||
|
m_ctrl(new ServicesController(this)),
|
||||||
|
m_stateWatcher(new WidgetWindowStateWatcher(this))
|
||||||
|
{
|
||||||
|
setupUi();
|
||||||
|
setupController();
|
||||||
|
setupStateWatcher();
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfManager *ServicesWindow::confManager() const
|
||||||
|
{
|
||||||
|
return ctrl()->confManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
IniUser *ServicesWindow::iniUser() const
|
||||||
|
{
|
||||||
|
return ctrl()->iniUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowManager *ServicesWindow::windowManager() const
|
||||||
|
{
|
||||||
|
return ctrl()->windowManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
ServiceListModel *ServicesWindow::serviceListModel() const
|
||||||
|
{
|
||||||
|
return ctrl()->serviceListModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::saveWindowState()
|
||||||
|
{
|
||||||
|
iniUser()->setServiceWindowGeometry(m_stateWatcher->geometry());
|
||||||
|
iniUser()->setServiceWindowMaximized(m_stateWatcher->maximized());
|
||||||
|
|
||||||
|
auto header = m_serviceListView->horizontalHeader();
|
||||||
|
iniUser()->setServicesHeader(header->saveState());
|
||||||
|
iniUser()->setServicesHeaderVersion(SERVICES_HEADER_VERSION);
|
||||||
|
|
||||||
|
confManager()->saveIniUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::restoreWindowState()
|
||||||
|
{
|
||||||
|
m_stateWatcher->restore(this, QSize(1024, 768), iniUser()->serviceWindowGeometry(),
|
||||||
|
iniUser()->serviceWindowMaximized());
|
||||||
|
|
||||||
|
if (iniUser()->servicesHeaderVersion() == SERVICES_HEADER_VERSION) {
|
||||||
|
auto header = m_serviceListView->horizontalHeader();
|
||||||
|
header->restoreState(iniUser()->servicesHeader());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::retranslateUi()
|
||||||
|
{
|
||||||
|
this->unsetLocale();
|
||||||
|
|
||||||
|
m_btRefresh->setText(tr("Refresh"));
|
||||||
|
m_btEdit->setText(tr("Edit"));
|
||||||
|
m_actEditService->setText(tr("Edit Service"));
|
||||||
|
m_actAddProgram->setText(tr("Add Program"));
|
||||||
|
|
||||||
|
serviceListModel()->refresh();
|
||||||
|
|
||||||
|
this->setWindowTitle(tr("Services"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::setupController()
|
||||||
|
{
|
||||||
|
ctrl()->initialize();
|
||||||
|
|
||||||
|
connect(ctrl(), &ServicesController::retranslateUi, this, &ServicesWindow::retranslateUi);
|
||||||
|
|
||||||
|
retranslateUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::setupStateWatcher()
|
||||||
|
{
|
||||||
|
m_stateWatcher->install(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::setupUi()
|
||||||
|
{
|
||||||
|
auto layout = new QVBoxLayout();
|
||||||
|
layout->setContentsMargins(6, 6, 6, 6);
|
||||||
|
|
||||||
|
// Header
|
||||||
|
auto header = setupHeader();
|
||||||
|
layout->addLayout(header);
|
||||||
|
|
||||||
|
// Table
|
||||||
|
setupTableServiceList();
|
||||||
|
setupTableServiceListHeader();
|
||||||
|
layout->addWidget(m_serviceListView, 1);
|
||||||
|
|
||||||
|
this->setLayout(layout);
|
||||||
|
|
||||||
|
// Actions on conns table's current changed
|
||||||
|
setupTableServicesChanged();
|
||||||
|
|
||||||
|
// Font
|
||||||
|
this->setFont(WindowManager::defaultFont());
|
||||||
|
|
||||||
|
// Icon
|
||||||
|
this->setWindowIcon(GuiUtil::overlayIcon(":/icons/sheild-96.png", ":/icons/windows-48.png"));
|
||||||
|
|
||||||
|
// Size
|
||||||
|
this->setMinimumSize(500, 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
QLayout *ServicesWindow::setupHeader()
|
||||||
|
{
|
||||||
|
auto layout = new QHBoxLayout();
|
||||||
|
|
||||||
|
m_btRefresh = ControlUtil::createButton(
|
||||||
|
":/icons/arrow_refresh_small.png", [&] { serviceListModel()->initialize(); });
|
||||||
|
|
||||||
|
// Edit Menu
|
||||||
|
auto editMenu = new QMenu(this);
|
||||||
|
|
||||||
|
m_actEditService = editMenu->addAction(IconCache::icon(":/icons/pencil.png"), QString());
|
||||||
|
m_actEditService->setShortcut(Qt::Key_Return);
|
||||||
|
|
||||||
|
m_actAddProgram = editMenu->addAction(IconCache::icon(":/icons/application.png"), QString());
|
||||||
|
m_actAddProgram->setShortcut(Qt::Key_Insert);
|
||||||
|
|
||||||
|
connect(m_actEditService, &QAction::triggered, this, [&] {
|
||||||
|
// const auto connIndex = serviceListCurrentIndex();
|
||||||
|
// const auto connRow = serviceListModel()->connRowAt(connIndex);
|
||||||
|
|
||||||
|
// showServiceEditForm(connRow.appPath);
|
||||||
|
});
|
||||||
|
connect(m_actAddProgram, &QAction::triggered, this, [&] {
|
||||||
|
const auto serviceIndex = serviceListCurrentIndex();
|
||||||
|
const auto serviceInfo = serviceListModel()->serviceInfoAt(serviceIndex);
|
||||||
|
|
||||||
|
const QString appPath = QStringLiteral(R"(\SvcHost\)") + serviceInfo.serviceName;
|
||||||
|
|
||||||
|
windowManager()->showProgramEditForm(appPath);
|
||||||
|
});
|
||||||
|
|
||||||
|
m_btEdit = ControlUtil::createButton(":/icons/pencil.png");
|
||||||
|
m_btEdit->setMenu(editMenu);
|
||||||
|
|
||||||
|
layout->addWidget(m_btEdit);
|
||||||
|
layout->addWidget(ControlUtil::createSeparator(Qt::Vertical));
|
||||||
|
layout->addWidget(m_btRefresh);
|
||||||
|
layout->addStretch();
|
||||||
|
|
||||||
|
return layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::setupTableServiceList()
|
||||||
|
{
|
||||||
|
m_serviceListView = new TableView();
|
||||||
|
m_serviceListView->setAlternatingRowColors(true);
|
||||||
|
m_serviceListView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
|
m_serviceListView->setSelectionBehavior(QAbstractItemView::SelectItems);
|
||||||
|
|
||||||
|
m_serviceListView->setModel(serviceListModel());
|
||||||
|
|
||||||
|
m_serviceListView->setMenu(m_btEdit->menu());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::setupTableServiceListHeader()
|
||||||
|
{
|
||||||
|
auto header = m_serviceListView->horizontalHeader();
|
||||||
|
|
||||||
|
header->setSectionResizeMode(0, QHeaderView::Interactive);
|
||||||
|
header->setSectionResizeMode(1, QHeaderView::Stretch);
|
||||||
|
header->setSectionResizeMode(2, QHeaderView::Interactive);
|
||||||
|
|
||||||
|
header->resizeSection(0, 250);
|
||||||
|
header->resizeSection(1, 350);
|
||||||
|
header->resizeSection(2, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServicesWindow::setupTableServicesChanged()
|
||||||
|
{
|
||||||
|
const auto refreshTableServicesChanged = [&] {
|
||||||
|
const int serviceIndex = serviceListCurrentIndex();
|
||||||
|
const bool serviceSelected = (serviceIndex >= 0);
|
||||||
|
m_actEditService->setEnabled(serviceSelected);
|
||||||
|
m_actAddProgram->setEnabled(serviceSelected);
|
||||||
|
};
|
||||||
|
|
||||||
|
refreshTableServicesChanged();
|
||||||
|
|
||||||
|
connect(m_serviceListView, &TableView::currentIndexChanged, this, refreshTableServicesChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ServicesWindow::serviceListCurrentIndex() const
|
||||||
|
{
|
||||||
|
return m_serviceListView->currentRow();
|
||||||
|
}
|
58
src/ui/form/svc/serviceswindow.h
Normal file
58
src/ui/form/svc/serviceswindow.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#ifndef SERVICESWINDOW_H
|
||||||
|
#define SERVICESWINDOW_H
|
||||||
|
|
||||||
|
#include <util/window/widgetwindow.h>
|
||||||
|
|
||||||
|
QT_FORWARD_DECLARE_CLASS(QPushButton)
|
||||||
|
|
||||||
|
class ConfManager;
|
||||||
|
class IniUser;
|
||||||
|
class ServiceListModel;
|
||||||
|
class ServicesController;
|
||||||
|
class TableView;
|
||||||
|
class WidgetWindowStateWatcher;
|
||||||
|
class WindowManager;
|
||||||
|
|
||||||
|
class ServicesWindow : public WidgetWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ServicesWindow(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
ServicesController *ctrl() const { return m_ctrl; }
|
||||||
|
ConfManager *confManager() const;
|
||||||
|
IniUser *iniUser() const;
|
||||||
|
WindowManager *windowManager() const;
|
||||||
|
ServiceListModel *serviceListModel() const;
|
||||||
|
|
||||||
|
void saveWindowState();
|
||||||
|
void restoreWindowState();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupController();
|
||||||
|
void setupStateWatcher();
|
||||||
|
|
||||||
|
void retranslateUi();
|
||||||
|
|
||||||
|
void setupUi();
|
||||||
|
QLayout *setupHeader();
|
||||||
|
void setupOptions();
|
||||||
|
void setupTableServiceList();
|
||||||
|
void setupTableServiceListHeader();
|
||||||
|
void setupTableServicesChanged();
|
||||||
|
|
||||||
|
int serviceListCurrentIndex() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
ServicesController *m_ctrl = nullptr;
|
||||||
|
WidgetWindowStateWatcher *m_stateWatcher = nullptr;
|
||||||
|
|
||||||
|
QPushButton *m_btRefresh = nullptr;
|
||||||
|
QPushButton *m_btEdit = nullptr;
|
||||||
|
QAction *m_actEditService = nullptr;
|
||||||
|
QAction *m_actAddProgram = nullptr;
|
||||||
|
TableView *m_serviceListView = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SERVICESWINDOW_H
|
@ -15,9 +15,9 @@ class IniUser;
|
|||||||
class TableView;
|
class TableView;
|
||||||
class TaskManager;
|
class TaskManager;
|
||||||
class WidgetWindowStateWatcher;
|
class WidgetWindowStateWatcher;
|
||||||
|
class WindowManager;
|
||||||
class ZoneListModel;
|
class ZoneListModel;
|
||||||
class ZonesController;
|
class ZonesController;
|
||||||
class WindowManager;
|
|
||||||
|
|
||||||
class ZonesWindow : public WidgetWindow
|
class ZonesWindow : public WidgetWindow
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include <rpc/statmanagerrpc.h>
|
#include <rpc/statmanagerrpc.h>
|
||||||
#include <rpc/taskmanagerrpc.h>
|
#include <rpc/taskmanagerrpc.h>
|
||||||
#include <rpc/windowmanagerfake.h>
|
#include <rpc/windowmanagerfake.h>
|
||||||
#include <serviceinfo/serviceinfomanager.h>
|
|
||||||
#include <task/taskinfozonedownloader.h>
|
#include <task/taskinfozonedownloader.h>
|
||||||
#include <user/usersettings.h>
|
#include <user/usersettings.h>
|
||||||
#include <util/dateutil.h>
|
#include <util/dateutil.h>
|
||||||
@ -175,7 +174,6 @@ void FortManager::createManagers()
|
|||||||
ioc->setService(new NativeEventFilter());
|
ioc->setService(new NativeEventFilter());
|
||||||
ioc->setService(new AppInfoCache());
|
ioc->setService(new AppInfoCache());
|
||||||
ioc->setService(new HostInfoCache());
|
ioc->setService(new HostInfoCache());
|
||||||
ioc->setService(new ServiceInfoManager());
|
|
||||||
ioc->setService(new ZoneListModel());
|
ioc->setService(new ZoneListModel());
|
||||||
|
|
||||||
ioc->setUpAll();
|
ioc->setUpAll();
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <form/opt/optionswindow.h>
|
#include <form/opt/optionswindow.h>
|
||||||
#include <form/prog/programswindow.h>
|
#include <form/prog/programswindow.h>
|
||||||
#include <form/stat/statisticswindow.h>
|
#include <form/stat/statisticswindow.h>
|
||||||
|
#include <form/svc/serviceswindow.h>
|
||||||
#include <form/tray/trayicon.h>
|
#include <form/tray/trayicon.h>
|
||||||
#include <form/zone/zoneswindow.h>
|
#include <form/zone/zoneswindow.h>
|
||||||
#include <fortcompat.h>
|
#include <fortcompat.h>
|
||||||
@ -138,6 +139,15 @@ void WindowManager::setupOptionsWindow()
|
|||||||
connect(m_optWindow, &OptionsWindow::aboutToClose, this, &WindowManager::closeOptionsWindow);
|
connect(m_optWindow, &OptionsWindow::aboutToClose, this, &WindowManager::closeOptionsWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WindowManager::setupServicesWindow()
|
||||||
|
{
|
||||||
|
m_serviceWindow = new ServicesWindow();
|
||||||
|
m_serviceWindow->restoreWindowState();
|
||||||
|
|
||||||
|
connect(m_serviceWindow, &ServicesWindow::aboutToClose, this,
|
||||||
|
&WindowManager::closeServicesWindow);
|
||||||
|
}
|
||||||
|
|
||||||
void WindowManager::setupZonesWindow()
|
void WindowManager::setupZonesWindow()
|
||||||
{
|
{
|
||||||
m_zoneWindow = new ZonesWindow();
|
m_zoneWindow = new ZonesWindow();
|
||||||
@ -173,6 +183,7 @@ void WindowManager::closeAll()
|
|||||||
closeGraphWindow(true);
|
closeGraphWindow(true);
|
||||||
closeOptionsWindow();
|
closeOptionsWindow();
|
||||||
closeProgramsWindow();
|
closeProgramsWindow();
|
||||||
|
closeServicesWindow();
|
||||||
closeZonesWindow();
|
closeZonesWindow();
|
||||||
closeStatisticsWindow();
|
closeStatisticsWindow();
|
||||||
closeTrayIcon();
|
closeTrayIcon();
|
||||||
@ -304,6 +315,30 @@ void WindowManager::closeStatisticsWindow()
|
|||||||
m_statWindow = nullptr;
|
m_statWindow = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WindowManager::showServicesWindow()
|
||||||
|
{
|
||||||
|
if (!widgetVisibleByCheckPassword(m_serviceWindow))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!m_serviceWindow) {
|
||||||
|
setupServicesWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
showWidget(m_serviceWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WindowManager::closeServicesWindow()
|
||||||
|
{
|
||||||
|
if (!m_serviceWindow)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_serviceWindow->saveWindowState();
|
||||||
|
m_serviceWindow->hide();
|
||||||
|
|
||||||
|
m_serviceWindow->deleteLater();
|
||||||
|
m_serviceWindow = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void WindowManager::showZonesWindow()
|
void WindowManager::showZonesWindow()
|
||||||
{
|
{
|
||||||
if (!widgetVisibleByCheckPassword(m_zoneWindow))
|
if (!widgetVisibleByCheckPassword(m_zoneWindow))
|
||||||
|
@ -9,6 +9,7 @@ class GraphWindow;
|
|||||||
class MainWindow;
|
class MainWindow;
|
||||||
class OptionsWindow;
|
class OptionsWindow;
|
||||||
class ProgramsWindow;
|
class ProgramsWindow;
|
||||||
|
class ServicesWindow;
|
||||||
class StatisticsWindow;
|
class StatisticsWindow;
|
||||||
class TrayIcon;
|
class TrayIcon;
|
||||||
class ZonesWindow;
|
class ZonesWindow;
|
||||||
@ -27,6 +28,7 @@ public:
|
|||||||
ProgramsWindow *progWindow() const { return m_progWindow; }
|
ProgramsWindow *progWindow() const { return m_progWindow; }
|
||||||
OptionsWindow *optWindow() const { return m_optWindow; }
|
OptionsWindow *optWindow() const { return m_optWindow; }
|
||||||
StatisticsWindow *connWindow() const { return m_statWindow; }
|
StatisticsWindow *connWindow() const { return m_statWindow; }
|
||||||
|
ServicesWindow *serviceWindow() const { return m_serviceWindow; }
|
||||||
ZonesWindow *zoneWindow() const { return m_zoneWindow; }
|
ZonesWindow *zoneWindow() const { return m_zoneWindow; }
|
||||||
GraphWindow *graphWindow() const { return m_graphWindow; }
|
GraphWindow *graphWindow() const { return m_graphWindow; }
|
||||||
|
|
||||||
@ -59,6 +61,9 @@ public slots:
|
|||||||
void showStatisticsWindow();
|
void showStatisticsWindow();
|
||||||
void closeStatisticsWindow();
|
void closeStatisticsWindow();
|
||||||
|
|
||||||
|
void showServicesWindow();
|
||||||
|
void closeServicesWindow();
|
||||||
|
|
||||||
void showZonesWindow();
|
void showZonesWindow();
|
||||||
void closeZonesWindow();
|
void closeZonesWindow();
|
||||||
|
|
||||||
@ -86,6 +91,7 @@ private:
|
|||||||
|
|
||||||
void setupProgramsWindow();
|
void setupProgramsWindow();
|
||||||
void setupOptionsWindow();
|
void setupOptionsWindow();
|
||||||
|
void setupServicesWindow();
|
||||||
void setupZonesWindow();
|
void setupZonesWindow();
|
||||||
void setupGraphWindow();
|
void setupGraphWindow();
|
||||||
void setupStatisticsWindow();
|
void setupStatisticsWindow();
|
||||||
@ -104,6 +110,7 @@ private:
|
|||||||
ProgramsWindow *m_progWindow = nullptr;
|
ProgramsWindow *m_progWindow = nullptr;
|
||||||
OptionsWindow *m_optWindow = nullptr;
|
OptionsWindow *m_optWindow = nullptr;
|
||||||
StatisticsWindow *m_statWindow = nullptr;
|
StatisticsWindow *m_statWindow = nullptr;
|
||||||
|
ServicesWindow *m_serviceWindow = nullptr;
|
||||||
ZonesWindow *m_zoneWindow = nullptr;
|
ZonesWindow *m_zoneWindow = nullptr;
|
||||||
GraphWindow *m_graphWindow = nullptr;
|
GraphWindow *m_graphWindow = nullptr;
|
||||||
};
|
};
|
||||||
|
@ -13,11 +13,6 @@ ConfManager *ServiceListModel::confManager() const
|
|||||||
return IoC<ConfManager>();
|
return IoC<ConfManager>();
|
||||||
}
|
}
|
||||||
|
|
||||||
ServiceInfoManager *ServiceListModel::serviceInfoManager() const
|
|
||||||
{
|
|
||||||
return IoC<ServiceInfoManager>();
|
|
||||||
}
|
|
||||||
|
|
||||||
FirewallConf *ServiceListModel::conf() const
|
FirewallConf *ServiceListModel::conf() const
|
||||||
{
|
{
|
||||||
return confManager()->conf();
|
return confManager()->conf();
|
||||||
@ -25,7 +20,7 @@ FirewallConf *ServiceListModel::conf() const
|
|||||||
|
|
||||||
void ServiceListModel::initialize()
|
void ServiceListModel::initialize()
|
||||||
{
|
{
|
||||||
m_services = serviceInfoManager()->loadServiceInfoList();
|
m_services = ServiceInfoManager::loadServiceInfoList();
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
@ -39,7 +34,7 @@ int ServiceListModel::rowCount(const QModelIndex &parent) const
|
|||||||
|
|
||||||
int ServiceListModel::columnCount(const QModelIndex &parent) const
|
int ServiceListModel::columnCount(const QModelIndex &parent) const
|
||||||
{
|
{
|
||||||
return parent.isValid() ? 0 : 4;
|
return parent.isValid() ? 0 : 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant ServiceListModel::headerData(int section, Qt::Orientation orientation, int role) const
|
QVariant ServiceListModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
@ -52,8 +47,6 @@ QVariant ServiceListModel::headerData(int section, Qt::Orientation orientation,
|
|||||||
return tr("Display Name");
|
return tr("Display Name");
|
||||||
case 2:
|
case 2:
|
||||||
return tr("Process ID");
|
return tr("Process ID");
|
||||||
case 3:
|
|
||||||
return tr("Group");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
@ -88,8 +81,6 @@ QVariant ServiceListModel::dataDisplay(const QModelIndex &index) const
|
|||||||
return info.displayName;
|
return info.displayName;
|
||||||
case 2:
|
case 2:
|
||||||
return dataDisplayProcessId(info);
|
return dataDisplayProcessId(info);
|
||||||
case 3:
|
|
||||||
return dataDisplayAppGroup(info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return QVariant();
|
return QVariant();
|
||||||
@ -100,13 +91,6 @@ QVariant ServiceListModel::dataDisplayProcessId(const ServiceInfo &info) const
|
|||||||
return (info.processId == 0) ? QVariant() : QVariant(info.processId);
|
return (info.processId == 0) ? QVariant() : QVariant(info.processId);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant ServiceListModel::dataDisplayAppGroup(const ServiceInfo &info) const
|
|
||||||
{
|
|
||||||
const int groupIndex = serviceInfoManager()->groupIndexByName(info.serviceName);
|
|
||||||
|
|
||||||
return (groupIndex < 0) ? QVariant() : conf()->appGroupAt(groupIndex)->name();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ServiceListModel::updateTableRow(int /*row*/) const
|
bool ServiceListModel::updateTableRow(int /*row*/) const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
class ConfManager;
|
class ConfManager;
|
||||||
class FirewallConf;
|
class FirewallConf;
|
||||||
class ServiceInfo;
|
class ServiceInfo;
|
||||||
class ServiceInfoManager;
|
|
||||||
|
|
||||||
class ServiceListModel : public TableItemModel
|
class ServiceListModel : public TableItemModel
|
||||||
{
|
{
|
||||||
@ -19,7 +18,6 @@ public:
|
|||||||
explicit ServiceListModel(QObject *parent = nullptr);
|
explicit ServiceListModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
ConfManager *confManager() const;
|
ConfManager *confManager() const;
|
||||||
ServiceInfoManager *serviceInfoManager() const;
|
|
||||||
FirewallConf *conf() const;
|
FirewallConf *conf() const;
|
||||||
|
|
||||||
void initialize();
|
void initialize();
|
||||||
@ -31,6 +29,9 @@ public:
|
|||||||
int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
|
const QVector<ServiceInfo> &services() const { return m_services; }
|
||||||
|
const ServiceInfo &serviceInfoAt(int index) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool updateTableRow(int row) const override;
|
bool updateTableRow(int row) const override;
|
||||||
TableRow &tableRow() const override { return m_serviceRow; }
|
TableRow &tableRow() const override { return m_serviceRow; }
|
||||||
@ -38,10 +39,6 @@ protected:
|
|||||||
private:
|
private:
|
||||||
QVariant dataDisplay(const QModelIndex &index) const;
|
QVariant dataDisplay(const QModelIndex &index) const;
|
||||||
QVariant dataDisplayProcessId(const ServiceInfo &info) const;
|
QVariant dataDisplayProcessId(const ServiceInfo &info) const;
|
||||||
QVariant dataDisplayAppGroup(const ServiceInfo &info) const;
|
|
||||||
|
|
||||||
const QVector<ServiceInfo> &services() const { return m_services; }
|
|
||||||
const ServiceInfo &serviceInfoAt(int index) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVector<ServiceInfo> m_services;
|
QVector<ServiceInfo> m_services;
|
||||||
|
@ -14,6 +14,17 @@ const QLoggingCategory LC("serviceInfo.serviceInfoManager");
|
|||||||
|
|
||||||
const char *const servicesSubKey = R"(SYSTEM\CurrentControlSet\Services)";
|
const char *const servicesSubKey = R"(SYSTEM\CurrentControlSet\Services)";
|
||||||
|
|
||||||
|
QString getServiceDll(const RegKey &svcReg, bool *expand = nullptr)
|
||||||
|
{
|
||||||
|
QVariant dllPathVar = svcReg.value("ServiceDll", expand);
|
||||||
|
if (dllPathVar.isNull()) {
|
||||||
|
const RegKey paramsReg(svcReg, "Parameters");
|
||||||
|
dllPathVar = paramsReg.value("ServiceDll", expand);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dllPathVar.toString();
|
||||||
|
}
|
||||||
|
|
||||||
QVector<ServiceInfo> getServiceInfoList(SC_HANDLE mngr, DWORD state = SERVICE_STATE_ALL)
|
QVector<ServiceInfo> getServiceInfoList(SC_HANDLE mngr, DWORD state = SERVICE_STATE_ALL)
|
||||||
{
|
{
|
||||||
QVector<ServiceInfo> infoList;
|
QVector<ServiceInfo> infoList;
|
||||||
@ -45,6 +56,10 @@ QVector<ServiceInfo> getServiceInfoList(SC_HANDLE mngr, DWORD state = SERVICE_ST
|
|||||||
if (!imagePath.contains(R"(\system32\svchost.exe)", Qt::CaseInsensitive))
|
if (!imagePath.contains(R"(\system32\svchost.exe)", Qt::CaseInsensitive))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
const QString dllPath = getServiceDll(svcReg);
|
||||||
|
if (dllPath.isEmpty())
|
||||||
|
continue;
|
||||||
|
|
||||||
ServiceInfo info;
|
ServiceInfo info;
|
||||||
info.processId = service->ServiceStatusProcess.dwProcessId;
|
info.processId = service->ServiceStatusProcess.dwProcessId;
|
||||||
info.serviceName = serviceName;
|
info.serviceName = serviceName;
|
||||||
@ -62,13 +77,6 @@ QVector<ServiceInfo> getServiceInfoList(SC_HANDLE mngr, DWORD state = SERVICE_ST
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ServiceInfoManager::ServiceInfoManager(QObject *parent) : QObject(parent) { }
|
|
||||||
|
|
||||||
int ServiceInfoManager::groupIndexByName(const QString &name) const
|
|
||||||
{
|
|
||||||
return m_serviceGroups.value(name, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
QVector<ServiceInfo> ServiceInfoManager::loadServiceInfoList(ServiceInfo::State state)
|
QVector<ServiceInfo> ServiceInfoManager::loadServiceInfoList(ServiceInfo::State state)
|
||||||
{
|
{
|
||||||
QVector<ServiceInfo> list;
|
QVector<ServiceInfo> list;
|
||||||
@ -87,16 +95,7 @@ QString ServiceInfoManager::getSvcHostServiceDll(const QString &serviceName)
|
|||||||
const RegKey svcReg(servicesReg, serviceName);
|
const RegKey svcReg(servicesReg, serviceName);
|
||||||
|
|
||||||
bool expand = false;
|
bool expand = false;
|
||||||
QVariant dllPathVar = svcReg.value("ServiceDll", &expand);
|
const QString dllPath = getServiceDll(svcReg, &expand);
|
||||||
if (dllPathVar.isNull()) {
|
|
||||||
const RegKey paramsReg(svcReg, "Parameters");
|
|
||||||
dllPathVar = paramsReg.value("ServiceDll", &expand);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString path = dllPathVar.toString();
|
return expand ? FileUtil::expandPath(dllPath) : dllPath;
|
||||||
if (expand) {
|
|
||||||
path = FileUtil::expandPath(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
return path;
|
|
||||||
}
|
}
|
||||||
|
@ -1,29 +1,15 @@
|
|||||||
#ifndef SERVICEINFOMANAGER_H
|
#ifndef SERVICEINFOMANAGER_H
|
||||||
#define SERVICEINFOMANAGER_H
|
#define SERVICEINFOMANAGER_H
|
||||||
|
|
||||||
#include <QHash>
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
#include <util/ioc/iocservice.h>
|
|
||||||
|
|
||||||
#include "serviceinfo.h"
|
#include "serviceinfo.h"
|
||||||
|
|
||||||
class ServiceInfoManager : public QObject, public IocService
|
class ServiceInfoManager
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ServiceInfoManager(QObject *parent = nullptr);
|
|
||||||
|
|
||||||
int groupIndexByName(const QString &name) const;
|
|
||||||
|
|
||||||
static QVector<ServiceInfo> loadServiceInfoList(
|
static QVector<ServiceInfo> loadServiceInfoList(
|
||||||
ServiceInfo::State state = ServiceInfo::StateAlive);
|
ServiceInfo::State state = ServiceInfo::StateAlive);
|
||||||
|
|
||||||
static QString getSvcHostServiceDll(const QString &serviceName);
|
static QString getSvcHostServiceDll(const QString &serviceName);
|
||||||
|
|
||||||
private:
|
|
||||||
QHash<QString, int> m_serviceGroups;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SERVICEINFOMANAGER_H
|
#endif // SERVICEINFOMANAGER_H
|
||||||
|
@ -62,6 +62,18 @@ public:
|
|||||||
QByteArray optWindowAppsSplit() const { return valueByteArray("optWindow/appsSplit"); }
|
QByteArray optWindowAppsSplit() const { return valueByteArray("optWindow/appsSplit"); }
|
||||||
void setOptWindowAppsSplit(const QByteArray &v) { setValue("optWindow/appsSplit", v); }
|
void setOptWindowAppsSplit(const QByteArray &v) { setValue("optWindow/appsSplit", v); }
|
||||||
|
|
||||||
|
QRect serviceWindowGeometry() const { return value("serviceWindow/geometry").toRect(); }
|
||||||
|
void setServiceWindowGeometry(const QRect &v) { setValue("serviceWindow/geometry", v); }
|
||||||
|
|
||||||
|
bool serviceWindowMaximized() const { return valueBool("serviceWindow/maximized"); }
|
||||||
|
void setServiceWindowMaximized(bool on) { setValue("serviceWindow/maximized", on); }
|
||||||
|
|
||||||
|
int servicesHeaderVersion() const { return valueInt("serviceWindow/servicesHeaderVersion"); }
|
||||||
|
void setServicesHeaderVersion(int v) { setValue("serviceWindow/servicesHeaderVersion", v); }
|
||||||
|
|
||||||
|
QByteArray servicesHeader() const { return valueByteArray("serviceWindow/servicesHeader"); }
|
||||||
|
void setServicesHeader(const QByteArray &v) { setValue("serviceWindow/servicesHeader", v); }
|
||||||
|
|
||||||
QRect zoneWindowGeometry() const { return value("zoneWindow/geometry").toRect(); }
|
QRect zoneWindowGeometry() const { return value("zoneWindow/geometry").toRect(); }
|
||||||
void setZoneWindowGeometry(const QRect &v) { setValue("zoneWindow/geometry", v); }
|
void setZoneWindowGeometry(const QRect &v) { setValue("zoneWindow/geometry", v); }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user