#pragma once

#include <string>
#include <vector>
#include "lib_begin.h"

namespace cgv {
	namespace gui {
		/** ask the user for a file name to open a file. 
		    The filter string is composed of '|'-separated pairs of the form '<text>:<filter>', where 
			<text> is an arbitrary text (without '|' and ':' symbols) shown with the filter and <filter> 
			is one filter string or a ';'-separated list of filters. For example the filter parameter could
			be set to "Image Files (jpg,gif):*.jpg;*.gif|Video Files (avi):*.avi|All Files:*.*".
			The path parameter can be used to define an initial directory and or an initial file for the dialog:
			- if path is empty no initial directory not path are selected, 
			- if path defines a directory, it is used as initial directory without initial file, 
			- if path defines file without directory the initial file is set and the standard directory is used
			- if path defines a directory and file, both initial directory and file are set.
		*/
		extern CGV_API std::string file_open_dialog(const std::string& title, const std::string& filter, const std::string& path = "");
		/// ask user for an open dialog that can select multiple files, return common path prefix and fill field of filenames
		extern CGV_API std::string files_open_dialog(std::vector<std::string>& file_names, const std::string& title, const std::string& filter, const std::string& path = "");
		/** ask the user for an existing directory. */
		extern CGV_API std::string directory_open_dialog(const std::string& title, const std::string& path = "");
		/** ask the user for a new directory. */
		extern CGV_API std::string directory_save_dialog(const std::string& title, const std::string& path = "");
		/** ask the user for a file name to save a file. The filter string uses the syntax defined in the docu of 
		    file_open_dialog(). */
		extern CGV_API std::string file_save_dialog(const std::string& title, const std::string& filter, const std::string& path = "");

	}
}

#include <cgv/config/lib_end.h>