+printf("Container: Added object (=$%X). size = %li\n", object, objects.size());
+}
+
+
+/*virtual*/ QRectF Container::Extents(void)
+{
+ QRectF bounds;
+
+ for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+ bounds = bounds.united((*i)->Extents());
+
+ return bounds;
+}
+
+
+void Container::Delete(Object * objectToDelete)
+{
+ std::vector<Object *>::iterator i = objects.begin();
+
+ while (i != objects.end())
+ {
+ if (*i == objectToDelete)
+ {
+ objects.erase(i);
+ delete objectToDelete;
+ return;
+ }
+
+ i++;
+ }
+}
+
+
+void Container::DeleteSelectedItems(void)
+{
+ std::vector<Object *>::iterator i = objects.begin();
+
+ while (i != objects.end())
+ {
+ if ((*i)->state == OSSelected)
+ {
+ delete *i;
+ objects.erase(i);
+ }
+ else
+ i++;
+ }
+}
+
+
+void Container::Clear(void)
+{
+ std::vector<Object *>::iterator i = objects.begin();
+
+ while (i != objects.end())
+ {
+printf("Container: Deleting object ($%X)...\n", *i);
+ delete (*i);
+ objects.erase(i);
+ }
+}
+
+
+void Container::SelectAll(void)
+{
+ for(unsigned int i=0; i<objects.size(); i++)
+ objects[i]->state = OSSelected;
+}
+
+
+void Container::DeselectAll(void)
+{
+ for(unsigned int i=0; i<objects.size(); i++)
+ objects[i]->state = OSInactive;
+}
+
+
+int Container::ItemsSelected(void)
+{
+ int selected = 0;
+
+ for(uint i=0; i<objects.size(); i++)
+ if (objects[i]->state == OSSelected)
+ selected++;
+
+ return selected;
+}
+
+
+Object * Container::SelectedItem(unsigned int index)
+{
+ unsigned int selectedIndex = 0;
+
+ for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+ {
+ if ((*i)->state == OSSelected)
+ {
+ if (selectedIndex == index)
+ return *i;
+ else
+ selectedIndex++;
+ }
+ }
+
+ return NULL;
+}
+
+
+void Container::MoveContentsTo(Container * newContainer)
+{
+ // Sanity check
+ if (newContainer == NULL)
+ return;
+
+ // Shuffle the contents of this container to the new one
+ for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+ {
+ newContainer->Add(*i);
+ (*i)->Reparent(newContainer);
+ }
+
+ // & clear our vector
+ objects.clear();
+}
+
+
+void Container::CopyContentsTo(Container * newContainer)
+{
+ // Sanity check
+ if (newContainer == NULL)
+ return;
+
+ // Shuffle the contents of this container to the new one
+ for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+ newContainer->Add((*i)->Copy());
+}
+
+
+void Container::MoveSelectedContentsTo(Container * newContainer)
+{
+ // Sanity check
+ if (newContainer == NULL)
+ return;
+
+ // Shuffle the contents of this container to the new one
+ for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end();)
+ {
+ if ((*i)->state != OSSelected)
+ {
+ i++;
+ continue;
+ }
+
+ newContainer->Add(*i);
+ (*i)->Reparent(newContainer);
+ objects.erase(i);
+ }
+}
+
+
+void Container::CopySelectedContentsTo(Container * newContainer)
+{
+ // Sanity check
+ if (newContainer == NULL)
+ return;
+
+ // Copy the contents of this container to the new one
+ for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+ {
+ if ((*i)->state == OSSelected)
+ newContainer->Add((*i)->Copy());
+ }