Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cfwl_combobox.h
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
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
7#ifndef XFA_FWL_CFWL_COMBOBOX_H_
8#define XFA_FWL_CFWL_COMBOBOX_H_
9
10#include "xfa/fgas/graphics/cfgas_gegraphics.h"
11#include "xfa/fwl/cfwl_comboedit.h"
12#include "xfa/fwl/cfwl_combolist.h"
13#include "xfa/fwl/cfwl_listbox.h"
14#include "xfa/fwl/cfwl_widget.h"
15
16#define FWL_STYLEEXT_CMB_DropDown (1L << 0)
17#define FWL_STYLEEXT_CMB_Sort (1L << 1)
18#define FWL_STYLEEXT_CMB_OwnerDraw (1L << 3)
19#define FWL_STYLEEXT_CMB_EditHNear 0
20#define FWL_STYLEEXT_CMB_EditHCenter (1L << 4)
21#define FWL_STYLEEXT_CMB_EditVNear 0
22#define FWL_STYLEEXT_CMB_EditVCenter (1L << 6)
23#define FWL_STYLEEXT_CMB_EditVFar (2L << 6)
24#define FWL_STYLEEXT_CMB_EditJustified (1L << 8)
25#define FWL_STYLEEXT_CMB_EditHAlignMask (3L << 4)
26#define FWL_STYLEEXT_CMB_EditVAlignMask (3L << 6)
27#define FWL_STYLEEXT_CMB_ListItemLeftAlign 0
28#define FWL_STYLEEXT_CMB_ListItemCenterAlign (1L << 10)
29#define FWL_STYLEEXT_CMB_ListItemAlignMask (3L << 10)
30#define FWL_STYLEEXT_CMB_ReadOnly (1L << 13)
31
32class CFWL_ComboBox final : public CFWL_Widget {
33 public:
35 ~CFWL_ComboBox() override;
36
37 // CFWL_Widget
38 void Trace(cppgc::Visitor* visitor) const override;
39 FWL_Type GetClassID() const override;
40 void ModifyStyleExts(uint32_t dwStyleExtsAdded,
41 uint32_t dwStyleExtsRemoved) override;
42 void SetStates(uint32_t dwStates) override;
43 void RemoveStates(uint32_t dwStates) override;
44 void Update() override;
45 FWL_WidgetHit HitTest(const CFX_PointF& point) override;
46 void DrawWidget(CFGAS_GEGraphics* pGraphics,
47 const CFX_Matrix& matrix) override;
48 void OnProcessMessage(CFWL_Message* pMessage) override;
49 void OnProcessEvent(CFWL_Event* pEvent) override;
50 void OnDrawWidget(CFGAS_GEGraphics* pGraphics,
51 const CFX_Matrix& matrix) override;
52
53 WideString GetTextByIndex(int32_t iIndex) const;
54 int32_t GetCurSel() const { return m_iCurSel; }
55 void SetCurSel(int32_t iSel);
56
57 void AddString(const WideString& wsText);
58 void RemoveAt(int32_t iIndex);
59 void RemoveAll();
60
61 void SetEditText(const WideString& wsText);
62 WideString GetEditText() const;
63
64 bool EditCanUndo() const { return m_pEdit->CanUndo(); }
65 bool EditCanRedo() const { return m_pEdit->CanRedo(); }
66 bool EditUndo() { return m_pEdit->Undo(); }
67 bool EditRedo() { return m_pEdit->Redo(); }
68 bool EditCanCopy() const { return m_pEdit->HasSelection(); }
69 bool EditCanCut() const {
70 if (m_pEdit->GetStyleExts() & FWL_STYLEEXT_EDT_ReadOnly)
71 return false;
72 return EditCanCopy();
73 }
74 bool EditCanSelectAll() const { return m_pEdit->GetTextLength() > 0; }
75 absl::optional<WideString> EditCopy() const { return m_pEdit->Copy(); }
76 absl::optional<WideString> EditCut() { return m_pEdit->Cut(); }
77 bool EditPaste(const WideString& wsPaste) { return m_pEdit->Paste(wsPaste); }
78 void EditSelectAll() { m_pEdit->SelectAll(); }
79 void EditDelete() { m_pEdit->ClearText(); }
80 void EditDeSelect() { m_pEdit->ClearSelection(); }
81
82 CFX_RectF GetBBox() const;
83 void EditModifyStyleExts(uint32_t dwStyleExtsAdded,
84 uint32_t dwStyleExtsRemoved);
85 void ShowDropDownList();
86 void HideDropDownList();
87
88 CFWL_ComboEdit* GetComboEdit() const { return m_pEdit; }
89
90 void ProcessSelChanged(bool bLButtonUp);
91 int32_t GetCurrentSelection() const { return m_iCurSel; }
92
93 private:
94 explicit CFWL_ComboBox(CFWL_App* pApp);
95
96 bool IsDropDownStyle() const {
98 }
99 void MatchEditText();
100 void SyncEditText(int32_t iListItem);
101 void Layout();
102 void ResetEditAlignment();
103 void ResetListItemAlignment();
104 void GetPopupPos(float fMinHeight,
105 float fMaxHeight,
106 const CFX_RectF& rtAnchor,
107 CFX_RectF* pPopupRect);
108 void OnLButtonUp(CFWL_MessageMouse* pMsg);
109 bool IsDropListVisible() const { return m_pListBox->IsVisible(); }
110 void OnLButtonDown(CFWL_MessageMouse* pMsg);
111 void OnFocusGained();
112 void OnFocusLost();
113 void OnKey(CFWL_MessageKey* pMsg);
114 void RepaintInflatedListBoxRect();
115
116 CFX_RectF m_ClientRect;
117 CFX_RectF m_ContentRect;
118 CFX_RectF m_BtnRect;
119 cppgc::Member<CFWL_ComboEdit> const m_pEdit;
120 cppgc::Member<CFWL_ComboList> const m_pListBox;
121 int32_t m_iCurSel = -1;
122 Mask<CFWL_PartState> m_iBtnState = CFWL_PartState::kNormal;
123};
124
125#endif // XFA_FWL_CFWL_COMBOBOX_H_
#define FWL_STYLEEXT_CMB_ListItemAlignMask
#define FWL_STYLEEXT_CMB_EditHAlignMask
#define FWL_STYLEEXT_CMB_EditVCenter
#define FWL_STYLEEXT_CMB_EditVFar
#define FWL_STYLEEXT_CMB_DropDown
#define FWL_STYLEEXT_CMB_ListItemCenterAlign
#define FWL_STYLEEXT_CMB_EditHCenter
#define FWL_STYLEEXT_CMB_EditVAlignMask
#define FWL_STYLEEXT_CMB_ReadOnly
#define FWL_STYLEEXT_CMB_EditJustified
#define FWL_STYLEEXT_EDT_VAlignMask
Definition cfwl_edit.h:36
#define FWL_STYLEEXT_EDT_HAlignModeMask
Definition cfwl_edit.h:37
#define FWL_STYLEEXT_EDT_HAlignMask
Definition cfwl_edit.h:35
#define FWL_STYLEEXT_EDT_VNear
Definition cfwl_edit.h:31
#define FWL_STYLEEXT_EDT_VCenter
Definition cfwl_edit.h:32
#define FWL_STYLEEXT_EDT_ReadOnly
Definition cfwl_edit.h:19
#define FWL_STYLEEXT_EDT_VFar
Definition cfwl_edit.h:33
#define FWL_STYLEEXT_EDT_HNear
Definition cfwl_edit.h:28
#define FWL_STYLEEXT_EDT_Justified
Definition cfwl_edit.h:34
#define FWL_STYLEEXT_EDT_HCenter
Definition cfwl_edit.h:29
#define FWL_STYLEEXT_LTB_CenterAlign
#define FWL_STYLEEXT_LTB_LeftAlign
CFWL_PartState
#define FWL_STATE_WGT_Invisible
Definition cfwl_widget.h:43
#define FWL_STYLE_WGT_VScroll
Definition cfwl_widget.h:37
FWL_Type
Definition cfwl_widget.h:46
#define FWL_STATE_WGT_Focused
Definition cfwl_widget.h:42
#define FWL_STYLE_WGT_Border
Definition cfwl_widget.h:36
StateRestorer(CFGAS_GEGraphics *graphics)
void ConcatMatrix(const CFX_Matrix &matrix)
void ProcessSelChanged(bool bLButtonUp)
void OnProcessMessage(CFWL_Message *pMessage) override
void DrawWidget(CFGAS_GEGraphics *pGraphics, const CFX_Matrix &matrix) override
bool EditCanUndo() const
WideString GetTextByIndex(int32_t iIndex) const
void EditDeSelect()
bool EditCanCut() const
~CFWL_ComboBox() override
void EditSelectAll()
void EditModifyStyleExts(uint32_t dwStyleExtsAdded, uint32_t dwStyleExtsRemoved)
FWL_Type GetClassID() const override
CFWL_ComboEdit * GetComboEdit() const
void AddString(const WideString &wsText)
FWL_WidgetHit HitTest(const CFX_PointF &point) override
void SetStates(uint32_t dwStates) override
absl::optional< WideString > EditCut()
bool EditCanSelectAll() const
void Update() override
bool EditCanCopy() const
void SetCurSel(int32_t iSel)
void RemoveStates(uint32_t dwStates) override
void OnProcessEvent(CFWL_Event *pEvent) override
CFX_RectF GetBBox() const
WideString GetEditText() const
int32_t GetCurrentSelection() const
absl::optional< WideString > EditCopy() const
void RemoveAt(int32_t iIndex)
void Trace(cppgc::Visitor *visitor) const override
bool EditPaste(const WideString &wsPaste)
int32_t GetCurSel() const
void SetEditText(const WideString &wsText)
void OnDrawWidget(CFGAS_GEGraphics *pGraphics, const CFX_Matrix &matrix) override
void ModifyStyleExts(uint32_t dwStyleExtsAdded, uint32_t dwStyleExtsRemoved) override
bool EditCanRedo() const
void ChangeSelected(int32_t iSel)
int32_t MatchItem(WideStringView wsMatch)
float GetPos() const
Code GetScrollCode() const
Type GetType() const
Definition cfwl_event.h:39
CFWL_Widget * GetSrcTarget() const
Definition cfwl_event.h:40
WideString GetText() const
int32_t CountItems(const CFWL_Widget *pWidget) const
float CalcItemHeight()
const KeyCommand m_dwCmd
const uint32_t m_dwKeyCodeOrChar
CFWL_MessageKillFocus(CFWL_Widget *pDstTarget)
const MouseCommand m_dwCmd
Type GetType() const
CFWL_Widget * GetDstTarget() const
CFX_RectF m_PartRect
uint32_t GetStyleExts() const
CFWL_Widget(CFWL_App *app, const Properties &properties, CFWL_Widget *pOuter)
virtual void SetStates(uint32_t dwStates)
Properties m_Properties
void OnProcessMessage(CFWL_Message *pMessage) override
float GetCXBorderSize() const
CFX_RectF m_WidgetRect
void RepaintRect(const CFX_RectF &pRect)
virtual void ModifyStyleExts(uint32_t dwStyleExtsAdded, uint32_t dwStyleExtsRemoved)
IFWL_ThemeProvider * GetThemeProvider() const
virtual CFX_RectF GetClientRect()
CFWL_WidgetMgr * GetWidgetMgr() const
virtual void RemoveStates(uint32_t dwStates)
void DispatchEvent(CFWL_Event *pEvent)
bool IsLocked() const
CFX_Matrix(float a1, float b1, float c1, float d1, float e1, float f1)
void Concat(const CFX_Matrix &right)
void Offset(float dx, float dy)
bool IsEmpty(float fEpsilon) const
void Deflate(float off_left, float off_top, float off_right, float off_bottom)
void Inflate(float x, float y)
CFX_RectF & operator=(const CFX_RectF &other)=default
bool Contains(const PointType &p) const
float right() const
constexpr CFX_RectF(float dst_left, float dst_top, float dst_width, float dst_height)
void Union(const CFX_RectF &rt)
virtual CFX_RectF GetUIMargin(const CFWL_ThemePart &pThemePart) const =0
virtual float GetScrollBarWidth() const =0
bool operator==(const WideString &other) const
@ XFA_FWL_VKEY_Down
@ XFA_FWL_VKEY_Escape
@ XFA_FWL_VKEY_Return
@ XFA_FWL_VKEY_Up
FWL_WidgetHit
#define CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED
Definition heap.h:32