annotate foosdk/sdk/foobar2000/SDK/fileDialog.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include <functional>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 typedef std::function<void (arrayRef) > fileDialogReply_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 typedef std::function<void (stringRef) > fileDialogGetPath_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 class NOVTABLE fileDialogNotify : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 FB2K_MAKE_SERVICE_INTERFACE( fileDialogNotify, service_base );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 //! Called when user has cancelled the dialog.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 virtual void dialogCancelled() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 //! Called when the user has dismissed the dialog having selected some content.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 //! @param items Array of fsItemBase objects or strings, depending on the platform. Should accept either form. Typically, file dialogs will handle fsItems but Add Location will handle path strings. Special case: playlist format chooser sends chosen format name as a string (one array item).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 virtual void dialogOK2( arrayRef items ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 static fileDialogNotify::ptr create( fileDialogReply_t recv );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 class NOVTABLE fileDialogSetup : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 FB2K_MAKE_SERVICE_INTERFACE( fileDialogSetup, service_base );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 virtual void setTitle( const char * title ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 virtual void setAllowsMultiple(bool bValue) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 //! Sets allowed file types - in uGetOpenFileName format, eg. "Crash logs|*.txt"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 virtual void setFileTypes( const char * fileTypeStr ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 virtual void setDefaultType( uint32_t indexInList ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 //! Helper, calls setFileTypes() with a mask matching all known file types
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 void setAudioFileTypes();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 //! Sets default extension, dot-less
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 virtual void setDefaultExtension( const char * defaultExt ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 virtual void setInitialDirectory( const char * initDirectory ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 virtual void setInitialValue( const char * initValue ) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 virtual void setParent(fb2k::hwnd_t wndParent) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 locNotSet = 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 locComputer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 locDownloads,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 locMusic,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 locDocuments,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 locPictures,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 locVideos,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 virtual void setInitialLocation(unsigned identifier) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 //! Runs the dialog. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 //! The dialog may run synchronously (block run() and the whole app UI) or asynchronously, depending on the platform. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 //! For an example, on Windows most filedialogs work synchronously while on OSX all of them work asynchronously.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 //! @param notify Notify object invoked upon dialog completion.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 virtual void run(fileDialogNotify::ptr notify) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 //! Helper, creates fileDialogNotify for you.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 void run (fileDialogReply_t reply);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 void runSimple (fileDialogGetPath_t reply);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 class NOVTABLE fileDialog : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 FB2K_MAKE_SERVICE_COREAPI( fileDialog );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 virtual fileDialogSetup::ptr setupOpen() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 virtual fileDialogSetup::ptr setupSave() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 virtual fileDialogSetup::ptr setupOpenFolder() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 virtual fileDialogSetup::ptr setupOpenURL() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 virtual fileDialogSetup::ptr setupChoosePlaylistFormat() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 };