You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

381 lines
13 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/******************************************************************************
Copyright(C):2015~2018 hzleaper
FileName:$FILE_BASE$.$FILE_EXT$
Author:zhikun wu
Email:zk.wu@hzleaper.com
Tools:vs2010 pc on company
Created:$DATE$
History:$DAY$:$MONTH$:$YEAR$ $HOUR$:$MINUTE$
*******************************************************************************/
#ifndef __TP_MAIN_HEADER_H
#define __TP_MAIN_HEADER_H
//#define _LOAD_MAIN_DLL_STATIC
#include "tpGuiHeader.h"
#include <QtWidgets\qwidget.h>
#include <QtCore\qprocess.h>
#include <QtGui\qicon.h>
#include <QtWidgets\qlistwidget.h>
#include <QtCore\qstring.h>
#include <QtCore\qobject.h>
#include <QtGui\qimage.h>
#include <QtGui\qpainter.h>
#include <QtWidgets\qcombobox.h>
#include <QtWidgets\qaction.h>
#include <QtWidgets\qpushbutton.h>
#include <QtWidgets\qlineedit.h>
#include <QtWidgets\qcheckbox.h>
#include <QtWidgets\qlcdnumber.h>
#include <QtWidgets\qlabel.h>
#include <QtWidgets\qcombobox.h>
#include <QtWidgets\qstatusbar.h>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QSpinBox>
#include <QDoubleSpinBox>
//#include "tpProtocol.h"
class TP_PROTOCOL_MESSAGE;
typedef QList<QWidget*> QWidgetList;
typedef QList<QObject*> QObjectList;
typedef QMap<QString, QString> QStrStrMap;
class IMainFilter
{
public:
IMainFilter() {}
virtual ~IMainFilter() {}
virtual int InitMain() = 0;
virtual void FreeMain() = 0;
// 事件响应函数如果返回true则代表后续不需要响应此事件。
// TODO - 现在代码很多没有利用这个返回值。
virtual QWidget* CreateWidget(const QString & className, QWidget * parent, const QString& name) = 0;
virtual bool ActionTrigger(class QAction* pAction, bool bChecked) = 0;
virtual bool OnPaint(QWidget* watched, QPaintEvent* event) = 0;
virtual bool ButtonClicked(class QObject* pButton, bool bChecked) = 0;
virtual bool OnToggled(class QObject* pButton, bool bChecked) = 0;
virtual bool OnPolished(QWidget * watched, QEvent * event) = 0;
virtual bool OnComboxCurrentChanged(QObject * watched, int index) = 0;
virtual bool OnInitMainWindow(QObject * watched) = 0;
virtual bool OnProcessFinished(class QProcess* p, int exitCode, QProcess::ExitStatus exitStatus) = 0;
virtual bool OnProcessError(class QProcess* p, QProcess::ProcessError error) = 0;
virtual bool OnValueChanged(QObject* watched, int i) = 0;
virtual bool OnValueChanged(QObject* watched, double v) = 0;
virtual bool OnValueChanged(QObject* watched, const QString& text) = 0;
virtual bool OnStateChanged(QObject* watched, int state) = 0;
virtual bool OnCurrentChanged(QObject* watched, int index) = 0;
virtual bool OnDoubleClicked(QObject* watched, QMouseEvent* event) = 0;
virtual bool OnMousePress(QObject* watched, QMouseEvent* event) = 0;
virtual bool OnMouseRelease(QObject* watched, QMouseEvent* event) = 0;
virtual bool OnMouseMove(QObject* watched, QMouseEvent* event) = 0;
virtual bool OnNonClientAreaMouseMove(QObject* watched, QMouseEvent* event) = 0;
virtual bool OnNonClientAreaMouseButtonPress(QObject* watched, QMouseEvent* event) = 0;
virtual bool OnKeyPress(QObject* watched, QKeyEvent* event) = 0;
virtual bool OnKeyRelease(QObject* watched, QKeyEvent* event) = 0;
virtual bool OnResize(QWidget* watched, QResizeEvent* event) = 0;
virtual bool OnWidgetClosed(QWidget* watched, QCloseEvent* event) = 0;
virtual bool OnDeferredDelete(QObject* wathced, QEvent* event) = 0;
virtual bool OnVersionUpdate(const QString& sOldVersion, const QString& sNewVersion) = 0;
virtual bool OnLineEditCursorPositionChanged(class QLineEdit* pObj, int nOld, int nNew) = 0;
virtual bool OnLineEditEditingFinished(class QLineEdit* pObj) = 0;
virtual bool OnLineEditSelectionChanged(class QLineEdit* pObj) = 0;
virtual bool OnLineEditTextChanged(class QLineEdit* pObj, const QString& text) = 0;
virtual bool OnLineEditTextEdited(class QLineEdit* pObj, const QString& text) = 0;
virtual bool OnWidgetShow(QWidget* pWidget, QShowEvent* event) = 0;
virtual bool OnWidgetHide(QWidget* pWidget, QHideEvent* event) = 0;
virtual bool OnWheel(QWidget* pWidget, QWheelEvent* event) = 0;
virtual bool onItemSelectionChanged(QWidget* pWidget) = 0;
virtual void onIPCResponse(QSharedPointer<TP_PROTOCOL_MESSAGE> pmsg) = 0;
virtual void OnHandleMessage(const QStringList& listFilterKey, const QJsonObject& jsonObj) = 0;
};
class IMainCallback
{
public:
IMainCallback() {}
virtual ~IMainCallback() {}
//更新某个窗口的的接口在非UI线程中更新窗口时会用signal-slot切换到UI Thread更新窗口
virtual void IUpdateWidget(QWidget* w) = 0;
virtual void IUpdateWidget(const QString& skey, const QObject* parent = NULL) = 0;
//获取DLL路径列表数据在app.json中配置
virtual QStringList IDllPaths() = 0;
//三个设置Widget的包装函数舍弃用下面的 tpfunc_ 开头的inline全局函数
virtual void ISetComboBoxText(const QString& name, const QStrStrMap& textData, QObject* parent = NULL) = 0;
virtual void ISetEditText(const QString& name, const QString& text, QObject* parent = NULL) = 0;
virtual void ISetValue(const QString& name, const QVariant& text, QObject* parent = NULL) = 0;
virtual QObjectList IFindObjects(const QString& objName, QObject* parent = NULL) = 0;
virtual QObjectList IFindObjects(const QStringList& objNames, QObject* parent = NULL) = 0;
virtual QWidgetList FindWidgets(const QString& objName, QObject* parent = NULL) = 0;
virtual QWidgetList FindWidgets(const QRegExp& regExp, QObject* parent = NULL) = 0;
virtual bool IQueueJson(const QString& key, const QJsonObject& json) = 0;
virtual bool IQueuePicture(const QString& name, QImage& img, const QString& format) = 0;
virtual QWidget* IGetWidget(const QString& sKey) = 0;
virtual bool IDelWidget(const QString& sKey) = 0;
virtual bool IDelWidget(QWidget* pWdg) = 0;
virtual void IThumbnailItemAppend(const char* name, const QIcon& icon, const QString& text) = 0;
virtual void IThumbnailItemRemove(const char* name) = 0;
virtual void ISetComboBoxTextData(const QString& name, const QTpStrStrMap& textData, QObject* parent = NULL) = 0;
virtual QJsonObject IJsonUser() = 0;
virtual void ILogString(const QString& str) = 0;
virtual bool IGetUserInfo(QString& user, QString& level) = 0;
virtual bool ISetFilter(QObject* pObject) = 0;
virtual void ISendIPCPackage(TP_PROTOCOL_MESSAGE& msg) = 0;
virtual void IHandleMessage(const QStringList& listFilterKey, const QJsonObject& jsonObj) = 0;
};
//inline functions for conveniece
inline QString tpfunc_main_path(IMainCallback* pCb)
{
if (NULL == pCb)
{
return "";
}
QStringList dllPaths = pCb->IDllPaths();
if (dllPaths.size() == 0)
{
return "";
}
return dllPaths.last();
}
inline bool tpfunc_get_lineedit_text(QString& text, IMainCallback* pCb, const QString& name, QObject* parent = NULL)
{
QWidgetList wdgList = pCb->FindWidgets(name, parent);
for (QWidgetList::iterator it = wdgList.begin(); it != wdgList.end(); ++it)
{
QLineEdit* pEdit = qobject_cast<QLineEdit*>(*it);
if (NULL != pEdit)
{
text = pEdit->text();
return true;
}
}
return false;
}
inline bool tpfunc_get_combobox_current_data(QVariant& v, IMainCallback* pCb, const QString& name, QObject* parent = NULL)
{
QWidgetList wdgList = pCb->FindWidgets(name, parent);
for (QWidgetList::iterator it = wdgList.begin(); it != wdgList.end(); ++it)
{
QComboBox* pCombo = qobject_cast<QComboBox*>(*it);
if (NULL != pCombo)
{
v = pCombo->currentData();
return true;
}
}
return true;
}
inline QListWidgetItem* tpfunc_text_2_listwidget_item(QListWidget* pList, const QString& text, bool bAdd = true)
{
if (NULL == pList)
{
return NULL;
}
if (bAdd)
{
return new QListWidgetItem(text, pList);
}
else
{
QList<QListWidgetItem*> items = pList->findItems(text, Qt::MatchFixedString);
for (QList<QListWidgetItem*>::iterator it = items.begin(); it != items.end(); ++it)
{
pList->removeItemWidget(*it);
delete *it;
}
return NULL;
}
}
inline void tpfunc_set_value(const QString& name, const QVariant& value, QObject* parent, IMainCallback* pCb)
{
pCb->ISetValue(name, value, parent);
}
inline QVariant tpfunc_get_value(const QString& name, QObject* parent, IMainCallback* pCb)
{
QVariantMap vMap;
QTpWidgetList wgtList = pCb->FindWidgets(name, parent);
for (QTpWidgetList::Iterator it = wgtList.begin(); it != wgtList.end(); ++it)
{
QLineEdit* pEdit = qobject_cast<QLineEdit*>(*it);
if (NULL != pEdit)
{
return pEdit->text();
}
QLabel* pLabel = qobject_cast<QLabel*>(*it);
if (NULL != pLabel)
{
return pLabel->text();
}
QCheckBox* pBox = qobject_cast<QCheckBox*>(*it);
if (NULL != pBox)
{
return pBox->checkState();
}
QComboBox* pCombo = qobject_cast<QComboBox*>(*it);
if (NULL != pCombo)
{
QVariant v = pCombo->currentData();
if (v.isValid())
{
return v;
}
return pCombo->currentText();
}
QSpinBox* pSpinBox = qobject_cast<QSpinBox*>(*it);
if (pSpinBox){
return pSpinBox->value();
}
QDoubleSpinBox* pDSpinBox = qobject_cast<QDoubleSpinBox*>(*it);
if (pDSpinBox){
return pDSpinBox->value();
}
QLCDNumber* pLcd = qobject_cast<QLCDNumber*>(*it);
if (NULL != pLcd)
{
return pLcd->value();
}
}
return QVariant();
}
inline void tpfunc_qcombobox_add_item(const QString& name, const QStringList& texts, QObject* parent, IMainCallback* pCb)
{
QTpWidgetList wgtList = pCb->FindWidgets(name, parent);
for (QTpWidgetList::Iterator it = wgtList.begin(); it != wgtList.end(); ++it)
{
QComboBox* pCombo = qobject_cast<QComboBox*>(*it);
if (NULL == pCombo)
{
continue;
}
pCombo->addItems(texts);
}
}
inline void tpfunc_qcombobox_add_item(const QString& name, const QString& text, QObject* parent, IMainCallback* pCb)
{
QTpWidgetList wgtList = pCb->FindWidgets(name, parent);
for (QTpWidgetList::Iterator it = wgtList.begin(); it != wgtList.end(); ++it)
{
QComboBox* pCombo = qobject_cast<QComboBox*>(*it);
if (NULL == pCombo)
{
continue;
}
pCombo->addItem(text);
}
}
inline void tpfunc_qcombobox_del_item(const QString& name, const QString& text, QObject* parent, IMainCallback* pCb)
{
QTpWidgetList wgtList = pCb->FindWidgets(name, parent);
for (QTpWidgetList::Iterator it = wgtList.begin(); it != wgtList.end(); ++it)
{
QComboBox* pCombo = qobject_cast<QComboBox*>(*it);
if (NULL == pCombo)
{
continue;
}
int index = pCombo->findText(text);
if (-1 != index)
{
pCombo->removeItem(index);
}
}
}
inline void tpfunc_qlistwidget_add_item(const QString& name, const QStringList& texts, QObject* parent, IMainCallback* pCb)
{
QTpWidgetList wgtList = pCb->FindWidgets(name, parent);
for (QTpWidgetList::Iterator it = wgtList.begin(); it != wgtList.end(); ++it)
{
QListWidget* pList = qobject_cast<QListWidget*>(*it);
if (NULL == pList)
{
continue;
}
pList->addItems(texts);
}
}
inline QWidget* tpfunc_widget_by_property(QObject* pObj, bool bDoubleClicked, IMainCallback* pCb)
{
if (NULL == pObj)
{
return NULL;
}
QString uiFile;
if (bDoubleClicked)
{
uiFile = tp_check_string_property(TP_PROP_STRING_DOUBLE_CLICKED_TO_OPEN_UI_FILE, pObj);
}
else
{
uiFile = tp_check_string_property(TP_PROP_STRING_CLICKED_TO_OPEN_UI_FILE, pObj);
}
if (uiFile.isEmpty())
{
return NULL;
}
QWidget* pWg = pCb->IGetWidget(uiFile);
if (NULL != pWg)
{
pWg->setProperty(TP_PROP_STRING_OPENED_BY_OBJECT, pObj->objectName());
}
//pWg->show();
return pWg;
}
inline void tpfunc_widget_enable(const QString& name, bool bEnable, QObject* parent, IMainCallback* pCb)
{
QWidgetList wList = pCb->FindWidgets(name, parent);
for (QTpWidgetList::Iterator it = wList.begin(); it != wList.end(); ++it)
{
(*it)->setEnabled(bEnable);
}
}
inline void tpfunc_message_to_status(const QString& msg, IMainCallback* pCb, QObject* parent = NULL)
{
QWidgetList wList = pCb->FindWidgets("statusbar", parent);
for (QTpWidgetList::Iterator it = wList.begin(); it != wList.end(); ++it)
{
QStatusBar* pStatus = qobject_cast<QStatusBar*>(*it);
if (NULL != pStatus)
{
pStatus->clearMessage();
pStatus->showMessage(msg);
}
}
}
//
#ifdef TPMAIN_EXPORTS
#define MAIN_API extern "C" __declspec(dllexport)
#else
#ifndef _LOAD_MAIN_DLL_STATIC
#define MAIN_API extern "C"
#else
#define MAIN_API extern "C" __declspec(dllimport)
#endif
#endif
MAIN_API IMainFilter* Main_Create(IMainCallback* pMainCb);
MAIN_API void Main_Delete(IMainFilter* pMain);
#endif