| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 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 "../../include/pdfwindow/PDFWindow.h" | 7 #include "../../include/pdfwindow/PDFWindow.h" |
| 8 #include "../../include/pdfwindow/PWL_Wnd.h" | 8 #include "../../include/pdfwindow/PWL_Wnd.h" |
| 9 #include "../../include/pdfwindow/PWL_ListBox.h" | 9 #include "../../include/pdfwindow/PWL_ListBox.h" |
| 10 #include "../../include/pdfwindow/PWL_Utils.h" | 10 #include "../../include/pdfwindow/PWL_Utils.h" |
| 11 #include "../../include/pdfwindow/PWL_ScrollBar.h" | 11 #include "../../include/pdfwindow/PWL_ScrollBar.h" |
| 12 #include "../../include/pdfwindow/PWL_EditCtrl.h" | 12 #include "../../include/pdfwindow/PWL_EditCtrl.h" |
| 13 #include "../../include/pdfwindow/PWL_Edit.h" | 13 #include "../../include/pdfwindow/PWL_Edit.h" |
| 14 | 14 |
| 15 #define IsFloatZero(f)» » » » » » ((f) < 0.0001 &&
(f) > -0.0001) | 15 #define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) |
| 16 #define IsFloatBigger(fa,fb)» » » » ((fa) > (fb) && !IsFloat
Zero((fa) - (fb))) | 16 #define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) |
| 17 #define IsFloatSmaller(fa,fb)» » » » ((fa) < (fb) && !IsFloat
Zero((fa) - (fb))) | 17 #define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) |
| 18 #define IsFloatEqual(fa,fb)» » » » » IsFloatZero((fa)
-(fb)) | 18 #define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) |
| 19 | 19 |
| 20 /* ------------------------ CPWL_List_Notify ----------------------- */ | 20 /* ------------------------ CPWL_List_Notify ----------------------- */ |
| 21 | 21 |
| 22 CPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList) | 22 CPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList) { |
| 23 { | 23 ASSERT(m_pList != NULL); |
| 24 » ASSERT(m_pList != NULL); | 24 } |
| 25 } | 25 |
| 26 | 26 CPWL_List_Notify::~CPWL_List_Notify() { |
| 27 CPWL_List_Notify::~CPWL_List_Notify() | 27 } |
| 28 { | 28 |
| 29 } | 29 void CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin, |
| 30 | 30 FX_FLOAT fPlateMax, |
| 31 void CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
| 31 FX_FLOAT fContentMin, |
| 32 » » » » » » » » » »
» » FX_FLOAT fContentMin, FX_FLOAT fContentMax, | 32 FX_FLOAT fContentMax, |
| 33 » » » » » » » » » »
» » FX_FLOAT fSmallStep, FX_FLOAT fBigStep) | 33 FX_FLOAT fSmallStep, |
| 34 { | 34 FX_FLOAT fBigStep) { |
| 35 » PWL_SCROLL_INFO Info; | 35 PWL_SCROLL_INFO Info; |
| 36 | 36 |
| 37 » Info.fPlateWidth = fPlateMax - fPlateMin; | 37 Info.fPlateWidth = fPlateMax - fPlateMin; |
| 38 » Info.fContentMin = fContentMin; | 38 Info.fContentMin = fContentMin; |
| 39 » Info.fContentMax = fContentMax; | 39 Info.fContentMax = fContentMax; |
| 40 » Info.fSmallStep = fSmallStep; | 40 Info.fSmallStep = fSmallStep; |
| 41 » Info.fBigStep = fBigStep; | 41 Info.fBigStep = fBigStep; |
| 42 | 42 |
| 43 » m_pList->OnNotify(m_pList,PNM_SETSCROLLINFO,SBT_VSCROLL,(FX_INTPTR)&Info
); | 43 m_pList->OnNotify(m_pList, PNM_SETSCROLLINFO, SBT_VSCROLL, (FX_INTPTR)&Info); |
| 44 | 44 |
| 45 » if (CPWL_ScrollBar * pScroll = m_pList->GetVScrollBar()) | 45 if (CPWL_ScrollBar* pScroll = m_pList->GetVScrollBar()) { |
| 46 » { | 46 if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) || |
| 47 » » if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fConten
tMin) | 47 IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) { |
| 48 » » » || IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.f
ContentMin)) | 48 if (pScroll->IsVisible()) { |
| 49 » » { | 49 pScroll->SetVisible(FALSE); |
| 50 » » » if (pScroll->IsVisible()) | 50 m_pList->RePosChildWnd(); |
| 51 » » » { | 51 } |
| 52 » » » » pScroll->SetVisible(FALSE); | 52 } else { |
| 53 » » » » m_pList->RePosChildWnd(); | 53 if (!pScroll->IsVisible()) { |
| 54 » » » }» » » | 54 pScroll->SetVisible(TRUE); |
| 55 » » } | 55 m_pList->RePosChildWnd(); |
| 56 » » else | 56 } |
| 57 » » { | 57 } |
| 58 » » » if (!pScroll->IsVisible()) | 58 } |
| 59 » » » { | 59 } |
| 60 » » » » pScroll->SetVisible(TRUE);» | 60 |
| 61 » » » » m_pList->RePosChildWnd(); | 61 void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) { |
| 62 » » » } | 62 m_pList->OnNotify(m_pList, PNM_SETSCROLLPOS, SBT_VSCROLL, (FX_INTPTR)&fy); |
| 63 » » } | 63 } |
| 64 » }» | 64 |
| 65 } | 65 void CPWL_List_Notify::IOnInvalidateRect(CPDF_Rect* pRect) { |
| 66 | 66 m_pList->InvalidateRect(pRect); |
| 67 void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) | |
| 68 { | |
| 69 » m_pList->OnNotify(m_pList,PNM_SETSCROLLPOS,SBT_VSCROLL,(FX_INTPTR)&fy); | |
| 70 } | |
| 71 | |
| 72 void CPWL_List_Notify::IOnInvalidateRect(CPDF_Rect * pRect) | |
| 73 { | |
| 74 » m_pList->InvalidateRect(pRect); | |
| 75 } | 67 } |
| 76 | 68 |
| 77 /* --------------------------- CPWL_ListBox ---------------------------- */ | 69 /* --------------------------- CPWL_ListBox ---------------------------- */ |
| 78 | 70 |
| 79 CPWL_ListBox::CPWL_ListBox() : | 71 CPWL_ListBox::CPWL_ListBox() |
| 80 m_pList(NULL), | 72 : m_pList(NULL), |
| 81 m_pListNotify(NULL), | 73 m_pListNotify(NULL), |
| 82 m_bMouseDown(FALSE), | 74 m_bMouseDown(FALSE), |
| 83 m_bHoverSel(FALSE), | 75 m_bHoverSel(FALSE), |
| 84 m_pFillerNotify(NULL) | 76 m_pFillerNotify(NULL) { |
| 85 { | 77 m_pList = IFX_List::NewList(); |
| 86 m_pList = IFX_List::NewList(); | 78 |
| 87 | 79 ASSERT(m_pList != NULL); |
| 88 ASSERT(m_pList != NULL); | 80 } |
| 89 } | 81 |
| 90 | 82 CPWL_ListBox::~CPWL_ListBox() { |
| 91 CPWL_ListBox::~CPWL_ListBox() | 83 IFX_List::DelList(m_pList); |
| 92 { | 84 |
| 93 IFX_List::DelList(m_pList); | 85 if (m_pListNotify) { |
| 94 | 86 delete m_pListNotify; |
| 95 if (m_pListNotify) | 87 m_pListNotify = NULL; |
| 96 { | 88 } |
| 97 delete m_pListNotify; | 89 } |
| 98 m_pListNotify = NULL; | 90 |
| 99 } | 91 CFX_ByteString CPWL_ListBox::GetClassName() const { |
| 100 } | 92 return "CPWL_ListBox"; |
| 101 | 93 } |
| 102 CFX_ByteString CPWL_ListBox::GetClassName() const | 94 |
| 103 { | 95 void CPWL_ListBox::OnCreated() { |
| 104 return "CPWL_ListBox"; | 96 if (m_pList) { |
| 105 } | 97 if (m_pListNotify) |
| 106 | 98 delete m_pListNotify; |
| 107 void CPWL_ListBox::OnCreated() | 99 |
| 108 { | 100 m_pList->SetFontMap(GetFontMap()); |
| 109 if (m_pList) | 101 m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this)); |
| 110 { | 102 |
| 111 if (m_pListNotify) delete m_pListNotify; | 103 SetHoverSel(HasFlag(PLBS_HOVERSEL)); |
| 112 | 104 m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL)); |
| 113 m_pList->SetFontMap(GetFontMap()); | 105 m_pList->SetFontSize(this->GetCreationParam().fFontSize); |
| 114 m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this)); | 106 |
| 115 | 107 m_bHoverSel = HasFlag(PLBS_HOVERSEL); |
| 116 SetHoverSel(HasFlag(PLBS_HOVERSEL)); | 108 } |
| 117 m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL)); | 109 } |
| 118 m_pList->SetFontSize(this->GetCreationParam().fFontSize); | 110 |
| 119 | 111 void CPWL_ListBox::OnDestroy() { |
| 120 m_bHoverSel = HasFlag(PLBS_HOVERSEL); | 112 if (m_pListNotify) { |
| 121 } | 113 delete m_pListNotify; |
| 122 } | 114 m_pListNotify = NULL; |
| 123 | 115 } |
| 124 void CPWL_ListBox::OnDestroy() | 116 } |
| 125 { | 117 |
| 126 if (m_pListNotify) | 118 void CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { |
| 127 { | 119 CPWL_Wnd::GetThisAppearanceStream(sAppStream); |
| 128 delete m_pListNotify; | 120 |
| 129 m_pListNotify = NULL; | 121 CFX_ByteTextBuf sListItems; |
| 130 } | 122 |
| 131 } | 123 if (m_pList) { |
| 132 | 124 CPDF_Rect rcPlate = m_pList->GetPlateRect(); |
| 133 void CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) | 125 for (FX_INT32 i = 0, sz = m_pList->GetCount(); i < sz; i++) { |
| 134 { | 126 CPDF_Rect rcItem = m_pList->GetItemRect(i); |
| 135 CPWL_Wnd::GetThisAppearanceStream(sAppStream); | 127 |
| 136 | 128 if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) |
| 137 CFX_ByteTextBuf sListItems; | 129 continue; |
| 138 | 130 |
| 139 if (m_pList) | 131 CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); |
| 140 { | 132 if (m_pList->IsItemSelected(i)) { |
| 141 CPDF_Rect rcPlate = m_pList->GetPlateRect(); | 133 sListItems << CPWL_Utils::GetRectFillAppStream( |
| 142 for (FX_INT32 i=0,sz=m_pList->GetCount(); i<sz; i++) | 134 rcItem, PWL_DEFAULT_SELBACKCOLOR); |
| 143 { | 135 CFX_ByteString sItem = |
| 144 CPDF_Rect rcItem = m_pList->GetItemRect(i); | 136 CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); |
| 145 | 137 if (sItem.GetLength() > 0) { |
| 146 if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.
bottom) continue; | 138 sListItems << "BT\n" |
| 147 | 139 << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELTEXTCOLOR) |
| 148 CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bo
ttom) * 0.5f); | 140 << sItem << "ET\n"; |
| 149 if (m_pList->IsItemSelected(i)) | 141 } |
| 150 { | 142 } else { |
| 151 sListItems << CPWL_Utils::GetRectFillAppStream(r
cItem,PWL_DEFAULT_SELBACKCOLOR); | 143 CFX_ByteString sItem = |
| 152 CFX_ByteString sItem = CPWL_Utils::GetEditAppStr
eam(m_pList->GetItemEdit(i), ptOffset); | 144 CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); |
| 153 if (sItem.GetLength() > 0) | 145 if (sItem.GetLength() > 0) { |
| 154 { | 146 sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) |
| 155 sListItems << "BT\n" << CPWL_Utils::GetC
olorAppStream(PWL_DEFAULT_SELTEXTCOLOR) << sItem << "ET\n"; | 147 << sItem << "ET\n"; |
| 156 } | 148 } |
| 157 } | 149 } |
| 158 else | 150 } |
| 159 { | 151 } |
| 160 CFX_ByteString sItem = CPWL_Utils::GetEditAppStr
eam(m_pList->GetItemEdit(i), ptOffset); | 152 |
| 161 if (sItem.GetLength() > 0) | 153 if (sListItems.GetLength() > 0) { |
| 162 { | 154 CFX_ByteTextBuf sClip; |
| 163 sListItems << "BT\n" << CPWL_Utils::GetC
olorAppStream(GetTextColor()) << sItem << "ET\n"; | 155 CPDF_Rect rcClient = this->GetClientRect(); |
| 164 } | 156 |
| 165 } | 157 sClip << "q\n"; |
| 166 } | 158 sClip << rcClient.left << " " << rcClient.bottom << " " |
| 167 } | 159 << rcClient.right - rcClient.left << " " |
| 168 | 160 << rcClient.top - rcClient.bottom << " re W n\n"; |
| 169 if (sListItems.GetLength() > 0) | 161 |
| 170 { | 162 sClip << sListItems << "Q\n"; |
| 171 CFX_ByteTextBuf sClip; | 163 |
| 172 CPDF_Rect rcClient = this->GetClientRect(); | 164 sAppStream << "/Tx BMC\n" << sClip << "EMC\n"; |
| 173 | 165 } |
| 174 sClip << "q\n"; | 166 } |
| 175 sClip << rcClient.left << " " << rcClient.bottom << " " | 167 |
| 176 << rcClient.right - rcClient.left << " " << rcClient
.top - rcClient.bottom << " re W n\n"; | 168 void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice, |
| 177 | 169 CPDF_Matrix* pUser2Device) { |
| 178 sClip << sListItems << "Q\n"; | 170 CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); |
| 179 | 171 |
| 180 sAppStream << "/Tx BMC\n" << sClip << "EMC\n"; | 172 if (m_pList) { |
| 181 } | 173 CPDF_Rect rcPlate = m_pList->GetPlateRect(); |
| 182 } | 174 CPDF_Rect rcList = GetListRect(); |
| 183 | 175 CPDF_Rect rcClient = GetClientRect(); |
| 184 void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pU
ser2Device) | 176 |
| 185 { | 177 for (FX_INT32 i = 0, sz = m_pList->GetCount(); i < sz; i++) { |
| 186 CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); | 178 CPDF_Rect rcItem = m_pList->GetItemRect(i); |
| 187 | 179 if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) |
| 188 if (m_pList) | 180 continue; |
| 189 { | 181 |
| 190 CPDF_Rect rcPlate = m_pList->GetPlateRect(); | 182 CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); |
| 191 CPDF_Rect rcList = GetListRect(); | 183 if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) { |
| 192 CPDF_Rect rcClient = GetClientRect(); | 184 CPDF_Rect rcContent = pEdit->GetContentRect(); |
| 193 | 185 if (rcContent.Width() > rcClient.Width()) |
| 194 for (FX_INT32 i=0,sz=m_pList->GetCount(); i<sz; i++) | 186 rcItem.Intersect(rcList); |
| 195 { | 187 else |
| 196 CPDF_Rect rcItem = m_pList->GetItemRect(i); | 188 rcItem.Intersect(rcClient); |
| 197 if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.
bottom) continue; | 189 } |
| 198 | 190 |
| 199 CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bo
ttom) * 0.5f); | 191 if (m_pList->IsItemSelected(i)) { |
| 200 if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) | 192 // CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, |
| 201 { | 193 //ArgbEncode(255,0,51,113)); |
| 202 CPDF_Rect rcContent = pEdit->GetContentRect(); | 194 IFX_SystemHandler* pSysHandler = GetSystemHandler(); |
| 203 if (rcContent.Width() > rcClient.Width()) | 195 if (pSysHandler && pSysHandler->IsSelectionImplemented()) { |
| 204 rcItem.Intersect(rcList); | 196 IFX_Edit::DrawEdit( |
| 205 else | 197 pDevice, |
| 206 rcItem.Intersect(rcClient); | 198 pUser2Device, |
| 207 } | 199 m_pList->GetItemEdit(i), |
| 208 | 200 CPWL_Utils::PWLColorToFXColor(GetTextColor()), |
| 209 if (m_pList->IsItemSelected(i)) | 201 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), |
| 210 { | 202 rcList, |
| 211 // CPWL_Utils::DrawFillRect(pDevice, pUser2Device,
rcItem, ArgbEncode(255,0,51,113)); | 203 ptOffset, |
| 212 IFX_SystemHandler* pSysHandler = GetSystemHandle
r(); | 204 NULL, |
| 213 if(pSysHandler && pSysHandler->IsSelectionImplem
ented()) | 205 pSysHandler, |
| 214 { | 206 m_pFormFiller); |
| 215 IFX_Edit::DrawEdit(pDevice, pUser2Device
, m_pList->GetItemEdit(i), CPWL_Utils::PWLColorToFXColor(GetTextColor()), CPWL_U
tils::PWLColorToFXColor(GetTextStrokeColor()), | 207 pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem); |
| 216 rcList, ptOffset, NULL,pSysHandl
er, m_pFormFiller); | 208 } else { |
| 217 pSysHandler->OutputSelectedRect(m_pFormF
iller, rcItem); | 209 CPWL_Utils::DrawFillRect( |
| 218 } | 210 pDevice, pUser2Device, rcItem, ArgbEncode(255, 0, 51, 113)); |
| 219 else | 211 IFX_Edit::DrawEdit(pDevice, |
| 220 { | 212 pUser2Device, |
| 221 CPWL_Utils::DrawFillRect(pDevice, pUser2
Device, rcItem, ArgbEncode(255,0,51,113)); | 213 m_pList->GetItemEdit(i), |
| 222 IFX_Edit::DrawEdit(pDevice, pUser2Device
, m_pList->GetItemEdit(i), ArgbEncode(255,255,255,255), 0, | 214 ArgbEncode(255, 255, 255, 255), |
| 223 rcList, ptOffset, NULL, pSysHand
ler, m_pFormFiller); | 215 0, |
| 224 } | 216 rcList, |
| 225 } | 217 ptOffset, |
| 226 else | 218 NULL, |
| 227 { | 219 pSysHandler, |
| 228 IFX_SystemHandler* pSysHandler = GetSystemHandle
r(); | 220 m_pFormFiller); |
| 229 IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pLis
t->GetItemEdit(i), | 221 } |
| 230 CPWL_Utils::PWLColorToFXColor(Ge
tTextColor()), | 222 } else { |
| 231 CPWL_Utils::PWLColorToFXColor(Ge
tTextStrokeColor()), | 223 IFX_SystemHandler* pSysHandler = GetSystemHandler(); |
| 232 rcList, ptOffset, NULL,pSysHandl
er, NULL); | 224 IFX_Edit::DrawEdit(pDevice, |
| 233 | 225 pUser2Device, |
| 234 } | 226 m_pList->GetItemEdit(i), |
| 235 } | 227 CPWL_Utils::PWLColorToFXColor(GetTextColor()), |
| 236 } | 228 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), |
| 237 } | 229 rcList, |
| 238 | 230 ptOffset, |
| 239 FX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) | 231 NULL, |
| 240 { | 232 pSysHandler, |
| 241 CPWL_Wnd::OnKeyDown(nChar, nFlag); | 233 NULL); |
| 242 | 234 } |
| 243 if (!m_pList) return FALSE; | 235 } |
| 244 | 236 } |
| 245 switch (nChar) | 237 } |
| 246 { | 238 |
| 247 default: | 239 FX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) { |
| 248 return FALSE; | 240 CPWL_Wnd::OnKeyDown(nChar, nFlag); |
| 249 case FWL_VKEY_Up: | 241 |
| 250 case FWL_VKEY_Down: | 242 if (!m_pList) |
| 251 case FWL_VKEY_Home: | 243 return FALSE; |
| 252 case FWL_VKEY_Left: | 244 |
| 253 case FWL_VKEY_End: | 245 switch (nChar) { |
| 254 case FWL_VKEY_Right: | 246 default: |
| 255 break; | 247 return FALSE; |
| 256 } | 248 case FWL_VKEY_Up: |
| 257 | 249 case FWL_VKEY_Down: |
| 258 switch (nChar) | 250 case FWL_VKEY_Home: |
| 259 { | 251 case FWL_VKEY_Left: |
| 260 case FWL_VKEY_Up: | 252 case FWL_VKEY_End: |
| 261 m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | 253 case FWL_VKEY_Right: |
| 262 break; | 254 break; |
| 263 case FWL_VKEY_Down: | 255 } |
| 264 m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | 256 |
| 265 break; | 257 switch (nChar) { |
| 266 case FWL_VKEY_Home: | 258 case FWL_VKEY_Up: |
| 267 m_pList->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | 259 m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 268 break; | 260 break; |
| 269 case FWL_VKEY_Left: | 261 case FWL_VKEY_Down: |
| 270 m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | 262 m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 271 break; | 263 break; |
| 272 case FWL_VKEY_End: | 264 case FWL_VKEY_Home: |
| 273 m_pList->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | 265 m_pList->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 274 break; | 266 break; |
| 275 case FWL_VKEY_Right: | 267 case FWL_VKEY_Left: |
| 276 m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | 268 m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 277 break; | 269 break; |
| 278 case FWL_VKEY_Delete: | 270 case FWL_VKEY_End: |
| 279 break; | 271 m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 280 } | 272 break; |
| 281 | 273 case FWL_VKEY_Right: |
| 282 FX_BOOL bExit = FALSE; | 274 m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 283 OnNotifySelChanged(TRUE,bExit,nFlag); | 275 break; |
| 284 | 276 case FWL_VKEY_Delete: |
| 285 return TRUE; | 277 break; |
| 286 } | 278 } |
| 287 | 279 |
| 288 FX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) | 280 FX_BOOL bExit = FALSE; |
| 289 { | 281 OnNotifySelChanged(TRUE, bExit, nFlag); |
| 290 CPWL_Wnd::OnChar(nChar,nFlag); | 282 |
| 291 | 283 return TRUE; |
| 292 if (!m_pList) return FALSE; | 284 } |
| 293 | 285 |
| 294 if (!m_pList->OnChar(nChar,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)))
return FALSE; | 286 FX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) { |
| 295 | 287 CPWL_Wnd::OnChar(nChar, nFlag); |
| 296 FX_BOOL bExit = FALSE; | 288 |
| 297 OnNotifySelChanged(TRUE,bExit, nFlag); | 289 if (!m_pList) |
| 298 | 290 return FALSE; |
| 299 return TRUE; | 291 |
| 300 } | 292 if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag))) |
| 301 | 293 return FALSE; |
| 302 FX_BOOL CPWL_ListBox::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) | 294 |
| 303 { | 295 FX_BOOL bExit = FALSE; |
| 304 CPWL_Wnd::OnLButtonDown(point,nFlag); | 296 OnNotifySelChanged(TRUE, bExit, nFlag); |
| 305 | 297 |
| 306 if (ClientHitTest(point)) | 298 return TRUE; |
| 307 { | 299 } |
| 308 m_bMouseDown = TRUE; | 300 |
| 309 SetFocus(); | 301 FX_BOOL CPWL_ListBox::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { |
| 310 SetCapture(); | 302 CPWL_Wnd::OnLButtonDown(point, nFlag); |
| 311 | 303 |
| 312 if (m_pList) | 304 if (ClientHitTest(point)) { |
| 313 m_pList->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLp
ressed(nFlag)); | 305 m_bMouseDown = TRUE; |
| 314 } | 306 SetFocus(); |
| 315 | 307 SetCapture(); |
| 316 return TRUE; | 308 |
| 317 } | 309 if (m_pList) |
| 318 | 310 m_pList->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 319 FX_BOOL CPWL_ListBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) | 311 } |
| 320 { | 312 |
| 321 CPWL_Wnd::OnLButtonUp(point,nFlag); | 313 return TRUE; |
| 322 | 314 } |
| 323 if (m_bMouseDown) | 315 |
| 324 { | 316 FX_BOOL CPWL_ListBox::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { |
| 325 ReleaseCapture(); | 317 CPWL_Wnd::OnLButtonUp(point, nFlag); |
| 326 m_bMouseDown = FALSE; | 318 |
| 327 } | 319 if (m_bMouseDown) { |
| 328 | 320 ReleaseCapture(); |
| 329 FX_BOOL bExit = FALSE; | 321 m_bMouseDown = FALSE; |
| 330 OnNotifySelChanged(FALSE,bExit,nFlag); | 322 } |
| 331 | 323 |
| 332 return TRUE; | 324 FX_BOOL bExit = FALSE; |
| 333 } | 325 OnNotifySelChanged(FALSE, bExit, nFlag); |
| 334 | 326 |
| 335 void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) | 327 return TRUE; |
| 336 { | 328 } |
| 337 m_bHoverSel = bHoverSel; | 329 |
| 338 } | 330 void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) { |
| 339 | 331 m_bHoverSel = bHoverSel; |
| 340 FX_BOOL CPWL_ListBox::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) | 332 } |
| 341 { | 333 |
| 342 CPWL_Wnd::OnMouseMove(point, nFlag); | 334 FX_BOOL CPWL_ListBox::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) { |
| 343 | 335 CPWL_Wnd::OnMouseMove(point, nFlag); |
| 344 if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) | 336 |
| 345 { | 337 if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) { |
| 346 if (m_pList) | 338 if (m_pList) |
| 347 m_pList->Select(m_pList->GetItemIndex(point)); | 339 m_pList->Select(m_pList->GetItemIndex(point)); |
| 348 } | 340 } |
| 349 | 341 |
| 350 if (m_bMouseDown) | 342 if (m_bMouseDown) { |
| 351 { | 343 if (m_pList) |
| 352 if (m_pList) | 344 m_pList->OnMouseMove(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 353 m_pList->OnMouseMove(point,IsSHIFTpressed(nFlag),IsCTRLp
ressed(nFlag)); | 345 } |
| 354 } | 346 |
| 355 | 347 return TRUE; |
| 356 return TRUE; | 348 } |
| 357 } | 349 |
| 358 | 350 void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, |
| 359 void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam, FX_I
NTPTR lParam) | 351 FX_DWORD msg, |
| 360 { | 352 FX_INTPTR wParam, |
| 361 CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); | 353 FX_INTPTR lParam) { |
| 362 | 354 CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); |
| 363 FX_FLOAT fPos; | 355 |
| 364 | 356 FX_FLOAT fPos; |
| 365 switch (msg) | 357 |
| 366 { | 358 switch (msg) { |
| 367 case PNM_SETSCROLLINFO: | 359 case PNM_SETSCROLLINFO: |
| 368 switch (wParam) | 360 switch (wParam) { |
| 369 { | 361 case SBT_VSCROLL: |
| 370 case SBT_VSCROLL: | 362 if (CPWL_Wnd* pChild = GetVScrollBar()) { |
| 371 if (CPWL_Wnd * pChild = GetVScrollBar()) | 363 pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam); |
| 372 { | 364 } |
| 373 pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,l
Param); | 365 break; |
| 374 } | 366 } |
| 375 break; | 367 break; |
| 376 } | 368 case PNM_SETSCROLLPOS: |
| 377 break; | 369 switch (wParam) { |
| 378 case PNM_SETSCROLLPOS: | 370 case SBT_VSCROLL: |
| 379 switch (wParam) | 371 if (CPWL_Wnd* pChild = GetVScrollBar()) { |
| 380 { | 372 pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); |
| 381 case SBT_VSCROLL: | 373 } |
| 382 if (CPWL_Wnd * pChild = GetVScrollBar()) | 374 break; |
| 383 { | 375 } |
| 384 pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lP
aram); | 376 break; |
| 385 } | 377 case PNM_SCROLLWINDOW: |
| 386 break; | 378 fPos = *(FX_FLOAT*)lParam; |
| 387 } | 379 switch (wParam) { |
| 388 break; | 380 case SBT_VSCROLL: |
| 389 case PNM_SCROLLWINDOW: | 381 if (m_pList) |
| 390 fPos = *(FX_FLOAT*)lParam; | 382 m_pList->SetScrollPos(CPDF_Point(0, fPos)); |
| 391 switch (wParam) | 383 break; |
| 392 { | 384 } |
| 393 case SBT_VSCROLL: | 385 break; |
| 394 if (m_pList) | 386 } |
| 395 m_pList->SetScrollPos(CPDF_Point(0,fPos)); | 387 } |
| 396 break; | 388 |
| 397 } | 389 void CPWL_ListBox::KillFocus() { |
| 398 break; | 390 CPWL_Wnd::KillFocus(); |
| 399 } | 391 |
| 400 } | 392 /* |
| 401 | 393 if (this->IsMultipleSel()) |
| 402 void CPWL_ListBox::KillFocus() | 394 { |
| 403 { | 395 for(FX_INT32 i=0;i<this->GetCount();i++) |
| 404 CPWL_Wnd::KillFocus(); | 396 { |
| 405 | 397 if (this->IsListItemSelected(i)) |
| 406 /* | 398 { |
| 407 if (this->IsMultipleSel()) | 399 if (!IsListItemVisible(i)) |
| 408 { | 400 this->ScrollToListItem(i); |
| 409 for(FX_INT32 i=0;i<this->GetCount();i++) | 401 break; |
| 410 { | 402 } |
| 411 if (this->IsListItemSelected(i)) | 403 } |
| 412 { | 404 } |
| 413 if (!IsListItemVisible(i)) | 405 else |
| 414 this->ScrollToListItem(i); | 406 { |
| 415 break; | 407 if (!IsListItemVisible(this->GetCurSel())) |
| 416 } | 408 this->ScrollToListItem(this->GetCurSel()); |
| 417 } | 409 } |
| 418 } | 410 |
| 419 else | 411 SetListItemCaret(m_nCaretIndex,FALSE); |
| 420 { | 412 */ |
| 421 if (!IsListItemVisible(this->GetCurSel())) | 413 } |
| 422 this->ScrollToListItem(this->GetCurSel()); | 414 |
| 423 } | 415 void CPWL_ListBox::RePosChildWnd() { |
| 424 | 416 CPWL_Wnd::RePosChildWnd(); |
| 425 SetListItemCaret(m_nCaretIndex,FALSE); | 417 |
| 426 */ | 418 if (m_pList) |
| 427 } | 419 m_pList->SetPlateRect(GetListRect()); |
| 428 | 420 } |
| 429 void CPWL_ListBox::RePosChildWnd() | 421 |
| 430 { | 422 void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown, |
| 431 CPWL_Wnd::RePosChildWnd(); | 423 FX_BOOL& bExit, |
| 432 | 424 FX_DWORD nFlag) { |
| 433 if (m_pList) | 425 if (m_pFillerNotify) { |
| 434 m_pList->SetPlateRect(GetListRect()); | 426 FX_BOOL bRC = TRUE; |
| 435 } | 427 CFX_WideString swChange = GetText(); |
| 436 | 428 CFX_WideString strChangeEx; |
| 437 void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL & bExit, FX_DWO
RD nFlag) | 429 int nSelStart = 0; |
| 438 { | 430 int nSelEnd = swChange.GetLength(); |
| 439 if (m_pFillerNotify) | 431 m_pFillerNotify->OnBeforeKeyStroke(FALSE, |
| 440 { | 432 GetAttachedData(), |
| 441 FX_BOOL bRC = TRUE; | 433 0, |
| 442 CFX_WideString swChange = GetText(); | 434 swChange, |
| 443 CFX_WideString strChangeEx; | 435 strChangeEx, |
| 444 int nSelStart = 0; | 436 nSelStart, |
| 445 int nSelEnd = swChange.GetLength(); | 437 nSelEnd, |
| 446 m_pFillerNotify->OnBeforeKeyStroke(FALSE, GetAttachedData(), 0,
swChange, strChangeEx, nSelStart, nSelEnd, bKeyDown, bRC, bExit, nFlag); | 438 bKeyDown, |
| 447 if (bExit) return; | 439 bRC, |
| 448 | 440 bExit, |
| 449 m_pFillerNotify->OnAfterKeyStroke(FALSE, GetAttachedData(), bExi
t,nFlag); | 441 nFlag); |
| 450 } | 442 if (bExit) |
| 451 } | 443 return; |
| 452 | 444 |
| 453 CPDF_Rect CPWL_ListBox::GetFocusRect() const | 445 m_pFillerNotify->OnAfterKeyStroke(FALSE, GetAttachedData(), bExit, nFlag); |
| 454 { | 446 } |
| 455 if (m_pList && m_pList->IsMultipleSel()) | 447 } |
| 456 { | 448 |
| 457 CPDF_Rect rcCaret = m_pList->GetItemRect(m_pList->GetCaret()); | 449 CPDF_Rect CPWL_ListBox::GetFocusRect() const { |
| 458 rcCaret.Intersect(GetClientRect()); | 450 if (m_pList && m_pList->IsMultipleSel()) { |
| 459 return rcCaret; | 451 CPDF_Rect rcCaret = m_pList->GetItemRect(m_pList->GetCaret()); |
| 460 } | 452 rcCaret.Intersect(GetClientRect()); |
| 461 | 453 return rcCaret; |
| 462 return CPWL_Wnd::GetFocusRect(); | 454 } |
| 463 } | 455 |
| 464 | 456 return CPWL_Wnd::GetFocusRect(); |
| 465 void CPWL_ListBox::AddString(FX_LPCWSTR string) | 457 } |
| 466 { | 458 |
| 467 if (m_pList) | 459 void CPWL_ListBox::AddString(FX_LPCWSTR string) { |
| 468 { | 460 if (m_pList) { |
| 469 m_pList->AddString(string); | 461 m_pList->AddString(string); |
| 470 } | 462 } |
| 471 } | 463 } |
| 472 | 464 |
| 473 void CPWL_ListBox::SetText(FX_LPCWSTR csText,FX_BOOL bRefresh) | 465 void CPWL_ListBox::SetText(FX_LPCWSTR csText, FX_BOOL bRefresh) { |
| 474 { | 466 // return CPDF_List::SetText(csText,bRefresh); |
| 475 //return CPDF_List::SetText(csText,bRefresh); | 467 } |
| 476 } | 468 |
| 477 | 469 CFX_WideString CPWL_ListBox::GetText() const { |
| 478 CFX_WideString CPWL_ListBox::GetText() const | 470 if (m_pList) |
| 479 { | 471 return m_pList->GetText(); |
| 480 if (m_pList) | 472 |
| 481 return m_pList->GetText(); | 473 return L""; |
| 482 | 474 } |
| 483 return L""; | 475 |
| 484 } | 476 void CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize) { |
| 485 | 477 if (m_pList) |
| 486 void CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize) | 478 m_pList->SetFontSize(fFontSize); |
| 487 { | 479 } |
| 488 if (m_pList) | 480 |
| 489 m_pList->SetFontSize(fFontSize); | 481 FX_FLOAT CPWL_ListBox::GetFontSize() const { |
| 490 } | 482 if (m_pList) |
| 491 | 483 return m_pList->GetFontSize(); |
| 492 FX_FLOAT CPWL_ListBox::GetFontSize() const | 484 return 0.0f; |
| 493 { | 485 } |
| 494 if (m_pList) | 486 |
| 495 return m_pList->GetFontSize(); | 487 void CPWL_ListBox::Select(FX_INT32 nItemIndex) { |
| 496 return 0.0f; | 488 if (m_pList) |
| 497 } | 489 m_pList->Select(nItemIndex); |
| 498 | 490 } |
| 499 void CPWL_ListBox::Select(FX_INT32 nItemIndex) | 491 |
| 500 { | 492 void CPWL_ListBox::SetCaret(FX_INT32 nItemIndex) { |
| 501 if (m_pList) | 493 if (m_pList) |
| 502 m_pList->Select(nItemIndex); | 494 m_pList->SetCaret(nItemIndex); |
| 503 } | 495 } |
| 504 | 496 |
| 505 void CPWL_ListBox::SetCaret(FX_INT32 nItemIndex) | 497 void CPWL_ListBox::SetTopVisibleIndex(FX_INT32 nItemIndex) { |
| 506 { | 498 if (m_pList) |
| 507 if (m_pList) | 499 m_pList->SetTopItem(nItemIndex); |
| 508 m_pList->SetCaret(nItemIndex); | 500 } |
| 509 } | 501 |
| 510 | 502 void CPWL_ListBox::ScrollToListItem(FX_INT32 nItemIndex) { |
| 511 void CPWL_ListBox::SetTopVisibleIndex(FX_INT32 nItemIndex) | 503 if (m_pList) |
| 512 { | 504 m_pList->ScrollToListItem(nItemIndex); |
| 513 if (m_pList) | 505 } |
| 514 m_pList->SetTopItem(nItemIndex); | 506 |
| 515 } | 507 void CPWL_ListBox::ResetContent() { |
| 516 | 508 if (m_pList) |
| 517 void CPWL_ListBox::ScrollToListItem(FX_INT32 nItemIndex) | 509 m_pList->Empty(); |
| 518 { | 510 } |
| 519 if (m_pList) | 511 |
| 520 m_pList->ScrollToListItem(nItemIndex); | 512 void CPWL_ListBox::Reset() { |
| 521 } | 513 if (m_pList) |
| 522 | 514 m_pList->Cancel(); |
| 523 void CPWL_ListBox::ResetContent() | 515 } |
| 524 { | 516 |
| 525 if (m_pList) | 517 FX_BOOL CPWL_ListBox::IsMultipleSel() const { |
| 526 m_pList->Empty(); | 518 if (m_pList) |
| 527 } | 519 return m_pList->IsMultipleSel(); |
| 528 | 520 |
| 529 void CPWL_ListBox::Reset() | 521 return FALSE; |
| 530 { | 522 } |
| 531 if (m_pList) | 523 |
| 532 m_pList->Cancel(); | 524 FX_INT32 CPWL_ListBox::GetCaretIndex() const { |
| 533 } | 525 if (m_pList) |
| 534 | 526 return m_pList->GetCaret(); |
| 535 FX_BOOL CPWL_ListBox::IsMultipleSel() const | 527 |
| 536 { | 528 return -1; |
| 537 if (m_pList) | 529 } |
| 538 return m_pList->IsMultipleSel(); | 530 |
| 539 | 531 FX_INT32 CPWL_ListBox::GetCurSel() const { |
| 540 return FALSE; | 532 if (m_pList) |
| 541 } | 533 return m_pList->GetSelect(); |
| 542 | 534 |
| 543 FX_INT32 CPWL_ListBox::GetCaretIndex() const | 535 return -1; |
| 544 { | 536 } |
| 545 if (m_pList) | 537 |
| 546 return m_pList->GetCaret(); | 538 FX_BOOL CPWL_ListBox::IsItemSelected(FX_INT32 nItemIndex) const { |
| 547 | 539 if (m_pList) |
| 548 return -1; | 540 return m_pList->IsItemSelected(nItemIndex); |
| 549 } | 541 |
| 550 | 542 return FALSE; |
| 551 FX_INT32 CPWL_ListBox::GetCurSel() const | 543 } |
| 552 { | 544 |
| 553 if (m_pList) | 545 FX_INT32 CPWL_ListBox::GetTopVisibleIndex() const { |
| 554 return m_pList->GetSelect(); | 546 if (m_pList) { |
| 555 | 547 m_pList->ScrollToListItem(m_pList->GetFirstSelected()); |
| 556 return -1; | 548 return m_pList->GetTopItem(); |
| 557 } | 549 } |
| 558 | 550 |
| 559 FX_BOOL CPWL_ListBox::IsItemSelected(FX_INT32 nItemIndex) const | 551 return -1; |
| 560 { | 552 } |
| 561 if (m_pList) | 553 |
| 562 return m_pList->IsItemSelected(nItemIndex); | 554 FX_INT32 CPWL_ListBox::GetCount() const { |
| 563 | 555 if (m_pList) |
| 564 return FALSE; | 556 return m_pList->GetCount(); |
| 565 } | 557 |
| 566 | 558 return 0; |
| 567 FX_INT32 CPWL_ListBox::GetTopVisibleIndex() const | 559 } |
| 568 { | 560 |
| 569 if (m_pList) | 561 FX_INT32 CPWL_ListBox::FindNext(FX_INT32 nIndex, FX_WCHAR nChar) const { |
| 570 { | 562 if (m_pList) |
| 571 m_pList->ScrollToListItem(m_pList->GetFirstSelected()); | 563 return m_pList->FindNext(nIndex, nChar); |
| 572 return m_pList->GetTopItem(); | 564 |
| 573 } | 565 return nIndex; |
| 574 | 566 } |
| 575 return -1; | 567 |
| 576 } | 568 CPDF_Rect CPWL_ListBox::GetContentRect() const { |
| 577 | 569 if (m_pList) |
| 578 FX_INT32 CPWL_ListBox::GetCount() const | 570 return m_pList->GetContentRect(); |
| 579 { | 571 |
| 580 if (m_pList) | 572 return CPDF_Rect(); |
| 581 return m_pList->GetCount(); | 573 } |
| 582 | 574 |
| 583 return 0; | 575 FX_FLOAT CPWL_ListBox::GetFirstHeight() const { |
| 584 } | 576 if (m_pList) |
| 585 | 577 return m_pList->GetFirstHeight(); |
| 586 FX_INT32 CPWL_ListBox::FindNext(FX_INT32 nIndex,FX_WCHAR nChar) const | 578 |
| 587 { | 579 return 0.0f; |
| 588 if (m_pList) | 580 } |
| 589 return m_pList->FindNext(nIndex,nChar); | 581 |
| 590 | 582 CPDF_Rect CPWL_ListBox::GetListRect() const { |
| 591 return nIndex; | 583 return CPWL_Utils::DeflateRect( |
| 592 } | 584 GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); |
| 593 | 585 } |
| 594 CPDF_Rect CPWL_ListBox::GetContentRect() const | 586 |
| 595 { | 587 FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta, |
| 596 if (m_pList) | 588 const CPDF_Point& point, |
| 597 return m_pList->GetContentRect(); | 589 FX_DWORD nFlag) { |
| 598 | 590 if (!m_pList) |
| 599 return CPDF_Rect(); | 591 return FALSE; |
| 600 } | 592 |
| 601 | 593 if (zDelta < 0) { |
| 602 FX_FLOAT CPWL_ListBox::GetFirstHeight() const | 594 m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 603 { | 595 } else { |
| 604 if (m_pList) | 596 m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 605 return m_pList->GetFirstHeight(); | 597 } |
| 606 | 598 |
| 607 return 0.0f; | 599 FX_BOOL bExit = FALSE; |
| 608 } | 600 OnNotifySelChanged(FALSE, bExit, nFlag); |
| 609 | 601 return TRUE; |
| 610 CPDF_Rect CPWL_ListBox::GetListRect() const | 602 } |
| 611 { | |
| 612 return CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth
()+GetInnerBorderWidth())); | |
| 613 } | |
| 614 | |
| 615 FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DW
ORD nFlag) | |
| 616 { | |
| 617 if (!m_pList) return FALSE; | |
| 618 | |
| 619 if (zDelta < 0) | |
| 620 { | |
| 621 m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | |
| 622 } | |
| 623 else | |
| 624 { | |
| 625 m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); | |
| 626 } | |
| 627 | |
| 628 FX_BOOL bExit = FALSE; | |
| 629 OnNotifySelChanged(FALSE,bExit, nFlag); | |
| 630 return TRUE; | |
| 631 } | |
| 632 | |
| OLD | NEW |