File indexing completed on 2024-04-21 04:58:15

0001 /*
0002     This file is part of the KDE project
0003     SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef KONQ_FRAMEVISITOR_H
0009 #define KONQ_FRAMEVISITOR_H
0010 
0011 #include <QList>
0012 #include "konqprivate_export.h"
0013 
0014 class KonqFrameBase;
0015 class KonqView;
0016 class KonqFrame;
0017 class KonqFrameContainer;
0018 class KonqFrameTabs;
0019 class KonqMainWindow;
0020 
0021 class KonqFrameVisitor
0022 {
0023 public:
0024     enum VisitorBehavior { VisitAllTabs = 1, VisitCurrentTabOnly = 2 };
0025     KonqFrameVisitor(VisitorBehavior behavior = VisitAllTabs) : m_behavior(behavior) {}
0026     virtual ~KonqFrameVisitor() {}
0027     virtual bool visit(KonqFrame *)
0028     {
0029         return true;
0030     }
0031     virtual bool visit(KonqFrameContainer *)
0032     {
0033         return true;
0034     }
0035     virtual bool visit(KonqFrameTabs *)
0036     {
0037         return true;
0038     }
0039     virtual bool visit(KonqMainWindow *)
0040     {
0041         return true;
0042     }
0043 
0044     virtual bool endVisit(KonqFrameContainer *)
0045     {
0046         return true;
0047     }
0048     virtual bool endVisit(KonqFrameTabs *)
0049     {
0050         return true;
0051     }
0052     virtual bool endVisit(KonqMainWindow *)
0053     {
0054         return true;
0055     }
0056 
0057     bool visitAllTabs() const
0058     {
0059         return m_behavior & VisitAllTabs;
0060     }
0061 private:
0062     VisitorBehavior m_behavior;
0063 };
0064 
0065 /**
0066  * Collects all views, recursively.
0067  */
0068 class KONQ_TESTS_EXPORT KonqViewCollector : public KonqFrameVisitor
0069 {
0070 public:
0071     static QList<KonqView *> collect(KonqFrameBase *topLevel);
0072     bool visit(KonqFrame *frame) override;
0073     bool visit(KonqFrameContainer *) override
0074     {
0075         return true;
0076     }
0077     bool visit(KonqFrameTabs *) override
0078     {
0079         return true;
0080     }
0081     bool visit(KonqMainWindow *) override
0082     {
0083         return true;
0084     }
0085 private:
0086     QList<KonqView *> m_views;
0087 };
0088 
0089 /**
0090  * Collects all views that can currently be linked; this excludes invisible tabs (#116714).
0091  */
0092 class KonqLinkableViewsCollector : public KonqFrameVisitor
0093 {
0094 public:
0095     static QList<KonqView *> collect(KonqFrameBase *topLevel);
0096     bool visit(KonqFrame *frame) override;
0097     bool visit(KonqFrameContainer *) override
0098     {
0099         return true;
0100     }
0101     bool visit(KonqFrameTabs *) override
0102     {
0103         return true;
0104     }
0105     bool visit(KonqMainWindow *) override
0106     {
0107         return true;
0108     }
0109 private:
0110     KonqLinkableViewsCollector() : KonqFrameVisitor(VisitCurrentTabOnly) {}
0111     QList<KonqView *> m_views;
0112 };
0113 
0114 /**
0115  * Returns the list of views that have modified data in them,
0116  * for the warning-before-closing-a-tab.
0117  */
0118 class KonqModifiedViewsCollector : public KonqFrameVisitor
0119 {
0120 public:
0121     static QList<KonqView *> collect(KonqFrameBase *topLevel);
0122     bool visit(KonqFrame *frame) override;
0123     bool visit(KonqFrameContainer *) override
0124     {
0125         return true;
0126     }
0127     bool visit(KonqFrameTabs *) override
0128     {
0129         return true;
0130     }
0131     bool visit(KonqMainWindow *) override
0132     {
0133         return true;
0134     }
0135 private:
0136     QList<KonqView *> m_views;
0137 };
0138 
0139 #endif /* KONQ_FRAMEVISITOR_H */
0140