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/cfwl_datetimepicker.h" | 7 #include "xfa/fwl/cfwl_datetimepicker.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "third_party/base/ptr_util.h" | 12 #include "third_party/base/ptr_util.h" |
13 #include "xfa/fwl/core/cfwl_event.h" | 13 #include "xfa/fwl/cfwl_event.h" |
14 #include "xfa/fwl/core/cfwl_evtselectchanged.h" | 14 #include "xfa/fwl/cfwl_eventselectchanged.h" |
15 #include "xfa/fwl/core/cfwl_formproxy.h" | 15 #include "xfa/fwl/cfwl_formproxy.h" |
16 #include "xfa/fwl/core/cfwl_msgmouse.h" | 16 #include "xfa/fwl/cfwl_messagemouse.h" |
17 #include "xfa/fwl/core/cfwl_msgsetfocus.h" | 17 #include "xfa/fwl/cfwl_messagesetfocus.h" |
18 #include "xfa/fwl/core/cfwl_notedriver.h" | 18 #include "xfa/fwl/cfwl_notedriver.h" |
19 #include "xfa/fwl/core/cfwl_spinbutton.h" | 19 #include "xfa/fwl/cfwl_spinbutton.h" |
20 #include "xfa/fwl/core/cfwl_themebackground.h" | 20 #include "xfa/fwl/cfwl_themebackground.h" |
21 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 21 #include "xfa/fwl/cfwl_widgetmgr.h" |
22 #include "xfa/fwl/core/ifwl_themeprovider.h" | 22 #include "xfa/fwl/ifwl_themeprovider.h" |
23 | 23 |
24 namespace { | 24 namespace { |
25 | 25 |
26 const int kDateTimePickerHeight = 20; | 26 const int kDateTimePickerHeight = 20; |
27 | 27 |
28 } // namespace | 28 } // namespace |
29 CFWL_DateTimePicker::CFWL_DateTimePicker(const CFWL_App* app) | 29 CFWL_DateTimePicker::CFWL_DateTimePicker(const CFWL_App* app) |
30 : CFWL_Widget(app, pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr), | 30 : CFWL_Widget(app, pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr), |
31 m_iBtnState(1), | 31 m_iBtnState(1), |
32 m_iYear(-1), | 32 m_iYear(-1), |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 m_iYear = iYear; | 322 m_iYear = iYear; |
323 m_iMonth = iMonth; | 323 m_iMonth = iMonth; |
324 m_iDay = iDay; | 324 m_iDay = iDay; |
325 | 325 |
326 CFX_WideString wsText; | 326 CFX_WideString wsText; |
327 FormatDateString(m_iYear, m_iMonth, m_iDay, wsText); | 327 FormatDateString(m_iYear, m_iMonth, m_iDay, wsText); |
328 m_pEdit->SetText(wsText); | 328 m_pEdit->SetText(wsText); |
329 m_pEdit->Update(); | 329 m_pEdit->Update(); |
330 Repaint(&m_rtClient); | 330 Repaint(&m_rtClient); |
331 | 331 |
332 CFWL_EvtSelectChanged ev(this); | 332 CFWL_EventSelectChanged ev(this); |
333 ev.iYear = m_iYear; | 333 ev.iYear = m_iYear; |
334 ev.iMonth = m_iMonth; | 334 ev.iMonth = m_iMonth; |
335 ev.iDay = m_iDay; | 335 ev.iDay = m_iDay; |
336 DispatchEvent(&ev); | 336 DispatchEvent(&ev); |
337 } | 337 } |
338 | 338 |
339 void CFWL_DateTimePicker::InitProxyForm() { | 339 void CFWL_DateTimePicker::InitProxyForm() { |
340 if (m_pForm) | 340 if (m_pForm) |
341 return; | 341 return; |
342 if (!m_pMonthCal) | 342 if (!m_pMonthCal) |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 if (m_iYear > 0 && m_iMonth > 0 && m_iDay > 0) | 375 if (m_iYear > 0 && m_iMonth > 0 && m_iDay > 0) |
376 m_pMonthCal->SetSelect(m_iYear, m_iMonth, m_iDay); | 376 m_pMonthCal->SetSelect(m_iYear, m_iMonth, m_iDay); |
377 m_pMonthCal->Update(); | 377 m_pMonthCal->Update(); |
378 } | 378 } |
379 if (bActivate) | 379 if (bActivate) |
380 m_pMonthCal->RemoveStates(FWL_WGTSTATE_Invisible); | 380 m_pMonthCal->RemoveStates(FWL_WGTSTATE_Invisible); |
381 else | 381 else |
382 m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible); | 382 m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible); |
383 | 383 |
384 if (bActivate) { | 384 if (bActivate) { |
385 CFWL_MsgSetFocus msg(m_pEdit.get(), m_pMonthCal.get()); | 385 CFWL_MessageSetFocus msg(m_pEdit.get(), m_pMonthCal.get()); |
386 m_pEdit->GetDelegate()->OnProcessMessage(&msg); | 386 m_pEdit->GetDelegate()->OnProcessMessage(&msg); |
387 } | 387 } |
388 | 388 |
389 CFX_RectF rtInvalidate; | 389 CFX_RectF rtInvalidate; |
390 rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, | 390 rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, |
391 m_pProperties->m_rtWidget.height); | 391 m_pProperties->m_rtWidget.height); |
392 | 392 |
393 CFX_RectF rtCal = m_pMonthCal->GetWidgetRect(); | 393 CFX_RectF rtCal = m_pMonthCal->GetWidgetRect(); |
394 rtInvalidate.Union(rtCal); | 394 rtInvalidate.Union(rtCal); |
395 rtInvalidate.Inflate(2, 2); | 395 rtInvalidate.Inflate(2, 2); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 return; | 490 return; |
491 | 491 |
492 switch (pMessage->GetType()) { | 492 switch (pMessage->GetType()) { |
493 case CFWL_Message::Type::SetFocus: | 493 case CFWL_Message::Type::SetFocus: |
494 OnFocusChanged(pMessage, true); | 494 OnFocusChanged(pMessage, true); |
495 break; | 495 break; |
496 case CFWL_Message::Type::KillFocus: | 496 case CFWL_Message::Type::KillFocus: |
497 OnFocusChanged(pMessage, false); | 497 OnFocusChanged(pMessage, false); |
498 break; | 498 break; |
499 case CFWL_Message::Type::Mouse: { | 499 case CFWL_Message::Type::Mouse: { |
500 CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage); | 500 CFWL_MessageMouse* pMouse = static_cast<CFWL_MessageMouse*>(pMessage); |
501 switch (pMouse->m_dwCmd) { | 501 switch (pMouse->m_dwCmd) { |
502 case FWL_MouseCommand::LeftButtonDown: | 502 case FWL_MouseCommand::LeftButtonDown: |
503 OnLButtonDown(pMouse); | 503 OnLButtonDown(pMouse); |
504 break; | 504 break; |
505 case FWL_MouseCommand::LeftButtonUp: | 505 case FWL_MouseCommand::LeftButtonUp: |
506 OnLButtonUp(pMouse); | 506 OnLButtonUp(pMouse); |
507 break; | 507 break; |
508 case FWL_MouseCommand::Move: | 508 case FWL_MouseCommand::Move: |
509 OnMouseMove(pMouse); | 509 OnMouseMove(pMouse); |
510 break; | 510 break; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 } else { | 547 } else { |
548 m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); | 548 m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); |
549 Repaint(&m_rtClient); | 549 Repaint(&m_rtClient); |
550 } | 550 } |
551 if (pMsg->m_pSrcTarget == m_pMonthCal.get() && IsMonthCalendarVisible()) { | 551 if (pMsg->m_pSrcTarget == m_pMonthCal.get() && IsMonthCalendarVisible()) { |
552 ShowMonthCalendar(false); | 552 ShowMonthCalendar(false); |
553 } | 553 } |
554 Repaint(&m_rtClient); | 554 Repaint(&m_rtClient); |
555 } | 555 } |
556 | 556 |
557 void CFWL_DateTimePicker::OnLButtonDown(CFWL_MsgMouse* pMsg) { | 557 void CFWL_DateTimePicker::OnLButtonDown(CFWL_MessageMouse* pMsg) { |
558 if (!pMsg) | 558 if (!pMsg) |
559 return; | 559 return; |
560 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) | 560 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) |
561 SetFocus(true); | 561 SetFocus(true); |
562 if (!m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) | 562 if (!m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) |
563 return; | 563 return; |
564 | 564 |
565 if (IsMonthCalendarVisible()) { | 565 if (IsMonthCalendarVisible()) { |
566 ShowMonthCalendar(false); | 566 ShowMonthCalendar(false); |
567 return; | 567 return; |
568 } | 568 } |
569 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat)) | 569 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat)) |
570 ShowMonthCalendar(true); | 570 ShowMonthCalendar(true); |
571 | 571 |
572 m_bLBtnDown = true; | 572 m_bLBtnDown = true; |
573 Repaint(&m_rtClient); | 573 Repaint(&m_rtClient); |
574 } | 574 } |
575 | 575 |
576 void CFWL_DateTimePicker::OnLButtonUp(CFWL_MsgMouse* pMsg) { | 576 void CFWL_DateTimePicker::OnLButtonUp(CFWL_MessageMouse* pMsg) { |
577 if (!pMsg) | 577 if (!pMsg) |
578 return; | 578 return; |
579 | 579 |
580 m_bLBtnDown = false; | 580 m_bLBtnDown = false; |
581 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) | 581 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) |
582 m_iBtnState = CFWL_PartState_Hovered; | 582 m_iBtnState = CFWL_PartState_Hovered; |
583 else | 583 else |
584 m_iBtnState = CFWL_PartState_Normal; | 584 m_iBtnState = CFWL_PartState_Normal; |
585 Repaint(&m_rtBtn); | 585 Repaint(&m_rtBtn); |
586 } | 586 } |
587 | 587 |
588 void CFWL_DateTimePicker::OnMouseMove(CFWL_MsgMouse* pMsg) { | 588 void CFWL_DateTimePicker::OnMouseMove(CFWL_MessageMouse* pMsg) { |
589 if (!m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) | 589 if (!m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) |
590 m_iBtnState = CFWL_PartState_Normal; | 590 m_iBtnState = CFWL_PartState_Normal; |
591 Repaint(&m_rtBtn); | 591 Repaint(&m_rtBtn); |
592 } | 592 } |
593 | 593 |
594 void CFWL_DateTimePicker::OnMouseLeave(CFWL_MsgMouse* pMsg) { | 594 void CFWL_DateTimePicker::OnMouseLeave(CFWL_MessageMouse* pMsg) { |
595 if (!pMsg) | 595 if (!pMsg) |
596 return; | 596 return; |
597 m_iBtnState = CFWL_PartState_Normal; | 597 m_iBtnState = CFWL_PartState_Normal; |
598 Repaint(&m_rtBtn); | 598 Repaint(&m_rtBtn); |
599 } | 599 } |
600 | 600 |
601 void CFWL_DateTimePicker::DisForm_OnFocusChanged(CFWL_Message* pMsg, | 601 void CFWL_DateTimePicker::DisForm_OnFocusChanged(CFWL_Message* pMsg, |
602 bool bSet) { | 602 bool bSet) { |
603 CFX_RectF rtInvalidate(m_rtBtn); | 603 CFX_RectF rtInvalidate(m_rtBtn); |
604 if (bSet) { | 604 if (bSet) { |
(...skipping 11 matching lines...) Expand all Loading... |
616 if (DisForm_IsMonthCalendarVisible()) | 616 if (DisForm_IsMonthCalendarVisible()) |
617 ShowMonthCalendar(false); | 617 ShowMonthCalendar(false); |
618 if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { | 618 if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { |
619 pMsg->m_pSrcTarget = m_pEdit.get(); | 619 pMsg->m_pSrcTarget = m_pEdit.get(); |
620 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); | 620 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); |
621 } | 621 } |
622 } | 622 } |
623 rtInvalidate.Inflate(2, 2); | 623 rtInvalidate.Inflate(2, 2); |
624 Repaint(&rtInvalidate); | 624 Repaint(&rtInvalidate); |
625 } | 625 } |
OLD | NEW |