#include "qg_graphicview.h"
-#include "rs_actionzoomin.h"
-#include "rs_actionzoompan.h"
-#include "rs_actionzoomscroll.h"
-#include "rs_actionmodifydelete.h"
-#include "rs_actionselectsingle.h"
+#include "qg_dialogfactory.h"
+#include "actiondefault.h"
+#include "actionzoomin.h"
+#include "actionzoompan.h"
+#include "actionzoomscroll.h"
+#include "actionmodifydelete.h"
+#include "actionselectsingle.h"
+#include "cadtoolbar.h"
#include "rs_dialogfactory.h"
-#include "rs_graphicview.h"
-#include "rs_preview.h"
#include "drawing.h"
+#include "graphicview.h"
+#include "rs_patternlist.h"
+#include "paintinterface.h"
+#include "rs_preview.h"
#include "settings.h"
#include "rs_system.h"
-#include "rs_patternlist.h"
-#include "cadtoolbar.h"
-#include "paintintf.h"
-#include "qg_dialogfactory.h"
#define QG_SCROLLMARGIN 400
* 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 ActionDefault(*doc, *this));
+}
+
+void QG_GraphicView::CommonInitialization(void)
{
setBackground(background);
- buffer = NULL;
+//meh buffer = NULL;
lastWidth = 0;
lastHeight = 0;
//hrm.
painter = NULL;
- 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__
//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();
}
*/
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()
{
{
// pan zoom with middle mouse button
if (e->button() == Qt::MidButton /*|| (e->state()==Qt::LeftButton|Qt::AltButton)*/)
- setCurrentAction(new RS_ActionZoomPan(*container, *this));
+ setCurrentAction(new 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);
void QG_GraphicView::mouseMoveEvent(QMouseEvent * 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???
-//#ifdef Q_OS_WIN32
-// // make sure that we can still use hotkeys and the mouse wheel
-// if (parent() != NULL)
-// ((QWidget *)parent())->setFocus();
-//#endif
-
- //RS_DEBUG->print("QG_GraphicView::mouseMoveEvent end");
}
/**
{
if (container != NULL)
{
- RS_ActionSelectSingle * a = new RS_ActionSelectSingle(*container, *this);
+ ActionSelectSingle * a = new ActionSelectSingle(*container, *this);
setCurrentAction(a);
#warning "!!! !!!"
// QMouseEvent ev(QEvent::MouseButtonRelease, e->pos(), Qt::LeftButton, Qt::LeftButton);
a->finish();
if (container->countSelected() > 0)
- setCurrentAction(new RS_ActionModifyDelete(*container, *this));
+ setCurrentAction(new ActionModifyDelete(*container, *this));
}
}
break;
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;
}
if (scroll)
- setCurrentAction(new RS_ActionZoomScroll(direction, *container, *this));
+ setCurrentAction(new ActionZoomScroll(direction, *container, *this));
// zoom in / out:
// else if (e->state() == 0)
else if (keyState == 0)
{
if (e->delta() > 0)
- setCurrentAction(new RS_ActionZoomIn(*container, *this, RS2::In, RS2::Both, mouse));
+ setCurrentAction(new ActionZoomIn(*container, *this, RS2::In, RS2::Both, mouse));
else
- setCurrentAction(new RS_ActionZoomIn(*container, *this, RS2::Out, RS2::Both, mouse));
+ setCurrentAction(new ActionZoomIn(*container, *this, RS2::Out, RS2::Both, mouse));
}
e->accept();
void QG_GraphicView::keyPressEvent(QKeyEvent * e)
{
- if (container == NULL)
+ if (!container)
return;
bool scroll = false;
}
if (scroll)
- setCurrentAction(new RS_ActionZoomScroll(direction, *container, *this));
+ setCurrentAction(new 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);
// Qt4 handles double buffering of screen writes now, so this needs
// a rewrite.
#warning "!!! Need to pass a valid QPainter to drawIt() !!!"
-#if 0
- drawIt();
-
-//#warning "!!! Double buffering is out... !!!"
-// Seems most rendering is going through this path... Hrm.
- if (buffer != NULL)
- {
- QPainter wPainter;
- wPainter.begin(this);
- wPainter.drawPixmap(0, 0, *buffer);
- wPainter.end();
- }
-#else
-// refCount++;
-//if (refCount > 1)
-//{
-//// RS_DEBUG->print(RS_Debug::D_CRITICAL, "paintEvent seems to be called recursively: refCount=%u", refCount);
-// printf("paintEvent seems to be called recursively: refCount=%u\n", refCount);
-//}
QPainter pntr(this);
pntr.setBackgroundMode(Qt::OpaqueMode);
-// pntr.setBackgroundColor(background);
pntr.setBackground(QBrush(background));
painter = new PaintInterface(&pntr);
-#if 0
- if (!painter)
- {
- painter = new RS_PainterQt(this);
-
- //Nope, this didn't fix the problem...
- //The problem is, unless we specifically tell Qt NOT to
- //clear the window every time, it will...
- //So...
-// if (!previewMode)
- {
- painter->setDrawingMode(drawingMode);
- ((RS_PainterQt *)painter)->setBackgroundMode(Qt::OpaqueMode);
- ((RS_PainterQt *)painter)->setBackgroundColor(background);
-// ((RS_PainterQt *)painter)->eraseRect(0, 0, getWidth(), getHeight());
- }
- }
- else
- {
- printf("QG_GraphicView::paintEvent: painter is NOT NULL!\n");
- }
-#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 (previewMode)
- {
-//hrm. painter->setCompositionMode(QPainter::CompositionMode_Xor);
-//needed anymore? painter->setXORMode();
- painter->setOffset(previewOffset);
- drawEntity(previewEntity);//meh -> , 1.0, false);
- painter->setOffset(Vector(0, 0));
- // We'll set previewMode to false here, just because we can
- previewMode = false;
- }
-#endif
- if (snapperDraw)
-// if (false)
+ // Draw the snapper first, we want to be able to see the preview on top of
+ // this...
+ if (snapper.Visible())
+ snapper.Draw(this, painter);
+
+ if (preview.Visible())
+#if 0
{
- snapperDraw = false;
+ painter->setPen(RS_Pen(RS_Color(60, 255, 80), RS2::Width00, RS2::SolidLine));
+ painter->setOffset(preview.Offset());
- if (snapCoord1.valid)
+ // We have to traverse the container ourselves, because RS_Container::draw()
+ // uses drawEntity() instead of drawEntityPlain()...
+ for(RS_Entity * e=preview.firstEntity(RS2::ResolveNone); e!=NULL;
+ e = preview.nextEntity(RS2::ResolveNone))
{
- // 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
+ drawEntityPlain(e);
}
-#if 1
- if (snapCoord1.valid && snapCoord1 != snapSpot1)
- {
- 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));
- }
-#endif
+
+ painter->setOffset(Vector(0, 0));
}
+#else
+ preview.Draw(this, painter);
+#endif
delete painter;
painter = NULL;
-// refCount--;
-#endif
-
RS_DEBUG->print("QG_GraphicView::paintEvent end");
}
-
-#if 0 //JLH
-/**
- * Previews the given url for the file open dialog.
- */
-void QG_GraphicView::previewUrl(const Q3Url & u)
-{
- //static Drawing* gr = new Drawing();
-
- RS_DEBUG->print("QG_GraphicView::previewUrl");
-
- if (container != NULL && container->rtti() == RS2::EntityGraphic)
- {
- ((Drawing *)container)->open(u.path(), RS2::FormatUnknown);
- zoomAuto();
- }
- //setContainer(gr);
-
- RS_DEBUG->print("QG_GraphicView::previewUrl: OK");
-}
-#endif