X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fapplicationwindow.cpp;h=ef42ca24a6acc9fc2c00089965f7855ff5e13852;hb=f97fcdd0f5c95d15cc8f03a818ed8e90e76e8f5a;hp=20387318f1f5d24fb022dffad04cf379e891b198;hpb=e11a07565fe5ef3dfafbf9a933d7a1575e058867;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 2038731..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)); } @@ -197,7 +202,17 @@ void ApplicationWindow::FixLength(void) // We want certain tools to be exclusive, and this approach isn't working correctly... void ApplicationWindow::DeleteTool(void) { - + // For this tool, we check first to see if anything is selected. If so, we + // delete those and *don't* select the delete tool. + if (drawing->document.ItemsSelected() > 0) + { + drawing->document.DeleteSelectedItems(); + drawing->update(); + deleteAct->setChecked(false); + return; + } + + // Otherwise, toggle the state of the tool ClearUIToolStatesExcept(deleteAct); SetInternalToolStates(); } @@ -382,9 +397,62 @@ void ApplicationWindow::Settings(void) } +// +// Group a bunch of selected objects (which can include other groups) together +// or ungroup a selected group. +// void ApplicationWindow::HandleGrouping(void) { - // Group a bunch of selected objects together or ungroup a selected group. + int itemsSelected = drawing->document.ItemsSelected(); + + // If nothing selected, do nothing + if (itemsSelected == 0) + { + statusBar()->showMessage(tr("No objects selected to make a group from.")); + return; + } + + // If it's a group that's selected, ungroup it and leave the objects in a + // selected state + if (itemsSelected == 1) + { + Object * object = drawing->document.SelectedItem(0); + +#if 0 +if (object == NULL) + printf("SelectedItem = NULL!\n"); +else + printf("SelectedItem = %08X, type = %i\n", object, object->type); +#endif + + if (object == NULL || object->type != OTContainer) + { + statusBar()->showMessage(tr("A group requires two or more selected objects.")); + return; + } + + // Need the parent of the group, we're assuming here that the parent is + // the drawing's document. Does it matter? Maybe... + // Could just stipulate that grouping like this only takes place where the + // parent of the group is the drawing's document. Makes life much simpler. + ((Container *)object)->SelectAll(); + ((Container *)object)->MoveContentsTo(&(drawing->document)); + drawing->document.Delete(object); + statusBar()->showMessage(tr("Objects ungrouped.")); + } + // Otherwise, if it's a group of 2 or more objects (which can be groups too) + // group them and select the group + else if (itemsSelected > 1) + { + Container * container = new Container(Vector(), &(drawing->document)); + drawing->document.MoveSelectedContentsTo(container); + drawing->document.Add(container); + container->DeselectAll(); + container->state = OSSelected; + statusBar()->showMessage(QString(tr("Grouped %1 objects.")).arg(itemsSelected)); + } + + drawing->update(); } @@ -394,7 +462,7 @@ void ApplicationWindow::CreateActions(void) QIcon(":/res/quit.png"), QKeySequence(tr("Ctrl+q"))); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); - snapToGridAct = CreateAction(tr("Snap To &Grid"), tr("Snap To Grid"), tr("Snaps mouse cursor to the visible grid when moving/creating objects."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("S")), true); + snapToGridAct = CreateAction(tr("Snap To &Grid"), tr("Snap To Grid"), tr("Snaps mouse cursor to the visible grid when moving/creating objects."), QIcon(":/res/snap-to-grid-tool.png"), QKeySequence(tr("S")), true); connect(snapToGridAct, SIGNAL(triggered()), this, SLOT(SnapToGridTool())); fixAngleAct = CreateAction(tr("Fix &Angle"), tr("Fix Angle"), tr("Fixes the angle of an object."), @@ -405,7 +473,7 @@ void ApplicationWindow::CreateActions(void) QIcon(":/res/fix-length.png"), QKeySequence(tr("F,L")), true); connect(fixLengthAct, SIGNAL(triggered()), this, SLOT(FixLength())); - deleteAct = CreateAction(tr("&Delete"), tr("Delete Object"), tr("Deletes selected objects."), QIcon(":/res/delete-tool.png"), QKeySequence(), true); + deleteAct = CreateAction(tr("&Delete"), tr("Delete Object"), tr("Deletes selected objects."), QIcon(":/res/delete-tool.png"), QKeySequence(tr("Delete")), true); connect(deleteAct, SIGNAL(triggered()), this, SLOT(DeleteTool())); addDimensionAct = CreateAction(tr("Add &Dimension"), tr("Add Dimension"), tr("Adds a dimension to the drawing."), QIcon(":/res/dimension-tool.png"), QKeySequence("D,I"), true); @@ -452,7 +520,7 @@ void ApplicationWindow::CreateActions(void) settingsAct = CreateAction(tr("&Settings"), tr("Settings"), tr("Change certain defaults for Architektonas."), QIcon(":/res/generic-tool.png"), QKeySequence()); connect(settingsAct, SIGNAL(triggered()), this, SLOT(Settings())); - groupAct = CreateAction(tr("&Group"), tr("Group"), tr("Group/ungroup selected objects."), QIcon(":/res/generic-tool.png"), QKeySequence("g")); + groupAct = CreateAction(tr("&Group"), tr("Group"), tr("Group/ungroup selected objects."), QIcon(":/res/group-tool.png"), QKeySequence("g")); connect(groupAct, SIGNAL(triggered()), this, SLOT(HandleGrouping())); //Hm. I think we'll have to have separate logic to do the "Radio Group Toolbar" thing...