# HG changeset patch # User Nicholas R. Jankowski # Date 1709070304 18000 # Node ID 110595642c1439dd4c8d366be1149070f2f615e4 # Parent f93c00562f70d21750db4aa134200e61fd4eb51d# Parent db71211ac17be19bf60147ef70dba5566c7e7b88 maint: merge default to bytecode-interpreter. diff -r f93c00562f70 -r 110595642c14 libgui/src/files-dock-widget.cc --- a/libgui/src/files-dock-widget.cc Mon Feb 26 23:31:22 2024 -0500 +++ b/libgui/src/files-dock-widget.cc Tue Feb 27 16:45:04 2024 -0500 @@ -27,6 +27,8 @@ # include "config.h" #endif +#include + #include #include #include @@ -39,6 +41,8 @@ #include #include #include +#include +#include #include #include #include @@ -175,6 +179,56 @@ } }; +class cache_file_icon_provider : public QFileIconProvider +{ +public: + cache_file_icon_provider () + { + m_null_icon = QIcon (); + m_file_icon = m_file_icon_provider.icon (QFileIconProvider::File); + m_folder_icon = m_file_icon_provider.icon (QFileIconProvider::Folder); + } + + QIcon icon (IconType ict) const + { + if (ict == QFileIconProvider::File) + return m_file_icon; + else if (ict == QFileIconProvider::Folder) + return m_folder_icon; + else + return m_null_icon; + } + + QIcon icon (const QFileInfo &fi) const + { + static bool no_platform_theme = QIcon::themeName ().isEmpty (); + + if (no_platform_theme) + return m_file_icon_provider.icon (fi); + + QMimeType mime_type = m_db.mimeTypeForFile (fi.absoluteFilePath ()); + QString icon_name = mime_type.iconName (); + auto mime_type_iter = m_icon_cache.find (icon_name); + if (mime_type_iter != m_icon_cache.end ()) + return mime_type_iter->second; + + QIcon icon = QIcon::fromTheme (icon_name); + m_icon_cache.insert ({icon_name, icon}); + return icon; + } + +private: + QIcon m_null_icon; + QIcon m_file_icon; + QIcon m_folder_icon; + + QFileIconProvider m_file_icon_provider; + QMimeDatabase m_db; + static std::map m_icon_cache; +}; + +std::map cache_file_icon_provider::m_icon_cache; + files_dock_widget::files_dock_widget (QWidget *p) : octave_dock_widget ("FilesDockWidget", p) { @@ -313,6 +367,9 @@ QModelIndex rootPathIndex = m_file_system_model->setRootPath (startup_dir.absolutePath ()); + m_file_icon_provider = new cache_file_icon_provider (); + m_file_system_model->setIconProvider (m_file_icon_provider); + // Attach the model to the QTreeView and set the root index m_file_tree_view = new FileTreeViewer (container); m_file_tree_view->setSelectionMode (QAbstractItemView::ExtendedSelection); diff -r f93c00562f70 -r 110595642c14 libgui/src/files-dock-widget.h --- a/libgui/src/files-dock-widget.h Mon Feb 26 23:31:22 2024 -0500 +++ b/libgui/src/files-dock-widget.h Tue Feb 27 16:45:04 2024 -0500 @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -210,6 +211,7 @@ //! The file system model. QFileSystemModel *m_file_system_model; + QFileIconProvider *m_file_icon_provider; //! The file system view. //!@{ diff -r f93c00562f70 -r 110595642c14 libinterp/corefcn/load-save.cc --- a/libinterp/corefcn/load-save.cc Mon Feb 26 23:31:22 2024 -0500 +++ b/libinterp/corefcn/load-save.cc Tue Feb 27 16:45:04 2024 -0500 @@ -1642,12 +1642,13 @@ Force Octave to assume the file is in Octave's binary format. @item -hdf5 -Force Octave to assume the file is in @sc{hdf5} format. -(@sc{hdf5} is a free, portable binary format developed by the National -Center for Supercomputing Applications at the University of Illinois.) -Note that Octave can only read @sc{hdf5} files that were created by itself with -@code{save}. This format is only available if Octave was built with a link to -the @sc{hdf5} libraries. +Force Octave to assume the file is in @sc{hdf5} format. (@sc{hdf5} is a free, +portable binary format developed by the National Center for Supercomputing +Applications at the University of Illinois.) Note that Octave can only +read @sc{hdf5} files that were created by itself with @code{save} or with +@sc{matlab}'s @code{-v7.3} option (which saves in @sc{hdf5} format). This +format is only available if Octave was built with a link to the @sc{hdf5} +libraries. @item -import This option is accepted for backward compatibility but is ignored. @@ -1660,7 +1661,10 @@ @item -v7.3 @itemx -V7.3 @itemx -7.3 -Octave does @strong{not} yet implement @sc{matlab}'s v7.3 binary data format. +Force Octave to assume the file is in @sc{matlab}'s v7.3 binary data format. +As the v7.3 format is an HDF5 based format, those files often can also be +opened with the @qcode{"-hdf5"} option. Note that Octave @strong{can not} +currently save in this format. @item -v7 @itemx -V7 @@ -1754,10 +1758,10 @@ be represented in single precision. @item -hdf5 -Save the data in @sc{hdf5} format. -(HDF5 is a free, portable, binary format developed by the National Center for -Supercomputing Applications at the University of Illinois.) This format is only -available if Octave was built with a link to the @sc{hdf5} libraries. +Save the data in @sc{hdf5} format. (HDF5 is a free, portable, binary format +developed by the National Center for Supercomputing Applications at the +University of Illinois.) This format is only available if Octave was built +with a link to the @sc{hdf5} libraries. @item -float-hdf5 Save the data in @sc{hdf5} format but using only single precision. Use this @@ -1770,7 +1774,8 @@ @item -v7.3 @itemx -V7.3 @itemx -7.3 -Octave does @strong{not} yet implement @sc{matlab}'s v7.3 binary data format. +Octave does @strong{not} yet implement saving in @sc{matlab}'s v7.3 binary +data format. @item -v7 @itemx -V7