X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fwidgets%2Fqg_graphicview.cpp;h=9e68c5df957d12cf19b0cf2b31b4960bbbd5204b;hb=d774c2655ba2c3657a565f325411144452392277;hp=7c0b632076f5eb2281be0f3a53edb0e20343c952;hpb=27d4a138d23453e93a833e9347444b828a971cb4;p=architektonas diff --git a/src/widgets/qg_graphicview.cpp b/src/widgets/qg_graphicview.cpp index 7c0b632..9e68c5d 100644 --- a/src/widgets/qg_graphicview.cpp +++ b/src/widgets/qg_graphicview.cpp @@ -14,21 +14,22 @@ #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 "drawing.h" #include "graphicview.h" +#include "rs_patternlist.h" +#include "paintinterface.h" #include "rs_preview.h" -#include "drawing.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 @@ -37,15 +38,47 @@ */ QG_GraphicView::QG_GraphicView(QWidget * parent, const char */*name*/, Qt::WindowFlags f): 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); @@ -60,22 +93,27 @@ Alignment is specified by alignment, which is a bitwise OR of Qt::AlignmentFlags 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__ @@ -120,6 +158,7 @@ A non-zero alignment indicates that the widget should not grow to fill the avail //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); @@ -141,18 +180,14 @@ A non-zero alignment indicates that the widget should not grow to fill the avail */ 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(); } @@ -333,6 +368,13 @@ void QG_GraphicView::resizeEvent(QResizeEvent * /*e*/) 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 *) { @@ -348,6 +390,7 @@ void QG_GraphicView::layerToggled(RS_Layer *) { redraw(); } +#endif void QG_GraphicView::emulateMouseMoveEvent() { @@ -359,7 +402,7 @@ void QG_GraphicView::mousePressEvent(QMouseEvent * e) { // 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)); GraphicView::mousePressEvent(e); QWidget::mousePressEvent(e); @@ -373,7 +416,7 @@ void QG_GraphicView::mouseReleaseEvent(QMouseEvent * 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); @@ -385,20 +428,8 @@ void QG_GraphicView::mouseReleaseEvent(QMouseEvent * e) void QG_GraphicView::mouseMoveEvent(QMouseEvent * e) { - //RS_DEBUG->print("QG_GraphicView::mouseMoveEvent begin"); - //QMouseEvent rsm = QG_Qt2Rs::mouseEvent(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"); } /** @@ -416,7 +447,7 @@ void QG_GraphicView::tabletEvent(QTabletEvent * e) { 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); @@ -424,7 +455,7 @@ void QG_GraphicView::tabletEvent(QTabletEvent * e) a->finish(); if (container->countSelected() > 0) - setCurrentAction(new RS_ActionModifyDelete(*container, *this)); + setCurrentAction(new ActionModifyDelete(*container, *this)); } } break; @@ -512,11 +543,10 @@ void QG_GraphicView::wheelEvent(QWheelEvent * e) //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; @@ -546,15 +576,15 @@ Qt::KeyboardModifiers keyState = QApplication::keyboardModifiers(); } 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(); @@ -562,7 +592,7 @@ Qt::KeyboardModifiers keyState = QApplication::keyboardModifiers(); void QG_GraphicView::keyPressEvent(QKeyEvent * e) { - if (container == NULL) + if (!container) return; bool scroll = false; @@ -592,7 +622,7 @@ void QG_GraphicView::keyPressEvent(QKeyEvent * e) } if (scroll) - setCurrentAction(new RS_ActionZoomScroll(direction, *container, *this)); + setCurrentAction(new ActionZoomScroll(direction, *container, *this)); GraphicView::keyPressEvent(e); } @@ -617,7 +647,7 @@ void QG_GraphicView::adjustOffsetControls() RS_DEBUG->print("QG_GraphicView::adjustOffsetControls() begin"); - if (container == NULL || hScrollBar == NULL || vScrollBar == NULL) + if (!container || !hScrollBar || !vScrollBar) return; disableUpdate(); @@ -628,11 +658,11 @@ void QG_GraphicView::adjustOffsetControls() 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); @@ -779,137 +809,45 @@ of VectorWorks & etc. as well... // 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