// JLH = James Hammons <jlhamm@acm.org>
//
// Who When What
-// --- ---------- -------------------------------------------------------------
+// --- ---------- ------------------------------------------------------------
// JLH 03/22/2011 Created this file
// JLH 09/29/2011 Added simple zoom in/out functionality
// JLH 10/03/2011 Fixed zoom tool to zoom in/out from center of screen
#include "generaltab.h"
#include "global.h"
#include "layerwidget.h"
+#include "objectwidget.h"
#include "painter.h"
#include "settingsdialog.h"
#include "structs.h"
BlockWidget * bw = new BlockWidget;
dock2->setWidget(bw);
addDockWidget(Qt::RightDockWidgetArea, dock2);
+ QDockWidget * dock3 = new QDockWidget(tr("Object"), this);
+ ObjectWidget * ow = new ObjectWidget;
+ dock3->setWidget(ow);
+ addDockWidget(Qt::RightDockWidgetArea, dock3);
// Needed for saveState()
dock1->setObjectName("Layers");
dock2->setObjectName("Blocks");
+ dock3->setObjectName("Object");
- // Create status bar
+ // Create status bar
zoomIndicator = new QLabel("Grid: 12.0\" BU: Inch");
statusBar()->addPermanentWidget(zoomIndicator);
statusBar()->showMessage(tr("Ready"));
setUnifiedTitleAndToolBarOnMac(true);
Global::font = new QFont("Verdana", 15, QFont::Bold);
- connect(lw, SIGNAL(LayerSelected(int)), drawing, SLOT(SetCurrentLayer(int)));
connect(lw, SIGNAL(LayerDeleted(int)), drawing, SLOT(DeleteCurrentLayer(int)));
connect(lw, SIGNAL(LayerToggled()), drawing, SLOT(HandleLayerToggle()));
connect(lw, SIGNAL(LayersSwapped(int, int)), drawing, SLOT(HandleLayerSwap(int, int)));
+
+ connect(drawing, SIGNAL(ObjectHovered(Object *)), ow, SLOT(ShowInfo(Object *)));
}
void ApplicationWindow::FileNew(void)
{
- // Should warn the user if drawing hasn't been saved...
- drawing->document.objects.empty();
+ // Should warn the user if drawing hasn't been saved... !!! FIX !!!
+ DeleteContents(drawing->document.objects);
+ drawing->document.objects.clear();
drawing->update();
documentName.clear();
setWindowTitle("Architektonas - Untitled");
return;
}
- Container container;//(Vector(0, 0));
+ Container container(true); // Make sure it's a top level container...
bool successful = FileIO::LoadAtnsFile(file, &container);
fclose(file);
msg.setText(QString(tr("Could not load file \"%1\"!")).arg(filename));
msg.setIcon(QMessageBox::Critical);
msg.exec();
+ // Make sure to delete any hanging objects in the container...
+ DeleteContents(container.objects);
return;
}
-printf("FileOpen: container size = %li\n", container.objects.size());
+//printf("FileOpen: container size = %li\n", container.objects.size());
+ // Keep memory leaks from happening by getting rid of the old document
+ DeleteContents(drawing->document.objects);
+ // We can do this because the vector is just a bunch of pointers to our
+ // Objects, and the Containers (non-empty) can be moved way with no problem.
drawing->document = container;
drawing->update();
documentName = filename;
msg.setText(QString(tr("Could not save file \"%1\"!")).arg(documentName));
msg.setIcon(QMessageBox::Critical);
msg.exec();
- // In this case, we should unlink the created file, since it's not right...
+ // In this case, we should unlink the created file, since it's not
+ // right...
// unlink(documentName.toUtf8().data());
QFile::remove(documentName);
return;
{
// 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->numSelected > 0)
+// if (drawing->numSelected > 0)
+ if (drawing->select.size() > 0)
{
-// drawing->DeleteSelectedItems();
DeleteSelectedObjects(drawing->document.objects);
drawing->update();
deleteAct->setChecked(false);
// 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.
+ // 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(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;
+ 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();