|
|
|
|
@ -118,10 +118,40 @@ nmSubWndUtils::nmSubWndUtils()
|
|
|
|
|
|
|
|
|
|
nmSubWndUtils::~nmSubWndUtils()
|
|
|
|
|
{
|
|
|
|
|
setObservedTabWidget(nullptr);
|
|
|
|
|
delete m_pNumericalSaveSession;
|
|
|
|
|
m_pNumericalSaveSession = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ZxTabWidget* nmSubWndUtils::getTabWidget() const
|
|
|
|
|
{
|
|
|
|
|
return m_pTabWx.data();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmSubWndUtils::setObservedTabWidget(ZxTabWidget* pTabWx)
|
|
|
|
|
{
|
|
|
|
|
ZxTabWidget* pOldTabWx = m_pTabWx.data();
|
|
|
|
|
if(pOldTabWx == pTabWx) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(pOldTabWx != nullptr) {
|
|
|
|
|
disconnect(pOldTabWx, SIGNAL(currentChanged(int)),
|
|
|
|
|
this, SLOT(slotHandleTabChange(int)));
|
|
|
|
|
disconnect(pOldTabWx, SIGNAL(destroyed(QObject*)),
|
|
|
|
|
this, SLOT(slotHandleTabWidgetDestroyed(QObject*)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_pTabWx = pTabWx;
|
|
|
|
|
if(pTabWx != nullptr) {
|
|
|
|
|
connect(pTabWx, SIGNAL(currentChanged(int)),
|
|
|
|
|
this, SLOT(slotHandleTabChange(int)), Qt::UniqueConnection);
|
|
|
|
|
connect(pTabWx, SIGNAL(destroyed(QObject*)),
|
|
|
|
|
this, SLOT(slotHandleTabWidgetDestroyed(QObject*)),
|
|
|
|
|
Qt::UniqueConnection);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
iSubWnd* nmSubWndUtils::createSubWnd(const iRibbonXmlCmd* pCmdInfo, \
|
|
|
|
|
const ZxMainWindow* pMainWnd, \
|
|
|
|
|
bool& bCreatedNewOne)
|
|
|
|
|
@ -288,11 +318,7 @@ bool nmSubWndUtils::runCmdBySpecial(const iRibbonXmlCmd* pCmdInfo, \
|
|
|
|
|
ZxTabWidget* pTabWx = pMainWnd1->getCurTabWx();
|
|
|
|
|
|
|
|
|
|
if(nullptr != pTabWx) {
|
|
|
|
|
if(pUtilsInstance->m_pTabWx == nullptr || pUtilsInstance->m_pTabWx != pTabWx) {
|
|
|
|
|
pUtilsInstance->m_pTabWx = pTabWx;
|
|
|
|
|
disconnect(pUtilsInstance->m_pTabWx, SIGNAL(currentChanged(int)), pUtilsInstance, SLOT(slotHandleTabChange(int)));
|
|
|
|
|
connect(pUtilsInstance->m_pTabWx, SIGNAL(currentChanged(int)), pUtilsInstance, SLOT(slotHandleTabChange(int)));
|
|
|
|
|
}
|
|
|
|
|
pUtilsInstance->setObservedTabWidget(pTabWx);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -976,11 +1002,7 @@ bool nmSubWndUtils::loadRsts(iSubWnd* pSubWnd, \
|
|
|
|
|
ZxTabWidget* pTabWx = pMainWnd1->getCurTabWx();
|
|
|
|
|
|
|
|
|
|
if(nullptr != pTabWx) {
|
|
|
|
|
if(pUtilsInstance->m_pTabWx == nullptr || pUtilsInstance->m_pTabWx != pTabWx) {
|
|
|
|
|
pUtilsInstance->m_pTabWx = pTabWx;
|
|
|
|
|
disconnect(pUtilsInstance->m_pTabWx, SIGNAL(currentChanged(int)), pUtilsInstance, SLOT(slotHandleTabChange(int)));
|
|
|
|
|
connect(pUtilsInstance->m_pTabWx, SIGNAL(currentChanged(int)), pUtilsInstance, SLOT(slotHandleTabChange(int)));
|
|
|
|
|
}
|
|
|
|
|
pUtilsInstance->setObservedTabWidget(pTabWx);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1180,13 +1202,15 @@ bool iWxBase::loadFromByteArr(QByteArray& v)
|
|
|
|
|
|
|
|
|
|
void nmSubWndUtils::slotHandleTabChange(int index)
|
|
|
|
|
{
|
|
|
|
|
// 找到索引对应的流动段分析窗体
|
|
|
|
|
if(m_pTabWx == nullptr) {
|
|
|
|
|
// 只处理当前监听容器的信号。旧容器的排队信号不能操作新成果页签。
|
|
|
|
|
ZxTabWidget* pSignalTabWx = qobject_cast<ZxTabWidget*>(sender());
|
|
|
|
|
QPointer<ZxTabWidget> pTabWx = m_pTabWx;
|
|
|
|
|
if(pTabWx.isNull() || pSignalTabWx != pTabWx.data() || index < 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(index >= 0 && index < m_pTabWx->count()) {
|
|
|
|
|
iSubWnd* pSubWnd = dynamic_cast<iSubWnd*>(m_pTabWx->widget(index));
|
|
|
|
|
if(index < pTabWx->count()) {
|
|
|
|
|
iSubWnd* pSubWnd = dynamic_cast<iSubWnd*>(pTabWx->widget(index));
|
|
|
|
|
|
|
|
|
|
if(pSubWnd == nullptr) {
|
|
|
|
|
return;
|
|
|
|
|
@ -1213,7 +1237,7 @@ void nmSubWndUtils::slotHandleTabChange(int index)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 如果地图和网格窗体存在,则更新
|
|
|
|
|
QVector<iSubWnd*> vecSubWnds = pMainWnd->getAllSubWndsOf(m_pTabWx);
|
|
|
|
|
QVector<iSubWnd*> vecSubWnds = pMainWnd->getAllSubWndsOf(pTabWx.data());
|
|
|
|
|
|
|
|
|
|
foreach(iSubWnd* pSub, vecSubWnds) {
|
|
|
|
|
nmSubWndMain* pMap = dynamic_cast<nmSubWndMain*>(pSub);
|
|
|
|
|
@ -1247,6 +1271,12 @@ void nmSubWndUtils::slotHandleTabChange(int index)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmSubWndUtils::slotHandleTabWidgetDestroyed(QObject* pObject)
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(pObject);
|
|
|
|
|
m_pTabWx = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 监听外层MDI成果窗口切换
|
|
|
|
|
void nmSubWndUtils::connectMdiActivation(iSubWndFitting* pSubWndF)
|
|
|
|
|
{
|
|
|
|
|
@ -1382,6 +1412,11 @@ void nmSubWndUtils::slotHandleMdiClosing(bool& bAllowClose)
|
|
|
|
|
// 用户确认关闭成果窗口后再清理Map,避免取消关闭时误清当前显示。
|
|
|
|
|
ZxMdiSubWindow* pMdiChild = qobject_cast<ZxMdiSubWindow*>(sender());
|
|
|
|
|
if(pMdiChild != nullptr) {
|
|
|
|
|
if(m_pMainWnd != nullptr &&
|
|
|
|
|
m_pMainWnd->getTabWxOf(pMdiChild) == m_pTabWx.data()) {
|
|
|
|
|
// 页签内部对象开始析构前停止监听,避免析构期currentChanged进入槽函数。
|
|
|
|
|
setObservedTabWidget(nullptr);
|
|
|
|
|
}
|
|
|
|
|
detachMdiFittingPlots(pMdiChild);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -1395,6 +1430,11 @@ void nmSubWndUtils::slotHandleMdiDestroyed(QObject* pObject)
|
|
|
|
|
// 切换外层MDI成果窗口后,同步当前流动段分析窗口
|
|
|
|
|
void nmSubWndUtils::slotHandleMdiSubWindowActivated(QMdiSubWindow* pSubWindow)
|
|
|
|
|
{
|
|
|
|
|
if(pSubWindow == nullptr) {
|
|
|
|
|
setObservedTabWidget(nullptr);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ZxMdiSubWindow* pMdiChild = qobject_cast<ZxMdiSubWindow*>(pSubWindow);
|
|
|
|
|
if(pMdiChild == nullptr || m_pMainWnd == nullptr) {
|
|
|
|
|
return;
|
|
|
|
|
@ -1407,14 +1447,11 @@ void nmSubWndUtils::slotHandleMdiSubWindowActivated(QMdiSubWindow* pSubWindow)
|
|
|
|
|
|
|
|
|
|
// 每个成果窗口内部都有自己的页签容器。
|
|
|
|
|
// 切换外层成果后,保存当前容器并继续监听该成果内部的页签切换。
|
|
|
|
|
m_pTabWx = pTabWx;
|
|
|
|
|
connect(m_pTabWx, SIGNAL(currentChanged(int)),
|
|
|
|
|
this, SLOT(slotHandleTabChange(int)),
|
|
|
|
|
Qt::UniqueConnection);
|
|
|
|
|
setObservedTabWidget(pTabWx);
|
|
|
|
|
|
|
|
|
|
// 找到当前成果中的流动段分析窗口。
|
|
|
|
|
// 窗口ID为3004,后续的数据中心和左侧面板都属于这个分析窗口。
|
|
|
|
|
QVector<iSubWnd*> vecSubWnds = m_pMainWnd->getAllSubWndsOf(m_pTabWx, "3004", false);
|
|
|
|
|
QVector<iSubWnd*> vecSubWnds = m_pMainWnd->getAllSubWndsOf(pTabWx, "3004", false);
|
|
|
|
|
if(vecSubWnds.isEmpty()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|