Re: How to, correctly open a file, on a specific column.?
Posted: Thu Dec 20, 2018 4:04 am
The solutions being offered here are mainly based on guesswork, as you've not outlined your requirements clearly. Nevertheless, here's a modification of my earlier example, with added functionalities.dcr3 wrote:Code: Select all
;Therefore TI-994A, you haven't granted me anything. :cry:
You'd be able to populate & clear the columns of a list gadget independently, and even clear or replace any single cell by clicking on it and specifying the column and new value, while maintaining the individual column count.
Code: Select all
#listCount = 30
Global Dim listColumnData.s(#listCount, 1)
#listIconGadgetColumn1 = 0
#listIconGadgetColumn2 = 1
#listIconGadget = 8
#column1Count = 6
#column2Count = 7
Procedure countColumnItems(column)
columnCount = 0
For item = 0 To ArraySize(listColumnData())
If Trim(listColumnData(item, column)) <> ""
columnCount + 1
EndIf
Next item
ProcedureReturn columnCount
EndProcedure
Procedure updateColumnCount()
column = #listIconGadgetColumn1
For gadget = #column1Count To #column2Count
SetGadgetText(gadget,
"RemainingItems: " +
Str(CountColumnItems(column)))
column + 1
Next gadget
EndProcedure
Procedure updateListGadget(stage = 1)
ClearGadgetItems(#listIconGadget)
Select stage
Case 1
For i = 0 To ArraySize(listColumnData())
AddGadgetItem(#listIconGadget, -1,
listColumnData(i, #listIconGadgetColumn1) +
#LF$ + listColumnData(i, #listIconGadgetColumn2))
Next i
Case 2
FreeArray(listColumnData())
Global Dim listColumnData.s(#listCount, 1)
EndSelect
updateColumnCount()
EndProcedure
Procedure removeListColumn(column)
For i = 0 To #listCount - 1
listColumnData(i, column) = ""
Next i
updateListGadget(1)
EndProcedure
Procedure removeListItem(row, column)
listColumnData(row, column - 1) = ""
updateListGadget()
EndProcedure
Procedure replaceListItem(row, column, newColumnValue.s)
listColumnData(row, column - 1) = newColumnValue
updateListGadget()
EndProcedure
Procedure populateList(forColumn)
For item = 0 To #listCount - 1
listColumnData(item, forColumn) = "Column " + Str(forColumn + 1) + ": " + Str(item + 1)
Next item
updateListGadget()
MessageRequester("Click To Modify", "Left Click on the list item to remove, or" + #CRLF$ +
"Right Click on the list item to replace.")
EndProcedure
OpenWindow(0, 0, 0, 340, 700, "Multi-Column Handler",
#PB_Window_SystemMenu |
#PB_Window_MinimizeGadget |
#PB_Window_ScreenCentered)
ButtonGadget(1, 30, 10, 135, 20, "Fill Column 1")
ButtonGadget(2, 175, 10, 135, 20, "Fill Column 2")
ButtonGadget(3, 30, 70, 280, 20, "Clear List")
ButtonGadget(4, 30, 40, 135, 20, "Clear Column 1")
ButtonGadget(5, 175, 40, 135, 20, "Clear Column 2")
TextGadget(#column1Count, 30, 660, 135, 25, "", #PB_Text_Border)
TextGadget(#column2Count, 175, 660, 135, 25, "", #PB_Text_Border)
ListIconGadget(#listIconGadget, 30, 100, 280, 550, "Column 1", 140,
#PB_ListIcon_GridLines |
#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#listIconGadget, 1, "Column 2", 140)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
appQuit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
populateList(#listIconGadgetColumn1)
Case 2
populateList(#listIconGadgetColumn2)
Case 3
updateListGadget(2)
Case 4, 5
column = EventGadget() - 4
removeListColumn(column)
Case #listIconGadget
If EventType() = #PB_EventType_LeftClick
row = GetGadgetState(#listIconGadget)
column = Val(InputRequester("Remove List Item:",
"Remove Row " + Str(row + 1) +
", Column 1 or 2?", ""))
If column => 1 And column <= 2 And
row >= 0 And row <= ArraySize(listColumnData())
removeListItem(row, column)
EndIf
ElseIf EventType() = #PB_EventType_RightClick
row = GetGadgetState(#listIconGadget)
column = Val(InputRequester("Replace List Item:",
"Replace Row " + Str(row + 1) +
", Column 1 or 2?", ""))
If column => 1 And column <= 2 And
row >= 0 And row <= ArraySize(listColumnData())
newColumnValue.s = InputRequester("Replace List Item:",
"New cell value:", "")
replaceListItem(row, column, newColumnValue)
EndIf
EndIf
EndSelect
EndSelect
Until appQuit
