sqweek / dialog

Simple cross-platform dialog API for go-lang
ISC License
493 stars 76 forks source link

Can't detect which filter is selected #14

Open drahoslove opened 6 years ago

drahoslove commented 6 years ago

Hi, it would be great to be able to tell which filter in save dialog user selected.

Imagine an application where user wants to export an image in one of possible graphic formats.

dial := dialog.File().Title("Export as image")
dial.Filter("SVG (*.svg)", "svg")
dial.Filter("PNG (*.png)", "png")
dial.Filter("PDF (*.pdf)", "pdf")
filename, err := dialog.Save()

User opens a dialog, selects png as type, and fill in just myimage as name, believing will create file myimage.png - which is common behavior and users are used to it - but it would not.

Problem is that value of variable filename is just "myimage".

It would be great if either: 1) there would be a way to detect which which filter is selected from nFilterIndex field of OPENFILENAME structure in win api and from dialog.GetFilter() in gtk lib on linux it might by returned as additional value from .Save() method.

2) or it could automatically append first extension from extensions of a selected filter to filename without extension

I'd be happy to help make an implementation for windows and linux platform.

sqweek commented 6 years ago

Tbh it always annoyed me how notepad auto appended .txt to the filename seemingly no matter what, and I did think that was the default behaviour of the windows' dialog.

But you're right this is a totally reasonable expectation, and also that the filter selected by the user is important information (especially in the save case).

The only caveat is that the load/save dialog on OSX doesn't present the list of filters to the user, so any solution which relies on selected filter is non-portable. However, the osx implementation at present does automatically append an extension if the user doesn't specify one.

I think your second suggestion is a good one.