From f97fcdd0f5c95d15cc8f03a818ed8e90e76e8f5a Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 12 Jul 2013 15:09:18 -0500 Subject: [PATCH] Initial addition of Layer and Block widgets. --- res/architektonas.qrc | 2 ++ res/eye-closed.png | Bin 0 -> 303 bytes res/eye-open.png | Bin 0 -> 504 bytes src/applicationwindow.cpp | 19 ++++++++++++------- src/circle.cpp | 22 +++++++-------------- src/circle.h | 2 +- src/container.cpp | 27 ++++++++++++++++++++++++++ src/layerwidget.cpp | 39 ++++++++++++++++++++++++++++++++++++++ src/layerwidget.h | 16 ++++++++++++++++ src/line.cpp | 2 +- src/text.h | 1 + 11 files changed, 106 insertions(+), 24 deletions(-) create mode 100644 res/eye-closed.png create mode 100644 res/eye-open.png 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 0000000000000000000000000000000000000000..d4d1285ae7a35cc4527cb101936740f044d43c7d GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)JC6XrimmrrxQ{ z84u->9tuS5Y+9O;RNQE<$av66Aii`@^?vs9KVOxjYEFekv`^g2cy*@lhHr*4Nr4La zjGvF#vu<8H{j-6Vj$wwTMAFnJX=e{;WUebXE-7v!^j{)1^7At$|1X9|S(2yhVB2w6 o*H3fzyeW&XKl*M}_c?VhL%?PEo~g#nYe4SyboFyt=akR{0Q?eZR{#J2 literal 0 HcmV?d00001 diff --git a/res/eye-open.png b/res/eye-open.png new file mode 100644 index 0000000000000000000000000000000000000000..36e36935bdaaeae8713979b3da078ba521047166 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkEA{;uvCa`s}3rdM=I!2HQNdh)i1~#^h>~N-qUFNX@87vS{%6TmoUALjH2CbC_j7)xoiqO+|FGc| zf6dkF`zEULoM=o;keg9>&X-BVwUB=f;Rd*?B)e9jWX zB>eYTX#A9!nmo=&3)cvFPSW6DnmN-;c0A9pE$0)J7ucqht&P|F37V&>M{ll!mq%T=>YTu+_S@q>XYNb}PjG7yGL-s7c zRPDejQF2a`qiNCYw{>k2>Rg96d{E^3D*f^|cW~T~YdL0{HM)!xO3!i5_%tg%ao_2_ snRjR0+{&NxLI2sk=OJ}B|10ldKBT)ewfZ+>J}3e_UHx3vIVCg!052-Ut^fc4 literal 0 HcmV?d00001 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); -- 2.37.2