File indexing completed on 2024-04-14 04:53:15

0001 /* This file is part of the KDE project
0002     SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org>
0003     SPDX-FileCopyrightText: 2007 Eduardo Robles Elvira <edulix@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef KONQUNDOMANAGER_H
0009 #define KONQUNDOMANAGER_H
0010 
0011 #include "konqprivate_export.h"
0012 #include <QObject>
0013 #include <QString>
0014 #include <QList>
0015 class KonqClosedWindowItem;
0016 class KonqClosedTabItem;
0017 class KonqClosedItem;
0018 class KonqClosedWindowsManager;
0019 class QAction;
0020 
0021 /**
0022  * Note that there is one KonqUndoManager per mainwindow.
0023  * It integrates KonqFileUndoManager (undoing file operations)
0024  * and undoing the closing of tabs.
0025  */
0026 class KONQ_TESTS_EXPORT KonqUndoManager : public QObject
0027 {
0028     Q_OBJECT
0029 public:
0030     /**
0031      * Constructor
0032      * @param parent the parent QObject, also used as the parent widget for KonqFileUndoManager::UiInterface.
0033      */
0034     explicit KonqUndoManager(KonqClosedWindowsManager *cwManager, QWidget *parent);
0035     ~KonqUndoManager() override;
0036 
0037     bool undoAvailable() const;
0038     QString undoText() const;
0039     quint64 newCommandSerialNumber();
0040 
0041     /**
0042      * This method is not constant because when calling it the m_closedItemsList
0043      * might get filled because of delayed initialization.
0044      */
0045     const QList<KonqClosedItem * > &closedItemsList();
0046     void undoClosedItem(int index);
0047     void addClosedTabItem(KonqClosedTabItem *closedTabItem);
0048     /**
0049      * Add current window as a closed window item to other windows
0050      */
0051     void addClosedWindowItem(KonqClosedWindowItem *closedWindowItem);
0052     void updateSupportsFileUndo(bool enable);
0053 
0054 public Q_SLOTS:
0055     void undo();
0056     void clearClosedItemsList(bool onlyInthisWindow = false);
0057     void undoLastClosedItem();
0058     /**
0059      * Opens in a new tab/window the item the user selected from the closed tabs
0060      * menu (by emitting openClosedTab/Window), and takes it from the list.
0061      */
0062     void slotClosedItemsActivated(QAction *action);
0063     void slotAddClosedWindowItem(KonqUndoManager *real_sender,
0064                                  KonqClosedWindowItem *closedWindowItem);
0065 
0066 Q_SIGNALS:
0067     void undoAvailable(bool canUndo);
0068     void undoTextChanged(const QString &text);
0069 
0070     /// Emitted when a closed tab should be reopened
0071     void openClosedTab(const KonqClosedTabItem &);
0072     /// Emitted when a closed window should be reopened
0073     void openClosedWindow(const KonqClosedWindowItem &);
0074     /// Emitted when closedItemsList() has changed.
0075     void closedItemsListChanged();
0076 
0077     /// Emitted to be received in other window instances, uing the singleton
0078     /// communicator
0079     void removeWindowInOtherInstances(KonqUndoManager *real_sender, const
0080                                       KonqClosedWindowItem *closedWindowItem);
0081     void addWindowInOtherInstances(KonqUndoManager *real_sender,
0082                                    KonqClosedWindowItem *closedWindowItem);
0083 private Q_SLOTS:
0084     void slotFileUndoAvailable(bool);
0085     void slotFileUndoTextChanged(const QString &text);
0086 
0087     /**
0088      * Received from other window instances, removes/adds a reference of a
0089      * window from m_closedItemList.
0090      */
0091     void slotRemoveClosedWindowItem(KonqUndoManager *real_sender, const
0092                                     KonqClosedWindowItem *closedWindowItem);
0093 
0094 private:
0095     /// Fill the m_closedItemList with closed windows
0096     void populate();
0097 
0098     QList<KonqClosedItem *> m_closedItemList;
0099     KonqClosedWindowsManager *m_cwManager;
0100     bool m_supportsFileUndo = false;
0101     bool m_populated = false;
0102 };
0103 
0104 #endif /* KONQUNDOMANAGER_H */