copy and paste waves to another datafolder
maru
Hi, can I copy and paste waves to another datafolder in the databrowser?
I konw I can duplicate the waves using Cmd+D but it makes copies of waves in the SAME datafolder.
As I could not find this feature in the Igor documentation, I am trying to make a function to implement this feature using the GetBrowserSelection.
However, GetBrowserSelection only allow me to select one wave. Is there a technique to select multiple waves from the databrowser?
Function CopyPasteWaves(mode)
string mode
NewDataFolder/O root:Packages
NewDataFolder/O root:Packages:CopyPaste
String targetpath
strswitch(mode) // string switch
case "c": // execute if case matches expression
targetpath = GetBrowserSelection(0)
Print targetpath
string deswavepath = "root:Packages:CopyPaste:" + ParseFilePath(3,targetpath,":",0,0)
Duplicate/O $targetpath, $deswavepath
Print "waves copied"
break
case "x": // execute if case matches expression
Print "waves cutted"
break
case "p": // execute if case matches expression
Print "waves pasted"
break
endswitch
End
string mode
NewDataFolder/O root:Packages
NewDataFolder/O root:Packages:CopyPaste
String targetpath
strswitch(mode) // string switch
case "c": // execute if case matches expression
targetpath = GetBrowserSelection(0)
Print targetpath
string deswavepath = "root:Packages:CopyPaste:" + ParseFilePath(3,targetpath,":",0,0)
Duplicate/O $targetpath, $deswavepath
Print "waves copied"
break
case "x": // execute if case matches expression
Print "waves cutted"
break
case "p": // execute if case matches expression
Print "waves pasted"
break
endswitch
End
something like this?
ValidBrowserSelection(0), /Q, CopyPasteWaves(0)
ValidBrowserSelection(1), /Q, CopyPasteWaves(1)
end
function /S ValidBrowserSelection(int mode)
if (strlen(GetBrowserSelection(-1)) == 0)
return "" // Data Browser is not open
endif
switch (mode)
case 0:
return SelectString(ItemsInList(getListOfBrowserWaves())-1, "", "Copy Wave", "Copy Waves")
break
case 1:
case 2:
// should check here that we have a sensible destination selected
if (strlen(GetBrowserSelection(1)))
return ""
endif
SVAR /Z copylist = getDFR():copylist
if (SVAR_Exists(copylist))
return SelectString(ItemsInList(copylist)-1, "", "Paste Wave", "Paste Waves")
endif
break
endswitch
return ""
end
function /DF getDFR()
NewDataFolder/O root:Packages
NewDataFolder/O root:Packages:CopyPaste
DFREF dfr = root:Packages:CopyPaste
return dfr
end
function /S getListOfBrowserWaves()
string item = "", listofwaves = ""
int i = 0
do
item = GetBrowserSelection(i)
if (strlen(item) == 0)
break
endif
wave /Z w = $item
if (WaveExists(w))
listofwaves = AddListItem(GetWavesDataFolder(w, 2), listofwaves)
endif
i ++
while(1)
return listofwaves
end
function CopyPasteWaves(int mode)
string targetpath, strWave
int numwaves, i
switch(mode)
case 0:
string /G getDFR():copylist = getListOfBrowserWaves()
break
case 1:
SVAR copylist = getDFR():copylist
targetpath = GetBrowserSelection(0)
DFREF dfr = $targetpath
if (DataFolderRefStatus(dfr) == 0)
targetpath = ParseFilePath(1, GetBrowserSelection(0), ":", 1, 0)
DFREF dfr = $targetpath
endif
if (DataFolderRefStatus(dfr) == 0)
return 0
endif
numwaves = ItemsInList(copylist)
for (i=0;i<numwaves;i++)
strWave = StringFromList(i, copylist)
wave /Z sourcewave = $strWave
if (!WaveExists(sourcewave))
continue
endif
strWave = ParseFilePath(0, strWave, ":", 1, 0)
wave /Z targetwave = dfr:$strWave
if (WaveExists(targetwave))
DoAlert 1, strWave + " exists. Overwrite?"
if (v_flag == 2)
continue
endif
endif
Duplicate /O sourcewave $targetpath + strWave
endfor
break
endswitch
end
November 3, 2021 at 03:48 am - Permalink
Note that drag and drop achieves the same as 'cut' and 'paste'.
November 3, 2021 at 04:01 am - Permalink
Also, you will need Igor 9 to access the DataBrowserObjectsPopup menu
November 3, 2021 at 04:04 am - Permalink
Note that you can also achieve something like copy & paste via drag and drop while holding the 'alt' or 'ctrl' key. A small + icon will appear next to the mouse cursor in this case. This works of course with multiple waves selected as well as with folders.
November 3, 2021 at 04:09 am - Permalink
In reply to Note that you can also… by chozo
Option on a mac.
That's a whole lot easier.
November 3, 2021 at 04:16 am - Permalink
Thank you very much. Your code works perfectly. It is far beyond my expectation.
This copy and paste menu should be a native feature for future Igor.
November 4, 2021 at 05:13 am - Permalink