diff --git a/ModuleConsole/include/LogModuleParamers.h b/ModuleConsole/include/LogModuleParamers.h index 3a8bfa0..96b8ec0 100644 --- a/ModuleConsole/include/LogModuleParamers.h +++ b/ModuleConsole/include/LogModuleParamers.h @@ -113,6 +113,7 @@ public: QScrollArea *m_pDialogLayout; PaiPushButton *m_pbtnRun; QString m_CurrentSLFFileName; + QToolBar *m_toolBar_plugin = NULL; }; /** diff --git a/ModuleConsole/src/LogModuleParamers.cpp b/ModuleConsole/src/LogModuleParamers.cpp index 37f7052..a6f5bed 100644 --- a/ModuleConsole/src/LogModuleParamers.cpp +++ b/ModuleConsole/src/LogModuleParamers.cpp @@ -66,6 +66,11 @@ BEGIN_OSGGRAPHICS_NAMESPACE; //关闭事件 void CModuleParamers::closeEvent(QCloseEvent *event) { + if (m_toolBar_plugin) + { + m_toolBar_plugin->clear(); + m_toolBar_plugin->hide(); + } } //构造函数 diff --git a/ModuleConsole/src/WorkflowSceneManager.cpp b/ModuleConsole/src/WorkflowSceneManager.cpp index b20f75f..35e02c0 100644 --- a/ModuleConsole/src/WorkflowSceneManager.cpp +++ b/ModuleConsole/src/WorkflowSceneManager.cpp @@ -1350,8 +1350,27 @@ void WorkflowSceneManager::slotAddModule(const QString& moduleName) // pai::objectmodel::PaiWorkflowDataModel* pWorkflow = pModuleConsole->m_pWorkflowDataModel; // ::GetWorkflowConsole()->GetWorkflowWidget()->SetWorkflow(pWorkflow); } + // Plugin ToolBar工具栏 + if (pModuleParamers->m_toolBar_plugin) + pModuleParamers->m_toolBar_plugin->hide(); if(amodule&&amodule->parDialog) { + + if (pModuleParamers->m_toolBar_plugin->isHidden()) + { + // 从插件里获取QAction 显示在Plugin ToolBar工具栏 + pModuleParamers->m_toolBar_plugin->clear(); + for (int i = 0; i < amodule->m_listAct.size(); i++) + { + QAction* pAct = amodule->m_listAct.at(i); + QString sicon = pAct->property("icon_v").toString(); + QIcon imIcon(::GetImagePath() + sicon); + pAct->setIcon(imIcon); + pModuleParamers->m_toolBar_plugin->addAction(pAct); + } + pModuleParamers->m_toolBar_plugin->show(); + } + QRect rt=amodule->parDialog->geometry(); pModuleParamers->m_pParameterEditor->setVisible(false); pModuleParamers->m_pDialogLayout->setVisible(true); diff --git a/WellLogModule/include/PELibraryModule.h b/WellLogModule/include/PELibraryModule.h index 6740822..ff9a883 100644 --- a/WellLogModule/include/PELibraryModule.h +++ b/WellLogModule/include/PELibraryModule.h @@ -110,6 +110,7 @@ public: struct LogType *pLogType; struct ErrorInf *errorinf; QDialog *parDialog; + QList m_listAct; QStringList OriginInNames; QStringList OriginOutNames; bool InitModule(QWidget*p=NULL); diff --git a/WellLogModule/src/PELibraryModule.cpp b/WellLogModule/src/PELibraryModule.cpp index f574cd1..6e6418e 100644 --- a/WellLogModule/src/PELibraryModule.cpp +++ b/WellLogModule/src/PELibraryModule.cpp @@ -15,6 +15,7 @@ #include "ObjWelllogRound.h" #include "ParameterItem.h" #include +#include // void OSGFRAMEWORK_EXPORT AppendConsole(pai::log::Priority priority,const QString &output); using namespace pai::module; @@ -1231,6 +1232,8 @@ bool PELibraryModule::validate() bool PELibraryModule::InitModule(QWidget*pWidget) { typedef QDialog *(* LPDDIALOG)(QWidget*pWidget); + typedef void* (*LPD_ACTION_FUNC)(int* count); + typedef int (* LPFNDLLFUNC)(); LPFNDLLFUNC lpfnDllFunc,lpfnInitDllFunc; LPDDIALOG m_parDialog; @@ -1290,6 +1293,19 @@ bool PELibraryModule::InitModule(QWidget*pWidget) if(m_parDialog) { if(errorinf) errorinf->ErrorNo=0; parDialog=m_parDialog(pWidget); + + LPD_ACTION_FUNC ACT_Func = (LPD_ACTION_FUNC)Methodlib.resolve("getAction_CApi"); + if (ACT_Func) + { + int ncount = 0; + QAction** actArr = (QAction**)ACT_Func(&ncount); + for (int i = 0; i < ncount; i++) + { + QAction* pAct = actArr[i]; + QString s = pAct->property("icon_v").toString(); + m_listAct << actArr[i]; + } + } if(errorinf) { if(errorinf->ErrorNo<0) { if(parDialog) { diff --git a/logPlus/logPlus.pro b/logPlus/logPlus.pro index 68a1648..d5fc172 100644 --- a/logPlus/logPlus.pro +++ b/logPlus/logPlus.pro @@ -74,6 +74,7 @@ SOURCES += \ mainwindow.cpp \ main.cpp \ mainwindowcurve.cpp \ + mainwindowsplitter.cpp \ newheaddialog.cpp \ preqtablewidget.cpp \ qmycustomplot.cpp \ @@ -137,6 +138,7 @@ HEADERS += \ fracsel.h \ mainwindow.h \ mainwindowcurve.h \ + mainwindowsplitter.h \ newheaddialog.h \ preqtablewidget.h \ qmycustomplot.h \ @@ -166,6 +168,7 @@ FORMS += \ interfaceWidget.ui \ mainwindow.ui \ mainwindowcurve.ui \ + mainwindowsplitter.ui \ newheaddialog.ui \ qtprojectwidgets.ui diff --git a/logPlus/mainwindow.cpp b/logPlus/mainwindow.cpp index df15287..4350e2d 100644 --- a/logPlus/mainwindow.cpp +++ b/logPlus/mainwindow.cpp @@ -24,6 +24,8 @@ #include "TxtEditorDlg.h" #include "ObjWell.h" #include "wellloginformation.h" +#include "mainwindowsplitter.h" + using namespace pai::gui; //以下参数从配置文件读取 int g_iIndex = 0; @@ -338,6 +340,11 @@ void MainWindow::s_Open() void MainWindow::s_SaveProject() { + QWidget * pMyWidget = CallPlugin::getInstance()->getPluginWidget(DEMO_PLUGIN, (QWidget *)this); + if (pMyWidget != nullptr) + { + pMyWidget->show(); + } // //加载插件显示 // QWidget * pMyWidget = CallPlugin::getInstance()->getPluginWidget(PLUGINUNIT, (QWidget *)this); // if (pMyWidget != nullptr) @@ -394,11 +401,14 @@ void MainWindow::s_showView() tr("多井图文件(*.json)")); if (fileFull.isEmpty()) { + MainWindowSplitter* mainSplitter = new MainWindowSplitter(); + mainSplitter->setSplitterWidget(m_projectWidgets); + m_centerWidgets->addTab(mainSplitter, "解释视图"); //---- - MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区 - // 左侧树 - mainWindowCurve->m_leftWidgets = m_projectWidgets; - m_centerWidgets->addTab(mainWindowCurve, "解释视图"); +// MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区 +// // 左侧树 +// mainWindowCurve->m_leftWidgets = m_projectWidgets; +// m_centerWidgets->addTab(mainWindowCurve, "解释视图"); return; } @@ -406,10 +416,16 @@ void MainWindow::s_showView() QString fileName = fileInfo.fileName(); // 获取文件名 //---- - MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区 - // 左侧树 - mainWindowCurve->m_leftWidgets = m_projectWidgets; - m_centerWidgets->addTab(mainWindowCurve, fileName); + //MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区 + //// 左侧树 + //mainWindowCurve->m_leftWidgets = m_projectWidgets; + //m_centerWidgets->addTab(mainWindowCurve, fileName); + + MainWindowSplitter* mainSplitter = new MainWindowSplitter(); + mainSplitter->setSplitterWidget(m_projectWidgets); + m_centerWidgets->addTab(mainSplitter, fileName); + + MainWindowCurve *mainWindowCurve = mainSplitter->getMainWindowCurve(); mainWindowCurve->Open(fileFull); //QFuture future = QtConcurrent::run(std::bind(&MainWindowCurve::s_Open, mainWindowCurve, fileFull)); diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index e1175a4..25129ec 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -13,6 +13,7 @@ #include "LogModuleParamers.h" #include "LogModuleConsole.h" #include "DepPairs.h" +#include "mainwindowsplitter.h" extern int g_iOneWidth; //道宽 extern QString g_prjname; @@ -34,6 +35,8 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) : { ui->setupUi(this); + m_pParentWin = qobject_cast(parent); + QtCommonClass *qtCommon = new QtCommonClass(this); m_strUuid = qtCommon->getUUid(); @@ -41,6 +44,7 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) : addToolBar(Qt::LeftToolBarArea, ui->toolBar); addToolBar(Qt::RightToolBarArea, ui->toolBar_2); addToolBar(Qt::RightToolBarArea, ui->toolBar_3); + addToolBar(Qt::RightToolBarArea, ui->toolBar_plugin); //初始化工具栏 initMainToolBar(); @@ -51,7 +55,7 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) : //拼接 initToolBar_3(); ui->toolBar_3->hide(); - + ui->toolBar_plugin->hide(); //加载样式 loadStyle(":/qrc/qss/flatgray.css"); @@ -158,6 +162,11 @@ MainWindowCurve::~MainWindowCurve() delete ui; } +QToolBar * MainWindowCurve::getPluginToolBar() +{ + return ui->toolBar_plugin; +} + //鼠标滚动,通知可视解释窗口 void MainWindowCurve::s_mouseWheel(QWheelEvent *event) { @@ -220,6 +229,7 @@ void MainWindowCurve::initMainToolBar() ui->mainToolBar->addAction(m_executeDepthShiftAc); ui->mainToolBar->addAction(m_joindepthAc); ui->mainToolBar->addAction(m_ModuleOpenAc); + // ui->mainToolBar->addAction(m_runAc); // ui->mainToolBar->addAction(m_debugAc); // ui->mainToolBar->addAction(m_loadAc); @@ -2298,41 +2308,7 @@ void MainWindowCurve::s_ExecuteMerge() void MainWindowCurve::s_ModuleOpen() { - QString strSlfName = ""; - QString strLeft = m_leftWidgets->getLeftTreeString(); - if(strLeft.length() > 0) - { - QStringList list = strLeft.split("#@@#");//QString字符串分割函数 - if (list.size() > 3) - { - strSlfName = list[0]; - QString strWellName = list[1]; - } - } - if (strSlfName.isEmpty()) - { - QMessageBox::information(nullptr, "提示", "请先选中待处理井次"); - return; - } - - CModuleConsole* pModuleConsole = new pai::graphics::CModuleConsole(); - CModuleParamers* pDialog = new CModuleParamers(pModuleConsole);//::CreatParamControlWidget(); - SetWorkflowConsole(pModuleConsole); - pModuleConsole->g_mModuleParamers = pDialog; - pModuleConsole->m_pWorkflowDataModel = new CWellLogWorkflowDataModel(); - pDialog->m_CurrentSLFFileName = strSlfName; - pDialog->CreatParamControlWidget(); - - QString subStr = strSlfName; - int startPos = strSlfName.indexOf("Logdata"); - if (startPos>=0) - { - subStr = subStr.right(strSlfName.length() - startPos - 7); - } - pDialog->setWindowTitle(subStr); - - pDialog->show(); - return; + m_pParentWin->setModuleOpenOrClose(); } //void MainWindowCurve::s_Open(QString fileFull) diff --git a/logPlus/mainwindowcurve.h b/logPlus/mainwindowcurve.h index df252cb..65efbed 100644 --- a/logPlus/mainwindowcurve.h +++ b/logPlus/mainwindowcurve.h @@ -21,6 +21,7 @@ struct SelectTableItem QString m_strLineName=""; QString m_strFormInfoType="";//类型:curve, wave }; +class MainWindowSplitter; namespace Ui { class MainWindowCurve; @@ -34,6 +35,7 @@ public: explicit MainWindowCurve(QWidget *parent = nullptr); ~MainWindowCurve(); + QToolBar * getPluginToolBar(); private: Ui::MainWindowCurve *ui; @@ -52,6 +54,8 @@ public slots: void s_mouseWheel(QWheelEvent *event); public: + MainWindowSplitter* m_pParentWin = NULL; + QString m_strUuid; QStringList m_listWell; //当前选中数据表格 diff --git a/logPlus/mainwindowcurve.ui b/logPlus/mainwindowcurve.ui index 04141b1..1542b5b 100644 --- a/logPlus/mainwindowcurve.ui +++ b/logPlus/mainwindowcurve.ui @@ -15,6 +15,9 @@ + + 3 + @@ -30,7 +33,7 @@ 0 0 800 - 21 + 23 @@ -79,6 +82,17 @@ false + + + toolBar_4 + + + TopToolBarArea + + + false + + diff --git a/logPlus/mainwindowsplitter.cpp b/logPlus/mainwindowsplitter.cpp new file mode 100644 index 0000000..0d51986 --- /dev/null +++ b/logPlus/mainwindowsplitter.cpp @@ -0,0 +1,76 @@ +#include "mainwindowsplitter.h" +#include "ui_mainwindowsplitter.h" +#include "LogModuleParamers.h" +#include "LogModuleConsole.h" + +MainWindowSplitter::MainWindowSplitter(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindowSplitter) +{ + ui->setupUi(this); + + +} + +MainWindowSplitter::~MainWindowSplitter() +{ + delete ui; +} + +void MainWindowSplitter::setSplitterWidget(QtProjectWidgets *pWidgets) +{ + m_mainWindowCurve = new MainWindowCurve(this);//中间工作区 + // 左侧树 + m_mainWindowCurve->m_leftWidgets = pWidgets; + m_PluginToolBar = m_mainWindowCurve->getPluginToolBar(); + + CModuleConsole* pModuleConsole = new pai::graphics::CModuleConsole(); + CModuleParamers* pDialog = new CModuleParamers(pModuleConsole);//::CreatParamControlWidget(); + SetWorkflowConsole(pModuleConsole); + pModuleConsole->g_mModuleParamers = pDialog; + pModuleConsole->m_pWorkflowDataModel = new CWellLogWorkflowDataModel(); + //pDialog->m_CurrentSLFFileName = strSlfName; + pDialog->m_toolBar_plugin = m_PluginToolBar; + pDialog->CreatParamControlWidget(); + + //QString subStr = strSlfName; + //int startPos = strSlfName.indexOf("Logdata"); + //if (startPos >= 0) + //{ + // subStr = subStr.right(strSlfName.length() - startPos - 7); + //} + //pDialog->setWindowTitle(subStr); + + //pDialog->show(); + + m_pVSplitter = new QSplitter(Qt::Horizontal); + + m_pVSplitter->addWidget(m_mainWindowCurve); + m_pVSplitter->addWidget(pDialog); + + setCentralWidget(m_pVSplitter); + + QList sizes; + sizes << this->width() << 0; + m_pVSplitter->setSizes(sizes);//默认隐藏左侧多井图窗口 +} + +void MainWindowSplitter::setModuleOpenOrClose() +{ + QList sizes; + if (m_pVSplitter->widget(1)->width()) { + sizes << width() << 0; + if (m_PluginToolBar) + m_PluginToolBar->hide(); + + } + else { + sizes << width() - 450 << 450; + } + m_pVSplitter->setSizes(sizes);//默认隐藏左侧多井图窗口 +} + +MainWindowCurve* MainWindowSplitter::getMainWindowCurve() +{ + return m_mainWindowCurve; +} diff --git a/logPlus/mainwindowsplitter.h b/logPlus/mainwindowsplitter.h new file mode 100644 index 0000000..4823119 --- /dev/null +++ b/logPlus/mainwindowsplitter.h @@ -0,0 +1,47 @@ +#ifndef MainWindowSplitter_H +#define MainWindowSplitter_H + +#include +#include "mainwindowcurve.h" +#include "qtprojectwidgets.h" + + +#pragma execution_character_set("utf-8") + +namespace Ui { +class MainWindowSplitter; +} + +class MainWindowSplitter : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindowSplitter(QWidget *parent = nullptr); + ~MainWindowSplitter(); + + void setSplitterWidget(QtProjectWidgets *pWidgets); + + void setModuleOpenOrClose(); + + MainWindowCurve* getMainWindowCurve(); + +private: + Ui::MainWindowSplitter *ui; + MainWindowCurve *m_mainWindowCurve = NULL; + QSplitter* m_pVSplitter = NULL; + QToolBar* m_PluginToolBar = NULL; + +public slots: + + + +public: + + QtProjectWidgets *m_leftWidgets = NULL; //左侧工程区 + + + +}; + +#endif // MainWindowSplitter_H diff --git a/logPlus/mainwindowsplitter.ui b/logPlus/mainwindowsplitter.ui new file mode 100644 index 0000000..7eabf37 --- /dev/null +++ b/logPlus/mainwindowsplitter.ui @@ -0,0 +1,22 @@ + + + MainWindowSplitter + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + +