|
|
@@ -131,9 +131,15 @@ ViewCore* ViewInstanceManager::getViewCore() const
|
|
|
return qobject_cast<ViewCore*>(pWidget);
|
|
|
}
|
|
|
|
|
|
-DeviceTreeWidget* ViewInstanceManager::getDeviceTreeWidget() const
|
|
|
+DeviceTreeWidget* ViewInstanceManager::getSerialDeviceTreeWidget() const
|
|
|
{
|
|
|
- QWidget* pWidget = getView(EViewType::ViewDeviceTree);
|
|
|
+ QWidget* pWidget = getView(EViewType::ViewSerialDeviceTree);
|
|
|
+ return qobject_cast<DeviceTreeWidget*>(pWidget);
|
|
|
+}
|
|
|
+
|
|
|
+DeviceTreeWidget* ViewInstanceManager::getNetworkDeviceTreeWidget() const
|
|
|
+{
|
|
|
+ QWidget* pWidget = getView(EViewType::ViewNetworkDeviceTree);
|
|
|
return qobject_cast<DeviceTreeWidget*>(pWidget);
|
|
|
}
|
|
|
|
|
|
@@ -155,9 +161,15 @@ NetworkDataWidget* ViewInstanceManager::getNetworkDataWidget() const
|
|
|
return qobject_cast<NetworkDataWidget*>(pWidget);
|
|
|
}
|
|
|
|
|
|
-ModbusConfigWidget* ViewInstanceManager::getModbusConfigWidget() const
|
|
|
+ModbusConfigWidget* ViewInstanceManager::getSerialModbusConfigWidget() const
|
|
|
+{
|
|
|
+ QWidget* pWidget = getView(EViewType::ViewSerialModbusConfig);
|
|
|
+ return qobject_cast<ModbusConfigWidget*>(pWidget);
|
|
|
+}
|
|
|
+
|
|
|
+ModbusConfigWidget* ViewInstanceManager::getNetworkModbusConfigWidget() const
|
|
|
{
|
|
|
- QWidget* pWidget = getView(EViewType::ViewModbusConfig);
|
|
|
+ QWidget* pWidget = getView(EViewType::ViewNetworkModbusConfig);
|
|
|
return qobject_cast<ModbusConfigWidget*>(pWidget);
|
|
|
}
|
|
|
|
|
|
@@ -198,66 +210,6 @@ void ViewInstanceManager::createSharedComponents(QWidget* pParent, DeviceBusCore
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 获取 SoftBusAPI 实例并确保已初始化
|
|
|
- SoftBusAPI* pApi = SoftBusAPI::instance();
|
|
|
- if (!pApi) {
|
|
|
- LOG_ERROR() << "ViewInstanceManager: SoftBusAPI 实例为空,无法创建共享组件";
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 确保 API 已初始化
|
|
|
- if (!pApi->isInitialized()) {
|
|
|
- LOG_INFO() << "ViewInstanceManager: SoftBusAPI 未初始化,正在初始化...";
|
|
|
- if (!pApi->initialize()) {
|
|
|
- LOG_ERROR() << "ViewInstanceManager: SoftBusAPI 初始化失败";
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 创建设备树组件(共享组件)
|
|
|
- DeviceTreeWidget* pDeviceTree = new DeviceTreeWidget(pParent);
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: DeviceTreeWidget 对象已创建";
|
|
|
-
|
|
|
- // 检查 API 状态
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: API 状态检查 - 指针:" << (void*)pApi
|
|
|
- << ", 已初始化:" << (pApi ? pApi->isInitialized() : false);
|
|
|
-
|
|
|
- // 检查设备发现状态(如果 API 有相关方法)
|
|
|
- if (pApi && pApi->isInitialized()) {
|
|
|
- // 尝试获取当前设备列表,检查是否为空
|
|
|
- QStringList serialPorts = pApi->getAvailableSerialPorts();
|
|
|
- QList<int> canDevices = pApi->getAvailableCanDevices();
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: 当前可用设备 - 串口数:" << serialPorts.size()
|
|
|
- << ", CAN设备数:" << canDevices.size();
|
|
|
- if (!serialPorts.isEmpty()) {
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: 可用串口列表:" << serialPorts.join(", ");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 设置 API 到设备树
|
|
|
- pDeviceTree->setAPI(pApi);
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: DeviceTreeWidget::setAPI() 已调用";
|
|
|
-
|
|
|
- // 设置 API 后,再次检查设备列表(设备树内部会调用 updateDeviceList)
|
|
|
- if (pApi && pApi->isInitialized()) {
|
|
|
- QTimer::singleShot(100, [pApi]() {
|
|
|
- QStringList serialPorts = pApi->getAvailableSerialPorts();
|
|
|
- QList<int> canDevices = pApi->getAvailableCanDevices();
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: 延迟检查设备列表 - 串口数:" << serialPorts.size()
|
|
|
- << ", CAN设备数:" << canDevices.size();
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- registerView(EViewType::ViewDeviceTree, pDeviceTree);
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: DeviceTreeWidget 已注册到管理器";
|
|
|
-
|
|
|
- // 创建 Modbus 配置组件(共享组件)
|
|
|
- ModbusConfigWidget* pModbusConfig = new ModbusConfigWidget(pParent);
|
|
|
- pModbusConfig->setBusCore(pBusCore);
|
|
|
- pModbusConfig->setAPI(pApi);
|
|
|
- registerView(EViewType::ViewModbusConfig, pModbusConfig);
|
|
|
- LOG_DEBUG() << "ViewInstanceManager: ModbusConfigWidget 已创建并注册";
|
|
|
-
|
|
|
// 创建原始数据表格组件(共享组件)
|
|
|
RawDataTableWidget* pRawDataTable = new RawDataTableWidget(pParent);
|
|
|
pRawDataTable->setBusCore(pBusCore);
|
|
|
@@ -270,14 +222,12 @@ void ViewInstanceManager::createSharedComponents(QWidget* pParent, DeviceBusCore
|
|
|
registerView(EViewType::ViewBusDataTable, pBusDataTable);
|
|
|
LOG_DEBUG() << "ViewInstanceManager: BusDataTableWidget 已创建并注册";
|
|
|
|
|
|
- LOG_INFO() << "ViewInstanceManager: 共享组件创建完成,共创建 4 个组件";
|
|
|
+ LOG_INFO() << "ViewInstanceManager: 共享组件创建完成,共创建 2 个组件";
|
|
|
}
|
|
|
|
|
|
bool ViewInstanceManager::hasSharedComponents() const
|
|
|
{
|
|
|
- return hasView(EViewType::ViewDeviceTree) &&
|
|
|
- hasView(EViewType::ViewModbusConfig) &&
|
|
|
- hasView(EViewType::ViewRawDataTable) &&
|
|
|
+ return hasView(EViewType::ViewRawDataTable) &&
|
|
|
hasView(EViewType::ViewBusDataTable);
|
|
|
}
|
|
|
|
|
|
@@ -356,6 +306,24 @@ void ViewInstanceManager::createSerialComponents(QWidget* pParent, DeviceBusCore
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 创建串口页面的设备树组件(独立实例)
|
|
|
+ DeviceTreeWidget* pDeviceTree = new DeviceTreeWidget(pParent);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 串口页面 DeviceTreeWidget 对象已创建";
|
|
|
+
|
|
|
+ // 设置 API 到设备树
|
|
|
+ pDeviceTree->setAPI(pApi);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 串口页面 DeviceTreeWidget::setAPI() 已调用";
|
|
|
+
|
|
|
+ registerView(EViewType::ViewSerialDeviceTree, pDeviceTree);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 串口页面 DeviceTreeWidget 已注册到管理器";
|
|
|
+
|
|
|
+ // 创建串口页面的 Modbus 配置组件(独立实例)
|
|
|
+ ModbusConfigWidget* pModbusConfig = new ModbusConfigWidget(pParent);
|
|
|
+ pModbusConfig->setBusCore(pBusCore);
|
|
|
+ pModbusConfig->setAPI(pApi);
|
|
|
+ registerView(EViewType::ViewSerialModbusConfig, pModbusConfig);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 串口页面 ModbusConfigWidget 已创建并注册";
|
|
|
+
|
|
|
// 创建串口设置组件(串口特有)
|
|
|
SerialSettingsWidget* pSerialSettings = new SerialSettingsWidget(pParent);
|
|
|
pSerialSettings->setAPI(pApi);
|
|
|
@@ -368,12 +336,14 @@ void ViewInstanceManager::createSerialComponents(QWidget* pParent, DeviceBusCore
|
|
|
registerView(EViewType::ViewSerialData, pSerialData);
|
|
|
LOG_DEBUG() << "ViewInstanceManager: SerialDataWidget 已创建并注册";
|
|
|
|
|
|
- LOG_INFO() << "ViewInstanceManager: 串口特有组件创建完成,共创建 2 个组件";
|
|
|
+ LOG_INFO() << "ViewInstanceManager: 串口特有组件创建完成,共创建 4 个组件";
|
|
|
}
|
|
|
|
|
|
bool ViewInstanceManager::hasSerialComponents() const
|
|
|
{
|
|
|
- return hasView(EViewType::ViewSerialSettings) &&
|
|
|
+ return hasView(EViewType::ViewSerialDeviceTree) &&
|
|
|
+ hasView(EViewType::ViewSerialModbusConfig) &&
|
|
|
+ hasView(EViewType::ViewSerialSettings) &&
|
|
|
hasView(EViewType::ViewSerialData);
|
|
|
}
|
|
|
|
|
|
@@ -383,6 +353,8 @@ void ViewInstanceManager::destroySerialComponents()
|
|
|
|
|
|
// 定义需要销毁的串口特有组件类型(不包括共享组件)
|
|
|
QList<EViewType> serialViewTypes = {
|
|
|
+ EViewType::ViewSerialDeviceTree,
|
|
|
+ EViewType::ViewSerialModbusConfig,
|
|
|
EViewType::ViewSerialSettings,
|
|
|
EViewType::ViewSerialData
|
|
|
};
|
|
|
@@ -480,6 +452,24 @@ void ViewInstanceManager::createNetworkComponents(QWidget* pParent, DeviceBusCor
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 创建网络页面的设备树组件(独立实例)
|
|
|
+ DeviceTreeWidget* pDeviceTree = new DeviceTreeWidget(pParent);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 网络页面 DeviceTreeWidget 对象已创建";
|
|
|
+
|
|
|
+ // 设置 API 到设备树
|
|
|
+ pDeviceTree->setAPI(pApi);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 网络页面 DeviceTreeWidget::setAPI() 已调用";
|
|
|
+
|
|
|
+ registerView(EViewType::ViewNetworkDeviceTree, pDeviceTree);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 网络页面 DeviceTreeWidget 已注册到管理器";
|
|
|
+
|
|
|
+ // 创建网络页面的 Modbus 配置组件(独立实例)
|
|
|
+ ModbusConfigWidget* pModbusConfig = new ModbusConfigWidget(pParent);
|
|
|
+ pModbusConfig->setBusCore(pBusCore);
|
|
|
+ pModbusConfig->setAPI(pApi);
|
|
|
+ registerView(EViewType::ViewNetworkModbusConfig, pModbusConfig);
|
|
|
+ LOG_DEBUG() << "ViewInstanceManager: 网络页面 ModbusConfigWidget 已创建并注册";
|
|
|
+
|
|
|
// 创建网络设置组件(网络特有)
|
|
|
NetworkSettingsWidget* pNetworkSettings = new NetworkSettingsWidget(pParent);
|
|
|
if (!pNetworkSettings) {
|
|
|
@@ -500,12 +490,14 @@ void ViewInstanceManager::createNetworkComponents(QWidget* pParent, DeviceBusCor
|
|
|
registerView(EViewType::ViewNetworkData, pNetworkData);
|
|
|
LOG_DEBUG() << "ViewInstanceManager: NetworkDataWidget 已创建并注册";
|
|
|
|
|
|
- LOG_INFO() << "ViewInstanceManager: 网络特有组件创建完成,共创建 2 个组件";
|
|
|
+ LOG_INFO() << "ViewInstanceManager: 网络特有组件创建完成,共创建 4 个组件";
|
|
|
}
|
|
|
|
|
|
bool ViewInstanceManager::hasNetworkComponents() const
|
|
|
{
|
|
|
- return hasView(EViewType::ViewNetworkSettings) &&
|
|
|
+ return hasView(EViewType::ViewNetworkDeviceTree) &&
|
|
|
+ hasView(EViewType::ViewNetworkModbusConfig) &&
|
|
|
+ hasView(EViewType::ViewNetworkSettings) &&
|
|
|
hasView(EViewType::ViewNetworkData);
|
|
|
}
|
|
|
|
|
|
@@ -515,6 +507,8 @@ void ViewInstanceManager::destroyNetworkComponents()
|
|
|
|
|
|
// 定义需要销毁的网络特有组件类型(不包括共享组件)
|
|
|
QList<EViewType> networkViewTypes = {
|
|
|
+ EViewType::ViewNetworkDeviceTree,
|
|
|
+ EViewType::ViewNetworkModbusConfig,
|
|
|
EViewType::ViewNetworkSettings,
|
|
|
EViewType::ViewNetworkData
|
|
|
};
|
|
|
@@ -570,28 +564,32 @@ void ViewInstanceManager::initializeConnections()
|
|
|
}
|
|
|
|
|
|
// 获取主要视图实例
|
|
|
- DeviceTreeWidget* pDeviceTree = getDeviceTreeWidget();
|
|
|
+ DeviceTreeWidget* pSerialDeviceTree = getSerialDeviceTreeWidget();
|
|
|
+ DeviceTreeWidget* pNetworkDeviceTree = getNetworkDeviceTreeWidget();
|
|
|
SerialDockPage* pSerialDockPage = getSerialDockPage();
|
|
|
NetworkDockPage* pNetworkDockPage = getNetworkDockPage();
|
|
|
ViewCan* pViewCan = getViewCan();
|
|
|
|
|
|
- // 连接设备树到各页面
|
|
|
- if (pDeviceTree && pSerialDockPage) {
|
|
|
- pConnector->connectTreeToSerialDockPage(pDeviceTree, pSerialDockPage);
|
|
|
+ // 连接串口页面的设备树到串口页面
|
|
|
+ if (pSerialDeviceTree && pSerialDockPage) {
|
|
|
+ pConnector->connectTreeToSerialDockPage(pSerialDeviceTree, pSerialDockPage);
|
|
|
}
|
|
|
|
|
|
- if (pDeviceTree && pNetworkDockPage) {
|
|
|
- pConnector->connectTreeToNetworkDockPage(pDeviceTree, pNetworkDockPage);
|
|
|
+ // 连接网络页面的设备树到网络页面
|
|
|
+ if (pNetworkDeviceTree && pNetworkDockPage) {
|
|
|
+ pConnector->connectTreeToNetworkDockPage(pNetworkDeviceTree, pNetworkDockPage);
|
|
|
}
|
|
|
|
|
|
- if (pDeviceTree && pViewCan) {
|
|
|
- pConnector->connectTreeToViewCan(pDeviceTree, pViewCan);
|
|
|
+ // 连接设备树到 CAN 视图(使用串口页面的设备树,因为 CAN 通常与串口相关)
|
|
|
+ if (pSerialDeviceTree && pViewCan) {
|
|
|
+ pConnector->connectTreeToViewCan(pSerialDeviceTree, pViewCan);
|
|
|
}
|
|
|
|
|
|
// 获取子组件并建立连接
|
|
|
SerialSettingsWidget* pSerialSettings = getSerialSettingsWidget();
|
|
|
NetworkSettingsWidget* pNetworkSettings = getNetworkSettingsWidget();
|
|
|
- ModbusConfigWidget* pModbusConfig = getModbusConfigWidget();
|
|
|
+ ModbusConfigWidget* pSerialModbusConfig = getSerialModbusConfigWidget();
|
|
|
+ ModbusConfigWidget* pNetworkModbusConfig = getNetworkModbusConfigWidget();
|
|
|
SerialDataWidget* pSerialData = getSerialDataWidget();
|
|
|
NetworkDataWidget* pNetworkData = getNetworkDataWidget();
|
|
|
RawDataTableWidget* pRawDataTable = getRawDataTableWidget();
|
|
|
@@ -602,21 +600,21 @@ void ViewInstanceManager::initializeConnections()
|
|
|
// ========================================================================
|
|
|
|
|
|
// 串口设置 -> Modbus配置(同步串口参数)
|
|
|
- if (pSerialSettings && pModbusConfig) {
|
|
|
- pConnector->connectSerialSettingsToModbusConfig(pSerialSettings, pModbusConfig);
|
|
|
+ if (pSerialSettings && pSerialModbusConfig) {
|
|
|
+ pConnector->connectSerialSettingsToModbusConfig(pSerialSettings, pSerialModbusConfig);
|
|
|
}
|
|
|
|
|
|
// Modbus配置 -> SerialDockPage(命令生成和配置应用)
|
|
|
- if (pModbusConfig && pSerialDockPage) {
|
|
|
- pConnector->connectModbusConfigToSerialDockPage(pModbusConfig, pSerialDockPage);
|
|
|
+ if (pSerialModbusConfig && pSerialDockPage) {
|
|
|
+ pConnector->connectModbusConfigToSerialDockPage(pSerialModbusConfig, pSerialDockPage);
|
|
|
// 连接配置应用信号
|
|
|
- connect(pModbusConfig, &ModbusConfigWidget::configApplied,
|
|
|
+ connect(pSerialModbusConfig, &ModbusConfigWidget::configApplied,
|
|
|
pSerialDockPage, &SerialDockPage::onModbusConfigApplied);
|
|
|
}
|
|
|
|
|
|
// Modbus配置 -> 串口数据(直接连接,用于快速发送命令)
|
|
|
- if (pModbusConfig && pSerialData) {
|
|
|
- pConnector->connectModbusConfigToSerialData(pModbusConfig, pSerialData);
|
|
|
+ if (pSerialModbusConfig && pSerialData) {
|
|
|
+ pConnector->connectModbusConfigToSerialData(pSerialModbusConfig, pSerialData);
|
|
|
}
|
|
|
|
|
|
// 串口设置 -> SerialDockPage(配置应用)
|
|
|
@@ -649,9 +647,9 @@ void ViewInstanceManager::initializeConnections()
|
|
|
// ========================================================================
|
|
|
|
|
|
// Modbus配置 -> NetworkDockPage(命令生成和配置应用)
|
|
|
- if (pModbusConfig && pNetworkDockPage) {
|
|
|
+ if (pNetworkModbusConfig && pNetworkDockPage) {
|
|
|
// 连接配置应用信号
|
|
|
- connect(pModbusConfig, &ModbusConfigWidget::configApplied,
|
|
|
+ connect(pNetworkModbusConfig, &ModbusConfigWidget::configApplied,
|
|
|
pNetworkDockPage, &NetworkDockPage::onModbusConfigApplied);
|
|
|
LOG_INFO() << "ViewInstanceManager: Modbus配置 -> NetworkDockPage 连接已建立";
|
|
|
}
|
|
|
@@ -691,13 +689,22 @@ void ViewInstanceManager::initializeConnections()
|
|
|
// 设备树与数据表格的连接
|
|
|
// ========================================================================
|
|
|
|
|
|
- // 设备树 -> 数据表格
|
|
|
- if (pDeviceTree && pRawDataTable) {
|
|
|
- pConnector->connectDeviceSelectionToRawDataTable(pDeviceTree, pRawDataTable);
|
|
|
+ // 串口页面的设备树 -> 数据表格
|
|
|
+ if (pSerialDeviceTree && pRawDataTable) {
|
|
|
+ pConnector->connectDeviceSelectionToRawDataTable(pSerialDeviceTree, pRawDataTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pSerialDeviceTree && pBusDataTable) {
|
|
|
+ pConnector->connectDeviceSelectionToBusDataTable(pSerialDeviceTree, pBusDataTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 网络页面的设备树 -> 数据表格(两个设备树都连接到同一个数据表格)
|
|
|
+ if (pNetworkDeviceTree && pRawDataTable) {
|
|
|
+ pConnector->connectDeviceSelectionToRawDataTable(pNetworkDeviceTree, pRawDataTable);
|
|
|
}
|
|
|
|
|
|
- if (pDeviceTree && pBusDataTable) {
|
|
|
- pConnector->connectDeviceSelectionToBusDataTable(pDeviceTree, pBusDataTable);
|
|
|
+ if (pNetworkDeviceTree && pBusDataTable) {
|
|
|
+ pConnector->connectDeviceSelectionToBusDataTable(pNetworkDeviceTree, pBusDataTable);
|
|
|
}
|
|
|
|
|
|
// 标记连接已初始化
|