return;
}
+printf("FileOpen: container size = %li\n", container.objects.size());
drawing->document = container;
drawing->update();
documentName = filename;
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());
}
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();
}