GP SoftwareTwitter
Opus FAQsManualCommandsObjects

"Select By Filter" menu button

This button allows you to select files according to the checked filters that are automatically read from the folder "/dopusdata\Filters". You can use any combination of filters.

Option Explicit

Function OnClick(ByRef ClickData)
   Dim dlg, File, Folder, FSO, i, k, list, path
   path = DOpus.FSUtil.Resolve("/dopusdata\Filters\")
   Set list = DOpus.NewVector
   Set FSO = CreateObject("Scripting.FileSystemObject")
   If FSO.FolderExists(path) Then
      Set Folder = FSO.GetFolder(path)
      i = 0
      For Each File In Folder.Files
         If LCase(FSO.GetExtensionName(File.Name)) = "ofi" Then
            list(i) = FSO.GetBaseName(File.Name)
            i = i + 1
         End If
      Next
   End If
   Set dlg = ClickData.Func.Dlg
   dlg.title = "Select By Filter"
   If list.count > 0 Then
      dlg.message = "Check filter(s) to select files and/or folders:"
      dlg.buttons = "OK|Cancel"
      dlg.choices = list
      dlg.list = DOpus.NewVector()
   Else
      dlg.message = "No ofi-files found in the filters directory."
      dlg.icon = "info"
      dlg.buttons = "OK"
   End If
   dlg.Show
   If dlg.result = 1 And list.count > 0 Then
      For k = 0 To dlg.choices.size - 1
         If dlg.list(k) Then
            ClickData.Func.Command.RunCommand("Select FILTER=""" & dlg.choices(k) & "")
         End If
      Next
   End If
End Function

Script button:
Select By Filter.dcf (2.57 KB)

If you do not have filters, you can use these:
Filters.zip (8.65 KB)

1 Like

Thanks for sharing. I would love to see a list like this added to the filter bar drop down.

I have taken the liberty of adapting YankeeZulu's idea and turning it into a pop-up filter menu. The following code creates a $FilterMenu command which I usually access from my lister context (right click) menu. The screen grabs show how it works.

[code]' $FilterMenu [filterflags] [clear]
'
' v1.0 (2014/06/04) Pop-up menu of user defined saved filters. Sample calls..
'
' 1. $FilterMenu [select]
' 2. $FilterMenu clear
' 3. $FilterMenu deselect
' 4. $FilterMenu hidenomatch,deselect
' 5. $FilterMenu hide,deselect
'
' Pops up a menu of saved filters then executes the selected filter or does nothing if escape is pressed.
' The default action is "select" if no filterflags are specified.
' The "clear" option is a special case, used to clear all active filters. No menu is displayed.
'
' See "Select By Filter" menu button for YankeeZulu's original button code.
' Adapted by AussieBoykie to use a single choice pop-up menu rather than a multiple choice checklist.

option explicit

Function OnInit(ByRef initData) ' OnInit is called by DOpus to initialize the script

initData.name = "Choose Filter From Menu"
initData.version= "1.0"
initData.desc = "Adds the $FilterMenu command to Directory Opus"
initData.copyright = "Adapted by AussieBoykie from original code by YankeeZulu"
initData.default_enable = true

dim cmd : set cmd = initData.AddCommand()
cmd.name = "$FilterMenu" ' This is the name of the command being added
cmd.method = "Main" ' This is the routine to execute when the command is invoked
cmd.desc = initData.desc
cmd.label = initdata.name
cmd.template = "Args/M,Clear/S"

End Function

Function Main(ByRef scriptCmdData) ' This is the executable code
Dim argstring, cdf, dlg, File, Filter, Filters, Folder, FSO, i, list, menu, path, result, s
Set list = DOpus.NewVector : Set menu = DOpus.NewVector

Set cdf = scriptCmdData.Func
If cdf.args.got_arg.Clear Then ' Special case
ClearAll
Exit Function
End If

If cdf.args.got_arg.Args Then ' Build an argstring for FILTERFLAGS - e.g. select,hidenomatch
argstring = trim(cdf.args.Args(0))
For i=2 to cdf.args.Args.count
argstring = argstring & " " & trim(cdf.args.Args(i-1))
Next
argstring = replace(argstring," ",",",1,-1,1) ' Eliminate embedded spaces (change to inoffensive commas)
Else
argstring = "select" ' Default argstring is select
End If

path = DOpus.FSUtil.Resolve("/dopusdata\Filters") ' This is where Opus user defined filters are stored
Set Filters = DOpus.FSUtil.ReadDir(path) ' This is the filters folder object
list(0) = "Clear all filters" : menu(0) = 0 ' No default selection
i = 0
Do
Set Filter = Filters.next
If Filters.error Then Exit Do
If LCase(Filter.ext) = ".ofi" Then
i = i + 1
If i = 1 Then ' If there is at least one filter then insert a separator
list(i) = "-" : menu(i) = 0
i = i + 1
End If
list(i) = Filter.name_stem : menu(i) = 0
End If
Loop While Not Filters.complete

set dlg = scriptCmdData.Func.Dlg
With dlg
.choices = list
.menu = menu
.show
i = dlg.result
End With

If i = 0 Then ' Do nothing
ElseIf i = 1 Then ClearAll ' Clear all filters
Else
s = "Select """ & dlg.choices(i-1) & """ FILTER FILTERFLAGS=" & argstring
DOpus.output s
With scriptCmdData.Func.Command
.addline(s)
.addline("Set AUTOSIZECOLUMNS")
.deselect=False
.run
End With
End If
End Function

Function ClearAll

Dim cmd
Set cmd = DOpus.NewCommand
With cmd
.addline "Set SHOWFILTERFILENAME="""""
.addline "Set HIDEFILTERFILENAME="""""
.addline "Set SHOWFILTERFOLDERS="""""
.addline "Set HIDEFILTERFOLDERS="""""
.addline "Set HIDEFILTERATTR="""""
.addline "Set SHOWFILTERATTR="""""
.addline "Set QUICKFILTERCLEAR"
.addline "Select NOPATTERN SHOWHIDDEN"
.addline("Set AUTOSIZECOLUMNS")
.run
End With

End Function[/code]


I added some buttons to my lister context menu to provide a right mouse click interface.
These could just as easily be added to a toolbar.


This is part of the filters menu that pops up when I right mouse click.


Here is the result of clicking Filter (Select) from the context menu and then Last5Days.
Button code is $FilterMenu


Here is the result of clicking Show Filtered (Matched) from the context menu and then Last5Days.
Button code is $FilterMenu hidenomatch,deselect


Here is the result of clicking Show Filtered (UnMatched) from the context menu and then Last5Days.
Button code is $FilterMenu hide,deselect

You can also use $FilterMenu clear to clear all filters.

Regards, AB

1 Like

Wanted to thank you guys for doing this, I use filters very more often, as they are very easy to use now with these dynamic menus! o)
Also thanks for supplying a bunch of predefined filters, really useful!

I was still missing a full blown menu, to easily activate all possible things you can do with a filter, so here it is, just remove the entries you don't like.
The menu button uses aussieboykies popup-menu script-command version!


select.dcf (3.31 KB)

1 Like

How do I install the FilterMenu Command?
Copying and pasting The script above to the scripts directory didn't add it.

I used @tbone buttons, but they don't work because it can't find the command

If you have the SelectEx script command working, it can basically do the same (menu and things) - it's based of this FilterMenu script mixture.

Copying and pasting the code of the FilterMenu command should work, check the "Other Logs" console to see if there are any errors, also make sure the new script is activated. Some need activation after being inserted into the script addins folder.

Download the .dcf file, go into Customize mode, then drag it to your toolbar or into a menu.

The root post contains a toolbar button (which contains a script). It isn't a script add-in, just a standalone button.

Where is this?

@leo even after adding the original button, the SCRIPT command isn't created for tbones buttons.
I've imported tbone's buttons and the original.
The script commands does show something as you can see in my previous screenshot, but it doesn't work. I'm very confused about the Custom Commands button.

@tbone, can you give me a simple way to install both?

It seems my *.dcf file uses the command "FilterMenu" for each entry, while the second script (the script addin version offering the FilterMenu command), adds a command called "$FilterMenu" - notice the leading dollar char.

Two options to solve this, change the string "$FilterMenu" to "FilterMenu" in the *.vbs script file you pasted into "script addins", or edit each entry of the button I uploaded (add the dollar). I'm sorry for adding to the confusion by using a different command name, but since script commands on my system do not have the leading dollar, I obviously changed the script behind to register the command with the naming policy I use. o) My tidyness, your mess. o)

For SelectEx, use the magnifier in the top, enter "SelectEx" and you will find two top search entries with all you need.