Path: blob/main/src/netedit/dialogs/file/GNEFileSelector.h
193833 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2026 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 current directory67std::string getCurrentDirectory() const;6869/// @brief get selected directory70std::string getDirectory() const;7172/// @brief get file extension73const std::vector<std::string>& getFileExtension() const;7475/// @brief Change directory76void setDirectory(const FXString& path);7778/// @brief Set the inter-item spacing (in pixels)79void setItemSpace(FXint s);8081/// @brief Return the inter-item spacing (in pixels)82FXint getItemSpace() const;8384/// @brief Change file list style85void setFileBoxStyle(FXuint style);8687/// @brief Return file list style88FXuint getFileBoxStyle() const;8990///@brief Change wildcard matching mode91void setMatchMode(FXuint mode);9293/// @brief Return wildcard matching mode94FXuint getMatchMode() const;9596/// @brief Return TRUE if showing hidden files97FXbool showHiddenFiles() const;9899/// @brief Show or hide hidden files100void showHiddenFiles(FXbool showing);101102/// @brief Return TRUE if image preview on103FXbool showImages() const;104105/// @brief Show or hide preview images106void showImages(FXbool showing);107108/// @brief Return images preview size109FXint getImageSize() const;110111/// @brief Change images preview size112void setImageSize(FXint size);113114/// @brief get file name entry field115MFXTextFieldIcon* getFilenameTextField() const;116117/// @name list of FOX handlers118/// @{119120/// @brief Handler for accepting a command.121long onCmdAccept(FXObject*, FXSelector, void*);122123/// @brief Handler for filtering items.124long onCmdFilter(FXObject*, FXSelector, void*);125126/// @brief Handler for double-clicking an item.127long onCmdItemDoubleClicked(FXObject* obj, FXSelector sel, void* ptr);128129/// @brief Handler for selecting an item.130long onCmdItemSelected(FXObject*, FXSelector, void*);131132/// @brief Handler for deselecting an item.133long onCmdItemDeselected(FXObject*, FXSelector, void*);134135/// @brief Handler for moving up one directory.136long onCmdDirectoryUp(FXObject*, FXSelector, void*);137138/// @brief Update handler for enabling/disabling directory up command.139long onUpdDirectoryUp(FXObject*, FXSelector, void*);140141/// @brief Handler for directory tree navigation.142long onCmdDirTree(FXObject*, FXSelector, void*);143144/// @brief Handler for navigating to the home directory.145long onCmdHomeFolder(FXObject*, FXSelector, void*);146147/// @brief Handler for navigating to the work directory.148long onCmdWorkFolder(FXObject*, FXSelector, void*);149150/// @brief Handler for navigating to the sumo/netedit config directory.151long onCmdConfigFolder(FXObject*, FXSelector, void*);152153/// @brief Handler for opening myBookmarksRecentFiles.154long onCmdBookmark(FXObject*, FXSelector, void*);155156/// @brief Handler for visiting a bookmarked location.157long onCmdVisit(FXObject*, FXSelector, void*);158159/// @brief Handler for creating a new item or directory.160long onCmdNewFolder(FXObject*, FXSelector, void*);161162/// @brief Update handler for enabling/disabling new command.163long onUpdNewFolder(FXObject*, FXSelector, void*);164165/// @brief Handler for moving an item.166long onCmdMove(FXObject*, FXSelector, void*);167168/// @brief Handler for copying an item.169long onCmdCopy(FXObject*, FXSelector, void*);170171/// @brief Handler for deleting an item.172long onCmdDelete(FXObject*, FXSelector, void*);173174/// @brief Update handler for enabling/disabling commands based on selection.175long onUpdSelected(FXObject*, FXSelector, void*);176177/// @brief Handler for showing the popup menu.178long onPopupMenu(FXObject*, FXSelector, void*);179180/// @brief Handler for showing or calculating image size.181long onCmdImageSize(FXObject*, FXSelector, void*);182183/// @brief Update handler for enabling/disabling image size command.184long onUpdImageSize(FXObject*, FXSelector, void*);185186/// @brief called when user press a key187long onKeyPress(FXObject* obj, FXSelector sel, void* ptr);188189/// @}190191protected:192/// @brief FOX needs this193FOX_CONSTRUCTOR(GNEFileSelector)194195/// @brief Pointer to parent file dialog196GNEFileDialog* myFileDialog = nullptr;197198/// @brief open mode199const GNEFileDialog::OpenMode myOpenMode = GNEFileDialog::OpenMode::SAVE;200201/// @brief config type202const GNEFileDialog::ConfigType myConfigType = GNEFileDialog::ConfigType::NETEDIT;203204/// @brief File list widget205FXFileList* myFileSelector = nullptr;206207/// @brief File name entry field208MFXTextFieldIcon* myFilenameTextField = nullptr;209210/// @brief Combobox for pattern list211MFXComboBoxIcon* myFileFilterComboBox = nullptr;212213/// @brief Menu for myBookmarksRecentFiles214FXMenuPane* myBookmarkMenuPane = nullptr;215216/// @brief Directory hierarchy list217FXDirBox* myDirBox = nullptr;218219/// @brief Bookmarked places220FXRecentFiles myBookmarksRecentFiles;221222/// @brief extensions223std::vector<std::vector<std::string> > myExtensions;224225private:226/// @brief get selected files227std::vector<std::string> getSelectedFiles() const;228229/// @brief get selected files that are not directories230std::vector<std::string> getSelectedFilesOnly() const;231232/// @brief build bookmarks menu233void buildBookmarkMenuPane(FXHorizontalFrame* navigatorHorizontalFrame);234235/// @brief build buttons236void buildButtons(FXHorizontalFrame* navigatorHorizontalFrame, MFXStaticToolTip* staticTooltipMenu);237238/// @brief build shortcuts239void buildShortcuts();240241/// @brief parse extensions from pattern text242void parseExtensions(const std::vector<std::string>& extensions);243244/// @brief disable copy constructor245GNEFileSelector(const GNEFileSelector&) = delete;246247/// @brief disable assignment operator248GNEFileSelector& operator=(const GNEFileSelector&) = delete;249};250251/****************************************************************************/252253254