summaryrefslogtreecommitdiff
path: root/context.cc
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-26 04:32:52 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-26 04:32:52 (GMT)
commita05c91bcecb7bbf85c0e5d5a307708e69f8eb9c8 (patch)
tree2c53782f53fcc614725a815630ffa43f36ca91cb /context.cc
parentc318b749b12a2d51115c65a9ad8c9f45396a90d8 (diff)
Clifford Wolf:
Added generic config variables Added ${fs,fa}_{render,preview} git-svn-id: http://svn.clifford.at/openscad/trunk@22 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'context.cc')
-rw-r--r--context.cc34
1 files changed, 31 insertions, 3 deletions
diff --git a/context.cc b/context.cc
index 1ae3c0d..127e367 100644
--- a/context.cc
+++ b/context.cc
@@ -20,25 +20,53 @@
#include "openscad.h"
+Context::Context(const Context *parent)
+{
+ this->parent = parent;
+ ctx_stack.append(this);
+}
+
+Context::~Context()
+{
+ ctx_stack.pop_back();
+}
+
void Context::args(const QVector<QString> &argnames, const QVector<Expression*> &argexpr,
const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues)
{
for (int i=0; i<argnames.size(); i++) {
- variables[argnames[i]] = i < argexpr.size() && argexpr[i] ? argexpr[i]->evaluate(this->parent) : Value();
+ set_variable(argnames[i], i < argexpr.size() && argexpr[i] ? argexpr[i]->evaluate(this->parent) : Value());
}
int posarg = 0;
for (int i=0; i<call_argnames.size(); i++) {
if (call_argnames[i].isEmpty()) {
- variables[argnames[posarg++]] = call_argvalues[i];
+ set_variable(argnames[posarg++], call_argvalues[i]);
} else {
- variables[call_argnames[i]] = call_argvalues[i];
+ set_variable(call_argnames[i], call_argvalues[i]);
}
}
}
+QVector<const Context*> Context::ctx_stack;
+
+void Context::set_variable(QString name, Value value)
+{
+ if (name.startsWith("$"))
+ config_variables[name] = value;
+ else
+ variables[name] = value;
+}
+
Value Context::lookup_variable(QString name) const
{
+ if (name.startsWith("$")) {
+ for (int i = ctx_stack.size()-1; i >= 0; i--) {
+ if (ctx_stack[i]->config_variables.contains(name))
+ return ctx_stack[i]->config_variables[name];
+ }
+ return Value();
+ }
if (variables.contains(name))
return variables[name];
if (parent)
contact: Jan Huwald // Impressum