OSDN Git Service

8431b45e957cda5c79885ae1571c9535560c3840
[nlite/nlite.git] / nlite / nlite_commentview.h
1 #pragma once
2
3 namespace nlite{
4
5         class CCommentView;
6         class CCommentListWindow;
7         class CChatChildCtrlsList;
8         class CChatChildCtrls;
9
10         //\92è\90\94\97p\82Ì\96¼\91O\8bó\8aÔ
11         namespace commentViewConstant{
12
13                 //\83R\83\81\83\93\83g\83r\83\85\81[\83E\83B\83\93\83h\83E\96¼
14                 const static LPCTSTR  NLITE_COMMENTVIEW = TEXT("NLITE_COMMENTVIEW");
15
16                 //\83R\83\81\83\93\83g\83\8a\83X\83g\83E\83B\83\93\83h\83E\96¼
17                 const static LPCTSTR NLITE_COMMENTLISTWINDOW = TEXT("NLITE_COMMENTLISTWINDOW");
18
19                 //\83w\83b\83_\81[\82Ì\8d\82\82³
20                 const static UINT_PTR HEADER_HAIGHT = 20;
21
22                 //\83w\83b\83_\81[\83R\83\93\83g\83\8d\81[\83\8bID
23                 const static UINT_PTR HEADER_ID = 257;
24
25                 //\83R\83\81\83\93\83g\83\8a\83X\83g\83E\83B\83\93\83h\83EID
26                 const static UINT_PTR LISTWINDOW = 258;
27
28                 //baseWindowID
29                 const static UINT_PTR MENU_OR_ID = 256;
30         }
31
32         class CChatReadEdit :public CWindowImpl<CChatReadEdit,CRichEditCtrl>{
33                 friend CCommentListWindow;
34                 friend CChatChildCtrls;
35
36                 BEGIN_MSG_MAP(CChatReadEdit)
37
38                 END_MSG_MAP()
39
40                 BOOL SetWindowText(const CChatData &str);
41
42                 VOID Reset();
43
44                 VOID linkStringBeside(const tstring &target,const nliteregex::tregex &re);
45                 
46
47                 HWND GeneralCreate(HWND hParent,DWORD eventMask,UINT id);
48         };
49
50         class CChatChildCtrls{
51                 friend CCommentListWindow;
52                 friend CChatChildCtrlsList;
53         private:
54                 CChatReadEdit chatDispCtrl;
55                 CHyperLink noDispCtrl;
56                 CHyperLink userNameDispCtrl;
57                 CCommentView &m_master;
58                 
59
60         private:
61
62                 enum {
63                         NO_DIOSCTRL_ID = 10000000,
64                         USERNAME_DISPCTRL_ID = 20000000,
65                         CHAT_DISPCTRL_ID = 30000000
66
67                 };
68                 
69                 ///
70                 ///\83R\83\93\83X\83g\83\89\83N\83^
71                 ///
72                 CChatChildCtrls(CCommentView &hMaster);
73                 
74                 ///
75                 ///\8ew\92è\82µ\82½\8d\82\82³\82É\83R\83\93\83g\83\8d\81[\83\8b\82ð\83Z\83b\83g
76                 ///
77                 VOID SetCtrl(HDWP,const RECT &rc,CCommentList::reference commen,BOOL mulutiLineFlag);
78
79                 VOID AdjustRect(RECT &rc);
80
81                 VOID Hide(HDWP hdwp);
82
83                 VOID Create();
84
85                 ///
86                 ///\83R\83\93\83g\83\8d\81[\83\8b\82Ì\8cÂ\90\94\82ð\8eæ\93¾
87                 ///
88                 static UINT_PTR GetCtrlCount();
89
90
91
92         };
93
94
95         class CChatChildCtrlsList{
96                 friend CCommentView;
97                 friend CCommentListWindow;
98                 friend CChatChildCtrls;
99                 
100         private:
101                 typedef std::list<CChatChildCtrls> InternalList;
102
103                 InternalList m_list;
104                 CCommentView &m_hMaster;
105                 RECT rcBuf;
106
107
108         private:
109                 typedef InternalList::reference reference;
110                 typedef InternalList::iterator iterator;
111                 
112                 ///
113                 ///\83R\83\93\83X\83g\83\89\83N\83^
114                 ///
115                 CChatChildCtrlsList(CCommentView &hMaster);
116
117         
118
119                 ///
120                 ///\83R\83\93\83g\83\8d\81[\83\8b\82ð\95\\8e¦
121                 ///
122                 VOID ShowCntrls();
123
124                 ///
125                 ///\94ñ\95\\8e¦\8f\88\97\9d
126                 ///
127                 VOID AllHide();
128
129         private:
130
131                 ///
132                 ///\8ag\92£\8f\88\97\9d
133                 ///
134                 iterator Extend();
135
136
137         };
138
139         
140         //\83R\83\81\83\93\83g\95\\8e¦\97p\83E\83B\83\93\83h\83E
141         class CCommentListWindow:public CWindowImpl<CCommentListWindow>{
142
143                 friend CCommentView;
144                 friend CChatChildCtrls;
145                 friend CChatChildCtrlsList;
146                 
147                 
148                 //\83\81\83\93\83o
149         private:
150                 CCommentView &self;
151                 UINT_PTR viewSellHeight;
152                 CPen collLinePen;                                                                                                       //\8d\80\96Ú\8fc\90ü\95`\89æ\97p\83y\83\93
153                 CPen normalSellLinePen;                                                                                                 //\98g\90ü\95`\89æ\97p\83y\83\93
154                 CBrush normalBkBrush;                                                                                                           //\94w\8ci\95`\89æ\97p\83u\83\89\83V
155                 CPen selectSellLinePen;                                                                                                 //\98g\90ü\95`\89æ\97p\83y\83\93
156                 CBrush selectBkBrush;                                                                                                           //\94w\8ci\95`\89æ\97p\83u\83\89\83V
157                 CFont linkFont;                                                                                                         //\83\8a\83\93\83N\95\8e\9a\97ñ\97p\82Ì\83t\83H\83\93\83g
158                 enum {
159                         CALCEDIT_ID = 100
160
161                 };
162
163         public:
164
165                 
166                 DECLARE_WND_CLASS(commentViewConstant::NLITE_COMMENTLISTWINDOW)
167
168
169                 //
170                 //\83\81\83b\83Z\81[\83W\83}\83b\83v
171                 //
172                 BEGIN_MSG_MAP(CCommentListWindow)
173                         MSG_WM_LBUTTONDBLCLK(OnLButtonDblClk)
174                         MSG_WM_LBUTTONDOWN(OnLButtonDown)
175                         MSG_WM_CREATE(OnCreate)
176                         MSG_WM_ERASEBKGND(OnEraseBkGnd)
177                         MSG_WM_MOUSEWHEEL(OnMouseWheel)
178                         MSG_WM_PAINT(OnPaint)
179                         MSG_WM_SIZE(OnSize)
180                         MSG_WM_KEYDOWN(OnKeyDown)
181                         MSG_WM_SETCURSOR(OnSetCursor)
182                         MESSAGE_HANDLER_EX(UM_COMMENTVIEW_SETCTRL,OnSetCtrol)
183                         NOTIFY_ID_HANDLER_EX(CChatChildCtrls::CHAT_DISPCTRL_ID,OnChatControlNortify)
184                         NOTIFY_HANDLER_EX(CALCEDIT_ID,EN_REQUESTRESIZE,OnCalcSellSize)
185                 END_MSG_MAP()
186
187
188
189         private:
190
191                 ///
192                 ///\83R\83\93\83X\83g\83\89\83N\83^
193                 ///
194                 CCommentListWindow(CCommentView &self_in);
195
196                 ///
197                 ///\83f\83X\83g\83\89\83N\83^
198                 ///
199                 ~CCommentListWindow();
200
201
202                 ///
203                 ///\83v\83\8d\83p\83e\83B\90Ý\92è\8e\9e\82Ì\8f\88\97\9d
204                 ///
205                 VOID OnSetProperty();
206
207                 ///
208                 ///\83X\83N\83\8d\81[\83\8b\83y\81[\83W\8cv\8eZ
209                 ///
210                 UINT_PTR CalcScrollPage(UINT_PTR nMax);
211
212                 ///
213                 ///\8ds\82Ì\8d\82\82³\82ð\96â\82¢\8d\87\82í\82¹
214                 ///
215                 VOID CalcItemHeight(CChatData &chatData);
216
217                 ///
218                 ///\91I\91ð\8ds\82ð\95\\8e¦
219                 ///
220                 VOID ShowCurSel();
221
222                 VOID CalcChatRect(const CDC &cdc,RECT &rc,const CNLiteString &str);
223                 
224
225                 //\83v\83\89\83C\83x\81[\83g\8aÖ\90\94
226         private:
227
228                 ///
229                 ///\83A\83C\83e\83\80\95`\89æ
230                 ///
231                 VOID DrawItem(CDC &dc,const RECT &rc,const RECT *headerRect,CChatData &chatData);
232
233                 ///
234                 ///\95`\89æ\8d\82\82³\82ð\83\8a\83Z\83b\83g
235                 ///
236                 VOID ResetViewSellHeight();
237                 
238
239                 ///
240                 ///\83N\83\8a\83b\83N\82µ\82½\8ds\82ð\8cv\8eZ
241                 ///
242                 CCommentList::iterator CalcClickLine(INT_PTR height);
243
244                 ///
245                 ///\83\86\81[\83U\96¼\82©\83R\83\81\94Ô\8fã\82©\82Ì\94»\92è
246                 ///
247                 BOOL IsOnNoOrUserName(UINT_PTR index,const POINT &point);
248
249                 //\83\81\83b\83Z\81[\83W\83n\83\93\83h\83\89
250         private:
251                 
252                 ///
253                 ///\83E\83B\83\93\83h\83E\8dì\90¬\8e\9e\82Ì\8f\88\97\9d
254                 ///
255                 LRESULT OnCreate(LPCREATESTRUCT lpCreateStruct);
256
257                 ///
258                 ///\83}\83E\83X\83N\83\8a\83b\83N\8e\9e\82Ì\8f\88\97\9d
259                 ///
260                 VOID OnLButtonDown(UINT wParam, _WTYPES_NS::CPoint &point);
261
262                 ///
263                 ///\95`\89æ\8f\88\97\9d
264                 ///
265                 VOID OnPaint(HDC hdc);
266
267                 ///
268                 ///\83R\83\93\83g\83\8d\81[\83\8b\83Z\83b\83g\8f\88\97\9d
269                 ///
270                 LRESULT OnSetCtrol(UINT uMsg,WPARAM wparam,LPARAM lparam);
271
272                 ///
273                 ///\83T\83C\83Y\95Ï\8dX
274                 ///
275                 VOID OnSize(UINT wParam, _WTYPES_NS::CSize &windowSize);
276
277                 ///
278                 ///\83}\83E\83X\83_\83u\83\8b\83N\83\8a\83b\83N\8e\9e\82Ì\8f\88\97\9d
279                 ///
280                 VOID OnLButtonDblClk(UINT wParam, _WTYPES_NS::CPoint &point);
281
282                 ///
283                 ///\94w\8ci\93h\82è\82Â\82Ô\82µ
284                 ///
285                 LRESULT OnEraseBkGnd(HDC lparam);
286
287                 ///
288                 ///\83}\83E\83X\83z\83C\81[\83\8b
289                 ///
290                 LRESULT OnMouseWheel(UINT loWparam,SHORT hiWparam,CPoint &point);
291
292                 ///
293                 ///\83L\81[\89\9f\89º\8e\9e\82Ì\8f\88\97\9d
294                 ///
295                 VOID OnKeyDown(TCHAR vKey,UINT loLParam,UINT hiLParam);
296
297                 ///
298                 ///\83J\81[\83\\83\8b\95Ï\8dX\8f\88\97\9d
299                 ///
300                 LRESULT OnSetCursor(HWND wparam,UINT loLparam,UINT hiLparam);
301
302                 ///
303                 ///\83`\83\83\83b\83g\83R\83\93\83g\83\8d\81[\83\8b\92Ê\92m
304                 ///
305                 LRESULT OnChatControlNortify(LPNMHDR lParam);
306
307                 LRESULT OnCalcSellSize(LPNMHDR lParam);
308                 
309         };
310         
311         ///
312         ///\83R\83\81\83\93\83g\83r\83\85\81[\83N\83\89\83X
313         ///
314         class CCommentView:public CWindowImpl<CCommentView>{
315                 friend CChatChildCtrls;
316                 friend CCommentListWindow;                                              //\83t\83\8c\83\93\83h\90é\8c¾
317                 friend CChatChildCtrlsList;
318                 friend CChatChildCtrls;
319                 //\83v\83\89\83C\83x\81[\83g\8c^\81E\83N\83\89\83X\92è\8b`
320         private:
321
322                 //\83w\83b\83_\81[\8fî\95ñ\8ai\94[\97p\83I\83u\83W\83F\83N\83g
323                 typedef struct{
324
325                         LPTSTR *columns;
326                         UINT_PTR *holizensize;
327                         UINT_PTR count;
328
329                 }HEADERSINFO,*LPHEADERSINFO;
330
331                 
332                 
333
334                 
335
336                 //\83\81\83\93\83o\90é\8c¾
337         private:
338
339                 CHeaderCtrl m_header;                                           //\83w\83b\83_\81[\83R\83\93\83g\83\8d\81[\83\8b
340                 CCommentListWindow  m_commentListWindow;        //\83R\83\81\83\93\83g\83\8a\83X\83g\83E\83B\83\93\83h\83E
341                 CNicoLiveStream &stream;                                //\95ú\91\97\83I\83u\83W\83F\83N\83g
342                 CCommentList commentlist;                                       //\83R\83\81\83\93\83g\83\8a\83X\83g
343                 CommentViewProperty viewproperty;                       //\95\\8e¦\83v\83\8d\83p\83e\83B
344                 HFONT hHeaderFontNew;                                           //\83w\83b\83_\81[\83t\83H\83\93\83g
345
346
347                 CChatChildCtrlsList chatChildCtrlsList;
348
349                 
350
351
352                 
353                 
354
355                 
356         public:
357
358                 enum{
359                         NO,
360                         USERNAME,
361                         COMMENT,
362                         TIME,
363                         INFO
364
365                 };
366                 
367                 ///
368                 ///\83R\83\93\83X\83g\83\89\83N\83^
369                 ///
370                 CCommentView(CNicoLiveStream &stream);
371                 
372                 ///
373                 ///\83f\83X\83g\83\89\83N\83^
374                 ///
375                 ~CCommentView();
376
377                 
378
379                 //
380                 //\83E\83B\83\93\83h\83E\83N\83\89\83X\90é\8c¾
381                 //
382                 DECLARE_WND_CLASS_EX(commentViewConstant::NLITE_COMMENTVIEW,0,COLOR_BACKGROUND)
383                 
384                 //
385                 //\83\81\83b\83Z\81[\83W\83}\83b\83v
386                 //
387                 BEGIN_MSG_MAP(CCommentView)
388                         MSG_WM_CREATE(OnCreate)
389                         MSG_WM_DESTROY(OnDestroy)                       
390                         MSG_WM_SIZE(OnSize)
391                         MSG_WM_HSCROLL(OnHScroll)
392                         MSG_WM_VSCROLL(OnVScroll)
393                         MSG_WM_ERASEBKGND(OnEraseBkgnd)
394                         NOTIFY_CODE_HANDLER_EX(HDN_ENDTRACK   ,OnHeaderEndTrack)
395                         NOTIFY_CODE_HANDLER_EX(HDN_ENDDRAG  ,OnHeaderEndDrag)
396                 END_MSG_MAP()
397
398                 ///
399                 ///\83v\83\8d\83p\83e\83B\90Ý\92è
400                 ///
401                 VOID SetProperty(CommentViewProperty &setProperty);
402
403                 ///
404                 ///\83v\83\8d\83p\83e\83B\8eæ\93¾
405                 ///
406                 CommentViewProperty &GetProperty();
407                 
408                 ///
409                 ///\83E\83B\83\93\83h\83E\8dì\90¬
410                 ///
411                 HWND Create(HWND hWndParent);
412
413                 ///
414                 ///\83w\83b\83_\82Ì\89¡\95\9d\8eæ\93¾
415                 ///
416                 UINT_PTR GetColumnHolSizeSum();
417
418                 ///
419                 ///\83j\83R\90\82É\90Ú\91±\8e\9e\82Ì\8f\88\97\9d
420                 ///
421                 VOID OnConnect();
422
423                 ///
424                 ///\83`\83\83\83b\83g\83R\83\81\83\93\83g\8eó\90M\8e\9e\82Ì\8f\88\97\9d
425                 ///
426                 VOID OnChatReceve(NicoLiveChat_P chat,UINT_PTR count);
427
428                 ///
429                 ///\83`\83\83\83b\83g\83R\83\81\83\93\83g\8eó\90M\8am\92è\8f\88\97\9d
430                 ///
431                 VOID OnChatReceveSettle(UINT_PTR commentCount,UINT_PTR commentCountSum);
432                 
433
434
435                 //\83v\83\89\83C\83x\81[\83g\8aÖ\90\94
436         private:
437
438
439                 ///
440                 ///\83w\83b\83_\92Ç\89Á
441                 ///
442                 VOID AddHeader(LPHEADERSINFO infos);
443                 
444                 ///
445                 ///\83w\83b\83_\82Ì\89¡\95\9d\8c\88\92è
446                 ///
447                 VOID DecisionHorzSize();
448
449
450                 ///
451                 ///\83T\83C\83Y\95Ï\8dX\8f\88\97\9d
452                 ///
453                 VOID ChangeSize(const SIZE& client);
454
455                 //\83E\83B\83\93\83h\83E\83\81\83b\83Z\81[\83W\83n\83\93\83h\83\89
456         private:
457
458                 
459
460                 ///
461                 ///\83T\83C\83Y\95Ï\8dX\8cã\8f\88\97\9d
462                 ///
463                 LRESULT OnSize(UINT wParam,SIZE lParam);
464
465                 
466                 
467
468                 ///
469                 ///\94w\8ci\93h\82è\82Â\82Ô\82µ\8f\88\97\9d
470                 ///
471                 LRESULT OnEraseBkgnd(HDC wParam);
472                 
473                 ///
474                 ///\83E\83B\83\93\83h\83E\94j\8aü\8e\9e\82Ì\8f\88\97\9d
475                 ///
476                 VOID OnDestroy();
477                 
478                 ///
479                 ///\83w\83b\83_\83A\83C\83e\83\80\95Ï\8dX\8e\9e\8f\88\97\9d
480                 ///
481                 LRESULT OnHeaderEndTrack(LPNMHDR lParam);
482
483
484                 ///
485                 ///\83w\83b\83_\83h\83\89\83b\83O\8cã\8f\88\97\9d
486                 ///
487                 LRESULT OnHeaderEndDrag(LPNMHDR lParam);
488
489
490
491                 ///
492                 ///\89¡\83X\83N\83\8d\81[\83\8b\8e\9e\82Ì\8f\88\97\9d
493                 ///
494                 VOID OnHScroll(INT_PTR loWParam,SHORT hiWParam,HWND lParam);
495                 
496                 ///
497                 ///\8fc\83X\83N\83\8d\81[\83\8b\8e\9e\82Ì\8f\88\97\9d
498                 ///
499                 VOID OnVScroll(INT_PTR loWParam,SHORT hiWParam,HWND lParam);
500
501                 ///
502                 ///\8dì\90¬\8e\9e\82Ì\8f\88\97\9d
503                 ///
504                 LRESULT OnCreate(LPCREATESTRUCT lpcs);
505                 
506                 
507                 
508                 
509                 
510
511
512         };
513         
514 }