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