source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Test_RAW_Panel.ipf @ 978

Last change on this file since 978 was 978, checked in by srkline, 7 years ago

more additions to the raw data display panel

File size: 23.2 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2#pragma version=1.0
3#pragma IgorVersion=6.1
4
5//
6// this will become the equivalent of "RawWindowHook"
7//
8// Procedures to display the detector data along with whatever visualization tools
9// necessary to understand the data
10//
11
12
13// TODO
14//
15// -- have the status automatically fill in when a new file is loaded, rather than needing a click of the "status" button
16// -- need a place somewhere to show the currently displayed folder
17// -- checkboxes for "active" corrections?
18// -- display of Q, counts, QxQy, X and Y
19// -- do I need a color bar? or is this not used at all? I like it to be there, or the colors are a waste of information
20//              (then... where do I put the color bar?)
21// -- define the "hook" function, and attach it to the panel (or the main detector subwindow?)
22//
23
24
25//
26// call this after loading data to either draw the data display panel or to update the contents
27//
28// TODO
29// -- make sure that the "type" input is correctly used for the updating of the data, values, etc.
30// -- add a procedure to define the global variables for pos, counts, QxQy, etc.
31//
32Proc UpdateDisplayInformation(type)
33        String type
34       
35        DoWindow VSANS_Data
36        if(V_flag==0)
37       
38                VSANSDataPanelGlobals()
39               
40                VSANS_DataPanel()               //draws the panel
41                // fake a click on all three tabs - to populate the data
42                FakeTabClick(2)
43                FakeTabClick(1)
44                FakeTabClick(0)
45        endif
46       
47        // TODO: update the information here  - in either case
48        // what isn't automatically picked up? What is "stale" on the display?
49        String/G root:Packages:NIST:VSANS:Globals:gCurDispType = type
50        DoWindow/T VSANS_Data,type + " VSANS_Data"
51end
52
53//
54// creates/initializes the globals for display of the data panel
55//
56Function VSANSDataPanelGlobals()
57
58        SetDataFolder root:Packages:NIST:VSANS:Globals
59       
60        Variable/G gXPos=0
61        Variable/G gYPos=0
62        Variable/G gQX=0
63        Variable/G gQY=0
64        Variable/G gQQ=0
65        Variable/G gNCounts=0
66        String/G gCurDispFile = "default string"
67        String/G gCurTitle = ""
68        String/G gCurDispType = ""
69       
70        SetDataFolder root:
71End
72
73// TODO
74//
75// -- fill in the proper window title in the DoWindow/T command
76// -- add help text for all of the controls
77//
78Window VSANS_DataPanel() : Panel
79        PauseUpdate; Silent 1           // building window...
80        NewPanel /W=(37,45,1038,719) /N=VSANS_Data
81        ShowTools/A
82       
83        String curFolder = root:Packages:NIST:VSANS:Globals:gCurDispType
84        DoWindow/T VSANS_Data,curFolder + " VSANS_Data"
85        SetWindow VSANS_Data,hook(dataHook)=VSANSDataHook,hookevents=2
86       
87        SetDrawLayer UserBack
88        SetDrawEnv linethick= 2,dash= 1,fillpat= 0
89        DrawRect 200,70,310,160
90        SetDrawEnv linethick= 2,dash= 1,fillpat= 0
91        DrawRect 320,70,430,160
92        SetDrawEnv linethick= 2,dash= 1,fillpat= 0
93        DrawRect 440,70,550,160
94       
95        SetDrawEnv fsize= 18
96        DrawText 230,115,"Front"
97        SetDrawEnv fsize= 18
98        DrawText 348,115,"Middle"
99        SetDrawEnv fsize= 18
100        DrawText 476,115,"Back"
101       
102        ToolsGrid visible=1
103
104
105        TabControl tab0,pos={13,41},size={572,617},proc=VDataTabProc,tabLabel(0)="Front"
106        TabControl tab0,tabLabel(1)="Middle",tabLabel(2)="Back",value= 2
107
108// on the side 
109        Button button_status,pos={607,146},size={70,20},proc=StatusButtonProc,title="Status"
110        Button button_IvsQ,pos={689,113},size={70,20},proc=IvsQPanelButtonProc,title="I vs. Q"
111        Button button_file_m,pos={619,55},size={50,20},proc=File_m_ButtonProc,title="File <"
112        Button button_file_p,pos={679,55},size={50,20},proc=File_p_ButtonProc,title="File >"
113        Button button_log,pos={689,146},size={70,20},proc=LogLinButtonProc,title="isLin",userData="0"
114        Button button_tab_p,pos={648,81},size={50,20},proc=Tab_p_ButtonProc,title="Tab >"
115        Button button_isolate,pos={606,114},size={70,20},proc=IsolateButtonProc,title="Isolate"
116
117        TitleBox title_file,pos={606,178},size={76,20},variable= file_name
118        TitleBox title_status,pos={606,210},size={76,20},variable= root:Packages:NIST:VSANS:Globals:gCurDispFile
119       
120        Button button_tagFile,pos={603,412},size={70,20},proc=TagFileButtonProc,title="Tag File"
121        Button button_BeamCtr,pos={603,450},size={70,20},proc=BeamCtrButtonProc,title="Beam Ctr"
122
123// on the tabs, always visible
124        TitleBox title_xy,pos={24,71},size={76,20},variable= file_name
125        Slider slider_hi,pos={558,224},size={16,80},proc=HiMapSliderProc
126        Slider slider_hi,limits={0,1,0},value= 1,ticks= 0
127        Slider slider_lo,pos={558,315},size={16,80},proc=LowMapSliderProc
128        Slider slider_lo,limits={0,1,0},value= 0,ticks= 0
129
130        SetVariable xpos,pos={22,97},size={50,17},title="X "
131        SetVariable xpos,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gXPos
132        SetVariable xpos,help={"x-position on the detector"},frame=0,noedit=1
133        SetVariable ypos,pos={22,121},size={50,17},title="Y "
134        SetVariable ypos,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gYPos
135        SetVariable ypos,help={"y-position on the detector"},frame=0,noedit=1
136        SetVariable counts,pos={22,151},size={150,17},title="Counts "
137        SetVariable counts,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gNCounts
138        SetVariable counts,help={"Neutron counts"},frame=0,noedit=1
139        SetVariable qxval,pos={83,94},size={85,17},title="qX"
140        SetVariable qxval,help={"q value in the x-direction on the detector"},frame=0,noedit=1
141        SetVariable qxval,format="%+7.5f",limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gQX
142        SetVariable qyval,pos={83,113},size={85,17},title="qY"
143        SetVariable qyval,help={"q value in the y-direction on the detector"},frame=0,noedit=1
144        SetVariable qyval,format="%+7.5f",limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gQY
145        SetVariable q_pos,pos={83,132},size={85,17},title="q "
146        SetVariable q_pos,help={"q-value on the detector at (x,y)"},format="%+7.5f"
147        SetVariable q_pos,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gQQ,frame=0,noedit=1
148       
149        Make/O/D tmp_asdf
150        // for back panels (in pixels?)
151        Display/W=(50,185,545,620)/HOST=# tmp_asdf
152        RenameWindow #,det_panelsB
153        ModifyGraph mode=2              // mode = 2 = dots
154        ModifyGraph marker=19
155        ModifyGraph rgb=(0,0,0)
156        ModifyGraph tick=2,mirror=1
157        Label left "pixels"
158        Label bottom "pixels"   
159        SetActiveSubwindow ##
160       
161        // for middle panels (in pixels?)       
162        Display/W=(50,185,545,620)/HOST=# tmp_asdf
163        RenameWindow #,det_panelsM
164        ModifyGraph mode=2              // mode = 2 = dots
165        ModifyGraph marker=19
166        ModifyGraph rgb=(0,0,0)
167        ModifyGraph tick=2,mirror=1
168        Label left "pixels"
169        Label bottom "pixels"   
170        SetActiveSubwindow ##
171       
172        // for front panels (in pixels?)       
173        Display/W=(50,185,545,620)/HOST=# tmp_asdf
174        RenameWindow #,det_panelsF
175        ModifyGraph mode=2              // mode = 2 = dots
176        ModifyGraph marker=19
177        ModifyGraph rgb=(0,0,0)
178        ModifyGraph tick=2,mirror=1
179        Label left "pixels"
180        Label bottom "pixels"   
181        SetActiveSubwindow ##
182       
183EndMacro
184
185//
186// event code 4 = mouse moved
187//
188// mouse moved is the only event that I really care about for the data display.
189//
190// TODO
191// -- figure out how to respond only to events in the main window
192// -- figure out which is the correct image to respond "from"
193//
194Function VSANSDataHook(s)
195        STRUCT WMWinHookStruct &s
196
197        Variable hookResult = 0
198
199        switch(s.eventCode)
200                case 0:                         // Activate
201                        // Handle activate
202//                      Print "Activate"
203                        break
204
205                case 1:                         // Deactivate
206                        // Handle deactivate
207                        break
208                       
209                case 3:         //mouse down
210//                      Print "mouse down"
211                        break
212                       
213                case 4:         // mouse moved
214                        NVAR xloc = root:Packages:NIST:VSANS:Globals:gXPos
215                        NVAR yloc = root:Packages:NIST:VSANS:Globals:gYPos
216                        NVAR gQX = root:Packages:NIST:VSANS:Globals:gQX
217                        NVAR gQY = root:Packages:NIST:VSANS:Globals:gQY
218                        NVAR gQQ = root:Packages:NIST:VSANS:Globals:gQQ
219                        NVAR gNCounts = root:Packages:NIST:VSANS:Globals:gNCounts
220                        SVAR gCurDispFile = root:Packages:NIST:VSANS:Globals:gCurDispFile
221                        SVAR gCurDispType = root:Packages:NIST:VSANS:Globals:gCurDispType               //the current folder
222                        Variable xaxval,yaxval,tab
223                       
224                        // is the mouse location within the "main" display window?
225                        // if so, do something, if not, do nothing?
226                        // right now, the "main" display is at (50,185,545,620). its name depends on the active tab
227                       
228//                              xloc = s.mouseLoc.h
229//                              yloc = s.mouseLoc.v
230
231//                      if out of bounds, exit now
232//              TODO - currently the values are hard-wired. eliminate this later if the size of the graph changes
233                        if(s.mouseLoc.h < 50 || s.mouseLoc.h > 545 || s.mouseLoc.v < 185 || s.mouseLoc.v > 620)
234                                break
235                        endif   
236                       
237//                      if(in bounds)
238//                              get the point location
239//                              update the globals --
240//                              but which data instance am I pointing to?
241//                              deduce the carriage and panel, and calculate Q
242//                      endif
243
244                        GetWindow $s.winName activeSW
245                        String activeSubwindow = S_value                // returns something like: "VSANS_Data#det_panelsF"
246                               
247                        xaxval= AxisValFromPixel("","bottom",s.mouseLoc.h)
248                        yaxval= AxisValFromPixel("","left",s.mouseLoc.v)
249                        xloc = round(xaxval)
250                        yloc = round(yaxval)
251                       
252                        // which tab is selected? -this is the main graph panel (subwindow may not be the active one!)
253                        ControlInfo/W=VSANS_Data tab0
254                        tab = V_Value
255                        if(tab == 0)
256                                activeSubwindow = "VSANS_Data#det_panelsF"
257                        elseif (tab == 1)
258                                activeSubwindow = "VSANS_Data#det_panelsM"
259                        else
260                                activeSubwindow = "VSANS_Data#det_panelsB"
261                        endif
262                       
263                        // which images are here?
264                        String detStr="",imStr,carriageStr
265                        String currentImageRef
266                        String imageList = ImageNameList(activeSubwindow,";")
267                        Variable ii,nIm,testX,testY,xctr,yctr,sdd,lam,pixSizeX,pixSizeY
268                        nIm = ItemsInList(imageList,";")
269                        gCurDispFile = imageList
270                        if(nIm==0)
271                                break           //problem, get out
272                        endif
273
274                        // images were added in the order TBLR, so look back through in the order RLBT, checking each to see if
275                        // the xy value is found on that (scaled) array
276                                               
277                        // loop backwards through the list of panels (may only be one if on the back)
278                        for(ii=nIm-1;ii>=0;ii-=1)
279                                Wave w = ImageNameToWaveRef(activeSubwindow,StringFromList(ii, imageList,";"))
280                               
281                                // which, if any image is the mouse xy location on?
282                                // use a multidemensional equivalent to x2pnt: (ScaledDimPos - DimOffset(waveName, dim))/DimDelta(waveName,dim)
283                                testX = trunc( (xloc - DimOffset(w,0))/DimDelta(w,0) )
284                                testY = trunc( (yloc - DimOffset(w,1))/DimDelta(w,1) )
285                               
286                                if( (testX > 0 && testX < DimSize(w,0)) && (testY > 0 && testY < DimSize(w,1)) )
287                                        // we're in-bounds on this wave
288                                       
289                                        // count value to the global
290                                        gNCounts = w[testX][testY]
291                                       
292                                        // deduce the detector panel
293                                        currentImageRef = StringFromList(ii, imageList,";")     //the image instance ##
294                                        // string is "data", or "data#2" etc. - so this returns "", "1", "2", or "3"
295                                        imStr = StringFromList(1, currentImageRef,"#")         
296                                        carriageStr = activeSubWindow[strlen(activeSubWindow)-1]
297                                       
298                                        if(cmpstr(carriageStr,"B")==0)
299                                                detStr = carriageStr
300                                        else
301                                                if(strlen(imStr)==0)
302                                                        imStr = "9"                     // a dummy value so I can replace it later
303                                                endif
304                                                detStr = carriageStr+imStr              // "F2" or something similar
305                                                detStr = ReplaceString("9", detStr, "T")        // ASSUMPTION :::: instances 0123 correspond to TBLR
306                                                detStr = ReplaceString("1", detStr, "B")        // ASSUMPTION :::: this is the order that the panels
307                                                detStr = ReplaceString("2", detStr, "L")        // ASSUMPTION :::: are ALWAYS added to the graph
308                                                detStr = ReplaceString("3", detStr, "R")        // ASSUMPTION ::::
309                                        endif
310                                        gCurDispFile = detStr
311
312                                        // now figure out q
313                                        // calculate the q-values, will be different depending on which panel is up (pixel size, geometry, etc.)
314                                        // TODO: !!!! get rid of the hard-wired values
315                                        // TODO: be sure that the units from HDF are what I expect
316                                        // TODO: beam center XY are pixels in the file, expected in the function, but are better suited for mm or cm
317                                        // TODO: units of xy pixel size are likely wrong
318                                        xctr = V_getDet_beam_center_x(gCurDispType,detStr)              //written in pixels
319                                        yctr = V_getDet_beam_center_y(gCurDispType,detStr)
320                                        sdd = V_getDet_distance(gCurDispType,detStr)    / 100   //written in cm, pass in meters
321                                        lam = V_getVSWavelength(gCurDispType)           //A
322                                        pixSizeX = V_getDet_x_pixel_size(gCurDispType,detStr)/10                // written mm? need cm
323                                        pixSizeY = V_getDet_y_pixel_size(gCurDispType,detStr)/10                // written mm? need cm
324                                       
325                                        gQQ = V_CalcQval(xaxval+1,yaxval+1,xctr,yctr,sdd,lam,pixSizeX,pixSizeY)
326                                        gQX = V_CalcQX(xaxval+1,yaxval+1,xctr,yctr,sdd,lam,pixSizeX,pixSizeY)
327                                        gQY = V_CalcQY(xaxval+1,yaxval+1,xctr,yctr,sdd,lam,pixSizeX,pixSizeY)
328
329                                        ii = -1         //look no further, set ii to bad value to exit the for loop
330                                endif   //end if(mouse is over a detector panel)
331                        endfor          // end loop over list of displayed images
332               
333                        break
334                       
335                // And so on . . .
336        endswitch
337
338        return hookResult               // 0 if nothing done, else 1
339End
340
341//
342//lots to to here:
343//
344// - 1 - display the appropriate controls for each tab, and hide the others
345// - 2 - display the correct detector data for each tab, and remove the others from the graph
346// -----?? can I draw 3 graphs, and just put the right one on top?? move the other two to the side?
347//
348//
349// TODO
350//  -- add all of the controls of the VCALC panel (log scaling, adjusting the axes, etc.)
351//  x- get the panel to be correctly populated first, rather than needing to click everywhere to fill in
352//  x- remove the dependency on VCALC being initialized first, and using dummy waves from there...
353//
354Function VDataTabProc(tca) : TabControl
355        STRUCT WMTabControlAction &tca
356
357        switch( tca.eventCode )
358                case 2: // mouse up
359                        Variable tab = tca.tab
360               
361//                      SetDataFolder root:Packages:NIST:VSANS:VCALC
362                        SetDataFolder root:
363                        RemoveFromGraph/Z /W=VSANS_Data#det_panelsB tmp_asdf
364                        RemoveFromGraph/Z /W=VSANS_Data#det_panelsM tmp_asdf
365                        RemoveFromGraph/Z /W=VSANS_Data#det_panelsF tmp_asdf
366                        SetDataFolder root:
367                       
368                        if(tab==2)
369                                //SetDataFolder root:Packages:NIST:VSANS:VCALC:Back
370                                //Wave det_B
371                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_B
372                                Wave det_B=data
373                                CheckDisplayed /W=VSANS_Data#det_panelsB det_B
374                                if(V_flag == 0)
375                                        AppendImage/W=VSANS_Data#det_panelsB det_B
376//                                      ModifyImage/W=VSANS_Data#det_panelsB det_B ctab= {*,*,ColdWarm,0}
377                                        ModifyImage/W=VSANS_Data#det_panelsB ''#0 ctab= {*,*,ColdWarm,0}
378                                endif
379                                MoveSubWindow/W=VSANS_Data#det_panelsB fnum=(50,185,545,620)
380                                MoveSubWindow/W=VSANS_Data#det_panelsM fnum=(320,70,430,160)
381                                MoveSubWindow/W=VSANS_Data#det_panelsF fnum=(200,70,310,160)
382                               
383                                SetActiveSubWindow VSANS_Data#det_panelsB
384                                SetDataFolder root:
385                        endif
386       
387                        if(tab==1)
388                                //SetDataFolder root:Packages:NIST:VSANS:VCALC:Middle
389                                //Wave det_MR,det_ML,det_MB,det_MT
390                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_ML
391                                Wave det_ML=data
392                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MR
393                                Wave det_MR=data
394                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MT
395                                Wave det_MT=data
396                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MB
397                                Wave det_MB=data
398                                CheckDisplayed /W=VSANS_Data#det_panelsM det_MR
399                                if(V_flag == 0)
400                                        AppendImage/W=VSANS_Data#det_panelsM det_MT             //order is important here to get LR on "top" of display
401                                        AppendImage/W=VSANS_Data#det_panelsM det_MB
402                                        AppendImage/W=VSANS_Data#det_panelsM det_ML
403                                        AppendImage/W=VSANS_Data#det_panelsM det_MR
404//                                      ModifyImage/W=VSANS_Data#det_panelsM det_MT ctab= {*,*,ColdWarm,0}
405//                                      ModifyImage/W=VSANS_Data#det_panelsM det_MB ctab= {*,*,ColdWarm,0}
406//                                      ModifyImage/W=VSANS_Data#det_panelsM det_ML ctab= {*,*,ColdWarm,0}
407//                                      ModifyImage/W=VSANS_Data#det_panelsM det_MR ctab= {*,*,ColdWarm,0}
408                                        ModifyImage/W=VSANS_Data#det_panelsM ''#0 ctab= {*,*,ColdWarm,0}                // ''#n means act on the nth image (there are 4)
409                                        ModifyImage/W=VSANS_Data#det_panelsM ''#1 ctab= {*,*,ColdWarm,0}
410                                        ModifyImage/W=VSANS_Data#det_panelsM ''#2 ctab= {*,*,ColdWarm,0}
411                                        ModifyImage/W=VSANS_Data#det_panelsM ''#3 ctab= {*,*,ColdWarm,0}
412                                endif
413                                MoveSubWindow/W=VSANS_Data#det_panelsM fnum=(50,185,545,620)
414                                MoveSubWindow/W=VSANS_Data#det_panelsB fnum=(440,70,550,160)
415                                MoveSubWindow/W=VSANS_Data#det_panelsF fnum=(200,70,310,160)
416                               
417                                SetActiveSubWindow VSANS_Data#det_panelsM
418                                SetDataFolder root:
419                        endif
420
421                        if(tab==0)
422                                //SetDataFolder root:Packages:NIST:VSANS:VCALC:Front
423                                //Wave det_FL,det_FR,det_FT,det_FB
424                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FL
425                                Wave det_FL=data
426                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FR
427                                Wave det_FR=data
428                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FT
429                                Wave det_FT=data
430                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FB
431                                Wave det_FB=data
432                                CheckDisplayed /W=VSANS_Data#det_panelsF det_FL
433                                if(V_flag == 0)
434                                        AppendImage/W=VSANS_Data#det_panelsF det_FT
435                                        AppendImage/W=VSANS_Data#det_panelsF det_FB
436                                        AppendImage/W=VSANS_Data#det_panelsF det_FL
437                                        AppendImage/W=VSANS_Data#det_panelsF det_FR
438//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FT ctab= {*,*,ColdWarm,0}
439//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FB ctab= {*,*,ColdWarm,0}
440//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FL ctab= {*,*,ColdWarm,0}
441//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FR ctab= {*,*,ColdWarm,0}
442                                        ModifyImage/W=VSANS_Data#det_panelsF ''#0 ctab= {*,*,ColdWarm,0}
443                                        ModifyImage/W=VSANS_Data#det_panelsF ''#1 ctab= {*,*,ColdWarm,0}
444                                        ModifyImage/W=VSANS_Data#det_panelsF ''#2 ctab= {*,*,ColdWarm,0}
445                                        ModifyImage/W=VSANS_Data#det_panelsF ''#3 ctab= {*,*,ColdWarm,0}
446                                endif
447                                MoveSubWindow/W=VSANS_Data#det_panelsF fnum=(50,185,545,620)
448                                MoveSubWindow/W=VSANS_Data#det_panelsB fnum=(440,70,550,160)
449                                MoveSubWindow/W=VSANS_Data#det_panelsM fnum=(320,70,430,160)
450                               
451                                SetActiveSubWindow VSANS_Data#det_panelsF
452                                SetDataFolder root:
453                        endif
454                       
455                                               
456                        break
457                case -1: // control being killed
458                        break
459        endswitch
460
461        return 0
462End
463
464
465// fake click on each tab to populate the data
466Function FakeTabClick(tab)
467        Variable tab
468       
469        STRUCT WMTabControlAction tca
470
471        tca.eventCode = 2               //fake mouse up
472        tca.tab = tab
473        VDataTabProc(tca)
474       
475        TabControl tab0,win=VSANS_Data,value= tab               //select the proper tab
476        return(0)
477End
478
479// TODO
480//
481// move one file number back
482//
483Function File_m_ButtonProc(ba) : ButtonControl
484        STRUCT WMButtonAction &ba
485
486        switch( ba.eventCode )
487                case 2: // mouse up
488                        // click code here
489                        break
490                case -1: // control being killed
491                        break
492        endswitch
493
494        return 0
495End
496
497// TODO
498//
499// move one file number forward
500//
501Function File_p_ButtonProc(ba) : ButtonControl
502        STRUCT WMButtonAction &ba
503
504        switch( ba.eventCode )
505                case 2: // mouse up
506                        // click code here
507                        break
508                case -1: // control being killed
509                        break
510        endswitch
511
512        return 0
513End
514
515//
516// button that mimics a click on the tab, cycling through the tabs 0->1->2->0 etc.
517// only goes one direction
518//
519Function Tab_p_ButtonProc(ba) : ButtonControl
520        STRUCT WMButtonAction &ba
521
522        switch( ba.eventCode )
523                case 2: // mouse up
524                        // click code here
525                        ControlInfo/W=VSANS_Data tab0
526                       
527                        V_Value += 1
528                        if(V_Value == 3)
529                                V_Value = 0             //reset to 0
530                        endif
531                        FakeTabClick(V_Value)
532                        break
533                case -1: // control being killed
534                        break
535        endswitch
536
537        return 0
538End
539
540// TODO
541//
542// isolates a single panel to allow a better view of the details
543// useful for T/B panels which are partially blocked from view
544//
545// will open a separate graph or panel to display the selected detector
546// (lots to do here, depending what is necessary for instrument troubleshooting)
547// - like being able to turn corrections on/off and view with different axes (pix, mm, Q)
548//
549Function IsolateButtonProc(ba) : ButtonControl
550        STRUCT WMButtonAction &ba
551
552        switch( ba.eventCode )
553                case 2: // mouse up
554                        // click code here
555                        break
556                case -1: // control being killed
557                        break
558        endswitch
559
560        return 0
561End
562
563// TODO
564//
565// opens a separate panel with the I(q) representation of the data
566// ? controls here to select how the data is processed/grouped/saved, etc.
567//
568Function IvsQPanelButtonProc(ba) : ButtonControl
569        STRUCT WMButtonAction &ba
570
571        switch( ba.eventCode )
572                case 2: // mouse up
573                        // click code here
574                        break
575                case -1: // control being killed
576                        break
577        endswitch
578
579        return 0
580End
581
582// TODO
583//
584// gets the status of the currently displayed file and dumps it to the panel (not the cmd window)
585// - lots to decide here about what is the important stuff to display. There's a lot more information now
586//
587Function StatusButtonProc(ba) : ButtonControl
588        STRUCT WMButtonAction &ba
589
590        switch( ba.eventCode )
591                case 2: // mouse up
592                        // click code here
593                        break
594                case -1: // control being killed
595                        break
596        endswitch
597
598        return 0
599End
600
601
602// TODO
603// toggle the (z) value of the display log/lin
604//
605Function LogLinButtonProc(ba) : ButtonControl
606        STRUCT WMButtonAction &ba
607
608        switch( ba.eventCode )
609                case 2: // mouse up
610                        // click code here
611                       
612                        // which tab is active? does it matter - or do I log-scale everything?
613                        // log/lin current state is in the S_UserData string (0=linear, 1=log)
614                        ControlInfo/W=VSANS_Data button_log
615                        Variable curState,newState
616                        String newStateStr,newTitleStr
617                       
618                        curState = str2num(S_UserData)
619                       
620                        if(curState == 0)
621                                newState = 1
622                                newStateStr="1"
623                                newTitleStr = "isLog"
624                        else
625                                newState = 0
626                                newStateStr="0"
627                                newTitleStr = "isLin"
628                        endif
629                       
630                        // update the button and the global value
631                        Button button_log,userData=newStateStr,title=newTitleStr
632                        NVAR state = root:Packages:NIST:VSANS:Globals:gIsLogScale
633                        state = newState
634                       
635                        // on the front:                       
636                        ModifyImage/W=VSANS_Data#det_panelsF ''#0 log=newState
637                        ModifyImage/W=VSANS_Data#det_panelsF ''#1 log=newState
638                        ModifyImage/W=VSANS_Data#det_panelsF ''#2 log=newState
639                        ModifyImage/W=VSANS_Data#det_panelsF ''#3 log=newState
640                        //on the middle:
641                        ModifyImage/W=VSANS_Data#det_panelsM ''#0 log=newState
642                        ModifyImage/W=VSANS_Data#det_panelsM ''#1 log=newState
643                        ModifyImage/W=VSANS_Data#det_panelsM ''#2 log=newState
644                        ModifyImage/W=VSANS_Data#det_panelsM ''#3 log=newState
645                        // on the back:
646                        ModifyImage/W=VSANS_Data#det_panelsB ''#0 log=newState
647
648                        break
649                case -1: // control being killed
650                        break
651        endswitch
652
653        return 0
654End
655
656// TODO
657// possibly function to "tag" files right here in the disaply with things
658// like their intent, or other values that reduction will need,
659Function TagFileButtonProc(ba) : ButtonControl
660        STRUCT WMButtonAction &ba
661
662        switch( ba.eventCode )
663                case 2: // mouse up
664                        // click code here
665                        DoAlert 0, "TagFileButtonProc(ba) unfinished"
666                       
667                               
668                        break
669                case -1: // control being killed
670                        break
671        endswitch
672
673        return 0
674End
675
676//TODO
677//
678//link this to the beam center finding panel
679//
680Function BeamCtrButtonProc(ba) : ButtonControl
681        STRUCT WMButtonAction &ba
682
683        switch( ba.eventCode )
684                case 2: // mouse up
685                        // click code here
686                        break
687                case -1: // control being killed
688                        break
689        endswitch
690
691        return 0
692End
693
694// TODO
695//
696// link this slider to the "high" end of the color mapping for whatever is currently displayed
697//
698// -- see Buttons.ipf for the old SANS implementation
699//
700Function HiMapSliderProc(sa) : SliderControl
701        STRUCT WMSliderAction &sa
702
703        switch( sa.eventCode )
704                case -1: // control being killed
705                        break
706                default:
707                        if( sa.eventCode & 1 ) // value set
708                                Variable curval = sa.curval
709                        endif
710                        break
711        endswitch
712
713        return 0
714End
715
716// TODO
717//
718// link this slider to the "low" end of the color mapping for whatever is currently displayed
719//
720// -- see Buttons.ipf for the old SANS implementation
721//
722Function LowMapSliderProc(sa) : SliderControl
723        STRUCT WMSliderAction &sa
724
725        switch( sa.eventCode )
726                case -1: // control being killed
727                        break
728                default:
729                        if( sa.eventCode & 1 ) // value set
730                                Variable curval = sa.curval
731                        endif
732                        break
733        endswitch
734
735        return 0
736End
737
738
Note: See TracBrowser for help on using the repository browser.