OSDN Git Service

規定のブラウザとのクッキー共有機能実装
[nlite/nlite.git] / nlite / nlite_mainframe.cpp
1 #include "stdafx.h"
2
3 #include "nlite_include.h"
4
5
6 namespace nlite{
7
8 static const RECT commentViewSize = {5,0,5,0};
9
10 ///
11 ///\92è\90\94
12 ///
13 enum{
14         IDC_COMBO_REBAR = 301,
15         IDC_COMBO_TITLE = 302
16 };
17
18
19
20 ///
21 ///\83E\83B\83\93\83h\83E\8dÅ\92á\83T\83C\83Y
22 ///
23 const static SIZE lowestFrameSize = {300,300};
24
25
26
27 CNliteMainFrame::~CNliteMainFrame(){
28
29         DeleteObject(hTabFont);
30 }
31
32 CNliteMainFrame::CNliteMainFrame()
33         :userData(*this),
34         subLiveNoComboBox(*this),
35         commentWriteWindow(nicoLiveStream),
36         commentView(nicoLiveStream,nicoVideoAuth)
37 {
38         LOGFONT lf = {0};
39
40         lf.lfHeight = 10;
41         lf.lfCharSet = SHIFTJIS_CHARSET;
42         hTabFont = CreateFontIndirect(&lf);
43 }
44
45
46 // \83\81\83b\83Z\81[\83W\83t\83B\83\8b\83^\8f\88\97\9d
47 BOOL CNliteMainFrame::PreTranslateMessage(MSG* pMsg){
48         // \8aî\92ê\83N\83\89\83X\82ÌPreTranslateMessage\82ð\8cÄ\82Ñ\8fo\82·
49         return CFrameWindowImpl<CNliteMainFrame>::PreTranslateMessage(pMsg);
50 }
51
52 // \83A\83C\83h\83\8b\8f\88\97\9d
53 BOOL CNliteMainFrame::OnIdle(){
54         return FALSE;
55 }
56
57 //\83T\83C\83Y\95Ï\8dX\8f\88\97\9d
58 VOID CNliteMainFrame::ChangeSize(const SIZE& client){
59
60         
61         UINT_PTR tabheight = client.cy - (toolBarHeight + statusBarHeight + commentWriteWindow.GetHeight());
62
63         
64         RECT tabWindowRect = {0};
65         RECT commentViewRect = {0};
66         RECT commentWriteWindowRect = {0};
67
68
69         tabWindowRect.left = 0;
70         tabWindowRect.top = toolBarHeight;
71         tabWindowRect.right =  client.cx - tabWindowRect.left;
72         tabWindowRect.bottom = tabWindowRect.top + tabheight;
73         
74         
75         commentWriteWindowRect.left = 0;
76         commentWriteWindowRect.top = tabWindowRect.bottom;
77         commentWriteWindowRect.right = commentWriteWindowRect.left + client.cx;
78         commentWriteWindowRect.bottom = commentWriteWindowRect.top + commentWriteWindow.GetHeight();
79
80
81         
82
83         tabctrl.MoveWindow(tabWindowRect.left,tabWindowRect.top,tabWindowRect.right - tabWindowRect.left ,tabWindowRect.bottom - tabWindowRect.top);
84         
85         
86         tabctrl.GetClientRect(&commentViewRect);
87         tabctrl.AdjustRect(FALSE,&commentViewRect);
88
89         commentView.MoveWindow(commentViewRect.left, commentViewRect.top,commentViewRect.right - commentViewRect.left, commentViewRect.bottom - commentViewRect.top);
90
91         commentWriteWindow.MoveWindow(commentWriteWindowRect.left,commentWriteWindowRect.top,commentWriteWindowRect.right - commentWriteWindowRect.left ,commentWriteWindowRect.bottom - commentWriteWindowRect.top);
92         commentWriteWindow.Invalidate();
93         ::InvalidateRect(m_hWndStatusBar,NULL,TRUE);
94
95 //      tabctrl.SetWindowPos(*this,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
96 //      commentWriteWindow.SetWindowPos(*this,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
97         return;
98 }
99
100 LRESULT CNliteMainFrame::OnCbSelChange(UINT hiWparam,int loWparam,HWND lParam){
101
102         if(lParam == this->lvNoCombo){
103                 INT_PTR cursel = this->lvNoCombo.GetCurSel();
104                 if(cursel == CB_ERR)goto end;
105                 auto it = this->subLiveNoComboBox.liveInfoList.begin();
106                 std::advance(it,cursel);
107                 this->ConnectNicoLive(it->second);
108
109         }
110
111 end:
112
113         return 0;
114 }
115
116 LRESULT CNliteMainFrame::OnCreate(LPCREATESTRUCT lpcs){
117
118         
119         // \83X\83e\81[\83^\83X\83o\81[\82ð\8dì\90¬
120         m_hWndStatusBar = m_hStatusBar.Create(*this);
121         UIAddStatusBar(m_hWndStatusBar);
122         // \83X\83e\81[\83^\83X\83o\81[\82É\83y\83C\83\93\82ð\90Ý\92è
123         //INT_PTR nPanes[] = {ID_DEFAULT_PANE, IDS_PANE_TIME};
124         //m_hStatusBar.SetPanes(nPanes, sizeof(nPanes)/sizeof(nPanes[0]));
125         //progresBar.Create(m_hWnd,0,NULL,);
126         //m_hStatusBar.SetClipboardViewer
127         tabctrl.Create(m_hWnd,0,NULL,WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_DLGFRAME );
128         commentView.Create(tabctrl.m_hWnd);
129         
130         commentWriteWindow.Create(m_hWnd,0,NULL,WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN  );
131         CreateSimpleReBar();
132         HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd,IDC_NLITE, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);
133         lvNoCombo.Create(m_hWnd, CRect(0, 0, 100, 100), NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL  | CBS_DROPDOWN | CBS_AUTOHSCROLL, 0, IDC_COMBO_REBAR);
134         lvNoCombo.LimitText(LENGTH_512);
135
136         subLiveNoComboBox.SubclassWindow(lvNoCombo.GetEditCtrl());
137         lvNoCombo.SetFont(AtlGetDefaultGuiFont());
138         
139         
140
141         //AddSimpleReBarBand(hWndToolBar);
142         AddSimpleReBarBand(lvNoCombo,TEXT("\95ú\91\97URL"));
143         SizeSimpleReBarBands();
144         
145         //tabctrl.SetWindowPos(*this,0,0,0,0,SWP_SHOWWINDOW);
146         
147         tabctrl.SetFont(hTabFont);
148         tabctrl.AddItem(TCIF_TEXT | TCIF_PARAM, _T("\83R\83\81\83\93\83g\88ê\97\97"), 0, (DWORD)commentView.m_hWnd);
149
150         
151                 
152         // \83\81\83b\83Z\81[\83W\83\8b\81[\83v\82É\83\81\83b\83Z\81[\83W\83t\83B\83\8b\83^\82Æ\83A\83C\83h\83\8b\83n\83\93\83h\83\89\82ð\92Ç\89Á
153         CMessageLoop* pLoop = _Module.GetMessageLoop();
154         pLoop->AddMessageFilter(this);
155         pLoop->AddIdleHandler(this);
156
157         RECT wndRect;
158         this->GetWindowRect(&wndRect);
159         
160         LONG cyMaxImized = GetSystemMetrics (SM_CYMAXIMIZED);
161         wndRect.bottom = nliteProperty.mfp.windowSize.cy != 0 ? nliteProperty.mfp.windowSize.cy : (LONG)cyMaxImized / 2;
162         wndRect.right = nliteProperty.mfp.windowSize.cx != 0 ? nliteProperty.mfp.windowSize.cx : commentViewSize.left + commentViewSize.right + 20 + commentView.GetColumnHolSizeSum();
163
164         
165
166         RECT statusbarRect;
167         ::GetClientRect(m_hWndStatusBar,&statusbarRect);
168
169         statusBarHeight = statusbarRect.bottom - statusbarRect.top;
170         
171         
172
173         this->MoveWindow(wndRect.left,wndRect.top,wndRect.right,wndRect.bottom);
174         
175         listenerSettingWindow.Create(*this);
176         
177         this->SetMenuItemCheck(IDM_FRONT_WINDOW_CHECK,nliteProperty.mfp.windowFrontFlag);
178         this->SetMenuItemCheck(IDM_SPEAK_COMMENT_CHECK,nliteProperty.crp.commentReadFlag);
179         
180         this->SetWindowPos(nliteProperty.mfp.windowFrontFlag == TRUE ? HWND_TOPMOST : HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
181
182         return 0;
183 }
184
185
186
187 VOID CNliteMainFrame::Initialize(LPCTSTR localAppDataPath){
188
189         try{
190                 nliteProperty.ReadProperty();
191
192         
193                 if((nliteProperty.gp.ncvUserSettingReadedFlag == FALSE) && 
194                         ((PathFileExists(ncvAppSettingPath) &&  (!::PathIsDirectory( ncvAppSettingPath ))))){
195                 
196                         if((::MessageBox(NULL,TEXT("NCV\82Ì\83\8a\83X\83i\81[\8fî\95ñ\82Æ\93¯\8aú\82µ\82Ü\82·\82©\81H"),TEXT("\83\8a\83X\83i\81[\8fî\95ñ\93Ç\82Ý\8d\9e\82Ý"),MB_OK | MB_OKCANCEL) == IDOK)){
197                                 listenerList.ReadProperty(GetNCVListenerInfoFilePath());
198                         }
199                         nliteProperty.gp.ncvUserSettingReadedFlag = TRUE;
200                 
201
202                         
203                         
204                 }
205
206                 listenerList.ReadProperty(nliteProperty.listenerDataPath);
207
208                 commentView.SetProperty(nliteProperty.cvp,nliteProperty.gp);
209                 if(nliteProperty.gp.browserType == BT_NOSETTING){
210                         nliteProperty.CookieSetting();
211                         while(nliteProperty.gp.browserType == BT_NOSETTING){
212                                 ::MessageBox(NULL,TEXT("\83u\83\89\83E\83U\83^\83C\83v\82ð\8ew\92è\82µ\82Ä\82­\82¾\82³\82¢\81B\82±\82ê\88È\8aO\82Ì\83u\83\89\83E\83U\82Í\8c»\8dÝ\8eg\97p\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ"),TEXT("\83u\83\89\83E\83U\83^\83C\83v\8ew\92è\83G\83\89\81["),MB_OK);
213                                 nliteProperty.CookieSetting();
214                         }
215                 }
216                         
217                 nicoVideoAuth.SetBrowserType(nliteProperty.gp.browserType);
218                 nicoLiveStream.SetResFrom(200);
219         }catch(Exception &e){
220
221                 ::MessageBox(NULL,e.what(),TEXT("\90Ý\92è\83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý\83G\83\89\81["),MB_OK | MB_ICONERROR);
222
223         }
224         return;
225                         
226 }
227
228 VOID CNliteMainFrame::OnClose(){
229         this->ShowWindow(SW_HIDE);
230         nicoLiveStream.DisConnect();
231         this->DestroyWindow();
232         
233         return;
234 }
235
236 VOID CNliteMainFrame::OnDestroy(){
237         
238         commentView.DestroyWindow();
239                         
240         PostQuitMessage(0);
241         return;
242 }
243
244
245 VOID CNliteMainFrame::OnException(){
246
247         nicoLiveStream.DisConnect();
248
249 }
250
251
252 BOOL CNliteMainFrame::IsMenuItemChecked(UINT item){
253         MENUITEMINFO menuInfo;
254         menuInfo.fMask = MIIM_STATE;
255         menuInfo.cbSize = sizeof(menuInfo);
256         ::GetMenuItemInfo(this->GetMenu(),item,FALSE,&menuInfo);
257         return menuInfo.fState == MFS_CHECKED;
258 }
259
260
261 VOID CNliteMainFrame::SetMenuItemCheck(UINT item,BOOL state){
262         MENUITEMINFO menuInfo;
263         menuInfo.cbSize = sizeof(menuInfo);
264         menuInfo.fMask = MIIM_STATE;
265         menuInfo.fState = state == TRUE ? MFS_CHECKED :MFS_UNCHECKED;
266         ::SetMenuItemInfo(this->GetMenu(),item,FALSE,&menuInfo);
267
268 }
269
270 //\83\81\83j\83\85\81[\82©\82ç\83t\83@\83C\83\8b\82ð\8fI\97¹\82ð\91I\91ð
271 VOID CNliteMainFrame::OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){
272         PostMessage(WM_CLOSE);
273 }
274
275 //\83\81\83j\83\85\81[\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\83o\81[\83W\83\87\83\93\8fî\95ñ\95\\8e¦
276 VOID CNliteMainFrame::OnMenuAbount(UINT uNotifyCode,int nID,HWND hWndCtl){
277         appInfo->show();
278 }
279
280 VOID CNliteMainFrame::Finalaize(){
281
282         nliteProperty.cvp = commentView.GetProperty();
283         nliteProperty.WriteProperty();
284         listenerList.WriteProperty(nliteProperty.listenerDataPath);
285 }
286
287 VOID CNliteMainFrame::OnViewPreference(UINT uNotifyCode,int nID,HWND hWndCtl){
288
289         //ViewerPropertyWindow propetyWindow(TEXT("\83r\83\85\81[\83A\90Ý\92è"));
290         
291         //propetyWindow.DoModal();
292
293         return;
294 }
295
296 LRESULT CNliteMainFrame::OnUnlockLvNoBuffer(UINT uMsg,WPARAM wParam,LPARAM lParam){
297         this->lvNoBufCS.Unlock();
298         return 0;
299 }
300
301 //\83N\83b\83L\81[\82Ì\90Ý\92è
302 VOID CNliteMainFrame::OnCookie(UINT uNotifyCode,int nID,HWND hWndCtl){
303         nliteProperty.CookieSetting();
304                         
305         while(nliteProperty.gp.browserType == BT_NOSETTING){
306                 ::MessageBox(NULL,TEXT("\83u\83\89\83E\83U\83^\83C\83v\82ð\8ew\92è\82µ\82Ä\82­\82¾\82³\82¢\81B\82±\82ê\88È\8aO\82Ì\83u\83\89\83E\83U\82Í\8c»\8dÝ\8eg\97p\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ"),TEXT("\83u\83\89\83E\83U\83^\83C\83v\8ew\92è\83G\83\89\81["),MB_OK);
307                 nliteProperty.CookieSetting();
308         }
309                         
310         try {
311                 nicoVideoAuth.SetBrowserType(nliteProperty.gp.browserType);
312         } catch(NLIBException &e){
313
314                 MessageBox(e.what(),TEXT("\83N\83b\83L\81[\8eæ\93¾\8e¸\94s"),MB_OK | MB_ICONERROR);
315
316         }
317         
318
319 }
320
321 VOID CNliteMainFrame::OnSpeakCommentCheck(UINT uNotifyCode,int nID,HWND hWndCtl){
322
323
324         nliteProperty.crp.commentReadFlag = !IsMenuItemChecked(IDM_SPEAK_COMMENT_CHECK);
325         SetMenuItemCheck(IDM_SPEAK_COMMENT_CHECK,nliteProperty.crp.commentReadFlag );
326         
327         return;
328 }
329
330 VOID CNliteMainFrame::OnFrontWindowCheck(UINT uNotifyCode,int nID,HWND hWndCtl){
331
332
333         nliteProperty.mfp.windowFrontFlag = !IsMenuItemChecked(IDM_FRONT_WINDOW_CHECK);
334         SetMenuItemCheck(IDM_FRONT_WINDOW_CHECK,nliteProperty.mfp.windowFrontFlag );
335         this->SetWindowPos(nliteProperty.mfp.windowFrontFlag == TRUE ? HWND_TOPMOST : HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
336         return;
337 }
338
339 VOID CNliteMainFrame::ConnectingThread(LPVOID userData){
340
341         auto &self = *(CNliteMainFrame*)userData;
342         CString lvNoString = self.lvNoBuffer;
343         self.SendMessage(UM_UNLOCK_LVNOBUFFER,(WPARAM)0,(LPARAM)0);
344         try {
345                 self.nicoLiveStream.DisConnect();
346                 self.commentView.OnConnect();
347                 
348         
349                 NLIB_RESULT code = self.nicoLiveStream.Connect(self.nicoVideoAuth,lvNoString,LiveCallBack,&self.userData);
350
351                 //\83G\83\89\81[\83R\81[\83h\8f\88\97\9d
352                 switch(code){
353         
354                         //\90³\8fí\8fI\97¹
355                 case NLIB_ERR_OK:
356
357                         
358                         goto end;
359
360                         //\91z\92è\82³\82ê\82½\83G\83\89\81[\83R\81[\83h
361                 case NLIB_ERR_COOKIE_FAILED:
362                 case NLIB_LIVENO_FAILED_UNDEFEINE:
363                 case NLIB_FAILED_CONNECT:
364                 case NLIB_ERR_GETPLAYERSTATUS_INVALID_LV:
365                 case NLIB_ERR_GETPLAYERSTATUS_INVALID_THREAD:
366                 case NLIB_ERR_GETPLAYERSTATUS_CLOSED:
367                 case NLIB_ERR_GETPLAYERSTATUS_UNKNOWN_ERROR:
368                 case NLIB_ERR_GETPLAYERSTATUS_SERVER_ERROR:
369                 case NLIB_ERR_GETPLAYERSTATUS_DELETED:
370                 case NLIB_ERR_GETPLAYERSTATUS_FULL:
371                 case NLIB_ERR_GETPLAYERSTATUS_PERMISSION_DENIED:
372                 case NLIB_ERR_GETPLAYERSTATUS_ACCESS_LOCKED:
373                 case NLIB_ERR_GETPLAYERSTATUS_REQUIRE_COMMUNITY_MEMBER:
374                 case NLIB_ERR_GETPLAYERSTATUS_COMINGSOON:
375                 case NLIB_ERR_GETPLAYERSTATUS_NOTFOUND:
376                 case NLIB_ERR_GETPLAYERSTATUS_NOTLOGIN:
377                 case NLIB_ERR_GETPLAYERSTATUS_UNKNOWN:
378                 case NLIB_ERR_GETPLAYERSTATUS_MAINTENANCE:
379                 case NLIB_ERR_GETPLAYERSTATUS_NOT_PERMITTED:
380                 case NLIB_ERR_GETPLAYERSTATUS_REQUIRE_ACCEPT_PRINT_TIMESHIFT_TICKET:
381                 case NLIB_ERR_GETPLAYERSTATUS_TSARCHIVE:
382                 case NLIB_ERR_GETPLAYERSTATUS_USERTIMESHIFT:
383                 case NLIB_ERR_GETPLAYERSTATUS_UNDEFINED:
384                 case NLIB_ERR_GETPLAYERSTATUS_NOAUTH:
385                 case NLIB_ERR_GETPLAYERSTATUS_CHANT_PARSE:
386                 case NLIB_ERR_GETPLAYERSTATUS_BLOCK_NOW_COUNT_OVERFLOW:
387
388
389                         
390                         ::MessageBox(self,NLIB_GetErrorMessage(code),TEXT("\95ú\91\97\90Ú\91±\83G\83\89\81["),MB_ICONERROR | MB_OK);
391
392                         break;
393
394
395                         //\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81[\83R\81[\83h
396                 default:
397                 
398                         UnexpectedErrorMessageShow( TEXT("\95ú\91\97\90Ú\91±\92\86\82É"),NLIB_GetErrorMessage(code),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
399
400                 
401                         break;
402
403                 }
404                 self.subLiveNoComboBox.AgreeInputLvNo();
405                 
406
407         } catch(nlib::Exception &e){
408
409                 UnexpectedErrorMessageShow( TEXT("\95ú\91\97\90Ú\91±\92\86\82É"),e.what(),e.getLineNo(),e.getFileName(),e.getFunctionName());
410
411         }
412 end:
413         
414         self.subLiveNoComboBox.AgreeInputLvNo();
415         _endthread();
416         return;
417 }
418
419
420 BOOL CNliteMainFrame::ConnectNicoLive(LPCTSTR liveNo){
421         
422         lvNoCombo.GetEditCtrl().SetReadOnly(TRUE);
423         subLiveNoComboBox.untilConnectingFlag = TRUE;
424         EnableWindow(FALSE);
425         lvNoBufCS.Lock();
426         this->lvNoBuffer = liveNo;
427         _beginthread(CNliteMainFrame::ConnectingThread,0,this);
428
429         
430
431
432         return TRUE;
433
434 }
435
436
437 //\83T\83C\83Y\95Ï\8dX\8cã
438 LRESULT CNliteMainFrame::OnSize(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL& bHandled){
439
440
441         SIZE clientSize;
442         clientSize.cx = LOWORD(lParam);
443         clientSize.cy = HIWORD(lParam);
444         ChangeSize(clientSize);
445
446         bHandled = FALSE;
447                         
448                         
449
450         return 0;
451 }
452
453
454 ///
455 ///\83T\83C\83Y\95Ï\8dX\92\86\8f\88\97\9d
456 ///
457 VOID CNliteMainFrame::OnSizing(UINT wParam,LPRECT lParam){
458                         
459         if(lParam->right - lParam->left < lowestFrameSize.cx){
460                 lParam->right = lParam->left + lowestFrameSize.cx;
461         }
462
463         if(lParam->bottom - lParam->top < lowestFrameSize.cy){
464
465                 lParam->bottom = lParam->top + lowestFrameSize.cy;
466         }
467                         
468 }
469
470
471 //\83c\81[\83\8b\83o\81[\8d\82\82³\95Ï\8dX
472 LRESULT CNliteMainFrame::OnRbnHeightChange(INT_PTR wParam,LPNMHDR lParam,BOOL &bHandled){
473
474         RECT toolbarRect;
475         ::GetClientRect(m_hWndToolBar,&toolbarRect);
476         toolBarHeight = toolbarRect.bottom - toolbarRect.top;
477
478         RECT client;
479         GetClientRect(&client);
480
481         ChangeSize( _WTYPES_NS::CSize(client.right - client.left,client.bottom - client.top));
482
483
484
485         return 0;
486 }
487
488 LRESULT CNliteMainFrame::OnUpDateUI(UINT uMsg,WPARAM wParam,LPARAM lParam){
489
490
491         commentView.UpDateUI();
492
493         return 0;
494 }
495
496 LRESULT CNliteMainFrame::OnClickChatNo(UINT uMsg,WPARAM wParam,LPARAM lParam){
497
498         auto &chatData = *(CChatData*)wParam;
499         CString setString;
500         if(chatData.listenerData->name.Length() == 0){
501                 setString.Format(TEXT(">>%d "),chatData.no);
502         }else{
503                 setString.Format(TEXT(">>%s "),chatData.listenerData->name);
504         }
505
506         this->commentWriteWindow.SetText(setString);
507
508         return 0;
509
510 }
511
512 LRESULT CNliteMainFrame::OnClickUserName(UINT uMsg,WPARAM wParam,LPARAM lParam){
513
514         auto &chatData = *(CChatData*)wParam;
515         listenerSettingWindow.ShowSettingWindow(*chatData.listenerData);
516
517
518         return 0;
519 }
520
521
522 NLIB_RESULT CNliteMainFrame::LiveCallBack(NICOLIVE_EVENT eventType,NicoLiveStream_P pNicoLiveStream,LPVOID option,NICOLIVE_PARAM param1,NICOLIVE_PARAM param2){
523
524         CLiveUserData &userData = (*(CLiveUserData*)option);
525
526         try{
527                 
528
529                 switch(eventType){
530
531                 case NICOLIVE_EVENT_RECEVE_CONNECTRESULT:
532
533                         userData.OnChatReceveStart(userData.self.nicoLiveStream,(NicoLiveThreadComment_P)param1);
534
535                         break;
536
537                 case NICOLIVE_EVENT_RECEVE_CHAT:
538
539                         userData.OnChatReceve((NicoLiveChat_P) param1,param2);
540
541                         break;
542
543                 case NICOLIVE_EVENT_RECEVE_CHATSETTLE:
544
545                         userData.OnChatReceveSettle(param1,param2);
546
547                         break;
548
549                 case NICOLIVE_EVENT_RECEVE_CHATSENDRESULT:
550
551                         userData.OnChatSendResult(reinterpret_cast<NicoLiveSendResultComment_P>(param1));
552
553                         break;
554
555                 case NICOLIVE_EVENT_SEND_HEARTBEAT:
556
557                         userData.OnHeartBeat(reinterpret_cast<NicoLiveHeartBeat_P>(param1));
558
559                         break;
560
561
562                 case NICOLIVE_EVENT_DISCONNECT:
563
564                         userData.OnDisconnect();
565
566                         break;
567
568                 case NICOLIVE_EVENT_ERR_CONNECT:
569
570                         throw NLiveException(TEXT("\90Ú\91±\83G\83\89\81[\82Å\82·"),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
571
572                         break;
573
574                 default:
575
576                         throw NLiveException(TEXT("\97\\8aú\82µ\82È\82¢\83\81\83b\83Z\81[\83W\82ª\91\97\90M\82³\82ê\82Ü\82µ\82½"),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
577
578                         break;
579                 }
580
581         } catch(Exception e){
582                 UnexpectedErrorMessageShow(TEXT("\83n\83\93\83h\83\8b\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),e.what(),e.getLineNo(),e.getFileName(),e.getFunctionName());
583         
584         } catch(std::exception e){
585                 UnexpectedErrorMessageShow(TEXT("\83n\83\93\83h\83\8b\82³\82ê\82Ä\82¢\82È\82¢\95s\96¾\82Ì\83G\83\89\81["),CComBSTR(e.what()),-1,TEXT("\94­\90\83t\83@\83C\83\8b\82ª\93Á\92è\8fo\97\88\82Ü\82¹\82ñ"),TEXT("\94­\90\8aÖ\90\94\82ª\93Á\92è\82Å\82«\82Ü\82¹\82ñ"));
586         }
587         
588
589         
590
591         return NLIB_ERR_OK;
592 }
593
594
595 LRESULT CNliteMainFrame::OnSetCursor(LRESULT msg,WPARAM wParam,LPARAM lParam,BOOL &bHandled){
596
597         
598         BOOL rslt = FALSE;
599         
600         if(this->subLiveNoComboBox.untilConnectingFlag == TRUE || this->commentWriteWindow.IsWrighthing() == TRUE){
601                 
602                 if(this->subLiveNoComboBox.untilConnectingFlag == TRUE){
603                         ::SetCursor(::LoadCursorW(NULL,IDC_WAIT));
604                 } else if(this->commentWriteWindow.IsWrighthing() == TRUE){
605                         ::SetCursor(::LoadCursorW(NULL,IDC_APPSTARTING));
606                 }
607                 bHandled = TRUE;
608                 rslt = TRUE;
609         
610
611
612
613         } else {
614                 bHandled = FALSE;
615         }
616         
617
618         return TRUE;
619
620 }
621
622
623 //
624 //CSubLiveNoComboBox
625 ////////////////////////////////////
626
627 CNliteMainFrame::CSubLiveNoComboBox::CSubLiveNoComboBox(CNliteMainFrame &in_self):self(in_self),untilConnectingFlag(FALSE){}
628
629 static VOID AgreeEnterKeyThread(LPVOID userData){
630
631         Sleep(1000);
632         auto noCombo = (CNliteMainFrame::CSubLiveNoComboBox*) userData;
633         noCombo->AgreeInputLvNo();
634
635         return;
636 }
637
638 VOID CNliteMainFrame::CSubLiveNoComboBox::OnKeyDown(TCHAR wParam, UINT upLParam,UINT loLParam){
639         if(wParam == VK_RETURN){
640                                         
641                 cs.Lock();
642                                         
643                 //INT_PTR no = self.lvNoCombo.GetCurSel();
644                 if(untilConnectingFlag == FALSE){
645                         
646                         std::vector<TCHAR> buffer(this->GetWindowTextLengthW() + 1); 
647                         ::GetWindowTextW(this->m_hWnd,&buffer[0],buffer.size());
648                         
649                         
650                         self.ConnectNicoLive(&buffer[0]);
651                 }               
652                 cs.Unlock();
653                                         
654                                         
655         } else {
656
657                 this->DefWindowProc();
658
659         }
660         return;
661 }
662
663 LRESULT CNliteMainFrame::CSubLiveNoComboBox::OnMouseWheel(UINT loWparam,SHORT hiWparam,CPoint &point){
664
665
666         return FALSE;
667 }
668
669
670
671 VOID CNliteMainFrame::CSubLiveNoComboBox::AddLiveInfo(CNicoLiveStream &stream,LvnoSearchFunctional &functional){
672         
673         CNLiteString dispComboString;
674         dispComboString += stream.GetId();
675         dispComboString += TEXT("\81@-");
676         dispComboString += stream.GetDefaultCommunity();
677         dispComboString += TEXT("\81@title\81F");
678         dispComboString += stream.GetTitle();
679
680         if(std::find_if(liveInfoList.begin(),liveInfoList.end(),functional) == liveInfoList.end()){
681                 liveInfoList.push_back(LiveInfo(dispComboString,stream.GetId()));
682                 
683                 self.lvNoCombo.InsertItem(self.lvNoCombo.GetCount(),dispComboString,0,0,0,0);
684         
685         } 
686         functional.dispData = dispComboString;
687
688         
689
690
691         return;
692 }
693
694
695 VOID CNliteMainFrame::CSubLiveNoComboBox::AgreeInputLvNo(){
696         cs.Lock();
697         self.lvNoCombo.GetEditCtrl().SetReadOnly(FALSE);
698         self.EnableWindow(TRUE);
699         untilConnectingFlag = FALSE;
700         POINT mousePoint;
701         ::GetCursorPos(&mousePoint);
702         ::SetCursorPos(mousePoint.x,mousePoint.y);
703         cs.Unlock();
704 }
705
706
707 //
708 //CLiveUserData
709 /////////////////////////////////////////////////////////////////////////
710
711 CNliteMainFrame::CLiveUserData::CLiveUserData(CNliteMainFrame &self):self(self)
712 {}
713
714
715
716 VOID CNliteMainFrame::CLiveUserData::OnConnect(){
717
718         self.commentView.OnConnect();
719
720 }
721
722
723 VOID CNliteMainFrame::CLiveUserData::OnChatReceveStart(CNicoLiveStream &stream,NicoLiveThreadComment_P threadComment){
724         
725         LvnoSearchFunctional functional(stream.GetId());
726         self.commentWriteWindow.OnChatReceveStart(stream,threadComment);
727         self.subLiveNoComboBox.AddLiveInfo(stream,functional);
728         self.subLiveNoComboBox.SetWindowText(functional.dispData);
729         self.subLiveNoComboBox.AgreeInputLvNo();
730         
731         return;
732 }
733
734 VOID CNliteMainFrame::CLiveUserData::OnChatReceve(NicoLiveChat_P chat,UINT_PTR count){
735
736         self.commentView.OnChatReceve(chat,count);
737         
738 }
739
740 VOID CNliteMainFrame::CLiveUserData::OnChatReceveSettle(UINT_PTR commentCount,UINT_PTR commentCountSum){
741
742         self.commentView.OnChatReceveSettle(commentCount,commentCountSum);
743         
744         return;
745 }
746
747 VOID CNliteMainFrame::CLiveUserData::OnChatSendResult(NicoLiveSendResultComment_P sendResult){
748         self.commentWriteWindow.OnSendChatResult();
749         return;
750 }
751
752
753 VOID CNliteMainFrame::CLiveUserData::OnHeartBeat(NicoLiveHeartBeat_P heartBeat){
754
755         self.commentWriteWindow.OnHeartBeat(heartBeat);
756
757         return;
758 }
759
760
761
762 VOID CNliteMainFrame::CLiveUserData::OnDisconnect(){
763         self.commentWriteWindow.OnDisConnect();
764         return;
765 }
766
767 }