OSDN Git Service

2012/01/08 0:20:59
[nlite/nlite.git] / nlite / nlite_mailframe.h
1 #pragma once
2
3 namespace nlite{
4         
5
6         
7         const static LPCTSTR NLITE_MAINWINDOW = TEXT("nlite");
8
9         const static SIZE lowestFrameSize = {300,300};
10
11         
12
13         
14
15
16
17
18
19
20         class CNliteMainFrame : public CFrameWindowImpl<CNliteMainFrame>,
21                 public CUpdateUI<CNliteMainFrame>,public CMessageFilter, public CIdleHandler
22         {
23
24         public:
25                 class CSubLiveNoComboBox:public CWindowImpl<CEdit>{
26
27                         
28
29                 private:
30                         CNliteMainFrame &self;
31                         CComAutoCriticalSection cs;
32                         BOOL untilConnectingFlag;
33
34                 public:
35                         CSubLiveNoComboBox(CNliteMainFrame &in_self):self(in_self),untilConnectingFlag(FALSE){}
36
37
38                         BEGIN_MSG_MAP_EX(CSubLiveNoComboBox)
39                                 MSG_WM_KEYDOWN(OnKeyDown)
40                         END_MSG_MAP()
41
42                         void OnKeyDown(TCHAR wParam, UINT upLParam,UINT loLParam){
43                                 if(wParam == VK_RETURN){
44                                         
45                                         cs.Lock();
46                                         
47                                         if(untilConnectingFlag == FALSE){
48                                                 untilConnectingFlag = TRUE;
49                                                 std::vector<TCHAR> buffer(this->GetWindowTextLengthW() + 1); 
50                                                 ::GetWindowTextW(this->m_hWnd,&buffer[0],buffer.size());
51                                                 self.ConnectNicoLive(&buffer[0]);
52                                         }
53                                         
54                                         cs.Unlock();
55                                         
56                                         
57                                 }
58                                 return;
59                         }
60
61                         VOID AgreeInputLvNo(){
62                                 cs.Lock();
63                                 untilConnectingFlag = FALSE;
64                                 cs.Unlock();
65                         }
66
67                 };
68
69
70                 class CLiveUserData {
71
72                 private:
73
74                         CCommentView &commentView;
75                         CSubLiveNoComboBox &lvnocombo;
76
77                 public:
78                         CLiveUserData(CCommentView& cv,CSubLiveNoComboBox &combo):commentView(cv),lvnocombo(combo){}
79
80                         VOID OnConnect(){
81
82                                 commentView.OnConnect();
83
84                         }
85
86                         VOID OnChatReceveStart(StreamStatus &streamStatus){
87                                 
88                                 commentView.SetStreamStatus(streamStatus);
89                         }
90                 
91                         VOID OnChatReceve(NicoLiveChat_P chat,UINT_PTR count){
92
93                                 commentView.OnChatReceve(chat,count);
94
95                         }
96
97                         VOID OnChatReceveSettle(UINT_PTR commentCount,UINT_PTR commentCountSum){
98
99                                 commentView.OnChatReceveSettle(commentCount,commentCountSum);
100                                 lvnocombo.AgreeInputLvNo();
101                                 return;
102                         }
103
104                 };
105
106                 
107         public:
108
109                 typedef CFrameWindowImpl<CNliteMainFrame> baseWindow;
110
111                 // \83E\83B\83\93\83h\83E\83N\83\89\83X\96¼\81A\8b¤\92Ê\83\8a\83\\81[\83XID\81A\83X\83^\83C\83\8b\81A\94w\8ci\90F\82ð\93o\98^
112                 DECLARE_FRAME_WND_CLASS_EX(NLITE_MAINWINDOW, IDC_NLITE,CS_HREDRAW | CS_VREDRAW  | CS_DBLCLKS, COLOR_WINDOW)
113
114         private:
115                 CCommentView commentView;
116                 
117                 
118                 CStatusBarCtrl statusBar;
119                 CLiveUserData userData;
120                 CSubLiveNoComboBox subLiveNoComboBox;
121                 CCommentWriteWindow commentWriteWindow;
122                 CTabCtrl tabctrl;
123                 
124                 HFONT hTabFont;
125                 CComboBoxEx lvNoCombo;
126                 INT_PTR statusBarHeight;
127                 INT_PTR toolBarHeight;
128                 CNicoVideoAuth nicoVideoAuth;
129                 Property nliteProperty;
130                 CNicoLiveStream nicoLiveStream;
131         private:
132
133                 // \83\81\83b\83Z\81[\83W\83t\83B\83\8b\83^\8f\88\97\9d
134                 virtual BOOL PreTranslateMessage(MSG* pMsg){
135                         // \8aî\92ê\83N\83\89\83X\82ÌPreTranslateMessage\82ð\8cÄ\82Ñ\8fo\82·
136                         return CFrameWindowImpl<CNliteMainFrame>::PreTranslateMessage(pMsg);
137                 }
138
139                 // \83A\83C\83h\83\8b\8f\88\97\9d
140                 virtual BOOL OnIdle(){
141                         return FALSE;
142                 }
143
144
145         public:
146
147                 CNliteMainFrame()
148                         :userData(commentView,subLiveNoComboBox),
149                         subLiveNoComboBox(*this)
150                 {
151                         LOGFONT lf = {0};
152
153                         lf.lfHeight = 12;
154                         lf.lfCharSet = SHIFTJIS_CHARSET;
155                         hTabFont = CreateFontIndirect(&lf);
156                 }
157
158                 ~CNliteMainFrame(){
159
160                         DeleteObject(hTabFont);
161                 }
162
163                 
164                 BEGIN_UPDATE_UI_MAP(CNliteMainFrame)
165                         // \83G\83\93\83g\83\8a\82È\82µ
166                 END_UPDATE_UI_MAP()
167                 
168                 // \83\81\83b\83Z\81[\83W\83}\83b\83v
169                 BEGIN_MSG_MAP_EX(CNliteMainFrame)
170                         MSG_WM_CREATE(OnCreate)
171                         MSG_WM_DESTROY(OnDestroy)
172                         MESSAGE_HANDLER(WM_SIZING,OnSizing)
173                         MESSAGE_HANDLER(WM_SIZE,OnSize)
174                         MESSAGE_HANDLER_EX(WM_ERASEBKGND,OnErasekgnd);
175                         COMMAND_ID_HANDLER_EX(IDM_EXIT, OnMenuExit)
176                         COMMAND_ID_HANDLER_EX(IDM_ABOUT,OnMenuAbount)
177                         COMMAND_ID_HANDLER_EX(IDM_COOKIE,OnCookie)
178                         NOTIFY_HANDLER(ATL_IDW_TOOLBAR,RBN_HEIGHTCHANGE,OnRbnHeightChange)
179                         // CFrameWindowImpl\83N\83\89\83X\82Ö\83`\83F\81[\83\93
180                         CHAIN_MSG_MAP(CFrameWindowImpl<CNliteMainFrame>)
181                 END_MSG_MAP()
182
183                 //\83T\83C\83Y\95Ï\8dX\92\86
184                 LRESULT OnSizing(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL& bHandled){
185
186                         ((LPRECT)lParam)->right = ((LPRECT)lParam)->right - ((LPRECT)lParam)->left < lowestFrameSize.cx ? lowestFrameSize.cx + ((LPRECT)lParam)->left : ((LPRECT)lParam)->right;
187                         ((LPRECT)lParam)->bottom = ((LPRECT)lParam)->bottom - ((LPRECT)lParam)->top < lowestFrameSize.cy ? lowestFrameSize.cy + ((LPRECT)lParam)->top : ((LPRECT)lParam)->bottom;
188                         RECT client;
189                         GetClientRect(&client);
190
191                         ChangeSize( _WTYPES_NS::CSize(client.right - client.left,client.bottom - client.top));
192                         
193                         
194
195                         bHandled = FALSE;
196                         
197                         return 0;
198
199                 }
200
201                 //\83`\83\89\83c\83L\82ð\82È\82­\82·\81B\82 \82ñ\82Ü\8cø\89Ê\82È\82¢\81H
202                 LRESULT OnErasekgnd(UINT uMsg,WPARAM wParam,LPARAM lParam){
203
204                         return TRUE;
205                 }
206
207
208                 //\83c\81[\83\8b\83o\81[\8d\82\82³\95Ï\8dX
209                 LRESULT OnRbnHeightChange(INT_PTR wParam,LPNMHDR lParam,BOOL &bHandled){
210
211                         RECT toolbarRect;
212                         ::GetClientRect(m_hWndToolBar,&toolbarRect);
213                         toolBarHeight = toolbarRect.bottom - toolbarRect.top;
214
215                         RECT client;
216                         GetClientRect(&client);
217
218                         ChangeSize( _WTYPES_NS::CSize(client.right - client.left,client.bottom - client.top));
219
220
221
222                         return 0;
223                 }
224                 
225                 
226                 //\83T\83C\83Y\95Ï\8dX\8cã
227                 LRESULT OnSize(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL& bHandled){
228
229
230                         SIZE clientSize;
231                         clientSize.cx = LOWORD(lParam);
232                         clientSize.cy = HIWORD(lParam);
233                         ChangeSize(clientSize);
234
235                         bHandled = FALSE;
236                         
237                         
238
239                         return 0;
240                 }
241
242                 VOID ChangeSize(const SIZE& client);
243
244
245                 LRESULT OnCreate(LPCREATESTRUCT lpcs);
246
247                 VOID ConnectNicoLive(LPCTSTR liveNo){
248                         
249                         nicoLiveStream.DisConnect();
250                         commentView.OnConnect();
251                         nicoLiveStream.Connect(nicoVideoAuth,liveNo,LiveCallBack,&userData);
252
253                 }
254
255                 VOID Initialize(LPCTSTR localAppDataPath){
256
257                         nliteProperty.ReadIniFile();
258
259                         commentView.SetProperty(nliteProperty.cvp);
260
261                         if(nliteProperty.gp.browserType == BT_NOSETTING){
262                                 nliteProperty.CookieSetting();
263                                 while(nliteProperty.gp.browserType == BT_NOSETTING){
264                                         ::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);
265                                         nliteProperty.CookieSetting();
266                                 }
267                         }
268                         
269                         nicoVideoAuth.SetBrowserType(nliteProperty.gp.browserType);
270                         
271                 }
272
273                 VOID Finalaize(){
274
275                         nliteProperty.cvp = commentView.GetProperty();
276                         nliteProperty.WriteIniFile();
277                 }
278
279                 VOID OnDestroy(){
280                         commentView.DestroyWindow();
281                         nicoLiveStream.DisConnect();
282                         PostQuitMessage(0);
283                         return;
284                 }
285
286                 VOID OnException(){
287
288                         nicoLiveStream.DisConnect();
289
290                 }
291
292                 //\83\81\83j\83\85\81[\82©\82ç\83t\83@\83C\83\8b\82ð\8fI\97¹\82ð\91I\91ð
293                 void OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){
294                         PostMessage(WM_CLOSE);
295                 }
296
297                 //\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¦
298                 void OnMenuAbount(UINT uNotifyCode,int nID,HWND hWndCtl){
299                 
300
301                         appInfo->show();
302                 }
303
304                 //\83N\83b\83L\81[\82Ì\90Ý\92è
305                 void OnCookie(UINT uNotifyCode,int nID,HWND hWndCtl){
306                         nliteProperty.CookieSetting();
307                         
308                         while(nliteProperty.gp.browserType == BT_NOSETTING){
309                                 ::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);
310                                 nliteProperty.CookieSetting();
311                         }
312                         
313
314                         nicoVideoAuth.SetBrowserType(nliteProperty.gp.browserType);
315
316                 }
317                 static NLIB_RESULT LiveCallBack(NICOLIVE_EVENT eventType,NicoLiveStream_P pNicoLiveStream,LPVOID option,NICOLIVE_PARAM param1,NICOLIVE_PARAM param2);
318         };
319
320
321
322
323         
324
325 }