X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=7dd57aca22824c70f77ff62cb782808e47814569;hb=790c1a6d97f73f7457c7fad7e82fa29e5b6accd5;hp=41e2f2c8a90176efa535fdcbce96d6fb9f13e030;hpb=a6e76b6a748a350bda067a99672f9dcca626d872;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 41e2f2c..7dd57ac 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -98,6 +98,7 @@ ApplicationWindow::ApplicationWindow(): 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(this, SIGNAL(ReloadLayers()), lw, SLOT(Reload())); connect(drawing, SIGNAL(ObjectHovered(Object *)), ow, SLOT(ShowInfo(Object *))); } @@ -113,9 +114,38 @@ void ApplicationWindow::closeEvent(QCloseEvent * event) void ApplicationWindow::FileNew(void) { - // Should warn the user if drawing hasn't been saved... !!! FIX !!! + // Warn the user if drawing has changed and hasn't been saved... + if (drawing->dirty) + { + QMessageBox msg; + + msg.setText("The document has been modified."); + msg.setInformativeText("Do you want to save your changes?"); + msg.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + msg.setDefaultButton(QMessageBox::Save); + int response = msg.exec(); + + switch (response) + { + case QMessageBox::Save: + // Save was clicked + FileSave(); + break; + case QMessageBox::Discard: + // Don't Save was clicked + break; + case QMessageBox::Cancel: + // Cancel was clicked + return; +// break; + } + } + + FileIO::ResetLayerVectors(); + emit ReloadLayers(); DeleteContents(drawing->document.objects); drawing->document.objects.clear(); + drawing->dirty = false; drawing->update(); documentName.clear(); setWindowTitle("Architektonas - Untitled"); @@ -161,9 +191,12 @@ void ApplicationWindow::FileOpen(void) //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); + emit ReloadLayers(); // 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. + // Objects, and the Containers (non-empty) can be moved this way with no + // problem. drawing->document = container; + drawing->dirty = false; drawing->update(); documentName = filename; setWindowTitle(QString("Architektonas - %1").arg(documentName)); @@ -204,6 +237,7 @@ void ApplicationWindow::FileSave(void) return; } + drawing->dirty = false; setWindowTitle(QString("Architektonas - %1").arg(documentName)); statusBar()->showMessage(tr("Drawing saved.")); } @@ -222,6 +256,16 @@ void ApplicationWindow::FileSaveAs(void) } +void ApplicationWindow::contextMenuEvent(QContextMenuEvent * event) +{ + QMenu menu(this); + menu.addAction(mirrorAct); + menu.addAction(rotateAct); + menu.addAction(trimAct); + menu.exec(event->globalPos()); +} + + void ApplicationWindow::SnapToGridTool(void) { Global::snapToGrid = snapToGridAct->isChecked(); @@ -603,6 +647,11 @@ else 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)); @@ -717,6 +766,9 @@ void ApplicationWindow::HandleGridSizeInBaseUnits(QString text) void ApplicationWindow::HandleDimensionSize(QString text) { +/* +This is the third input on the view toolbar; not sure what it was supposed to do... +*/ // Parse the text... bool ok; double value = text.toDouble(&ok); @@ -729,6 +781,39 @@ void ApplicationWindow::HandleDimensionSize(QString text) drawing->update(); } +void ApplicationWindow::EditCopy(void) +{ + if (drawing->select.size() > 0) + { + DeleteContents(clipboard); + CopySelectedObjectsTo(clipboard, drawing->document.objects); + } +} + + +void ApplicationWindow::EditCut(void) +{ + if (drawing->select.size() > 0) + { + DeleteContents(clipboard); + MoveSelectedObjectsTo(clipboard, drawing->document.objects); + drawing->update(); + } +} + + +void ApplicationWindow::EditPaste(void) +{ + 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); + drawing->update(); + } +} + void ApplicationWindow::CreateActions(void) { @@ -815,6 +900,14 @@ void ApplicationWindow::CreateActions(void) triangulateAct = CreateAction(tr("&Triangulate"), tr("Triangulate"), tr("Make triangles from selected lines, preserving their lengths."), QIcon(":/res/triangulate-tool.png"), QKeySequence("t,g"), true); connect(triangulateAct, SIGNAL(triggered()), this, SLOT(TriangulateTool())); + editCutAct = CreateAction(tr("&Cut Objects"), tr("Cut Objects"), tr("Cut objects from the drawing to the clipboard."), QIcon(":/res/editcut2.png"), QKeySequence(tr("Ctrl+x"))); + connect(editCutAct, SIGNAL(triggered()), this, SLOT(EditCut())); + + editCopyAct = CreateAction(tr("&Copy Objects"), tr("Copy Objects"), tr("Copy objects from the drawing to the clipboard."), QIcon(":/res/editcopy2.png"), QKeySequence(tr("Ctrl+c"))); + connect(editCopyAct, SIGNAL(triggered()), this, SLOT(EditCopy())); + + 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())); //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. @@ -830,8 +923,8 @@ void ApplicationWindow::CreateActions(void) // // Consolidates action creation from a multi-step process to a single-step one. // -QAction * ApplicationWindow::CreateAction(QString name, QString tooltip, QString statustip, - QIcon icon, QKeySequence key, bool checkable/*= false*/) +QAction * ApplicationWindow::CreateAction(QString name, QString tooltip, + QString statustip, QIcon icon, QKeySequence key, bool checkable/*= false*/) { QAction * action = new QAction(icon, name, this); action->setToolTip(tooltip); @@ -847,8 +940,9 @@ QAction * ApplicationWindow::CreateAction(QString name, QString tooltip, QString // This is essentially the same as the previous function, but this allows more // than one key sequence to be added as key shortcuts. // -QAction * ApplicationWindow::CreateAction(QString name, QString tooltip, QString statustip, - QIcon icon, QKeySequence key1, QKeySequence key2, bool checkable/*= false*/) +QAction * ApplicationWindow::CreateAction(QString name, QString tooltip, + QString statustip, QIcon icon, QKeySequence key1, QKeySequence key2, + bool checkable/*= false*/) { QAction * action = new QAction(icon, name, this); action->setToolTip(tooltip); @@ -890,6 +984,9 @@ void ApplicationWindow::CreateMenus(void) menu->addAction(connectAct); menu->addAction(disconnectAct); menu->addSeparator(); + menu->addAction(editCutAct); + menu->addAction(editCopyAct); + menu->addAction(editPasteAct); menu->addAction(deleteAct); menu->addSeparator(); menu->addAction(addLineAct); @@ -938,6 +1035,9 @@ void ApplicationWindow::CreateToolbars(void) toolbar->addAction(mirrorAct); toolbar->addAction(trimAct); toolbar->addAction(triangulateAct); + toolbar->addAction(editCutAct); + toolbar->addAction(editCopyAct); + toolbar->addAction(editPasteAct); toolbar->addAction(deleteAct); toolbar->addAction(connectAct); toolbar->addAction(disconnectAct);