OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |