feat: 设置页相关调整优化;
This commit is contained in:
parent
7bbe4da34b
commit
55ebbcd126
|
@ -28,6 +28,7 @@ add_definitions(-DAS_NO_THREADS)
|
||||||
|
|
||||||
if(BUILD_TEST_PLUGIN)
|
if(BUILD_TEST_PLUGIN)
|
||||||
add_subdirectory(TestPlugin)
|
add_subdirectory(TestPlugin)
|
||||||
|
add_subdirectory(TestBadPlugin)
|
||||||
add_subdirectory(TestManager)
|
add_subdirectory(TestManager)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -302,7 +303,9 @@ set(CLASS_SRC
|
||||||
src/class/wingangel.h
|
src/class/wingangel.h
|
||||||
src/class/wingangel.cpp
|
src/class/wingangel.cpp
|
||||||
src/class/winggeneric.h
|
src/class/winggeneric.h
|
||||||
src/class/winggeneric.cpp)
|
src/class/winggeneric.cpp
|
||||||
|
src/class/changedstringlist.h
|
||||||
|
src/class/changedstringlist.cpp)
|
||||||
|
|
||||||
set(INTERNAL_PLG_SRC
|
set(INTERNAL_PLG_SRC
|
||||||
src/class/wingangelapi.h src/class/wingangelapi.cpp
|
src/class/wingangelapi.h src/class/wingangelapi.cpp
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
project(TestBadPlugin)
|
||||||
|
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_AUTORCC ON)
|
||||||
|
set(CMAKE_AUTOUIC ON)
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
|
||||||
|
|
||||||
|
# Test mode, please configure the main program directory to facilitate debugging
|
||||||
|
|
||||||
|
# 测试模式,启用请配置主程序目录,方便调试
|
||||||
|
|
||||||
|
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||||
|
option(TEST_MODE TRUE)
|
||||||
|
|
||||||
|
# For Qt
|
||||||
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
|
||||||
|
find_package(
|
||||||
|
Qt${QT_VERSION_MAJOR}
|
||||||
|
COMPONENTS Widgets
|
||||||
|
REQUIRED)
|
||||||
|
|
||||||
|
add_library(TestBadPlugin SHARED TestBadPlugin.json
|
||||||
|
testbadplugin.h testbadplugin.cpp)
|
||||||
|
|
||||||
|
set_target_properties(TestBadPlugin PROPERTIES SUFFIX ".wingplg")
|
||||||
|
|
||||||
|
if(TEST_MODE)
|
||||||
|
# If you want to be able to debug easily every time you compile, please set
|
||||||
|
# this variable. Because this test plugin is a subproject of the main
|
||||||
|
# project, use CMAKE_BINARY_DIR
|
||||||
|
|
||||||
|
# 如果你想每次编译都能够方便调试的话,请设置这个变量。因为这个测试插件是和主项目子项目,所以用 CMAKE_BINARY_DIR
|
||||||
|
|
||||||
|
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||||
|
set(WINGHEX_PATH "${CMAKE_BINARY_DIR}")
|
||||||
|
|
||||||
|
set(WINGHEX_PLUGIN_PATH "${WINGHEX_PATH}/plugin")
|
||||||
|
add_custom_command(
|
||||||
|
TARGET TestBadPlugin
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${WINGHEX_PLUGIN_PATH}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
$<TARGET_FILE:TestBadPlugin> ${WINGHEX_PLUGIN_PATH})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(TestBadPlugin PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
|
||||||
|
WingPlugin)
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"Id": "TestBadPlugin",
|
||||||
|
"SDK": 18,
|
||||||
|
"Version": "0.0.1",
|
||||||
|
"Vendor": "WingCloudStudio",
|
||||||
|
"Dependencies": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"Author": "wingsummer",
|
||||||
|
"License": "MIT",
|
||||||
|
"Url": "https://github.com/Wing-summer/WingHexExplorer2"
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*==============================================================================
|
||||||
|
** Copyright (C) 2024-2027 WingSummer
|
||||||
|
**
|
||||||
|
** Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
** of this software and associated documentation files (the "Software"), to deal
|
||||||
|
** in the Software without restriction, including without limitation the rights
|
||||||
|
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
** copies of the Software, and to permit persons to whom the Software is
|
||||||
|
** furnished to do so.
|
||||||
|
**
|
||||||
|
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
** THE SOFTWARE.
|
||||||
|
** =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "testbadplugin.h"
|
||||||
|
|
||||||
|
TestBadPlugin::TestBadPlugin() {}
|
||||||
|
|
||||||
|
bool TestBadPlugin::init(const std::unique_ptr<QSettings> &set) {
|
||||||
|
Q_UNUSED(set);
|
||||||
|
msgCritical(
|
||||||
|
nullptr, QStringLiteral("TestBadPlugin"),
|
||||||
|
QStringLiteral("Hello, pals! I'm a evil MESSAGEBOX! PLEASE BAN ME!"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestBadPlugin::unload(std::unique_ptr<QSettings> &set) { Q_UNUSED(set); }
|
||||||
|
|
||||||
|
const QString TestBadPlugin::pluginName() const {
|
||||||
|
return QStringLiteral("TestBadPlugin");
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString TestBadPlugin::pluginComment() const {
|
||||||
|
return QStringLiteral("TestBadPlugin: popup a messagebox when startup!");
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*==============================================================================
|
||||||
|
** Copyright (C) 2024-2027 WingSummer
|
||||||
|
**
|
||||||
|
** Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
** of this software and associated documentation files (the "Software"), to deal
|
||||||
|
** in the Software without restriction, including without limitation the rights
|
||||||
|
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
** copies of the Software, and to permit persons to whom the Software is
|
||||||
|
** furnished to do so.
|
||||||
|
**
|
||||||
|
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
** THE SOFTWARE.
|
||||||
|
** =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TESTBADPLUGIN_H
|
||||||
|
#define TESTBADPLUGIN_H
|
||||||
|
|
||||||
|
#include "WingPlugin/iwingplugin.h"
|
||||||
|
|
||||||
|
class TestBadPlugin : public WingHex::IWingPlugin {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PLUGIN_METADATA(IID "com.wingsummer.iwingplugin" FILE
|
||||||
|
"TestBadPlugin.json")
|
||||||
|
Q_INTERFACES(WingHex::IWingPlugin)
|
||||||
|
public:
|
||||||
|
TestBadPlugin();
|
||||||
|
|
||||||
|
// IWingPluginCoreBase interface
|
||||||
|
public:
|
||||||
|
virtual bool init(const std::unique_ptr<QSettings> &set) override;
|
||||||
|
virtual void unload(std::unique_ptr<QSettings> &set) override;
|
||||||
|
|
||||||
|
// IWingPluginBase interface
|
||||||
|
public:
|
||||||
|
virtual const QString pluginName() const override;
|
||||||
|
virtual const QString pluginComment() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TESTBADPLUGIN_H
|
|
@ -4,6 +4,6 @@
|
||||||
"Version": "0.0.1",
|
"Version": "0.0.1",
|
||||||
"Vendor": "WingCloudStudio",
|
"Vendor": "WingCloudStudio",
|
||||||
"Author": "wingsummer",
|
"Author": "wingsummer",
|
||||||
"License": "AGPL-3.0",
|
"License": "MIT",
|
||||||
"Url": "https://github.com/Wing-summer/WingHexExplorer2"
|
"Url": "https://github.com/Wing-summer/WingHexExplorer2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,11 +28,14 @@ TestManager::~TestManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TestManager::init(const std::unique_ptr<QSettings> &set) {
|
bool TestManager::init(const std::unique_ptr<QSettings> &set) {
|
||||||
Q_UNUSED(set);
|
_banTestBadPlugin = set->value("BanTestBadPlugin").toBool();
|
||||||
|
content->initConfig(this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestManager::unload(std::unique_ptr<QSettings> &set) { Q_UNUSED(set); }
|
void TestManager::unload(std::unique_ptr<QSettings> &set) {
|
||||||
|
set->setValue("BanTestBadPlugin", _banTestBadPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
const QString TestManager::comment() const {
|
const QString TestManager::comment() const {
|
||||||
return QStringLiteral("Hello world!");
|
return QStringLiteral("Hello world!");
|
||||||
|
@ -55,3 +58,12 @@ bool TestManager::enterGuard(const QMetaObject *sender, const QString &sig,
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TestManager::onLoadingPlugin(const QString &fileName,
|
||||||
|
const WingHex::PluginInfo &info) {
|
||||||
|
Q_UNUSED(fileName);
|
||||||
|
if (info.id == QStringLiteral("TestBadPlugin")) {
|
||||||
|
return !_banTestBadPlugin;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -56,6 +56,10 @@ private:
|
||||||
_cbblk = new QCheckBox(QStringLiteral("Disable msg*"), this);
|
_cbblk = new QCheckBox(QStringLiteral("Disable msg*"), this);
|
||||||
_cbblk->setChecked(false);
|
_cbblk->setChecked(false);
|
||||||
layout->addWidget(_cbblk);
|
layout->addWidget(_cbblk);
|
||||||
|
|
||||||
|
_banclk = new QCheckBox(QStringLiteral("BanTestBadPlugin"), this);
|
||||||
|
|
||||||
|
layout->addWidget(_banclk);
|
||||||
layout->addStretch();
|
layout->addStretch();
|
||||||
}
|
}
|
||||||
// PageBase interface
|
// PageBase interface
|
||||||
|
@ -74,19 +78,31 @@ private:
|
||||||
public:
|
public:
|
||||||
virtual void restore() override { _cbblk->setChecked(false); }
|
virtual void restore() override { _cbblk->setChecked(false); }
|
||||||
|
|
||||||
|
void initConfig(TestManager *man) {
|
||||||
|
_banclk->setChecked(man->_banTestBadPlugin);
|
||||||
|
connect(_banclk, &QCheckBox::toggled, this, [man, this](bool b) {
|
||||||
|
man->_banTestBadPlugin = b;
|
||||||
|
Q_EMIT optionNeedRestartChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool isDisableMsg() const { return _cbblk->isChecked(); }
|
bool isDisableMsg() const { return _cbblk->isChecked(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QCheckBox *_cbblk;
|
QCheckBox *_cbblk, *_banclk;
|
||||||
};
|
};
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual bool enterGuard(const QMetaObject *sender, const QString &sig,
|
virtual bool enterGuard(const QMetaObject *sender, const QString &sig,
|
||||||
const QVariantList ¶ms) override;
|
const QVariantList ¶ms) override;
|
||||||
|
|
||||||
|
virtual bool onLoadingPlugin(const QString &fileName,
|
||||||
|
const WingHex::PluginInfo &info) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TestPage *content;
|
TestPage *content;
|
||||||
|
bool _banTestBadPlugin = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TESTMANAGER_H
|
#endif // TESTMANAGER_H
|
||||||
|
|
|
@ -7,6 +7,6 @@
|
||||||
|
|
||||||
],
|
],
|
||||||
"Author": "wingsummer",
|
"Author": "wingsummer",
|
||||||
"License": "AGPL-3.0",
|
"License": "MIT",
|
||||||
"Url": "https://github.com/Wing-summer/WingHexExplorer2"
|
"Url": "https://github.com/Wing-summer/WingHexExplorer2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit ab94fca27d23da495fa743dd15ccb01ca6a431fc
|
Subproject commit 420ad38ba767c180c7edc726aa8641a631e24559
|
Binary file not shown.
After Width: | Height: | Size: 5.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 8.6 KiB |
|
@ -2298,6 +2298,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="81"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="81"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="305"/>
|
||||||
<source>PluginInfo</source>
|
<source>PluginInfo</source>
|
||||||
<translation>插件信息</translation>
|
<translation>插件信息</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2307,97 +2308,129 @@
|
||||||
<translation>插件:</translation>
|
<translation>插件:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="136"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="125"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="175"/>
|
||||||
|
<source>Save</source>
|
||||||
|
<translation type="unfinished">保存</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="146"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="313"/>
|
||||||
<source>DevExtInfo</source>
|
<source>DevExtInfo</source>
|
||||||
<translation>设备插件信息</translation>
|
<translation>设备插件信息</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="152"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="162"/>
|
||||||
<source>DevExt:</source>
|
<source>DevExt:</source>
|
||||||
<translation>设备插件:</translation>
|
<translation>设备插件:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="176"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="196"/>
|
||||||
<source>APIMonitor</source>
|
<source>APIMonitor</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="108"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="343"/>
|
||||||
<source>Plugin</source>
|
<source>Plugin</source>
|
||||||
<translation>插件</translation>
|
<translation>插件</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="71"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="158"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="128"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="215"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="153"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="272"/>
|
||||||
<source>ID</source>
|
<source>ID</source>
|
||||||
<translation>ID</translation>
|
<translation>ID</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="129"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="216"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="154"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="273"/>
|
||||||
<source>Name</source>
|
<source>Name</source>
|
||||||
<translation>名称</translation>
|
<translation>名称</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="72"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="159"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="130"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="218"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="155"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="275"/>
|
||||||
<source>License</source>
|
<source>License</source>
|
||||||
<translation>协议</translation>
|
<translation>协议</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="73"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="160"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="131"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="219"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="156"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="276"/>
|
||||||
<source>Author</source>
|
<source>Author</source>
|
||||||
<translation>作者</translation>
|
<translation>作者</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="74"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="161"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="132"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="220"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="157"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="277"/>
|
||||||
<source>Vendor</source>
|
<source>Vendor</source>
|
||||||
<translation>厂家</translation>
|
<translation>厂家</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="76"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="163"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="134"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="222"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="159"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="279"/>
|
||||||
<source>Version</source>
|
<source>Version</source>
|
||||||
<translation>版本</translation>
|
<translation>版本</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="86"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="173"/>
|
||||||
<source>NoMonitorPlugin</source>
|
<source>NoMonitorPlugin</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="80"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="391"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="136"/>
|
<source>SelectAll</source>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="161"/>
|
<translation type="unfinished">全选</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="372"/>
|
||||||
|
<source>SelectEnable</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="380"/>
|
||||||
|
<source>SelectDisable</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="392"/>
|
||||||
|
<source>SelectClear</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="396"/>
|
||||||
|
<source>DiscardChanges</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="167"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="223"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="280"/>
|
||||||
<source>Comment</source>
|
<source>Comment</source>
|
||||||
<translation>说明</translation>
|
<translation>说明</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="78"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="165"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="138"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="235"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="172"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="282"/>
|
||||||
<source>URL</source>
|
<source>URL</source>
|
||||||
<translation>网址</translation>
|
<translation>网址</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="163"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="225"/>
|
||||||
<source>pluginDependencies:</source>
|
<source>pluginDependencies:</source>
|
||||||
<translation>插件依赖</translation>
|
<translation>插件依赖</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="166"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="228"/>
|
||||||
<source>PUID:</source>
|
<source>PUID:</source>
|
||||||
<translation>插件唯一标志符:</translation>
|
<translation>插件唯一标志符:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="167"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="230"/>
|
||||||
<source>Version:</source>
|
<source>Version:</source>
|
||||||
<translation>版本:</translation>
|
<translation>版本:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2405,127 +2438,127 @@
|
||||||
<context>
|
<context>
|
||||||
<name>PluginSystem</name>
|
<name>PluginSystem</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3221"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3231"/>
|
||||||
<source>LoadingPlugin</source>
|
<source>LoadingPlugin</source>
|
||||||
<translation>加载插件中:</translation>
|
<translation>加载插件中:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3239"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3249"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3816"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3844"/>
|
||||||
<source>InvalidPluginBrokenInfo</source>
|
<source>InvalidPluginBrokenInfo</source>
|
||||||
<translation>加载插件失败:损坏的插件数据</translation>
|
<translation>加载插件失败:损坏的插件数据</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3261"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3277"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4318"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4355"/>
|
||||||
<source>PluginBlockByManager</source>
|
<source>PluginBlockByManager</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3655"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3683"/>
|
||||||
<source>AppClosingCanceled:</source>
|
<source>AppClosingCanceled:</source>
|
||||||
<translation>程序关闭被取消:</translation>
|
<translation>程序关闭被取消:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3731"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3759"/>
|
||||||
<source>- PluginID:</source>
|
<source>- PluginID:</source>
|
||||||
<translation>- 插件 ID:</translation>
|
<translation>- 插件 ID:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3753"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3781"/>
|
||||||
<source>FoundDrvPluginCount</source>
|
<source>FoundDrvPluginCount</source>
|
||||||
<translation>总计发现设备拓展插件数目:</translation>
|
<translation>总计发现设备拓展插件数目:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3794"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3822"/>
|
||||||
<source>PluginManagerNeedSingleton</source>
|
<source>PluginManagerNeedSingleton</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3252"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3262"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3810"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3838"/>
|
||||||
<source>ErrLoadPluginSDKVersion</source>
|
<source>ErrLoadPluginSDKVersion</source>
|
||||||
<translation>插件加载失败:非法插件 SDK 版本!</translation>
|
<translation>插件加载失败:非法插件 SDK 版本!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3962"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3990"/>
|
||||||
<source>ErrLoadPluginNoName</source>
|
<source>ErrLoadPluginNoName</source>
|
||||||
<translation>插件加载失败:非法插件名称!</translation>
|
<translation>插件加载失败:非法插件名称!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3840"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3868"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3983"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4011"/>
|
||||||
<source>ErrLoadInitPlugin</source>
|
<source>ErrLoadInitPlugin</source>
|
||||||
<translation>插件加载失败:初始化插件失败!</translation>
|
<translation>插件加载失败:初始化插件失败!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3992"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4020"/>
|
||||||
<source>PluginName :</source>
|
<source>PluginName :</source>
|
||||||
<translation>插件名:</translation>
|
<translation>插件名:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3993"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4021"/>
|
||||||
<source>PluginAuthor :</source>
|
<source>PluginAuthor :</source>
|
||||||
<translation>插件作者:</translation>
|
<translation>插件作者:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3994"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4022"/>
|
||||||
<source>PluginWidgetRegister</source>
|
<source>PluginWidgetRegister</source>
|
||||||
<translation>注册插件对象中……</translation>
|
<translation>注册插件对象中……</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4034"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4062"/>
|
||||||
<source>ExtPluginAuthor :</source>
|
<source>ExtPluginAuthor :</source>
|
||||||
<translation>设备拓展插件作者:</translation>
|
<translation>设备拓展插件作者:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4035"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4063"/>
|
||||||
<source>ExtPluginWidgetRegister</source>
|
<source>ExtPluginWidgetRegister</source>
|
||||||
<translation>设备拓展注册插件对象中……</translation>
|
<translation>设备拓展注册插件对象中……</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4051"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4079"/>
|
||||||
<source>ErrLoadInitExtPlugin</source>
|
<source>ErrLoadInitExtPlugin</source>
|
||||||
<translation>设备拓展插件加载失败:初始化插件失败!</translation>
|
<translation>设备拓展插件加载失败:初始化插件失败!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4074"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4102"/>
|
||||||
<source>ChooseFile</source>
|
<source>ChooseFile</source>
|
||||||
<translation>选择文件</translation>
|
<translation>选择文件</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4081"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4109"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4086"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4114"/>
|
||||||
<source>Error</source>
|
<source>Error</source>
|
||||||
<translation>错误</translation>
|
<translation>错误</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4082"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4110"/>
|
||||||
<source>FileNotExist</source>
|
<source>FileNotExist</source>
|
||||||
<translation>文件不存在!</translation>
|
<translation>文件不存在!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4087"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4115"/>
|
||||||
<source>FilePermission</source>
|
<source>FilePermission</source>
|
||||||
<translation>因文件权限无法继续!</translation>
|
<translation>因文件权限无法继续!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4117"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4145"/>
|
||||||
<source>EmptyNameDockWidget:</source>
|
<source>EmptyNameDockWidget:</source>
|
||||||
<translation>空的贴边组件名:</translation>
|
<translation>空的贴边组件名:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4127"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4155"/>
|
||||||
<source>InvalidNameDockWidget:</source>
|
<source>InvalidNameDockWidget:</source>
|
||||||
<translation>无效贴边组件名:</translation>
|
<translation>无效贴边组件名:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4135"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4163"/>
|
||||||
<source>InvalidNullDockWidget:</source>
|
<source>InvalidNullDockWidget:</source>
|
||||||
<translation>无效空贴边组件:</translation>
|
<translation>无效空贴边组件:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4248"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4276"/>
|
||||||
<source>Not allowed operation in non-UI thread</source>
|
<source>Not allowed operation in non-UI thread</source>
|
||||||
<translation>该操作在非 UI 线程非法</translation>
|
<translation>该操作在非 UI 线程非法</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2535,48 +2568,48 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3779"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3807"/>
|
||||||
<source>UnsafePluginDir</source>
|
<source>UnsafePluginDir</source>
|
||||||
<translation>不安全的插件目录,请将插件目录设置为仅管理员账户可写</translation>
|
<translation>不安全的插件目录,请将插件目录设置为仅管理员账户可写</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3246"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3256"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3813"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3841"/>
|
||||||
<source>InvalidPluginID</source>
|
<source>InvalidPluginID</source>
|
||||||
<translation>加载插件失败:非法插件标识符</translation>
|
<translation>加载插件失败:非法插件标识符</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3249"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3259"/>
|
||||||
<source>InvalidDupPlugin</source>
|
<source>InvalidDupPlugin</source>
|
||||||
<translation>加载插件失败:重复的插件标识符</translation>
|
<translation>加载插件失败:重复的插件标识符</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3696"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3724"/>
|
||||||
<source>FoundPluginCount</source>
|
<source>FoundPluginCount</source>
|
||||||
<translation>总计发现插件数目:</translation>
|
<translation>总计发现插件数目:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3727"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3755"/>
|
||||||
<source>PluginLoadingFailedSummary</source>
|
<source>PluginLoadingFailedSummary</source>
|
||||||
<translation>有依赖插件加载失败总结</translation>
|
<translation>有依赖插件加载失败总结</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3732"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3760"/>
|
||||||
<source>- Dependencies:</source>
|
<source>- Dependencies:</source>
|
||||||
<translation>- 依赖:</translation>
|
<translation>- 依赖:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3734"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3762"/>
|
||||||
<source>PUID:</source>
|
<source>PUID:</source>
|
||||||
<translation>插件唯一标志符:</translation>
|
<translation>插件唯一标志符:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3735"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3763"/>
|
||||||
<source>Version:</source>
|
<source>Version:</source>
|
||||||
<translation>版本:</translation>
|
<translation>版本:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3742"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3770"/>
|
||||||
<source>PluginLoadingFinished</source>
|
<source>PluginLoadingFinished</source>
|
||||||
<translation>加载插件完毕!</translation>
|
<translation>加载插件完毕!</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4539,22 +4572,22 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ScriptManager</name>
|
<name>ScriptManager</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="91"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="92"/>
|
||||||
<source>RunScript</source>
|
<source>RunScript</source>
|
||||||
<translation>执行脚本</translation>
|
<translation>执行脚本</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="92"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="93"/>
|
||||||
<source>CanNotRunUsrScriptForPolicy</source>
|
<source>CanNotRunUsrScriptForPolicy</source>
|
||||||
<translation>由于限制策略,无法在 Root 模式下运行用户脚本!</translation>
|
<translation>由于限制策略,无法在 Root 模式下运行用户脚本!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="283"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="279"/>
|
||||||
<source>ScriptRunning</source>
|
<source>ScriptRunning</source>
|
||||||
<translation>脚本运行中</translation>
|
<translation>脚本运行中</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="284"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="280"/>
|
||||||
<source>ScriptRunningRequestLastStop?</source>
|
<source>ScriptRunningRequestLastStop?</source>
|
||||||
<translation>脚本仍在运行中,是否终止上一个脚本再执行?</translation>
|
<translation>脚本仍在运行中,是否终止上一个脚本再执行?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4562,42 +4595,67 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ScriptSettingDialog</name>
|
<name>ScriptSettingDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="128"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="176"/>
|
||||||
|
<source>SelectShow</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="181"/>
|
||||||
|
<source>SelectHide</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="189"/>
|
||||||
|
<source>SelectAll</source>
|
||||||
|
<translation type="unfinished">全选</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="190"/>
|
||||||
|
<source>SelectClear</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="194"/>
|
||||||
|
<source>DiscardChanges</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="200"/>
|
||||||
<source>Script</source>
|
<source>Script</source>
|
||||||
<translation>脚本</translation>
|
<translation>脚本</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="155"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="100"/>
|
||||||
<source>RawName:</source>
|
<source>RawName:</source>
|
||||||
<translation>源名称:</translation>
|
<translation>源名称:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="156"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="101"/>
|
||||||
<source>Name:</source>
|
<source>Name:</source>
|
||||||
<translation>名称:</translation>
|
<translation>名称:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="157"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="102"/>
|
||||||
<source>Author:</source>
|
<source>Author:</source>
|
||||||
<translation>作者:</translation>
|
<translation>作者:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="158"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="103"/>
|
||||||
<source>License:</source>
|
<source>License:</source>
|
||||||
<translation>协议:</translation>
|
<translation>协议:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="159"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="104"/>
|
||||||
<source>ContextMenu:</source>
|
<source>ContextMenu:</source>
|
||||||
<translation>是否为右键菜单:</translation>
|
<translation>是否为右键菜单:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="162"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="108"/>
|
||||||
<source>HomePage:</source>
|
<source>HomePage:</source>
|
||||||
<translation>主页:</translation>
|
<translation>主页:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="163"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="109"/>
|
||||||
<source>Comment:</source>
|
<source>Comment:</source>
|
||||||
<translation>说明:</translation>
|
<translation>说明:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4627,9 +4685,9 @@
|
||||||
<translation>仓库</translation>
|
<translation>仓库</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.ui" line="135"/>
|
<location filename="../../src/settings/scriptsettingdialog.ui" line="138"/>
|
||||||
<source>Refresh</source>
|
<source>Save</source>
|
||||||
<translation>刷新</translation>
|
<translation type="unfinished">保存</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -5234,43 +5292,45 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.ui" line="71"/>
|
<location filename="../../src/dialog/settingdialog.ui" line="71"/>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="73"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="81"/>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="89"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="97"/>
|
||||||
<source>Restore</source>
|
<source>Restore</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="40"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="42"/>
|
||||||
|
<location filename="../../src/dialog/settingdialog.cpp" line="167"/>
|
||||||
<source>UnsavedChanges</source>
|
<source>UnsavedChanges</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="41"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="43"/>
|
||||||
|
<location filename="../../src/dialog/settingdialog.cpp" line="168"/>
|
||||||
<source>SaveChangesDiscardLeave?</source>
|
<source>SaveChangesDiscardLeave?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="71"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="79"/>
|
||||||
<source>Restore current</source>
|
<source>Restore current</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="74"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="82"/>
|
||||||
<source>RestoreCurPageSets?</source>
|
<source>RestoreCurPageSets?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="86"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="94"/>
|
||||||
<source>Restore all</source>
|
<source>Restore all</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="89"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="97"/>
|
||||||
<source>RestoreAllSets?</source>
|
<source>RestoreAllSets?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="159"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="188"/>
|
||||||
<source>TakeEffectRestart</source>
|
<source>TakeEffectRestart</source>
|
||||||
<translation>该选项重启软件生效</translation>
|
<translation>该选项重启软件生效</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -5278,7 +5338,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>SettingManager</name>
|
<name>SettingManager</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/settingmanager.cpp" line="214"/>
|
<location filename="../../src/class/settingmanager.cpp" line="261"/>
|
||||||
<source>ConfigUnableSave</source>
|
<source>ConfigUnableSave</source>
|
||||||
<translation>程序将无法保存配置,请检查配置文件权限。</translation>
|
<translation>程序将无法保存配置,请检查配置文件权限。</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -2298,6 +2298,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="81"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="81"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="305"/>
|
||||||
<source>PluginInfo</source>
|
<source>PluginInfo</source>
|
||||||
<translation>插件資訊</translation>
|
<translation>插件資訊</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2307,97 +2308,129 @@
|
||||||
<translation>插件:</translation>
|
<translation>插件:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="136"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="125"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="175"/>
|
||||||
|
<source>Save</source>
|
||||||
|
<translation type="unfinished">保存</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="146"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="313"/>
|
||||||
<source>DevExtInfo</source>
|
<source>DevExtInfo</source>
|
||||||
<translation>設備插件資訊</translation>
|
<translation>設備插件資訊</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="152"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="162"/>
|
||||||
<source>DevExt:</source>
|
<source>DevExt:</source>
|
||||||
<translation>設備插件:</translation>
|
<translation>設備插件:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.ui" line="176"/>
|
<location filename="../../src/settings/pluginsettingdialog.ui" line="196"/>
|
||||||
<source>APIMonitor</source>
|
<source>APIMonitor</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="108"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="343"/>
|
||||||
<source>Plugin</source>
|
<source>Plugin</source>
|
||||||
<translation>插件</translation>
|
<translation>插件</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="71"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="158"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="128"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="215"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="153"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="272"/>
|
||||||
<source>ID</source>
|
<source>ID</source>
|
||||||
<translation>ID</translation>
|
<translation>ID</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="129"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="216"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="154"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="273"/>
|
||||||
<source>Name</source>
|
<source>Name</source>
|
||||||
<translation>名稱</translation>
|
<translation>名稱</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="72"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="159"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="130"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="218"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="155"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="275"/>
|
||||||
<source>License</source>
|
<source>License</source>
|
||||||
<translation>協議</translation>
|
<translation>協議</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="73"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="160"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="131"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="219"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="156"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="276"/>
|
||||||
<source>Author</source>
|
<source>Author</source>
|
||||||
<translation>作者</translation>
|
<translation>作者</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="74"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="161"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="132"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="220"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="157"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="277"/>
|
||||||
<source>Vendor</source>
|
<source>Vendor</source>
|
||||||
<translation>廠家</translation>
|
<translation>廠家</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="76"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="163"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="134"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="222"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="159"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="279"/>
|
||||||
<source>Version</source>
|
<source>Version</source>
|
||||||
<translation>版本</translation>
|
<translation>版本</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="86"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="173"/>
|
||||||
<source>NoMonitorPlugin</source>
|
<source>NoMonitorPlugin</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="80"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="391"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="136"/>
|
<source>SelectAll</source>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="161"/>
|
<translation type="unfinished">全選</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="372"/>
|
||||||
|
<source>SelectEnable</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="380"/>
|
||||||
|
<source>SelectDisable</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="392"/>
|
||||||
|
<source>SelectClear</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="396"/>
|
||||||
|
<source>DiscardChanges</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="167"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="223"/>
|
||||||
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="280"/>
|
||||||
<source>Comment</source>
|
<source>Comment</source>
|
||||||
<translation>說明</translation>
|
<translation>說明</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="78"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="165"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="138"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="235"/>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="172"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="282"/>
|
||||||
<source>URL</source>
|
<source>URL</source>
|
||||||
<translation>網址</translation>
|
<translation>網址</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="163"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="225"/>
|
||||||
<source>pluginDependencies:</source>
|
<source>pluginDependencies:</source>
|
||||||
<translation>插件依賴</translation>
|
<translation>插件依賴</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="166"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="228"/>
|
||||||
<source>PUID:</source>
|
<source>PUID:</source>
|
||||||
<translation>插件唯一標誌符:</translation>
|
<translation>插件唯一標誌符:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/pluginsettingdialog.cpp" line="167"/>
|
<location filename="../../src/settings/pluginsettingdialog.cpp" line="230"/>
|
||||||
<source>Version:</source>
|
<source>Version:</source>
|
||||||
<translation>版本:</translation>
|
<translation>版本:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2405,127 +2438,127 @@
|
||||||
<context>
|
<context>
|
||||||
<name>PluginSystem</name>
|
<name>PluginSystem</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3221"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3231"/>
|
||||||
<source>LoadingPlugin</source>
|
<source>LoadingPlugin</source>
|
||||||
<translation>加載插件中:</translation>
|
<translation>加載插件中:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3239"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3249"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3816"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3844"/>
|
||||||
<source>InvalidPluginBrokenInfo</source>
|
<source>InvalidPluginBrokenInfo</source>
|
||||||
<translation>加載插件失敗:損壞的插件數據</translation>
|
<translation>加載插件失敗:損壞的插件數據</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3261"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3277"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4318"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4355"/>
|
||||||
<source>PluginBlockByManager</source>
|
<source>PluginBlockByManager</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3655"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3683"/>
|
||||||
<source>AppClosingCanceled:</source>
|
<source>AppClosingCanceled:</source>
|
||||||
<translation>程式關閉被取消:</translation>
|
<translation>程式關閉被取消:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3731"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3759"/>
|
||||||
<source>- PluginID:</source>
|
<source>- PluginID:</source>
|
||||||
<translation>- 插件 ID:</translation>
|
<translation>- 插件 ID:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3753"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3781"/>
|
||||||
<source>FoundDrvPluginCount</source>
|
<source>FoundDrvPluginCount</source>
|
||||||
<translation>總計發現設備拓展插件數目:</translation>
|
<translation>總計發現設備拓展插件數目:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3794"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3822"/>
|
||||||
<source>PluginManagerNeedSingleton</source>
|
<source>PluginManagerNeedSingleton</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3252"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3262"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3810"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3838"/>
|
||||||
<source>ErrLoadPluginSDKVersion</source>
|
<source>ErrLoadPluginSDKVersion</source>
|
||||||
<translation>插件加載失敗:非法插件 SDK 版本!</translation>
|
<translation>插件加載失敗:非法插件 SDK 版本!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3962"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3990"/>
|
||||||
<source>ErrLoadPluginNoName</source>
|
<source>ErrLoadPluginNoName</source>
|
||||||
<translation>插件加載失敗:非法插件名稱!</translation>
|
<translation>插件加載失敗:非法插件名稱!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3840"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3868"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3983"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4011"/>
|
||||||
<source>ErrLoadInitPlugin</source>
|
<source>ErrLoadInitPlugin</source>
|
||||||
<translation>插件加載失敗:初始化插件失敗!</translation>
|
<translation>插件加載失敗:初始化插件失敗!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3992"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4020"/>
|
||||||
<source>PluginName :</source>
|
<source>PluginName :</source>
|
||||||
<translation>插件名:</translation>
|
<translation>插件名:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3993"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4021"/>
|
||||||
<source>PluginAuthor :</source>
|
<source>PluginAuthor :</source>
|
||||||
<translation>插件作者:</translation>
|
<translation>插件作者:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3994"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4022"/>
|
||||||
<source>PluginWidgetRegister</source>
|
<source>PluginWidgetRegister</source>
|
||||||
<translation>註冊插件對象中……</translation>
|
<translation>註冊插件對象中……</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4034"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4062"/>
|
||||||
<source>ExtPluginAuthor :</source>
|
<source>ExtPluginAuthor :</source>
|
||||||
<translation>設備拓展插件作者:</translation>
|
<translation>設備拓展插件作者:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4035"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4063"/>
|
||||||
<source>ExtPluginWidgetRegister</source>
|
<source>ExtPluginWidgetRegister</source>
|
||||||
<translation>設備拓展註冊插件對象中……</translation>
|
<translation>設備拓展註冊插件對象中……</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4051"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4079"/>
|
||||||
<source>ErrLoadInitExtPlugin</source>
|
<source>ErrLoadInitExtPlugin</source>
|
||||||
<translation>設備拓展插件加載失敗:初始化插件失敗!</translation>
|
<translation>設備拓展插件加載失敗:初始化插件失敗!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4074"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4102"/>
|
||||||
<source>ChooseFile</source>
|
<source>ChooseFile</source>
|
||||||
<translation>選擇檔</translation>
|
<translation>選擇檔</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4081"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4109"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4086"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4114"/>
|
||||||
<source>Error</source>
|
<source>Error</source>
|
||||||
<translation>錯誤</translation>
|
<translation>錯誤</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4082"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4110"/>
|
||||||
<source>FileNotExist</source>
|
<source>FileNotExist</source>
|
||||||
<translation>檔不存在!</translation>
|
<translation>檔不存在!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4087"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4115"/>
|
||||||
<source>FilePermission</source>
|
<source>FilePermission</source>
|
||||||
<translation>因檔許可權無法繼續!</translation>
|
<translation>因檔許可權無法繼續!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4117"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4145"/>
|
||||||
<source>EmptyNameDockWidget:</source>
|
<source>EmptyNameDockWidget:</source>
|
||||||
<translation>空的貼邊組件名:</translation>
|
<translation>空的貼邊組件名:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4127"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4155"/>
|
||||||
<source>InvalidNameDockWidget:</source>
|
<source>InvalidNameDockWidget:</source>
|
||||||
<translation>無效貼邊組件名:</translation>
|
<translation>無效貼邊組件名:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4135"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4163"/>
|
||||||
<source>InvalidNullDockWidget:</source>
|
<source>InvalidNullDockWidget:</source>
|
||||||
<translation>無效空貼邊組件:</translation>
|
<translation>無效空貼邊組件:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="4248"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="4276"/>
|
||||||
<source>Not allowed operation in non-UI thread</source>
|
<source>Not allowed operation in non-UI thread</source>
|
||||||
<translation>該操作在非 UI 線程非法</translation>
|
<translation>該操作在非 UI 線程非法</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2535,48 +2568,48 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3779"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3807"/>
|
||||||
<source>UnsafePluginDir</source>
|
<source>UnsafePluginDir</source>
|
||||||
<translation>不安全的插件目錄,請將插件目錄設置為僅管理員帳戶可寫</translation>
|
<translation>不安全的插件目錄,請將插件目錄設置為僅管理員帳戶可寫</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3246"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3256"/>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3813"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3841"/>
|
||||||
<source>InvalidPluginID</source>
|
<source>InvalidPluginID</source>
|
||||||
<translation>加載插件失敗:非法插件識別字</translation>
|
<translation>加載插件失敗:非法插件識別字</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3249"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3259"/>
|
||||||
<source>InvalidDupPlugin</source>
|
<source>InvalidDupPlugin</source>
|
||||||
<translation>加載插件失敗:重複的插件識別字</translation>
|
<translation>加載插件失敗:重複的插件識別字</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3696"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3724"/>
|
||||||
<source>FoundPluginCount</source>
|
<source>FoundPluginCount</source>
|
||||||
<translation>總計發現插件數目:</translation>
|
<translation>總計發現插件數目:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3727"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3755"/>
|
||||||
<source>PluginLoadingFailedSummary</source>
|
<source>PluginLoadingFailedSummary</source>
|
||||||
<translation>有依賴插件加載失敗總結</translation>
|
<translation>有依賴插件加載失敗總結</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3732"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3760"/>
|
||||||
<source>- Dependencies:</source>
|
<source>- Dependencies:</source>
|
||||||
<translation>- 依賴:</translation>
|
<translation>- 依賴:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3734"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3762"/>
|
||||||
<source>PUID:</source>
|
<source>PUID:</source>
|
||||||
<translation>插件唯一標誌符:</translation>
|
<translation>插件唯一標誌符:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3735"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3763"/>
|
||||||
<source>Version:</source>
|
<source>Version:</source>
|
||||||
<translation>版本:</translation>
|
<translation>版本:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/pluginsystem.cpp" line="3742"/>
|
<location filename="../../src/class/pluginsystem.cpp" line="3770"/>
|
||||||
<source>PluginLoadingFinished</source>
|
<source>PluginLoadingFinished</source>
|
||||||
<translation>加載插件完畢!</translation>
|
<translation>加載插件完畢!</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4539,22 +4572,22 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ScriptManager</name>
|
<name>ScriptManager</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="91"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="92"/>
|
||||||
<source>RunScript</source>
|
<source>RunScript</source>
|
||||||
<translation>執行腳本</translation>
|
<translation>執行腳本</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="92"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="93"/>
|
||||||
<source>CanNotRunUsrScriptForPolicy</source>
|
<source>CanNotRunUsrScriptForPolicy</source>
|
||||||
<translation>由於限制策略,無法在 Root 模式下運行用戶腳本!</translation>
|
<translation>由於限制策略,無法在 Root 模式下運行用戶腳本!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="283"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="279"/>
|
||||||
<source>ScriptRunning</source>
|
<source>ScriptRunning</source>
|
||||||
<translation>腳本運行中</translation>
|
<translation>腳本運行中</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/scriptmanager.cpp" line="284"/>
|
<location filename="../../src/class/scriptmanager.cpp" line="280"/>
|
||||||
<source>ScriptRunningRequestLastStop?</source>
|
<source>ScriptRunningRequestLastStop?</source>
|
||||||
<translation>腳本仍在運行中,是否終止上一個腳本再執行?</translation>
|
<translation>腳本仍在運行中,是否終止上一個腳本再執行?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4562,42 +4595,67 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ScriptSettingDialog</name>
|
<name>ScriptSettingDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="128"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="176"/>
|
||||||
|
<source>SelectShow</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="181"/>
|
||||||
|
<source>SelectHide</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="189"/>
|
||||||
|
<source>SelectAll</source>
|
||||||
|
<translation type="unfinished">全選</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="190"/>
|
||||||
|
<source>SelectClear</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="194"/>
|
||||||
|
<source>DiscardChanges</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="200"/>
|
||||||
<source>Script</source>
|
<source>Script</source>
|
||||||
<translation>腳本</translation>
|
<translation>腳本</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="155"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="100"/>
|
||||||
<source>RawName:</source>
|
<source>RawName:</source>
|
||||||
<translation>源名稱:</translation>
|
<translation>源名稱:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="156"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="101"/>
|
||||||
<source>Name:</source>
|
<source>Name:</source>
|
||||||
<translation>名稱:</translation>
|
<translation>名稱:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="157"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="102"/>
|
||||||
<source>Author:</source>
|
<source>Author:</source>
|
||||||
<translation>作者:</translation>
|
<translation>作者:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="158"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="103"/>
|
||||||
<source>License:</source>
|
<source>License:</source>
|
||||||
<translation>協議:</translation>
|
<translation>協議:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="159"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="104"/>
|
||||||
<source>ContextMenu:</source>
|
<source>ContextMenu:</source>
|
||||||
<translation>是否為右鍵菜單:</translation>
|
<translation>是否為右鍵菜單:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="162"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="108"/>
|
||||||
<source>HomePage:</source>
|
<source>HomePage:</source>
|
||||||
<translation>主頁:</translation>
|
<translation>主頁:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.cpp" line="163"/>
|
<location filename="../../src/settings/scriptsettingdialog.cpp" line="109"/>
|
||||||
<source>Comment:</source>
|
<source>Comment:</source>
|
||||||
<translation>說明:</translation>
|
<translation>說明:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4627,9 +4685,9 @@
|
||||||
<translation>倉庫</translation>
|
<translation>倉庫</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/settings/scriptsettingdialog.ui" line="135"/>
|
<location filename="../../src/settings/scriptsettingdialog.ui" line="138"/>
|
||||||
<source>Refresh</source>
|
<source>Save</source>
|
||||||
<translation>刷新</translation>
|
<translation type="unfinished">保存</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -5234,43 +5292,45 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.ui" line="71"/>
|
<location filename="../../src/dialog/settingdialog.ui" line="71"/>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="73"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="81"/>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="89"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="97"/>
|
||||||
<source>Restore</source>
|
<source>Restore</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="40"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="42"/>
|
||||||
|
<location filename="../../src/dialog/settingdialog.cpp" line="167"/>
|
||||||
<source>UnsavedChanges</source>
|
<source>UnsavedChanges</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="41"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="43"/>
|
||||||
|
<location filename="../../src/dialog/settingdialog.cpp" line="168"/>
|
||||||
<source>SaveChangesDiscardLeave?</source>
|
<source>SaveChangesDiscardLeave?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="71"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="79"/>
|
||||||
<source>Restore current</source>
|
<source>Restore current</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="74"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="82"/>
|
||||||
<source>RestoreCurPageSets?</source>
|
<source>RestoreCurPageSets?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="86"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="94"/>
|
||||||
<source>Restore all</source>
|
<source>Restore all</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="89"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="97"/>
|
||||||
<source>RestoreAllSets?</source>
|
<source>RestoreAllSets?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/dialog/settingdialog.cpp" line="159"/>
|
<location filename="../../src/dialog/settingdialog.cpp" line="188"/>
|
||||||
<source>TakeEffectRestart</source>
|
<source>TakeEffectRestart</source>
|
||||||
<translation>該選項重啟軟體生效</translation>
|
<translation>該選項重啟軟體生效</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -5278,7 +5338,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>SettingManager</name>
|
<name>SettingManager</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../src/class/settingmanager.cpp" line="214"/>
|
<location filename="../../src/class/settingmanager.cpp" line="261"/>
|
||||||
<source>ConfigUnableSave</source>
|
<source>ConfigUnableSave</source>
|
||||||
<translation>程式將無法保存配置,請檢查配置檔許可權。</translation>
|
<translation>程式將無法保存配置,請檢查配置檔許可權。</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
<file>images/defines.png</file>
|
<file>images/defines.png</file>
|
||||||
<file>images/del.png</file>
|
<file>images/del.png</file>
|
||||||
<file>images/devext.png</file>
|
<file>images/devext.png</file>
|
||||||
|
<file>images/devextdis.png</file>
|
||||||
<file>images/edit.png</file>
|
<file>images/edit.png</file>
|
||||||
<file>images/encoding.png</file>
|
<file>images/encoding.png</file>
|
||||||
<file>images/export.png</file>
|
<file>images/export.png</file>
|
||||||
|
@ -70,6 +71,7 @@
|
||||||
<file>images/paste.png</file>
|
<file>images/paste.png</file>
|
||||||
<file>images/pastehex.png</file>
|
<file>images/pastehex.png</file>
|
||||||
<file>images/plugin.png</file>
|
<file>images/plugin.png</file>
|
||||||
|
<file>images/plugindis.png</file>
|
||||||
<file>images/pro.png</file>
|
<file>images/pro.png</file>
|
||||||
<file>images/qt.png</file>
|
<file>images/qt.png</file>
|
||||||
<file>images/qtloginspect.png</file>
|
<file>images/qtloginspect.png</file>
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
#include "changedstringlist.h"
|
||||||
|
|
||||||
|
bool ChangedStringList::containChanges() const { return !mods.isEmpty(); }
|
||||||
|
|
||||||
|
bool ChangedStringList::containChanges(const QString &item) const {
|
||||||
|
return contents.contains(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChangedStringList::clear() {
|
||||||
|
contents.clear();
|
||||||
|
mods.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChangedStringList::pushAddItem(const QString &item) {
|
||||||
|
if (mods.contains(item)) {
|
||||||
|
auto v = mods.value(item);
|
||||||
|
if (v) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
mods.remove(item);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mods.insert(item, true);
|
||||||
|
}
|
||||||
|
contents.append(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChangedStringList::pushRemoveItem(const QString &item) {
|
||||||
|
if (mods.contains(item)) {
|
||||||
|
auto v = mods.value(item);
|
||||||
|
if (v) {
|
||||||
|
mods.remove(item);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mods.insert(item, false);
|
||||||
|
}
|
||||||
|
contents.removeOne(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList ChangedStringList::getContents() const { return contents; }
|
||||||
|
|
||||||
|
void ChangedStringList::setContents(const QStringList &newContents) {
|
||||||
|
contents = newContents;
|
||||||
|
mods.clear();
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef CHANGEDSTRINGLIST_H
|
||||||
|
#define CHANGEDSTRINGLIST_H
|
||||||
|
|
||||||
|
#include <QHash>
|
||||||
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
class ChangedStringList {
|
||||||
|
public:
|
||||||
|
bool containChanges() const;
|
||||||
|
bool containChanges(const QString &item) const;
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
void pushAddItem(const QString &item);
|
||||||
|
void pushRemoveItem(const QString &item);
|
||||||
|
|
||||||
|
QStringList getContents() const;
|
||||||
|
void setContents(const QStringList &newContents);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QStringList contents;
|
||||||
|
QHash<QString, bool> mods;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CHANGEDSTRINGLIST_H
|
|
@ -2631,6 +2631,16 @@ bool PluginSystem::checkErrAllAllowAndReport(const QObject *sender,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QMap<PluginSystem::BlockReason, QList<PluginInfo>>
|
||||||
|
PluginSystem::blockedDevPlugins() const {
|
||||||
|
return _blkdevs;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<PluginSystem::BlockReason, QList<PluginInfo>>
|
||||||
|
PluginSystem::blockedPlugins() const {
|
||||||
|
return _blkplgs;
|
||||||
|
}
|
||||||
|
|
||||||
void PluginSystem::doneRegisterScriptObj() {
|
void PluginSystem::doneRegisterScriptObj() {
|
||||||
Q_ASSERT(_angelplg);
|
Q_ASSERT(_angelplg);
|
||||||
// ok, then, we will register all script objects
|
// ok, then, we will register all script objects
|
||||||
|
@ -3254,15 +3264,33 @@ std::optional<PluginInfo> PluginSystem::loadPlugin(const QFileInfo &fileinfo,
|
||||||
}
|
}
|
||||||
|
|
||||||
auto m = meta.value();
|
auto m = meta.value();
|
||||||
|
|
||||||
if (_manager) {
|
if (_manager) {
|
||||||
if (!_manager->onLoadingPlugin(fileName, m)) {
|
if (!_manager->onLoadingPlugin(fileName, m)) {
|
||||||
|
if constexpr (std::is_same_v<T, IWingPlugin>) {
|
||||||
|
_blkplgs[BlockReason::BlockedByManager].append(m);
|
||||||
|
} else if constexpr (std::is_same_v<T, IWingDevice>) {
|
||||||
|
_blkdevs[BlockReason::BlockedByManager].append(m);
|
||||||
|
}
|
||||||
Logger::critical(QStringLiteral("{ ") + m.id +
|
Logger::critical(QStringLiteral("{ ") + m.id +
|
||||||
QStringLiteral("} ") +
|
QStringLiteral(" } ") +
|
||||||
tr("PluginBlockByManager"));
|
tr("PluginBlockByManager"));
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if constexpr (std::is_same_v<T, IWingPlugin>) {
|
||||||
|
if (!_enabledExtIDs.contains(m.id)) {
|
||||||
|
_blkplgs[BlockReason::Disabled].append(m);
|
||||||
|
return std::nullopt;
|
||||||
|
}
|
||||||
|
} else if constexpr (std::is_same_v<T, IWingDevice>) {
|
||||||
|
if (!_enabledDevIDs.contains(m.id)) {
|
||||||
|
_blkdevs[BlockReason::Disabled].append(m);
|
||||||
|
return std::nullopt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto p = qobject_cast<T *>(loader.instance());
|
auto p = qobject_cast<T *>(loader.instance());
|
||||||
if (Q_UNLIKELY(p == nullptr)) {
|
if (Q_UNLIKELY(p == nullptr)) {
|
||||||
Logger::critical(loader.errorString());
|
Logger::critical(loader.errorString());
|
||||||
|
@ -4270,6 +4298,9 @@ void PluginSystem::loadAllPlugin() {
|
||||||
try2LoadManagerPlugin();
|
try2LoadManagerPlugin();
|
||||||
|
|
||||||
auto &set = SettingManager::instance();
|
auto &set = SettingManager::instance();
|
||||||
|
_enabledExtIDs = set.enabledExtPlugins();
|
||||||
|
_enabledDevIDs = set.enabledDevPlugins();
|
||||||
|
|
||||||
// manager plugin can not block WingAngelAPI, only settings
|
// manager plugin can not block WingAngelAPI, only settings
|
||||||
if (set.scriptEnabled()) {
|
if (set.scriptEnabled()) {
|
||||||
_angelplg = new WingAngelAPI;
|
_angelplg = new WingAngelAPI;
|
||||||
|
@ -4307,15 +4338,21 @@ void PluginSystem::loadAllPlugin() {
|
||||||
// internal plugin has no filename
|
// internal plugin has no filename
|
||||||
if (_manager == nullptr ||
|
if (_manager == nullptr ||
|
||||||
(_manager && _manager->onLoadingPlugin({}, meta))) {
|
(_manager && _manager->onLoadingPlugin({}, meta))) {
|
||||||
auto cstructplg = new WingCStruct;
|
if (_enabledExtIDs.contains(meta.id)) {
|
||||||
QDir setd(Utilities::getAppDataPath());
|
auto cstructplg = new WingCStruct;
|
||||||
auto plgset = QStringLiteral("plgset");
|
QDir setd(Utilities::getAppDataPath());
|
||||||
setd.mkdir(plgset);
|
auto plgset = QStringLiteral("plgset");
|
||||||
retranslateMetadata(cstructplg, meta);
|
setd.mkdir(plgset);
|
||||||
loadPlugin(cstructplg, meta, setd);
|
retranslateMetadata(cstructplg, meta);
|
||||||
|
loadPlugin(cstructplg, meta, setd);
|
||||||
|
} else {
|
||||||
|
_blkplgs[BlockReason::Disabled].append(meta);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
_blkplgs[BlockReason::BlockedByManager].append(meta);
|
||||||
Logger::critical(QStringLiteral("{ ") + meta.id +
|
Logger::critical(QStringLiteral("{ ") + meta.id +
|
||||||
QStringLiteral("} ") + tr("PluginBlockByManager"));
|
QStringLiteral(" } ") +
|
||||||
|
tr("PluginBlockByManager"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,8 @@ public:
|
||||||
DupID,
|
DupID,
|
||||||
LackDependencies
|
LackDependencies
|
||||||
};
|
};
|
||||||
Q_ENUM(PluginStatus)
|
|
||||||
|
enum class BlockReason { Disabled, BlockedByManager };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct PluginFileContext {
|
struct PluginFileContext {
|
||||||
|
@ -260,6 +261,10 @@ public:
|
||||||
|
|
||||||
const std::optional<PluginInfo> &monitorManagerInfo() const;
|
const std::optional<PluginInfo> &monitorManagerInfo() const;
|
||||||
|
|
||||||
|
QMap<BlockReason, QList<PluginInfo>> blockedPlugins() const;
|
||||||
|
|
||||||
|
QMap<BlockReason, QList<PluginInfo>> blockedDevPlugins() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T readBasicTypeContent(IWingPlugin *plg, qsizetype offset) {
|
T readBasicTypeContent(IWingPlugin *plg, qsizetype offset) {
|
||||||
|
@ -738,6 +743,11 @@ private:
|
||||||
|
|
||||||
QList<IWingDevice *> _loadeddevs;
|
QList<IWingDevice *> _loadeddevs;
|
||||||
|
|
||||||
|
QStringList _enabledExtIDs;
|
||||||
|
QStringList _enabledDevIDs;
|
||||||
|
QMap<BlockReason, QList<PluginInfo>> _blkplgs;
|
||||||
|
QMap<BlockReason, QList<PluginInfo>> _blkdevs;
|
||||||
|
|
||||||
QMap<IWingPlugin::RegisteredEvent, QList<IWingPlugin *>> _evplgs;
|
QMap<IWingPlugin::RegisteredEvent, QList<IWingPlugin *>> _evplgs;
|
||||||
|
|
||||||
QHash<IWingPlugin *, PluginFile> m_plgviewMap;
|
QHash<IWingPlugin *, PluginFile> m_plgviewMap;
|
||||||
|
|
|
@ -48,7 +48,8 @@ ScriptManager::ScriptManager() {
|
||||||
m_usrScriptsPath = Utilities::getAppDataPath() + QDir::separator() +
|
m_usrScriptsPath = Utilities::getAppDataPath() + QDir::separator() +
|
||||||
QStringLiteral("scripts");
|
QStringLiteral("scripts");
|
||||||
|
|
||||||
refresh();
|
refreshSysScriptsDbCats();
|
||||||
|
refreshUsrScriptsDbCats();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptManager::~ScriptManager() {}
|
ScriptManager::~ScriptManager() {}
|
||||||
|
@ -120,11 +121,6 @@ QStringList ScriptManager::getSysScriptFileNames(const QString &cat) const {
|
||||||
return getScriptFileNames(scriptDir);
|
return getScriptFileNames(scriptDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptManager::refresh() {
|
|
||||||
refreshSysScriptsDbCats();
|
|
||||||
refreshUsrScriptsDbCats();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScriptManager::refreshUsrScriptsDbCats() {
|
void ScriptManager::refreshUsrScriptsDbCats() {
|
||||||
m_usrScriptsDbCats.clear();
|
m_usrScriptsDbCats.clear();
|
||||||
|
|
||||||
|
|
|
@ -55,16 +55,16 @@ public:
|
||||||
|
|
||||||
QStringList getSysScriptFileNames(const QString &cat) const;
|
QStringList getSysScriptFileNames(const QString &cat) const;
|
||||||
|
|
||||||
void refresh();
|
|
||||||
void refreshUsrScriptsDbCats();
|
|
||||||
void refreshSysScriptsDbCats();
|
|
||||||
|
|
||||||
ScriptDirMeta usrDirMeta(const QString &cat) const;
|
ScriptDirMeta usrDirMeta(const QString &cat) const;
|
||||||
ScriptDirMeta sysDirMeta(const QString &cat) const;
|
ScriptDirMeta sysDirMeta(const QString &cat) const;
|
||||||
|
|
||||||
static QList<QMenu *> buildUpScriptRunnerContext(RibbonButtonGroup *group,
|
static QList<QMenu *> buildUpScriptRunnerContext(RibbonButtonGroup *group,
|
||||||
QWidget *parent);
|
QWidget *parent);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void refreshUsrScriptsDbCats();
|
||||||
|
void refreshSysScriptsDbCats();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QToolButton *addPannelAction(RibbonButtonGroup *pannel,
|
static QToolButton *addPannelAction(RibbonButtonGroup *pannel,
|
||||||
const QString &iconName,
|
const QString &iconName,
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#include "class/skinmanager.h"
|
#include "class/skinmanager.h"
|
||||||
#include "settings/settings.h"
|
#include "settings/settings.h"
|
||||||
|
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QMetaEnum>
|
#include <QMetaEnum>
|
||||||
|
@ -37,6 +39,8 @@ Q_GLOBAL_STATIC_WITH_ARGS(QString, APP_LANGUAGE, ("app.lang"))
|
||||||
Q_GLOBAL_STATIC_WITH_ARGS(QString, PLUGIN_ENABLE, ("plugin.enableplugin"))
|
Q_GLOBAL_STATIC_WITH_ARGS(QString, PLUGIN_ENABLE, ("plugin.enableplugin"))
|
||||||
Q_GLOBAL_STATIC_WITH_ARGS(QString, PLUGIN_ENABLE_ROOT,
|
Q_GLOBAL_STATIC_WITH_ARGS(QString, PLUGIN_ENABLE_ROOT,
|
||||||
("plugin.rootenableplugin"))
|
("plugin.rootenableplugin"))
|
||||||
|
Q_GLOBAL_STATIC_WITH_ARGS(QString, PLUGIN_ENABLEDPLUGINS_EXT, ("plugin.ext"))
|
||||||
|
Q_GLOBAL_STATIC_WITH_ARGS(QString, PLUGIN_ENABLEDPLUGINS_DEV, ("plugin.dev"))
|
||||||
|
|
||||||
Q_GLOBAL_STATIC_WITH_ARGS(QString, EDITOR_FONTSIZE, ("editor.fontsize"))
|
Q_GLOBAL_STATIC_WITH_ARGS(QString, EDITOR_FONTSIZE, ("editor.fontsize"))
|
||||||
Q_GLOBAL_STATIC_WITH_ARGS(QString, EDITOR_SHOW_ADDR, ("editor.showaddr"))
|
Q_GLOBAL_STATIC_WITH_ARGS(QString, EDITOR_SHOW_ADDR, ("editor.showaddr"))
|
||||||
|
@ -110,6 +114,21 @@ void SettingManager::load() {
|
||||||
|
|
||||||
READ_CONFIG_BOOL(m_enablePlugin, PLUGIN_ENABLE, true);
|
READ_CONFIG_BOOL(m_enablePlugin, PLUGIN_ENABLE, true);
|
||||||
READ_CONFIG_BOOL(m_enablePlgInRoot, PLUGIN_ENABLE_ROOT, false);
|
READ_CONFIG_BOOL(m_enablePlgInRoot, PLUGIN_ENABLE_ROOT, false);
|
||||||
|
|
||||||
|
{
|
||||||
|
auto data = READ_CONFIG(PLUGIN_ENABLEDPLUGINS_EXT, {});
|
||||||
|
if (data.isValid()) {
|
||||||
|
auto rawRules = data.toByteArray();
|
||||||
|
m_enabledExtPlugins = readPluginRule(rawRules);
|
||||||
|
}
|
||||||
|
|
||||||
|
data = READ_CONFIG(PLUGIN_ENABLEDPLUGINS_DEV, {});
|
||||||
|
if (data.isValid()) {
|
||||||
|
auto rawRules = data.toByteArray();
|
||||||
|
m_enabledDevPlugins = readPluginRule(rawRules);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
READ_CONFIG_INT_POSITIVE(m_editorfontSize, EDITOR_FONTSIZE,
|
READ_CONFIG_INT_POSITIVE(m_editorfontSize, EDITOR_FONTSIZE,
|
||||||
defaultFontSize);
|
defaultFontSize);
|
||||||
m_editorfontSize = qBound(5, m_editorfontSize, 25);
|
m_editorfontSize = qBound(5, m_editorfontSize, 25);
|
||||||
|
@ -187,6 +206,34 @@ QVariantList SettingManager::getVarList(
|
||||||
return varlist;
|
return varlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList SettingManager::enabledDevPlugins() const {
|
||||||
|
return m_enabledDevPlugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingManager::setEnabledDevPlugins(
|
||||||
|
const QStringList &newEnabledDevPlugins) {
|
||||||
|
if (m_enabledDevPlugins != newEnabledDevPlugins) {
|
||||||
|
HANDLE_CONFIG;
|
||||||
|
WRITE_CONFIG(PLUGIN_ENABLEDPLUGINS_DEV,
|
||||||
|
savePluginRule(newEnabledDevPlugins));
|
||||||
|
m_enabledDevPlugins = newEnabledDevPlugins;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList SettingManager::enabledExtPlugins() const {
|
||||||
|
return m_enabledExtPlugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingManager::setEnabledExtPlugins(
|
||||||
|
const QStringList &newEnabledPlugins) {
|
||||||
|
if (m_enabledExtPlugins != newEnabledPlugins) {
|
||||||
|
HANDLE_CONFIG;
|
||||||
|
WRITE_CONFIG(PLUGIN_ENABLEDPLUGINS_EXT,
|
||||||
|
savePluginRule(newEnabledPlugins));
|
||||||
|
m_enabledExtPlugins = newEnabledPlugins;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int SettingManager::scriptTimeout() const { return m_scriptTimeout; }
|
int SettingManager::scriptTimeout() const { return m_scriptTimeout; }
|
||||||
|
|
||||||
void SettingManager::setScriptTimeout(int newScriptTimeout) {
|
void SettingManager::setScriptTimeout(int newScriptTimeout) {
|
||||||
|
@ -216,6 +263,27 @@ void SettingManager::checkWriteableAndWarn() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList SettingManager::readPluginRule(const QByteArray &data) {
|
||||||
|
if (!data.isEmpty()) {
|
||||||
|
auto up = qUncompress(data);
|
||||||
|
if (!up.isEmpty()) {
|
||||||
|
auto rules = QString::fromUtf8(up);
|
||||||
|
auto rlist = rules.split('|', Qt::SkipEmptyParts);
|
||||||
|
rlist.removeIf([](const QString &str) {
|
||||||
|
return !Utilities::isValidIdentifier(str);
|
||||||
|
});
|
||||||
|
return rlist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray SettingManager::savePluginRule(const QStringList &rules) {
|
||||||
|
auto plgs = rules.join('|');
|
||||||
|
auto data = qCompress(plgs.toUtf8());
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
bool SettingManager::checkUpdate() const { return m_checkUpdate; }
|
bool SettingManager::checkUpdate() const { return m_checkUpdate; }
|
||||||
|
|
||||||
void SettingManager::setCheckUpdate(bool newCheckUpdate) {
|
void SettingManager::setCheckUpdate(bool newCheckUpdate) {
|
||||||
|
|
|
@ -81,6 +81,9 @@ public:
|
||||||
qsizetype logCount() const;
|
qsizetype logCount() const;
|
||||||
int scriptTimeout() const;
|
int scriptTimeout() const;
|
||||||
|
|
||||||
|
QStringList enabledExtPlugins() const;
|
||||||
|
QStringList enabledDevPlugins() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setThemeID(int newThemeID);
|
void setThemeID(int newThemeID);
|
||||||
void setDockLayout(const QByteArray &newDockLayout);
|
void setDockLayout(const QByteArray &newDockLayout);
|
||||||
|
@ -114,9 +117,15 @@ public slots:
|
||||||
void setLogCount(qsizetype newLogCount);
|
void setLogCount(qsizetype newLogCount);
|
||||||
void setScriptTimeout(int newScriptTimeout);
|
void setScriptTimeout(int newScriptTimeout);
|
||||||
|
|
||||||
|
void setEnabledExtPlugins(const QStringList &newEnabledPlugins);
|
||||||
|
void setEnabledDevPlugins(const QStringList &newEnabledDevPlugins);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void checkWriteableAndWarn();
|
void checkWriteableAndWarn();
|
||||||
|
|
||||||
|
QStringList readPluginRule(const QByteArray &data);
|
||||||
|
QByteArray savePluginRule(const QStringList &rules);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void sigEditorfontSizeChanged(int v);
|
void sigEditorfontSizeChanged(int v);
|
||||||
void sigDecodeStrlimitChanged(int v);
|
void sigDecodeStrlimitChanged(int v);
|
||||||
|
@ -162,6 +171,8 @@ private:
|
||||||
QStringList m_usrHideCats;
|
QStringList m_usrHideCats;
|
||||||
QStringList m_sysHideCats;
|
QStringList m_sysHideCats;
|
||||||
|
|
||||||
|
QStringList m_enabledExtPlugins;
|
||||||
|
QStringList m_enabledDevPlugins;
|
||||||
QString m_lastUsedPath;
|
QString m_lastUsedPath;
|
||||||
|
|
||||||
bool m_dontUseSplash = false;
|
bool m_dontUseSplash = false;
|
||||||
|
|
|
@ -23,8 +23,10 @@
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QCloseEvent>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
SettingDialog::SettingDialog(QWidget *parent)
|
SettingDialog::SettingDialog(QWidget *parent)
|
||||||
: QWidget(parent), ui(new Ui::SettingDialog) {
|
: QWidget(parent), ui(new Ui::SettingDialog) {
|
||||||
|
@ -34,7 +36,7 @@ SettingDialog::SettingDialog(QWidget *parent)
|
||||||
[this](QListWidgetItem *current, QListWidgetItem *previous) {
|
[this](QListWidgetItem *current, QListWidgetItem *previous) {
|
||||||
if (previous) {
|
if (previous) {
|
||||||
auto page = m_pages.at(
|
auto page = m_pages.at(
|
||||||
ui->listWidget->indexFromItem(current).row());
|
ui->listWidget->indexFromItem(previous).row());
|
||||||
if (page->containUnsavedChanges()) {
|
if (page->containUnsavedChanges()) {
|
||||||
auto ret = WingMessageBox::question(
|
auto ret = WingMessageBox::question(
|
||||||
this, tr("UnsavedChanges"),
|
this, tr("UnsavedChanges"),
|
||||||
|
@ -42,7 +44,12 @@ SettingDialog::SettingDialog(QWidget *parent)
|
||||||
if (ret == QMessageBox::Yes) {
|
if (ret == QMessageBox::Yes) {
|
||||||
page->discard();
|
page->discard();
|
||||||
} else {
|
} else {
|
||||||
ui->listWidget->setCurrentItem(previous);
|
QTimer::singleShot(100, this, [this, previous]() {
|
||||||
|
ui->listWidget->blockSignals(true);
|
||||||
|
ui->listWidget->setCurrentItem(previous);
|
||||||
|
ui->listWidget->blockSignals(false);
|
||||||
|
});
|
||||||
|
page->highlightUnsavedChange();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,6 +67,7 @@ SettingDialog::SettingDialog(QWidget *parent)
|
||||||
});
|
});
|
||||||
|
|
||||||
_dialog = new FramelessDialogBase(parent);
|
_dialog = new FramelessDialogBase(parent);
|
||||||
|
_dialog->installEventFilter(this);
|
||||||
_dialog->buildUpContent(this);
|
_dialog->buildUpContent(this);
|
||||||
_dialog->setWindowTitle(this->windowTitle());
|
_dialog->setWindowTitle(this->windowTitle());
|
||||||
|
|
||||||
|
@ -127,9 +135,11 @@ void SettingDialog::build() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingDialog::showConfig(int index) {
|
void SettingDialog::showConfig(int index) {
|
||||||
|
ui->listWidget->blockSignals(true);
|
||||||
if (index >= 0 && index < m_pages.size()) {
|
if (index >= 0 && index < m_pages.size()) {
|
||||||
ui->listWidget->setCurrentRow(index);
|
ui->listWidget->setCurrentRow(index);
|
||||||
}
|
}
|
||||||
|
ui->listWidget->blockSignals(false);
|
||||||
Utilities::moveToCenter(this);
|
Utilities::moveToCenter(this);
|
||||||
_dialog->exec();
|
_dialog->exec();
|
||||||
}
|
}
|
||||||
|
@ -149,6 +159,25 @@ void SettingDialog::showConfig(const QString &id) {
|
||||||
_dialog->exec();
|
_dialog->exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SettingDialog::eventFilter(QObject *, QEvent *event) {
|
||||||
|
if (event->type() == QEvent::Close) {
|
||||||
|
auto e = static_cast<QCloseEvent *>(event);
|
||||||
|
auto page = m_pages.at(ui->listWidget->currentRow());
|
||||||
|
if (page->containUnsavedChanges()) {
|
||||||
|
auto ret = WingMessageBox::question(this, tr("UnsavedChanges"),
|
||||||
|
tr("SaveChangesDiscardLeave?"));
|
||||||
|
if (ret == QMessageBox::Yes) {
|
||||||
|
page->discard();
|
||||||
|
} else {
|
||||||
|
page->highlightUnsavedChange();
|
||||||
|
event->ignore();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void SettingDialog::toastTakeEffectReboot() {
|
void SettingDialog::toastTakeEffectReboot() {
|
||||||
auto page = qobject_cast<WingHex::SettingPage *>(sender());
|
auto page = qobject_cast<WingHex::SettingPage *>(sender());
|
||||||
if (page) {
|
if (page) {
|
||||||
|
|
|
@ -39,6 +39,10 @@ public:
|
||||||
void showConfig(int index = -1);
|
void showConfig(int index = -1);
|
||||||
void showConfig(const QString &id);
|
void showConfig(const QString &id);
|
||||||
|
|
||||||
|
// QObject interface
|
||||||
|
public:
|
||||||
|
virtual bool eventFilter(QObject *watched, QEvent *event) override;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void toastTakeEffectReboot();
|
void toastTakeEffectReboot();
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,18 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pluginsettingdialog.h"
|
#include "pluginsettingdialog.h"
|
||||||
|
#include "class/eventfilter.h"
|
||||||
#include "class/pluginsystem.h"
|
#include "class/pluginsystem.h"
|
||||||
#include "class/settingmanager.h"
|
#include "class/settingmanager.h"
|
||||||
#include "ui_pluginsettingdialog.h"
|
#include "ui_pluginsettingdialog.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
|
enum PLUGIN_INFO {
|
||||||
|
PLUIGN_META = Qt::UserRole,
|
||||||
|
PLUIGN_NAME,
|
||||||
|
PLUIGN_COMMENT,
|
||||||
|
};
|
||||||
|
|
||||||
PluginSettingDialog::PluginSettingDialog(QWidget *parent)
|
PluginSettingDialog::PluginSettingDialog(QWidget *parent)
|
||||||
: WingHex::SettingPage(parent), ui(new Ui::PluginSettingDialog) {
|
: WingHex::SettingPage(parent), ui(new Ui::PluginSettingDialog) {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
@ -50,18 +57,98 @@ PluginSettingDialog::PluginSettingDialog(QWidget *parent)
|
||||||
|
|
||||||
for (auto &p : plgsys.plugins()) {
|
for (auto &p : plgsys.plugins()) {
|
||||||
auto pco = p->pluginIcon();
|
auto pco = p->pluginIcon();
|
||||||
ui->plglist->addItem(
|
auto lwi =
|
||||||
new QListWidgetItem(pco.isNull() ? pico : pco, p->pluginName()));
|
new QListWidgetItem(pco.isNull() ? pico : pco, p->pluginName());
|
||||||
|
auto info = plgsys.getPluginInfo(p);
|
||||||
|
auto flags = lwi->flags();
|
||||||
|
if (Q_LIKELY(p != plgsys.angelApi())) {
|
||||||
|
flags.setFlag(Qt::ItemIsUserCheckable);
|
||||||
|
lwi->setFlags(flags);
|
||||||
|
lwi->setCheckState(Qt::Checked);
|
||||||
|
} else {
|
||||||
|
flags.setFlag(Qt::ItemIsUserCheckable, false);
|
||||||
|
lwi->setFlags(flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
lwi->setData(PLUIGN_META, QVariant::fromValue(info));
|
||||||
|
lwi->setData(PLUIGN_NAME, p->pluginName());
|
||||||
|
lwi->setData(PLUIGN_COMMENT, p->pluginComment());
|
||||||
|
ui->plglist->addItem(lwi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pico = ICONRES("plugindis");
|
||||||
|
auto blkplgs = plgsys.blockedPlugins();
|
||||||
|
auto dblkplgs = blkplgs[PluginSystem::BlockReason::Disabled];
|
||||||
|
for (auto &meta : dblkplgs) {
|
||||||
|
auto lwi = new QListWidgetItem(pico, meta.id);
|
||||||
|
auto flags = lwi->flags();
|
||||||
|
flags.setFlag(Qt::ItemIsUserCheckable);
|
||||||
|
lwi->setFlags(flags);
|
||||||
|
lwi->setData(PLUIGN_META, QVariant::fromValue(meta));
|
||||||
|
lwi->setCheckState(Qt::Unchecked);
|
||||||
|
ui->plglist->addItem(lwi);
|
||||||
|
}
|
||||||
|
|
||||||
|
pico = getGrayIcon(NAMEICONRES("plugin"));
|
||||||
|
dblkplgs = blkplgs[PluginSystem::BlockReason::BlockedByManager];
|
||||||
|
for (auto &meta : dblkplgs) {
|
||||||
|
auto lwi = new QListWidgetItem(pico, meta.id);
|
||||||
|
auto flags = lwi->flags();
|
||||||
|
flags.setFlag(Qt::ItemIsUserCheckable, false);
|
||||||
|
lwi->setFlags(flags);
|
||||||
|
auto font = lwi->font();
|
||||||
|
font.setStrikeOut(true);
|
||||||
|
lwi->setFont(font);
|
||||||
|
lwi->setData(PLUIGN_META, QVariant::fromValue(meta));
|
||||||
|
ui->plglist->addItem(lwi);
|
||||||
|
}
|
||||||
|
|
||||||
ui->txtc->clear();
|
ui->txtc->clear();
|
||||||
|
|
||||||
pico = ICONRES("devext");
|
pico = ICONRES("devext");
|
||||||
ui->devlist->clear();
|
ui->devlist->clear();
|
||||||
for (auto &d : plgsys.devices()) {
|
for (auto &d : plgsys.devices()) {
|
||||||
auto pco = d->pluginIcon();
|
auto pco = d->pluginIcon();
|
||||||
ui->devlist->addItem(
|
auto lwi =
|
||||||
new QListWidgetItem(pco.isNull() ? pico : pco, d->pluginName()));
|
new QListWidgetItem(pco.isNull() ? pico : pco, d->pluginName());
|
||||||
|
auto info = plgsys.getPluginInfo(d);
|
||||||
|
auto flags = lwi->flags();
|
||||||
|
flags.setFlag(Qt::ItemIsUserCheckable);
|
||||||
|
lwi->setFlags(flags);
|
||||||
|
lwi->setData(PLUIGN_META, QVariant::fromValue(info));
|
||||||
|
lwi->setData(PLUIGN_NAME, d->pluginName());
|
||||||
|
lwi->setData(PLUIGN_COMMENT, d->pluginComment());
|
||||||
|
lwi->setCheckState(Qt::Checked);
|
||||||
|
ui->devlist->addItem(lwi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pico = ICONRES("devextdis");
|
||||||
|
auto blkdevs = plgsys.blockedDevPlugins();
|
||||||
|
auto dblkdevs = blkdevs[PluginSystem::BlockReason::Disabled];
|
||||||
|
for (auto &meta : dblkdevs) {
|
||||||
|
auto lwi = new QListWidgetItem(pico, meta.id);
|
||||||
|
auto flags = lwi->flags();
|
||||||
|
flags.setFlag(Qt::ItemIsUserCheckable);
|
||||||
|
lwi->setFlags(flags);
|
||||||
|
lwi->setData(PLUIGN_META, QVariant::fromValue(meta));
|
||||||
|
lwi->setCheckState(Qt::Unchecked);
|
||||||
|
ui->devlist->addItem(lwi);
|
||||||
|
}
|
||||||
|
|
||||||
|
pico = getGrayIcon(NAMEICONRES("devext"));
|
||||||
|
dblkdevs = blkdevs[PluginSystem::BlockReason::BlockedByManager];
|
||||||
|
for (auto &meta : dblkdevs) {
|
||||||
|
auto lwi = new QListWidgetItem(pico, meta.id);
|
||||||
|
auto flags = lwi->flags();
|
||||||
|
flags.setFlag(Qt::ItemIsUserCheckable, false);
|
||||||
|
lwi->setFlags(flags);
|
||||||
|
auto font = lwi->font();
|
||||||
|
font.setStrikeOut(true);
|
||||||
|
lwi->setFont(font);
|
||||||
|
lwi->setData(PLUIGN_META, QVariant::fromValue(meta));
|
||||||
|
ui->devlist->addItem(lwi);
|
||||||
|
}
|
||||||
|
|
||||||
ui->txtd->clear();
|
ui->txtd->clear();
|
||||||
|
|
||||||
auto minfo = plgsys.monitorManagerInfo();
|
auto minfo = plgsys.monitorManagerInfo();
|
||||||
|
@ -91,6 +178,154 @@ PluginSettingDialog::PluginSettingDialog(QWidget *parent)
|
||||||
&SettingManager::setEnablePlugin);
|
&SettingManager::setEnablePlugin);
|
||||||
connect(ui->cbEnablePluginRoot, &QCheckBox::toggled, set,
|
connect(ui->cbEnablePluginRoot, &QCheckBox::toggled, set,
|
||||||
&SettingManager::setEnablePlgInRoot);
|
&SettingManager::setEnablePlgInRoot);
|
||||||
|
|
||||||
|
connect(ui->plglist, &QListWidget::itemChanged, this,
|
||||||
|
[this](QListWidgetItem *item) {
|
||||||
|
if (item == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto info = item->data(PLUIGN_META).value<PluginInfo>();
|
||||||
|
auto id = info.id;
|
||||||
|
switch (item->checkState()) {
|
||||||
|
case Qt::Unchecked:
|
||||||
|
_plgChanged.pushRemoveItem(id);
|
||||||
|
break;
|
||||||
|
case Qt::Checked:
|
||||||
|
_plgChanged.pushAddItem(id);
|
||||||
|
break;
|
||||||
|
case Qt::PartiallyChecked:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->btnplgSave->setEnabled(_plgChanged.containChanges());
|
||||||
|
});
|
||||||
|
connect(
|
||||||
|
ui->plglist, &QListWidget::currentItemChanged, this,
|
||||||
|
[this](QListWidgetItem *current, QListWidgetItem *) {
|
||||||
|
if (current == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto info = current->data(PLUIGN_META).value<PluginInfo>();
|
||||||
|
auto plgName = current->data(PLUIGN_NAME).toString();
|
||||||
|
auto plgComment = current->data(PLUIGN_COMMENT).toString();
|
||||||
|
|
||||||
|
ui->txtc->clear();
|
||||||
|
static auto sep = QStringLiteral(" : ");
|
||||||
|
ui->txtc->append(getWrappedText(tr("ID") + sep + info.id));
|
||||||
|
ui->txtc->append(getWrappedText(tr("Name") + sep + plgName));
|
||||||
|
ui->txtc->append(
|
||||||
|
getWrappedText(tr("License") + sep + info.license));
|
||||||
|
ui->txtc->append(getWrappedText(tr("Author") + sep + info.author));
|
||||||
|
ui->txtc->append(getWrappedText(tr("Vendor") + sep + info.vendor));
|
||||||
|
ui->txtc->append(
|
||||||
|
getWrappedText(tr("Version") + sep + info.version.toString()));
|
||||||
|
ui->txtc->append(getWrappedText(tr("Comment") + sep + plgComment));
|
||||||
|
if (!info.dependencies.isEmpty()) {
|
||||||
|
ui->txtc->append(getWrappedText(tr("pluginDependencies:")));
|
||||||
|
for (auto &d : info.dependencies) {
|
||||||
|
ui->txtc->append(
|
||||||
|
getWrappedText(QString(4, ' ') + tr("PUID:") + d.puid));
|
||||||
|
ui->txtc->append(getWrappedText(QString(4, ' ') +
|
||||||
|
tr("Version:") +
|
||||||
|
d.version.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ui->txtc->append(getWrappedText(
|
||||||
|
tr("URL") + sep + QStringLiteral("<a href=\"") + info.url +
|
||||||
|
QStringLiteral("\">") + info.url + QStringLiteral("</a> ")));
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(ui->devlist, &QListWidget::itemChanged, this,
|
||||||
|
[this](QListWidgetItem *item) {
|
||||||
|
if (item == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto info = item->data(PLUIGN_META).value<PluginInfo>();
|
||||||
|
auto id = info.id;
|
||||||
|
switch (item->checkState()) {
|
||||||
|
case Qt::Unchecked:
|
||||||
|
_devChanged.pushRemoveItem(id);
|
||||||
|
break;
|
||||||
|
case Qt::Checked:
|
||||||
|
_devChanged.pushAddItem(id);
|
||||||
|
break;
|
||||||
|
case Qt::PartiallyChecked:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->btndevSave->setEnabled(_devChanged.containChanges());
|
||||||
|
});
|
||||||
|
connect(
|
||||||
|
ui->devlist, &QListWidget::currentItemChanged, this,
|
||||||
|
[this](QListWidgetItem *current, QListWidgetItem *) {
|
||||||
|
if (current == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto info = current->data(PLUIGN_META).value<PluginInfo>();
|
||||||
|
auto plgName = current->data(PLUIGN_NAME).toString();
|
||||||
|
auto plgComment = current->data(PLUIGN_COMMENT).toString();
|
||||||
|
|
||||||
|
ui->txtd->clear();
|
||||||
|
static auto sep = QStringLiteral(" : ");
|
||||||
|
ui->txtd->append(getWrappedText(tr("ID") + sep + info.id));
|
||||||
|
ui->txtd->append(getWrappedText(tr("Name") + sep + plgName));
|
||||||
|
ui->txtd->append(
|
||||||
|
getWrappedText(tr("License") + sep + info.license));
|
||||||
|
ui->txtd->append(getWrappedText(tr("Author") + sep + info.author));
|
||||||
|
ui->txtd->append(getWrappedText(tr("Vendor") + sep + info.vendor));
|
||||||
|
ui->txtd->append(
|
||||||
|
getWrappedText(tr("Version") + sep + info.version.toString()));
|
||||||
|
ui->txtd->append(getWrappedText(tr("Comment") + sep + plgComment));
|
||||||
|
ui->txtd->append(getWrappedText(
|
||||||
|
tr("URL") + sep + QStringLiteral("<a href=\"") + info.url +
|
||||||
|
QStringLiteral("\">") + info.url + QStringLiteral("</a>")));
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(ui->btnplgSave, &QPushButton::clicked, set, [this]() {
|
||||||
|
SettingManager::instance().setEnabledExtPlugins(
|
||||||
|
_plgChanged.getContents());
|
||||||
|
_plgChanged.clear();
|
||||||
|
ui->btnplgSave->setEnabled(false);
|
||||||
|
Q_EMIT optionNeedRestartChanged();
|
||||||
|
});
|
||||||
|
connect(ui->btndevSave, &QPushButton::clicked, set, [this]() {
|
||||||
|
SettingManager::instance().setEnabledDevPlugins(
|
||||||
|
_devChanged.getContents());
|
||||||
|
_devChanged.clear();
|
||||||
|
ui->btndevSave->setEnabled(false);
|
||||||
|
Q_EMIT optionNeedRestartChanged();
|
||||||
|
});
|
||||||
|
|
||||||
|
auto ev = new EventFilter(QEvent::EnabledChange, this);
|
||||||
|
connect(ev, &EventFilter::eventTriggered, this,
|
||||||
|
[this](QObject *obj, QEvent *) {
|
||||||
|
if (obj == ui->btnplgSave) {
|
||||||
|
auto tabName = QCoreApplication::translate(
|
||||||
|
"PluginSettingDialog", "PluginInfo", nullptr);
|
||||||
|
if (ui->btnplgSave->isEnabled()) {
|
||||||
|
tabName.append(QStringLiteral(" *"));
|
||||||
|
}
|
||||||
|
ui->tabWidget->setTabText(
|
||||||
|
ui->tabWidget->indexOf(ui->tabPluginInfo), tabName);
|
||||||
|
} else if (obj == ui->btndevSave) {
|
||||||
|
auto tabName = QCoreApplication::translate(
|
||||||
|
"PluginSettingDialog", "DevExtInfo", nullptr);
|
||||||
|
if (ui->btndevSave->isEnabled()) {
|
||||||
|
tabName.append(QStringLiteral(" *"));
|
||||||
|
}
|
||||||
|
ui->tabWidget->setTabText(
|
||||||
|
ui->tabWidget->indexOf(ui->tabDevInfo), tabName);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ui->btnplgSave->installEventFilter(ev);
|
||||||
|
ui->btndevSave->installEventFilter(ev);
|
||||||
|
|
||||||
|
resetChangedList();
|
||||||
|
|
||||||
|
createPluginStandardMenu(ui->plglist);
|
||||||
|
createPluginStandardMenu(ui->devlist);
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginSettingDialog::~PluginSettingDialog() { delete ui; }
|
PluginSettingDialog::~PluginSettingDialog() { delete ui; }
|
||||||
|
@ -109,68 +344,117 @@ QString PluginSettingDialog::name() const { return tr("Plugin"); }
|
||||||
|
|
||||||
QString PluginSettingDialog::id() const { return QStringLiteral("Plugin"); }
|
QString PluginSettingDialog::id() const { return QStringLiteral("Plugin"); }
|
||||||
|
|
||||||
|
bool PluginSettingDialog::containUnsavedChanges() const {
|
||||||
|
return ui->btndevSave->isEnabled() || ui->btnplgSave->isEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PluginSettingDialog::highlightUnsavedChange() {
|
||||||
|
if (ui->btnplgSave->isEnabled()) {
|
||||||
|
ui->tabWidget->setCurrentWidget(ui->tabPluginInfo);
|
||||||
|
} else if (ui->btndevSave->isEnabled()) {
|
||||||
|
ui->tabWidget->setCurrentWidget(ui->tabDevInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PluginSettingDialog::discard() {
|
||||||
|
resetChangedList();
|
||||||
|
resetUIChagned();
|
||||||
|
}
|
||||||
|
|
||||||
void PluginSettingDialog::restore() {
|
void PluginSettingDialog::restore() {
|
||||||
SettingManager::instance().reset(SettingManager::SETTING::PLUGIN);
|
SettingManager::instance().reset(SettingManager::SETTING::PLUGIN);
|
||||||
reload();
|
reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PluginSettingDialog::on_devlist_currentRowChanged(int currentRow) {
|
void PluginSettingDialog::createPluginStandardMenu(QListWidget *widget) {
|
||||||
if (currentRow < 0) {
|
widget->setSelectionMode(QListWidget::ExtendedSelection);
|
||||||
return;
|
widget->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||||
}
|
widget->addAction(tr("SelectEnable"), widget, [widget]() {
|
||||||
|
for (auto &item : widget->selectedItems()) {
|
||||||
auto &plgsys = PluginSystem::instance();
|
auto flags = item->flags();
|
||||||
auto plg = plgsys.device(currentRow);
|
if (flags.testFlag(Qt::ItemIsUserCheckable)) {
|
||||||
|
item->setCheckState(Qt::Checked);
|
||||||
auto info = plgsys.getPluginInfo(plg);
|
}
|
||||||
ui->txtd->clear();
|
}
|
||||||
static auto sep = QStringLiteral(" : ");
|
});
|
||||||
ui->txtd->append(getWrappedText(tr("ID") + sep + info.id));
|
widget->addAction(tr("SelectDisable"), widget, [widget]() {
|
||||||
ui->txtd->append(getWrappedText(tr("Name") + sep + plg->pluginName()));
|
for (auto &item : widget->selectedItems()) {
|
||||||
ui->txtd->append(getWrappedText(tr("License") + sep + info.license));
|
auto flags = item->flags();
|
||||||
ui->txtd->append(getWrappedText(tr("Author") + sep + info.author));
|
if (flags.testFlag(Qt::ItemIsUserCheckable)) {
|
||||||
ui->txtd->append(getWrappedText(tr("Vendor") + sep + info.vendor));
|
item->setCheckState(Qt::Unchecked);
|
||||||
ui->txtd->append(
|
}
|
||||||
getWrappedText(tr("Version") + sep + info.version.toString()));
|
}
|
||||||
ui->txtd->append(
|
});
|
||||||
getWrappedText(tr("Comment") + sep + plg->pluginComment()));
|
auto a = new QAction(widget);
|
||||||
ui->txtd->append(getWrappedText(
|
a->setSeparator(true);
|
||||||
tr("URL") + sep + QStringLiteral("<a href=\"") + info.url +
|
widget->addAction(a);
|
||||||
QStringLiteral("\">") + info.url + QStringLiteral("</a>")));
|
widget->addAction(tr("SelectAll"), widget, &QListWidget::selectAll);
|
||||||
|
widget->addAction(tr("SelectClear"), widget, &QListWidget::clearSelection);
|
||||||
|
a = new QAction(widget);
|
||||||
|
a->setSeparator(true);
|
||||||
|
widget->addAction(a);
|
||||||
|
widget->addAction(tr("DiscardChanges"), this,
|
||||||
|
&PluginSettingDialog::discard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PluginSettingDialog::on_plglist_currentRowChanged(int currentRow) {
|
QIcon PluginSettingDialog::getGrayIcon(const QString &path) {
|
||||||
if (currentRow < 0) {
|
QImage dpico(path);
|
||||||
return;
|
for (int y = 0; y < dpico.height(); ++y) {
|
||||||
}
|
auto row = reinterpret_cast<QRgb *>(dpico.scanLine(y));
|
||||||
|
for (int x = 0; x < dpico.width(); ++x) {
|
||||||
auto &plgsys = PluginSystem::instance();
|
auto c = row[x];
|
||||||
auto plg = plgsys.plugin(currentRow);
|
if (c) {
|
||||||
|
auto p = qGray(c);
|
||||||
auto info = plgsys.getPluginInfo(plg);
|
row[x] = qRgba(p, p, p, qAlpha(c));
|
||||||
ui->txtc->clear();
|
}
|
||||||
static auto sep = QStringLiteral(" : ");
|
|
||||||
ui->txtc->append(getWrappedText(tr("ID") + sep + info.id));
|
|
||||||
ui->txtc->append(getWrappedText(tr("Name") + sep + plg->pluginName()));
|
|
||||||
ui->txtc->append(getWrappedText(tr("License") + sep + info.license));
|
|
||||||
ui->txtc->append(getWrappedText(tr("Author") + sep + info.author));
|
|
||||||
ui->txtc->append(getWrappedText(tr("Vendor") + sep + info.vendor));
|
|
||||||
ui->txtc->append(
|
|
||||||
getWrappedText(tr("Version") + sep + info.version.toString()));
|
|
||||||
ui->txtc->append(
|
|
||||||
getWrappedText(tr("Comment") + sep + plg->pluginComment()));
|
|
||||||
if (!info.dependencies.isEmpty()) {
|
|
||||||
ui->txtc->append(getWrappedText(tr("pluginDependencies:")));
|
|
||||||
for (auto &d : info.dependencies) {
|
|
||||||
ui->txtc->append(
|
|
||||||
getWrappedText(QString(4, ' ') + tr("PUID:") + d.puid));
|
|
||||||
ui->txtc->append(getWrappedText(QString(4, ' ') + tr("Version:") +
|
|
||||||
d.version.toString()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui->txtc->append(getWrappedText(
|
return QIcon(QPixmap::fromImage(dpico));
|
||||||
tr("URL") + sep + QStringLiteral("<a href=\"") + info.url +
|
}
|
||||||
QStringLiteral("\">") + info.url + QStringLiteral("</a> ")));
|
|
||||||
|
void PluginSettingDialog::resetChangedList() {
|
||||||
|
auto &set = SettingManager::instance();
|
||||||
|
_plgChanged.setContents(set.enabledExtPlugins());
|
||||||
|
_devChanged.setContents(set.enabledDevPlugins());
|
||||||
|
}
|
||||||
|
|
||||||
|
void PluginSettingDialog::resetUIChagned() {
|
||||||
|
ui->plglist->blockSignals(true);
|
||||||
|
ui->devlist->blockSignals(true);
|
||||||
|
|
||||||
|
for (int i = 0; i < ui->plglist->count(); ++i) {
|
||||||
|
auto item = ui->plglist->item(i);
|
||||||
|
auto flags = item->flags();
|
||||||
|
if (flags.testFlag(Qt::ItemIsUserCheckable)) {
|
||||||
|
auto info = item->data(PLUIGN_META).value<PluginInfo>();
|
||||||
|
auto id = info.id;
|
||||||
|
if (_plgChanged.containChanges(id)) {
|
||||||
|
item->setCheckState(Qt::Checked);
|
||||||
|
} else {
|
||||||
|
item->setCheckState(Qt::Unchecked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < ui->devlist->count(); ++i) {
|
||||||
|
auto item = ui->devlist->item(i);
|
||||||
|
auto flags = item->flags();
|
||||||
|
if (flags.testFlag(Qt::ItemIsUserCheckable)) {
|
||||||
|
auto info = item->data(PLUIGN_META).value<PluginInfo>();
|
||||||
|
auto id = info.id;
|
||||||
|
if (_devChanged.containChanges(id)) {
|
||||||
|
item->setCheckState(Qt::Checked);
|
||||||
|
} else {
|
||||||
|
item->setCheckState(Qt::Unchecked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->plglist->blockSignals(false);
|
||||||
|
ui->devlist->blockSignals(false);
|
||||||
|
|
||||||
|
ui->btnplgSave->setEnabled(false);
|
||||||
|
ui->btndevSave->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString PluginSettingDialog::getWrappedText(const QString &str) {
|
QString PluginSettingDialog::getWrappedText(const QString &str) {
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
#define PLUGINSETTINGDIALOG_H
|
#define PLUGINSETTINGDIALOG_H
|
||||||
|
|
||||||
#include "WingPlugin/settingpage.h"
|
#include "WingPlugin/settingpage.h"
|
||||||
|
#include "class/changedstringlist.h"
|
||||||
|
|
||||||
|
#include <QListWidget>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -35,6 +38,10 @@ public:
|
||||||
private:
|
private:
|
||||||
Ui::PluginSettingDialog *ui;
|
Ui::PluginSettingDialog *ui;
|
||||||
|
|
||||||
|
ChangedStringList _devChanged;
|
||||||
|
ChangedStringList _plgChanged;
|
||||||
|
|
||||||
|
private:
|
||||||
void reload();
|
void reload();
|
||||||
|
|
||||||
// SettingPage interface
|
// SettingPage interface
|
||||||
|
@ -43,11 +50,18 @@ public:
|
||||||
virtual QString name() const override;
|
virtual QString name() const override;
|
||||||
virtual QString id() const override;
|
virtual QString id() const override;
|
||||||
|
|
||||||
|
virtual bool containUnsavedChanges() const override;
|
||||||
|
virtual void highlightUnsavedChange() override;
|
||||||
|
virtual void discard() override;
|
||||||
virtual void restore() override;
|
virtual void restore() override;
|
||||||
|
|
||||||
private slots:
|
private:
|
||||||
void on_devlist_currentRowChanged(int currentRow);
|
void createPluginStandardMenu(QListWidget *widget);
|
||||||
void on_plglist_currentRowChanged(int currentRow);
|
|
||||||
|
QIcon getGrayIcon(const QString &path);
|
||||||
|
|
||||||
|
void resetChangedList();
|
||||||
|
void resetUIChagned();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString getWrappedText(const QString &str);
|
QString getWrappedText(const QString &str);
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
<property name="usesScrollButtons">
|
<property name="usesScrollButtons">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tab">
|
<widget class="QWidget" name="tabPluginInfo">
|
||||||
<attribute name="icon">
|
<attribute name="icon">
|
||||||
<iconset resource="../../resources.qrc">
|
<iconset resource="../../resources.qrc">
|
||||||
<normaloff>:/com.wingsummer.winghex/images/plugin.png</normaloff>:/com.wingsummer.winghex/images/plugin.png</iconset>
|
<normaloff>:/com.wingsummer.winghex/images/plugin.png</normaloff>:/com.wingsummer.winghex/images/plugin.png</iconset>
|
||||||
|
@ -116,6 +116,16 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QListWidget" name="plglist"/>
|
<widget class="QListWidget" name="plglist"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btnplgSave">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QTextBrowser" name="txtc">
|
<widget class="QTextBrowser" name="txtc">
|
||||||
|
@ -127,7 +137,7 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="widget">
|
<widget class="QWidget" name="tabDevInfo">
|
||||||
<attribute name="icon">
|
<attribute name="icon">
|
||||||
<iconset resource="../../resources.qrc">
|
<iconset resource="../../resources.qrc">
|
||||||
<normaloff>:/com.wingsummer.winghex/images/devext.png</normaloff>:/com.wingsummer.winghex/images/devext.png</iconset>
|
<normaloff>:/com.wingsummer.winghex/images/devext.png</normaloff>:/com.wingsummer.winghex/images/devext.png</iconset>
|
||||||
|
@ -156,6 +166,16 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QListWidget" name="devlist"/>
|
<widget class="QListWidget" name="devlist"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btndevSave">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QTextBrowser" name="txtd">
|
<widget class="QTextBrowser" name="txtd">
|
||||||
|
@ -167,7 +187,7 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tab_2">
|
<widget class="QWidget" name="tabAPIMon">
|
||||||
<attribute name="icon">
|
<attribute name="icon">
|
||||||
<iconset resource="../../resources.qrc">
|
<iconset resource="../../resources.qrc">
|
||||||
<normaloff>:/com.wingsummer.winghex/images/monitor.png</normaloff>:/com.wingsummer.winghex/images/monitor.png</iconset>
|
<normaloff>:/com.wingsummer.winghex/images/monitor.png</normaloff>:/com.wingsummer.winghex/images/monitor.png</iconset>
|
||||||
|
|
|
@ -47,26 +47,24 @@ ScriptSettingDialog::ScriptSettingDialog(QWidget *parent)
|
||||||
switch (item->checkState()) {
|
switch (item->checkState()) {
|
||||||
case Qt::Unchecked: {
|
case Qt::Unchecked: {
|
||||||
if (meta.isSys) {
|
if (meta.isSys) {
|
||||||
m_sysHideCats.append(meta.rawName);
|
m_sysHideCats.pushAddItem(meta.rawName);
|
||||||
} else {
|
} else {
|
||||||
m_usrHideCats.append(meta.rawName);
|
m_usrHideCats.pushAddItem(meta.rawName);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case Qt::Checked: {
|
case Qt::Checked: {
|
||||||
if (meta.isSys) {
|
if (meta.isSys) {
|
||||||
m_sysHideCats.removeOne(meta.rawName);
|
m_sysHideCats.pushRemoveItem(meta.rawName);
|
||||||
} else {
|
} else {
|
||||||
m_usrHideCats.removeOne(meta.rawName);
|
m_usrHideCats.pushRemoveItem(meta.rawName);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case Qt::PartiallyChecked:
|
case Qt::PartiallyChecked:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
auto &set = SettingManager::instance();
|
ui->btnSave->setEnabled(containUnsavedChanges());
|
||||||
set.setUsrHideCats(m_sysHideCats);
|
}
|
||||||
set.setSysHideCats(m_usrHideCats);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
auto set = &SettingManager::instance();
|
auto set = &SettingManager::instance();
|
||||||
|
@ -76,6 +74,47 @@ ScriptSettingDialog::ScriptSettingDialog(QWidget *parent)
|
||||||
&SettingManager::setAllowUsrScriptInRoot);
|
&SettingManager::setAllowUsrScriptInRoot);
|
||||||
connect(ui->sbTimeout, &QSpinBox::valueChanged, set,
|
connect(ui->sbTimeout, &QSpinBox::valueChanged, set,
|
||||||
&SettingManager::setScriptTimeout);
|
&SettingManager::setScriptTimeout);
|
||||||
|
|
||||||
|
connect(ui->btnSave, &QPushButton::clicked, this, [this]() {
|
||||||
|
auto &set = SettingManager::instance();
|
||||||
|
set.setUsrHideCats(m_usrHideCats.getContents());
|
||||||
|
set.setSysHideCats(m_sysHideCats.getContents());
|
||||||
|
m_sysHideCats.clear();
|
||||||
|
m_usrHideCats.clear();
|
||||||
|
ui->btnSave->setEnabled(false);
|
||||||
|
Q_EMIT optionNeedRestartChanged();
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(ui->listWidget, &QListWidget::currentRowChanged, this,
|
||||||
|
[this](int currentRow) {
|
||||||
|
if (currentRow < 0) {
|
||||||
|
ui->textBrowser->clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto lw = ui->listWidget->item(currentRow);
|
||||||
|
auto var = lw->data(Qt::UserRole);
|
||||||
|
if (var.isValid()) {
|
||||||
|
auto meta = var.value<ScriptManager::ScriptDirMeta>();
|
||||||
|
auto info = ui->textBrowser;
|
||||||
|
info->clear();
|
||||||
|
info->append(tr("RawName:") + meta.rawName);
|
||||||
|
info->append(tr("Name:") + meta.name);
|
||||||
|
info->append(tr("Author:") + meta.author);
|
||||||
|
info->append(tr("License:") + meta.license);
|
||||||
|
info->append(tr("ContextMenu:") +
|
||||||
|
(meta.isContextMenu
|
||||||
|
? QStringLiteral("true")
|
||||||
|
: QStringLiteral("false")));
|
||||||
|
info->append(tr("HomePage:") + meta.homepage);
|
||||||
|
info->append(tr("Comment:"));
|
||||||
|
auto cur = info->textCursor();
|
||||||
|
cur.movePosition(QTextCursor::End);
|
||||||
|
info->setTextCursor(cur);
|
||||||
|
info->insertHtml(meta.comment);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
createPluginStandardMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptSettingDialog::~ScriptSettingDialog() { delete ui; }
|
ScriptSettingDialog::~ScriptSettingDialog() { delete ui; }
|
||||||
|
@ -94,19 +133,26 @@ void ScriptSettingDialog::loadData() {
|
||||||
auto &sm = ScriptManager::instance();
|
auto &sm = ScriptManager::instance();
|
||||||
auto usrCats = sm.usrScriptsDbCats();
|
auto usrCats = sm.usrScriptsDbCats();
|
||||||
auto hidden = set.usrHideCats();
|
auto hidden = set.usrHideCats();
|
||||||
|
|
||||||
|
QStringList buffer;
|
||||||
for (auto &cat : usrCats) {
|
for (auto &cat : usrCats) {
|
||||||
if (addCatagory(sm.usrDirMeta(cat), true, hidden.contains(cat))) {
|
if (addCatagory(sm.usrDirMeta(cat), true, hidden.contains(cat))) {
|
||||||
m_usrHideCats << cat;
|
buffer.append(cat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_usrHideCats = buffer;
|
||||||
|
m_usrHideCats.setContents(buffer);
|
||||||
|
|
||||||
|
buffer.clear();
|
||||||
auto sysCats = sm.sysScriptsDbCats();
|
auto sysCats = sm.sysScriptsDbCats();
|
||||||
hidden = set.sysHideCats();
|
hidden = set.sysHideCats();
|
||||||
for (auto &cat : sysCats) {
|
for (auto &cat : sysCats) {
|
||||||
if (addCatagory(sm.sysDirMeta(cat), false, hidden.contains(cat))) {
|
if (addCatagory(sm.sysDirMeta(cat), false, hidden.contains(cat))) {
|
||||||
m_sysHideCats << cat;
|
buffer.append(cat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_sysHideCats = buffer;
|
||||||
|
m_sysHideCats.setContents(buffer);
|
||||||
} else {
|
} else {
|
||||||
ui->groupBox_2->setEnabled(false);
|
ui->groupBox_2->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
@ -120,7 +166,33 @@ bool ScriptSettingDialog::addCatagory(const ScriptManager::ScriptDirMeta &meta,
|
||||||
meta.name, ui->listWidget);
|
meta.name, ui->listWidget);
|
||||||
lw->setData(Qt::UserRole, QVariant::fromValue(meta));
|
lw->setData(Qt::UserRole, QVariant::fromValue(meta));
|
||||||
lw->setCheckState(hidden ? Qt::Unchecked : Qt::Checked);
|
lw->setCheckState(hidden ? Qt::Unchecked : Qt::Checked);
|
||||||
return !hidden;
|
return hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptSettingDialog::createPluginStandardMenu() {
|
||||||
|
auto widget = ui->listWidget;
|
||||||
|
widget->setSelectionMode(QListWidget::ExtendedSelection);
|
||||||
|
widget->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||||
|
widget->addAction(tr("SelectShow"), widget, [widget]() {
|
||||||
|
for (auto &item : widget->selectedItems()) {
|
||||||
|
item->setCheckState(Qt::Checked);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
widget->addAction(tr("SelectHide"), widget, [widget]() {
|
||||||
|
for (auto &item : widget->selectedItems()) {
|
||||||
|
item->setCheckState(Qt::Unchecked);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
auto a = new QAction(widget);
|
||||||
|
a->setSeparator(true);
|
||||||
|
widget->addAction(a);
|
||||||
|
widget->addAction(tr("SelectAll"), widget, &QListWidget::selectAll);
|
||||||
|
widget->addAction(tr("SelectClear"), widget, &QListWidget::clearSelection);
|
||||||
|
a = new QAction(widget);
|
||||||
|
a->setSeparator(true);
|
||||||
|
widget->addAction(a);
|
||||||
|
widget->addAction(tr("DiscardChanges"), this,
|
||||||
|
&ScriptSettingDialog::discard);
|
||||||
}
|
}
|
||||||
|
|
||||||
QIcon ScriptSettingDialog::categoryIcon() const { return ICONRES("script"); }
|
QIcon ScriptSettingDialog::categoryIcon() const { return ICONRES("script"); }
|
||||||
|
@ -129,41 +201,40 @@ QString ScriptSettingDialog::name() const { return tr("Script"); }
|
||||||
|
|
||||||
QString ScriptSettingDialog::id() const { return QStringLiteral("Script"); }
|
QString ScriptSettingDialog::id() const { return QStringLiteral("Script"); }
|
||||||
|
|
||||||
|
bool ScriptSettingDialog::containUnsavedChanges() const {
|
||||||
|
return m_usrHideCats.containChanges() || m_sysHideCats.containChanges();
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptSettingDialog::restore() {
|
void ScriptSettingDialog::restore() {
|
||||||
auto &set = SettingManager::instance();
|
auto &set = SettingManager::instance();
|
||||||
set.reset(SettingManager::SCRIPT);
|
set.reset(SettingManager::SCRIPT);
|
||||||
loadData();
|
loadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSettingDialog::on_btnRefresh_clicked() {
|
void ScriptSettingDialog::discard() {
|
||||||
ui->listWidget->clear();
|
m_usrHideCats.setContents(_usrHideCats);
|
||||||
ScriptManager::instance().refresh();
|
m_sysHideCats.setContents(_sysHideCats);
|
||||||
loadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScriptSettingDialog::on_listWidget_currentRowChanged(int currentRow) {
|
ui->listWidget->blockSignals(true);
|
||||||
if (currentRow < 0) {
|
for (int i = 0; i < ui->listWidget->count(); ++i) {
|
||||||
ui->textBrowser->clear();
|
auto item = ui->listWidget->item(i);
|
||||||
return;
|
auto var = item->data(Qt::UserRole);
|
||||||
}
|
if (var.isValid()) {
|
||||||
auto lw = ui->listWidget->item(currentRow);
|
auto meta = var.value<ScriptManager::ScriptDirMeta>();
|
||||||
auto var = lw->data(Qt::UserRole);
|
if (meta.isSys) {
|
||||||
if (var.isValid()) {
|
if (_sysHideCats.contains(meta.rawName)) {
|
||||||
auto meta = var.value<ScriptManager::ScriptDirMeta>();
|
item->setCheckState(Qt::Unchecked);
|
||||||
auto info = ui->textBrowser;
|
} else {
|
||||||
info->clear();
|
item->setCheckState(Qt::Checked);
|
||||||
info->append(tr("RawName:") + meta.rawName);
|
}
|
||||||
info->append(tr("Name:") + meta.name);
|
} else {
|
||||||
info->append(tr("Author:") + meta.author);
|
if (_usrHideCats.contains(meta.rawName)) {
|
||||||
info->append(tr("License:") + meta.license);
|
item->setCheckState(Qt::Unchecked);
|
||||||
info->append(tr("ContextMenu:") + (meta.isContextMenu
|
} else {
|
||||||
? QStringLiteral("true")
|
item->setCheckState(Qt::Checked);
|
||||||
: QStringLiteral("false")));
|
}
|
||||||
info->append(tr("HomePage:") + meta.homepage);
|
}
|
||||||
info->append(tr("Comment:"));
|
}
|
||||||
auto cur = info->textCursor();
|
|
||||||
cur.movePosition(QTextCursor::End);
|
|
||||||
info->setTextCursor(cur);
|
|
||||||
info->insertHtml(meta.comment);
|
|
||||||
}
|
}
|
||||||
|
ui->listWidget->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#define SCRIPTSETTINGDIALOG_H
|
#define SCRIPTSETTINGDIALOG_H
|
||||||
|
|
||||||
#include "WingPlugin/settingpage.h"
|
#include "WingPlugin/settingpage.h"
|
||||||
|
#include "class/changedstringlist.h"
|
||||||
#include "class/scriptmanager.h"
|
#include "class/scriptmanager.h"
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
@ -36,25 +37,28 @@ public:
|
||||||
private:
|
private:
|
||||||
Ui::ScriptSettingDialog *ui;
|
Ui::ScriptSettingDialog *ui;
|
||||||
|
|
||||||
QStringList m_usrHideCats;
|
QStringList _usrHideCats;
|
||||||
QStringList m_sysHideCats;
|
QStringList _sysHideCats;
|
||||||
|
|
||||||
|
ChangedStringList m_usrHideCats;
|
||||||
|
ChangedStringList m_sysHideCats;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void loadData();
|
void loadData();
|
||||||
bool addCatagory(const ScriptManager::ScriptDirMeta &meta, bool isUser,
|
bool addCatagory(const ScriptManager::ScriptDirMeta &meta, bool isUser,
|
||||||
bool hidden);
|
bool hidden);
|
||||||
|
|
||||||
|
void createPluginStandardMenu();
|
||||||
|
|
||||||
// SettingPage interface
|
// SettingPage interface
|
||||||
public:
|
public:
|
||||||
virtual QIcon categoryIcon() const override;
|
virtual QIcon categoryIcon() const override;
|
||||||
virtual QString name() const override;
|
virtual QString name() const override;
|
||||||
virtual QString id() const override;
|
virtual QString id() const override;
|
||||||
|
|
||||||
|
virtual bool containUnsavedChanges() const override;
|
||||||
virtual void restore() override;
|
virtual void restore() override;
|
||||||
|
virtual void discard() override;
|
||||||
private slots:
|
|
||||||
void on_btnRefresh_clicked();
|
|
||||||
void on_listWidget_currentRowChanged(int currentRow);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SCRIPTSETTINGDIALOG_H
|
#endif // SCRIPTSETTINGDIALOG_H
|
||||||
|
|
|
@ -130,9 +130,12 @@
|
||||||
<widget class="QTextBrowser" name="textBrowser"/>
|
<widget class="QTextBrowser" name="textBrowser"/>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="btnRefresh">
|
<widget class="QPushButton" name="btnSave">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Refresh</string>
|
<string>Save</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
Loading…
Reference in New Issue