kate Library API Documentation

katearbitraryhighlight.cpp

00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2003 Hamish Rodda <rodda@kde.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License version 2 as published by the Free Software Foundation. 00007 00008 This library is distributed in the hope that it will be useful, 00009 but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00011 Library General Public License for more details. 00012 00013 You should have received a copy of the GNU Library General Public License 00014 along with this library; see the file COPYING.LIB. If not, write to 00015 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00016 Boston, MA 02111-1307, USA. 00017 */ 00018 00019 #include "katearbitraryhighlight.h" 00020 #include "katearbitraryhighlight.moc" 00021 00022 #include "katesupercursor.h" 00023 #include "katedocument.h" 00024 00025 #include <kdebug.h> 00026 00027 #include <qfont.h> 00028 00029 ArbitraryHighlightRange::ArbitraryHighlightRange(KateSuperCursor* start, 00030 KateSuperCursor* end, QObject* parent, const char* name) : 00031 KateSuperRange(start, end, parent, name) { 00032 } 00033 00034 ArbitraryHighlightRange::ArbitraryHighlightRange(KateDocument* doc, const KateRange& range, QObject* parent, const char* name) 00035 : KateSuperRange(doc, range, parent, name) 00036 { 00037 } 00038 00039 ArbitraryHighlightRange::ArbitraryHighlightRange(KateDocument* doc, const KateTextCursor& start, const KateTextCursor& end, QObject* parent, const char* name) 00040 : KateSuperRange(doc, start, end, parent, name) 00041 { 00042 } 00043 00044 ArbitraryHighlightRange::~ArbitraryHighlightRange() 00045 { 00046 } 00047 00048 KateArbitraryHighlight::KateArbitraryHighlight(KateDocument* parent, const char* name) 00049 : QObject(parent, name) 00050 { 00051 } 00052 00053 KateAttribute ArbitraryHighlightRange::merge(QPtrList<KateSuperRange> ranges) 00054 { 00055 ranges.sort(); 00056 00057 KateAttribute ret; 00058 00059 if (ranges.first() && ranges.current()->inherits("ArbitraryHighlightRange")) 00060 ret = *(static_cast<ArbitraryHighlightRange*>(ranges.current())); 00061 00062 KateSuperRange* r; 00063 while ((r = ranges.next())) { 00064 if (r->inherits("ArbitraryHighlightRange")) { 00065 ArbitraryHighlightRange* hl = static_cast<ArbitraryHighlightRange*>(r); 00066 ret += *hl; 00067 } 00068 } 00069 00070 return ret; 00071 } 00072 00073 void KateArbitraryHighlight::addHighlightToDocument(KateSuperRangeList* list) 00074 { 00075 m_docHLs.append(list); 00076 connect(list, SIGNAL(rangeEliminated(KateSuperRange*)), SLOT(slotRangeEliminated(KateSuperRange*))); 00077 } 00078 00079 void KateArbitraryHighlight::addHighlightToView(KateSuperRangeList* list, KateView* view) 00080 { 00081 if (!m_viewHLs[view]) 00082 m_viewHLs.insert(view, new QPtrList<KateSuperRangeList>()); 00083 00084 m_viewHLs[view]->append(list); 00085 00086 connect(list, SIGNAL(rangeEliminated(KateSuperRange*)), SLOT(slotTagRange(KateSuperRange*))); 00087 connect(list, SIGNAL(tagRange(KateSuperRange*)), SLOT(slotTagRange(KateSuperRange*))); 00088 } 00089 00090 KateSuperRangeList& KateArbitraryHighlight::rangesIncluding(uint line, KateView* view) 00091 { 00092 // OPTIMISE make return value persistent 00093 00094 static KateSuperRangeList s_return(false); 00095 00096 Q_ASSERT(!s_return.autoDelete()); 00097 s_return.clear(); 00098 00099 //--- TEMPORARY OPTIMISATION: return the actual range when there are none or one. --- 00100 if (m_docHLs.count() + m_viewHLs.count() == 0) 00101 return s_return; 00102 else if (m_docHLs.count() + m_viewHLs.count() == 1) 00103 if (m_docHLs.count()) 00104 return *(m_docHLs.first()); 00105 else 00106 if (m_viewHLs.values().first() && m_viewHLs.values().first()->count() == 1) 00107 if (m_viewHLs.keys().first() == view && m_viewHLs.values().first()) 00108 return *(m_viewHLs.values().first()->first()); 00109 //--- END Temporary optimisation --- 00110 00111 if (view) { 00112 QPtrList<KateSuperRangeList>* list = m_viewHLs[view]; 00113 if (list) 00114 for (KateSuperRangeList* l = list->first(); l; l = list->next()) 00115 if (l->count()) 00116 s_return.appendList(l->rangesIncluding(line)); 00117 00118 } else { 00119 for (QMap<KateView*, QPtrList<KateSuperRangeList>* >::Iterator it = m_viewHLs.begin(); it != m_viewHLs.end(); it++) 00120 for (KateSuperRangeList* l = (*it)->first(); l; l = (*it)->next()) 00121 if (l->count()) 00122 s_return.appendList(l->rangesIncluding(line)); 00123 } 00124 00125 for (KateSuperRangeList* l = m_docHLs.first(); l; l = m_docHLs.next()) 00126 if (l->count()) 00127 s_return.appendList(l->rangesIncluding(line)); 00128 00129 return s_return; 00130 } 00131 00132 void KateArbitraryHighlight::slotTagRange(KateSuperRange* range) 00133 { 00134 emit tagLines(viewForRange(range), range); 00135 } 00136 00137 KateView* KateArbitraryHighlight::viewForRange(KateSuperRange* range) 00138 { 00139 for (QMap<KateView*, QPtrList<KateSuperRangeList>* >::Iterator it = m_viewHLs.begin(); it != m_viewHLs.end(); it++) 00140 for (KateSuperRangeList* l = (*it)->first(); l; l = (*it)->next()) 00141 if (l->contains(range)) 00142 return it.key(); 00143 00144 // This must belong to a document-global highlight 00145 return 0L; 00146 } 00147 00148 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Mon Aug 30 22:56:46 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003