blob: f1ddbb1afb930fa82d2f24c0b5c893b186ed0a53 [file] [log] [blame]
dsinclairfb505592016-10-20 06:44:03 -07001// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
dsinclair447b1f32016-12-08 10:06:32 -08007#include "xfa/fwl/cfwl_datetimeedit.h"
dsinclairfb505592016-10-20 06:44:03 -07008
Dan Sinclair85c8e7f2016-11-21 13:50:32 -05009#include <memory>
10#include <utility>
11
dsinclair6fe87952016-11-01 18:48:19 -070012#include "third_party/base/ptr_util.h"
dsinclair447b1f32016-12-08 10:06:32 -080013#include "xfa/fwl/cfwl_datetimepicker.h"
14#include "xfa/fwl/cfwl_messagemouse.h"
15#include "xfa/fwl/cfwl_widgetmgr.h"
dsinclairfb505592016-10-20 06:44:03 -070016
dsinclair0ce11ee2016-11-23 16:03:10 -080017CFWL_DateTimeEdit::CFWL_DateTimeEdit(
dsinclair1a7534a2016-11-22 15:56:11 -080018 const CFWL_App* app,
dsinclaira5811f02016-11-03 12:27:25 -070019 std::unique_ptr<CFWL_WidgetProperties> properties,
dsinclair2c489cc2016-11-23 16:17:20 -080020 CFWL_Widget* pOuter)
21 : CFWL_Edit(app, std::move(properties), pOuter) {}
dsinclairfb505592016-10-20 06:44:03 -070022
dsinclair0ce11ee2016-11-23 16:03:10 -080023void CFWL_DateTimeEdit::OnProcessMessage(CFWL_Message* pMessage) {
dsinclair3b3ce1a2016-11-02 14:51:25 -070024 if (m_pWidgetMgr->IsFormDisabled()) {
dsinclairfb505592016-10-20 06:44:03 -070025 DisForm_OnProcessMessage(pMessage);
26 return;
27 }
28
dsinclair4614b452016-12-07 17:01:58 -080029 CFWL_Message::Type type = pMessage->GetType();
30 if (type == CFWL_Message::Type::SetFocus ||
31 type == CFWL_Message::Type::KillFocus) {
dsinclair2c489cc2016-11-23 16:17:20 -080032 CFWL_Widget* pOuter = GetOuter();
dsinclair3b3ce1a2016-11-02 14:51:25 -070033 pOuter->GetDelegate()->OnProcessMessage(pMessage);
dsinclairfb505592016-10-20 06:44:03 -070034 }
35}
36
dsinclair0ce11ee2016-11-23 16:03:10 -080037void CFWL_DateTimeEdit::DisForm_OnProcessMessage(CFWL_Message* pMessage) {
dsinclair14a60c52016-11-16 12:15:27 -080038 if (!m_pWidgetMgr->IsFormDisabled() ||
dsinclair4614b452016-12-07 17:01:58 -080039 pMessage->GetType() != CFWL_Message::Type::Mouse) {
dsinclair2c489cc2016-11-23 16:17:20 -080040 CFWL_Edit::OnProcessMessage(pMessage);
dsinclair14a60c52016-11-16 12:15:27 -080041 return;
42 }
dsinclair3b3ce1a2016-11-02 14:51:25 -070043
dsinclair447b1f32016-12-08 10:06:32 -080044 CFWL_MessageMouse* pMouse = static_cast<CFWL_MessageMouse*>(pMessage);
dsinclair14a60c52016-11-16 12:15:27 -080045 if (pMouse->m_dwCmd == FWL_MouseCommand::LeftButtonDown ||
46 pMouse->m_dwCmd == FWL_MouseCommand::RightButtonDown) {
47 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
48 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
49
dsinclair2c489cc2016-11-23 16:17:20 -080050 CFWL_DateTimePicker* pDateTime =
51 static_cast<CFWL_DateTimePicker*>(m_pOuter);
dsinclair14a60c52016-11-16 12:15:27 -080052 if (pDateTime->IsMonthCalendarVisible()) {
dsinclairda911bc2016-12-07 18:47:00 -080053 CFX_RectF rtInvalidate = pDateTime->GetWidgetRect();
dsinclair14a60c52016-11-16 12:15:27 -080054 pDateTime->ShowMonthCalendar(false);
55 rtInvalidate.Offset(-rtInvalidate.left, -rtInvalidate.top);
dsinclair43ac44c2016-12-08 14:05:14 -080056 pDateTime->RepaintRect(rtInvalidate);
dsinclairfb505592016-10-20 06:44:03 -070057 }
58 }
dsinclair2c489cc2016-11-23 16:17:20 -080059 CFWL_Edit::OnProcessMessage(pMessage);
dsinclairfb505592016-10-20 06:44:03 -070060}