OSDN Git Service

2012/01/19 17:31:46
[nlite/nlite.git] / nlite / nlite_commentWrite.cpp
1 #include "stdafx.h"
2 #include "nlite_include.h"
3
4 namespace nlite{
5
6
7 const static SIZE commentColorBoxSize = {33,0};
8
9 const static LPCTSTR ANONYMOUS_BOTTONSTRING = TEXT("184");
10 const static LPCTSTR WRITE_BOTTONSTRING = TEXT("\8f\91\82«\8d\9e\82Ý");
11
12
13 const static RECT COMMENTWRITEWINDOW_SEPARATEFSIZE = {0,5,0,5};
14 const static UINT_PTR COMMENTWRITEWINDOW_SIDESEPARATESIZE = 5;
15 const static UINT_PTR INIT_COMMENTWRITE_MAXLENGTH = 60;
16 //const static UINT_PTR COMBOBOX_BUTTON_WIDTH = 15;
17
18 //const static COLORREF MAX_COLOR = ((COLORREF)-1);
19
20 const static COLORREF MAX_COLOR = 0xFFFFFF;
21
22 const CommentColorInfo generalUser::COMMENT_COLORLIST[] = {
23         {TEXT("white"),RGB(0xFF,0xFF,0xFF)},
24         {TEXT("red"),RGB(0xFF,0x00,0x00)},
25         {TEXT("pink"),RGB(0xFF,0x80,0x80)},
26         {TEXT("orange"),RGB(0xFF,0xC0,0x00)},
27         {TEXT("yellow"),RGB(0xFF,0xFF,0x00)},
28         {TEXT("green"),RGB(0x00,0xFF,0x00)},
29         {TEXT("cyan"),RGB(0x00,0xFF,0xFF)},
30         {TEXT("blue"),RGB(0x00,0x00,0xFF)},
31         {TEXT("purple"),RGB(0xC0,0x00,0xFF)},
32         {TEXT("black"),RGB(0x00,0x00,0x00)}
33 };
34
35 const CommentColorInfo premiumUser::COMMENT_COLORLIST[] = {
36         {TEXT("white2"),RGB(0xCC,0xCC,0x99)},
37         {TEXT("red2"),RGB(0xCC,0x00,0x33)},
38         {TEXT("pink2"),RGB(0xFF,0x33,0xCC)},
39         {TEXT("orange2"),RGB(0xFF,0x66,0x00)},
40         {TEXT("yellow2"),RGB(0x99,0x99,0x00)},
41         {TEXT("green2"),RGB(0x00,0xCC,0x66)},
42         {TEXT("cyan2"),RGB(0x00,0xCC,0xCC)},
43         {TEXT("blue2"),RGB(0x33,0x99,0xFF)},
44         {TEXT("purple2"),RGB(0x66,0x33,0xCC)},
45         {TEXT("black2"),RGB(0x66,0x66,0x66)}
46 };
47
48 const CommentSizeInfo generalUser::COMMENT_SIZELIST[] = {
49         {TEXT("\95\81\92Ê\81@"),TEXT("medium")},
50         {TEXT("\8f¬\81@"),TEXT("small")}
51 };
52
53 const CommentSizeInfo premiumUser::COMMENT_SIZELIST[] = {
54         {TEXT("\91å\81@"),TEXT("big")}
55 };
56
57 const CommentPosInfo generalUser::COMMENT_POSLIST[] = {
58         {TEXT("\92Ê\8fí\81@"),TEXT("naka")}
59 };
60
61 const CommentPosInfo premiumUser::COMMENT_POSLIST[] = {
62         {TEXT("\89º\81@"),TEXT("shita")},
63         {TEXT("\8fã\81@"),TEXT("ue")}
64 };
65
66
67 template<typename T>
68 static VOID addItemList(CComboBox &combo,T * colorList,UINT_PTR length){
69
70         UINT_PTR startItemcount = combo.GetCount();
71         for(UINT_PTR index = startItemcount; index < length;index++){
72
73                 combo.AddString(colorList[index - startItemcount].name);
74                 combo.SetItemDataPtr(index,(LPVOID)&colorList[index - startItemcount]);
75
76         }
77
78         return;
79 }
80
81
82
83 template<typename T>
84 static UINT_PTR CalcComboBoxWidth(CComboBox &combo){
85
86         CPaintDC pdc(combo);
87         SIZE size;
88         UINT_PTR rslt = 0;
89         UINT_PTR itemCount = combo.GetCount();
90         LPCTSTR name;
91         for(UINT_PTR index = 0;index < itemCount;index++){
92                 name = ((T*)combo.GetItemDataPtr(index))->name;
93                 ::GetTextExtentPoint32(pdc,name,_tcslen(name),&size);
94                 rslt = rslt < (UINT_PTR)size.cx ? size.cx : rslt;
95         }
96
97         return rslt;
98 }
99
100 CCommentWriteWindow::CCommentWriteWindow():
101 commentWriteHeight(0),
102 commentWriteInternalHeight(0),
103 commentWriteMaxLength(INIT_COMMENTWRITE_MAXLENGTH)
104 {}
105
106
107
108 LRESULT CCommentWriteWindow::OnCreate(LPCREATESTRUCT lpReateStruct){
109
110         commentPosBox.Create(m_hWnd,0,WC_COMBOBOX,WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST ,0,COMMENTPOS_BOX);
111         commentSizeBox.Create(m_hWnd,0,WC_COMBOBOX,WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,0,COMMENTSIZE_BOX);
112         commentColorBox.Create(m_hWnd,0,WC_COMBOBOX,WS_CHILD | WS_VISIBLE  | CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED        ,0,COMMENTCOLOR_BOX);
113         anonymousButton.Create(m_hWnd,0,WC_BUTTON,WS_CHILD | WS_VISIBLE | BS_CHECKBOX,0,ANONYMOUS_BUTTON);
114         commentEdit.Create(m_hWnd,0,WC_EDIT,WS_CHILD | WS_VISIBLE | WS_BORDER,0,COMMENT_EDIT);
115         commentWriteButton.Create(m_hWnd,0,WC_BUTTON,WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,0,COMMENTWRITE_BOTTON);
116         commentPosBox.SetFont(AtlGetDefaultGuiFont());
117         commentSizeBox.SetFont(AtlGetDefaultGuiFont());
118         commentColorBox.SetFont(AtlGetDefaultGuiFont());
119
120         
121         anonymousButton.SetWindowTextW(ANONYMOUS_BOTTONSTRING);
122         anonymousButton.SetFont(AtlGetDefaultGuiFont());
123         commentEdit.SetFont(AtlGetDefaultGuiFont());
124         commentEdit.SetLimitText(commentWriteMaxLength);
125         commentWriteButton.SetWindowTextW(WRITE_BOTTONSTRING);
126         commentWriteButton.SetFont(AtlGetDefaultGuiFont());
127         commentEdit.SetWindowTextW(TEXT(""));
128         
129         addItemList(commentColorBox,generalUser::COMMENT_COLORLIST,ARRAY_LENGTH(generalUser::COMMENT_COLORLIST));
130         addItemList(commentSizeBox,generalUser::COMMENT_SIZELIST,ARRAY_LENGTH(generalUser::COMMENT_SIZELIST));
131         addItemList(commentPosBox,generalUser::COMMENT_POSLIST,ARRAY_LENGTH(generalUser::COMMENT_POSLIST));
132         commentColorBox.SetCurSel(0);
133         commentSizeBox.SetCurSel(0);
134         commentPosBox.SetCurSel(0);
135         CFont font;
136         font = AtlGetDefaultGuiFont();
137         CPaintDC pdc(*this);
138         SIZE thisSize;
139         LPCTSTR sample = TEXT(" ");
140         GetTextExtentPoint32(pdc,sample,_tcslen(sample),&thisSize);
141         commentWriteHeight = thisSize.cy + COMMENTWRITEWINDOW_SEPARATEFSIZE.top + COMMENTWRITEWINDOW_SEPARATEFSIZE.bottom;
142         commentWriteInternalHeight = commentWriteHeight - (COMMENTWRITEWINDOW_SEPARATEFSIZE.top + COMMENTWRITEWINDOW_SEPARATEFSIZE.bottom);
143         return 0;
144 }
145
146 VOID CCommentWriteWindow::OnDestroy(){
147         commentPosBox.DestroyWindow();
148         commentSizeBox.DestroyWindow();
149         commentColorBox.DestroyWindow();
150         anonymousButton.DestroyWindow();
151         commentEdit.DestroyWindow();
152         commentWriteButton.DestroyWindow();
153
154 }
155
156 VOID CCommentWriteWindow::OnSizing(UINT wParam,LPRECT lParam){
157
158         RECT client;
159         GetClientRect(&client);
160
161         ChangeSize( _WTYPES_NS::CSize(client.right - client.left,client.bottom - client.top));
162         return;
163 }
164
165 LRESULT CCommentWriteWindow::OnSize(UINT wParam,SIZE lParam){
166         ChangeSize(lParam);
167         return 0;
168 }
169 VOID CCommentWriteWindow::OnPaint(HDC hdc){
170
171         CPaintDC pdc(*this);
172
173         pdc.FillRect(&pdc.m_ps.rcPaint,COLOR_BTNFACE);
174
175         return;
176 }
177
178 VOID CCommentWriteWindow::ChangeSize(SIZE &size){
179         
180         
181
182         SIZE commentAnonymousButtonSize;
183         SIZE commentWriteButtonSize;
184         commentWriteButton.GetIdealSize(&commentWriteButtonSize);
185         anonymousButton.GetIdealSize(&commentAnonymousButtonSize);
186
187         RECT commentPosBoxRect;
188         RECT commentSizeBoxRect;
189         RECT commentColorBoxRect;
190         RECT anonymousButtonRect;
191         RECT commentEditRect;
192         RECT commentWriteButtonRect;
193
194
195         
196
197
198         commentPosBoxRect.left = COMMENTWRITEWINDOW_SIDESEPARATESIZE;
199         this->commentPosBoxCS.Lock();
200         commentPosBoxRect.right = commentPosBoxRect.left + CalcComboBoxWidth<CommentPosInfo>(commentPosBox);
201         this->commentPosBoxCS.Unlock();
202
203         commentSizeBoxRect.left = commentPosBoxRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
204         this->commentSizeBoxCS.Lock();
205         commentSizeBoxRect.right = commentSizeBoxRect.left + CalcComboBoxWidth<CommentSizeInfo>(commentSizeBox);
206         this->commentSizeBoxCS.Unlock();
207
208         commentColorBoxRect.left = commentSizeBoxRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
209         commentColorBoxRect.right = commentColorBoxRect.left + commentColorBoxSize.cx;
210
211         anonymousButtonRect.left = commentColorBoxRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
212         anonymousButtonRect.right = anonymousButtonRect.left + commentAnonymousButtonSize.cx;
213
214         commentEditRect.left = anonymousButtonRect.right + COMMENTWRITEWINDOW_SIDESEPARATESIZE;
215         
216         commentWriteButtonRect.right = size.cx - COMMENTWRITEWINDOW_SIDESEPARATESIZE;
217         commentWriteButtonRect.left = commentWriteButtonRect.right - commentWriteButtonSize.cx;
218
219         commentEditRect.right = commentWriteButtonRect.left - COMMENTWRITEWINDOW_SIDESEPARATESIZE;
220
221         
222
223         //\88Ú\93®\8f\88\97\9d
224         HDWP hDwp = BeginDeferWindowPos(6);
225         
226         commentPosBox.DeferWindowPos(hDwp,NULL,
227                 commentPosBoxRect.left,COMMENTWRITEWINDOW_SEPARATEFSIZE.top,commentPosBoxRect.right - commentPosBoxRect.left,commentWriteInternalHeight,
228                 SWP_NOZORDER);
229         commentSizeBox.DeferWindowPos(hDwp,NULL,
230                 commentSizeBoxRect.left,COMMENTWRITEWINDOW_SEPARATEFSIZE.top,commentSizeBoxRect.right - commentSizeBoxRect.left,commentWriteInternalHeight,
231                 SWP_NOZORDER);
232
233         commentColorBox.DeferWindowPos(hDwp,NULL,
234                 commentColorBoxRect.left,COMMENTWRITEWINDOW_SEPARATEFSIZE.top,commentColorBoxRect.right - commentColorBoxRect.left,commentWriteInternalHeight,
235                 SWP_NOZORDER);
236
237         anonymousButton.DeferWindowPos(hDwp,NULL,
238                 anonymousButtonRect.left,COMMENTWRITEWINDOW_SEPARATEFSIZE.top,anonymousButtonRect.right - anonymousButtonRect.left,commentWriteInternalHeight,
239                 SWP_NOZORDER);
240
241
242         commentEdit.DeferWindowPos(hDwp,NULL,
243                 commentEditRect.left,COMMENTWRITEWINDOW_SEPARATEFSIZE.top,commentEditRect.right - commentEditRect.left,commentWriteInternalHeight,
244                 SWP_NOZORDER);
245
246         commentWriteButton.DeferWindowPos(hDwp,NULL,
247                 commentWriteButtonRect.left,COMMENTWRITEWINDOW_SEPARATEFSIZE.top,commentWriteButtonRect.right - commentWriteButtonRect.left,commentWriteInternalHeight,
248                 SWP_NOZORDER);
249
250         EndDeferWindowPos(hDwp);
251
252         return;
253 }
254
255 VOID CCommentWriteWindow::OnDrawItem(UINT wParam,LPDRAWITEMSTRUCT lParam){
256         
257         
258
259         if(lParam->hwndItem == commentColorBox.m_hWnd && commentColorBox.GetCount() > 0){
260                 
261                 
262
263                 RECT drawRect = lParam->rcItem;
264                 UINT_PTR itemNo = 0;
265                 INT_PTR curselNo = commentColorBox.GetCurSel();
266                 CDCHandle dcHandle = lParam->hDC;
267                 CBrush bkBrush;
268
269                 drawRect.left += 2;
270                 drawRect.top += 2;
271                 drawRect.right -= 2;
272                 drawRect.bottom -= 2;
273                 if(lParam->itemID == ((UINT)-1)){
274                         
275
276                         itemNo = curselNo == CB_ERR ? 0 : curselNo;
277                         
278
279                 } else {
280                         itemNo = lParam->itemID;
281                         
282                         
283                         
284
285                         
286
287                 }
288                 
289                 CommentInfo<COLORREF> &commentColor = *(CommentInfo<COLORREF> *)commentColorBox.GetItemDataPtr(itemNo);
290                 
291                 
292                 if(lParam->itemState & (ODS_FOCUS | ODS_COMBOBOXEDIT)){
293                         
294                         
295                         
296                         bkBrush.CreateSolidBrush(RGB(160,160,160));
297                                 
298                 } else {
299
300                         bkBrush.CreateSolidBrush(RGB(255,255,255));
301
302                 }
303
304
305                 
306                 
307                 CBrush brush;
308                 CPen cpen;
309
310                 brush.CreateSolidBrush(commentColor.userData);
311                 dcHandle.FillRect(&lParam->rcItem,bkBrush);
312                 dcHandle.SelectBrush(brush);
313                 dcHandle.SelectPen((HPEN)::GetStockObject(BLACK_PEN));
314                 dcHandle.FillRect(&drawRect,brush);
315                 
316         }
317
318         return;
319 }
320
321 VOID CCommentWriteWindow::OnMeasureItem(UINT wParam,LPMEASUREITEMSTRUCT lParam){
322
323         switch(lParam->CtlID){
324
325         case COMMENTCOLOR_BOX:
326                 {
327                         SIZE itemSize;
328                         CPaintDC pdc(*this);
329                         pdc.SelectFont(AtlGetDefaultGuiFont());
330                         LPCTSTR sample = TEXT(" ");
331                         ::GetTextExtentPoint32(pdc,sample,_tcslen(sample),&itemSize);
332                         lParam->itemHeight = itemSize.cy;
333
334                 }
335                 break;
336
337         }
338
339         
340
341         return;
342 }
343
344 }