📄 appframe.h
字号:
/*
* BREW Extension Library
* Copyright (c) 2003-2005 ANYSOFT.CN
* All Rights Reserved.
*/
/*!-----------------------------------
@file
@brief [AppFrame] 应用程序框架
应用程序的基础框架,采用数据模型-视图-控制器模式(Model-View-Controller)
实现了基本的完整的AEE事件处理流程,是其它模块的基础
-----------------------------------*/
#ifndef __BEL_APPFRAME_H__
#define __BEL_APPFRAME_H__
/*!
@defgroup AppFrame AppFrame Module/应用程序框架模块
*/
#include <AEE.h>
#include <AEEAppGen.h>
#include "BEL.h"
#include "Diagnosis.h"
#include "Helper.H"
//! 最多同时支持的数据-视图对数
#define MAX_VIEW_COUNT 20
#define NO_ACTIVE_PAIR (byte)255
#define INVALID_ID -1
#define TIMER_SUSPEND_ALL -1
#define TIMER_ALL 255
/*!
@ingroup AppFrame
@brief EventHandler对特定类别事件的处理情况
*/
enum ETStatus
{
ET_NOT_RECOGNIZED = 0, //!< 事件不属于这一类别
ET_PROCESSED = 1, //!< 事件属于这一类别,被处理
ET_NOT_PROCESSED = -1 //!< 事件属于这一类别,但未被处理
};
/*!
@ingroup AppFrame
@brief 所有具备处理事件能力的类的公共接口
按照BREW SDK的定义(参见AEE.h),事件被分为8类,依次为:
<ol>
<li>App Event</li>
<li>Key Event</li>
<li>Control Event</li>
<li>Dialog Event</li>
<li>Shell Event</li>
<li>Device Event</li>
<li>Clipboard Event</li>
<li>User Event</li>
</ol>
*/
class EvtTarget : public BREWObj
{
public:
EvtTarget();
virtual ~EvtTarget();
virtual boolean OnEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleAppEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleControlEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleDialogEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleShellEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleDeviceEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleClipboardEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual ETStatus HandleUserEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
virtual int8 AddRef();
virtual int8 GetRefCount();
virtual int8 ReduceRef();
private:
int8 m_RefNum;
};
class AppArbiter;
/*!
@ingroup AppFrame
@brief 数据模型类
定义了所有应用程序使用的数据模型的基类
*/
class AppData : public EvtTarget
{
public:
AppData(AEEApplet *app);
virtual ~AppData();
void SetArbiter(AppArbiter * arbiter);
AppResult Notify(int32 status = NULL);
AEEApplet* GetApp() { return m_app;}
AEEDeviceInfo* GetDeviceInfo();
protected:
AppArbiter * m_arbiter;
AEEApplet * m_app;
AEEDeviceInfo m_di;
};
class VisibleObj : public EvtTarget
{
public:
virtual AppResult Open() = 0;
virtual AppResult Close() = 0;
virtual AppResult Enable() = 0;
virtual AppResult Disable() = 0;
};
/*!
@ingroup AppFrame
@brief 数据视图类
本类是所有屏幕表现层类的基类,定义了虚方法的接口
*/
class AppView : public VisibleObj
{
public:
AppView(AEEApplet *app);
virtual ~AppView();
void SetArbiter(AppArbiter * arbiter);
virtual AppResult Update() = 0;
AppData* GetData();
protected:
AppArbiter * m_arbiter;
AEEApplet * m_app;
AppData * m_data;
};
/*!
@brief Timer回调函数
@param btTimerID 到时的Timer的ID
@param pvParam 用户指定的指针
@return
*/
typedef void (*PTIMERPROC)(byte btTimerID,void* pvParam);
/*!
@ingroup AppFrame
@brief 由于描述Timer信息的类
*/
class TimerInfo:public BREWObj
{
public:
byte m_btID;
byte m_btOwnerID;
int32 m_dwMSecs;
PTIMERPROC m_pTimerProc;
void* m_pvParam;
AEEApplet* m_pApp;
boolean m_bSend;
boolean m_bRunning;
public:
void Start();
void Stop();
TimerInfo();
};
typedef TimerInfo* PTimerInfo;
#define CS_FILE_SYSTEM 0x00000001
#define CS_ERROR_OK 0x00000000
#define CS_ERROR_FILE_NO_SPACE 0x00000001
#define CS_ERROR_UNKNOWN 0xffffffff
//-----------Add by tan---------//
#define MAX_FILENAME 32
class CDialog;
typedef CDialog* PCDialog;
//------------Ended add---------//
/*!
@ingroup AppFrame
@brief 程序框架的控制器
AppArbiter维护一个数据-视图对的列表,并根据当前活动的数据-视图对情况分发来自BREWApp的事件
*/
class AppArbiter : public EvtTarget
{
public:
AppArbiter(AEEApplet *app);
virtual ~AppArbiter();
AppResult RegisterData(AppData* data);
AppResult RegisterView(byte index, AppView *view, boolean setActive = false);
virtual boolean OnEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
AppData* GetData();
byte GetViewCount();
AppView * GetActiveView();
AppView * GetViewByID(byte index);
byte GetActiveViewID();
AppResult Arbit(byte index, boolean freePrev = FALSE);
virtual AppResult Notify(int32 status) = 0;
boolean SetTimer(byte btID, byte btOwnerID, int32 dwMSecs, PTIMERPROC pProc,
void* pvParam,
boolean bStartNow=FALSE,
boolean bSend = TRUE);
boolean KillTimer(byte btTimerID);
void KillAllTimers();
void ToggleTimers(byte btActiveView);
static void OnTimer(PTimerInfo pInfo);
boolean IsRunning(byte btTimerID);
uint32 CheckSystem(uint32 dwType,uint16 wParam,uint32 dwParam);
//----------Add by tan-------------//
AEEApplet* GetApp() {return m_app;};
const char* GetResFile() {return m_szResFile;}
void SetResFile(const char* pszFileName) {MEMCPY(m_szResFile,pszFileName,sizeof(m_szResFile));}
public:
char m_szResFile[MAX_FILENAME+1];
//-----------Ended add-------------//
protected:
void HandleError(AEEEvent evtCode, uint16 param16, uint32 param32);
protected:
uint32 m_dwErrorCode;
byte m_viewCount;
byte m_activeViewID;
AEEApplet* m_app;
AppData* m_data;
AppView* m_viewList[MAX_VIEW_COUNT];
PtrList m_TimerList;
};
class AppTimer : public BREWObj
{
public:
uint8 ID;
AEECLSID CLSID;
int32 Interval;
boolean On;
IShell* m_pIShell;
};
#define MAX_TIMER_COUNT 8
#define DECLARE_INHERIT_FROM_BREWAPP(classname) \
AppTimer Timers[MAX_TIMER_COUNT];\
DECLARE_NEW_DELETE()\
static boolean InitApp(IApplet * applet); \
static void Finalize(classname * app); \
static boolean HandleEvent(classname * app, AEEEvent evtCode, uint16 param16, uint32 param32); \
IShell * GetIShell() { return m_pIShell; }\
IDisplay * GetIDisplay() { return m_pIDisplay; }\
IModule * GetIModule() { return m_pIModule; }\
uint32 GetRefCounter() { return m_nRefs; }\
AEECLSID GetClassID() { return clsID; }
#define DEFINE_INHERIT_FROM_BREWAPP(classname) \
boolean classname::InitApp(IApplet *applet) \
{ \
ASSERT(applet); \
return ((classname *)applet)->OnInitApp(); \
} \
void classname::Finalize(classname *app) \
{ \
ASSERT(app); \
app->OnFinalize(); \
} \
boolean classname::HandleEvent(classname *app, AEEEvent evtCode, uint16 param16, uint32 param32) \
{ \
ASSERT(app); \
return app->OnEvent(evtCode, param16, param32); \
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -