OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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/ifwl_combolist.h" | 7 #include "xfa/fwl/core/ifwl_combolist.h" |
8 | 8 |
| 9 #include "third_party/base/ptr_util.h" |
9 #include "xfa/fwl/core/ifwl_combobox.h" | 10 #include "xfa/fwl/core/ifwl_combobox.h" |
10 #include "xfa/fwl/core/ifwl_comboedit.h" | 11 #include "xfa/fwl/core/ifwl_comboedit.h" |
11 | 12 |
12 IFWL_ComboList::IFWL_ComboList(const IFWL_App* app, | 13 IFWL_ComboList::IFWL_ComboList(const IFWL_App* app, |
13 const CFWL_WidgetImpProperties& properties, | 14 const CFWL_WidgetImpProperties& properties, |
14 IFWL_Widget* pOuter) | 15 IFWL_Widget* pOuter) |
15 : IFWL_ListBox(app, properties, pOuter), m_bNotifyOwner(TRUE) { | 16 : IFWL_ListBox(app, properties, pOuter), m_bNotifyOwner(TRUE) { |
16 ASSERT(pOuter); | 17 ASSERT(pOuter); |
17 } | 18 SetDelegate(pdfium::MakeUnique<CFWL_ComboListImpDelegate>(this)); |
18 | |
19 void IFWL_ComboList::Initialize() { | |
20 IFWL_ListBox::Initialize(); | |
21 | |
22 // Delete the delegate that was created by IFWL_ListBox::Initialize ... | |
23 delete m_pDelegate; | |
24 m_pDelegate = new CFWL_ComboListImpDelegate(this); | |
25 } | |
26 | |
27 void IFWL_ComboList::Finalize() { | |
28 delete m_pDelegate; | |
29 m_pDelegate = nullptr; | |
30 IFWL_ListBox::Finalize(); | |
31 } | 19 } |
32 | 20 |
33 int32_t IFWL_ComboList::MatchItem(const CFX_WideString& wsMatch) { | 21 int32_t IFWL_ComboList::MatchItem(const CFX_WideString& wsMatch) { |
34 if (wsMatch.IsEmpty()) { | 22 if (wsMatch.IsEmpty()) { |
35 return -1; | 23 return -1; |
36 } | 24 } |
37 if (!m_pProperties->m_pDataProvider) | 25 if (!m_pProperties->m_pDataProvider) |
38 return -1; | 26 return -1; |
39 IFWL_ListBoxDP* pData = | 27 IFWL_ListBoxDP* pData = |
40 static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); | 28 static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 int32_t iSel = pData->GetItemIndex(m_pOwner, hItem); | 176 int32_t iSel = pData->GetItemIndex(m_pOwner, hItem); |
189 CFWL_EvtCmbHoverChanged event; | 177 CFWL_EvtCmbHoverChanged event; |
190 event.m_pSrcTarget = m_pOwner->m_pOuter; | 178 event.m_pSrcTarget = m_pOwner->m_pOuter; |
191 event.m_iCurHover = iSel; | 179 event.m_iCurHover = iSel; |
192 m_pOwner->DispatchEvent(&event); | 180 m_pOwner->DispatchEvent(&event); |
193 m_pOwner->ChangeSelected(iSel); | 181 m_pOwner->ChangeSelected(iSel); |
194 } | 182 } |
195 } else if (m_pOwner->m_bNotifyOwner) { | 183 } else if (m_pOwner->m_bNotifyOwner) { |
196 m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); | 184 m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); |
197 IFWL_ComboBox* pOuter = static_cast<IFWL_ComboBox*>(m_pOwner->m_pOuter); | 185 IFWL_ComboBox* pOuter = static_cast<IFWL_ComboBox*>(m_pOwner->m_pOuter); |
198 pOuter->m_pDelegate->OnProcessMessage(pMsg); | 186 pOuter->GetDelegate()->OnProcessMessage(pMsg); |
199 } | 187 } |
200 return 1; | 188 return 1; |
201 } | 189 } |
202 | 190 |
203 int32_t CFWL_ComboListImpDelegate::OnDropListLButtonDown(CFWL_MsgMouse* pMsg) { | 191 int32_t CFWL_ComboListImpDelegate::OnDropListLButtonDown(CFWL_MsgMouse* pMsg) { |
204 if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { | 192 if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { |
205 return 0; | 193 return 0; |
206 } | 194 } |
207 IFWL_ComboBox* pOuter = static_cast<IFWL_ComboBox*>(m_pOwner->m_pOuter); | 195 IFWL_ComboBox* pOuter = static_cast<IFWL_ComboBox*>(m_pOwner->m_pOuter); |
208 pOuter->ShowDropList(FALSE); | 196 pOuter->ShowDropList(FALSE); |
209 return 1; | 197 return 1; |
210 } | 198 } |
211 | 199 |
212 int32_t CFWL_ComboListImpDelegate::OnDropListLButtonUp(CFWL_MsgMouse* pMsg) { | 200 int32_t CFWL_ComboListImpDelegate::OnDropListLButtonUp(CFWL_MsgMouse* pMsg) { |
213 IFWL_ComboBox* pOuter = static_cast<IFWL_ComboBox*>(m_pOwner->m_pOuter); | 201 IFWL_ComboBox* pOuter = static_cast<IFWL_ComboBox*>(m_pOwner->m_pOuter); |
214 if (m_pOwner->m_bNotifyOwner) { | 202 if (m_pOwner->m_bNotifyOwner) { |
215 m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); | 203 m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); |
216 pOuter->m_pDelegate->OnProcessMessage(pMsg); | 204 pOuter->GetDelegate()->OnProcessMessage(pMsg); |
217 } else { | 205 } else { |
218 if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { | 206 if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { |
219 CFX_RectF rect; | 207 CFX_RectF rect; |
220 m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); | 208 m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); |
221 if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { | 209 if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { |
222 return 1; | 210 return 1; |
223 } | 211 } |
224 } | 212 } |
225 pOuter->ShowDropList(FALSE); | 213 pOuter->ShowDropList(FALSE); |
226 IFWL_ListItem* hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); | 214 IFWL_ListItem* hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); |
(...skipping 21 matching lines...) Expand all Loading... |
248 pOuter->ProcessSelChanged(FALSE); | 236 pOuter->ProcessSelChanged(FALSE); |
249 return 1; | 237 return 1; |
250 } | 238 } |
251 default: { bPropagate = TRUE; } | 239 default: { bPropagate = TRUE; } |
252 } | 240 } |
253 } else if (pKey->m_dwCmd == FWL_KeyCommand::Char) { | 241 } else if (pKey->m_dwCmd == FWL_KeyCommand::Char) { |
254 bPropagate = TRUE; | 242 bPropagate = TRUE; |
255 } | 243 } |
256 if (bPropagate) { | 244 if (bPropagate) { |
257 pKey->m_pDstTarget = m_pOwner->m_pOuter; | 245 pKey->m_pDstTarget = m_pOwner->m_pOuter; |
258 pOuter->m_pDelegate->OnProcessMessage(pKey); | 246 pOuter->GetDelegate()->OnProcessMessage(pKey); |
259 return 1; | 247 return 1; |
260 } | 248 } |
261 return 0; | 249 return 0; |
262 } | 250 } |
263 | 251 |
264 void CFWL_ComboListImpDelegate::OnDropListKeyDown(CFWL_MsgKey* pKey) { | 252 void CFWL_ComboListImpDelegate::OnDropListKeyDown(CFWL_MsgKey* pKey) { |
265 uint32_t dwKeyCode = pKey->m_dwKeyCode; | 253 uint32_t dwKeyCode = pKey->m_dwKeyCode; |
266 switch (dwKeyCode) { | 254 switch (dwKeyCode) { |
267 case FWL_VKEY_Up: | 255 case FWL_VKEY_Up: |
268 case FWL_VKEY_Down: | 256 case FWL_VKEY_Down: |
(...skipping 12 matching lines...) Expand all Loading... |
281 CFX_RectF rtInvalidate; | 269 CFX_RectF rtInvalidate; |
282 rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, | 270 rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, |
283 m_pOwner->m_pProperties->m_rtWidget.height); | 271 m_pOwner->m_pProperties->m_rtWidget.height); |
284 m_pOwner->Repaint(&rtInvalidate); | 272 m_pOwner->Repaint(&rtInvalidate); |
285 break; | 273 break; |
286 } | 274 } |
287 default: | 275 default: |
288 break; | 276 break; |
289 } | 277 } |
290 } | 278 } |
OLD | NEW |