Path: blob/main/src/netedit/dialogs/file/GNEFileSelector.h
169684 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEFileSelector.h14/// @author Pablo Alvarez Lopez15/// @date Aug 202516///17// widget used for file selection18/****************************************************************************/19#pragma once20#include <config.h>2122#include <vector>23#include <utils/foxtools/fxheader.h>2425#include "GNEFileDialog.h"2627// ===========================================================================28// class declaration29// ===========================================================================3031class MFXComboBoxIcon;32class MFXStaticToolTip;33class MFXTextFieldIcon;3435// ===========================================================================36// class definitions37// ===========================================================================3839class GNEFileSelector : public FXVerticalFrame {40/// @brief FOX declaration41FXDECLARE(GNEFileSelector)4243public:44/// @brief Constructor45GNEFileSelector(GNEFileDialog* fileDialog, const std::vector<std::string>& extensions,46GNEFileDialog::OpenMode openMode, GNEFileDialog::ConfigType configType);4748/// @brief Destructor49virtual ~GNEFileSelector();5051/// @brief set path (either file or directory, used for testing)52void setPath(const std::string& path);5354/// @brief set file filter (used for testing)55void setFilter(const int index);5657/// @brief Change file name58void setFilename(const FXString& path);5960/// @brief Return file name, if any61std::string getFilename() const;6263/// @brief get file names64std::vector<std::string> getFilenames() const;6566/// @brief Return directory67std::string getDirectory() const;6869/// @brief get file extension70const std::vector<std::string>& getFileExtension() const;7172/// @brief Change directory73void setDirectory(const FXString& path);7475/// @brief Set the inter-item spacing (in pixels)76void setItemSpace(FXint s);7778/// @brief Return the inter-item spacing (in pixels)79FXint getItemSpace() const;8081/// @brief Change file list style82void setFileBoxStyle(FXuint style);8384/// @brief Return file list style85FXuint getFileBoxStyle() const;8687///@brief Change wildcard matching mode88void setMatchMode(FXuint mode);8990/// @brief Return wildcard matching mode91FXuint getMatchMode() const;9293/// @brief Return TRUE if showing hidden files94FXbool showHiddenFiles() const;9596/// @brief Show or hide hidden files97void showHiddenFiles(FXbool showing);9899/// @brief Return TRUE if image preview on100FXbool showImages() const;101102/// @brief Show or hide preview images103void showImages(FXbool showing);104105/// @brief Return images preview size106FXint getImageSize() const;107108/// @brief Change images preview size109void setImageSize(FXint size);110111/// @brief get file name entry field112MFXTextFieldIcon* getFilenameTextField() const;113114/// @name list of FOX handlers115/// @{116117/// @brief Handler for accepting a command.118long onCmdAccept(FXObject*, FXSelector, void*);119120/// @brief Handler for filtering items.121long onCmdFilter(FXObject*, FXSelector, void*);122123/// @brief Handler for double-clicking an item.124long onCmdItemDoubleClicked(FXObject* obj, FXSelector sel, void* ptr);125126/// @brief Handler for selecting an item.127long onCmdItemSelected(FXObject*, FXSelector, void*);128129/// @brief Handler for deselecting an item.130long onCmdItemDeselected(FXObject*, FXSelector, void*);131132/// @brief Handler for moving up one directory.133long onCmdDirectoryUp(FXObject*, FXSelector, void*);134135/// @brief Update handler for enabling/disabling directory up command.136long onUpdDirectoryUp(FXObject*, FXSelector, void*);137138/// @brief Handler for directory tree navigation.139long onCmdDirTree(FXObject*, FXSelector, void*);140141/// @brief Handler for navigating to the home directory.142long onCmdHomeFolder(FXObject*, FXSelector, void*);143144/// @brief Handler for navigating to the work directory.145long onCmdWorkFolder(FXObject*, FXSelector, void*);146147/// @brief Handler for navigating to the sumo/netedit config directory.148long onCmdConfigFolder(FXObject*, FXSelector, void*);149150/// @brief Handler for opening myBookmarksRecentFiles.151long onCmdBookmark(FXObject*, FXSelector, void*);152153/// @brief Handler for visiting a bookmarked location.154long onCmdVisit(FXObject*, FXSelector, void*);155156/// @brief Handler for creating a new item or directory.157long onCmdNewFolder(FXObject*, FXSelector, void*);158159/// @brief Update handler for enabling/disabling new command.160long onUpdNewFolder(FXObject*, FXSelector, void*);161162/// @brief Handler for moving an item.163long onCmdMove(FXObject*, FXSelector, void*);164165/// @brief Handler for copying an item.166long onCmdCopy(FXObject*, FXSelector, void*);167168/// @brief Handler for deleting an item.169long onCmdDelete(FXObject*, FXSelector, void*);170171/// @brief Update handler for enabling/disabling commands based on selection.172long onUpdSelected(FXObject*, FXSelector, void*);173174/// @brief Handler for showing the popup menu.175long onPopupMenu(FXObject*, FXSelector, void*);176177/// @brief Handler for showing or calculating image size.178long onCmdImageSize(FXObject*, FXSelector, void*);179180/// @brief Update handler for enabling/disabling image size command.181long onUpdImageSize(FXObject*, FXSelector, void*);182183/// @brief called when user press a key184long onKeyPress(FXObject* obj, FXSelector sel, void* ptr);185186/// @}187188protected:189/// @brief FOX needs this190FOX_CONSTRUCTOR(GNEFileSelector)191192/// @brief Pointer to parent file dialog193GNEFileDialog* myFileDialog = nullptr;194195/// @brief open mode196const GNEFileDialog::OpenMode myOpenMode = GNEFileDialog::OpenMode::SAVE;197198/// @brief config type199const GNEFileDialog::ConfigType myConfigType = GNEFileDialog::ConfigType::NETEDIT;200201/// @brief File list widget202FXFileList* myFileSelector = nullptr;203204/// @brief File name entry field205MFXTextFieldIcon* myFilenameTextField = nullptr;206207/// @brief Combobox for pattern list208MFXComboBoxIcon* myFileFilterComboBox = nullptr;209210/// @brief Menu for myBookmarksRecentFiles211FXMenuPane* myBookmarkMenuPane = nullptr;212213/// @brief Directory hierarchy list214FXDirBox* myDirBox = nullptr;215216/// @brief Bookmarked places217FXRecentFiles myBookmarksRecentFiles = nullptr;218219/// @brief extensions220std::vector<std::vector<std::string> > myExtensions;221222private:223/// @brief get selected files224std::vector<std::string> getSelectedFiles() const;225226/// @brief get selected files that are not directories227std::vector<std::string> getSelectedFilesOnly() const;228229/// @brief build bookmarks menu230void buildBookmarkMenuPane(FXHorizontalFrame* navigatorHorizontalFrame);231232/// @brief build buttons233void buildButtons(FXHorizontalFrame* navigatorHorizontalFrame, MFXStaticToolTip* staticTooltipMenu);234235/// @brief build shortcuts236void buildShortcuts();237238/// @brief parse extensions from pattern text239void parseExtensions(const std::vector<std::string>& extensions);240241/// @brief disable copy constructor242GNEFileSelector(const GNEFileSelector&) = delete;243244/// @brief disable assignment operator245GNEFileSelector& operator=(const GNEFileSelector&) = delete;246};247248/****************************************************************************/249250251