diff -r 5f4395ec5db0 -r 04e140bdeb0b src/dialogs.cc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/dialogs.cc Fri Dec 13 20:01:49 2013 +0200
@@ -0,0 +1,340 @@
+/*
+ * LDForge: LDraw parts authoring CAD
+ * Copyright (C) 2013 Santeri Piippo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "dialogs.h"
+#include "widgets.h"
+#include "gui.h"
+#include "gldraw.h"
+#include "docs.h"
+#include "document.h"
+#include "dialogs.h"
+#include "ui_overlay.h"
+#include "ui_ldrawpath.h"
+#include "ui_openprogress.h"
+#include "ui_extprogpath.h"
+#include "ui_about.h"
+#include "ui_bombbox.h"
+#include "moc_dialogs.cpp"
+
+extern const char* g_extProgPathFilter;
+extern_cfg (String, io_ldpath);
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+OverlayDialog::OverlayDialog (QWidget* parent, Qt::WindowFlags f) : QDialog (parent, f)
+{ ui = new Ui_OverlayUI;
+ ui->setupUi (this);
+
+ m_cameraArgs =
+ { { ui->top, GL::ETopCamera },
+ { ui->bottom, GL::EBottomCamera },
+ { ui->front, GL::EFrontCamera },
+ { ui->back, GL::EBackCamera },
+ { ui->left, GL::ELeftCamera },
+ { ui->right, GL::ERightCamera }
+ };
+
+ GL::EFixedCamera cam = g_win->R()->camera();
+
+ if (cam == GL::EFreeCamera)
+ cam = GL::ETopCamera;
+
+ connect (ui->width, SIGNAL (valueChanged (double)), this, SLOT (slot_dimensionsChanged()));
+ connect (ui->height, SIGNAL (valueChanged (double)), this, SLOT (slot_dimensionsChanged()));
+ connect (ui->buttonBox, SIGNAL (helpRequested()), this, SLOT (slot_help()));
+ connect (ui->fileSearchButton, SIGNAL (clicked (bool)), this, SLOT (slot_fpath()));
+
+ slot_dimensionsChanged();
+ fillDefaults (cam);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+OverlayDialog::~OverlayDialog()
+{ delete ui;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void OverlayDialog::fillDefaults (int newcam)
+{ LDGLOverlay& info = g_win->R()->getOverlay (newcam);
+ radioDefault (newcam, m_cameraArgs);
+
+ if (info.img != null)
+ { ui->filename->setText (info.fname);
+ ui->originX->setValue (info.ox);
+ ui->originY->setValue (info.oy);
+ ui->width->setValue (info.lw);
+ ui->height->setValue (info.lh);
+ }
+ else
+ { ui->filename->setText ("");
+ ui->originX->setValue (0);
+ ui->originY->setValue (0);
+ ui->width->setValue (0.0f);
+ ui->height->setValue (0.0f);
+ }
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+str OverlayDialog::fpath() const
+{ return ui->filename->text();
+}
+
+int OverlayDialog::ofsx() const
+{ return ui->originX->value();
+}
+
+int OverlayDialog::ofsy() const
+{ return ui->originY->value();
+}
+
+double OverlayDialog::lwidth() const
+{ return ui->width->value();
+}
+
+double OverlayDialog::lheight() const
+{ return ui->height->value();
+}
+
+int OverlayDialog::camera() const
+{ return radioSwitch (GL::ETopCamera, m_cameraArgs);
+}
+
+void OverlayDialog::slot_fpath()
+{ ui->filename->setText (QFileDialog::getOpenFileName (null, "Overlay image"));
+}
+
+void OverlayDialog::slot_help()
+{ showDocumentation (g_docs_overlays);
+}
+
+void OverlayDialog::slot_dimensionsChanged()
+{ bool enable = (ui->width->value() != 0) || (ui->height->value() != 0);
+ ui->buttonBox->button (QDialogButtonBox::Ok)->setEnabled (enable);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+LDrawPathDialog::LDrawPathDialog (const bool validDefault, QWidget* parent, Qt::WindowFlags f) :
+ QDialog (parent, f),
+ m_validDefault (validDefault)
+{ ui = new Ui_LDPathUI;
+ ui->setupUi (this);
+ ui->status->setText ("---");
+
+ if (validDefault)
+ ui->heading->hide();
+ else
+ { cancelButton()->setText ("Exit");
+ cancelButton()->setIcon (getIcon ("exit"));
+ }
+
+ okButton()->setEnabled (false);
+
+ connect (ui->path, SIGNAL (textEdited (QString)), this, SLOT (slot_tryConfigure()));
+ connect (ui->searchButton, SIGNAL (clicked()), this, SLOT (slot_findPath()));
+ connect (ui->buttonBox, SIGNAL (rejected()), this, validDefault ? SLOT (reject()) : SLOT (slot_exit()));
+ connect (ui->buttonBox, SIGNAL (accepted()), this, SLOT (slot_accept()));
+
+ setPath (io_ldpath);
+
+ if (validDefault)
+ slot_tryConfigure();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+LDrawPathDialog::~LDrawPathDialog()
+{ delete ui;
+}
+
+QPushButton* LDrawPathDialog::okButton()
+{ return ui->buttonBox->button (QDialogButtonBox::Ok);
+}
+
+QPushButton* LDrawPathDialog::cancelButton()
+{ return ui->buttonBox->button (QDialogButtonBox::Cancel);
+}
+
+void LDrawPathDialog::setPath (str path)
+{ ui->path->setText (path);
+}
+
+str LDrawPathDialog::filename() const
+{ return ui->path->text();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void LDrawPathDialog::slot_findPath()
+{ str newpath = QFileDialog::getExistingDirectory (this, "Find LDraw Path");
+
+ if (newpath.length() > 0 && newpath != filename())
+ { setPath (newpath);
+ slot_tryConfigure();
+ }
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void LDrawPathDialog::slot_exit()
+{ exit (0);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void LDrawPathDialog::slot_tryConfigure()
+{ if (LDPaths::tryConfigure (filename()) == false)
+ { ui->status->setText (fmt ("%1", LDPaths::getError()));
+ okButton()->setEnabled (false);
+ return;
+ }
+
+ ui->status->setText ("OK!");
+ okButton()->setEnabled (true);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void LDrawPathDialog::slot_accept()
+{ Config::save();
+ accept();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+OpenProgressDialog::OpenProgressDialog (QWidget* parent, Qt::WindowFlags f) : QDialog (parent, f)
+{ ui = new Ui_OpenProgressUI;
+ ui->setupUi (this);
+ ui->progressText->setText ("Parsing...");
+ setNumLines (0);
+ m_Progress = 0;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+OpenProgressDialog::~OpenProgressDialog()
+{ delete ui;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void OpenProgressDialog::setNumLines (int const& a)
+{ m_NumLines = a;
+ ui->progressBar->setRange (0, getNumLines());
+ updateValues();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void OpenProgressDialog::updateValues()
+{ ui->progressText->setText (fmt ("Parsing... %1 / %2", getProgress(), getNumLines()));
+ ui->progressBar->setValue (getProgress());
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void OpenProgressDialog::updateProgress (int progress)
+{ setProgress (progress);
+ updateValues();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+ExtProgPathPrompt::ExtProgPathPrompt (str progName, QWidget* parent, Qt::WindowFlags f) :
+ QDialog (parent, f),
+ ui (new Ui_ExtProgPath)
+{
+ ui->setupUi (this);
+ str labelText = ui->m_label->text();
+ labelText.replace ("", progName);
+ ui->m_label->setText (labelText);
+ connect (ui->m_findPath, SIGNAL (clicked (bool)), this, SLOT (findPath()));
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+ExtProgPathPrompt::~ExtProgPathPrompt()
+{ delete ui;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void ExtProgPathPrompt::findPath()
+{ str path = QFileDialog::getOpenFileName (null, "", "", g_extProgPathFilter);
+
+ if (!path.isEmpty())
+ ui->m_path->setText (path);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+str ExtProgPathPrompt::getPath() const
+{ return ui->m_path->text();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+AboutDialog::AboutDialog (QWidget* parent, Qt::WindowFlags f) :
+ QDialog (parent, f)
+{ Ui::AboutUI ui;
+ ui.setupUi (this);
+ ui.versionInfo->setText (fmt (tr ("LDForge %1"), fullVersionString()));
+
+ QPushButton* mailButton = new QPushButton;
+ mailButton->setText ("Contact");
+ mailButton->setIcon (getIcon ("mail"));
+ ui.buttonBox->addButton (static_cast (mailButton), QDialogButtonBox::HelpRole);
+ connect (ui.buttonBox, SIGNAL (helpRequested()), this, SLOT (slot_mail()));
+
+ setWindowTitle ("About " APPNAME);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void AboutDialog::slot_mail()
+{ QDesktopServices::openUrl (QUrl ("mailto:Santeri Piippo ?subject=LDForge"));
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void bombBox (const str& message)
+{ QDialog dlg (g_win);
+ Ui_BombBox ui;
+
+ ui.setupUi (&dlg);
+ ui.m_text->setText (message);
+ ui.buttonBox->button (QDialogButtonBox::Close)->setText (QObject::tr ("Damn it"));
+ dlg.exec();
+}