/* * Strawberry Music Player * This file was part of Clementine. * Copyright 2010, David Sansome * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Strawberry is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Strawberry. If not, see . * */ #ifndef FILEVIEW_H #define FILEVIEW_H #include #include #include #include #include #include #include #include #include "core/scoped_ptr.h" #include "core/shared_ptr.h" #include "core/song.h" class QMimeData; class QFileSystemModel; class QFileIconProvider; class QUndoStack; class QKeyEvent; class QShowEvent; class MusicStorage; class TaskManager; class Ui_FileView; class FileView : public QWidget { Q_OBJECT public: explicit FileView(QWidget *parent = nullptr); ~FileView() override; static const char *kFileFilter; void ReloadSettings(); void SetPath(const QString &path); void SetTaskManager(SharedPtr task_manager); protected: void showEvent(QShowEvent*) override; void keyPressEvent(QKeyEvent *e) override; signals: void PathChanged(const QString &path); void AddToPlaylist(QMimeData *data); void CopyToCollection(const QList &urls); void MoveToCollection(const QList &urls); void CopyToDevice(const QList &urls); void EditTags(const QList &urls); private slots: void FileUp(); void FileHome(); void ChangeFilePath(const QString &new_path); void ItemActivated(const QModelIndex &idx); void ItemDoubleClick(const QModelIndex &idx); void Delete(const QStringList &filenames); void DeleteFinished(const SongList &songs_with_errors); private: void ChangeFilePathWithoutUndo(const QString &new_path); private: class UndoCommand : public QUndoCommand { public: UndoCommand(FileView *view, const QString &new_path); QString undo_path() const { return old_state_.path; } void undo() override; void redo() override; private: struct State { State() : scroll_pos(-1) {} QString path; QModelIndex index; int scroll_pos; }; FileView *view_; State old_state_; State new_state_; }; Ui_FileView *ui_; QFileSystemModel *model_; QUndoStack *undo_stack_; SharedPtr task_manager_; SharedPtr storage_; QString lazy_set_path_; QStringList filter_list_; ScopedPtr file_icon_provider_; }; #endif // FILEVIEW_H