#pragma once #include "iWxBase.h" #include "mGuiJob_global.h" //class iModelDesc; class ZxPlot; class iWxModelSketch; class iModelOption; class iModelInfoBase; class iGridLineUtils; namespace Ui { class iWxModelOption; } class M_GUI_JOB_EXPORT iWxModelOption : public iWxBase { Q_OBJECT public: explicit iWxModelOption(QWidget *parent = 0); ~iWxModelOption(); // 初始化 virtual void initUI(); // 切换模型时刷新 virtual void refreshBrothers(bool bfresh = true); // 组织结果数据,注:vec不进行clear,由调用方自行clear virtual bool organizeResults(QVector& vec, QString sType); // 返回当前选中的 iModelOption* getOption(); // 示意图绘图(多幅,弹出对话框) virtual void showSketchCharts(); // FitModel之后改变一些状态 void dealwithFitOption(iModelOption* p); void changeListItem(QListWidget* pListWx, \ QString sItem, QString sKey, \ bool bSelectOnly = true); void changeRowLineItem(iGridLineUtils* pLineUtils, \ QString sItem, QString sKey, \ bool bSelectOnly = true); // 得到聚合物中启动低渗的按钮状态 bool getCbxStatePF(); protected: // 新的listwidget展示模式 void initNovelListWxs(); QWidget* initNovelListWxOf(QString sType, QListWidget*& pListWx); void fillNovelListWxOf(QListWidget* pListWx, QString sType); void initFromLasts(); #ifdef _SCAN_OLD_CODES_ void initUI_TopSpecial(QVBoxLayout*& pLayout); //该函数暂时不启用,后续可能需要重启 void initUI_ModelListWxs(); void initUI_ModelGridLines(QVector& vec, \ QVBoxLayout* pLayout, \ QString sType = ""); QVector classifyModelInfos(QVector& vec, \ QString sType); #endif // 填充List void fillListWx(QListWidget* pListWx, QString sType, bool bConsiderSpecial = false, bool bIsSpecial = false); //考虑到Well也要做筛选这里单独写一个函数 void fillWelListWx(QListWidget* pListWx, QString sType, bool bConsiderSpecial = false, bool bIsSpecial = false); //由于WEl决定Res选项 void fillResListWx(QListWidget* pListWx, QString sType, bool bConsiderSpecial = false, bool bIsSpecial = false); // 如果是井切换 bool dealwithWellListWx(); // 界面数据到Option载体 virtual void freshUi2Option(); void _freshUiListWx2Option(QListWidget* pListWx, QString sKey); void _freshUiCheckBox2Option(QCheckBox* pCbx, QString sKey); // 最近选用 void freshUiByOpenRecents(); void fillRecentModels(); void refreshRecentModels(QString sModel); void freshRecentItem2ListWxs(QString s); public: // 序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); protected: // 对于序列化,父类的QListWidget处理已经不能满足要求,故重载该函数 virtual bool _writeCtrl(ZxSerializer* ser, QWidget* p, QString& sTag); virtual bool _readCtrl(ZxSerializer* ser, QWidget*& p, QString& sTag); protected: virtual void paintEvent(QPaintEvent *); protected: // 查找组下面的项(如果有)(井型+储层类型) virtual bool findChildItemsOf(QListWidget* pListWx, \ QListWidgetItem* pItem, \ QVector& vecChildItems, \ bool* ptrIsHidden = NULL); void initContextMenu(QListWidget* pListWx, \ QListWidgetItem* pItem, \ bool bHidden); // 切换状态 void changeItemState(QListWidgetItem* pItem, iModelInfoBase* pModelInfo); // 折叠/展开 void expandOrCollapse(bool bExpand); void expandOrCollapseAll(bool bExpand); protected slots: // 模型选择 virtual void slotModelOptionChanged(QString); // 双击(井型+储层类型) virtual void slotListWxItemDoubleClicked(QListWidgetItem* pItem); virtual void slotListWxItemClicked(QListWidgetItem* pItem); // 右键(井型+储层类型) virtual void slotListWxCustomMenu(const QPoint& pos); // 右键菜单 virtual void slotExpandGroup(); virtual void slotCollapseGroup(); virtual void slotExpandGroupAll(); virtual void slotCollapseGroupAll(); // 各自的状态设定,复选框选项 void slotCbxStateChangedLP(); void slotCbxStateChangedPF(); void slotCbxStateChangedSR(); // 筛选部分 void on_btnFilter_clicked(); void on_tbxFilter_textChanged(const QString &arg1); // 最近选用 void on_listWxRecents_doubleClicked(const QModelIndex &index); void on_cbxOpenRecents_clicked(); void on_sbRecentCounts_valueChanged(int arg1); signals: // 模型切换信号 void sigParasChangedEx(iModelOption* ); // 增加这个信号主要增加小信号的选择模式(目前小信号只比普通模式多一条线,增加信号,保证绘制时候出现) void sigCbxStateChanged(bool bSmall); // 聚合物PF void sigCbxStatePfChanged(bool bCheck); protected: Ui::iWxModelOption *ui; QListWidget* m_pListWxWel; QListWidget* m_pListWxRes; QListWidget* m_pListWxWbs; QListWidget* m_pListWxBdy; // 选择内容的载体 iModelOption* m_pOption; // ListWidget Ctrls / CheckBox QMap m_mapSubWxs; // 示意图 iWxModelSketch* m_pWxSketch; // iWxModelSketch* m_pWxTheory; //二者用的同一个窗体,暂未启用,后续考虑 // 临时变量,不涉及序列化 bool m_bRecentDbClick; // 右键菜单 QMenu* m_pContextMenu; // 临时,针对右键操作而设定的对象体 QListWidget* m_pTempListWx; QListWidgetItem* m_pTempListWxItem; };