6
#include "Precompiled.h"
7
#include "OpenSaveFileDialog.h"
9
#include "FileSystemInfo/FileSystemInfo.h"
13
OpenSaveFileDialog::OpenSaveFileDialog() :
14
Dialog("OpenSaveFileDialog.layout"),
17
mEditFileName(nullptr),
19
mCurrentFolderField(nullptr),
20
mButtonOpenSave(nullptr),
24
assignWidget(mListFiles, "ListFiles");
25
assignWidget(mEditFileName, "EditFileName");
26
assignWidget(mButtonUp, "ButtonUp");
27
assignWidget(mCurrentFolderField, "CurrentFolder");
28
assignWidget(mButtonOpenSave, "ButtonOpenSave");
30
mListFiles->eventListChangePosition += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyListChangePosition);
31
mListFiles->eventListSelectAccept += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyListSelectAccept);
32
mEditFileName->eventEditSelectAccept += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyEditSelectAccept);
33
mButtonUp->eventMouseButtonClick += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyUpButtonClick);
34
mCurrentFolderField->eventComboAccept += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyDirectoryComboAccept);
35
mCurrentFolderField->eventComboChangePosition += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyDirectoryComboChangePosition);
36
mButtonOpenSave->eventMouseButtonClick += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyMouseButtonClick);
38
mWindow = mMainWidget->castType<MyGUI::Window>();
39
mWindow->eventWindowButtonPressed += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyWindowButtonPressed);
41
mCurrentFolder = common::getSystemCurrentFolder();
43
mMainWidget->setVisible(false);
48
void OpenSaveFileDialog::notifyWindowButtonPressed(MyGUI::Window* _sender, const std::string& _name)
51
eventEndDialog(this, false);
54
void OpenSaveFileDialog::notifyEditSelectAccept(MyGUI::EditBox* _sender)
59
void OpenSaveFileDialog::notifyMouseButtonClick(MyGUI::Widget* _sender)
64
void OpenSaveFileDialog::notifyUpButtonClick(MyGUI::Widget* _sender)
69
void OpenSaveFileDialog::setDialogInfo(const MyGUI::UString& _caption, const MyGUI::UString& _button, bool _folderMode)
71
mFolderMode = _folderMode;
72
mWindow->setCaption(_caption);
73
mButtonOpenSave->setCaption(_button);
74
mEditFileName->setVisible(!_folderMode);
77
void OpenSaveFileDialog::notifyListChangePosition(MyGUI::ListBox* _sender, size_t _index)
79
if (_index == MyGUI::ITEM_NONE)
81
mEditFileName->setCaption("");
85
common::FileInfo info = *_sender->getItemDataAt<common::FileInfo>(_index);
87
mEditFileName->setCaption(info.name);
91
void OpenSaveFileDialog::notifyListSelectAccept(MyGUI::ListBox* _sender, size_t _index)
93
if (_index == MyGUI::ITEM_NONE) return;
95
common::FileInfo info = *_sender->getItemDataAt<common::FileInfo>(_index);
98
if (info.name == L"..")
104
mCurrentFolder = common::concatenatePath (mCurrentFolder.asWStr(), info.name);
114
void OpenSaveFileDialog::accept()
118
mFileName = mEditFileName->getOnlyText();
119
if (!mFileName.empty())
120
eventEndDialog(this, true);
124
if (mListFiles->getIndexSelected() != MyGUI::ITEM_NONE)
126
common::FileInfo info = *mListFiles->getItemDataAt<common::FileInfo>(mListFiles->getIndexSelected());
127
if (!common::isParentDir(info.name.c_str()))
128
mCurrentFolder = common::concatenatePath (mCurrentFolder.asWStr(), info.name);
130
eventEndDialog(this, true);
134
void OpenSaveFileDialog::upFolder()
136
size_t index = mCurrentFolder.find_last_of(L"\\/");
137
if (index != std::string::npos)
139
mCurrentFolder = mCurrentFolder.substr(0, index);
144
void OpenSaveFileDialog::setCurrentFolder(const MyGUI::UString& _folder)
146
mCurrentFolder = _folder.empty() ? MyGUI::UString(common::getSystemCurrentFolder()) : _folder;
151
void OpenSaveFileDialog::update()
153
if (mCurrentFolder.empty())
154
mCurrentFolder = "/";
155
mCurrentFolderField->setCaption(mCurrentFolder);
157
mListFiles->removeAllItems();
159
// add all folders first
160
common::VectorFileInfo infos;
161
getSystemFileList(infos, mCurrentFolder, L"*.*");
163
for (common::VectorFileInfo::iterator item = infos.begin(); item != infos.end(); ++item)
166
mListFiles->addItem(L"[" + (*item).name + L"]", *item);
171
// add files by given mask
173
getSystemFileList(infos, mCurrentFolder, mFileMask);
175
for (common::VectorFileInfo::iterator item = infos.begin(); item != infos.end(); ++item)
178
mListFiles->addItem((*item).name, *item);
183
void OpenSaveFileDialog::setFileName(const MyGUI::UString& _value)
186
mEditFileName->setCaption(_value);
189
void OpenSaveFileDialog::setFileMask(const MyGUI::UString& _value)
195
const MyGUI::UString& OpenSaveFileDialog::getFileMask() const
200
void OpenSaveFileDialog::onDoModal()
204
MyGUI::IntSize windowSize = mMainWidget->getSize();
205
MyGUI::IntSize parentSize = mMainWidget->getParentSize();
207
mMainWidget->setPosition((parentSize.width - windowSize.width) / 2, (parentSize.height - windowSize.height) / 2);
210
void OpenSaveFileDialog::onEndModal()
214
void OpenSaveFileDialog::notifyDirectoryComboAccept(MyGUI::ComboBox* _sender, size_t _index)
216
setCurrentFolder(_sender->getOnlyText());
219
const MyGUI::UString& OpenSaveFileDialog::getCurrentFolder() const
221
return mCurrentFolder;
224
const MyGUI::UString& OpenSaveFileDialog::getFileName() const
229
const MyGUI::UString& OpenSaveFileDialog::getMode() const
234
void OpenSaveFileDialog::setMode(const MyGUI::UString& _value)
239
void OpenSaveFileDialog::setRecentFolders(const VectorUString& _listFolders)
241
mCurrentFolderField->removeAllItems();
243
for (VectorUString::const_iterator item = _listFolders.begin(); item != _listFolders.end(); ++ item)
244
mCurrentFolderField->addItem((*item));
247
void OpenSaveFileDialog::notifyDirectoryComboChangePosition(MyGUI::ComboBox* _sender, size_t _index)
249
if (_index != MyGUI::ITEM_NONE)
250
setCurrentFolder(_sender->getItemNameAt(_index));