summaryrefslogtreecommitdiff
path: root/mainwin.cc
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-23 22:32:08 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-23 22:32:08 (GMT)
commit12e8d77bc0e4a059feb0ead66de0a04a71fb8d67 (patch)
tree8b250eee33c282618eb561291a7eea99f6af82d4 /mainwin.cc
parent4daae374011de97aafa999f2353e2c7d17511046 (diff)
Clifford Wolf:
Documentation and UI progress git-svn-id: http://svn.clifford.at/openscad/trunk@14 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'mainwin.cc')
-rw-r--r--mainwin.cc51
1 files changed, 46 insertions, 5 deletions
diff --git a/mainwin.cc b/mainwin.cc
index 943bf65..c6e3402 100644
--- a/mainwin.cc
+++ b/mainwin.cc
@@ -25,6 +25,8 @@
#include <QMenu>
#include <QMenuBar>
#include <QSplitter>
+#include <QFileDialog>
+#include <QApplication>
MainWindow::MainWindow(const char *filename)
{
@@ -103,7 +105,7 @@ MainWindow::MainWindow(const char *filename)
QString text;
FILE *fp = fopen(filename, "rt");
if (!fp) {
- console->append(QString("Failed to open text file: %1 (%2)").arg(QString(filename), QString(strerror(errno))));
+ console->append(QString("Failed to open file: %1 (%2)").arg(QString(filename), QString(strerror(errno))));
} else {
char buffer[513];
int rc;
@@ -112,6 +114,7 @@ MainWindow::MainWindow(const char *filename)
text += buffer;
}
fclose(fp);
+ console->append(QString("Loaded design `%1'.").arg(QString(filename)));
}
editor->setPlainText(text);
}
@@ -138,22 +141,57 @@ MainWindow::~MainWindow()
void MainWindow::actionNew()
{
- console->append(QString("Function %1 is not implemented yet!").arg(QString(__PRETTY_FUNCTION__)));
+ filename = QString();
+ setWindowTitle("New Document");
+ editor->setPlainText("");
}
void MainWindow::actionOpen()
{
- console->append(QString("Function %1 is not implemented yet!").arg(QString(__PRETTY_FUNCTION__)));
+ QString new_filename = QFileDialog::getOpenFileName(this, "Open File", "", "OpenSCAD Designs (*.scad)");
+ if (!new_filename.isEmpty())
+ {
+ filename = new_filename;
+ setWindowTitle(filename);
+
+ QString text;
+ FILE *fp = fopen(filename.toAscii().data(), "rt");
+ if (!fp) {
+ console->append(QString("Failed to open file: %1 (%2)").arg(QString(filename), QString(strerror(errno))));
+ } else {
+ char buffer[513];
+ int rc;
+ while ((rc = fread(buffer, 1, 512, fp)) > 0) {
+ buffer[rc] = 0;
+ text += buffer;
+ }
+ fclose(fp);
+ console->append(QString("Loaded design `%1'.").arg(QString(filename)));
+ }
+ editor->setPlainText(text);
+ }
}
void MainWindow::actionSave()
{
- console->append(QString("Function %1 is not implemented yet!").arg(QString(__PRETTY_FUNCTION__)));
+ FILE *fp = fopen(filename.toAscii().data(), "wt");
+ if (!fp) {
+ console->append(QString("Failed to open file for writing: %1 (%2)").arg(QString(filename), QString(strerror(errno))));
+ } else {
+ fprintf(fp, "%s", editor->toPlainText().toAscii().data());
+ fclose(fp);
+ console->append(QString("Saved design `%1'.").arg(QString(filename)));
+ }
}
void MainWindow::actionSaveAs()
{
- console->append(QString("Function %1 is not implemented yet!").arg(QString(__PRETTY_FUNCTION__)));
+ QString new_filename = QFileDialog::getSaveFileName(this, "Save File", filename, "OpenSCAD Designs (*.scad)");
+ if (!new_filename.isEmpty()) {
+ filename = new_filename;
+ setWindowTitle(filename);
+ actionSave();
+ }
}
void MainWindow::actionCompile()
@@ -164,6 +202,7 @@ void MainWindow::actionCompile()
}
console->append("Parsing design (AST generation)...");
+ QApplication::processEvents();
root_module = parse(editor->toPlainText().toAscii().data(), false);
if (!root_module) {
@@ -177,6 +216,7 @@ void MainWindow::actionCompile()
}
console->append("Compiling design (CSG generation)...");
+ QApplication::processEvents();
root_node = root_module->evaluate(&root_ctx, QVector<QString>(), QVector<Value>(), QVector<AbstractNode*>());
if (!root_node) {
@@ -194,6 +234,7 @@ static void report_func(const class AbstractNode*, void *vp, int mark)
MainWindow *m = (MainWindow*)vp;
QString msg;
msg.sprintf("CSG rendering progress: %.2f%%", (mark*100.0) / progress_report_count);
+ QApplication::processEvents();
m->console->append(msg);
}
contact: Jan Huwald // Impressum