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