2 #include "nlite_include.h"
7 static const RECT commentViewSize = {5,0,5,0};
13 IDC_COMBO_REBAR = 301,
20 ///
\83E
\83B
\83\93\83h
\83E
\8dÅ
\92á
\83T
\83C
\83Y
22 const static SIZE lowestFrameSize = {300,300};
26 CNliteMainFrame::~CNliteMainFrame(){
28 DeleteObject(hTabFont);
31 CNliteMainFrame::CNliteMainFrame()
33 subLiveNoComboBox(*this),
34 commentWriteWindow(nicoLiveStream),
35 commentView(nicoLiveStream)
40 lf.lfCharSet = SHIFTJIS_CHARSET;
41 hTabFont = CreateFontIndirect(&lf);
45 //
\83\81\83b
\83Z
\81[
\83W
\83t
\83B
\83\8b\83^
\8f\88\97\9d
46 BOOL CNliteMainFrame::PreTranslateMessage(MSG* pMsg){
47 //
\8aî
\92ê
\83N
\83\89\83X
\82ÌPreTranslateMessage
\82ð
\8cÄ
\82Ñ
\8fo
\82·
48 return CFrameWindowImpl<CNliteMainFrame>::PreTranslateMessage(pMsg);
51 //
\83A
\83C
\83h
\83\8b\8f\88\97\9d
52 BOOL CNliteMainFrame::OnIdle(){
56 //
\83T
\83C
\83Y
\95Ï
\8dX
\8f\88\97\9d
57 VOID CNliteMainFrame::ChangeSize(const SIZE& client){
60 UINT_PTR tabheight = client.cy - (toolBarHeight + statusBarHeight + commentWriteWindow.commentWriteHeight);
63 RECT tabWindowRect = {0};
64 RECT commentViewRect = {0};
65 RECT commentWriteWindowRect = {0};
68 tabWindowRect.left = 0;
69 tabWindowRect.top = toolBarHeight;
70 tabWindowRect.right = client.cx - tabWindowRect.left;
71 tabWindowRect.bottom = tabWindowRect.top + tabheight;
74 commentWriteWindowRect.left = 0;
75 commentWriteWindowRect.top = tabWindowRect.bottom;
76 commentWriteWindowRect.right = commentWriteWindowRect.left + client.cx;
77 commentWriteWindowRect.bottom = commentWriteWindowRect.top + commentWriteWindow.commentWriteHeight;
82 tabctrl.MoveWindow(tabWindowRect.left,tabWindowRect.top,tabWindowRect.right - tabWindowRect.left ,tabWindowRect.bottom - tabWindowRect.top);
85 tabctrl.GetClientRect(&commentViewRect);
86 tabctrl.AdjustRect(FALSE,&commentViewRect);
88 commentView.MoveWindow(commentViewRect.left, commentViewRect.top,commentViewRect.right - commentViewRect.left, commentViewRect.bottom - commentViewRect.top);
90 commentWriteWindow.MoveWindow(commentWriteWindowRect.left,commentWriteWindowRect.top,commentWriteWindowRect.right - commentWriteWindowRect.left ,commentWriteWindowRect.bottom - commentWriteWindowRect.top);
91 commentWriteWindow.Invalidate();
92 ::InvalidateRect(m_hWndStatusBar,NULL,TRUE);
94 // tabctrl.SetWindowPos(*this,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
95 // commentWriteWindow.SetWindowPos(*this,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
99 LRESULT CNliteMainFrame::OnCbSelChange(UINT hiWparam,int loWparam,HWND lParam){
101 if(lParam == this->lvNoCombo){
102 INT_PTR cursel = this->lvNoCombo.GetCurSel();
103 if(cursel == CB_ERR)goto end;
104 auto it = this->subLiveNoComboBox.liveInfoList.begin();
105 std::advance(it,cursel);
106 this->ConnectNicoLive(it->second);
115 LRESULT CNliteMainFrame::OnCreate(LPCREATESTRUCT lpcs){
118 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82ð
\8dì
\90¬
119 m_hWndStatusBar = m_hStatusBar.Create(*this);
120 UIAddStatusBar(m_hWndStatusBar);
121 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\83y
\83C
\83\93\82ð
\90Ý
\92è
122 //INT_PTR nPanes[] = {ID_DEFAULT_PANE, IDS_PANE_TIME};
123 //m_hStatusBar.SetPanes(nPanes, sizeof(nPanes)/sizeof(nPanes[0]));
124 //progresBar.Create(m_hWnd,0,NULL,);
125 //m_hStatusBar.SetClipboardViewer
126 tabctrl.Create(m_hWnd,0,NULL,WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_DLGFRAME );
127 commentView.Create(tabctrl.m_hWnd);
129 commentWriteWindow.Create(m_hWnd,0,NULL,WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN );
131 HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd,IDC_NLITE, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);
132 lvNoCombo.Create(m_hWnd, CRect(0, 0, 100, 100), NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL, 0, IDC_COMBO_REBAR);
133 lvNoCombo.LimitText(LENGTH_512);
135 subLiveNoComboBox.SubclassWindow(lvNoCombo.GetEditCtrl());
136 lvNoCombo.SetFont(AtlGetDefaultGuiFont());
140 //AddSimpleReBarBand(hWndToolBar);
141 AddSimpleReBarBand(lvNoCombo,TEXT("
\95ú
\91\97URL"));
142 SizeSimpleReBarBands();
144 //tabctrl.SetWindowPos(*this,0,0,0,0,SWP_SHOWWINDOW);
146 tabctrl.SetFont(hTabFont);
147 tabctrl.AddItem(TCIF_TEXT | TCIF_PARAM, _T("
\83R
\83\81\83\93\83g
\88ê
\97\97"), 0, (DWORD)commentView.m_hWnd);
151 //
\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Á
152 CMessageLoop* pLoop = _Module.GetMessageLoop();
153 pLoop->AddMessageFilter(this);
154 pLoop->AddIdleHandler(this);
157 this->GetWindowRect(&wndRect);
159 LONG cyMaxImized = GetSystemMetrics (SM_CYMAXIMIZED);
160 wndRect.bottom = nliteProperty.mfp.windowSize.cy != 0 ? nliteProperty.mfp.windowSize.cy : (LONG)cyMaxImized / 2;
161 wndRect.right = nliteProperty.mfp.windowSize.cx != 0 ? nliteProperty.mfp.windowSize.cx : commentViewSize.left + commentViewSize.right + 20 + commentView.GetColumnHolSizeSum();
166 ::GetClientRect(m_hWndStatusBar,&statusbarRect);
168 statusBarHeight = statusbarRect.bottom - statusbarRect.top;
172 this->MoveWindow(wndRect.left,wndRect.top,wndRect.right,wndRect.bottom);
182 VOID CNliteMainFrame::Initialize(LPCTSTR localAppDataPath){
184 nliteProperty.ReadProperty();
186 commentView.SetProperty(nliteProperty.cvp);
188 if(nliteProperty.gp.browserType == BT_NOSETTING){
189 nliteProperty.CookieSetting();
190 while(nliteProperty.gp.browserType == BT_NOSETTING){
191 ::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);
192 nliteProperty.CookieSetting();
196 nicoVideoAuth.SetBrowserType(nliteProperty.gp.browserType);
197 nicoLiveStream.SetResFrom(1000);
203 VOID CNliteMainFrame::OnClose(){
204 this->ShowWindow(SW_HIDE);
205 nicoLiveStream.DisConnect();
206 this->DestroyWindow();
211 VOID CNliteMainFrame::OnDestroy(){
213 commentView.DestroyWindow();
220 VOID CNliteMainFrame::OnException(){
222 nicoLiveStream.DisConnect();
226 //
\83\81\83j
\83\85\81[
\82©
\82ç
\83t
\83@
\83C
\83\8b\82ð
\8fI
\97¹
\82ð
\91I
\91ð
227 VOID CNliteMainFrame::OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){
228 PostMessage(WM_CLOSE);
231 //
\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¦
232 VOID CNliteMainFrame::OnMenuAbount(UINT uNotifyCode,int nID,HWND hWndCtl){
236 VOID CNliteMainFrame::Finalaize(){
238 nliteProperty.cvp = commentView.GetProperty();
239 nliteProperty.WriteProperty();
242 VOID CNliteMainFrame::OnViewPreference(UINT uNotifyCode,int nID,HWND hWndCtl){
248 //
\83N
\83b
\83L
\81[
\82Ì
\90Ý
\92è
249 VOID CNliteMainFrame::OnCookie(UINT uNotifyCode,int nID,HWND hWndCtl){
250 nliteProperty.CookieSetting();
252 while(nliteProperty.gp.browserType == BT_NOSETTING){
253 ::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);
254 nliteProperty.CookieSetting();
258 nicoVideoAuth.SetBrowserType(nliteProperty.gp.browserType);
263 BOOL CNliteMainFrame::ConnectNicoLive(LPCTSTR liveNo){
265 this->lvNoCombo.GetEditCtrl().SetReadOnly(TRUE);
266 this->EnableWindow(FALSE);
267 nicoLiveStream.DisConnect();
268 commentView.OnConnect();
270 NLIB_RESULT code = nicoLiveStream.Connect(nicoVideoAuth,liveNo,LiveCallBack,&userData);
272 //
\83G
\83\89\81[
\83R
\81[
\83h
\8f\88\97\9d
281 //
\91z
\92è
\82³
\82ê
\82½
\83G
\83\89\81[
\83R
\81[
\83h
282 case NLIB_ERR_COOKIE_FAILED:
283 case NLIB_LIVENO_FAILED_UNDEFEINE:
284 case NLIB_GETPLAYERSTATUS_FAILED_CONNECT:
285 case NLIB_ERR_GETPLAYERSTATUS_INVALID_LV:
286 case NLIB_ERR_GETPLAYERSTATUS_INVALID_THREAD:
287 case NLIB_ERR_GETPLAYERSTATUS_CLOSED:
288 case NLIB_ERR_GETPLAYERSTATUS_UNKNOWN_ERROR:
289 case NLIB_ERR_GETPLAYERSTATUS_SERVER_ERROR:
290 case NLIB_ERR_GETPLAYERSTATUS_DELETED:
291 case NLIB_ERR_GETPLAYERSTATUS_FULL:
292 case NLIB_ERR_GETPLAYERSTATUS_PERMISSION_DENIED:
293 case NLIB_ERR_GETPLAYERSTATUS_ACCESS_LOCKED:
294 case NLIB_ERR_GETPLAYERSTATUS_REQUIRE_COMMUNITY_MEMBER:
295 case NLIB_ERR_GETPLAYERSTATUS_COMINGSOON:
296 case NLIB_ERR_GETPLAYERSTATUS_NOTFOUND:
297 case NLIB_ERR_GETPLAYERSTATUS_NOTLOGIN:
298 case NLIB_ERR_GETPLAYERSTATUS_UNKNOWN:
299 case NLIB_ERR_GETPLAYERSTATUS_MAINTENANCE:
300 case NLIB_ERR_GETPLAYERSTATUS_NOT_PERMITTED:
301 case NLIB_ERR_GETPLAYERSTATUS_REQUIRE_ACCEPT_PRINT_TIMESHIFT_TICKET:
302 case NLIB_ERR_GETPLAYERSTATUS_TSARCHIVE:
303 case NLIB_ERR_GETPLAYERSTATUS_USERTIMESHIFT:
304 case NLIB_ERR_GETPLAYERSTATUS_UNDEFINED:
305 case NLIB_ERR_GETPLAYERSTATUS_NOAUTH:
307 this->subLiveNoComboBox.AgreeInputLvNo();
308 ::MessageBox(NULL,NLIB_GetErrorMessage(code),TEXT("
\95ú
\91\97\90Ú
\91±
\83G
\83\89\81["),MB_ICONERROR | MB_OK);
313 //
\91z
\92è
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\83G
\83\89\81[
\83R
\81[
\83h
316 this->subLiveNoComboBox.AgreeInputLvNo();
317 UnexpectedErrorMessageShow( TEXT("
\95ú
\91\97\90Ú
\91±
\92\86\82É"),NLIB_GetErrorMessage(code),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
330 //
\83T
\83C
\83Y
\95Ï
\8dX
\8cã
331 LRESULT CNliteMainFrame::OnSize(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL& bHandled){
335 clientSize.cx = LOWORD(lParam);
336 clientSize.cy = HIWORD(lParam);
337 ChangeSize(clientSize);
348 ///
\83T
\83C
\83Y
\95Ï
\8dX
\92\86\8f\88\97\9d
350 VOID CNliteMainFrame::OnSizing(UINT wParam,LPRECT lParam){
352 if(lParam->right - lParam->left < lowestFrameSize.cx){
353 lParam->right = lParam->left + lowestFrameSize.cx;
356 if(lParam->bottom - lParam->top < lowestFrameSize.cy){
358 lParam->bottom = lParam->top + lowestFrameSize.cy;
364 //
\83c
\81[
\83\8b\83o
\81[
\8d\82\82³
\95Ï
\8dX
365 LRESULT CNliteMainFrame::OnRbnHeightChange(INT_PTR wParam,LPNMHDR lParam,BOOL &bHandled){
368 ::GetClientRect(m_hWndToolBar,&toolbarRect);
369 toolBarHeight = toolbarRect.bottom - toolbarRect.top;
372 GetClientRect(&client);
374 ChangeSize( _WTYPES_NS::CSize(client.right - client.left,client.bottom - client.top));
383 NLIB_RESULT CNliteMainFrame::LiveCallBack(NICOLIVE_EVENT eventType,NicoLiveStream_P pNicoLiveStream,LPVOID option,NICOLIVE_PARAM param1,NICOLIVE_PARAM param2){
385 CLiveUserData &userData = (*(CLiveUserData*)option);
392 case NICOLIVE_EVENT_RECEVE_CONNECTRESULT:
394 userData.OnChatReceveStart(userData.self.nicoLiveStream);
398 case NICOLIVE_EVENT_RECEVE_CHAT:
400 userData.OnChatReceve((NicoLiveChat_P) param1,param2);
404 case NICOLIVE_EVENT_RECEVE_CHATSETTLE:
406 userData.OnChatReceveSettle(param1,param2);
410 case NICOLIVE_EVENT_RECEVE_CHATSENDRESULT:
412 userData.OnChatSendResult((NicoLiveSendResultComment_P)param1);
416 case NICOLIVE_EVENT_SEND_HEARTBEAT:
420 case NICOLIVE_EVENT_ERR_CONNECT:
422 throw NLiveException(TEXT("
\90Ú
\91±
\83G
\83\89\81[
\82Å
\82·"),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
428 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__));
433 } catch(Exception e){
434 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());
436 } catch(std::exception e){
437 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ñ"));
447 LRESULT CNliteMainFrame::OnSetCursor(LRESULT msg,WPARAM wParam,LPARAM lParam,BOOL &bHandled){
452 if(this->subLiveNoComboBox.untilConnectingFlag == TRUE){
453 ::SetCursor(::LoadCursorW(NULL,IDC_WAIT));
469 ////////////////////////////////////
471 CNliteMainFrame::CSubLiveNoComboBox::CSubLiveNoComboBox(CNliteMainFrame &in_self):self(in_self),untilConnectingFlag(FALSE){}
473 static VOID AgreeEnterKeyThread(LPVOID userData){
476 auto noCombo = (CNliteMainFrame::CSubLiveNoComboBox*) userData;
477 noCombo->AgreeInputLvNo();
482 VOID CNliteMainFrame::CSubLiveNoComboBox::OnKeyDown(TCHAR wParam, UINT upLParam,UINT loLParam){
483 if(wParam == VK_RETURN){
487 //INT_PTR no = self.lvNoCombo.GetCurSel();
488 if(untilConnectingFlag == FALSE){
489 untilConnectingFlag = TRUE;
490 std::vector<TCHAR> buffer(this->GetWindowTextLengthW() + 1);
491 ::GetWindowTextW(this->m_hWnd,&buffer[0],buffer.size());
494 self.ConnectNicoLive(&buffer[0]);
506 VOID CNliteMainFrame::CSubLiveNoComboBox::AddLiveInfo(CNicoLiveStream &stream,LvnoSearchFunctional &functional){
508 CNLiteString dispComboString;
509 dispComboString += stream.GetId();
510 dispComboString += TEXT("
\81@-");
511 dispComboString += stream.GetDefaultCommunity();
512 dispComboString += TEXT("
\81@title
\81F");
513 dispComboString += stream.GetTitle();
515 if(std::find_if(liveInfoList.begin(),liveInfoList.end(),functional) == liveInfoList.end()){
516 liveInfoList.push_back(LiveInfo(dispComboString,stream.GetId()));
518 self.lvNoCombo.InsertItem(self.lvNoCombo.GetCount(),dispComboString,0,0,0,0);
521 functional.dispData = dispComboString;
530 VOID CNliteMainFrame::CSubLiveNoComboBox::AgreeInputLvNo(){
532 self.lvNoCombo.GetEditCtrl().SetReadOnly(FALSE);
533 self.EnableWindow(TRUE);
534 untilConnectingFlag = FALSE;
536 ::GetCursorPos(&mousePoint);
537 ::SetCursorPos(mousePoint.x,mousePoint.y);
544 /////////////////////////////////////////////////////////////////////////
546 CNliteMainFrame::CLiveUserData::CLiveUserData(CNliteMainFrame &self):self(self)
551 VOID CNliteMainFrame::CLiveUserData::OnConnect(){
553 self.commentView.OnConnect();
558 VOID CNliteMainFrame::CLiveUserData::OnChatReceveStart(CNicoLiveStream &stream){
560 LvnoSearchFunctional functional(stream.GetId());
561 self.commentWriteWindow.OnChatReceveStart(stream);
562 self.subLiveNoComboBox.AddLiveInfo(stream,functional);
563 self.subLiveNoComboBox.SetWindowText(functional.dispData);
564 self.subLiveNoComboBox.AgreeInputLvNo();
568 VOID CNliteMainFrame::CLiveUserData::OnChatReceve(NicoLiveChat_P chat,UINT_PTR count){
570 self.commentView.OnChatReceve(chat,count);
574 VOID CNliteMainFrame::CLiveUserData::OnChatReceveSettle(UINT_PTR commentCount,UINT_PTR commentCountSum){
576 self.commentView.OnChatReceveSettle(commentCount,commentCountSum);
581 VOID CNliteMainFrame::CLiveUserData::OnChatSendResult(NicoLiveSendResultComment_P sendResult){
582 self.commentWriteWindow.OnSendChatResult();