//
void ApplicationWindow::HandleGrouping(void)
{
-#if 0
- 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));
- }
-#else
int numSelected = drawing->select.size();
// If nothing selected, do nothing
// 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();
// 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;
+ c->layer = Global::activeLayer;
Rect r = drawing->GetObjectExtents((Object *)c);
c->p[0] = r.TopLeft();
statusBar()->showMessage(QString(tr("Grouped %1 objects.")).arg(numSelected));
//printf("Group: document size = %li\n", drawing->document.objects.size());
}
-#endif
drawing->update();
}
void ApplicationWindow::HandleDimensionSize(QString text)
{
/*
-This is the third input on the view toolbar; not sure what it was supposed to do...
+This is the third input on the view toolbar; not sure what it was supposed to do... (resize all dimensions in the drawing?)
*/
// Parse the text...
bool ok;
if (drawing->select.size() > 0)
{
DeleteContents(clipboard);
- CopySelectedObjectsTo(clipboard, drawing->document.objects);
+ clipboard = CopySelectedObjects(drawing->document.objects);
}
}
if (drawing->select.size() > 0)
{
DeleteContents(clipboard);
- MoveSelectedObjectsTo(clipboard, drawing->document.objects);
+ clipboard = MoveSelectedObjectsFrom(drawing->document.objects);
drawing->update();
}
}
if (clipboard.size() > 0)
{
// We want to maybe make it so that the pasted objects are being moved in a "mouse drag" state...
- // This only moves the cut/copied from the clipboard to the drawing.
-// AddObjectsTo(drawing->document.objects, clipboard);
- CopyObjects(clipboard, drawing->document.objects);
+ ClearSelected(drawing->document.objects);
+ SelectAll(clipboard);
+ drawing->document.Add(CopyObjects(clipboard));
drawing->update();
}
}
+//
+// Select all *visible* objects. If an object is on a layer that is not
+// visible, skip it.
+//
+void ApplicationWindow::SelectAllObjects(void)
+{
+ // Set object's state & update the drawing
+ SelectAll(drawing->document.objects);
+ drawing->update();
+}
+
+
void ApplicationWindow::CreateActions(void)
{
exitAct = CreateAction(tr("&Quit"), tr("Quit"), tr("Exits the application."),
editPasteAct = CreateAction(tr("&Paste Objects"), tr("Paste Objects"), tr("Paste objects from the clipboard to the drawing."), QIcon(":/res/editpaste2.png"), QKeySequence(tr("Ctrl+v")));
connect(editPasteAct, SIGNAL(triggered()), this, SLOT(EditPaste()));
+ selectAllAct = CreateAction(tr("Select &All"), tr("Select All Objects"), tr("Select all objects in the drawing."), QIcon(), QKeySequence(tr("Ctrl+a")));
+ connect(selectAllAct, SIGNAL(triggered()), this, SLOT(SelectAllObjects()));
+
//Hm. I think we'll have to have separate logic to do the "Radio Group Toolbar" thing...
// Yup, in order to turn them off, we'd have to have an "OFF" toolbar button. Ick.
/* QActionGroup * group = new QActionGroup(this);
menu->addAction(connectAct);
menu->addAction(disconnectAct);
menu->addSeparator();
+ menu->addAction(selectAllAct);
menu->addAction(editCutAct);
menu->addAction(editCopyAct);
menu->addAction(editPasteAct);
connect(pw, SIGNAL(WidthSelected(float)), drawing, SLOT(HandlePenWidth(float)));
connect(pw, SIGNAL(StyleSelected(int)), drawing, SLOT(HandlePenStyle(int)));
connect(pw, SIGNAL(ColorSelected(uint32_t)), drawing, SLOT(HandlePenColor(uint32_t)));
+ connect(pw, SIGNAL(StampSelected(void)), drawing, SLOT(HandlePenStamp(void)));
}