~ubuntu-branches/ubuntu/vivid/mygui/vivid

« back to all changes in this revision

Viewing changes to UnitTests/UnitTest_GraphView/OpenSaveFileDialog.cpp

  • Committer: Package Import Robot
  • Author(s): Scott Howard, Bret Curtis, Scott Howard
  • Date: 2014-09-18 17:57:48 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20140918175748-dd8va78mvpw1jbes
Tags: 3.2.1-1
[ Bret Curtis ]
* Updated license for majority of files from LGPL to Expat (MIT)

[ Scott Howard ]
* New upstream release
* Updated patch to add build option for system GLEW libraries
* All patches accepted upstream except shared_libraries.patch
* Bumped SONAME due to dropped symbols, updated *.symbols and package
  names
* Updated license of debian/* to Expat with permission of all authors
* Don't install Doxygen autogenerated md5 and map files (thanks
  lintian)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*!
 
2
        @file
 
3
        @author         Albert Semenov
 
4
        @date           08/2008
 
5
*/
 
6
#include "Precompiled.h"
 
7
#include "OpenSaveFileDialog.h"
 
8
 
 
9
#include "FileSystemInfo/FileSystemInfo.h"
 
10
 
 
11
namespace tools
 
12
{
 
13
        OpenSaveFileDialog::OpenSaveFileDialog() :
 
14
                Dialog("OpenSaveFileDialog.layout"),
 
15
                mWindow(nullptr),
 
16
                mListFiles(nullptr),
 
17
                mEditFileName(nullptr),
 
18
                mButtonUp(nullptr),
 
19
                mCurrentFolderField(nullptr),
 
20
                mButtonOpenSave(nullptr),
 
21
                mFileMask("*.*"),
 
22
                mFolderMode(false)
 
23
        {
 
24
                assignWidget(mListFiles, "ListFiles");
 
25
                assignWidget(mEditFileName, "EditFileName");
 
26
                assignWidget(mButtonUp, "ButtonUp");
 
27
                assignWidget(mCurrentFolderField, "CurrentFolder");
 
28
                assignWidget(mButtonOpenSave, "ButtonOpenSave");
 
29
 
 
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);
 
37
 
 
38
                mWindow = mMainWidget->castType<MyGUI::Window>();
 
39
                mWindow->eventWindowButtonPressed += MyGUI::newDelegate(this, &OpenSaveFileDialog::notifyWindowButtonPressed);
 
40
 
 
41
                mCurrentFolder = common::getSystemCurrentFolder();
 
42
 
 
43
                mMainWidget->setVisible(false);
 
44
 
 
45
                update();
 
46
        }
 
47
 
 
48
        void OpenSaveFileDialog::notifyWindowButtonPressed(MyGUI::Window* _sender, const std::string& _name)
 
49
        {
 
50
                if (_name == "close")
 
51
                        eventEndDialog(this, false);
 
52
        }
 
53
 
 
54
        void OpenSaveFileDialog::notifyEditSelectAccept(MyGUI::EditBox* _sender)
 
55
        {
 
56
                accept();
 
57
        }
 
58
 
 
59
        void OpenSaveFileDialog::notifyMouseButtonClick(MyGUI::Widget* _sender)
 
60
        {
 
61
                accept();
 
62
        }
 
63
 
 
64
        void OpenSaveFileDialog::notifyUpButtonClick(MyGUI::Widget* _sender)
 
65
        {
 
66
                upFolder();
 
67
        }
 
68
 
 
69
        void OpenSaveFileDialog::setDialogInfo(const MyGUI::UString& _caption, const MyGUI::UString& _button, bool _folderMode)
 
70
        {
 
71
                mFolderMode = _folderMode;
 
72
                mWindow->setCaption(_caption);
 
73
                mButtonOpenSave->setCaption(_button);
 
74
                mEditFileName->setVisible(!_folderMode);
 
75
        }
 
76
 
 
77
        void OpenSaveFileDialog::notifyListChangePosition(MyGUI::ListBox* _sender, size_t _index)
 
78
        {
 
79
                if (_index == MyGUI::ITEM_NONE)
 
80
                {
 
81
                        mEditFileName->setCaption("");
 
82
                }
 
83
                else
 
84
                {
 
85
                        common::FileInfo info = *_sender->getItemDataAt<common::FileInfo>(_index);
 
86
                        if (!info.folder)
 
87
                                mEditFileName->setCaption(info.name);
 
88
                }
 
89
        }
 
90
 
 
91
        void OpenSaveFileDialog::notifyListSelectAccept(MyGUI::ListBox* _sender, size_t _index)
 
92
        {
 
93
                if (_index == MyGUI::ITEM_NONE) return;
 
94
 
 
95
                common::FileInfo info = *_sender->getItemDataAt<common::FileInfo>(_index);
 
96
                if (info.folder)
 
97
                {
 
98
                        if (info.name == L"..")
 
99
                        {
 
100
                                upFolder();
 
101
                        }
 
102
                        else
 
103
                        {
 
104
                                mCurrentFolder = common::concatenatePath (mCurrentFolder.asWStr(), info.name);
 
105
                                update();
 
106
                        }
 
107
                }
 
108
                else
 
109
                {
 
110
                        accept();
 
111
                }
 
112
        }
 
113
 
 
114
        void OpenSaveFileDialog::accept()
 
