summaryrefslogtreecommitdiff
path: root/xfa/fwl/cfwl_comboedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fwl/cfwl_comboedit.cpp')
-rw-r--r--xfa/fwl/cfwl_comboedit.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/xfa/fwl/cfwl_comboedit.cpp b/xfa/fwl/cfwl_comboedit.cpp
new file mode 100644
index 0000000000..5981fd79b4
--- /dev/null
+++ b/xfa/fwl/cfwl_comboedit.cpp
@@ -0,0 +1,75 @@
+// 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/cfwl_comboedit.h"
+
+#include <memory>
+#include <utility>
+
+#include "xfa/fde/cfde_txtedtengine.h"
+#include "xfa/fwl/cfwl_combobox.h"
+#include "xfa/fwl/cfwl_messagemouse.h"
+
+CFWL_ComboEdit::CFWL_ComboEdit(
+ const CFWL_App* app,
+ std::unique_ptr<CFWL_WidgetProperties> properties,
+ CFWL_Widget* pOuter)
+ : CFWL_Edit(app, std::move(properties), pOuter) {
+ m_pOuter = static_cast<CFWL_ComboBox*>(pOuter);
+}
+
+void CFWL_ComboEdit::ClearSelected() {
+ ClearSelections();
+ Repaint(&GetRTClient());
+}
+
+void CFWL_ComboEdit::SetSelected() {
+ FlagFocus(true);
+ GetTxtEdtEngine()->MoveCaretPos(MC_End);
+ AddSelRange(0);
+}
+
+void CFWL_ComboEdit::FlagFocus(bool bSet) {
+ if (bSet) {
+ m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+ return;
+ }
+
+ m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+ HideCaret(nullptr);
+}
+
+void CFWL_ComboEdit::OnProcessMessage(CFWL_Message* pMessage) {
+ if (!pMessage)
+ return;
+
+ bool backDefault = true;
+ switch (pMessage->GetType()) {
+ case CFWL_Message::Type::SetFocus: {
+ m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
+ backDefault = false;
+ break;
+ }
+ case CFWL_Message::Type::KillFocus: {
+ m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+ backDefault = false;
+ break;
+ }
+ case CFWL_Message::Type::Mouse: {
+ CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
+ if ((pMsg->m_dwCmd == FWL_MouseCommand::LeftButtonDown) &&
+ ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)) {
+ SetSelected();
+ m_pOuter->SetFocus(true);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ if (backDefault)
+ CFWL_Edit::OnProcessMessage(pMessage);
+}