1 /*
2     This file is part of the KDE project
3     SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org>
4 
5     SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #ifndef KONQ_FRAMEVISITOR_H
9 #define KONQ_FRAMEVISITOR_H
10 
11 #include <QList>
12 #include "konqprivate_export.h"
13 
14 class KonqFrameBase;
15 class KonqView;
16 class KonqFrame;
17 class KonqFrameContainer;
18 class KonqFrameTabs;
19 class KonqMainWindow;
20 
21 class KonqFrameVisitor
22 {
23 public:
24     enum VisitorBehavior { VisitAllTabs = 1, VisitCurrentTabOnly = 2 };
m_behavior(behavior)25     KonqFrameVisitor(VisitorBehavior behavior = VisitAllTabs) : m_behavior(behavior) {}
~KonqFrameVisitor()26     virtual ~KonqFrameVisitor() {}
visit(KonqFrame *)27     virtual bool visit(KonqFrame *)
28     {
29         return true;
30     }
visit(KonqFrameContainer *)31     virtual bool visit(KonqFrameContainer *)
32     {
33         return true;
34     }
visit(KonqFrameTabs *)35     virtual bool visit(KonqFrameTabs *)
36     {
37         return true;
38     }
visit(KonqMainWindow *)39     virtual bool visit(KonqMainWindow *)
40     {
41         return true;
42     }
43 
endVisit(KonqFrameContainer *)44     virtual bool endVisit(KonqFrameContainer *)
45     {
46         return true;
47     }
endVisit(KonqFrameTabs *)48     virtual bool endVisit(KonqFrameTabs *)
49     {
50         return true;
51     }
endVisit(KonqMainWindow *)52     virtual bool endVisit(KonqMainWindow *)
53     {
54         return true;
55     }
56 
visitAllTabs()57     bool visitAllTabs() const
58     {
59         return m_behavior & VisitAllTabs;
60     }
61 private:
62     VisitorBehavior m_behavior;
63 };
64 
65 /**
66  * Collects all views, recursively.
67  */
68 class KONQ_TESTS_EXPORT KonqViewCollector : public KonqFrameVisitor
69 {
70 public:
71     static QList<KonqView *> collect(KonqFrameBase *topLevel);
72     bool visit(KonqFrame *frame) override;
visit(KonqFrameContainer *)73     bool visit(KonqFrameContainer *) override
74     {
75         return true;
76     }
visit(KonqFrameTabs *)77     bool visit(KonqFrameTabs *) override
78     {
79         return true;
80     }
visit(KonqMainWindow *)81     bool visit(KonqMainWindow *) override
82     {
83         return true;
84     }
85 private:
86     QList<KonqView *> m_views;
87 };
88 
89 /**
90  * Collects all views that can currently be linked; this excludes invisible tabs (#116714).
91  */
92 class KonqLinkableViewsCollector : public KonqFrameVisitor
93 {
94 public:
95     static QList<KonqView *> collect(KonqFrameBase *topLevel);
96     bool visit(KonqFrame *frame) override;
visit(KonqFrameContainer *)97     bool visit(KonqFrameContainer *) override
98     {
99         return true;
100     }
visit(KonqFrameTabs *)101     bool visit(KonqFrameTabs *) override
102     {
103         return true;
104     }
visit(KonqMainWindow *)105     bool visit(KonqMainWindow *) override
106     {
107         return true;
108     }
109 private:
KonqLinkableViewsCollector()110     KonqLinkableViewsCollector() : KonqFrameVisitor(VisitCurrentTabOnly) {}
111     QList<KonqView *> m_views;
112 };
113 
114 /**
115  * Returns the list of views that have modified data in them,
116  * for the warning-before-closing-a-tab.
117  */
118 class KonqModifiedViewsCollector : public KonqFrameVisitor
119 {
120 public:
121     static QList<KonqView *> collect(KonqFrameBase *topLevel);
122     bool visit(KonqFrame *frame) override;
visit(KonqFrameContainer *)123     bool visit(KonqFrameContainer *) override
124     {
125         return true;
126     }
visit(KonqFrameTabs *)127     bool visit(KonqFrameTabs *) override
128     {
129         return true;
130     }
visit(KonqMainWindow *)131     bool visit(KonqMainWindow *) override
132     {
133         return true;
134     }
135 private:
136     QList<KonqView *> m_views;
137 };
138 
139 #endif /* KONQ_FRAMEVISITOR_H */
140 
141