/* * Copyright (c) 2002-2006 Samit Basu * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "HandleObject.hpp" #include "HandleAxis.hpp" #include "HandleList.hpp" #include "HandleFigure.hpp" #include "HandleCommands.hpp" #include "Core.hpp" #include "IEEEFP.hpp" bool HandleObject::IsType(std::string name) { HPString* sp = (HPString*) LookupProperty("type"); return (sp->Is(name)); } void HandleObject::ToManual(std::string name) { HPAutoManual *qp = (HPAutoManual*) LookupProperty(name); qp->Data("manual"); } bool HandleObject::HasChanged(std::vector names) { HandleProperty *hp; for (int i=0;iisModified()) return true; } return false; } bool HandleObject::HasChanged(std::string name) { std::vector names; names.push_back(name); return HasChanged(names); } void HandleObject::ClearAllChanged() { std::vector names(m_properties.getCompletions("")); ClearChanged(names); } void HandleObject::ClearChanged(std::vector names) { HandleProperty *hp; for (int i=0;iClearModified(); } } void HandleObject::ClearChanged(std::string name) { HandleProperty *hp; hp = LookupProperty(name); hp->ClearModified(); } HandleObject::HandleObject() { ref_count = 1; } HandleObject::~HandleObject() { // Loop through our children HPHandles *hp = (HPHandles*) LookupProperty("children"); HandleObject *gp; std::vector my_children(hp->Data()); for (int i=0;i= HANDLE_OFFSET_OBJECT) { gp = LookupHandleObject(handle); gp->Dereference(); if (gp->RefCount() <= 0) { // qDebug("Deleting handle %d\n",handle); FreeHandleObject(handle); delete gp; } } } // Delete our properties also stringVector propSet(m_properties.getCompletions("")); for (int i=0;i newval; newval.push_back(value); hp->Data(newval); } HandleAxis* HandleObject::GetParentAxis() { // Get our parent - must be an axis HPHandles *parent = (HPHandles*) LookupProperty("parent"); if (parent->Data().empty()) return NULL; unsigned parent_handle = parent->Data()[0]; HandleObject *fp = LookupHandleObject(parent_handle); HPString *name = (HPString*) fp->LookupProperty("type"); if (!name) return NULL; if (!name->Is("axes")) return NULL; HandleAxis *axis = (HandleAxis*) fp; return axis; } HandleFigure* HandleObject::GetParentFigure() { HandleAxis* hp; if (StringCheck("type","axes")) hp = (HandleAxis*) this; else hp = GetParentAxis(); // Get our parent - must be an axis HPHandles *parent = (HPHandles*) hp->LookupProperty("parent"); if (parent->Data().empty()) return NULL; unsigned parent_handle = parent->Data()[0]; return LookupHandleFigure(parent_handle); } void HandleObject::MarkDirty() { HandleFigure *fp = GetParentFigure(); if (fp) fp->UpdateState(); } std::string HandleObject::StringPropertyLookup(std::string name) { HPString* sp = (HPString*) LookupProperty(name); return (sp->Data()); } std::vector HandleObject::VectorPropertyLookup(std::string name) { HPVector* sp = (HPVector*) LookupProperty(name); return (sp->Data()); } Array HandleObject::ArrayPropertyLookup(std::string name) { HPArray* hp = (HPArray*) LookupProperty(name); return (hp->Data()); } double HandleObject::ScalarPropertyLookup(std::string name) { HPScalar* sp = (HPScalar*) LookupProperty(name); return (sp->Data()[0]); } unsigned HandleObject::HandlePropertyLookup(std::string name) { HPHandles* sp = (HPHandles*) LookupProperty(name); if (sp->Data().empty()) return 0; else return (sp->Data()[0]); } void HandleObject::AddProperty(HandleProperty* hp, std::string name) { m_properties.insertSymbol(name,hp); } void HandleObject::SetConstrainedStringScalarDefault(std::string name, std::string value, double sval) { HPConstrainedStringScalar *hp = (HPConstrainedStringScalar*) LookupProperty(name); if (!hp) throw Exception("constrained string/scalar default failed lookup of <" + name + ">"); hp->Value(value); hp->Scalar(sval); } void HandleObject::SetConstrainedStringColorDefault(std::string name, std::string value, double red, double green, double blue) { HPConstrainedStringColor *hp = (HPConstrainedStringColor*) LookupProperty(name); if (!hp) throw Exception("constrained string/color default failed lookup of <" + name + ">"); hp->Value(value); hp->ColorSpec(red,green,blue); } void HandleObject::SetConstrainedStringDefault(std::string name, std::string value) { HPConstrainedString *hp = (HPConstrainedString*) LookupProperty(name); if (!hp) throw Exception("set constrained string default failed lookup of <" + name + ">"); hp->Value(value); } void HandleObject::SetConstrainedStringSetDefault(std::string name, std::string values) { HPConstrainedStringSet *hp = (HPConstrainedStringSet*) LookupProperty(name); std::vector data; Tokenize(values,data,"|"); ((HPStringSet*)hp)->Data(data); } void HandleObject::SetThreeVectorDefault(std::string name, double x, double y, double z) { HPThreeVector *hp = (HPThreeVector*) LookupProperty(name); hp->Value(x,y,z); } void HandleObject::SetFourVectorDefault(std::string name, double x, double y, double z, double w) { HPFourVector *hp = (HPFourVector*) LookupProperty(name); hp->Value(x,y,z,w); } void HandleObject::SetTwoVectorDefault(std::string name, double x, double y) { HPTwoVector *hp = (HPTwoVector*) LookupProperty(name); hp->Value(x,y); } void HandleObject::SetStringDefault(std::string name, std::string value) { HPString *hp = (HPString*) LookupProperty(name); hp->Value(value); } void HandleObject::SetScalarDefault(std::string name, double value) { HPScalar *hp = (HPScalar*) LookupProperty(name); hp->Value(value); } bool HandleObject::IsAuto(std::string mode) { HPAutoManual *hp = (HPAutoManual*) LookupProperty(mode); return hp->Is("auto"); } bool HandleObject::StringCheck(std::string name, std::string value) { HPString *hp = (HPString*) LookupProperty(name); return hp->Is(value); } double VecMin(std::vector &v) { double min = 0; bool first = true; for (int i=0;i &v) { double max = 0; bool first = true; for (int i=0;i max) { max = v[i]; } } return max; } double ArrayMin(Array a) { if (a.isEmpty()) return 0; a.promoteType(FM_DOUBLE); const double* v = (const double *) a.getDataPointer(); int len = a.getLength(); double min = 0; bool first = true; for (int i=0;i max) { max = v[i]; } } return max; }