OROCHI
 
Loading...
Searching...
No Matches
GxGuiFileDialog.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13#if GX_DEVELOP
14
15GX_CORE_NAMESPACE_BEGIN()
16
17//===========================================================================
19//===========================================================================
20/* GUI内訳
21 ┏GxGuiFileDialog ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
22 ┃┌GxGuiPropertyParameter* _pGuiFilePath ─────────────────┐┃
23 ┃└────────────────────────────────────┘┃
24 ┃┌─GxGuiForm _pForm───────────────────────────┐┃
25 ┃│┌GxGuiButton*────┐┌─GxGuiFileList ──────────────┐│┃
26 ┃│└──────────┘│ ││┃
27 ┃│┌GxGuiButton*────┐│ ││┃
28 ┃│└──────────┘│ ││┃
29 ┃│┌GxGuiButton*────┐│ ││┃
30 ┃│└──────────┘│ ││┃
31 ┃│┌GxGuiButton*────┐│ ││┃
32 ┃│└──────────┘│ ││┃
33 ┃│┌GxGuiButton*────┐│ ││┃
34 ┃│└──────────┘└──────────────────────┘│┃
35 ┃└────────────────────────────────────┘┃
36 ┃┌GxGuiPropertyParameter* _pGuiFileName ┐┌GxGuiButton* _pGuiSaveButton ┐┃
37 ┃└───────────────────┘└───────────────┘┃
38 ┃┌GxGuiPropertyComboBoxEnum* _pGuiFileFilter──┐┌GxGuiButton* _pGuiCancelButton┐┃
39 ┃└───────────────────┘└───────────────┘┃
40 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
41*/
42
43class GxGuiForm;
44class GxGuiButton;
45class GxGuiFileList;
46class GxGuiFileInformation;
47class GxGuiPropertyComboBoxEnum;
48
49class GxGuiFileDialog : public GxGuiWindow
50{
51 //-----------------------------------------------------------
53 //-----------------------------------------------------------
55public:
56 GX_RTTI_CLASS(GxGuiFileDialog, GxGuiWindow)
57 // ClassBaseReference継承クラス用禁止宣言
59
60
61 enum class MODE
62 {
63 OPEN,
64 SAVE
65 };
66
67private:
68 class GuiListItem;
70 static const u32 BUTTON_OK_WIDTH;
72 static const u32 BUTTON_OK_HEIGHT;
73
75 static const u32 BUTTON_WIDTH;
77 static const u32 BUTTON_HEIGHT;
78
80 static const u32 COLUMN_FILENAME_WIDTH;
82 static const u32 COLUMN_SIZE_WIDTH;
84 static const u32 COLUMN_LAST_WRITE_TIME_STRING;
85
87 static constexpr u32 FILE_INFO_NUM = GxMath::VALUE_1K;
89 static constexpr u32 FILTER_NUM = GxMath::VALUE_8;
91 static const GxSize WINDOW_MIN_SIZE;
92
94 //-----------------------------------------------------------
96 //-----------------------------------------------------------
98public:
100 GxGuiFileDialog(void);
101
103 GxGuiFileDialog( GxString* pArgumentPath, MODE mode );
104
106 GxGuiFileDialog( GxString* pArgumentPath, MODE mode, const GxProperty& okEvent );
107
109 void cleanup( void ) override;
110
112 b32 initialize(void) override;
113
115 //-----------------------------------------------------------
117 //-----------------------------------------------------------
119public:
121 void update( void ) override;
122
124 void addFilter(GX_CSTR pDisplay, GX_CSTR pFilter);
126 GX_FORCE_INLINE void addFilter(const GxString& display, const GxString& filter) { addFilter(display.getString(), filter.getString()); }
127
129 void clearFilter(void);
130
131 // ディレクトリに入る。ディレクトリではない場合は false を返す
132 b32 enterToDirectory(void);
133
134 // 開くイベント
135 void eventOpen(void);
136private:
138 void updateFileInformation(void);
139
141 void clearFileInformation(void);
142
144 void addFileInformation(GxGuiFileInformation* pGuiFileInformation);
145
147 b32 isThroughFilter(const GxString& name);
148
150 void selectFile(void);
151
152 // キャンセルイベント
153 void eventCancel(void) { close(); }
154
155 // 上書き確認OK
156 void eventFileOverWriteOk(void);
157
158 // 上書き確認キャンセル
159 constexpr void eventFileOverWriteCancel(void){}
160
161 // 親のディレクトリへ移動
162 void eventGoParentDirectory(void);
163
164 // 1つ前のパスへ
165 void eventGoPreviousDirectory(void);
166
168 void eventShowRecentDirectory(void);
170 void getFolderFromFilename(GxString& folder);
172 void eventGoRecentDirectory(void* pFavorite);
174 void eventShowFavoriteDirectory(void);
176 void eventGoFavoriteDirectory(void* pFavorite);
178 void eventAddFavoriteDirectory(void* pPath);
180 void eventRemoveFavoriteDirectory(void* pPath);
182 constexpr void eventDummy(void) {}
183
185 void eventGoOriginalDirectory(void);
186
188 void eventGoFinalizedCommonDirectory(void);
189
191 void eventGoFinalizedNativeDirectory(void);
192
193 // path履歴セット
194 void pushPathRecord(const GxString& path);
195
196 // path履歴取得
197 GxString popPathRecord(void);
198
199 // fileが存在するか?
200 b32 isExistFile(const GxString& fileName);
201
203 b32 moveDirectory(const GxString& path, b32 pushRecord = true);
204
205protected:
207 void onSize( const GxSize& size ) override;
208
210 void onClick( const GxPoint2& position, u32 button ) override;
211
213 void onKeyDown( GxKeyboard::KEY key ) override;
214
218 GxSize getClampedRegionSize( const GxSize& size ) const override;
219
221 //-----------------------------------------------------------
223 //-----------------------------------------------------------
225protected:
226 GxString _fileName;
227 GxString _dialogPath;
228 GxString _editDialogPath;
229 GxString* _pArgumentPath;
230
231 GxProperty _okEvent;
232
233 GxGuiForm* _pGuiForm;
234
235 GxGuiButton* _pGuiParentDirectoryButton;
236 GxGuiButton* _pGuiPreviousDirectoryButton;
237 GxGuiButton* _pGuiRecentFolderButton;
238 GxGuiButton* _pGuiFavoriteFolderButton;
239 GxGuiButton* _pGuiOriginalDirectoryButton;
240 GxGuiButton* _pGuiFinalizedCommonDirectoryButton;
241 GxGuiButton* _pGuiFinalizedNativeDirectoryButton;
242 GxGuiFileList* _pGuiFileList;
243
244 GxGuiPropertyParameter* _pGuiFilePath;
245 GxGuiPropertyParameter* _pGuiFileName;
246 GxGuiPropertyComboBoxEnum* _pGuiFileFilter;
247 GxGuiButton* _pGuiSaveButton;
248 GxGuiButton* _pGuiCancelButton;
249 GxArrayClassBase _fileInformationArray;
250 MODE _mode;
251 GxList _filePathRecordList;
252
253 // フィルタ登録用
254 u32 _filter;
255 u32 _filterOld;
256 GX_ENUM _filterEnum[ FILTER_NUM ];
257
258 // フィルタ内容
259 u32 _filterNum;
260 GxString _filterDisplay[ FILTER_NUM ];
261 GxString _filterString[ FILTER_NUM ];
262 GxString* _pRecentFolders;
263
265};
266
267//===========================================================================
269//===========================================================================
270class GxGuiFileList : public GxGuiPropertyTable
271{
272 //-----------------------------------------------------------
274 //-----------------------------------------------------------
276public:
277 GX_RTTI_CLASS(GxGuiFileList, GxGuiPropertyTable)
278 // ClassBaseReference継承クラス用禁止宣言
280
281
282 //-----------------------------------------------------------
284 //-----------------------------------------------------------
286public:
288 GxGuiFileList(void);
290 GxGuiFileList(const GxProperty& property, GxTypedObject* pObject, u32 index = 0 );
291
293 b32 initialize( void ) override;
294
296 //-----------------------------------------------------------
298 //-----------------------------------------------------------
300public:
302 constexpr void setGuiFileDialog( GxGuiFileDialog* pGuiFileDialog ){ _pGuiFileDialog = pGuiFileDialog; }
303
305 constexpr GxGuiFileDialog* getGuiFileDialog( void ) const { return _pGuiFileDialog; }
306
308 //-----------------------------------------------------------
310 //-----------------------------------------------------------
312protected:
314 void onDoubleClick( const GxPoint2& position, u32 button ) override;
315
317 void onKeyDown( GxKeyboard::KEY key ) override;
318
320 void eventOpenFileOrDirectory( void );
321
323 //-----------------------------------------------------------
325 //-----------------------------------------------------------
327
328protected:
329 GxGuiFileDialog* _pGuiFileDialog;
330
332};
333
334//===========================================================================
336//===========================================================================
337class GxGuiFileInformation : public GxFileInformation
338{
339 //-----------------------------------------------------------
341 //-----------------------------------------------------------
343public:
344 GX_RTTI_CLASS(GxGuiFileInformation,GxFileInformation)
345
346
347 //----------------------------------------
349 //----------------------------------------
351public:
353 GxGuiFileInformation( void ):_pGuiFileDialog(nullptr){}
355 GxGuiFileInformation( const GxFileInformation& fileInformation, GxGuiFileDialog* pGuiFileDialog );
356
358 //-----------------------------------------------------------
360 //-----------------------------------------------------------
362public:
364 constexpr void setGuiFileDialog( GxGuiFileDialog* pGuiFileDialog ){ _pGuiFileDialog = pGuiFileDialog; }
366 constexpr GxGuiFileDialog* getGuiFileDialog( void ) const { return _pGuiFileDialog; }
367
369 //-----------------------------------------------------------
371 //-----------------------------------------------------------
373
374#if GX_DEVELOP
376 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0);
377#endif //GX_DEVELOP
378
380 //-----------------------------------------------------------
382 //-----------------------------------------------------------
384private:
385 GxGuiFileDialog* _pGuiFileDialog;
386
388};
389
390
391//===========================================================================
393//===========================================================================
394class GxGuiFileName : public GxGuiPropertyParameter
395{
396 //-----------------------------------------------------------
398 //-----------------------------------------------------------
400public:
401 GX_RTTI_CLASS(GxGuiFileName,GxGuiPropertyParameter)
402 // ClassBaseReference継承クラス用禁止宣言
404
405
406 //----------------------------------------
408 //----------------------------------------
410public:
412 GxGuiFileName(void);
413
415 GxGuiFileName(const GxProperty& propertyData, GxTypedObject* pBase, const GxRtti& rtti, u32 index = 0, NAME_TYPE nameType = NAME_TYPE::LEFT, PARAMETER_MODE mode = PARAMETER_MODE::INT);
416
418 //-----------------------------------------------------------
420 //-----------------------------------------------------------
422public:
425 constexpr void setIconHandle( GX_HANDLE iconHandle ){ _iconHandle = iconHandle; }
426
428 void onNoClientDraw( void ) override;
429
431 GxRect calculateClientRect( const GxRect& clientRect ) const override;
432
434 //-----------------------------------------------------------
436 //-----------------------------------------------------------
438private:
439 GX_HANDLE _iconHandle;
440
442};
443
444GX_CORE_NAMESPACE_END()
445
446#endif // GX_DEVELOP
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
void GxTypedObject
その他
Definition GxDefine.h:213
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
配列クラス
Definition GxArrayClassBase.h:18
ファイル情報クラス
Definition GxFile.h:19
連結リストクラス
Definition GxList.h:18
static constexpr u32 VALUE_1K
1K
Definition GxMath.h:129
static constexpr u32 VALUE_8
8
Definition GxMath.h:122
プロパティクラス
Definition GxProperty.h:48
実行時型情報クラス
Definition GxRtti.h:154
GUI用
Definition GxDefine.h:194
座標
Definition GxStruct.h:867
矩形
Definition GxStruct.h:951
サイズ
Definition GxStruct.h:730
文字列型クラス
Definition GxString.h:18
GX_FORCE_INLINE GX_STR getString(void)
文字列取得
Definition GxString.h:165
32bitブーリアン
Definition GxDefine.h:173