From: Shamus Hammons Date: Fri, 12 Jul 2013 20:09:18 +0000 (-0500) Subject: Initial addition of Layer and Block widgets. X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;ds=inline;h=f97fcdd0f5c95d15cc8f03a818ed8e90e76e8f5a;p=architektonas Initial addition of Layer and Block widgets. --- diff --git a/res/architektonas.qrc b/res/architektonas.qrc index f32a316..e8a96eb 100644 --- a/res/architektonas.qrc +++ b/res/architektonas.qrc @@ -18,5 +18,7 @@ quit.png zoom-in.png zoom-out.png + eye-open.png + eye-closed.png diff --git a/res/eye-closed.png b/res/eye-closed.png new file mode 100644 index 0000000..d4d1285 Binary files /dev/null and b/res/eye-closed.png differ diff --git a/res/eye-open.png b/res/eye-open.png new file mode 100644 index 0000000..36e3693 Binary files /dev/null and b/res/eye-open.png differ diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 4aac209..ef42ca2 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -29,9 +29,11 @@ #include "applicationwindow.h" #include "about.h" +#include "blockwidget.h" #include "drawingview.h" #include "fileio.h" #include "generaltab.h" +#include "layerwidget.h" #include "painter.h" #include "settingsdialog.h" @@ -53,20 +55,23 @@ ApplicationWindow::ApplicationWindow(): settings("Underground Software", "Archit CreateMenus(); CreateToolbars(); + // Create Dock widgets + QDockWidget * dock1 = new QDockWidget(tr("Layers"), this); + LayerWidget * lw = new LayerWidget; + dock1->setWidget(lw); + addDockWidget(Qt::RightDockWidgetArea, dock1); + QDockWidget * dock2 = new QDockWidget(tr("Blocks"), this); +// BlockWidget * bw = new BlockWidget; +// dock2->setWidget(bw); + addDockWidget(Qt::RightDockWidgetArea, dock2); + // Create status bar zoomIndicator = new QLabel("Grid: 12.0\" Zoom: 12.5%"); statusBar()->addPermanentWidget(zoomIndicator); statusBar()->showMessage(tr("Ready")); ReadSettings(); - -// connect(textEdit->document(), SIGNAL(contentsChanged()), -// this, SLOT(documentWasModified())); - -// setCurrentFile(""); setUnifiedTitleAndToolBarOnMac(true); - -// ((TTEdit *)qApp)->charWnd->show();//eh? Object::SetFont(new QFont("Verdana", 15, QFont::Bold)); } diff --git a/src/circle.cpp b/src/circle.cpp index 6473440..1f350b0 100644 --- a/src/circle.cpp +++ b/src/circle.cpp @@ -126,21 +126,7 @@ Circle::~Circle() } -/*virtual*/ QRectF Circle::Extents(void) -{ - return QRectF(QPointF(position.x - radius, position.y - radius), QPointF(position.x + radius, position.y + radius)); -} - - -#if 0 -/*virtual*/ ObjectType Circle::Type(void) -{ - return OTCircle; -} -#endif - - -bool Circle::HitTest(Point point) +/*virtual*/ bool Circle::HitTest(Point point) { SaveState(); hitCenter = hitCircle = false; @@ -173,6 +159,12 @@ pointed at length with our on screen length. } +/*virtual*/ QRectF Circle::Extents(void) +{ + return QRectF(QPointF(position.x - radius, position.y - radius), QPointF(position.x + radius, position.y + radius)); +} + + void Circle::SaveState(void) { oldHitCenter = hitCenter; diff --git a/src/circle.h b/src/circle.h index f420121..1f0d387 100644 --- a/src/circle.h +++ b/src/circle.h @@ -14,13 +14,13 @@ class Circle: public Object virtual bool Collided(Vector); virtual void PointerMoved(Vector); virtual void PointerReleased(void); + virtual bool HitTest(Point); virtual void Enumerate(FILE *); virtual QRectF Extents(void); // virtual Object * Copy(void); // virtual ObjectType Type(void); protected: - bool HitTest(Point); void SaveState(void); bool StateChanged(void); diff --git a/src/container.cpp b/src/container.cpp index 47295f4..25079d9 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -191,6 +191,26 @@ class so that we can leverage that stuff here as well. // every object for collision. /*virtual*/ void Container::PointerMoved(Vector point) { + if (!isTopLevelContainer) + { + // check for selection rectangle too + + + needUpdate = true; + + for(std::vector::iterator i=objects.begin(); i!=objects.end(); i++) + { + if ((*i)->HitTest(point)) + { + state = OSSelected; + return; + } + } + + state = OSInactive; + return; + } + // objectWasDragged = true; //printf("CONTAINER: PointerMoved()\n"); @@ -230,6 +250,13 @@ about keeping track of old states... /*virtual*/ bool Container::NeedsUpdate(void) { + // If this is *not* a top level container, then we treat it as an + // aggregate object. + if (!isTopLevelContainer) + { + return needUpdate; + } + // Search through objects for one that needs an update; if one is found, // return immediately. for(std::vector::iterator i=objects.begin(); i!=objects.end(); i++) diff --git a/src/layerwidget.cpp b/src/layerwidget.cpp index 2272253..ba90791 100644 --- a/src/layerwidget.cpp +++ b/src/layerwidget.cpp @@ -12,3 +12,42 @@ // #include "layerwidget.h" + + +#if 0 +OK, what it seems like we should do here, is instead of deriving from QDockWidget, +we should derive from QWidget (or QScrollArea or somesuch). Then, when creating +the dockwidget in the main window, we add the LayerWidget as the QDockWidget's +main widget. +#endif + +LayerWidget::LayerWidget(void): QWidget() +{ + + // Make a QScrollArea, put in a QVBoxLayout. + // Use line widget (two checkboxes, one label), use setIcon() on the + // checkboxes to change their look (eye open/closed for visibility, + // lock open/closed for layer lock). + + QIcon visibleChecked(":/res/eye-open.png"); +// QIcon visibleUnchecked(":/res/eye-closed.png"); + visibleChecked.addFile(":/res/eye-closed.png", QSize(16, 16), QIcon::Normal, QIcon::On); + + QVBoxLayout * mainLayout = new QVBoxLayout; + QCheckBox * box1 = new QCheckBox("bleah"); + box1->setIcon(visibleChecked); + mainLayout->addWidget(box1); + QPushButton * button1 = new QPushButton;//(visibleChecked); + button1->setFlat(true); + button1->setIcon(visibleChecked); + button1->setCheckable(true); + mainLayout->addWidget(button1); +//printf("LayerWidget: About to set layout...\n"); + setLayout(mainLayout); +} + + +LayerWidget::~LayerWidget() +{ +} + diff --git a/src/layerwidget.h b/src/layerwidget.h index e69de29..33000ea 100644 --- a/src/layerwidget.h +++ b/src/layerwidget.h @@ -0,0 +1,16 @@ +#ifndef __LAYERWIDGET_H__ +#define __LAYERWIDGET_H__ + +#include + +class LayerWidget: public QWidget +{ + Q_OBJECT + + public: + LayerWidget(void); + ~LayerWidget(); + +}; + +#endif // __LAYERWIDGET_H__ diff --git a/src/line.cpp b/src/line.cpp index 156b55e..aa5054b 100644 --- a/src/line.cpp +++ b/src/line.cpp @@ -461,7 +461,7 @@ about keeping track of old states... } -bool Line::HitTest(Point point) +/*virtual*/ bool Line::HitTest(Point point) { SaveState(); diff --git a/src/text.h b/src/text.h index 351a1a1..a075902 100644 --- a/src/text.h +++ b/src/text.h @@ -15,6 +15,7 @@ class Text: public Object virtual bool Collided(Vector); virtual void PointerMoved(Vector); virtual void PointerReleased(void); + virtual bool HitTest(Point); virtual void Enumerate(FILE *); // virtual Object * Copy(void); virtual Vector GetPointAtParameter(double parameter);