Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/dialogs/file/GNEFileSelector.h
169684 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file GNEFileSelector.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Aug 2025
17
///
18
// widget used for file selection
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <vector>
24
#include <utils/foxtools/fxheader.h>
25
26
#include "GNEFileDialog.h"
27
28
// ===========================================================================
29
// class declaration
30
// ===========================================================================
31
32
class MFXComboBoxIcon;
33
class MFXStaticToolTip;
34
class MFXTextFieldIcon;
35
36
// ===========================================================================
37
// class definitions
38
// ===========================================================================
39
40
class GNEFileSelector : public FXVerticalFrame {
41
/// @brief FOX declaration
42
FXDECLARE(GNEFileSelector)
43
44
public:
45
/// @brief Constructor
46
GNEFileSelector(GNEFileDialog* fileDialog, const std::vector<std::string>& extensions,
47
GNEFileDialog::OpenMode openMode, GNEFileDialog::ConfigType configType);
48
49
/// @brief Destructor
50
virtual ~GNEFileSelector();
51
52
/// @brief set path (either file or directory, used for testing)
53
void setPath(const std::string& path);
54
55
/// @brief set file filter (used for testing)
56
void setFilter(const int index);
57
58
/// @brief Change file name
59
void setFilename(const FXString& path);
60
61
/// @brief Return file name, if any
62
std::string getFilename() const;
63
64
/// @brief get file names
65
std::vector<std::string> getFilenames() const;
66
67
/// @brief Return directory
68
std::string getDirectory() const;
69
70
/// @brief get file extension
71
const std::vector<std::string>& getFileExtension() const;
72
73
/// @brief Change directory
74
void setDirectory(const FXString& path);
75
76
/// @brief Set the inter-item spacing (in pixels)
77
void setItemSpace(FXint s);
78
79
/// @brief Return the inter-item spacing (in pixels)
80
FXint getItemSpace() const;
81
82
/// @brief Change file list style
83
void setFileBoxStyle(FXuint style);
84
85
/// @brief Return file list style
86
FXuint getFileBoxStyle() const;
87
88
///@brief Change wildcard matching mode
89
void setMatchMode(FXuint mode);
90
91
/// @brief Return wildcard matching mode
92
FXuint getMatchMode() const;
93
94
/// @brief Return TRUE if showing hidden files
95
FXbool showHiddenFiles() const;
96
97
/// @brief Show or hide hidden files
98
void showHiddenFiles(FXbool showing);
99
100
/// @brief Return TRUE if image preview on
101
FXbool showImages() const;
102
103
/// @brief Show or hide preview images
104
void showImages(FXbool showing);
105
106
/// @brief Return images preview size
107
FXint getImageSize() const;
108
109
/// @brief Change images preview size
110
void setImageSize(FXint size);
111
112
/// @brief get file name entry field
113
MFXTextFieldIcon* getFilenameTextField() const;
114
115
/// @name list of FOX handlers
116
/// @{
117
118
/// @brief Handler for accepting a command.
119
long onCmdAccept(FXObject*, FXSelector, void*);
120
121
/// @brief Handler for filtering items.
122
long onCmdFilter(FXObject*, FXSelector, void*);
123
124
/// @brief Handler for double-clicking an item.
125
long onCmdItemDoubleClicked(FXObject* obj, FXSelector sel, void* ptr);
126
127
/// @brief Handler for selecting an item.
128
long onCmdItemSelected(FXObject*, FXSelector, void*);
129
130
/// @brief Handler for deselecting an item.
131
long onCmdItemDeselected(FXObject*, FXSelector, void*);
132
133
/// @brief Handler for moving up one directory.
134
long onCmdDirectoryUp(FXObject*, FXSelector, void*);
135
136
/// @brief Update handler for enabling/disabling directory up command.
137
long onUpdDirectoryUp(FXObject*, FXSelector, void*);
138
139
/// @brief Handler for directory tree navigation.
140
long onCmdDirTree(FXObject*, FXSelector, void*);
141
142
/// @brief Handler for navigating to the home directory.
143
long onCmdHomeFolder(FXObject*, FXSelector, void*);
144
145
/// @brief Handler for navigating to the work directory.
146
long onCmdWorkFolder(FXObject*, FXSelector, void*);
147
148
/// @brief Handler for navigating to the sumo/netedit config directory.
149
long onCmdConfigFolder(FXObject*, FXSelector, void*);
150
151
/// @brief Handler for opening myBookmarksRecentFiles.
152
long onCmdBookmark(FXObject*, FXSelector, void*);
153
154
/// @brief Handler for visiting a bookmarked location.
155
long onCmdVisit(FXObject*, FXSelector, void*);
156
157
/// @brief Handler for creating a new item or directory.
158
long onCmdNewFolder(FXObject*, FXSelector, void*);
159
160
/// @brief Update handler for enabling/disabling new command.
161
long onUpdNewFolder(FXObject*, FXSelector, void*);
162
163
/// @brief Handler for moving an item.
164
long onCmdMove(FXObject*, FXSelector, void*);
165
166
/// @brief Handler for copying an item.
167
long onCmdCopy(FXObject*, FXSelector, void*);
168
169
/// @brief Handler for deleting an item.
170
long onCmdDelete(FXObject*, FXSelector, void*);
171
172
/// @brief Update handler for enabling/disabling commands based on selection.
173
long onUpdSelected(FXObject*, FXSelector, void*);
174
175
/// @brief Handler for showing the popup menu.
176
long onPopupMenu(FXObject*, FXSelector, void*);
177
178
/// @brief Handler for showing or calculating image size.
179
long onCmdImageSize(FXObject*, FXSelector, void*);
180
181
/// @brief Update handler for enabling/disabling image size command.
182
long onUpdImageSize(FXObject*, FXSelector, void*);
183
184
/// @brief called when user press a key
185
long onKeyPress(FXObject* obj, FXSelector sel, void* ptr);
186
187
/// @}
188
189
protected:
190
/// @brief FOX needs this
191
FOX_CONSTRUCTOR(GNEFileSelector)
192
193
/// @brief Pointer to parent file dialog
194
GNEFileDialog* myFileDialog = nullptr;
195
196
/// @brief open mode
197
const GNEFileDialog::OpenMode myOpenMode = GNEFileDialog::OpenMode::SAVE;
198
199
/// @brief config type
200
const GNEFileDialog::ConfigType myConfigType = GNEFileDialog::ConfigType::NETEDIT;
201
202
/// @brief File list widget
203
FXFileList* myFileSelector = nullptr;
204
205
/// @brief File name entry field
206
MFXTextFieldIcon* myFilenameTextField = nullptr;
207
208
/// @brief Combobox for pattern list
209
MFXComboBoxIcon* myFileFilterComboBox = nullptr;
210
211
/// @brief Menu for myBookmarksRecentFiles
212
FXMenuPane* myBookmarkMenuPane = nullptr;
213
214
/// @brief Directory hierarchy list
215
FXDirBox* myDirBox = nullptr;
216
217
/// @brief Bookmarked places
218
FXRecentFiles myBookmarksRecentFiles = nullptr;
219
220
/// @brief extensions
221
std::vector<std::vector<std::string> > myExtensions;
222
223
private:
224
/// @brief get selected files
225
std::vector<std::string> getSelectedFiles() const;
226
227
/// @brief get selected files that are not directories
228
std::vector<std::string> getSelectedFilesOnly() const;
229
230
/// @brief build bookmarks menu
231
void buildBookmarkMenuPane(FXHorizontalFrame* navigatorHorizontalFrame);
232
233
/// @brief build buttons
234
void buildButtons(FXHorizontalFrame* navigatorHorizontalFrame, MFXStaticToolTip* staticTooltipMenu);
235
236
/// @brief build shortcuts
237
void buildShortcuts();
238
239
/// @brief parse extensions from pattern text
240
void parseExtensions(const std::vector<std::string>& extensions);
241
242
/// @brief disable copy constructor
243
GNEFileSelector(const GNEFileSelector&) = delete;
244
245
/// @brief disable assignment operator
246
GNEFileSelector& operator=(const GNEFileSelector&) = delete;
247
};
248
249
/****************************************************************************/
250
251