soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SItemPanel.h
1//////////////////////////////////////////////////////////////////////////
2// Class Name: SOsrPanel
3// Description: A Framework wrapping frame to be used in a swindow.
4// Creator: Huang Jianxiong
5// Version: 2011.10.20 - 1.0 - Create
6//////////////////////////////////////////////////////////////////////////
7
8#ifndef __SITEMPANEL__H__
9#define __SITEMPANEL__H__
10
11#include "SWndContainerImpl.h"
12#include <proxy/SWindowProxy.h>
13#include <interface/SCtrl-i.h>
14
15SNSBEGIN
16
17class SOsrPanel;
18
19struct IItemContainer
20{
21 virtual void OnItemSetCapture(SOsrPanel *pItem, BOOL bCapture) = 0; //设置or释放鼠标捕获
22 virtual BOOL OnItemGetRect(const SOsrPanel *pItem,
23 CRect &rcItem) const = 0; //获得表项的显示位置
24 virtual BOOL IsItemRedrawDelay() const = 0; //指示表项的更新方式
25};
26
27struct IHostProxy
28{
29 virtual IObject *GetHost() = 0;
30 virtual BOOL OnHostFireEvent(IEvtArgs *e) = 0;
31 virtual BOOL IsHostUpdateLocked() const = 0;
32 virtual BOOL IsHostVisible() const = 0;
33 virtual CRect GetHostRect() const = 0;
34 virtual void InvalidateHostRect(LPCRECT pRc, BOOL bClip) = 0;
35 virtual ISwndContainer *GetHostContainer() = 0;
36 virtual void OnLayoutDirty() = 0;
37};
38
39class SHostProxy : public IHostProxy {
40 public:
41 explicit SHostProxy(SWindow *pHost)
42 : m_pHost(pHost)
43 {
44 }
45
46 public:
47 virtual IObject *GetHost()
48 {
49 return m_pHost;
50 }
51 virtual BOOL OnHostFireEvent(IEvtArgs *e)
52 {
53 return m_pHost->FireEvent(e);
54 }
55 virtual BOOL IsHostUpdateLocked() const
56 {
57 return m_pHost->IsUpdateLocked();
58 }
59 virtual BOOL IsHostVisible() const
60 {
61 return m_pHost->IsVisible(TRUE);
62 }
63 virtual CRect GetHostRect() const
64 {
65 return m_pHost->GetClientRect();
66 }
67 virtual void InvalidateHostRect(LPCRECT pRc, BOOL bClip)
68 {
69 m_pHost->InvalidateRect(pRc, TRUE, bClip);
70 }
71 virtual ISwndContainer *GetHostContainer()
72 {
73 return m_pHost->GetContainer();
74 }
75
76 virtual void OnLayoutDirty()
77 {
78 }
79
80 protected:
81 SWindow *m_pHost;
82};
83
84class SOUI_EXP SOsrPanel
85 : public TWindowProxy<IOsrPanel>
86 , public SwndContainerImpl {
87 DEF_SOBJECT(SWindow, L"osrPanel")
88 public:
89 SOsrPanel(IHostProxy *pFrameHost, IItemContainer *pItemContainer);
90 virtual ~SOsrPanel()
91 {
92 }
93
94 static BOOL IsItemInClip(const SMatrix &mtx, const CRect &rcClip, const IRegionS *clipRgn, const CRect &rcItem);
95
96 public:
97 STDMETHOD_(void, SetItemIndex)(THIS_ LPARAM lp) OVERRIDE;
98 STDMETHOD_(LPARAM, GetItemIndex)(THIS) SCONST OVERRIDE;
99 STDMETHOD_(void, SetItemData)(THIS_ LPARAM dwData) OVERRIDE;
100 STDMETHOD_(LPARAM, GetItemData)(THIS) SCONST OVERRIDE;
101 STDMETHOD_(void, PtToHost)(THIS_ POINT *pt) SCONST OVERRIDE;
102
103 public:
104 STDMETHOD_(void, OnFinalRelease)(THIS) OVERRIDE;
105 STDMETHOD_(BOOL, InitFromXml)(THIS_ IXmlNode *pNode) OVERRIDE;
106
107 public: // SwndContainerImpl
108 STDMETHOD_(BOOL, OnFireEvent)(IEvtArgs *evt) OVERRIDE;
109
110 STDMETHOD_(void, GetContainerRect)(RECT *ret) const OVERRIDE;
111
112 STDMETHOD_(void, UpdateRegion)(IRegionS *rgn) OVERRIDE;
113
114 STDMETHOD_(void, OnRedraw)(LPCRECT rc, BOOL bClip) OVERRIDE;
115
116 STDMETHOD_(BOOL, OnReleaseSwndCapture)() OVERRIDE;
117
118 STDMETHOD_(SWND, OnSetSwndCapture)(SWND swnd) OVERRIDE;
119 STDMETHOD_(HWND, GetHostHwnd)() OVERRIDE;
120 STDMETHOD_(LPCWSTR, GetTranslatorContext)() const OVERRIDE;
121 STDMETHOD_(void, FrameToHost)(RECT *rc) const OVERRIDE;
122 STDMETHOD_(BOOL, IsTranslucent)() const OVERRIDE;
123 STDMETHOD_(BOOL, IsSendWheel2Hover)() const OVERRIDE;
124
125 STDMETHOD_(BOOL, UpdateWindow)(BOOL bForce) OVERRIDE;
126
127 STDMETHOD_(void, UpdateTooltip)() OVERRIDE;
128 STDMETHOD_(void, SetToolTip)(THIS_ LPCRECT rc, UINT tipAlign, LPCTSTR pszTip) OVERRIDE;
129
130 STDMETHOD_(IMessageLoop *, GetMsgLoop)() OVERRIDE;
131
132 STDMETHOD_(IScriptModule *, GetScriptModule)() OVERRIDE;
133
134 STDMETHOD_(int, GetScale)() const OVERRIDE;
135
136 STDMETHOD_(void, EnableIME)(BOOL bEnable) OVERRIDE;
137
138 STDMETHOD_(void, OnUpdateCursor)() OVERRIDE;
139
140 STDMETHOD_(void, EnableHostPrivateUiDef)(THIS_ BOOL bEnable) OVERRIDE;
141
142 STDMETHOD_(BOOL, PostTask)(THIS_ IRunnable *runable, BOOL bAsync DEF_VAL(TRUE)) OVERRIDE;
143 STDMETHOD_(int, RemoveTasksForObject)(THIS_ void *pObj) OVERRIDE;
144
145 public: // SWindow
146 virtual LRESULT DoFrameEvent(UINT uMsg, WPARAM wParam, LPARAM lParam);
147 virtual void ModifyItemState(DWORD dwStateAdd, DWORD dwStateRemove);
148
149 virtual SWND SwndFromPoint(CPoint &pt, bool bIncludeMsgTransparent = false);
150
151 virtual void Draw(IRenderTarget *pRT, const CRect &rc);
152
153 virtual void BeforePaint(IRenderTarget *pRT, SPainter &painter);
154
155 virtual BOOL NeedRedrawWhenStateChange();
156 virtual BOOL UpdateToolTip(CPoint pt, SwndToolTipInfo &tipInfo);
157 virtual void RequestRelayout(SWND hSource, BOOL bSourceResizable);
158
159 CRect GetItemRect() const;
160 void SetItemCapture(BOOL bCapture);
161
162 protected:
163 void OnShowWindow(BOOL bShow, UINT nStatus);
164 void OnDestroy();
165 SOUI_MSG_MAP_BEGIN()
166 MSG_WM_DESTROY(OnDestroy)
167 MSG_WM_SHOWWINDOW(OnShowWindow)
168 SOUI_MSG_MAP_END()
169 protected:
170 IHostProxy *m_pHostProxy;
171 IItemContainer *m_pItemContainer;
172 LPARAM m_lpItemIndex;
173 LPARAM m_dwData;
174};
175
176template <class T>
177class TOsrPanelProxy
178 : public T
179 , public SOsrPanel {
180 public:
181 TOsrPanelProxy(IHostProxy *pFrameHost, IItemContainer *pItemContainer)
182 : SOsrPanel(pFrameHost, pItemContainer)
183 {
184 }
185
186 STDMETHOD_(long, AddRef)(THIS) OVERRIDE
187 {
188 return SOsrPanel::AddRef();
189 }
190 STDMETHOD_(long, Release)(THIS) OVERRIDE
191 {
192 return SOsrPanel::Release();
193 }
194 STDMETHOD_(void, OnFinalRelease)(THIS) OVERRIDE
195 {
196 SOsrPanel::OnFinalRelease();
197 }
198
199 STDMETHOD_(IWindow *, ToIWindow)(THIS) OVERRIDE
200 {
201 return this;
202 }
203
204 STDMETHOD_(HRESULT, QueryInterface)(REFGUID id, IObjRef **ppRet) OVERRIDE
205 {
206 if (id == T::GetIID())
207 {
208 *ppRet = (T *)this;
209 AddRef();
210 return S_OK;
211 }
212 else
213 {
214 return SOsrPanel::QueryInterface(id, ppRet);
215 }
216 }
217
218 STDMETHOD_(void, SetItemIndex)(THIS_ LPARAM lp) OVERRIDE
219 {
220 return SOsrPanel::SetItemIndex(lp);
221 }
222 STDMETHOD_(LPARAM, GetItemIndex)(THIS) SCONST OVERRIDE
223 {
224 return SOsrPanel::GetItemIndex();
225 }
226 STDMETHOD_(void, SetItemData)(THIS_ LPARAM dwData) OVERRIDE
227 {
228 return SOsrPanel::SetItemData(dwData);
229 }
230 STDMETHOD_(LPARAM, GetItemData)(THIS) SCONST OVERRIDE
231 {
232 return SOsrPanel::GetItemData();
233 }
234 STDMETHOD_(void, PtToHost)(THIS_ POINT *pt) SCONST OVERRIDE
235 {
236 return SOsrPanel::PtToHost(pt);
237 }
238};
239
240class SOUI_EXP SItemPanel : public TOsrPanelProxy<IItemPanel> {
241 DEF_SOBJECT(SOsrPanel, L"ItemPanel")
242 public:
243 static SItemPanel *Create(IHostProxy *pFrameHost, SXmlNode xmlNode, IItemContainer *pItemContainer);
244
245 public:
246 SItemPanel(IHostProxy *pFrameHost, IItemContainer *pItemContainer);
247 virtual ~SItemPanel()
248 {
249 }
250
251 public:
252 STDMETHOD_(void, SetSkin)(THIS_ ISkinObj *pSkin) OVERRIDE;
253 STDMETHOD_(void, SetColor)(THIS_ COLORREF crBk, COLORREF crSelBk) OVERRIDE;
254
255 public:
256 SOUI_ATTRS_BEGIN()
257 ATTR_COLOR(L"colorNormal", m_crBk, FALSE)
258 ATTR_COLOR(L"colorSelected", m_crSelBk, FALSE)
259 ATTR_COLOR(L"colorHover", m_crHover, FALSE)
260 SOUI_ATTRS_END()
261
262 protected:
263 STDMETHOD_(COLORREF, GetBkgndColor)(THIS) SCONST OVERRIDE;
264 STDMETHOD_(BOOL, OnFireEvent)(IEvtArgs *evt);
265
266 protected:
267 COLORREF m_crBk, m_crSelBk, m_crHover;
268};
269
270SNSEND
271#endif // __SITEMPANEL__H__
SOUI窗口容器的实现
virtual BOOL UpdateToolTip(CPoint pt, SwndToolTipInfo &tipInfo)
Handle tooltip updates.
Definition Swnd.cpp:277
HRESULT QueryInterface(REFGUID id, IObjRef **ppRet) OVERRIDE
Queries an interface.
Definition Swnd.cpp:3572
void OnDestroy()
Handles the destruction of the window.
Definition Swnd.cpp:1701
SWND SwndFromPoint(POINT *pt, BOOL bIncludeMsgTransparent=FALSE) SCONST OVERRIDE
Retrieves the window handle at a specified point.
virtual BOOL NeedRedrawWhenStateChange()
Determine if redraw is needed on state change.
Definition Swnd.cpp:1086
virtual void BeforePaint(IRenderTarget *pRT, SPainter &painter)
Prepare rendering environment.
Definition Swnd.cpp:1755
void OnShowWindow(BOOL bShow, UINT nStatus)
Handles showing or hiding the window.
Definition Swnd.cpp:2001
void RequestRelayout() OVERRIDE
Requests a relayout of the window.
Definition Swnd.cpp:2225
Implementation of the SOUI window container.
virtual LRESULT DoFrameEvent(UINT uMsg, WPARAM wParam, LPARAM lParam)
Processes frame events.