X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fwidgets%2Fqg_graphicview.cpp;h=4704f0a2cb8ec149f54fe19ac713c03da27541be;hb=c5e595b3156fdf5f93ab6a1032dcc77e859ac6fa;hp=b7d010ca178f4b2f4ebce28c3842c35a7e19ac20;hpb=16ce54abf01ca3032e42a5bb11a4afcf9014dcca;p=architektonas diff --git a/src/widgets/qg_graphicview.cpp b/src/widgets/qg_graphicview.cpp index b7d010c..4704f0a 100644 --- a/src/widgets/qg_graphicview.cpp +++ b/src/widgets/qg_graphicview.cpp @@ -14,12 +14,16 @@ #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_graphic.h" +#include "rs_dialogfactory.h" +#include "graphicview.h" +#include "rs_preview.h" +#include "drawing.h" #include "settings.h" #include "rs_system.h" #include "rs_patternlist.h" @@ -33,26 +37,47 @@ * 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; 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); + RS_DEBUG->print("--> Setting up layout..."); layout = new QGridLayout(this); layout->setColumnStretch(0, 1); layout->setColumnStretch(1, 0); @@ -68,6 +93,7 @@ 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(). */ + RS_DEBUG->print("--> Creating hScrollBar..."); hScrollBar = new QG_ScrollBar(Qt::Horizontal, this); // hScrollBar->setLineStep(50); hScrollBar->setSingleStep(50); @@ -75,8 +101,8 @@ A non-zero alignment indicates that the widget should not grow to fill the avail 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))); + RS_DEBUG->print("--> Creating vScrollBar..."); vScrollBar = new QG_ScrollBar(Qt::Vertical, this); // vScrollBar->setLineStep(50); vScrollBar->setSingleStep(50); @@ -84,41 +110,33 @@ A non-zero alignment indicates that the widget should not grow to fill the avail 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); @@ -138,6 +156,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); @@ -159,14 +178,10 @@ 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) + if (buffer) { delete buffer; buffer = NULL; @@ -191,110 +206,12 @@ int QG_GraphicView::getHeight() 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; @@ -449,6 +366,10 @@ 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. +*/ // Next three methods from RS_LayerListListener Interface: void QG_GraphicView::layerEdited(RS_Layer *) { @@ -477,19 +398,19 @@ void QG_GraphicView::mousePressEvent(QMouseEvent * e) 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); @@ -504,7 +425,7 @@ 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??? @@ -595,13 +516,13 @@ void QG_GraphicView::tabletEvent(QTabletEvent * e) 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); } @@ -613,7 +534,7 @@ void QG_GraphicView::focusOutEvent(QFocusEvent * 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")); } @@ -628,11 +549,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; @@ -678,7 +598,7 @@ Qt::KeyboardModifiers keyState = QApplication::keyboardModifiers(); void QG_GraphicView::keyPressEvent(QKeyEvent * e) { - if (container == NULL) + if (!container) return; bool scroll = false; @@ -710,12 +630,12 @@ void QG_GraphicView::keyPressEvent(QKeyEvent * e) 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); } /** @@ -744,11 +664,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); @@ -855,6 +775,11 @@ void QG_GraphicView::slotVScrolled(int value) * 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 *) { @@ -885,6 +810,15 @@ have something back in portage. We can make it better, faster, stronger. ;-) 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 @@ -1010,13 +944,13 @@ of VectorWorks & etc. as well... */ void QG_GraphicView::previewUrl(const Q3Url & u) { - //static RS_Graphic* gr = new RS_Graphic(); + //static Drawing* gr = new Drawing(); RS_DEBUG->print("QG_GraphicView::previewUrl"); if (container != NULL && container->rtti() == RS2::EntityGraphic) { - ((RS_Graphic *)container)->open(u.path(), RS2::FormatUnknown); + ((Drawing *)container)->open(u.path(), RS2::FormatUnknown); zoomAuto(); } //setContainer(gr);