| Index: xfa/fwl/core/ifwl_combobox.cpp
|
| diff --git a/xfa/fwl/core/ifwl_combobox.cpp b/xfa/fwl/core/ifwl_combobox.cpp
|
| index 28a5977425a3c588673228bf10ef3eed2690ad17..1721aee2a7993444fed1fb96a082ff59c50c79c2 100644
|
| --- a/xfa/fwl/core/ifwl_combobox.cpp
|
| +++ b/xfa/fwl/core/ifwl_combobox.cpp
|
| @@ -16,6 +16,7 @@
|
| #include "xfa/fwl/core/cfwl_widgetmgr.h"
|
| #include "xfa/fwl/core/fwl_noteimp.h"
|
| #include "xfa/fwl/core/ifwl_app.h"
|
| +#include "xfa/fwl/core/ifwl_comboboxproxy.h"
|
| #include "xfa/fwl/core/ifwl_comboedit.h"
|
| #include "xfa/fwl/core/ifwl_combolist.h"
|
| #include "xfa/fwl/core/ifwl_formproxy.h"
|
| @@ -24,7 +25,7 @@
|
| IFWL_ComboBox::IFWL_ComboBox(const IFWL_App* app,
|
| const CFWL_WidgetImpProperties& properties)
|
| : IFWL_Widget(app, properties, nullptr),
|
| - m_pForm(nullptr),
|
| + m_pComboBoxProxy(nullptr),
|
| m_bLButtonDown(FALSE),
|
| m_iCurSel(-1),
|
| m_iBtnState(CFWL_PartState_Normal),
|
| @@ -34,8 +35,6 @@ IFWL_ComboBox::IFWL_ComboBox(const IFWL_App* app,
|
| m_rtBtn.Reset();
|
| m_rtHandler.Reset();
|
|
|
| - SetDelegate(pdfium::MakeUnique<CFWL_ComboBoxImpDelegate>(this));
|
| -
|
| if (m_pWidgetMgr->IsFormDisabled()) {
|
| DisForm_InitComboList();
|
| DisForm_InitComboEdit();
|
| @@ -455,17 +454,16 @@ void IFWL_ComboBox::DrawStretchHandler(CFX_Graphics* pGraphics,
|
| }
|
|
|
| void IFWL_ComboBox::ShowDropList(FX_BOOL bActivate) {
|
| - if (m_pWidgetMgr->IsFormDisabled()) {
|
| + if (m_pWidgetMgr->IsFormDisabled())
|
| return DisForm_ShowDropList(bActivate);
|
| - }
|
| +
|
| FX_BOOL bDropList = IsDropListShowed();
|
| - if (bDropList == bActivate) {
|
| + if (bDropList == bActivate)
|
| return;
|
| - }
|
| - if (!m_pForm) {
|
| + if (!m_pComboBoxProxy)
|
| InitProxyForm();
|
| - }
|
| - m_pListProxyDelegate->Reset();
|
| +
|
| + m_pComboBoxProxy->Reset();
|
| if (bActivate) {
|
| m_pListBox->ChangeSelected(m_iCurSel);
|
| ReSetListItemAlignment();
|
| @@ -505,8 +503,8 @@ void IFWL_ComboBox::ShowDropList(FX_BOOL bActivate) {
|
| m_fComboFormHandler);
|
| }
|
| }
|
| - m_pForm->SetWidgetRect(m_rtProxy);
|
| - m_pForm->Update();
|
| + m_pComboBoxProxy->SetWidgetRect(m_rtProxy);
|
| + m_pComboBoxProxy->Update();
|
| m_pListBox->SetWidgetRect(m_rtList);
|
| m_pListBox->Update();
|
| CFWL_EvtCmbPreDropDown ev;
|
| @@ -514,10 +512,10 @@ void IFWL_ComboBox::ShowDropList(FX_BOOL bActivate) {
|
| DispatchEvent(&ev);
|
| m_fItemHeight = m_pListBox->m_fItemHeight;
|
| m_pListBox->SetFocus(TRUE);
|
| - m_pForm->DoModal();
|
| + m_pComboBoxProxy->DoModal();
|
| m_pListBox->SetFocus(FALSE);
|
| } else {
|
| - m_pForm->EndDoModal();
|
| + m_pComboBoxProxy->EndDoModal();
|
| CFWL_EvtCmbCloseUp ev;
|
| ev.m_pSrcTarget = this;
|
| DispatchEvent(&ev);
|
| @@ -528,7 +526,8 @@ void IFWL_ComboBox::ShowDropList(FX_BOOL bActivate) {
|
| }
|
|
|
| FX_BOOL IFWL_ComboBox::IsDropListShowed() {
|
| - return m_pForm && !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible);
|
| + return m_pComboBoxProxy &&
|
| + !(m_pComboBoxProxy->GetStates() & FWL_WGTSTATE_Invisible);
|
| }
|
|
|
| FX_BOOL IFWL_ComboBox::IsDropDownStyle() const {
|
| @@ -689,7 +688,7 @@ void IFWL_ComboBox::ProcessSelChanged(FX_BOOL bLButtonUp) {
|
| }
|
|
|
| void IFWL_ComboBox::InitProxyForm() {
|
| - if (m_pForm)
|
| + if (m_pComboBoxProxy)
|
| return;
|
| if (!m_pListBox)
|
| return;
|
| @@ -699,10 +698,9 @@ void IFWL_ComboBox::InitProxyForm() {
|
| propForm.m_dwStyles = FWL_WGTSTYLE_Popup;
|
| propForm.m_dwStates = FWL_WGTSTATE_Invisible;
|
|
|
| - m_pForm = new IFWL_FormProxy(m_pOwnerApp, propForm, m_pListBox.get());
|
| - m_pListBox->SetParent(m_pForm);
|
| - m_pListProxyDelegate = new CFWL_ComboProxyImpDelegate(m_pForm, this);
|
| - m_pForm->SetCurrentDelegate(m_pListProxyDelegate);
|
| + m_pComboBoxProxy =
|
| + new IFWL_ComboBoxProxy(this, m_pOwnerApp, propForm, m_pListBox.get());
|
| + m_pListBox->SetParent(m_pComboBoxProxy);
|
| }
|
|
|
| void IFWL_ComboBox::DisForm_InitComboList() {
|
| @@ -914,11 +912,8 @@ void IFWL_ComboBox::DisForm_Layout() {
|
| }
|
| }
|
|
|
| -CFWL_ComboBoxImpDelegate::CFWL_ComboBoxImpDelegate(IFWL_ComboBox* pOwner)
|
| - : m_pOwner(pOwner) {}
|
| -
|
| -void CFWL_ComboBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
|
| - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) {
|
| +void IFWL_ComboBox::OnProcessMessage(CFWL_Message* pMessage) {
|
| + if (m_pWidgetMgr->IsFormDisabled()) {
|
| DisForm_OnProcessMessage(pMessage);
|
| return;
|
| }
|
| @@ -926,226 +921,217 @@ void CFWL_ComboBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
|
| return;
|
|
|
| switch (pMessage->GetClassID()) {
|
| - case CFWL_MessageType::SetFocus: {
|
| + case CFWL_MessageType::SetFocus:
|
| OnFocusChanged(pMessage, TRUE);
|
| break;
|
| - }
|
| - case CFWL_MessageType::KillFocus: {
|
| + case CFWL_MessageType::KillFocus:
|
| OnFocusChanged(pMessage, FALSE);
|
| break;
|
| - }
|
| case CFWL_MessageType::Mouse: {
|
| CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
|
| switch (pMsg->m_dwCmd) {
|
| - case FWL_MouseCommand::LeftButtonDown: {
|
| + case FWL_MouseCommand::LeftButtonDown:
|
| OnLButtonDown(pMsg);
|
| break;
|
| - }
|
| - case FWL_MouseCommand::LeftButtonUp: {
|
| + case FWL_MouseCommand::LeftButtonUp:
|
| OnLButtonUp(pMsg);
|
| break;
|
| - }
|
| - case FWL_MouseCommand::Move: {
|
| + case FWL_MouseCommand::Move:
|
| OnMouseMove(pMsg);
|
| break;
|
| - }
|
| - case FWL_MouseCommand::Leave: {
|
| + case FWL_MouseCommand::Leave:
|
| OnMouseLeave(pMsg);
|
| break;
|
| - }
|
| default:
|
| break;
|
| }
|
| break;
|
| }
|
| - case CFWL_MessageType::Key: {
|
| + case CFWL_MessageType::Key:
|
| OnKey(static_cast<CFWL_MsgKey*>(pMessage));
|
| break;
|
| - }
|
| - default: { break; }
|
| + default:
|
| + break;
|
| }
|
|
|
| - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
|
| + IFWL_Widget::OnProcessMessage(pMessage);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
|
| +void IFWL_ComboBox::OnProcessEvent(CFWL_Event* pEvent) {
|
| CFWL_EventType dwFlag = pEvent->GetClassID();
|
| if (dwFlag == CFWL_EventType::DrawItem) {
|
| CFWL_EvtLtbDrawItem* pDrawItemEvent =
|
| static_cast<CFWL_EvtLtbDrawItem*>(pEvent);
|
| CFWL_EvtCmbDrawItem pTemp;
|
| - pTemp.m_pSrcTarget = m_pOwner;
|
| + pTemp.m_pSrcTarget = this;
|
| pTemp.m_pGraphics = pDrawItemEvent->m_pGraphics;
|
| pTemp.m_index = pDrawItemEvent->m_index;
|
| pTemp.m_rtItem = pDrawItemEvent->m_rect;
|
| - m_pOwner->DispatchEvent(&pTemp);
|
| + DispatchEvent(&pTemp);
|
| } else if (dwFlag == CFWL_EventType::Scroll) {
|
| CFWL_EvtScroll* pScrollEvent = static_cast<CFWL_EvtScroll*>(pEvent);
|
| CFWL_EvtScroll pScrollEv;
|
| - pScrollEv.m_pSrcTarget = m_pOwner;
|
| + pScrollEv.m_pSrcTarget = this;
|
| pScrollEv.m_iScrollCode = pScrollEvent->m_iScrollCode;
|
| pScrollEv.m_fPos = pScrollEvent->m_fPos;
|
| - m_pOwner->DispatchEvent(&pScrollEv);
|
| + DispatchEvent(&pScrollEv);
|
| } else if (dwFlag == CFWL_EventType::TextChanged) {
|
| CFWL_EvtEdtTextChanged* pTextChangedEvent =
|
| static_cast<CFWL_EvtEdtTextChanged*>(pEvent);
|
| CFWL_EvtCmbEditChanged pTemp;
|
| - pTemp.m_pSrcTarget = m_pOwner;
|
| + pTemp.m_pSrcTarget = this;
|
| pTemp.wsInsert = pTextChangedEvent->wsInsert;
|
| pTemp.wsDelete = pTextChangedEvent->wsDelete;
|
| pTemp.nChangeType = pTextChangedEvent->nChangeType;
|
| - m_pOwner->DispatchEvent(&pTemp);
|
| + DispatchEvent(&pTemp);
|
| }
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
|
| - const CFX_Matrix* pMatrix) {
|
| - m_pOwner->DrawWidget(pGraphics, pMatrix);
|
| +void IFWL_ComboBox::OnDrawWidget(CFX_Graphics* pGraphics,
|
| + const CFX_Matrix* pMatrix) {
|
| + DrawWidget(pGraphics, pMatrix);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnFocusChanged(CFWL_Message* pMsg,
|
| - FX_BOOL bSet) {
|
| +void IFWL_ComboBox::OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) {
|
| IFWL_Widget* pDstTarget = pMsg->m_pDstTarget;
|
| IFWL_Widget* pSrcTarget = pMsg->m_pSrcTarget;
|
| - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle();
|
| + FX_BOOL bDropDown = IsDropDownStyle();
|
| if (bSet) {
|
| - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
|
| - if (bDropDown && pSrcTarget != m_pOwner->m_pListBox.get()) {
|
| - if (!m_pOwner->m_pEdit)
|
| + m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
|
| + if (bDropDown && pSrcTarget != m_pListBox.get()) {
|
| + if (!m_pEdit)
|
| return;
|
| - m_pOwner->m_pEdit->SetSelected();
|
| + m_pEdit->SetSelected();
|
| } else {
|
| - m_pOwner->Repaint(&m_pOwner->m_rtClient);
|
| + Repaint(&m_rtClient);
|
| }
|
| } else {
|
| - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
|
| - if (bDropDown && pDstTarget != m_pOwner->m_pListBox.get()) {
|
| - if (!m_pOwner->m_pEdit)
|
| + m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
|
| + if (bDropDown && pDstTarget != m_pListBox.get()) {
|
| + if (!m_pEdit)
|
| return;
|
| - m_pOwner->m_pEdit->FlagFocus(FALSE);
|
| - m_pOwner->m_pEdit->ClearSelected();
|
| + m_pEdit->FlagFocus(FALSE);
|
| + m_pEdit->ClearSelected();
|
| } else {
|
| - m_pOwner->Repaint(&m_pOwner->m_rtClient);
|
| + Repaint(&m_rtClient);
|
| }
|
| }
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) {
|
| +void IFWL_ComboBox::OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| + if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
|
| return;
|
| - }
|
| - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle();
|
| - CFX_RectF& rtBtn = bDropDown ? m_pOwner->m_rtBtn : m_pOwner->m_rtClient;
|
| +
|
| + FX_BOOL bDropDown = IsDropDownStyle();
|
| + CFX_RectF& rtBtn = bDropDown ? m_rtBtn : m_rtClient;
|
| FX_BOOL bClickBtn = rtBtn.Contains(pMsg->m_fx, pMsg->m_fy);
|
| - if (bClickBtn) {
|
| - if (bDropDown && m_pOwner->m_pEdit) {
|
| - m_pOwner->MatchEditText();
|
| - }
|
| - m_pOwner->m_bLButtonDown = TRUE;
|
| - m_pOwner->m_iBtnState = CFWL_PartState_Pressed;
|
| - m_pOwner->Repaint(&m_pOwner->m_rtClient);
|
| - m_pOwner->ShowDropList(TRUE);
|
| - m_pOwner->m_iBtnState = CFWL_PartState_Normal;
|
| - m_pOwner->Repaint(&m_pOwner->m_rtClient);
|
| - }
|
| + if (!bClickBtn)
|
| + return;
|
| +
|
| + if (bDropDown && m_pEdit)
|
| + MatchEditText();
|
| +
|
| + m_bLButtonDown = TRUE;
|
| + m_iBtnState = CFWL_PartState_Pressed;
|
| + Repaint(&m_rtClient);
|
| + ShowDropList(TRUE);
|
| + m_iBtnState = CFWL_PartState_Normal;
|
| + Repaint(&m_rtClient);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) {
|
| - m_pOwner->m_bLButtonDown = FALSE;
|
| - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| - m_pOwner->m_iBtnState = CFWL_PartState_Hovered;
|
| - } else {
|
| - m_pOwner->m_iBtnState = CFWL_PartState_Normal;
|
| - }
|
| - m_pOwner->Repaint(&m_pOwner->m_rtBtn);
|
| +void IFWL_ComboBox::OnLButtonUp(CFWL_MsgMouse* pMsg) {
|
| + m_bLButtonDown = FALSE;
|
| + if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy))
|
| + m_iBtnState = CFWL_PartState_Hovered;
|
| + else
|
| + m_iBtnState = CFWL_PartState_Normal;
|
| +
|
| + Repaint(&m_rtBtn);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) {
|
| - int32_t iOldState = m_pOwner->m_iBtnState;
|
| - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| - m_pOwner->m_iBtnState = m_pOwner->m_bLButtonDown ? CFWL_PartState_Pressed
|
| - : CFWL_PartState_Hovered;
|
| +void IFWL_ComboBox::OnMouseMove(CFWL_MsgMouse* pMsg) {
|
| + int32_t iOldState = m_iBtnState;
|
| + if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| + m_iBtnState =
|
| + m_bLButtonDown ? CFWL_PartState_Pressed : CFWL_PartState_Hovered;
|
| } else {
|
| - m_pOwner->m_iBtnState = CFWL_PartState_Normal;
|
| + m_iBtnState = CFWL_PartState_Normal;
|
| }
|
| - if ((iOldState != m_pOwner->m_iBtnState) &&
|
| - !((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) ==
|
| + if ((iOldState != m_iBtnState) &&
|
| + !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) ==
|
| FWL_WGTSTATE_Disabled)) {
|
| - m_pOwner->Repaint(&m_pOwner->m_rtBtn);
|
| + Repaint(&m_rtBtn);
|
| }
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) {
|
| - if (!m_pOwner->IsDropListShowed() &&
|
| - !((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) ==
|
| +void IFWL_ComboBox::OnMouseLeave(CFWL_MsgMouse* pMsg) {
|
| + if (!IsDropListShowed() &&
|
| + !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) ==
|
| FWL_WGTSTATE_Disabled)) {
|
| - m_pOwner->m_iBtnState = CFWL_PartState_Normal;
|
| - m_pOwner->Repaint(&m_pOwner->m_rtBtn);
|
| + m_iBtnState = CFWL_PartState_Normal;
|
| + Repaint(&m_rtBtn);
|
| }
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::OnKey(CFWL_MsgKey* pMsg) {
|
| +void IFWL_ComboBox::OnKey(CFWL_MsgKey* pMsg) {
|
| uint32_t dwKeyCode = pMsg->m_dwKeyCode;
|
| if (dwKeyCode == FWL_VKEY_Tab) {
|
| - m_pOwner->DispatchKeyEvent(pMsg);
|
| + DispatchKeyEvent(pMsg);
|
| return;
|
| }
|
| - if (pMsg->m_pDstTarget == m_pOwner)
|
| + if (pMsg->m_pDstTarget == this)
|
| DoSubCtrlKey(pMsg);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::DoSubCtrlKey(CFWL_MsgKey* pMsg) {
|
| +void IFWL_ComboBox::DoSubCtrlKey(CFWL_MsgKey* pMsg) {
|
| uint32_t dwKeyCode = pMsg->m_dwKeyCode;
|
| const bool bUp = dwKeyCode == FWL_VKEY_Up;
|
| const bool bDown = dwKeyCode == FWL_VKEY_Down;
|
| if (bUp || bDown) {
|
| - int32_t iCount = m_pOwner->m_pListBox->CountItems();
|
| - if (iCount < 1) {
|
| + int32_t iCount = m_pListBox->CountItems();
|
| + if (iCount < 1)
|
| return;
|
| - }
|
| +
|
| FX_BOOL bMatchEqual = FALSE;
|
| - int32_t iCurSel = m_pOwner->m_iCurSel;
|
| - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle();
|
| - if (bDropDown && m_pOwner->m_pEdit) {
|
| + int32_t iCurSel = m_iCurSel;
|
| + FX_BOOL bDropDown = IsDropDownStyle();
|
| + if (bDropDown && m_pEdit) {
|
| CFX_WideString wsText;
|
| - m_pOwner->m_pEdit->GetText(wsText);
|
| - iCurSel = m_pOwner->m_pListBox->MatchItem(wsText);
|
| + m_pEdit->GetText(wsText);
|
| + iCurSel = m_pListBox->MatchItem(wsText);
|
| if (iCurSel >= 0) {
|
| CFX_WideString wsTemp;
|
| - IFWL_ComboBoxDP* pData = static_cast<IFWL_ComboBoxDP*>(
|
| - m_pOwner->m_pProperties->m_pDataProvider);
|
| - IFWL_ListItem* hItem = pData->GetItem(m_pOwner, iCurSel);
|
| - m_pOwner->m_pListBox->GetItemText(hItem, wsTemp);
|
| + IFWL_ComboBoxDP* pData =
|
| + static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider);
|
| + IFWL_ListItem* hItem = pData->GetItem(this, iCurSel);
|
| + m_pListBox->GetItemText(hItem, wsTemp);
|
| bMatchEqual = wsText == wsTemp;
|
| }
|
| }
|
| if (iCurSel < 0) {
|
| iCurSel = 0;
|
| } else if (!bDropDown || bMatchEqual) {
|
| - if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1)) {
|
| + if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1))
|
| return;
|
| - }
|
| - if (bUp) {
|
| + if (bUp)
|
| iCurSel--;
|
| - } else {
|
| + else
|
| iCurSel++;
|
| - }
|
| - }
|
| - m_pOwner->m_iCurSel = iCurSel;
|
| - if (bDropDown && m_pOwner->m_pEdit) {
|
| - m_pOwner->SynchrEditText(m_pOwner->m_iCurSel);
|
| - } else {
|
| - m_pOwner->Repaint(&m_pOwner->m_rtClient);
|
| }
|
| + m_iCurSel = iCurSel;
|
| + if (bDropDown && m_pEdit)
|
| + SynchrEditText(m_iCurSel);
|
| + else
|
| + Repaint(&m_rtClient);
|
| return;
|
| }
|
| - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle();
|
| +
|
| + FX_BOOL bDropDown = IsDropDownStyle();
|
| if (bDropDown)
|
| - m_pOwner->m_pEdit->GetCurrentDelegate()->OnProcessMessage(pMsg);
|
| + m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::DisForm_OnProcessMessage(
|
| - CFWL_Message* pMessage) {
|
| +void IFWL_ComboBox::DisForm_OnProcessMessage(CFWL_Message* pMessage) {
|
| if (!pMessage)
|
| return;
|
|
|
| @@ -1165,14 +1151,12 @@ void CFWL_ComboBoxImpDelegate::DisForm_OnProcessMessage(
|
| backDefault = FALSE;
|
| CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
|
| switch (pMsg->m_dwCmd) {
|
| - case FWL_MouseCommand::LeftButtonDown: {
|
| + case FWL_MouseCommand::LeftButtonDown:
|
| DisForm_OnLButtonDown(pMsg);
|
| break;
|
| - }
|
| - case FWL_MouseCommand::LeftButtonUp: {
|
| + case FWL_MouseCommand::LeftButtonUp:
|
| OnLButtonUp(pMsg);
|
| break;
|
| - }
|
| default:
|
| break;
|
| }
|
| @@ -1183,15 +1167,14 @@ void CFWL_ComboBoxImpDelegate::DisForm_OnProcessMessage(
|
| CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage);
|
| if (pKey->m_dwCmd == FWL_KeyCommand::KeyUp)
|
| break;
|
| - if (m_pOwner->DisForm_IsDropListShowed() &&
|
| + if (DisForm_IsDropListShowed() &&
|
| pKey->m_dwCmd == FWL_KeyCommand::KeyDown) {
|
| FX_BOOL bListKey = pKey->m_dwKeyCode == FWL_VKEY_Up ||
|
| pKey->m_dwKeyCode == FWL_VKEY_Down ||
|
| pKey->m_dwKeyCode == FWL_VKEY_Return ||
|
| pKey->m_dwKeyCode == FWL_VKEY_Escape;
|
| if (bListKey) {
|
| - m_pOwner->m_pListBox->GetCurrentDelegate()->OnProcessMessage(
|
| - pMessage);
|
| + m_pListBox->GetDelegate()->OnProcessMessage(pMessage);
|
| break;
|
| }
|
| }
|
| @@ -1202,199 +1185,80 @@ void CFWL_ComboBoxImpDelegate::DisForm_OnProcessMessage(
|
| break;
|
| }
|
| if (backDefault)
|
| - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
|
| + IFWL_Widget::OnProcessMessage(pMessage);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| - FX_BOOL bDropDown = m_pOwner->DisForm_IsDropListShowed();
|
| - CFX_RectF& rtBtn = bDropDown ? m_pOwner->m_rtBtn : m_pOwner->m_rtClient;
|
| - FX_BOOL bClickBtn = rtBtn.Contains(pMsg->m_fx, pMsg->m_fy);
|
| - if (bClickBtn) {
|
| - if (m_pOwner->DisForm_IsDropListShowed()) {
|
| - m_pOwner->DisForm_ShowDropList(FALSE);
|
| - return;
|
| - }
|
| - {
|
| - if (m_pOwner->m_pEdit) {
|
| - m_pOwner->MatchEditText();
|
| - }
|
| - m_pOwner->DisForm_ShowDropList(TRUE);
|
| - }
|
| +void IFWL_ComboBox::DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| + FX_BOOL bDropDown = DisForm_IsDropListShowed();
|
| + CFX_RectF& rtBtn = bDropDown ? m_rtBtn : m_rtClient;
|
| + if (!rtBtn.Contains(pMsg->m_fx, pMsg->m_fy))
|
| + return;
|
| +
|
| + if (DisForm_IsDropListShowed()) {
|
| + DisForm_ShowDropList(FALSE);
|
| + return;
|
| }
|
| + if (m_pEdit)
|
| + MatchEditText();
|
| + DisForm_ShowDropList(TRUE);
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::DisForm_OnFocusChanged(CFWL_Message* pMsg,
|
| - FX_BOOL bSet) {
|
| +void IFWL_ComboBox::DisForm_OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) {
|
| if (bSet) {
|
| - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
|
| - if ((m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) {
|
| + m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
|
| + if ((m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) {
|
| CFWL_MsgSetFocus msg;
|
| - msg.m_pDstTarget = m_pOwner->m_pEdit.get();
|
| + msg.m_pDstTarget = m_pEdit.get();
|
| msg.m_pSrcTarget = nullptr;
|
| - m_pOwner->m_pEdit->GetCurrentDelegate()->OnProcessMessage(&msg);
|
| + m_pEdit->GetDelegate()->OnProcessMessage(&msg);
|
| }
|
| } else {
|
| - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
|
| - m_pOwner->DisForm_ShowDropList(FALSE);
|
| + m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
|
| + DisForm_ShowDropList(FALSE);
|
| CFWL_MsgKillFocus msg;
|
| msg.m_pDstTarget = nullptr;
|
| - msg.m_pSrcTarget = m_pOwner->m_pEdit.get();
|
| - m_pOwner->m_pEdit->GetCurrentDelegate()->OnProcessMessage(&msg);
|
| + msg.m_pSrcTarget = m_pEdit.get();
|
| + m_pEdit->GetDelegate()->OnProcessMessage(&msg);
|
| }
|
| }
|
|
|
| -void CFWL_ComboBoxImpDelegate::DisForm_OnKey(CFWL_MsgKey* pMsg) {
|
| +void IFWL_ComboBox::DisForm_OnKey(CFWL_MsgKey* pMsg) {
|
| uint32_t dwKeyCode = pMsg->m_dwKeyCode;
|
| const bool bUp = dwKeyCode == FWL_VKEY_Up;
|
| const bool bDown = dwKeyCode == FWL_VKEY_Down;
|
| if (bUp || bDown) {
|
| - IFWL_ComboList* pComboList = m_pOwner->m_pListBox.get();
|
| + IFWL_ComboList* pComboList = m_pListBox.get();
|
| int32_t iCount = pComboList->CountItems();
|
| - if (iCount < 1) {
|
| + if (iCount < 1)
|
| return;
|
| - }
|
| +
|
| FX_BOOL bMatchEqual = FALSE;
|
| - int32_t iCurSel = m_pOwner->m_iCurSel;
|
| - if (m_pOwner->m_pEdit) {
|
| + int32_t iCurSel = m_iCurSel;
|
| + if (m_pEdit) {
|
| CFX_WideString wsText;
|
| - m_pOwner->m_pEdit->GetText(wsText);
|
| + m_pEdit->GetText(wsText);
|
| iCurSel = pComboList->MatchItem(wsText);
|
| if (iCurSel >= 0) {
|
| CFX_WideString wsTemp;
|
| - IFWL_ListItem* item = m_pOwner->m_pListBox->GetSelItem(iCurSel);
|
| - m_pOwner->m_pListBox->GetItemText(item, wsTemp);
|
| + IFWL_ListItem* item = m_pListBox->GetSelItem(iCurSel);
|
| + m_pListBox->GetItemText(item, wsTemp);
|
| bMatchEqual = wsText == wsTemp;
|
| }
|
| }
|
| if (iCurSel < 0) {
|
| iCurSel = 0;
|
| } else if (bMatchEqual) {
|
| - if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1)) {
|
| + if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1))
|
| return;
|
| - }
|
| - if (bUp) {
|
| + if (bUp)
|
| iCurSel--;
|
| - } else {
|
| + else
|
| iCurSel++;
|
| - }
|
| }
|
| - m_pOwner->m_iCurSel = iCurSel;
|
| - m_pOwner->SynchrEditText(m_pOwner->m_iCurSel);
|
| + m_iCurSel = iCurSel;
|
| + SynchrEditText(m_iCurSel);
|
| return;
|
| }
|
| - if (m_pOwner->m_pEdit)
|
| - m_pOwner->m_pEdit->GetCurrentDelegate()->OnProcessMessage(pMsg);
|
| -}
|
| -
|
| -CFWL_ComboProxyImpDelegate::CFWL_ComboProxyImpDelegate(IFWL_Form* pForm,
|
| - IFWL_ComboBox* pComboBox)
|
| - : m_bLButtonDown(FALSE),
|
| - m_bLButtonUpSelf(FALSE),
|
| - m_fStartPos(0),
|
| - m_pForm(pForm),
|
| - m_pComboBox(pComboBox) {}
|
| -
|
| -void CFWL_ComboProxyImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
|
| - if (!pMessage)
|
| - return;
|
| -
|
| - switch (pMessage->GetClassID()) {
|
| - case CFWL_MessageType::Mouse: {
|
| - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
|
| - switch (pMsg->m_dwCmd) {
|
| - case FWL_MouseCommand::LeftButtonDown: {
|
| - OnLButtonDown(pMsg);
|
| - break;
|
| - }
|
| - case FWL_MouseCommand::LeftButtonUp: {
|
| - OnLButtonUp(pMsg);
|
| - break;
|
| - }
|
| - case FWL_MouseCommand::Move: {
|
| - OnMouseMove(pMsg);
|
| - break;
|
| - }
|
| - default:
|
| - break;
|
| - }
|
| - break;
|
| - }
|
| - case CFWL_MessageType::Deactivate: {
|
| - OnDeactive(static_cast<CFWL_MsgDeactivate*>(pMessage));
|
| - break;
|
| - }
|
| - case CFWL_MessageType::KillFocus: {
|
| - OnFocusChanged(static_cast<CFWL_MsgKillFocus*>(pMessage), FALSE);
|
| - break;
|
| - }
|
| - case CFWL_MessageType::SetFocus: {
|
| - OnFocusChanged(static_cast<CFWL_MsgKillFocus*>(pMessage), TRUE);
|
| - break;
|
| - }
|
| - default:
|
| - break;
|
| - }
|
| - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
|
| -}
|
| -
|
| -void CFWL_ComboProxyImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
|
| - const CFX_Matrix* pMatrix) {
|
| - m_pComboBox->DrawStretchHandler(pGraphics, pMatrix);
|
| -}
|
| -
|
| -void CFWL_ComboProxyImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| - const IFWL_App* pApp = m_pForm->GetOwnerApp();
|
| - if (!pApp)
|
| - return;
|
| -
|
| - CFWL_NoteDriver* pDriver =
|
| - static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
|
| - CFX_RectF rtWidget;
|
| - m_pForm->GetWidgetRect(rtWidget);
|
| - rtWidget.left = rtWidget.top = 0;
|
| - if (rtWidget.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| - m_bLButtonDown = TRUE;
|
| - pDriver->SetGrab(m_pForm, TRUE);
|
| - } else {
|
| - m_bLButtonDown = FALSE;
|
| - pDriver->SetGrab(m_pForm, FALSE);
|
| - m_pComboBox->ShowDropList(FALSE);
|
| - }
|
| -}
|
| -
|
| -void CFWL_ComboProxyImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) {
|
| - m_bLButtonDown = FALSE;
|
| - const IFWL_App* pApp = m_pForm->GetOwnerApp();
|
| - if (!pApp)
|
| - return;
|
| -
|
| - CFWL_NoteDriver* pDriver =
|
| - static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
|
| - pDriver->SetGrab(m_pForm, FALSE);
|
| - if (m_bLButtonUpSelf) {
|
| - CFX_RectF rect;
|
| - m_pForm->GetWidgetRect(rect);
|
| - rect.left = rect.top = 0;
|
| - if (!rect.Contains(pMsg->m_fx, pMsg->m_fy) &&
|
| - m_pComboBox->IsDropListShowed()) {
|
| - m_pComboBox->ShowDropList(FALSE);
|
| - }
|
| - } else {
|
| - m_bLButtonUpSelf = TRUE;
|
| - }
|
| -}
|
| -
|
| -void CFWL_ComboProxyImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) {}
|
| -
|
| -void CFWL_ComboProxyImpDelegate::OnDeactive(CFWL_MsgDeactivate* pMsg) {
|
| - m_pComboBox->ShowDropList(FALSE);
|
| -}
|
| -
|
| -void CFWL_ComboProxyImpDelegate::OnFocusChanged(CFWL_MsgKillFocus* pMsg,
|
| - FX_BOOL bSet) {
|
| - if (!bSet) {
|
| - if (!pMsg->m_pSetFocus) {
|
| - m_pComboBox->ShowDropList(FALSE);
|
| - }
|
| - }
|
| + if (m_pEdit)
|
| + m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
|
| }
|
|
|