#pragma once #include "iSubWnd.h" #include "mSubWndAna_global.h" class iGuiPlot; class iGuiPlotEx; class iWxOptionResCompare; class ZxRstUtils; class iSubWndFitting; class iWxResult; class iWxBase; class iResultInfo; class ZxMdiArea; class ZxRstUtils; class iDockBaseWx; class iWxResCpOption; class M_SUB_WND_ANA_EXPORT iSubWndResCompare : public iSubWnd { Q_OBJECT public: explicit iSubWndResCompare(QWidget *parent = 0, QString sExt = ""); ~iSubWndResCompare(); // 初始化入口 virtual void initUI(); // 配置窗体 virtual void configWnd(QString sPrevInfo); // 对比选项OK,触发对比视图刷新 void runRstCpBy(QVector& vecCpUtils, \ QVector& vecContents, \ bool bSegSame, \ bool bSoleGridMode); // 追加/删除 bool runRstCpAddBy(QVector& vec); bool runRstCpRemoveBy(QVector& vec); // 刷新对比结果视窗 void dealwithCps(); // 处理浮动窗口 void dealCpOptions(); void dealCpOptions_add(ZxRstUtils* pRst); // 布局调整 virtual void layoutSubWnds(WndLayoutMode oWlm); // 对于MdiArea中的窗体进行重新布局 void _layoutSubWnds(); protected: // 初始化UI void initMdi(); virtual void initUiDockPtys(); virtual void initUiDockWxs(); // 对比窗体创建 void initSubWxs(); QWidget* createSubWxOf(ContentCpType& o); QWidget* createSubWxOf_Chart(ContentCpType& o); QWidget* createSubWxOf_MP(ContentCpType& o); QWidget* createSubWxOf_PF(ContentCpType& o); QWidget* createSubWxOf_DataInput(ContentCpType& o); // 执行命令:通常来自Ribbon virtual bool runCmdBy(QString sName, QString sID); /// @brief 命令是否Enabled的状态判断,通常来自Ribbon /// @param b (out),true:Enabled false:disabled /// @param sName (in),Cmd Name /// @param nID (in),Cmd ID /// @param bLicensed (in),当前是否有授权 /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) virtual bool checkCmdEnable(bool &b, \ QString sName, int nID, \ bool bLicensed); // 绘图部分处理 void dealPlots(); void dealPlots_Remove(ContentCpType o, iGuiPlot*& pWxPlot); void dealPlots_Add(ContentCpType o, iGuiPlot*& pWxPlot); // 解析 bool parseRst2Plot(ContentCpType o, ZxRstUtils* pRstUtils, iGuiPlot *pWxPlot, int nClrIndex); bool parseSubWnd2Plot(ContentCpType o, iSubWndFitting* pSubWnd, iGuiPlot *pWxPlot, int nClrIndex); bool orgaRstName(QString& s, QString& sGroup, ZxRstUtils* pRstUtils); bool orgaSubWndName(QString& s, QString& sGroup, iSubWndFitting* pSubWnd); void addCurve2Plot(ContentCpType o, QVector& vec, iGuiPlot* pWxPlot, QString sCurveName, int nClrIndex); // 结果表格部分 bool dealResults(QMap& mapWxs); bool organizeResults_MP(QStringList& listTags, \ QVector >& vvecInfosM, \ QVector >& vvecInfosP); bool organizeResults_Chart(QMap& mapWxs, \ QVector >& vvecInfosC); QString orgaResultTitle(); // 成果解析部分 bool parseRsts2ResultInfo(ZxRstUtils* pRstUtils, QVector*& pVecInfosM, QVector*& pVecInfosP); bool parseSubWnd2ResultInfo(iSubWndFitting* pSubWnd, QVector*& pVecInfosM, QVector*& pVecInfosP); public slots: // MdiSize void slotMdiSizeChanged(); // 在布局前对窗体顺序进行调整 void slotAdjustMdiAreaWnds(QList& listSubWnds); // 浮动窗口选项改变 // 单个的选择状态改变 void slotCpItemChanged(QString s, IxSerDes* pRst, bool bSel); // 整体改变 void slotCpItemsChanged(QMap& map); // 透明度 void slotWndOpacityChanged(double d); signals: private: ZxMdiArea* m_pMdiArea; // 浮动 iDockBaseWx* m_pWxDockOption; iWxResCpOption* m_pWxResCpOption; // 当前参与对比的对象,可能是SubWnd,也可能是ZxRstUtils QVector m_vecCpRstFroms; // Plot是否加载的标识 QMap m_mapLoadFlags; // 当前参与对比的内容 QVector m_vecCpTypes; // 临时 QMap m_mapWxs; // 流动段是否一致 bool m_bSegSame; // 是否单一表格模式 bool m_bSoleGridMode; };