115
        {
 
116
                if (!mFolderMode)
 
117
                {
 
118
                        mFileName = mEditFileName->getOnlyText();
 
119
                        if (!mFileName.empty())
 
120
                                eventEndDialog(this, true);
 
121
                }
 
122
                else
 
123
                {
 
124
                        if (mListFiles->getIndexSelected() != MyGUI::ITEM_NONE)
 
125
                        {
 
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);
 
129
                        }
 
130
                        eventEndDialog(this, true);
 
131
                }
 
132
        }
 
133
 
 
134
        void OpenSaveFileDialog::upFolder()
 
135
        {
 
136
                size_t index = mCurrentFolder.find_last_of(L"\\/");
 
137
                if (index != std::string::npos)
 
138
                {
 
139
                        mCurrentFolder = mCurrentFolder.substr(0, index);
 
140
                }
 
141
                update();
 
142
        }
 
143
 
 
144
        void OpenSaveFileDialog::setCurrentFolder(const MyGUI::UString& _folder)
 
145
        {
 
146
                mCurrentFolder = _folder.empty() ? MyGUI::UString(common::getSystemCurrentFolder()) : _folder;
 
147
 
 
148
                update();
 
149
        }
 
150
 
 
151
        void OpenSaveFileDialog::update()
 
152
        {
 
153
                if (mCurrentFolder.empty())
 
154
                        mCurrentFolder = "/";
 
155
                mCurrentFolderField->setCaption(mCurrentFolder);
 
156
 
 
157
                mListFiles->removeAllItems();
 
158
 
 
159
                // add all folders first
 
160
                common::VectorFileInfo infos;
 
161
                getSystemFileList(infos, mCurrentFolder, L"*.*");
 
162
 
 
163
                for (common::VectorFileInfo::iterator item = infos.begin(); item != infos.end(); ++item)
 
164
                {
 
165
                        if ((*item).folder)
 
166
                                mListFiles->addItem(L"[" + (*item).name + L"]", *item);
 
167
                }
 
168
 
 
169
                if (!mFolderMode)
 
170
                {
 
171
                        // add files by given mask
 
172
                        infos.clear();
 
173
                        getSystemFileList(infos, mCurrentFolder, mFileMask);
 
174
 
 
175
                        for (common::VectorFileInfo::iterator item = infos.begin(); item != infos.end(); ++item)
 
176
                        {
 
177
                                if (!(*item).folder)
 
178
                                        mListFiles->addItem((*item).name, *item);
 
179
                        }
 
180
                }
 
181
        }
 
182
 
 
183
        void OpenSaveFileDialog::setFileName(const MyGUI::UString& _value)
 
184
        {
 
185
                mFileName = _value;
 
186
                mEditFileName->setCaption(_value);
 
187
        }
 
188
 
 
189
        void OpenSaveFileDialog::setFileMask(const MyGUI::UString& _value)
 
190
        {
 
191
                mFileMask = _value;
 
192
                update();
 
193
        }
 
194
 
 
195
        const MyGUI::UString& OpenSaveFileDialog::getFileMask() const
 
196
        {
 
197
                return mFileMask;
 
198
        }
 
199
 
 
200
        void OpenSaveFileDialog::onDoModal()
 
201
        {
 
202
                update();
 
203
 
 
204
                MyGUI::IntSize windowSize = mMainWidget->getSize();
 
205
                MyGUI::IntSize parentSize = mMainWidget->getParentSize();
 
206
 
 
207
                mMainWidget->setPosition((parentSize.width - windowSize.width) / 2, (parentSize.height - windowSize.height) / 2);
 
208
        }
 
209
 
 
210
        void OpenSaveFileDialog::onEndModal()
 
211
        {
 
212
        }
 
213
 
 
214
        void OpenSaveFileDialog::notifyDirectoryComboAccept(MyGUI::ComboBox* _sender, size_t _index)
 
215
        {
 
216
                setCurrentFolder(_sender->getOnlyText());
 
217
        }
 
218
 
 
219
        const MyGUI::UString& OpenSaveFileDialog::getCurrentFolder() const
 
220
        {
 
221
                return mCurrentFolder;
 
222
        }
 
223
 
 
224
        const MyGUI::UString& OpenSaveFileDialog::getFileName() const
 
225
        {
 
226
                return mFileName;
 
227
        }
 
228
 
 
229
        const MyGUI::UString& OpenSaveFileDialog::getMode() const
 
230
        {
 
231
                return mMode;
 
232
        }
 
233
 
 
234
        void OpenSaveFileDialog::setMode(const MyGUI::UString& _value)
 
235
        {
 
236
                mMode = _value;
 
237
        }
 
238
 
 
239
        void OpenSaveFileDialog::setRecentFolders(const VectorUString& _listFolders)
 
240
        {
 
241
                mCurrentFolderField->removeAllItems();
 
242
 
 
243
                for (VectorUString::const_iterator item = _listFolders.begin(); item != _listFolders.end(); ++ item)
 
244
                        mCurrentFolderField->addItem((*item));
 
245
        }
 
246
 
 
247
        void OpenSaveFileDialog::notifyDirectoryComboChangePosition(MyGUI::ComboBox* _sender, size_t _index)
 
248
        {
 
249
                if (_index != MyGUI::ITEM_NONE)
 
250
                        setCurrentFolder(_sender->getItemNameAt(_index));
 
251
        }
 
252
 
 
253
} // namespace tools