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 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   
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.2.0.