OSDN Git Service

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