katearbitraryhighlight.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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 KateArbitraryHighlightRange::KateArbitraryHighlightRange(KateSuperCursor* start,
00030 KateSuperCursor* end, QObject* parent, const char* name) :
00031 KateSuperRange(start, end, parent, name) {
00032 }
00033
00034 KateArbitraryHighlightRange::KateArbitraryHighlightRange(KateDocument* doc, const KateRange& range, QObject* parent, const char* name)
00035 : KateSuperRange(doc, range, parent, name)
00036 {
00037 }
00038
00039 KateArbitraryHighlightRange::KateArbitraryHighlightRange(KateDocument* doc, const KateTextCursor& start, const KateTextCursor& end, QObject* parent, const char* name)
00040 : KateSuperRange(doc, start, end, parent, name)
00041 {
00042 }
00043
00044 KateArbitraryHighlightRange::~KateArbitraryHighlightRange()
00045 {
00046 }
00047
00048 KateArbitraryHighlight::KateArbitraryHighlight(KateDocument* parent, const char* name)
00049 : QObject(parent, name)
00050 {
00051 }
00052
00053 KateAttribute KateArbitraryHighlightRange::merge(QPtrList<KateSuperRange> ranges)
00054 {
00055 ranges.sort();
00056
00057 KateAttribute ret;
00058
00059 if (ranges.first() && ranges.current()->inherits("KateArbitraryHighlightRange"))
00060 ret = *(static_cast<KateArbitraryHighlightRange*>(ranges.current()));
00061
00062 KateSuperRange* r;
00063 while ((r = ranges.next())) {
00064 if (r->inherits("KateArbitraryHighlightRange")) {
00065 KateArbitraryHighlightRange* hl = static_cast<KateArbitraryHighlightRange*>(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
00093
00094 static KateSuperRangeList s_return(false);
00095
00096 Q_ASSERT(!s_return.autoDelete());
00097 s_return.clear();
00098
00099
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
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
00145 return 0L;
00146 }
00147
00148
This file is part of the documentation for kate Library Version 3.3.0.