FileDlg.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00028 #ifndef _GG_FileDlg_h_
00029 #define _GG_FileDlg_h_
00030
00031 #include <GG/DropDownList.h>
00032
00033 #include <boost/filesystem/path.hpp>
00034
00035
00036 namespace GG {
00037
00038 class TextControl;
00039 class Edit;
00040 class Button;
00041 class Font;
00042
00055 class GG_API FileDlg : public Wnd
00056 {
00057 public:
00059
00069 FileDlg(const std::string& directory, const std::string& filename, bool save, bool multi, const boost::shared_ptr<Font>& font,
00070 Clr color, Clr border_color, Clr text_color = CLR_BLACK);
00072
00074 std::set<std::string> Result() const;
00075
00077 bool SelectDirectories() const;
00078
00085 bool AppendMissingSaveExtension() const;
00086
00087 const std::string& FilesString() const;
00088 const std::string& FileTypesString() const;
00089 const std::string& SaveString() const;
00090 const std::string& OpenString() const;
00091 const std::string& CancelString() const;
00092
00093 const std::string& MalformedFilenameString() const;
00094 const std::string& OverwritePromptString() const;
00095 const std::string& InvalidFilenameString() const;
00096 const std::string& FilenameIsADirectoryString() const;
00097 const std::string& FileDoesNotExistString() const;
00098 const std::string& DeviceIsNotReadyString() const;
00099 const std::string& ThreeButtonDlgOKString() const;
00100 const std::string& ThreeButtonDlgCancelString() const;
00101
00102
00104 virtual void Render();
00105 virtual void KeyPress(Key key, boost::uint32_t key_code_point, Flags<ModKey> mod_keys);
00106
00109 void SelectDirectories(bool directories);
00110
00117 void AppendMissingSaveExtension(bool append);
00118
00130 void SetFileFilters(const std::vector<std::pair<std::string, std::string> >& filters);
00131
00132 void SetFilesString(const std::string& str);
00133 void SetFileTypesString(const std::string& str);
00134 void SetSaveString(const std::string& str);
00135 void SetOpenString(const std::string& str);
00136 void SetCancelString(const std::string& str);
00137
00138 void SetMalformedFilenameString(const std::string& str);
00139 void SetOverwritePromptString(const std::string& str);
00140 void SetInvalidFilenameString(const std::string& str);
00141 void SetFilenameIsADirectoryString(const std::string& str);
00142 void SetFileDoesNotExistString(const std::string& str);
00143 void SetDeviceIsNotReadyString(const std::string& str);
00144 void SetThreeButtonDlgOKString(const std::string& str);
00145 void SetThreeButtonDlgCancelString(const std::string& str);
00146
00147
00150 static const boost::filesystem::path& WorkingDirectory();
00151
00153
00154 GG_ABSTRACT_EXCEPTION(Exception);
00155
00157 GG_CONCRETE_EXCEPTION(BadInitialDirectory, GG::FileDlg, Exception);
00159
00160 protected:
00161 static const X DEFAULT_WIDTH;
00162 static const Y DEFAULT_HEIGHT;
00163
00165 FileDlg();
00166
00167
00168 private:
00169 void CreateChildren(const std::string& filename, bool multi);
00170 void PlaceLabelsAndEdits(X button_width, Y button_height);
00171 void AttachSignalChildren();
00172 void DetachSignalChildren();
00173 void Init(const std::string& directory);
00174 void ConnectSignals();
00175 void OkClicked();
00176 void OkHandler(bool double_click);
00177 void CancelClicked();
00178 void FileSetChanged(const ListBox::SelectionSet& files);
00179 void FileDoubleClicked(DropDownList::iterator it);
00180 void FilesEditChanged(const std::string& str);
00181 void FilterChanged(DropDownList::iterator it);
00182 void SetWorkingDirectory(const boost::filesystem::path& p);
00183 void PopulateFilters();
00184 void UpdateList();
00185 void UpdateDirectoryText();
00186 void OpenDirectory();
00187
00188 Clr m_color;
00189 Clr m_border_color;
00190 Clr m_text_color;
00191 boost::shared_ptr<Font>
00192 m_font;
00193
00194 bool m_save;
00195 std::vector<std::pair<std::string, std::string> >
00196 m_file_filters;
00197 std::set<std::string>
00198 m_result;
00199 bool m_select_directories;
00200 bool m_append_missing_save_extension;
00201 bool m_in_win32_drive_selection;
00202
00203 std::string m_save_str;
00204 std::string m_open_str;
00205 std::string m_cancel_str;
00206
00207 std::string m_malformed_filename_str;
00208 std::string m_overwrite_prompt_str;
00209 std::string m_invalid_filename_str;
00210 std::string m_filename_is_a_directory_str;
00211 std::string m_file_does_not_exist_str;
00212 std::string m_device_is_not_ready_str;
00213 std::string m_three_button_dlg_ok_str;
00214 std::string m_three_button_dlg_cancel_str;
00215
00216 TextControl* m_curr_dir_text;
00217 ListBox* m_files_list;
00218 Edit* m_files_edit;
00219 DropDownList* m_filter_list;
00220 Button* m_ok_button;
00221 Button* m_cancel_button;
00222 TextControl* m_files_label;
00223 TextControl* m_file_types_label;
00224
00225 static boost::filesystem::path s_working_dir;
00226
00227 friend class boost::serialization::access;
00228 template <class Archive>
00229 void serialize(Archive& ar, const unsigned int version);
00230 };
00231
00232 }
00233
00234
00235
00236 template <class Archive>
00237 void GG::FileDlg::serialize(Archive& ar, const unsigned int version)
00238 {
00239 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Wnd)
00240 & BOOST_SERIALIZATION_NVP(m_color)
00241 & BOOST_SERIALIZATION_NVP(m_border_color)
00242 & BOOST_SERIALIZATION_NVP(m_text_color)
00243 & BOOST_SERIALIZATION_NVP(m_font)
00244 & BOOST_SERIALIZATION_NVP(m_save)
00245 & BOOST_SERIALIZATION_NVP(m_file_filters)
00246 & BOOST_SERIALIZATION_NVP(m_result)
00247 & BOOST_SERIALIZATION_NVP(m_save_str)
00248 & BOOST_SERIALIZATION_NVP(m_open_str)
00249 & BOOST_SERIALIZATION_NVP(m_cancel_str)
00250 & BOOST_SERIALIZATION_NVP(m_malformed_filename_str)
00251 & BOOST_SERIALIZATION_NVP(m_overwrite_prompt_str)
00252 & BOOST_SERIALIZATION_NVP(m_invalid_filename_str)
00253 & BOOST_SERIALIZATION_NVP(m_filename_is_a_directory_str)
00254 & BOOST_SERIALIZATION_NVP(m_file_does_not_exist_str)
00255 & BOOST_SERIALIZATION_NVP(m_device_is_not_ready_str)
00256 & BOOST_SERIALIZATION_NVP(m_three_button_dlg_ok_str)
00257 & BOOST_SERIALIZATION_NVP(m_three_button_dlg_cancel_str)
00258 & BOOST_SERIALIZATION_NVP(m_curr_dir_text)
00259 & BOOST_SERIALIZATION_NVP(m_files_list)
00260 & BOOST_SERIALIZATION_NVP(m_files_edit)
00261 & BOOST_SERIALIZATION_NVP(m_filter_list)
00262 & BOOST_SERIALIZATION_NVP(m_ok_button)
00263 & BOOST_SERIALIZATION_NVP(m_cancel_button)
00264 & BOOST_SERIALIZATION_NVP(m_files_label)
00265 & BOOST_SERIALIZATION_NVP(m_file_types_label)
00266 & BOOST_SERIALIZATION_NVP(m_select_directories)
00267 & BOOST_SERIALIZATION_NVP(m_append_missing_save_extension);
00268
00269 if (Archive::is_loading::value)
00270 ConnectSignals();
00271 }
00272
00273 #endif // _GG_FileDlg_h_