21 #include <QStyleOption>
23 #include <analitza/variables.h>
24 #include <analitzaplot/planecurve.h>
25 #include <analitzaplot/plotsmodel.h>
26 #include <analitzaplot/plotsfactory.h>
29 using namespace Analitza;
33 , m_dirty(true), m_currentFunction(-1)
35 setSize(QSizeF(100,100));
36 setFlag(QGraphicsItem::ItemHasNoContents,
false);
38 defViewport = QRectF(QPointF(-12., 10.), QSizeF(24., -20.));
45 if(boundingRect().size().isEmpty())
48 if(m_buffer.size()!=boundingRect().size()) {
49 m_buffer = QPixmap(boundingRect().size().toSize());
50 setPaintedSize(boundingRect().size().toSize());
53 Q_ASSERT(!m_buffer.isNull());
56 m_buffer.fill(Qt::transparent);
57 drawFunctions(&m_buffer);
61 p->drawPixmap(QPoint(0,0), m_buffer);
72 setViewport(defViewport);
77 connect(
model(), SIGNAL(dataChanged(
const QModelIndex&,
const QModelIndex& )),
78 this, SLOT(updateFuncs(
const QModelIndex&,
const QModelIndex)));
79 connect(
model(), SIGNAL( rowsInserted (
const QModelIndex &,
int,
int ) ),
80 this, SLOT(addFuncs(
const QModelIndex&,
int,
int)));
81 connect(
model(), SIGNAL( rowsRemoved (
const QModelIndex &,
int,
int ) ),
82 this, SLOT(removeFuncs(
const QModelIndex&,
int,
int)));
85 void Graph2DMobile::addFuncs(
const QModelIndex& parent,
int start,
int end) { updateFunctions(parent, start, end); }
87 void Graph2DMobile::removeFuncs(
const QModelIndex&,
int,
int) {
forceRepaint(); }
88 void Graph2DMobile::updateFuncs(
const QModelIndex& start,
const QModelIndex& end) { updateFunctions(QModelIndex(), start.row(), end.row()); }
92 QRectF userViewport = lastUserViewport();
93 if(s<1 || (userViewport.height() < -3. && userViewport.width() > 3.)) {
94 scaleViewport(s, QPoint(x,y));
100 moveViewport(QPoint(x,y));
107 Analitza::Expression e(expression, Analitza::Expression::isMathML(expression));
108 PlotsModel* plotsmodel = qobject_cast<PlotsModel*>(
model());
110 qWarning() <<
"only can add plots to a PlotsModel instance";
113 fname = plotsmodel->freeId();
114 }
while(vars && vars->contains(fname));
118 PlotBuilder req = PlotsFactory::self()->requestPlot(e, Dim2D, vars);
120 PlaneCurve* it =
static_cast<PlaneCurve*
>(req.create(fcolor, fname));
123 plotsmodel->addPlot(it);
virtual void modelChanged()
void translate(qreal x, qreal y)
void scale(qreal s, int x, int y)
QColor randomFunctionColor()
Graph2DMobile(QDeclarativeItem *parent=0)
QStringList addFunction(const QString &expression, Analitza::Variables *vars=0)
virtual void forceRepaint()
virtual void paint(QPainter *p, const QStyleOptionGraphicsItem *options, QWidget *w)