Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: xfa/fwl/core/ifwl_datetimepicker.cpp

Issue 2488963005: Continue IFWL widget cleanup. (Closed)
Patch Set: Rebase to master Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fwl/core/ifwl_datetimepicker.h" 7 #include "xfa/fwl/core/ifwl_datetimepicker.h"
8 8
9 #include "third_party/base/ptr_util.h" 9 #include "third_party/base/ptr_util.h"
10 #include "xfa/fwl/core/cfwl_message.h" 10 #include "xfa/fwl/core/cfwl_message.h"
(...skipping 13 matching lines...) Expand all
24 } // namespace 24 } // namespace
25 25
26 IFWL_DateTimePicker::IFWL_DateTimePicker( 26 IFWL_DateTimePicker::IFWL_DateTimePicker(
27 const IFWL_App* app, 27 const IFWL_App* app,
28 std::unique_ptr<CFWL_WidgetProperties> properties) 28 std::unique_ptr<CFWL_WidgetProperties> properties)
29 : IFWL_Widget(app, std::move(properties), nullptr), 29 : IFWL_Widget(app, std::move(properties), nullptr),
30 m_iBtnState(1), 30 m_iBtnState(1),
31 m_iYear(-1), 31 m_iYear(-1),
32 m_iMonth(-1), 32 m_iMonth(-1),
33 m_iDay(-1), 33 m_iDay(-1),
34 m_bLBtnDown(false),
35 m_iCurYear(2010), 34 m_iCurYear(2010),
36 m_iCurMonth(3), 35 m_iCurMonth(3),
37 m_iCurDay(29) { 36 m_iCurDay(29),
37 m_bLBtnDown(false) {
38 m_rtBtn.Set(0, 0, 0, 0); 38 m_rtBtn.Set(0, 0, 0, 0);
39 39
40 m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; 40 m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat;
41 41
42 auto monthProp = pdfium::MakeUnique<CFWL_WidgetProperties>(this); 42 auto monthProp = pdfium::MakeUnique<CFWL_WidgetProperties>(this);
43 monthProp->m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border; 43 monthProp->m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border;
44 monthProp->m_dwStates = FWL_WGTSTATE_Invisible; 44 monthProp->m_dwStates = FWL_WGTSTATE_Invisible;
45 monthProp->m_pParent = this; 45 monthProp->m_pParent = this;
46 monthProp->m_pThemeProvider = m_pProperties->m_pThemeProvider; 46 monthProp->m_pThemeProvider = m_pProperties->m_pThemeProvider;
47 m_pMonthCal.reset( 47 m_pMonthCal.reset(
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); 99 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
100 if (!pFWidth) 100 if (!pFWidth)
101 return; 101 return;
102 FX_FLOAT fBtn = *pFWidth; 102 FX_FLOAT fBtn = *pFWidth;
103 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn - 1, 103 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn - 1,
104 m_rtClient.height - 1); 104 m_rtClient.height - 1);
105 CFX_RectF rtEdit; 105 CFX_RectF rtEdit;
106 rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn, 106 rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn,
107 m_rtClient.height); 107 m_rtClient.height);
108 m_pEdit->SetWidgetRect(rtEdit); 108 m_pEdit->SetWidgetRect(rtEdit);
109 ReSetEditAlignment(); 109 ResetEditAlignment();
110 m_pEdit->Update(); 110 m_pEdit->Update();
111 if (!(m_pMonthCal->GetThemeProvider())) { 111 if (!(m_pMonthCal->GetThemeProvider())) {
112 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); 112 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider);
113 } 113 }
114 if (m_pProperties->m_pDataProvider) { 114 if (m_pProperties->m_pDataProvider) {
115 IFWL_DateTimePickerDP* pData = 115 IFWL_DateTimePickerDP* pData =
116 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); 116 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider);
117 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay); 117 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay);
118 } 118 }
119 CFX_RectF rtMonthCal; 119 CFX_RectF rtMonthCal;
120 m_pMonthCal->GetWidgetRect(rtMonthCal, true); 120 m_pMonthCal->GetWidgetRect(rtMonthCal, true);
121 CFX_RectF rtPopUp; 121 CFX_RectF rtPopUp;
122 rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + kDateTimePickerHeight, 122 rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + kDateTimePickerHeight,
123 rtMonthCal.width, rtMonthCal.height); 123 rtMonthCal.width, rtMonthCal.height);
124 m_pMonthCal->SetWidgetRect(rtPopUp); 124 m_pMonthCal->SetWidgetRect(rtPopUp);
125 m_pMonthCal->Update(); 125 m_pMonthCal->Update();
126 return; 126 return;
127 } 127 }
128 128
129 int32_t IFWL_DateTimePicker::CountSelRanges() { 129 int32_t IFWL_DateTimePicker::CountSelRanges() {
130 return GetDataTimeEdit()->CountSelRanges(); 130 return m_pEdit->CountSelRanges();
131 } 131 }
132 132
133 int32_t IFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) { 133 int32_t IFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) {
134 return GetDataTimeEdit()->GetSelRange(nIndex, nStart); 134 return m_pEdit->GetSelRange(nIndex, nStart);
135 } 135 }
136 136
137 FWL_WidgetHit IFWL_DateTimePicker::HitTest(FX_FLOAT fx, FX_FLOAT fy) { 137 FWL_WidgetHit IFWL_DateTimePicker::HitTest(FX_FLOAT fx, FX_FLOAT fy) {
138 if (m_pWidgetMgr->IsFormDisabled()) 138 if (m_pWidgetMgr->IsFormDisabled())
139 return DisForm_HitTest(fx, fy); 139 return DisForm_HitTest(fx, fy);
140 if (m_rtClient.Contains(fx, fy)) 140 if (m_rtClient.Contains(fx, fy))
141 return FWL_WidgetHit::Client; 141 return FWL_WidgetHit::Client;
142 if (IsMonthCalendarShowed()) { 142 if (IsMonthCalendarVisible()) {
143 CFX_RectF rect; 143 CFX_RectF rect;
144 m_pMonthCal->GetWidgetRect(rect); 144 m_pMonthCal->GetWidgetRect(rect);
145 if (rect.Contains(fx, fy)) 145 if (rect.Contains(fx, fy))
146 return FWL_WidgetHit::Client; 146 return FWL_WidgetHit::Client;
147 } 147 }
148 return FWL_WidgetHit::Unknown; 148 return FWL_WidgetHit::Unknown;
149 } 149 }
150 150
151 void IFWL_DateTimePicker::DrawWidget(CFX_Graphics* pGraphics, 151 void IFWL_DateTimePicker::DrawWidget(CFX_Graphics* pGraphics,
152 const CFX_Matrix* pMatrix) { 152 const CFX_Matrix* pMatrix) {
(...skipping 15 matching lines...) Expand all
168 DisForm_DrawWidget(pGraphics, pMatrix); 168 DisForm_DrawWidget(pGraphics, pMatrix);
169 return; 169 return;
170 } 170 }
171 } 171 }
172 172
173 void IFWL_DateTimePicker::SetThemeProvider(IFWL_ThemeProvider* pTP) { 173 void IFWL_DateTimePicker::SetThemeProvider(IFWL_ThemeProvider* pTP) {
174 m_pProperties->m_pThemeProvider = pTP; 174 m_pProperties->m_pThemeProvider = pTP;
175 m_pMonthCal->SetThemeProvider(pTP); 175 m_pMonthCal->SetThemeProvider(pTP);
176 } 176 }
177 177
178 FWL_Error IFWL_DateTimePicker::GetCurSel(int32_t& iYear, 178 void IFWL_DateTimePicker::GetCurSel(int32_t& iYear,
179 int32_t& iMonth, 179 int32_t& iMonth,
180 int32_t& iDay) { 180 int32_t& iDay) {
181 iYear = m_iYear; 181 iYear = m_iYear;
182 iMonth = m_iMonth; 182 iMonth = m_iMonth;
183 iDay = m_iDay; 183 iDay = m_iDay;
184 return FWL_Error::Succeeded;
185 } 184 }
186 185
187 FWL_Error IFWL_DateTimePicker::SetCurSel(int32_t iYear, 186 void IFWL_DateTimePicker::SetCurSel(int32_t iYear,
188 int32_t iMonth, 187 int32_t iMonth,
189 int32_t iDay) { 188 int32_t iDay) {
190 if (iYear <= 0 || iYear >= 3000) 189 if (iYear <= 0 || iYear >= 3000)
191 return FWL_Error::Indefinite; 190 return;
192 if (iMonth <= 0 || iMonth >= 13) 191 if (iMonth <= 0 || iMonth >= 13)
193 return FWL_Error::Indefinite; 192 return;
194 if (iDay <= 0 || iDay >= 32) 193 if (iDay <= 0 || iDay >= 32)
195 return FWL_Error::Indefinite; 194 return;
195
196 m_iYear = iYear; 196 m_iYear = iYear;
197 m_iMonth = iMonth; 197 m_iMonth = iMonth;
198 m_iDay = iDay; 198 m_iDay = iDay;
199 m_pMonthCal->SetSelect(iYear, iMonth, iDay); 199 m_pMonthCal->SetSelect(iYear, iMonth, iDay);
200 return FWL_Error::Succeeded;
201 } 200 }
202 201
203 FWL_Error IFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) { 202 void IFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) {
204 if (!m_pEdit) 203 if (!m_pEdit)
205 return FWL_Error::Indefinite; 204 return;
206 205
207 m_pEdit->SetText(wsText); 206 m_pEdit->SetText(wsText);
208 Repaint(&m_rtClient); 207 Repaint(&m_rtClient);
209 CFWL_Event_DtpEditChanged ev; 208 CFWL_Event_DtpEditChanged ev;
210 ev.m_wsText = wsText; 209 ev.m_wsText = wsText;
211 DispatchEvent(&ev); 210 DispatchEvent(&ev);
212 return FWL_Error::Succeeded;
213 } 211 }
214 212
215 FWL_Error IFWL_DateTimePicker::GetEditText(CFX_WideString& wsText, 213 void IFWL_DateTimePicker::GetEditText(CFX_WideString& wsText,
216 int32_t nStart, 214 int32_t nStart,
217 int32_t nCount) const { 215 int32_t nCount) const {
218 if (m_pEdit) { 216 if (m_pEdit)
219 m_pEdit->GetText(wsText, nStart, nCount); 217 m_pEdit->GetText(wsText, nStart, nCount);
220 return FWL_Error::Succeeded;
221 }
222 return FWL_Error::Indefinite;
223 } 218 }
224 219
225 bool IFWL_DateTimePicker::CanUndo() { 220 void IFWL_DateTimePicker::GetBBox(CFX_RectF& rect) {
226 return m_pEdit->CanUndo();
227 }
228
229 bool IFWL_DateTimePicker::CanRedo() {
230 return m_pEdit->CanRedo();
231 }
232
233 bool IFWL_DateTimePicker::Undo() {
234 return m_pEdit->Undo();
235 }
236
237 bool IFWL_DateTimePicker::Redo() {
238 return m_pEdit->Redo();
239 }
240
241 bool IFWL_DateTimePicker::CanCopy() {
242 int32_t nCount = m_pEdit->CountSelRanges();
243 return nCount > 0;
244 }
245
246 bool IFWL_DateTimePicker::CanCut() {
247 if (m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) {
248 return false;
249 }
250 int32_t nCount = m_pEdit->CountSelRanges();
251 return nCount > 0;
252 }
253
254 bool IFWL_DateTimePicker::CanSelectAll() {
255 return m_pEdit->GetTextLength() > 0;
256 }
257
258 bool IFWL_DateTimePicker::Copy(CFX_WideString& wsCopy) {
259 return m_pEdit->Copy(wsCopy);
260 }
261
262 bool IFWL_DateTimePicker::Cut(CFX_WideString& wsCut) {
263 return m_pEdit->Cut(wsCut);
264 }
265
266 bool IFWL_DateTimePicker::Paste(const CFX_WideString& wsPaste) {
267 return m_pEdit->Paste(wsPaste);
268 }
269
270 bool IFWL_DateTimePicker::SelectAll() {
271 m_pEdit->AddSelRange(0);
272 return true;
273 }
274
275 bool IFWL_DateTimePicker::Delete() {
276 m_pEdit->ClearText();
277 return true;
278 }
279
280 bool IFWL_DateTimePicker::DeSelect() {
281 m_pEdit->ClearSelections();
282 return true;
283 }
284
285 FWL_Error IFWL_DateTimePicker::GetBBox(CFX_RectF& rect) {
286 if (m_pWidgetMgr->IsFormDisabled()) { 221 if (m_pWidgetMgr->IsFormDisabled()) {
287 return DisForm_GetBBox(rect); 222 DisForm_GetBBox(rect);
223 return;
288 } 224 }
289 rect = m_pProperties->m_rtWidget; 225 rect = m_pProperties->m_rtWidget;
290 if (IsMonthCalendarShowed()) { 226 if (IsMonthCalendarVisible()) {
291 CFX_RectF rtMonth; 227 CFX_RectF rtMonth;
292 m_pMonthCal->GetWidgetRect(rtMonth); 228 m_pMonthCal->GetWidgetRect(rtMonth);
293 rtMonth.Offset(m_pProperties->m_rtWidget.left, 229 rtMonth.Offset(m_pProperties->m_rtWidget.left,
294 m_pProperties->m_rtWidget.top); 230 m_pProperties->m_rtWidget.top);
295 rect.Union(rtMonth); 231 rect.Union(rtMonth);
296 } 232 }
297 return FWL_Error::Succeeded;
298 } 233 }
299 234
300 FWL_Error IFWL_DateTimePicker::SetEditLimit(int32_t nLimit) { 235 void IFWL_DateTimePicker::SetEditLimit(int32_t nLimit) {
301 m_pEdit->SetLimit(nLimit); 236 m_pEdit->SetLimit(nLimit);
302 return FWL_Error::Succeeded;
303 } 237 }
304 238
305 void IFWL_DateTimePicker::ModifyEditStylesEx(uint32_t dwStylesExAdded, 239 void IFWL_DateTimePicker::ModifyEditStylesEx(uint32_t dwStylesExAdded,
306 uint32_t dwStylesExRemoved) { 240 uint32_t dwStylesExRemoved) {
307 m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); 241 m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved);
308 } 242 }
309 243
310 void IFWL_DateTimePicker::DrawDropDownButton(CFX_Graphics* pGraphics, 244 void IFWL_DateTimePicker::DrawDropDownButton(CFX_Graphics* pGraphics,
311 IFWL_ThemeProvider* pTheme, 245 IFWL_ThemeProvider* pTheme,
312 const CFX_Matrix* pMatrix) { 246 const CFX_Matrix* pMatrix) {
(...skipping 26 matching lines...) Expand all
339 wsText.Format(L"%d Year %d Month %d Day", iYear, iMonth, iDay); 273 wsText.Format(L"%d Year %d Month %d Day", iYear, iMonth, iDay);
340 } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat) == 274 } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat) ==
341 FWL_STYLEEXT_DTP_TimeFormat) { 275 FWL_STYLEEXT_DTP_TimeFormat) {
342 } 276 }
343 } 277 }
344 278
345 void IFWL_DateTimePicker::ShowMonthCalendar(bool bActivate) { 279 void IFWL_DateTimePicker::ShowMonthCalendar(bool bActivate) {
346 if (m_pWidgetMgr->IsFormDisabled()) { 280 if (m_pWidgetMgr->IsFormDisabled()) {
347 return DisForm_ShowMonthCalendar(bActivate); 281 return DisForm_ShowMonthCalendar(bActivate);
348 } 282 }
349 if (IsMonthCalendarShowed() == bActivate) { 283 if (IsMonthCalendarVisible() == bActivate) {
350 return; 284 return;
351 } 285 }
352 if (!m_pForm) { 286 if (!m_pForm) {
353 InitProxyForm(); 287 InitProxyForm();
354 } 288 }
355 if (bActivate) { 289 if (bActivate) {
356 CFX_RectF rtMonth; 290 CFX_RectF rtMonth;
357 m_pMonthCal->GetWidgetRect(rtMonth); 291 m_pMonthCal->GetWidgetRect(rtMonth);
358 CFX_RectF rtAnchor; 292 CFX_RectF rtAnchor;
359 rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width, 293 rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width,
360 m_pProperties->m_rtWidget.height); 294 m_pProperties->m_rtWidget.height);
361 GetPopupPos(0, rtMonth.height, rtAnchor, rtMonth); 295 GetPopupPos(0, rtMonth.height, rtAnchor, rtMonth);
362 m_pForm->SetWidgetRect(rtMonth); 296 m_pForm->SetWidgetRect(rtMonth);
363 rtMonth.left = rtMonth.top = 0; 297 rtMonth.left = rtMonth.top = 0;
364 m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); 298 m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate);
365 m_pMonthCal->SetWidgetRect(rtMonth); 299 m_pMonthCal->SetWidgetRect(rtMonth);
366 m_pMonthCal->Update(); 300 m_pMonthCal->Update();
367 m_pForm->DoModal(); 301 m_pForm->DoModal();
368 } else { 302 } else {
369 m_pForm->EndDoModal(); 303 m_pForm->EndDoModal();
370 } 304 }
371 } 305 }
372 306
373 bool IFWL_DateTimePicker::IsMonthCalendarShowed() { 307 bool IFWL_DateTimePicker::IsMonthCalendarVisible() {
374 if (m_pWidgetMgr->IsFormDisabled()) { 308 if (m_pWidgetMgr->IsFormDisabled()) {
375 return DisForm_IsMonthCalendarShowed(); 309 return DisForm_IsMonthCalendarVisible();
376 } 310 }
377 if (!m_pForm) 311 if (!m_pForm)
378 return false; 312 return false;
379 return !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible); 313 return !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible);
380 } 314 }
381 315
382 void IFWL_DateTimePicker::ReSetEditAlignment() { 316 void IFWL_DateTimePicker::ResetEditAlignment() {
383 if (!m_pEdit) 317 if (!m_pEdit)
384 return; 318 return;
385 uint32_t dwStylExes = m_pProperties->m_dwStyleExes; 319 uint32_t dwStylExes = m_pProperties->m_dwStyleExes;
386 uint32_t dwAdd = 0; 320 uint32_t dwAdd = 0;
387 switch (dwStylExes & FWL_STYLEEXT_DTP_EditHAlignMask) { 321 switch (dwStylExes & FWL_STYLEEXT_DTP_EditHAlignMask) {
388 case FWL_STYLEEXT_DTP_EditHCenter: { 322 case FWL_STYLEEXT_DTP_EditHCenter: {
389 dwAdd |= FWL_STYLEEXT_EDT_HCenter; 323 dwAdd |= FWL_STYLEEXT_EDT_HCenter;
390 break; 324 break;
391 } 325 }
392 case FWL_STYLEEXT_DTP_EditHFar: { 326 case FWL_STYLEEXT_DTP_EditHFar: {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); 379 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
446 prop->m_dwStyles = FWL_WGTSTYLE_Popup; 380 prop->m_dwStyles = FWL_WGTSTYLE_Popup;
447 prop->m_dwStates = FWL_WGTSTATE_Invisible; 381 prop->m_dwStates = FWL_WGTSTATE_Invisible;
448 prop->m_pOwner = this; 382 prop->m_pOwner = this;
449 383
450 m_pForm.reset( 384 m_pForm.reset(
451 new IFWL_FormProxy(m_pOwnerApp, std::move(prop), m_pMonthCal.get())); 385 new IFWL_FormProxy(m_pOwnerApp, std::move(prop), m_pMonthCal.get()));
452 m_pMonthCal->SetParent(m_pForm.get()); 386 m_pMonthCal->SetParent(m_pForm.get());
453 } 387 }
454 388
455 IFWL_DateTimeEdit* IFWL_DateTimePicker::GetDataTimeEdit() { 389 bool IFWL_DateTimePicker::DisForm_IsMonthCalendarVisible() {
456 return m_pEdit.get();
457 }
458
459 FWL_Error IFWL_DateTimePicker::DisForm_Initialize() {
460 m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat;
461 DisForm_InitMonthCalendar();
462 DisForm_InitDateTimeEdit();
463 RegisterEventTarget(m_pMonthCal.get());
464 RegisterEventTarget(m_pEdit.get());
465 return FWL_Error::Succeeded;
466 }
467
468 void IFWL_DateTimePicker::DisForm_InitMonthCalendar() {
469 if (m_pMonthCal)
470 return;
471
472 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(this);
473 prop->m_dwStyles =
474 FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border | FWL_WGTSTYLE_EdgeSunken;
475 prop->m_dwStates = FWL_WGTSTATE_Invisible;
476 prop->m_pParent = this;
477 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
478
479 m_pMonthCal.reset(new IFWL_MonthCalendar(m_pOwnerApp, std::move(prop), this));
480 CFX_RectF rtMonthCal;
481 m_pMonthCal->GetWidgetRect(rtMonthCal, true);
482 rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height);
483 m_pMonthCal->SetWidgetRect(rtMonthCal);
484 }
485
486 void IFWL_DateTimePicker::DisForm_InitDateTimeEdit() {
487 if (m_pEdit)
488 return;
489
490 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
491 prop->m_pParent = this;
492 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
493
494 m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, std::move(prop), this));
495 }
496
497 bool IFWL_DateTimePicker::DisForm_IsMonthCalendarShowed() {
498 if (!m_pMonthCal) 390 if (!m_pMonthCal)
499 return false; 391 return false;
500 return !(m_pMonthCal->GetStates() & FWL_WGTSTATE_Invisible); 392 return !(m_pMonthCal->GetStates() & FWL_WGTSTATE_Invisible);
501 } 393 }
502 394
503 void IFWL_DateTimePicker::DisForm_ShowMonthCalendar(bool bActivate) { 395 void IFWL_DateTimePicker::DisForm_ShowMonthCalendar(bool bActivate) {
504 bool bShowed = IsMonthCalendarShowed(); 396 bool bShowed = IsMonthCalendarVisible();
505 if (bShowed == bActivate) { 397 if (bShowed == bActivate) {
506 return; 398 return;
507 } 399 }
508 if (bActivate) { 400 if (bActivate) {
509 CFX_RectF rtMonthCal; 401 CFX_RectF rtMonthCal;
510 m_pMonthCal->GetWidgetRect(rtMonthCal, true); 402 m_pMonthCal->GetWidgetRect(rtMonthCal, true);
511 FX_FLOAT fPopupMin = rtMonthCal.height; 403 FX_FLOAT fPopupMin = rtMonthCal.height;
512 FX_FLOAT fPopupMax = rtMonthCal.height; 404 FX_FLOAT fPopupMax = rtMonthCal.height;
513 CFX_RectF rtAnchor(m_pProperties->m_rtWidget); 405 CFX_RectF rtAnchor(m_pProperties->m_rtWidget);
514 rtAnchor.width = rtMonthCal.width; 406 rtAnchor.width = rtMonthCal.width;
(...skipping 25 matching lines...) Expand all
540 FWL_WidgetHit IFWL_DateTimePicker::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) { 432 FWL_WidgetHit IFWL_DateTimePicker::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) {
541 CFX_RectF rect; 433 CFX_RectF rect;
542 rect.Set(0, 0, m_pProperties->m_rtWidget.width, 434 rect.Set(0, 0, m_pProperties->m_rtWidget.width,
543 m_pProperties->m_rtWidget.height); 435 m_pProperties->m_rtWidget.height);
544 if (rect.Contains(fx, fy)) 436 if (rect.Contains(fx, fy))
545 return FWL_WidgetHit::Edit; 437 return FWL_WidgetHit::Edit;
546 if (DisForm_IsNeedShowButton()) 438 if (DisForm_IsNeedShowButton())
547 rect.width += m_fBtn; 439 rect.width += m_fBtn;
548 if (rect.Contains(fx, fy)) 440 if (rect.Contains(fx, fy))
549 return FWL_WidgetHit::Client; 441 return FWL_WidgetHit::Client;
550 if (IsMonthCalendarShowed()) { 442 if (IsMonthCalendarVisible()) {
551 m_pMonthCal->GetWidgetRect(rect); 443 m_pMonthCal->GetWidgetRect(rect);
552 if (rect.Contains(fx, fy)) 444 if (rect.Contains(fx, fy))
553 return FWL_WidgetHit::Client; 445 return FWL_WidgetHit::Client;
554 } 446 }
555 return FWL_WidgetHit::Unknown; 447 return FWL_WidgetHit::Unknown;
556 } 448 }
557 449
558 bool IFWL_DateTimePicker::DisForm_IsNeedShowButton() { 450 bool IFWL_DateTimePicker::DisForm_IsNeedShowButton() {
559 bool bFocus = m_pProperties->m_dwStates & FWL_WGTSTATE_Focused || 451 bool bFocus = m_pProperties->m_dwStates & FWL_WGTSTATE_Focused ||
560 m_pMonthCal->GetStates() & FWL_WGTSTATE_Focused || 452 m_pMonthCal->GetStates() & FWL_WGTSTATE_Focused ||
561 m_pEdit->GetStates() & FWL_WGTSTATE_Focused; 453 m_pEdit->GetStates() & FWL_WGTSTATE_Focused;
562 return bFocus; 454 return bFocus;
563 } 455 }
564 456
565 void IFWL_DateTimePicker::DisForm_Update() { 457 void IFWL_DateTimePicker::DisForm_Update() {
566 if (m_iLock) 458 if (m_iLock)
567 return; 459 return;
568 if (!m_pProperties->m_pThemeProvider) 460 if (!m_pProperties->m_pThemeProvider)
569 m_pProperties->m_pThemeProvider = GetAvailableTheme(); 461 m_pProperties->m_pThemeProvider = GetAvailableTheme();
570 462
571 m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider); 463 m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider);
572 GetClientRect(m_rtClient); 464 GetClientRect(m_rtClient);
573 m_pEdit->SetWidgetRect(m_rtClient); 465 m_pEdit->SetWidgetRect(m_rtClient);
574 ReSetEditAlignment(); 466 ResetEditAlignment();
575 m_pEdit->Update(); 467 m_pEdit->Update();
576 if (!m_pMonthCal->GetThemeProvider()) 468 if (!m_pMonthCal->GetThemeProvider())
577 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); 469 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider);
578 470
579 if (m_pProperties->m_pDataProvider) { 471 if (m_pProperties->m_pDataProvider) {
580 IFWL_DateTimePickerDP* pData = 472 IFWL_DateTimePickerDP* pData =
581 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); 473 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider);
582 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay); 474 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay);
583 } 475 }
584 FX_FLOAT* pWidth = static_cast<FX_FLOAT*>( 476 FX_FLOAT* pWidth = static_cast<FX_FLOAT*>(
(...skipping 12 matching lines...) Expand all
597 } 489 }
598 490
599 void IFWL_DateTimePicker::DisForm_GetWidgetRect(CFX_RectF& rect, 491 void IFWL_DateTimePicker::DisForm_GetWidgetRect(CFX_RectF& rect,
600 bool bAutoSize) { 492 bool bAutoSize) {
601 rect = m_pProperties->m_rtWidget; 493 rect = m_pProperties->m_rtWidget;
602 if (DisForm_IsNeedShowButton()) { 494 if (DisForm_IsNeedShowButton()) {
603 rect.width += m_fBtn; 495 rect.width += m_fBtn;
604 } 496 }
605 } 497 }
606 498
607 FWL_Error IFWL_DateTimePicker::DisForm_GetBBox(CFX_RectF& rect) { 499 void IFWL_DateTimePicker::DisForm_GetBBox(CFX_RectF& rect) {
608 rect = m_pProperties->m_rtWidget; 500 rect = m_pProperties->m_rtWidget;
609 if (DisForm_IsNeedShowButton()) { 501 if (DisForm_IsNeedShowButton()) {
610 rect.width += m_fBtn; 502 rect.width += m_fBtn;
611 } 503 }
612 if (IsMonthCalendarShowed()) { 504 if (IsMonthCalendarVisible()) {
613 CFX_RectF rtMonth; 505 CFX_RectF rtMonth;
614 m_pMonthCal->GetWidgetRect(rtMonth); 506 m_pMonthCal->GetWidgetRect(rtMonth);
615 rtMonth.Offset(m_pProperties->m_rtWidget.left, 507 rtMonth.Offset(m_pProperties->m_rtWidget.left,
616 m_pProperties->m_rtWidget.top); 508 m_pProperties->m_rtWidget.top);
617 rect.Union(rtMonth); 509 rect.Union(rtMonth);
618 } 510 }
619 return FWL_Error::Succeeded;
620 } 511 }
621 512
622 void IFWL_DateTimePicker::DisForm_DrawWidget(CFX_Graphics* pGraphics, 513 void IFWL_DateTimePicker::DisForm_DrawWidget(CFX_Graphics* pGraphics,
623 const CFX_Matrix* pMatrix) { 514 const CFX_Matrix* pMatrix) {
624 if (!pGraphics) 515 if (!pGraphics)
625 return; 516 return;
626 if (m_pEdit) { 517 if (m_pEdit) {
627 CFX_RectF rtEdit; 518 CFX_RectF rtEdit;
628 m_pEdit->GetWidgetRect(rtEdit); 519 m_pEdit->GetWidgetRect(rtEdit);
629 CFX_Matrix mt; 520 CFX_Matrix mt;
630 mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top); 521 mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top);
631 if (pMatrix) { 522 if (pMatrix) {
632 mt.Concat(*pMatrix); 523 mt.Concat(*pMatrix);
633 } 524 }
634 m_pEdit->DrawWidget(pGraphics, &mt); 525 m_pEdit->DrawWidget(pGraphics, &mt);
635 } 526 }
636 if (IsMonthCalendarShowed()) { 527 if (IsMonthCalendarVisible()) {
637 CFX_RectF rtMonth; 528 CFX_RectF rtMonth;
638 m_pMonthCal->GetWidgetRect(rtMonth); 529 m_pMonthCal->GetWidgetRect(rtMonth);
639 CFX_Matrix mt; 530 CFX_Matrix mt;
640 mt.Set(1, 0, 0, 1, rtMonth.left, rtMonth.top); 531 mt.Set(1, 0, 0, 1, rtMonth.left, rtMonth.top);
641 if (pMatrix) { 532 if (pMatrix) {
642 mt.Concat(*pMatrix); 533 mt.Concat(*pMatrix);
643 } 534 }
644 m_pMonthCal->DrawWidget(pGraphics, &mt); 535 m_pMonthCal->DrawWidget(pGraphics, &mt);
645 } 536 }
646 return; 537 return;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 if (m_pWidgetMgr->IsFormDisabled()) 593 if (m_pWidgetMgr->IsFormDisabled())
703 return DisForm_OnFocusChanged(pMsg, bSet); 594 return DisForm_OnFocusChanged(pMsg, bSet);
704 595
705 if (bSet) { 596 if (bSet) {
706 m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); 597 m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused);
707 Repaint(&m_rtClient); 598 Repaint(&m_rtClient);
708 } else { 599 } else {
709 m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); 600 m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused);
710 Repaint(&m_rtClient); 601 Repaint(&m_rtClient);
711 } 602 }
712 if (pMsg->m_pSrcTarget == m_pMonthCal.get() && IsMonthCalendarShowed()) { 603 if (pMsg->m_pSrcTarget == m_pMonthCal.get() && IsMonthCalendarVisible()) {
713 ShowMonthCalendar(false); 604 ShowMonthCalendar(false);
714 } 605 }
715 Repaint(&m_rtClient); 606 Repaint(&m_rtClient);
716 } 607 }
717 608
718 void IFWL_DateTimePicker::OnLButtonDown(CFWL_MsgMouse* pMsg) { 609 void IFWL_DateTimePicker::OnLButtonDown(CFWL_MsgMouse* pMsg) {
719 if (!pMsg) 610 if (!pMsg)
720 return; 611 return;
721 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) 612 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
722 SetFocus(true); 613 SetFocus(true);
723 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { 614 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
724 if (IsMonthCalendarShowed()) { 615 if (IsMonthCalendarVisible()) {
725 ShowMonthCalendar(false); 616 ShowMonthCalendar(false);
726 CFWL_Event_DtpCloseUp ev; 617 CFWL_Event_DtpCloseUp ev;
727 DispatchEvent(&ev); 618 DispatchEvent(&ev);
728 } else { 619 } else {
729 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat)) { 620 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat)) {
730 ShowMonthCalendar(true); 621 ShowMonthCalendar(true);
731 CFWL_Event_DtpDropDown ev; 622 CFWL_Event_DtpDropDown ev;
732 DispatchEvent(&ev); 623 DispatchEvent(&ev);
733 } 624 }
734 m_bLBtnDown = true; 625 m_bLBtnDown = true;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) { 662 if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) {
772 m_rtBtn.Set(m_pProperties->m_rtWidget.width, 0, m_fBtn, 663 m_rtBtn.Set(m_pProperties->m_rtWidget.width, 0, m_fBtn,
773 m_pProperties->m_rtWidget.height - 1); 664 m_pProperties->m_rtWidget.height - 1);
774 } 665 }
775 rtInvalidate = m_rtBtn; 666 rtInvalidate = m_rtBtn;
776 pMsg->m_pDstTarget = m_pEdit.get(); 667 pMsg->m_pDstTarget = m_pEdit.get();
777 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); 668 m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
778 } else { 669 } else {
779 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; 670 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
780 m_rtBtn.Set(0, 0, 0, 0); 671 m_rtBtn.Set(0, 0, 0, 0);
781 if (DisForm_IsMonthCalendarShowed()) 672 if (DisForm_IsMonthCalendarVisible())
782 ShowMonthCalendar(false); 673 ShowMonthCalendar(false);
783 if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { 674 if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) {
784 pMsg->m_pSrcTarget = m_pEdit.get(); 675 pMsg->m_pSrcTarget = m_pEdit.get();
785 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); 676 m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
786 } 677 }
787 } 678 }
788 rtInvalidate.Inflate(2, 2); 679 rtInvalidate.Inflate(2, 2);
789 Repaint(&rtInvalidate); 680 Repaint(&rtInvalidate);
790 } 681 }
791 682
792 FWL_Error IFWL_DateTimePicker::GetCaption(IFWL_Widget* pWidget, 683 void IFWL_DateTimePicker::GetCaption(IFWL_Widget* pWidget,
793 CFX_WideString& wsCaption) { 684 CFX_WideString& wsCaption) {}
794 return FWL_Error::Succeeded;
795 }
796 685
797 int32_t IFWL_DateTimePicker::GetCurDay(IFWL_Widget* pWidget) { 686 int32_t IFWL_DateTimePicker::GetCurDay(IFWL_Widget* pWidget) {
798 return m_iCurDay; 687 return m_iCurDay;
799 } 688 }
800 689
801 int32_t IFWL_DateTimePicker::GetCurMonth(IFWL_Widget* pWidget) { 690 int32_t IFWL_DateTimePicker::GetCurMonth(IFWL_Widget* pWidget) {
802 return m_iCurMonth; 691 return m_iCurMonth;
803 } 692 }
804 693
805 int32_t IFWL_DateTimePicker::GetCurYear(IFWL_Widget* pWidget) { 694 int32_t IFWL_DateTimePicker::GetCurYear(IFWL_Widget* pWidget) {
806 return m_iCurYear; 695 return m_iCurYear;
807 } 696 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698