// Who When What
// --- ---------- -----------------------------------------------------------
// JLH 06/03/2010 Added this text. :-)
+// JLH 09/11/2010 Fixed preview/snapper rendering.
//
#include "actiondimleader.h"
void ActionDimLeader::reset()
{
- //data = LineData(Vector(false), Vector(false));
- //start = Vector(false);
- //history.clear();
points.clear();
}
leader->setLayerToActive();
leader->setPenToActive();
-// for(Vector * v=points.first(); v!=NULL; v=points.next())
-// leader->addVertex(*v);
- for (int i = 0; i < points.size(); i++)
+ for(int i=0; i<points.size(); i++)
leader->addVertex(*(points[i]));
container->addEntity(leader);
// upd. undo list:
- if (document != NULL)
+ if (document)
{
document->startUndoCycle();
document->addUndoable(leader);
document->endUndoCycle();
}
- deletePreview();
- clearPreview();
- deleteSnapper();
- Vector rz = graphicView->getRelativeZero();
- graphicView->moveRelativeZero(Vector(0.0, 0.0));
- graphicView->drawEntity(leader);
- graphicView->moveRelativeZero(rz);
- //drawSnapper();
+// deletePreview();
+// clearPreview();
+// deleteSnapper();
+// Vector rz = graphicView->getRelativeZero();
+// graphicView->moveRelativeZero(Vector(0.0, 0.0));
+// graphicView->drawEntity(leader);
+// graphicView->moveRelativeZero(rz);
+ graphicView->preview.clear(); //hm.
+ graphicView->redraw();
DEBUG->print("ActionDimLeader::trigger(): leader added: %d", leader->getId());
}
if (getStatus() == SetEndpoint && points.last() != NULL)
{
- deletePreview();
- clearPreview();
+// deletePreview();
+// clearPreview();
+ graphicView->preview.clear();
// fill in lines that were already set:
Vector last(false);
// if (last.valid)
// preview->addEntity(new Line(preview, LineData(last, *v)));
+ if (last.valid)
+ graphicView->preview.addEntity(new Line(&(graphicView->preview), LineData(last, *v)));
last = *v;
}
Vector p = *points.last();
// preview->addEntity(new Line(preview, LineData(p, mouse)));
- drawPreview();
+// drawPreview();
+ graphicView->preview.addEntity(new Line(&(graphicView->preview), LineData(p, mouse)));
}
+ graphicView->redraw();
+
DEBUG->print("ActionDimLeader::mouseMoveEvent end");
}
}
else
{
- deletePreview();
- deleteSnapper();
+// deletePreview();
+// deleteSnapper();
init(getStatus() - 1);
+ graphicView->redraw(); //hm.
}
}
}
if (checkCommand("help", c))
{
- if (DIALOGFACTORY != NULL)
+ if (DIALOGFACTORY)
DIALOGFACTORY->commandMessage(msgAvailableCommands()
+ getAvailableCommands().join(", "));
// Who When What
// --- ---------- -----------------------------------------------------------
// JLH 06/03/2010 Added this text. :-)
+// JLH 09/11/2010 Fixed preview/snapper rendering.
//
#include "actiondrawcircle.h"
container->addEntity(circle);
// upd. undo list:
- if (document != NULL)
+ if (document)
{
document->startUndoCycle();
document->addUndoable(circle);
document->endUndoCycle();
}
- deleteSnapper();
- Vector rz = graphicView->getRelativeZero();
- graphicView->moveRelativeZero(Vector(0.0, 0.0));
- graphicView->drawEntity(circle);
+ graphicView->preview.clear(); // hm.
+// deleteSnapper();
+// Vector rz = graphicView->getRelativeZero();
+// graphicView->moveRelativeZero(Vector(0.0, 0.0));
+// graphicView->drawEntity(circle);
graphicView->moveRelativeZero(circle->getCenter());
- drawSnapper();
+// drawSnapper();
+ graphicView->redraw();
setStatus(SetCenter);
reset();
break;
case SetRadius:
-
if (data.center.valid)
{
data.radius = data.center.distanceTo(mouse);
- deletePreview();
- clearPreview();
-// preview->addEntity(new Circle(preview, data));
- drawPreview();
+ graphicView->preview.clear();
+ graphicView->preview.addEntity(new Circle(&(graphicView->preview), data));
}
break;
}
+ graphicView->redraw();
DEBUG->print("ActionDrawCircle::mouseMoveEvent end");
}
}
else if (e->button() == Qt::RightButton)
{
- deletePreview();
- deleteSnapper();
+// deletePreview();
+// deleteSnapper();
+// //Is this necessary? Or should the base class take care of this kind of crap?
+// graphicView->preview.clear();
init(getStatus() - 1);
+ // Looks like we need at least to redraw... Though shouldn't base class do it???
+ graphicView->redraw();
}
}
break;
case SetRadius:
-
if (data.center.valid)
{
graphicView->moveRelativeZero(mouse);
data.radius = data.center.distanceTo(mouse);
trigger();
}
- //setStatus(SetCenter);
+
break;
default:
// Who When What
// --- ---------- -----------------------------------------------------------
// JLH 06/03/2010 Added this text. :-)
+// JLH 09/11/2010 Fixed preview/snapper rendering.
//
#include "actiondrawcircle2p.h"
#include "graphicview.h"
#include "preview.h"
-ActionDrawCircle2P::ActionDrawCircle2P(EntityContainer & container, GraphicView & graphicView): ActionInterface("Draw circles",
- container, graphicView)
+ActionDrawCircle2P::ActionDrawCircle2P(EntityContainer & container,
+ GraphicView & graphicView):
+ ActionInterface("Draw circles", container, graphicView)
{
reset();
}
void ActionDrawCircle2P::init(int status)
{
ActionInterface::init(status);
-
reset();
}
void ActionDrawCircle2P::trigger()
{
ActionInterface::trigger();
-
preparePreview();
if (data.isValid())
container->addEntity(circle);
// upd. undo list:
- if (document != NULL)
+ if (document)
{
document->startUndoCycle();
document->addUndoable(circle);
document->endUndoCycle();
}
- deleteSnapper();
- Vector rz = graphicView->getRelativeZero();
- graphicView->moveRelativeZero(Vector(0.0, 0.0));
- graphicView->drawEntity(circle);
- graphicView->moveRelativeZero(rz);
- drawSnapper();
+// deleteSnapper();
+// Vector rz = graphicView->getRelativeZero();
+// graphicView->moveRelativeZero(Vector(0.0, 0.0));
+// graphicView->drawEntity(circle);
+// graphicView->moveRelativeZero(rz);
+// drawSnapper();
+ graphicView->preview.clear(); // hm.
+ graphicView->redraw();
setStatus(SetPoint1);
reset();
}
- else if (DIALOGFACTORY != NULL)
+ else if (DIALOGFACTORY)
DIALOGFACTORY->requestWarningDialog(tr("Invalid Circle data."));
}
if (point1.valid && point2.valid)
{
Circle circle(NULL, data);
- bool suc = circle.createFrom2P(point1, point2);
+ bool success = circle.createFrom2P(point1, point2);
- if (suc)
+ if (success)
data = circle.getData();
}
}
// clearPreview();
// preview->addEntity(circle);
// drawPreview();
+ graphicView->preview.clear();
+ graphicView->preview.addEntity(new Circle(&(graphicView->preview), data));
}
break;
default:
break;
}
+
+ graphicView->redraw();
}
void ActionDrawCircle2P::mouseReleaseEvent(QMouseEvent * e)
}
else if (e->button() == Qt::RightButton)
{
- deletePreview();
- deleteSnapper();
+// deletePreview();
+// deleteSnapper();
init(getStatus() - 1);
+ graphicView->redraw();
}
}
// Who When What
// --- ---------- -----------------------------------------------------------
// JLH 06/03/2010 Added this text. :-)
+// JLH 09/11/2010 Fixed preview/snapper rendering.
//
#include "actiondrawcircle3p.h"
#include "preview.h"
ActionDrawCircle3P::ActionDrawCircle3P(EntityContainer & container,
- GraphicView & graphicView): ActionInterface("Draw circles",
- container, graphicView)
+ GraphicView & graphicView):
+ ActionInterface("Draw circles", container, graphicView)
{
reset();
}
void ActionDrawCircle3P::trigger()
{
ActionInterface::trigger();
-
preparePreview();
if (data.isValid())
document->endUndoCycle();
}
- deleteSnapper();
- Vector rz = graphicView->getRelativeZero();
- graphicView->moveRelativeZero(Vector(0.0, 0.0));
- graphicView->drawEntity(circle);
- graphicView->moveRelativeZero(rz);
- drawSnapper();
+// deleteSnapper();
+// Vector rz = graphicView->getRelativeZero();
+// graphicView->moveRelativeZero(Vector(0.0, 0.0));
+// graphicView->drawEntity(circle);
+// graphicView->moveRelativeZero(rz);
+// drawSnapper();
+ graphicView->preview.clear(); // hm.
+ graphicView->redraw();
setStatus(SetPoint1);
reset();
if (data.isValid())
{
// Circle * circle = new Circle(preview, data);
-//
// deletePreview();
// clearPreview();
// preview->addEntity(circle);
// drawPreview();
+ graphicView->preview.clear();
+ graphicView->preview.addEntity(new Circle(&(graphicView->preview), data));
}
+
break;
}
+
+ graphicView->redraw();
}
void ActionDrawCircle3P::mouseReleaseEvent(QMouseEvent * e)
}
else if (e->button() == Qt::RightButton)
{
- deletePreview();
- deleteSnapper();
+// deletePreview();
+// deleteSnapper();
init(getStatus() - 1);
+ graphicView->redraw(); // hm.
}
}
// Who When What
// --- ---------- -----------------------------------------------------------
// JLH 06/03/2010 Added this text. :-)
+// JLH 09/11/2010 Fixed preview/snapper rendering.
//
#include "actiondrawcirclecr.h"
/**
* Constructor.
*/
-ActionDrawCircleCR::ActionDrawCircleCR(EntityContainer & container, GraphicView & graphicView): ActionInterface("Draw circles CR",
- container, graphicView)
+ActionDrawCircleCR::ActionDrawCircleCR(EntityContainer & container,
+ GraphicView & graphicView):
+ ActionInterface("Draw circles CR", container, graphicView)
{
reset();
}
container->addEntity(circle);
// upd. undo list:
- if (document != NULL)
+ if (document)
{
document->startUndoCycle();
document->addUndoable(circle);
document->endUndoCycle();
}
- deleteSnapper();
- Vector rz = graphicView->getRelativeZero();
- graphicView->moveRelativeZero(Vector(0.0, 0.0));
- graphicView->drawEntity(circle);
- graphicView->moveRelativeZero(circle->getCenter());
- drawSnapper();
+// deleteSnapper();
+// Vector rz = graphicView->getRelativeZero();
+// graphicView->moveRelativeZero(Vector(0.0, 0.0));
+// graphicView->drawEntity(circle);
+// graphicView->moveRelativeZero(circle->getCenter());
+// drawSnapper();
+ graphicView->preview.clear(); // hm.
+ graphicView->redraw();
setStatus(SetCenter);
{
case SetCenter:
data.center = mouse;
- deletePreview();
- clearPreview();
+// deletePreview();
+// clearPreview();
// preview->addEntity(new Circle(preview, data));
- drawPreview();
+// drawPreview();
+ graphicView->preview.clear();
+ graphicView->preview.addEntity(new Circle(&(graphicView->preview), data));
break;
}
+ graphicView->redraw();
DEBUG->print("ActionDrawCircleCR::mouseMoveEvent end");
}
}
else if (e->button() == Qt::RightButton)
{
- deletePreview();
- deleteSnapper();
+// deletePreview();
+// deleteSnapper();
init(getStatus() - 1);
+ graphicView->redraw(); // hm.
}
}
void ActionDrawHatch::init(int status)
{
ActionInterface::init(status);
- clearPreview();
+// clearPreview();
Hatch tmp(container, data);
tmp.setLayerToActive();
{
DEBUG->print("ActionDrawHatch::trigger()");
- deleteSnapper();
+// deleteSnapper();
Entity * e;
// deselect unhatchable entities:
}
hatch->update();
- graphicView->drawEntity(hatch);
DIALOGFACTORY->commandMessage(tr("Hatch created successfully."));
}
else
void ActionDrawHatch::mouseMoveEvent(QMouseEvent *)
{
DEBUG->print("ActionDrawHatch::mouseMoveEvent begin");
-
- /*if (getStatus()==SetPos) {
- Vector mouse = snapPoint(e);
- pos = mouse;
-
-
- deletePreview();
- if (hatch!=NULL && !hatch->isVisible()) {
- hatch->setVisible(true);
- }
- offset = Vector(graphicView->toGuiDX(pos.x),
- -graphicView->toGuiDY(pos.y));
- drawPreview();
- }*/
-
DEBUG->print("ActionDrawHatch::mouseMoveEvent end");
}
}
else if (e->button() == Qt::RightButton)
{
- //deletePreview();
- deleteSnapper();
init(getStatus() - 1);
+//doesn't clear the preview or snapper.
+ graphicView->redraw(); // hm.
}
}
{
p = p->getParent();
- if (p != NULL && p->isSelected() == true)
+ if (p && p->isSelected() == true)
return true;
}
- while(p != NULL);
+ while (p);
return false;
}
}
#endif
- // There should be a better way then this...
+ // There should be a better way than this...
switch (e.rtti())
{
case RS2::EntityPoint:
void EntityContainer::reparent(EntityContainer * parent)
{
- Entity::reparent(parent);
+ Entity::reparent(parent);
- // All sub-entities:
- for(Entity * e=firstEntity(RS2::ResolveNone); e!=NULL; e=nextEntity(RS2::ResolveNone))
- {
- e->reparent(parent);
- }
+ // All sub-entities:
+ for(Entity * e=firstEntity(RS2::ResolveNone); e!=NULL; e=nextEntity(RS2::ResolveNone))
+ e->reparent(parent);
}
/**
*
* @param fileName File name of a DXF file defining the pattern
*/
-Pattern::Pattern(const QString & fileName): EntityContainer(NULL)
+Pattern::Pattern(const QString & file): EntityContainer(NULL),
+ filename(file), loaded(false)
{
DEBUG->print("Pattern::Pattern() ");
-
- this->fileName = fileName;
- loaded = false;
}
-/**
- * Constructor.
- *
- * @param fileName File name of a PAT file which defines this
- * pattern among others.
- * @param name Pattern name.
- *
- */
-/*Pattern::Pattern(const QString& fileName, const QString& name)
- : EntityContainer(NULL) {
- this->fileName = fileName;
- this->name = name;
- loaded = false;
-}*/
-
Pattern::~Pattern()
{
}
return true;
DEBUG->print("Pattern::loadPattern");
-
QString path;
// Search for the appropriate pattern if we have only the name of the pattern:
- if (!fileName.toLower().contains(".dxf"))
+ if (!filename.toLower().contains(".dxf"))
{
QStringList patterns = SYSTEM->getPatternList();
QFileInfo file;
for(QStringList::Iterator it=patterns.begin(); it!=patterns.end(); it++)
{
- if (QFileInfo(*it).baseName().toLower() == fileName.toLower())
+ if (QFileInfo(*it).baseName().toLower() == filename.toLower())
{
path = *it;
- DEBUG->print("Pattern found: %s", path.toLatin1().data());
+ DEBUG->print("Pattern found: %s", path.toAscii().data());
break;
}
}
// We have the full path of the pattern:
else
{
- path = fileName;
+ path = filename;
}
// No pattern paths found:
if (path.isEmpty())
{
- DEBUG->print("No pattern \"%s\"available.", fileName.toLatin1().data());
+ DEBUG->print("No pattern \"%s\"available.", filename.toAscii().data());
return false;
}
- Drawing * gr = new Drawing();
+ Drawing * drawing = new Drawing();
// TODO: Find out why the new dxf filter doesn't work for patterns:
- FILEIO->fileImport(*gr, path, RS2::FormatDXF1);
+ FILEIO->fileImport(*drawing, path, RS2::FormatDXF1);
- for(Entity * e=gr->firstEntity(); e!=NULL; e=gr->nextEntity())
+ for(Entity * e=drawing->firstEntity(); e!=NULL; e=drawing->nextEntity())
{
if (e->rtti() == RS2::EntityLine || e->rtti() == RS2::EntityArc)
{
- Layer * l = e->getLayer();
- Entity * cl = e->clone();
- cl->reparent(this);
+ Entity * clone = e->clone();
+ clone->reparent(this);
+ Layer * layer = e->getLayer();
- if (l != NULL)
- {
- cl->setLayer(l->getName());
- }
+ if (layer)
+ clone->setLayer(layer->getName());
- addEntity(cl);
+ addEntity(clone);
}
}
- delete gr;
+ delete drawing;
loaded = true;
DEBUG->print("Pattern::loadPattern: OK");
/** @return the fileName of this pattern. */
QString Pattern::getFileName() const
{
- return fileName;
+ return filename;
}
class Pattern: public EntityContainer
{
public:
- Pattern(const QString & fileName);
+ Pattern(const QString & file);
virtual ~Pattern();
virtual bool loadPattern();
protected:
//! Pattern file name
- QString fileName;
+ QString filename;
//! Is this pattern currently loaded into memory?
bool loaded;
};
// 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;
}
//double scale = Math::eval(leScale->text(), 1.0);
double angle = Math::deg2rad(Math::eval(ui.leAngle->text(), 0.0));
- if (pattern != NULL)
+ if (pattern)
prevSize = pattern->getSize().x * 10;
else
prevSize = 10.0;
</connection>
<connection>
<sender>cbPattern</sender>
- <signal>patternChanged(RS_Pattern*)</signal>
+ <signal>patternChanged(Pattern*)</signal>
<receiver>DlgHatch</receiver>
- <slot>updatePreview(RS_Pattern*)</slot>
+ <slot>updatePreview(Pattern*)</slot>
<hints>
<hint type="sourcelabel">
<x>20</x>
}
/**
- * Initialisation (called manually and only once).
+ * Initialization (called manually and only once).
*/
void PatternBox::init()
{
for(Pattern * f=PATTERNLIST->firstPattern(); f!=NULL; f=PATTERNLIST->nextPattern())
patterns.append(f->getFileName());
+#if 0
+std::cout << "patterns size = " << patterns.size() << std::endl;
+
+for(int i=0; i<patterns.size(); i++)
+ std::cout << patterns.at(i).toLocal8Bit().constData() << std::endl;
+
+std::cout.flush();
+#endif
patterns.sort();
-// insertStringList(patterns);
addItems(patterns);
connect(this, SIGNAL(activated(int)), this, SLOT(slotPatternChanged(int)));
*/
void PatternBox::setPattern(const QString & pName)
{
- DEBUG->print("PatternBox::setPattern %s\n", pName.toLatin1().data());
-// setCurrentText(pName);
+ DEBUG->print("PatternBox::setPattern %s\n", pName.toAscii().data());
setItemText(currentIndex(), pName);
slotPatternChanged(currentIndex());
}
DEBUG->print("PatternBox::slotPatternChanged %d\n", index);
currentPattern = PATTERNLIST->requestPattern(currentText());
- if (currentPattern!=NULL)
- DEBUG->print("Current pattern is (%d): %s\n", index, currentPattern->getFileName().toLatin1().data());
+ if (currentPattern)
+ DEBUG->print("Current pattern is (%d): %s\n", index, currentPattern->getFileName().toAscii().data());
emit patternChanged(currentPattern);
}