+ statusBar()->showMessage(QString(tr("Grouped %1 objects.")).arg(itemsSelected));
+ }
+#else
+ int numSelected = drawing->select.size();
+
+ // If nothing selected, do nothing
+ if (numSelected == 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 (numSelected == 1)
+ {
+ Object * obj = (Object *)drawing->select[0];
+
+ if (obj->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);
+ Container * c = (Container *)obj;
+//printf("Ungroup: container size = %li\n", c->objects.size());
+ SelectAll(c->objects);
+//printf("Ungroup: document size = %li (pre-AddObjectsTo)\n", drawing->document.objects.size());
+ RemoveSelectedObjects(drawing->document.objects);
+ AddObjectsTo(drawing->document.objects, c->objects);
+ drawing->select.clear();
+ AddObjectsTo(drawing->select, c->objects);
+ delete c;
+ statusBar()->showMessage(tr("Objects ungrouped."));
+//printf("Ungroup: document size = %li\n", drawing->document.objects.size());
+ }
+ // Otherwise, if it's a group of 2 or more objects (which can be groups too)
+ // group them and select the group
+ else if (numSelected > 1)
+ {
+// Container * container = new Container(Vector(), &(drawing->document));
+// drawing->document.MoveSelectedContentsTo(container);
+// drawing->document.Add(container);
+// container->DeselectAll();
+// container->state = OSSelected;
+
+ Container * c = new Container();
+// AddObjectsTo(c->objects, drawing->select);
+// RemoveSelectedObjects(drawing->document.objects);
+ MoveSelectedObjectsTo(c->objects, drawing->document.objects);
+ drawing->document.objects.push_back(c);
+ ClearSelected(c->objects);
+ c->selected = true;
+ c->layer = Global::currentLayer;
+
+ Rect r = drawing->GetObjectExtents((Object *)c);
+ c->p[0] = r.TopLeft();
+ c->p[1] = r.BottomRight();
+
+ drawing->select.clear();
+ drawing->select.push_back(c);
+ statusBar()->showMessage(QString(tr("Grouped %1 objects.")).arg(numSelected));
+//printf("Group: document size = %li\n", drawing->document.objects.size());
+ }
+#endif
+
+ drawing->update();
+}
+
+
+void ApplicationWindow::HandleConnection(void)
+{
+#if 0
+//double tt = Geometry::ParameterOfLineAndPoint(Vector(0, 0), Vector(10, 0), Vector(8, 2));
+//printf("Parameter of point @ (8,2) of line (0,0), (10,0): %lf\n", tt);
+ int itemsSelected = drawing->document.ItemsSelected();
+
+ // If nothing selected, do nothing
+ if (itemsSelected == 0)
+ {
+ statusBar()->showMessage(tr("No objects selected to connect."));
+ return;
+ }
+
+ // If one thing selected, do nothing
+ if (itemsSelected == 1)
+ {
+ statusBar()->showMessage(tr("Nothing to connect object to."));
+ return;