Skip to content

Commit 6a3c55d

Browse files
Matthias Kastnert-b
authored andcommitted
save panel state
CodeBrowser Panel: selected item from listbox and dropdown menu are saved in preferences and are restored if panel is rebuild
1 parent d92f2ae commit 6a3c55d

File tree

2 files changed

+60
-5
lines changed

2 files changed

+60
-5
lines changed

procedures/CodeBrowser_gui.ipf

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Function createPanel()
5151
PopupMenu $moduleCtrl, win=$panel,pos={0,moduleCtrlTop}, size={panelWidth-2*panelBorder,20}, bodywidth=200
5252
PopupMenu $moduleCtrl, win=$panel,title="Namespace"
5353
PopupMenu $moduleCtrl, win=$panel,proc=$(module + "#popupModules"),value=#module + "#generateModuleList()"
54+
PopupMenu $moduleCtrl, win=$panel, mode=prefs.panelNameSpace
5455

5556
PopupMenu $moduleCtrl, userdata(ResizeControlsInfo)= A"!!,Cd!!#;-!!#B>J,hm&z!!#`-A7TLfzzzzzzzzzzzzzz!!#`-A7TLfzz"
5657
PopupMenu $moduleCtrl, userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k<zzzzzzzzzzz"
@@ -59,6 +60,7 @@ Function createPanel()
5960
PopupMenu $procCtrl, win=$panel,pos={0,procCtrlTop}, size={panelWidth-2*panelBorder,20}, bodywidth=200
6061
PopupMenu $procCtrl, win=$panel,title="Procedure"
6162
PopupMenu $procCtrl, win=$panel,proc=$(module + "#popupProcedures"),value=#module + "#generateProcedureList()"
63+
PopupMenu $procCtrl, win=$panel, mode=prefs.panelProcedure
6264

6365
PopupMenu $procCtrl, userdata(ResizeControlsInfo)= A"!!,D/!!#>.!!#B:J,hm&z!!#`-A7TLfzzzzzzzzzzzzzz!!#`-A7TLfzz"
6466
PopupMenu $procCtrl, userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k<zzzzzzzzzzz"
@@ -73,12 +75,13 @@ Function createPanel()
7375
ListBox $listCtrl, win=$panel,proc=$(module + "#ListBoxProc")
7476
ListBox $listCtrl, win=$panel,mode=5,selCol=1, widths={4,40}, keySelectCol=1
7577
ListBox $listCtrl, win=$panel,listWave=getDeclWave()
78+
ListBox $listCtrl, win=$panel, selRow=prefs.panelElement, row=prefs.panelElement
7679

7780
ListBox $listCtrl, userdata(ResizeControlsInfo)= A"!!,?X!!#@\"!!#BNJ,hopz!!#](Aon\"Qzzzzzzzzzzzzzz!!#o2B4uAezz"
7881
ListBox $listCtrl, userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#N3Bk1ct<C]S6zzzzzzzzzz"
7982
ListBox $listCtrl, userdata(ResizeControlsInfo) += A"zzz!!#N3Bk1ct<C]S7zzzzzzzzzzzzz!!!"
8083

81-
CheckBox $sortCtrl, win=$panel, pos={panelBorder+70,SortCtrlTop},size={40,20},value=prefs.panelCheckboxSort
84+
CheckBox $sortCtrl, win=$panel, pos={panelBorder+70,SortCtrlTop},size={40,20},value=(prefs.panelCheckboxSort)
8285
CheckBox $sortCtrl, win=$panel, title="sort"
8386
CheckBox $sortCtrl, win=$panel, proc=$(module + "#checkboxSort")
8487

@@ -260,6 +263,42 @@ Function/S getCurrentItem([module, procedure,procedureWithoutModule, index])
260263
return "_error_"
261264
End
262265

