Index: xfa/fwl/core/ifwl_comboedit.cpp |
diff --git a/xfa/fwl/core/ifwl_comboedit.cpp b/xfa/fwl/core/ifwl_comboedit.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f345090fca42df6e92407b25f79b293cc451fd38 |
--- /dev/null |
+++ b/xfa/fwl/core/ifwl_comboedit.cpp |
@@ -0,0 +1,86 @@ |
+// Copyright 2016 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+ |
+#include "xfa/fwl/core/ifwl_comboedit.h" |
+ |
+#include "xfa/fde/cfde_txtedtengine.h" |
+#include "xfa/fwl/core/ifwl_combobox.h" |
+ |
+// static |
+IFWL_ComboEdit* IFWL_ComboEdit::Create( |
+ const CFWL_WidgetImpProperties& properties, |
+ IFWL_Widget* pOuter) { |
+ return new IFWL_ComboEdit(properties, pOuter); |
+} |
+ |
+IFWL_ComboEdit::IFWL_ComboEdit(const CFWL_WidgetImpProperties& properties, |
+ IFWL_Widget* pOuter) |
+ : IFWL_Edit(properties, pOuter) { |
+ m_pOuter = static_cast<IFWL_ComboBox*>(pOuter); |
+} |
+ |
+void IFWL_ComboEdit::ClearSelected() { |
+ ClearSelections(); |
+ Repaint(&m_rtClient); |
+} |
+ |
+void IFWL_ComboEdit::SetSelected() { |
+ FlagFocus(TRUE); |
+ EndCaret(); |
+ AddSelRange(0); |
+} |
+ |
+void IFWL_ComboEdit::EndCaret() { |
+ m_pEdtEngine->MoveCaretPos(MC_End); |
+} |
+ |
+void IFWL_ComboEdit::FlagFocus(FX_BOOL bSet) { |
+ if (bSet) { |
+ m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; |
+ } else { |
+ m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; |
+ ShowCaret(FALSE); |
+ } |
+} |
+ |
+void IFWL_ComboEdit::SetComboBoxFocus(FX_BOOL bSet) { |
+ m_pOuter->SetFocus(bSet); |
+} |
+ |
+CFWL_ComboEditImpDelegate::CFWL_ComboEditImpDelegate(IFWL_ComboEdit* pOwner) |
+ : CFWL_EditImpDelegate(pOwner), m_pOwner(pOwner) {} |
+ |
+void CFWL_ComboEditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { |
+ if (!pMessage) |
+ return; |
+ |
+ FX_BOOL backDefault = TRUE; |
+ switch (pMessage->GetClassID()) { |
+ case CFWL_MessageType::SetFocus: { |
+ m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; |
+ backDefault = FALSE; |
+ break; |
+ } |
+ case CFWL_MessageType::KillFocus: { |
+ m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; |
+ backDefault = FALSE; |
+ break; |
+ } |
+ case CFWL_MessageType::Mouse: { |
+ CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); |
+ if ((pMsg->m_dwCmd == FWL_MouseCommand::LeftButtonDown) && |
+ ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)) { |
+ m_pOwner->SetSelected(); |
+ m_pOwner->SetComboBoxFocus(TRUE); |
+ } |
+ break; |
+ } |
+ default: |
+ break; |
+ } |
+ if (backDefault) |
+ CFWL_EditImpDelegate::OnProcessMessage(pMessage); |
+} |