You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

315 lines
8.2 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**********************************************************************
* @file FileDialogDirectory.h
* @brief 文件选择对话框
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*********************************************************************/
#ifndef _FILEDIALOG_H_
#define _FILEDIALOG_H_
#include "GUIDialogAPI.h"
#include "GUIDialogBase.h"
#include "qfiledialog.h"
#include "qtreewidget.h"
#include <QDirModel>
#define CFDPostSelectFilePath "CFDPostSelectFilePath"
namespace Ui {
class FileDialogDirectory;
}
namespace GUI
{
class GUIDialogAPI FileDialogDirectory : public GUIDialogBase
{
Q_OBJECT;
public:
/**
* @brief 构造函数
* @param parent-父对象指针,默认为空
* @since Version: 1.0.0
**/
FileDialogDirectory(EventOper::ParaWidgetInterfaceOperator* oper, QWidget *parent = nullptr);
/**
* @brief 析构函数
* @since Version: 1.0.0
**/
~FileDialogDirectory();
/**
* @brief 返回当前全路径(包含文件名/文件组名)
* @return 全路径字符串
* @since Version: 1.0.0
**/
QString getCurrentFullPath();
/**
* @brief 判断当前选中的是不是文件组
* @param path-当前钻中的路径
* @return true-是,false-否
* @since Version: 1.0.0
**/
static bool isGourpFiles(const QString path);
/**
* @brief 初始化文件后缀过滤
* @param filterString-文件类型
* @note 文件类型要求格式为 类型解释 (*.文件后缀),例如 plot3D文件(*.xyz *.x)。
* @since Version: 1.0.0
**/
void iniFileFilterType(QString filterString);
/**
* @brief 初始化对话框打开路径
* @param dirStr-默认打开的路径
* @since Version: 1.0.0
**/
void initWin(QString dirStr);
private:
/**
* @brief 初始化Ui内容
* @since Version: 1.0.0
**/
void initUi();
/**
* @brief 获取当前电脑磁盘列表目录
* @since Version: 1.0.0
**/
void SetDirectoryForDrives();
/**
* @brief 打开一个路径
* @param record 是否记录历史路径
* @since Version: 1.0.0
**/
void openFilePath(bool recordHistory);
/**
* @brief 在树型中归类显示
* @since Version: 1.0.0
**/
void BuildFilePathTree();
/**
* @brief 刷新文件列表
* @since Version: 1.0.0
**/
void refreshRightView();
/**
* @brief 根据目录名获取目录下的文件
* @param dirName-目录名
* @since Version: 1.0.0
**/
void GetFileList(QString dirName);
/**
* @brief 根据文件类型中的字符串获取每一个文件过滤类型
* @param filter-过滤描述字符串
* @return 文件后缀过滤集合
* @since Version: 1.0.0
**/
QStringList GetFilterFromString(const QString& filter);
/**
* @brief 路径添加/
* @param curPath-需要添加的路径
* @return 返回添加之后的路径
* @since Version: 1.0.0
**/
QString appendSlash(QString curPath);
/**
* @brief 获取文件扩展名
* @param fileName-文件名
* @return 返回扩展名
* @since Version: 1.0.0
**/
QString GetFileExt(QString fileName);
/**
* @brief 获取文件名的全路径
* @param index-索引
* @return 全路径
* @since Version: 1.0.0
**/
QString FindFullFilename(const QModelIndex& index);
/**
* @brief 按数字前的字符串形成文件分类列表,并在树型中显示
* @since Version: 1.0.0
**/
void enterDirectory();
/**
* @brief 更新过滤文件列表槽函数
* @param filter-过滤描述字符串
* @since Version: 1.0.0
**/
void filterChange(QString filter);
private slots:
;
/**
* @brief 取消槽函数
* @since Version: 1.0.0
**/
void onCancelClicked();
/**
* @brief 确定槽函数
* @since Version: 1.0.0
**/
void onOkClicked();
/**
* @brief 过滤条件改变槽函数
* @since Version: 1.0.0
**/
void onFilterChange(QString filter);
/**
* @brief 执行确定按钮槽函数
* @since Version: 1.0.0
**/
void onDoubleClickedObject(QTreeWidgetItem* pitem, int column);
/**
* @brief 左侧路径区域双击操作(处理路径中的盘符)
* @param model index
* @since Version: 1.0.0
**/
void pathTreeViewDoubleClick(const QModelIndex&);
/**
* @brief 路径树双击操作
* @param model index
* @since Version: 1.0.0
**/
void func_PathTreeViewDoubleClick(const QModelIndex& index);
void unix_PathTreeViewDoubleClick(QString itemName);
/**
* @brief 选择项发生变化触发这个槽,更新显示选中文件
* @since Version: 1.0.0
**/
void onItemSelectionChanged();
/**
* @brief 返回上一级目录
* @since Version: 1.0.0
**/
void onUpPushButtonClicked();
/**
* @brief 后退
* @since Version: 1.0.0
**/
void onBackClicked();
/**
* @brief 前进
* @since Version: 1.0.0
**/
void onFrontClicked();
private:
Ui::FileDialogDirectory* _ui;
/**
* @brief 路径变化记录实现前进后退功能
* @brief 路径变化记录前进、后退路径容器
* @since Version: 1.0.0
**/
QVector<QString> _pathBackVec{};
QVector<QString> _pathFrontVec{};
/**
* @brief 当前选择路径
* @since Version: 1.0.0
**/
QString _currentFilePath;
/**
* @brief 目录模型
* @since Version: 1.0.0
**/
QDirModel* _dirModel;
/**
* @brief 当前电脑"我的文档"的路径
* @brief 当前电脑"桌面"的路径
* @brief Unix操作系统的相关路径
* @since Version: 1.0.0
**/
QString _docPath;
QString _deskTopPath;
QString userPath, rootPath, userName, rootName;
/**
* @brief 模型数据索引
* @since Version: 1.0.0
**/
QModelIndex _currentIndex;
/**
* @brief key为12 ...datvalue为分类下对应的文件列表
* @since Version: 1.0.0
**/
QMap<QString, QVector<QString>> _fileGroup;
/**
* @brief 用于保存一个或多个文件分类,用;分割
* @since Version: 1.0.0
**/
QString _selectionText;
/**
* @brief 用于保存文件类型列表
* @since Version: 1.0.0
**/
QStringList _filterList;
/**
* @brief 文件列表
* @since Version: 1.0.0
**/
QTreeWidget* _fileTree;
/**
* @brief 根节点
* @since Version: 1.0.0
**/
QTreeWidgetItem* _builtinItem;
/**
* @brief key为12@data,value为扩展名dat,这样用是因为相同文件名,扩展名可能会不同,属于不同的分类
* @since Version: 1.0.0
**/
QHash<QString, int> _headFile;
/**
* @brief 某个文件夹下的所有文件列表
* @since Version: 1.0.0
**/
QVector<QString> _fileList;
/**
* @brief 保存左侧路径QTreeView双击后的文件路径
* @since Version: 1.0.0
**/
QString _treeWidgetFilename;
/**
* @brief 字符串常量
* @since Version: 1.0.0
**/
const static QString fatherNodeText;
const static QString splitExt;
};
}
#endif