266+
// Returns the currently selected item from the panel defined by the optional arguments.
267+
// Argument is returned as number in current list
268+
// Exactly one optional argument must be given.
269+
//
270+
// module: return selected NameSpace
271+
// procedure: return selected procedure
272+
// index: return selected index in listbox
273+
Function getCurrentItemAsNumeric([module, procedure, index])
274+
variable module, procedure, index
275+
276+
string procName
277+
278+
module = ParamIsDefault(module) ? 0 : 1
279+
procedure = ParamIsDefault(procedure) ? 0 : 1
280+
index = ParamIsDefault(index) ? 0 : 1
281+
282+
// only one optional argument allowed
283+
if(module + procedure + index != 1)
284+
return -1 // error
285+
endif
286+
287+
if(module)
288+
ControlInfo/W=$panel $moduleCtrl
289+
elseif(procedure)
290+
ControlInfo/W=$panel $procCtrl
291+
elseif(index)
292+
ControlInfo/W=$panel $listCtrl
293+
endif
294+
295+
if(V_Value >= 0)
296+
return V_Value
297+
endif
298+
299+
return -1 // error
300+
End
301+
263302
// Updates the the given popup menu
264303
// Tries to preserve the currently selected item
265304
Function updatePopup(ctrlName)

procedures/CodeBrowser_preferences.ipf

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// This file was created by () byte physics Thomas Braun, [email protected]
77
// (c) 2013
88

9-
static Constant kPrefsVersion = 103
9+
static Constant kPrefsVersion = 104
1010
static StrConstant kPackageName = "CodeBrowser"
1111
static StrConstant kPrefsFileName = "CodeBrowser.bin"
1212
static Constant kPrefsRecordID = 0
@@ -15,7 +15,10 @@ Structure CodeBrowserPrefs
1515
uint32 version // Preferences structure version number. 100 means 1.00.
1616
double panelCoords[4] // left, top, right, bottom
1717
uint32 panelCheckboxSort // status of checkbox in createPanel()
18-
uint32 reserved[99] // Reserved for future use
18+
uint32 panelNameSpace // last marked namespace in panel
19+
uint32 panelProcedure // last marked procedure in panel
20+
uint32 panelElement // last marked element in panel
21+
uint32 reserved[96] // Reserved for future use
1922
EndStructure
2023

2124
// DefaultPackagePrefsStruct(prefs)
@@ -38,16 +41,20 @@ static Function DefaultPackagePrefsStruct(prefs)
3841

3942
prefs.panelCheckboxSort = 1
4043

44+
prefs.panelNameSpace = 1
45+
prefs.panelProcedure = 1
46+
prefs.panelElement = 0
47+
4148
Variable i
42-
for(i=0; i<99; i+=1)
49+
for(i=0; i<96; i+=1)
4350
prefs.reserved[i] = 0
4451
endfor
4552
End
4653

4754
// Fill package prefs structures to match state of panel.
4855
static Function SyncPackagePrefsStruct(prefs)
4956
STRUCT CodeBrowserPrefs &prefs
50-
Variable scale
57+
Variable scale, selectedItem
5158
// Panel does exists. Set prefs to match panel settings.
5259
prefs.version = kPrefsVersion
5360

@@ -64,6 +71,15 @@ static Function SyncPackagePrefsStruct(prefs)
6471
prefs.panelCoords[3] = V_bottom * scale
6572

6673
prefs.panelCheckboxSort = returnCheckBoxSort()
74+
75+
selectedItem = getCurrentItemAsNumeric(module = 1)
76+
prefs.panelNameSpace = selectedItem < 0 ? 1 : selectedItem
77+
78+
selectedItem = getCurrentItemAsNumeric(procedure = 1)
79+
prefs.panelProcedure = selectedItem < 0 ? 1 : selectedItem
80+
81+
selectedItem = getCurrentItemAsNumeric(index = 1)
82+
prefs.panelElement = selectedItem < 0 ? 0 : selectedItem
6783
End
6884

6985
// InitPackagePrefsStruct(prefs)

0 commit comments

Comments
 (0)