#include "qg_graphicview.h"
+#include "rs_actiondefault.h"
#include "rs_actionzoomin.h"
#include "rs_actionzoompan.h"
#include "rs_actionzoomscroll.h"
#include "rs_actionmodifydelete.h"
#include "rs_actionselectsingle.h"
#include "rs_dialogfactory.h"
-#include "rs_graphicview.h"
+#include "graphicview.h"
#include "rs_preview.h"
#include "drawing.h"
#include "settings.h"
* Constructor.
*/
QG_GraphicView::QG_GraphicView(QWidget * parent, const char */*name*/, Qt::WindowFlags f):
- QWidget(parent, f), RS_GraphicView()//, refCount(0)
+ QWidget(parent, f), GraphicView()//, refCount(0)
+{
+ RS_DEBUG->print("QG_GraphicView::QG_GraphicView(parent, name, flags)...");
+ CommonInitialization();
+}
+
+/**
+ * Constructor II.
+ */
+QG_GraphicView::QG_GraphicView(RS_Document * doc, QWidget * parent)
+{
+// QG_GraphicView(parent, "graphicview");
+ CommonInitialization();
+
+ RS_DEBUG->print("QG_GraphicView::QG_GraphicView(doc, parent)...");
+ //document = doc;
+ RS_DEBUG->print(" Setting Container...");
+
+ if (doc)
+ setContainer(doc);
+
+ RS_DEBUG->print(" container set.");
+ setFactorX(4.0);
+ setFactorY(4.0);
+ setOffset(50, 50);
+ setBorders(10, 10, 10, 10);
+
+ if (doc)
+ setDefaultAction(new RS_ActionDefault(*doc, *this));
+}
+
+void QG_GraphicView::CommonInitialization(void)
{
setBackground(background);
- buffer = NULL;
+//meh buffer = NULL;
lastWidth = 0;
lastHeight = 0;
- //coordinateWidget = NULL;
- //mouseWidget = NULL;
- //optionWidget = NULL;
- //cadToolBar = NULL;
- //commandWidget = NULL;
//hrm.
painter = NULL;
-// layout = new Q3GridLayout(this, 3, 2);
-// layout->setColStretch(0, 1);
-// layout->setColStretch(1, 0);
-// layout->setColStretch(2, 0);
-// layout->setRowStretch(0, 1);
-// layout->setRowStretch(1, 0);
- layout = new QGridLayout(this);
+ RS_DEBUG->print("--> Setting up layout...");
+ QGridLayout * layout = new QGridLayout(this);
layout->setColumnStretch(0, 1);
layout->setColumnStretch(1, 0);
layout->setColumnStretch(2, 0);
A non-zero alignment indicates that the widget should not grow to fill the available space but should be sized according to sizeHint().
*/
- hScrollBar = new QG_ScrollBar(Qt::Horizontal, this);
+ RS_DEBUG->print("--> Creating hScrollBar...");
+// hScrollBar = new QG_ScrollBar(Qt::Horizontal, this);
+ hScrollBar = new QScrollBar(Qt::Horizontal, this);
// hScrollBar->setLineStep(50);
hScrollBar->setSingleStep(50);
// layout->addMultiCellWidget(hScrollBar, 1, 1, 0, 0);
layout->addWidget(hScrollBar, 1, 0);
// layout->addRowSpacing(1, hScrollBar->sizeHint().height());
layout->addItem(new QSpacerItem(0, hScrollBar->sizeHint().height()), 1, 0);
- connect(hScrollBar, SIGNAL(valueChanged(int)), this, SLOT(slotHScrolled(int)));
- vScrollBar = new QG_ScrollBar(Qt::Vertical, this);
+ RS_DEBUG->print("--> Creating vScrollBar...");
+// vScrollBar = new QG_ScrollBar(Qt::Vertical, this);
+ vScrollBar = new QScrollBar(Qt::Vertical, this);
// vScrollBar->setLineStep(50);
vScrollBar->setSingleStep(50);
// layout->addMultiCellWidget(vScrollBar, 0, 0, 2, 2);
layout->addWidget(vScrollBar, 0, 2);
// layout->addColSpacing(2, vScrollBar->sizeHint().width());
layout->addItem(new QSpacerItem(vScrollBar->sizeHint().width(), 0), 0, 2);
+
+ connect(hScrollBar, SIGNAL(valueChanged(int)), this, SLOT(slotHScrolled(int)));
connect(vScrollBar, SIGNAL(valueChanged(int)), this, SLOT(slotVScrolled(int)));
#ifndef __APPLE__
// Mouse Cursors:
QBitmap bmp;
-// QPixmap cur1(cur_cad_bmp_xpm);
-// bmp = QPixmap(cur_cad_mask_xpm);
QPixmap cur1(":/res/cur_cad_bmp.xpm");
bmp = QPixmap(":/res/cur_cad_mask.xpm");
cur1.setMask(bmp);
curCad = new QCursor(cur1, 15, 15);
-// QPixmap cur2(cur_glass_bmp_xpm);
-// bmp = QPixmap(cur_glass_mask_xpm);
QPixmap cur2(":/res/cur_glass_bmp.xpm");
bmp = QPixmap(":/res/cur_glass_mask.xpm");
cur2.setMask(bmp);
curMagnifier = new QCursor(cur2, 12, 12);
-// QPixmap cur3(cur_del_bmp_xpm);
-// bmp = QPixmap(cur_del_mask_xpm);
QPixmap cur3(":/res/cur_del_bmp.xpm");
bmp = QPixmap(":/res/cur_del_mask.xpm");
cur3.setMask(bmp);
curDel = new QCursor(cur3, 15, 15);
-// QPixmap cur4(cur_select_bmp_xpm);
-// bmp = QPixmap(cur_select_mask_xpm);
QPixmap cur4(":/res/cur_select_bmp.xpm");
bmp = QPixmap(":/res/cur_select_mask.xpm");
cur4.setMask(bmp);
curSelect = new QCursor(cur4, 15, 15);
-// QPixmap cur5(cur_hand_bmp_xpm);
-// bmp = QPixmap(cur_hand_mask_xpm);
QPixmap cur5(":/res/cur_hand_bmp.xpm");
bmp = QPixmap(":/res/cur_hand_mask.xpm");
cur5.setMask(bmp);
//w->setEraseColor(QColor(255,0,0));
gridStatus = new QLabel("-", this);
gridStatus->setAlignment(Qt::AlignRight);
+// gridStatus->setAutoFillBackground(true);
// layout->addMultiCellWidget(gridStatus, 1, 1, 1, 2);
layout->addWidget(gridStatus, 1, 1, 1, 2);
// layout->addColSpacing(1, 50);
*/
QG_GraphicView::~QG_GraphicView()
{
- if (painter != NULL)
- {
-//Not sure about this...
-// ((RS_PainterQt *)painter)->end();
+ if (painter)
delete painter;
- }
- if (buffer != NULL)
- {
- delete buffer;
- buffer = NULL;
- }
+//meh if (buffer)
+// {
+// delete buffer;
+// buffer = NULL;
+// }
cleanUp();
}
return height() - hScrollBar->sizeHint().height();
}
-/**
- * Creates a new painter for the buffer of this widget and returns a
- * pointer to it. The class variable 'painter' also
- * points to that object.
- */
-//'painter' is NOT a class variable!
-//RS_Painter * QG_GraphicView::createPainter()
-PaintInterface * QG_GraphicView::createPainter()
-{
-#if 1
- return NULL;
-#else
-//RS_DEBUG->print(RS_Debug::D_CRITICAL, "QG_GraphicView::createPainter called...");
- RS_DEBUG->print("QG_GraphicView::createPainter begin");
-
- if (lastWidth != getWidth() || lastHeight != getHeight())
- {
- destroyPainter();
-
- if (buffer != NULL)
- {
- delete buffer;
- buffer = NULL;
- }
-
- lastWidth = getWidth();
- lastHeight = getHeight();
- }
-
- if (buffer == NULL)
- {
- //RS_DEBUG->timestamp();
- RS_DEBUG->print("creating buffer: %d,%d", getWidth(), getHeight());
- buffer = new QPixmap(getWidth(), getHeight());
- RS_DEBUG->print("ok");
- }
-
- if (painter == NULL)
- {
- painter = new RS_PainterQt(buffer);
- painter->setDrawingMode(drawingMode);
- ((RS_PainterQt *)painter)->setBackgroundMode(Qt::OpaqueMode);
- ((RS_PainterQt *)painter)->setBackgroundColor(background);
- ((RS_PainterQt *)painter)->eraseRect(0, 0, getWidth(), getHeight());
-
- //RS_DEBUG->timestamp();
- }
-
- RS_DEBUG->print("QG_GraphicView::createPainter end");
-
- return painter;
-#endif
-}
-
-/**
- * Creates a new painter for this widget and returns a
- * pointer to it. The class variable 'painter' also
- * automatically points to that object.
- */
-//RS_Painter * QG_GraphicView::createDirectPainter()
-PaintInterface * QG_GraphicView::createDirectPainter()
-{
-#if 1
- return NULL;
-#else
-//RS_DEBUG->print(RS_Debug::D_CRITICAL, "QG_GraphicView::createDirectPainter called...");
- RS_DEBUG->print("QG_GraphicView::createDirectPainter begin");
-
- destroyPainter();
- painter = new RS_PainterQt(this);
- painter->setDrawingMode(drawingMode);
-
- RS_DEBUG->print("QG_GraphicView::createDirectPainter end");
-
- return painter;
-#endif
-}
-
-/**
- * Deletes the painter.
- */
-void QG_GraphicView::destroyPainter()
-{
-#if 1
- return;
-#else
- RS_DEBUG->print("QG_GraphicView::destroyPainter begin");
-
- if (painter != NULL)
- {
- delete painter;
- painter = NULL;
- }
-
- RS_DEBUG->print("QG_GraphicView::destroyPainter end");
-#endif
-}
-
/**
* Changes the current background color of this view.
*/
void QG_GraphicView::setBackground(const RS_Color & bg)
{
- RS_GraphicView::setBackground(bg);
+ GraphicView::setBackground(bg);
// setBackgroundColor(bg);
QPalette palette;
RS_DEBUG->print("QG_GraphicView::resizeEvent end");
}
+/*
+This is retarded. There is absolutely no reason to have this shit in here.
+This could be easily called from whoever calls this crap.
+
+And so... We remove it.
+*/
+#if 0
// Next three methods from RS_LayerListListener Interface:
void QG_GraphicView::layerEdited(RS_Layer *)
{
{
redraw();
}
+#endif
void QG_GraphicView::emulateMouseMoveEvent()
{
if (e->button() == Qt::MidButton /*|| (e->state()==Qt::LeftButton|Qt::AltButton)*/)
setCurrentAction(new RS_ActionZoomPan(*container, *this));
- RS_GraphicView::mousePressEvent(e);
+ GraphicView::mousePressEvent(e);
QWidget::mousePressEvent(e);
}
void QG_GraphicView::mouseReleaseEvent(QMouseEvent * e)
{
RS_DEBUG->print("QG_GraphicView::mouseReleaseEvent");
- RS_GraphicView::mouseReleaseEvent(e);
+ GraphicView::mouseReleaseEvent(e);
//QWidget::mouseReleaseEvent(e);
if (!e->isAccepted())
{
- if (QG_DIALOGFACTORY != NULL && QG_DIALOGFACTORY->getCadToolBar() != NULL)
+ if (QG_DIALOGFACTORY && QG_DIALOGFACTORY->getCadToolBar())
{
RS_DEBUG->print("QG_GraphicView::mouseReleaseEvent: fwd to cadtoolbar");
QG_DIALOGFACTORY->getCadToolBar()->mouseReleaseEvent(e);
//RS_DEBUG->print("QG_GraphicView::mouseMoveEvent begin");
//QMouseEvent rsm = QG_Qt2Rs::mouseEvent(e);
- RS_GraphicView::mouseMoveEvent(e);
+ GraphicView::mouseMoveEvent(e);
QWidget::mouseMoveEvent(e);
//What kind of cacamamie crap is this???
void QG_GraphicView::leaveEvent(QEvent * e)
{
- RS_GraphicView::mouseLeaveEvent();
+ GraphicView::mouseLeaveEvent();
QWidget::leaveEvent(e);
}
void QG_GraphicView::enterEvent(QEvent * e)
{
- RS_GraphicView::mouseEnterEvent();
+ GraphicView::mouseEnterEvent();
QWidget::enterEvent(e);
}
void QG_GraphicView::focusInEvent(QFocusEvent * e)
{
//printf("-->QG_GraphicView::focusInEvent(): Start. this %s focus...\n", (hasFocus() ? "has" : "DOES NOT HAVE"));
- RS_GraphicView::mouseEnterEvent();
+ GraphicView::mouseEnterEvent();
QWidget::focusInEvent(e);
//printf("-->QG_GraphicView::focusInEvent(): End. this %s focus...\n", (hasFocus() ? "has" : "DOES NOT HAVE"));
}
//printf("state: %d\n", e->state());
//printf("ctrl: %d\n", Qt::ControlButton);
-Qt::KeyboardModifiers keyState = QApplication::keyboardModifiers();
-
- if (container == NULL)
+ if (!container)
return;
+ Qt::KeyboardModifiers keyState = QApplication::keyboardModifiers();
Vector mouse = toGraph(Vector(e->x(), e->y()));
bool scroll = false;
void QG_GraphicView::keyPressEvent(QKeyEvent * e)
{
- if (container == NULL)
+ if (!container)
return;
bool scroll = false;
if (scroll)
setCurrentAction(new RS_ActionZoomScroll(direction, *container, *this));
- RS_GraphicView::keyPressEvent(e);
+ GraphicView::keyPressEvent(e);
}
void QG_GraphicView::keyReleaseEvent(QKeyEvent * e)
{
- RS_GraphicView::keyReleaseEvent(e);
+ GraphicView::keyReleaseEvent(e);
}
/**
RS_DEBUG->print("QG_GraphicView::adjustOffsetControls() begin");
- if (container == NULL || hScrollBar == NULL || vScrollBar == NULL)
+ if (!container || !hScrollBar || !vScrollBar)
return;
disableUpdate();
Vector max = container->getMax();
// no drawing yet - still allow to scroll
- if (max.x < min.x+1.0e-6 || max.y < min.y+1.0e-6 ||
- max.x > RS_MAXDOUBLE || max.x < RS_MINDOUBLE ||
- min.x > RS_MAXDOUBLE || min.x < RS_MINDOUBLE ||
- max.y > RS_MAXDOUBLE || max.y < RS_MINDOUBLE ||
- min.y > RS_MAXDOUBLE || min.y < RS_MINDOUBLE)
+ if (max.x < min.x + 1.0e-6 || max.y < min.y + 1.0e-6
+ || max.x > RS_MAXDOUBLE || max.x < RS_MINDOUBLE
+ || min.x > RS_MAXDOUBLE || min.x < RS_MINDOUBLE
+ || max.y > RS_MAXDOUBLE || max.y < RS_MINDOUBLE
+ || min.y > RS_MAXDOUBLE || min.y < RS_MINDOUBLE)
{
min = Vector(-10, -10);
max = Vector(100, 100);
* Handles paint events by redrawing the graphic in this view.
* usually that's very fast since we only paint the buffer we
* have from the last call..
+ *
+ * This is not true anymore--even if it was true in the first place, which
+ * seems doubtful to me. Everything is redrawn every time; we need to see if
+ * relying on Qt do to the clipping is wise or not... Also, we need to clarify
+ * all rendering paths since they are not all logical or consistent.
*/
void QG_GraphicView::paintEvent(QPaintEvent *)
{
If we can make the UI more like Inkscape we'll be in good shape. Plus elements
of VectorWorks & etc. as well...
+
+-------------------------------------------------------------------------------
+
+What's needed:
+
+- Draw the entities
+- Draw the preview (if any)
+- Draw the snapper (if any)
+
*/
// Qt4 handles double buffering of screen writes now, so this needs
}
#endif
-#if 1
//Note that we do drawIt() regardless here because paintEvent() clears the background
//*unless* we create the window with a specific style. Depending on our draw code, we
//just may go that way...
drawIt();
//Need some logic here to do drawing in preview mode, since it'll be calling
//update now instead of trying to do a direct draw...
+#if 0
if (previewMode)
{
//hrm. painter->setCompositionMode(QPainter::CompositionMode_Xor);
// We'll set previewMode to false here, just because we can
previewMode = false;
}
-#endif
-
- if (snapperDraw)
-// if (false)
+#else
+ if (preview.Visible())
{
- snapperDraw = false;
-
- if (snapCoord1.valid)
- {
- // snap point
-//This is causing segfaults in the Qt::Painter code...
-//*This* is causing the segfault!
-//Actually, it looks like buggy painting code in PaintInterface()...
- painter->drawCircle(toGui(snapCoord1), 4);
-
-#if 1
- // crosshairs:
- if (showCrosshairs1 == true)
- {
- painter->setPen(RS_Pen(RS_Color(0, 255, 255), RS2::Width00, RS2::DashLine));
- painter->drawLine(Vector(0, toGuiY(snapCoord1.y)),
- Vector(getWidth(), toGuiY(snapCoord1.y)));
- painter->drawLine(Vector(toGuiX(snapCoord1.x), 0),
- Vector(toGuiX(snapCoord1.x), getHeight()));
- }
-#endif
- }
-#if 1
- if (snapCoord1.valid && snapCoord1 != snapSpot1)
+ RS_Pen oldPen = painter->getPen();
+ //ick. doesn't work...
+// pntr.setCompositionMode(QPainter::CompositionMode_Xor);
+ // One of these has GOT to work... (but NEITHER do...!)
+ // It's because this is the pen for the container, not the entities INSIDE...
+ // How do we fix that??? [by drawing the container ourselves, that's how. :-/]
+ painter->setPen(RS_Pen(RS_Color(60, 255, 80), RS2::Width00, RS2::SolidLine));
+// preview.setPen(RS_Pen(RS_Color(60, 255, 60), RS2::Width00, RS2::SolidLine));
+ painter->setOffset(preview.Offset());
+//This is green, but in the upper left hand corner...
+//painter->drawLine(Vector(15, 15), Vector(15, -15));
+//painter->drawLine(Vector(15, -15), Vector(-15, -15));
+//painter->drawLine(Vector(-15, -15), Vector(-15, 15));
+//painter->drawLine(Vector(-15, 15), Vector(15, 15));
+// drawEntityPlain(&preview);
+ for(RS_Entity * e=preview.firstEntity(RS2::ResolveNone); e!=NULL;
+ e = preview.nextEntity(RS2::ResolveNone))
{
- painter->drawLine(toGui(snapSpot1) + Vector(-5, 0), toGui(snapSpot1) + Vector(-1, 4));
- painter->drawLine(toGui(snapSpot1) + Vector(0, 5), toGui(snapSpot1) + Vector(4, 1));
- painter->drawLine(toGui(snapSpot1) + Vector(5, 0), toGui(snapSpot1) + Vector(1, -4));
- painter->drawLine(toGui(snapSpot1) + Vector(0, -5), toGui(snapSpot1) + Vector(-4, -1));
+// e->setPen(RS_Pen(RS_Color(60, 255, 80), RS2::Width00, RS2::SolidLine));
+ drawEntityPlain(e);
}
-#endif
+ //ick
+// pntr.setCompositionMode(QPainter::CompositionMode_Source);
+ painter->setOffset(Vector(0, 0));
+ painter->setPen(oldPen);
}
+#endif
+
+ if (snapper.Visible())
+ snapper.Draw(this, painter);
delete painter;
painter = NULL;