// Who When What
// --- ---------- -----------------------------------------------------------
// JLH 06/01/2010 Added this text. :-)
+// JLH 09/13/2010 Fixed next() function to return a valid pointer.
//
#include "patternlist.h"
*/
PatternList::PatternList(): patternIterator(patterns)
{
-#warning "!!! Need to deal with setAutoDelete() Qt3->Qt4 !!!"
-// patterns.setAutoDelete(true);
- //patternListListeners.setAutoDelete(false);
}
/*virtual*/ PatternList::~PatternList()
{
+ clearPatterns();
}
/**
*/
void PatternList::init()
{
- DEBUG->print("PatternList::initPatterns");
+ DEBUG->print("PatternList::initPatterns");
+ QStringList list = SYSTEM->getPatternList();
+// patterns.clear();
+ clearPatterns();
- QStringList list = SYSTEM->getPatternList();
- Pattern * pattern;
-
- patterns.clear();
-
- for(QStringList::Iterator it=list.begin(); it!=list.end(); ++it)
+ for(QStringList::Iterator it=list.begin(); it!=list.end(); ++it)
{
- DEBUG->print("pattern: %s:", (*it).toLatin1().data());
-
- QFileInfo fi(*it);
- pattern = new Pattern(fi.baseName().toLower());
- patterns.append(pattern);
-
- DEBUG->print("base: %s", pattern->getFileName().toLatin1().data());
- }
+ DEBUG->print("pattern: %s:", (*it).toAscii().data());
+ QFileInfo fi(*it);
+ Pattern * pattern = new Pattern(fi.baseName().toLower());
+ patterns.append(pattern);
+ DEBUG->print("base: %s", pattern->getFileName().toAscii().data());
+ }
}
/**
*/
void PatternList::clearPatterns()
{
- patterns.clear();
+ patternIterator = patterns;
+
+ while (patternIterator.hasNext())
+ delete patternIterator.next();
+
+ // Apparently this is still needed as the list will still be populated with
+ // stale pointers...
+ patterns.clear();
}
int PatternList::countPatterns()
void PatternList::removePattern(Pattern * pattern)
{
DEBUG->print("PatternList::removePattern()");
-
- // here the pattern is removed from the list but not deleted
-// patterns.remove(pattern);
-//Apparently we need to delete this shit here because of missing AutoDelete
-//function when going from Qt3->4
int i = patterns.indexOf(pattern);
if (i != -1)
delete patterns.takeAt(i);
-
- //for (uint i=0; i<patternListListeners.count(); ++i) {
- // PatternListListener* l = patternListListeners.at(i);
- // l->patternRemoved(pattern);
- //}
}
/**
*/
Pattern * PatternList::requestPattern(const QString & name)
{
- DEBUG->print("PatternList::requestPattern %s", name.toLatin1().data());
-
- QString name2 = name.toLower();
Pattern * foundPattern = NULL;
-
- DEBUG->print("name2: %s", name2.toLatin1().data());
+ QString name2 = name.toLower();
+ DEBUG->print("PatternList::requestPattern %s", name.toAscii().data());
+ DEBUG->print("name2: %s", name2.toAscii().data());
// Search our list of available patterns:
-// for(Pattern * p=patterns.first(); p!=NULL; p=patterns.next())
for(int i=0; i<patterns.size(); i++)
{
Pattern * p = patterns[i];
}
}
- //if (foundPattern==NULL && name!="standard") {
- // foundPattern = requestPattern("standard");
- //}
-
return foundPattern;
}
//! @return First pattern of the list.
Pattern * PatternList::firstPattern()
{
- patternIterator.toFront();
- return patternIterator.next();
+ // Looks like this is necessary--constructor doesn't do it...
+ // Constructor is necessary, apparently, even though we do this.
+ patternIterator = patterns;
+ return nextPattern();
}
/**
*/
Pattern * PatternList::nextPattern()
{
- return patternIterator.next();
+ // We absolutely HAVE to do a hasNext() check or we'll hand back a bogus
+ // pointer/object. Not good!
+ return (patternIterator.hasNext() ? patternIterator.next() : NULL);
}
bool PatternList::contains(const QString & name)
QString name2 = name.toLower();
// Search our list of available patterns:
-// for(Pattern * p=patterns.first(); p!=NULL; p=patterns.next())
for(int i=0; i<patterns.size(); i++)
{
Pattern * p = patterns[i];
*/
std::ostream & operator<<(std::ostream & os, PatternList & l)
{
- os << "Patternlist: \n";
- for(Pattern * p=l.firstPattern(); p!=NULL; p=l.nextPattern())
- os << *p << "\n";
+ os << "Patternlist: \n";
+
+ for(Pattern * p=l.firstPattern(); p!=NULL; p=l.nextPattern())
+ os << *p << "\n";
- return os;
+ return os;
}