#include "about.h"
#include "drawingview.h"
+#include "fileio.h"
#include "generaltab.h"
#include "painter.h"
#include "settingsdialog.h"
Object::SetFont(new QFont("Verdana", 15, QFont::Bold));
}
+
void ApplicationWindow::closeEvent(QCloseEvent * event)
{
WriteSettings();
//Do we have a memory leak here if we don't delete the font in the Object???
}
-//void ApplicationWindow::FileOpen(void)
-//{
-//}
+
+void ApplicationWindow::FileNew(void)
+{
+ // Should warn the user if drawing hasn't been saved...
+ drawing->document.Clear();
+ drawing->update();
+ documentName.clear();
+ setWindowTitle("Architektonas - Untitled");
+ statusBar()->showMessage(tr("New drawing is ready."));
+}
+
+
+void ApplicationWindow::FileOpen(void)
+{
+ QString filename = QFileDialog::getOpenFileName(this, tr("Open Drawing"),
+ "", tr("Architektonas files (*.drawing)"));
+ FILE * file = fopen(filename.toAscii().data(), "r");
+
+ if (file == 0)
+ {
+ QMessageBox msg;
+ msg.setText(QString(tr("Could not open file \"%1\" for loading!")).arg(filename));
+ msg.setIcon(QMessageBox::Critical);
+ msg.exec();
+ return;
+ }
+
+ Container container(Vector(0, 0));
+ bool successful = FileIO::LoadAtnsFile(file, &container);
+ fclose(file);
+
+ if (!successful)
+ {
+ QMessageBox msg;
+ msg.setText(QString(tr("Could not load file \"%1\"!")).arg(filename));
+ msg.setIcon(QMessageBox::Critical);
+ msg.exec();
+ return;
+ }
+
+ drawing->document = container;
+ drawing->update();
+ documentName = filename;
+ setWindowTitle(QString("Architektonas - %1").arg(documentName));
+ statusBar()->showMessage(tr("Drawing loaded."));
+}
+
+
+void ApplicationWindow::FileSave(void)
+{
+ if (documentName.isEmpty())
+ documentName = QFileDialog::getSaveFileName(this, tr("Save Drawing"),
+ "", tr("Architektonas drawings (*.drawing)"));
+
+ FILE * file = fopen(documentName.toAscii().data(), "w");
+
+ if (file == 0)
+ {
+ QMessageBox msg;
+ msg.setText(QString(tr("Could not open file \"%1\" for saving!")).arg(documentName));
+ msg.setIcon(QMessageBox::Critical);
+ msg.exec();
+ return;
+ }
+
+ bool successful = FileIO::SaveAtnsFile(file, &drawing->document);
+ fclose(file);
+
+ if (!successful)
+ {
+ QMessageBox msg;
+ 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...
+ unlink(documentName.toAscii().data());
+ return;
+ }
+
+ setWindowTitle(QString("Architektonas - %1").arg(documentName));
+ statusBar()->showMessage(tr("Drawing saved."));
+}
+
+
+void ApplicationWindow::FileSaveAs(void)
+{
+ QString filename = QFileDialog::getSaveFileName(this, tr("Save Drawing As"),
+ documentName, tr("Architektonas drawings (*.drawing)"));
+
+ if (!filename.isEmpty())
+ {
+ documentName = filename;
+ FileSave();
+ }
+}
+
void ApplicationWindow::SnapToGridTool(void)
{
Object::SetSnapMode(snapToGridAct->isChecked());
}
+
void ApplicationWindow::FixAngle(void)
{
Object::SetFixedAngle(fixAngleAct->isChecked());
}
+
void ApplicationWindow::FixLength(void)
{
Object::SetFixedLength(fixLengthAct->isChecked());
}
+
// We want certain tools to be exclusive, and this approach isn't working correctly...
void ApplicationWindow::DeleteTool(void)
{
SetInternalToolStates();
}
+
void ApplicationWindow::DimensionTool(void)
{
ClearUIToolStatesExcept(addDimensionAct);
SetInternalToolStates();
}
+
void ApplicationWindow::RotateTool(void)
{
ClearUIToolStatesExcept(rotateAct);
SetInternalToolStates();
}
+
void ApplicationWindow::AddLineTool(void)
{
ClearUIToolStatesExcept(addLineAct);
SetInternalToolStates();
}
+
void ApplicationWindow::AddCircleTool(void)
{
ClearUIToolStatesExcept(addCircleAct);
SetInternalToolStates();
}
+
void ApplicationWindow::AddArcTool(void)
{
ClearUIToolStatesExcept(addArcAct);
SetInternalToolStates();
}
+
void ApplicationWindow::AddPolygonTool(void)
{
ClearUIToolStatesExcept(addPolygonAct);
SetInternalToolStates();
}
+
void ApplicationWindow::ZoomInTool(void)
{
double zoomFactor = 2.0;
drawing->update();
}
+
void ApplicationWindow::ZoomOutTool(void)
{
/*
drawing->update();
}
+
void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception)
{
if (exception != addArcAct)
rotateAct->setChecked(false);
}
+
void ApplicationWindow::SetInternalToolStates(void)
{
Object::SetDeleteActive(deleteAct->isChecked());
drawing->SetAddCircleToolActive(addCircleAct->isChecked());
}
+
void ApplicationWindow::HelpAbout(void)
{
aboutWin->show();
}
+
void ApplicationWindow::Settings(void)
{
SettingsDialog dlg(this);
WriteSettings();
}
+
+void ApplicationWindow::HandleGrouping(void)
+{
+ // Group a bunch of selected objects together or ungroup a selected group.
+}
+
+
void ApplicationWindow::CreateActions(void)
{
exitAct = CreateAction(tr("&Quit"), tr("Quit"), tr("Exits the application."),
connect(zoomOutAct, SIGNAL(triggered()), this, SLOT(ZoomOutTool()));
fileNewAct = CreateAction(tr("&New Drawing"), tr("New Drawing"), tr("Creates a new drawing."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+n")));
+ connect(fileNewAct, SIGNAL(triggered()), this, SLOT(FileNew()));
fileOpenAct = CreateAction(tr("&Open Drawing"), tr("Open Drawing"), tr("Opens an existing drawing from a file."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+o")));
+ connect(fileOpenAct, SIGNAL(triggered()), this, SLOT(FileOpen()));
fileSaveAct = CreateAction(tr("&Save Drawing"), tr("Save Drawing"), tr("Saves the current drawing to a file."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+s")));
+ connect(fileSaveAct, SIGNAL(triggered()), this, SLOT(FileSave()));
fileSaveAsAct = CreateAction(tr("Save Drawing &As"), tr("Save As"), tr("Saves the current drawing to a file with a different name."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+Shift+s")));
+ connect(fileSaveAsAct, SIGNAL(triggered()), this, SLOT(FileSaveAs()));
fileCloseAct = CreateAction(tr("&Close Drawing"), tr("Close Drawing"), tr("Closes the current drawing."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+w")));
settingsAct = CreateAction(tr("&Settings"), tr("Settings"), tr("Change certain defaults for Architektonas."), QIcon(":/res/generic-tool.png"), QKeySequence());
connect(settingsAct, SIGNAL(triggered()), this, SLOT(Settings()));
+ groupAct = CreateAction(tr("&Group"), tr("Group"), tr("Group/ungroup selected objects."), QIcon(":/res/generic-tool.png"), QKeySequence("g"));
+ connect(groupAct, SIGNAL(triggered()), this, SLOT(HandleGrouping()));
+
//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);
group->addAction(addArcAct);//*/
}
+
//
// Consolidates action creation from a multi-step process to a single-step one.
//
return action;
}
+
//
// This is essentially the same as the previous function, but this allows more
// than one key sequence to be added as key shortcuts.
return action;
}
+
void ApplicationWindow::CreateMenus(void)
{
QMenu * menu = menuBar()->addMenu(tr("&File"));
menu = menuBar()->addMenu(tr("&Edit"));
menu->addAction(snapToGridAct);
+ menu->addAction(groupAct);
menu->addAction(fixAngleAct);
menu->addAction(fixLengthAct);
menu->addAction(rotateAct);
menu->addAction(aboutAct);
}
+
void ApplicationWindow::CreateToolbars(void)
{
QToolBar * toolbar = addToolBar(tr("File"));
toolbar = addToolBar(tr("Edit"));
toolbar->addAction(snapToGridAct);
+ toolbar->addAction(groupAct);
toolbar->addAction(fixAngleAct);
toolbar->addAction(fixLengthAct);
toolbar->addAction(rotateAct);
toolbar->addAction(addDimensionAct);
}
+
void ApplicationWindow::ReadSettings(void)
{
QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
// ((TTEdit *)qApp)->charWnd->move(pos);
}
+
void ApplicationWindow::WriteSettings(void)
{
settings.setValue("pos", pos());
// settings.setValue("charWndPos", ((TTEdit *)qApp)->charWnd->pos());
// settings.setValue("charWndSize", ((TTEdit *)qApp)->charWnd->size());
}
+