Re: [Modules] Editable and sortable ListGadget (all OS)
Posted: Thu Mar 07, 2019 2:46 pm
- Bugfixes
- DPI compatible (hopefully)
http://www.purebasic.com
https://www.purebasic.fr/english/
What exactly does it take? I haven't used dialogs in my programs yet.Andre wrote:Do you plan to make it working in Dialogs (with automatic resizing) too?
Actually, this should work:Cyllceaux wrote:If I have a canvas (#PB_Canvas_Container)
A method to use this existing Canvas would be great!
Code: Select all
If CanvasGadget(#Gadget, X, Y, Width, Height, #PB_Canvas_Keyboard|#PB_Canvas_Container)
ListEx::Gadget(#List, 10, 10, 400, 230, "", 25, "", ListEx::#GridLine)
CloseGadgetList()
EndIf
Code: Select all
Next ;}
rowY + ListEx()\Row\Height
If rowY>ListEx()\Size\Height:Break:EndIf ; Don't redraw all rows
Next ;}
Code: Select all
If ListEx()\ReDraw
UpdateRowY_() ; Cost to much and isn't needed without redraw
AdjustScrollBars_() ; Cost to much and isn't needed without redraw
Draw_()
EndIf
Thorsten1867 wrote:Actually, this should work:Cyllceaux wrote:If I have a canvas (#PB_Canvas_Container)
A method to use this existing Canvas would be great!Code: Select all
If CanvasGadget(#Gadget, X, Y, Width, Height, #PB_Canvas_Keyboard|#PB_Canvas_Container) ListEx::Gadget(#List, 10, 10, 400, 230, "", 25, "", ListEx::#GridLine) CloseGadgetList() EndIf
Code: Select all
Procedure.i UseGadget(GID.i, ColTitle.s, ColWidth.f, ColLabel.s="", Flags.i=#False)
Define.i Result
DesktopDPI = dpiY(100)
OpenGadgetList(GID)
Result = GID
If Result
Protected X = dpiX(GadgetX(GID))
Protected Y = dpiY(GadgetY(GID))
Protected Width = dpiX(GadgetWidth(GID))
Protected Height = dpiY(GadgetHeight(GID))
ColWidth = dpiX(ColWidth)
If GID = #PB_Any : GID = Result : EndIf
If ColLabel = "" : ColLabel = "0" : EndIf
If AddMapElement(ListEx(), Str(GID))
ListEx()\WindID = GetActiveWindow()
ListEx()\CanvasID = GID
ListEx()\Flags = Flags
ListEx()\ReDraw = #True
ListEx()\Row\Height = dpiX(20) ; Default row height
ListEx()\Col\Width = dpiY(50) ; Default column width
If Flags & #NumberedColumn : ListEx()\Col\CheckBoxes = 1 : EndIf
ListEx()\Cursor = #Cursor_Default
ListEx()\Editable = #True
ListEx()\Currency = #DefaultCurrency
ListEx()\TimeMask = #DefaultTimeMask
;{ Event Data
ListEx()\Event\Type = #NotValid
ListEx()\Event\Row = #NotValid
ListEx()\Event\Column = #NotValid
ListEx()\Event\State = #NotValid
;}
;{ Size
ListEx()\Size\X = 0
ListEx()\Size\Y = 0
ListEx()\Size\Width = Width
ListEx()\Size\Height = Height
ListEx()\Size\winWidth = WindowWidth(ListEx()\WindID)
ListEx()\Size\winHeight = WindowHeight(ListEx()\WindID)
;}
;{ Gadgets
ListEx()\StringID = StringGadget(#PB_Any, 0, 0, 0, 0, "")
If IsGadget(ListEx()\StringID)
SetGadgetData(ListEx()\StringID, ListEx()\CanvasID)
HideGadget(ListEx()\StringID, #True)
EndIf
ListEx()\ComboID = ComboBoxGadget(#PB_Any, 0, 0, 0, 0, #PB_ComboBox_Editable)
If IsGadget(ListEx()\ComboID)
SetGadgetData(ListEx()\ComboID, ListEx()\CanvasID)
HideGadget(ListEx()\ComboID, #True)
EndIf
ListEx()\DateID = DateGadget(#PB_Any, 0, 0, 0, 0, #DefaultDateMask)
If IsGadget(ListEx()\DateID)
SetGadgetData(ListEx()\DateID, ListEx()\CanvasID)
HideGadget(ListEx()\DateID, #True)
EndIf
ListEx()\Date\Mask = #DefaultDateMask
ListEx()\HScrollID = ScrollBarGadget(#PB_Any, 0, 0, 0, 0, 0, 0, 0)
If IsGadget(ListEx()\HScrollID)
SetGadgetData(ListEx()\HScrollID, ListEx()\CanvasID)
ListEx()\HScroll\Hide = #True
HideGadget(ListEx()\HScrollID, #True)
EndIf
ListEx()\VScrollID = ScrollBarGadget(#PB_Any, 0, 0, 0, 0, 0, 0, 0, #PB_ScrollBar_Vertical)
If IsGadget(ListEx()\VScrollID)
SetGadgetData(ListEx()\VScrollID, ListEx()\CanvasID)
ListEx()\VScroll\Hide = #True
HideGadget(ListEx()\VScrollID, #True)
EndIf ;}
;{ Shortcuts
If IsWindow(ListEx()\WindID)
ListEx()\ShortCutID = CreateMenu(#PB_Any, WindowID(ListEx()\WindID))
AddKeyboardShortcut(ListEx()\WindID, #PB_Shortcut_Return, #Key_Return)
AddKeyboardShortcut(ListEx()\WindID, #PB_Shortcut_Escape, #Key_Escape)
AddKeyboardShortcut(ListEx()\WindID, #PB_Shortcut_Tab, #Key_Tab)
AddKeyboardShortcut(ListEx()\WindID, #PB_Shortcut_Tab|#PB_Shortcut_Shift, #Key_ShiftTab)
EndIf ;}
;{ Header
If Flags & #NoRowHeader
ListEx()\Header\Height = 0
Else
ListEx()\Header\Height = dpiY(20)
EndIf
ListEx()\Header\FontID = FontID(LoadFont(#PB_Any, "Arial", 9))
ListEx()\Header\Align = #False
;}
;{ Rows
ListEx()\Row\Current = #NoFocus
ListEx()\Row\FontID = ListEx()\Header\FontID
ListEx()\Size\Rows = ListEx()\Row\Height ; Height of all rows
;}
;{ Column
If AddElement(ListEx()\Cols())
ListEx()\Cols()\Header\Titel = ColTitle
ListEx()\Cols()\Width = dpiX(ColWidth)
ListEx()\Cols()\Key = ColLabel
ListEx()\Col\Number = 1 ; Number of columns
EndIf
ListEx()\Size\Cols = ListEx()\Cols()\Width ; Width of all columns
ListEx()\Sort\Column = #NotValid
ListEx()\AutoResize\MinWidth = ListEx()\Col\Width
ListEx()\AutoResize\Column = #PB_Ignore
;}
;{ Default Colors
ListEx()\Color\HeaderFront = $412B1B
ListEx()\Color\HeaderBack = $DEC4B0
ListEx()\Color\HeaderGrid = $858585
ListEx()\Color\Front = $000000
ListEx()\Color\Back = $FDFBFA
ListEx()\Color\Grid = $C7C7C7
ListEx()\Color\Focus = $F4EAE6
ListEx()\Color\Edit = $BE7D61
ListEx()\Color\Button = $CCCCCC
ListEx()\Color\ActiveButton = $E0E0E0
ListEx()\Color\Link = $8B0000
ListEx()\Color\ActiveLink = $FF0000
ListEx()\Color\ScrollBar = #Scrollbar_Color
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
If #UseSystemColors
ListEx()\Color\Front = GetSysColor_(#COLOR_WINDOWTEXT)
ListEx()\Color\ScrollBar = GetSysColor_(#COLOR_MENU)
EndIf
CompilerEndIf
;}
If IsGadget(ListEx()\StringID) : SetGadgetFont(ListEx()\StringID, ListEx()\Row\FontID) : EndIf
BindGadgetEvent(ListEx()\CanvasID, @_RightClickHandler(), #PB_EventType_RightClick)
BindGadgetEvent(ListEx()\CanvasID, @_LeftButtonDownHandler(), #PB_EventType_LeftButtonDown)
BindGadgetEvent(ListEx()\CanvasID, @_LeftButtonUpHandler(), #PB_EventType_LeftButtonUp)
BindGadgetEvent(ListEx()\CanvasID, @_LeftDoubleClickHandler(), #PB_EventType_LeftDoubleClick)
BindGadgetEvent(ListEx()\CanvasID, @_MouseMoveHandler(), #PB_EventType_MouseMove)
BindGadgetEvent(ListEx()\CanvasID, @_MouseWheelHandler(), #PB_EventType_MouseWheel)
BindGadgetEvent(ListEx()\CanvasID, @_ResizeHandler(), #PB_EventType_Resize)
BindGadgetEvent(ListEx()\HScrollID, @_SynchronizeScrollCols(), #PB_All)
BindGadgetEvent(ListEx()\VScrollID, @_SynchronizeScrollRows(), #PB_All)
BindEvent(#PB_Event_SizeWindow, @_ResizeWindowHandler(), ListEx()\WindID)
Draw_()
EndIf
CloseGadgetList()
EndIf
EndProcedure
Thorsten1867 wrote:@Cyllceaux
Changed: DisableReDraw() matched
Code: Select all
Define ix
For ix=1 To 10000
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Image" + #LF$ + "no Image" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Thorsten" + #LF$ + "Hoeppner" + #LF$ + "male" + #LF$ + "18.07.1967" + #LF$ + "", "PureBasic")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Amelia" + #LF$ + "Smith" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Jack" + #LF$ + "Jones" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Isla" + #LF$ + "Williams" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Harry" + #LF$ + "Brown" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Emily" + #LF$ + "Taylor" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Jacob" + #LF$ + "Wilson" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Ava" + #LF$ + "Evans" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Thomas" + #LF$ + "Roberts" + #LF$ + #LF$ + #LF$ + "Push")
ListEx::AddItem(#List, ListEx::#LastItem, #LF$ + "Harriet" + #LF$ + "Smith" + #LF$ + #LF$ + #LF$ + "Push")
Next
Thorsten1867 wrote:@Cyllceaux
Added: #UseExistingCanvas
Code: Select all
GetCashFloat_
Code: Select all
Debug FormatNumber(1000.42) ; 1,000.42
Debug FormatNumber(1000.42,2,",",".") ; 1.000,42 (german)
Debug StrD(1000.42) ; 1000.42
Code: Select all
Procedure.s makeFloat(wert.s)
Define result.s=ReplaceString(wert,"-,","-")
result=ReplaceString(result,"-.","-")
Define idk=FindString(result,",")
Define idp=FindString(result,".")
If idk>0 And idk<idp
result=ReplaceString(result,",","")
ElseIf idk>0 And idk<idp
result=ReplaceString(result,".","")
result=ReplaceString(result,",",".")
EndIf
ProcedureReturn result
EndProcedure
As far as I can tell (without writing/testing a specific example) you need to do the following:Thorsten1867 wrote:What exactly does it take? I haven't used dialogs in my programs yet.Andre wrote:Do you plan to make it working in Dialogs (with automatic resizing) too?