X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=a9108eb5f6d3d2b5d96b5280b99e13652013f6ed;hb=ba6723b86d8dd67ebc7b11b245de3e7ff64f06b1;hp=a9c7fb6b25c64e1451beb26ed35f41775a58a511;hpb=baf67656b97e3d61e9223e66ebe4f554e364cd4a;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index a9c7fb6..a9108eb 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -118,6 +118,7 @@ void ApplicationWindow::FileOpen(void) return; } +printf("FileOpen: container size = %li\n", container.objects.size()); drawing->document = container; drawing->update(); documentName = filename; @@ -345,8 +346,19 @@ void ApplicationWindow::SetInternalToolStates(void) Object::SetDeleteActive(deleteAct->isChecked()); Object::SetDimensionActive(addDimensionAct->isChecked()); drawing->SetRotateToolActive(rotateAct->isChecked()); + + // We can be sure that if we've come here, then either an active tool is + // being deactivated, or a new tool is being created. In either case, the + // old tool needs to be deleted. + if (drawing->toolAction) + { + delete drawing->toolAction; + drawing->toolAction = NULL; + } + drawing->SetAddLineToolActive(addLineAct->isChecked()); drawing->SetAddCircleToolActive(addCircleAct->isChecked()); + drawing->SetAddDimensionToolActive(addDimensionAct->isChecked()); } @@ -373,6 +385,52 @@ void ApplicationWindow::Settings(void) void ApplicationWindow::HandleGrouping(void) { // Group a bunch of selected objects together or ungroup a selected group. + + if (drawing->document.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 (drawing->document.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); + } + // Otherwise, if it's a group of 2 or more objects (which can be groups too) + // group them and select the group + else if (drawing->document.ItemsSelected() > 1) + { + Container * container = new Container(Vector(), &(drawing->document)); + drawing->document.MoveSelectedContentsTo(container); + drawing->document.Add(container); + container->DeselectAll(); + container->state = OSSelected; + } + + drawing->update(); }