OSDN Git Service

余分な処理を削除
[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 //                      MSG_WM_DESTROY(OnDestroy)
185                         MSG_WM_PAINT(OnPaint)
186                         MSG_WM_SIZE(OnSize)
187                         MSG_WM_KEYDOWN(OnKeyDown)
188                         MSG_WM_SETCURSOR(OnSetCursor)
189                         MESSAGE_HANDLER_EX(UM_COMMENTVIEW_SETCTRL,OnSetCtrol)
190                         NOTIFY_ID_HANDLER_EX(CChatChildCtrls::CHAT_DISPCTRL_ID,OnChatControlNortify)
191                         NOTIFY_HANDLER_EX(CALCEDIT_ID,EN_REQUESTRESIZE,OnCalcSellSize)
192                 END_MSG_MAP()
193
194
195
196         private:
197
198                 ///
199                 ///\83R\83\93\83X\83g\83\89\83N\83^
200                 ///
201                 CCommentListWindow(CCommentView &self_in);
202
203                 ///
204                 ///\83f\83X\83g\83\89\83N\83^
205                 ///
206                 ~CCommentListWindow();
207
208
209                 ///
210                 ///\83v\83\8d\83p\83e\83B\90Ý\92è\8e\9e\82Ì\8f\88\97\9d
211                 ///
212                 VOID OnSetProperty();
213
214                 ///
215                 ///\83X\83N\83\8d\81[\83\8b\83y\81[\83W\8cv\8eZ
216                 ///
217                 UINT_PTR CalcScrollPage(UINT_PTR nMax);
218
219                 ///
220                 ///\8ds\82Ì\8d\82\82³\82ð\96â\82¢\8d\87\82í\82¹
221                 ///
222                 VOID CalcItemHeight(CChatData &chatData);
223
224                 ///
225                 ///\91I\91ð\8ds\82ð\95\\8e¦
226                 ///
227                 VOID ShowCurSel();
228
229                 VOID CalcChatRect(const CDC &cdc,RECT &rc,const CNLiteString &str);
230                 
231
232                 //\83v\83\89\83C\83x\81[\83g\8aÖ\90\94
233         private:
234
235                 ///
236                 ///\83A\83C\83e\83\80\95`\89æ
237                 ///
238                 VOID DrawItem(CDC &dc,const RECT &rc,const RECT *headerRect,CChatData &chatData);
239
240                 ///
241                 ///\95`\89æ\8d\82\82³\82ð\83\8a\83Z\83b\83g
242                 ///
243                 VOID ResetViewSellHeight();
244                 
245
246                 
247
248                 ///
249                 ///\83N\83\8a\83b\83N\82µ\82½\8ds\82ð\8cv\8eZ
250                 ///
251                 CCommentList::iterator CalcClickLine(INT_PTR height);
252
253                 ///
254                 ///\83\86\81[\83U\96¼\82©\83R\83\81\94Ô\8fã\82©\82Ì\94»\92è
255                 ///
256                 BOOL IsOnNoOrUserName(UINT_PTR index,const POINT &point);
257
258                 //\83\81\83b\83Z\81[\83W\83n\83\93\83h\83\89
259         private:
260                 
261                 ///
262                 ///\83E\83B\83\93\83h\83E\8dì\90¬\8e\9e\82Ì\8f\88\97\9d
263                 ///
264                 LRESULT OnCreate(LPCREATESTRUCT lpCreateStruct);
265
266                 ///
267                 ///\83}\83E\83X\83N\83\8a\83b\83N\8e\9e\82Ì\8f\88\97\9d
268                 ///
269                 VOID OnLButtonDown(UINT wParam, _WTYPES_NS::CPoint &point);
270
271                 ///
272                 ///\94j\8aü\8e\9e\82Ì\8f\88\97\9d
273                 ///
274                 VOID OnDestroy();
275
276                 ///
277                 ///\95`\89æ\8f\88\97\9d
278                 ///
279                 VOID OnPaint(HDC hdc);
280
281                 ///
282                 ///\83R\83\93\83g\83\8d\81[\83\8b\83Z\83b\83g\8f\88\97\9d
283                 ///
284                 LRESULT OnSetCtrol(UINT uMsg,WPARAM wparam,LPARAM lparam);
285
286                 ///
287                 ///\83T\83C\83Y\95Ï\8dX
288                 ///
289                 VOID OnSize(UINT wParam, _WTYPES_NS::CSize &windowSize);
290
291                 ///
292                 ///\83}\83E\83X\83_\83u\83\8b\83N\83\8a\83b\83N\8e\9e\82Ì\8f\88\97\9d
293                 ///
294                 VOID OnLButtonDblClk(UINT wParam, _WTYPES_NS::CPoint &point);
295
296                 ///
297                 ///\94w\8ci\93h\82è\82Â\82Ô\82µ
298                 ///
299                 LRESULT OnEraseBkGnd(HDC lparam);
300
301                 ///
302                 ///\83}\83E\83X\83z\83C\81[\83\8b
303                 ///
304                 LRESULT OnMouseWheel(UINT loWparam,SHORT hiWparam,CPoint &point);
305
306                 ///
307                 ///\83L\81[\89\9f\89º\8e\9e\82Ì\8f\88\97\9d
308                 ///
309                 VOID OnKeyDown(TCHAR vKey,UINT loLParam,UINT hiLParam);
310
311                 ///
312                 ///\83J\81[\83\\83\8b\95Ï\8dX\8f\88\97\9d
313                 ///
314                 LRESULT OnSetCursor(HWND wparam,UINT loLparam,UINT hiLparam);
315
316                 ///
317                 ///\83`\83\83\83b\83g\83R\83\93\83g\83\8d\81[\83\8b\92Ê\92m
318                 ///
319                 LRESULT OnChatControlNortify(LPNMHDR lParam);
320
321                 LRESULT OnCalcSellSize(LPNMHDR lParam);
322                 
323         };
324         
325         ///
326         ///\83R\83\81\83\93\83g\83r\83\85\81[\83N\83\89\83X
327         ///
328         class CCommentView:public CWindowImpl<CCommentView>{
329                 friend CChatChildCtrls;
330                 friend CCommentListWindow;                                              //\83t\83\8c\83\93\83h\90é\8c¾
331                 friend CChatChildCtrlsList;
332                 friend CChatChildCtrls;
333                 friend CChatReadEdit;
334                 //\83v\83\89\83C\83x\81[\83g\8c^\81E\83N\83\89\83X\92è\8b`
335         private:
336
337                 //\83w\83b\83_\81[\8fî\95ñ\8ai\94[\97p\83I\83u\83W\83F\83N\83g
338                 typedef struct{
339
340                         LPTSTR *columns;
341                         UINT_PTR *holizensize;
342                         UINT_PTR count;
343
344                 }HEADERSINFO,*LPHEADERSINFO;
345
346                 
347                 
348
349                 
350
351                 //\83\81\83\93\83o\90é\8c¾
352         private:
353
354                 CHeaderCtrl m_header;                                           //\83w\83b\83_\81[\83R\83\93\83g\83\8d\81[\83\8b
355                 CCommentListWindow  m_commentListWindow;        //\83R\83\81\83\93\83g\83\8a\83X\83g\83E\83B\83\93\83h\83E
356                 CNicoLiveStream &stream;                                //\95ú\91\97\83I\83u\83W\83F\83N\83g
357                 GeneralProperty generalProperty;                        //\88ê\94Ê\90Ý\92è
358                 CCommentList commentlist;                                       //\83R\83\81\83\93\83g\83\8a\83X\83g
359                 CommentViewProperty viewproperty;                       //\95\\8e¦\83v\83\8d\83p\83e\83B
360                 HFONT hHeaderFontNew;                                           //\83w\83b\83_\81[\83t\83H\83\93\83g
361                 CNicoVideoAuth &refAuth;                                        //\83j\83R\83j\83R\90\95ú\91\97\94F\8fØ\83I\83u\83W\83F\83N\83g\8eQ\8fÆ
362
363                 CChatChildCtrlsList chatChildCtrlsList;
364
365                 
366
367
368                 
369                 
370
371                 
372         public:
373
374                 enum{
375                         NO,
376                         USERNAME,
377                         COMMENT,
378                         TIME,
379                         INFO
380
381                 };
382                 
383                 ///
384                 ///\83R\83\93\83X\83g\83\89\83N\83^
385                 ///
386                 CCommentView(CNicoLiveStream &stream,CNicoVideoAuth &refAuth);
387                 
388                 ///
389                 ///\83f\83X\83g\83\89\83N\83^
390                 ///
391                 ~CCommentView();
392
393                 
394
395                 //
396                 //\83E\83B\83\93\83h\83E\83N\83\89\83X\90é\8c¾
397                 //
398                 DECLARE_WND_CLASS_EX(commentViewConstant::NLITE_COMMENTVIEW,0,COLOR_BACKGROUND)
399                 
400                 //
401                 //\83\81\83b\83Z\81[\83W\83}\83b\83v
402                 //
403                 BEGIN_MSG_MAP(CCommentView)
404                         MSG_WM_CREATE(OnCreate)
405                         MSG_WM_DESTROY(OnDestroy)                       
406                         MSG_WM_SIZE(OnSize)
407                         MSG_WM_HSCROLL(OnHScroll)
408                         MSG_WM_VSCROLL(OnVScroll)
409                         MSG_WM_ERASEBKGND(OnEraseBkgnd)
410                         NOTIFY_CODE_HANDLER_EX(HDN_ENDTRACK   ,OnHeaderEndTrack)
411                         NOTIFY_CODE_HANDLER_EX(HDN_ENDDRAG  ,OnHeaderEndDrag)
412                 END_MSG_MAP()
413
414                 ///
415                 ///\83v\83\8d\83p\83e\83B\90Ý\92è
416                 ///
417                 VOID SetProperty(const CommentViewProperty &setProperty,const GeneralProperty &in_generalProperty);
418
419                 ///
420                 ///\83v\83\8d\83p\83e\83B\8eæ\93¾
421                 ///
422                 CommentViewProperty &GetProperty();
423                 
424                 ///
425                 ///\83E\83B\83\93\83h\83E\8dì\90¬
426                 ///
427                 HWND Create(HWND hWndParent);
428
429                 ///
430                 ///\83w\83b\83_\82Ì\89¡\95\9d\8eæ\93¾
431                 ///
432                 UINT_PTR GetColumnHolSizeSum();
433
434                 ///
435                 ///\83j\83R\90\82É\90Ú\91±\8e\9e\82Ì\8f\88\97\9d
436                 ///
437                 VOID OnConnect();
438
439                 ///
440                 ///\83`\83\83\83b\83g\83R\83\81\83\93\83g\8eó\90M\8e\9e\82Ì\8f\88\97\9d
441                 ///
442                 VOID OnChatReceve(NicoLiveChat_P chat,UINT_PTR count);
443
444                 ///
445                 ///\83`\83\83\83b\83g\83R\83\81\83\93\83g\8eó\90M\8am\92è\8f\88\97\9d
446                 ///
447                 VOID OnChatReceveSettle(UINT_PTR commentCount,UINT_PTR commentCountSum);
448                 
449
450
451                 //\83v\83\89\83C\83x\81[\83g\8aÖ\90\94
452         private:
453
454
455                 ///
456                 ///\83w\83b\83_\92Ç\89Á
457                 ///
458                 VOID AddHeader(LPHEADERSINFO infos);
459                 
460                 ///
461                 ///\83w\83b\83_\82Ì\89¡\95\9d\8c\88\92è
462                 ///
463                 VOID DecisionHorzSize();
464
465
466                 ///
467                 ///\83T\83C\83Y\95Ï\8dX\8f\88\97\9d
468                 ///
469                 VOID ChangeSize(const SIZE& client);
470
471                 //\83E\83B\83\93\83h\83E\83\81\83b\83Z\81[\83W\83n\83\93\83h\83\89
472         private:
473
474                 
475
476                 ///
477                 ///\83T\83C\83Y\95Ï\8dX\8cã\8f\88\97\9d
478                 ///
479                 LRESULT OnSize(UINT wParam,SIZE lParam);
480
481                 
482                 
483
484                 ///
485                 ///\94w\8ci\93h\82è\82Â\82Ô\82µ\8f\88\97\9d
486                 ///
487                 LRESULT OnEraseBkgnd(HDC wParam);
488                 
489                 ///
490                 ///\83E\83B\83\93\83h\83E\94j\8aü\8e\9e\82Ì\8f\88\97\9d
491                 ///
492                 VOID OnDestroy();
493                 
494                 ///
495                 ///\83w\83b\83_\83A\83C\83e\83\80\95Ï\8dX\8e\9e\8f\88\97\9d
496                 ///
497                 LRESULT OnHeaderEndTrack(LPNMHDR lParam);
498
499
500                 ///
501                 ///\83w\83b\83_\83h\83\89\83b\83O\8cã\8f\88\97\9d
502                 ///
503                 LRESULT OnHeaderEndDrag(LPNMHDR lParam);
504
505
506
507                 ///
508                 ///\89¡\83X\83N\83\8d\81[\83\8b\8e\9e\82Ì\8f\88\97\9d
509                 ///
510                 VOID OnHScroll(INT_PTR loWParam,SHORT hiWParam,HWND lParam);
511                 
512                 ///
513                 ///\8fc\83X\83N\83\8d\81[\83\8b\8e\9e\82Ì\8f\88\97\9d
514                 ///
515                 VOID OnVScroll(INT_PTR loWParam,SHORT hiWParam,HWND lParam);
516
517                 ///
518                 ///\8dì\90¬\8e\9e\82Ì\8f\88\97\9d
519                 ///
520                 LRESULT OnCreate(LPCREATESTRUCT lpcs);
521                 
522                 
523                 
524                 
525                 
526
527
528         };
529         
530 }