/*************************************************************************** * Copyright (c) Eivind Kvedalen (eivind@kvedalen.name) 2015 * * * * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library 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 Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * * License along with this library; see the file COPYING.LIB. If not, * * write to the Free Software Foundation, Inc., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #include "PreCompiled.h" #ifndef _PreComp_ #endif #include "PropertyColumnWidths.h" #include #include #include "Utils.h" #include using namespace App; using namespace Spreadsheet; const int PropertyColumnWidths::defaultWidth = 100; const int PropertyColumnWidths::defaultHeaderWidth = 50; TYPESYSTEM_SOURCE(Spreadsheet::PropertyColumnWidths , App::Property); PropertyColumnWidths::PropertyColumnWidths() { } PropertyColumnWidths::PropertyColumnWidths(const PropertyColumnWidths &other) { std::map::const_iterator i = other.begin(); while (i != other.end()) { insert(*i); ++i; } } App::Property *PropertyColumnWidths::Copy() const { PropertyColumnWidths * prop = new PropertyColumnWidths(*this); return prop; } void PropertyColumnWidths::Paste(const App::Property &from) { aboutToSetValue(); const PropertyColumnWidths * frompcw = static_cast(&from); std::map::const_iterator i; /* Mark all as dirty first */ i = begin(); while (i != end()) { dirty.insert(i->first); ++i; } /* Clear old map */ clear(); /* Copy new map from from */ i = frompcw->begin(); while (i != frompcw->end()) { insert(*i); dirty.insert(i->first); ++i; } hasSetValue(); } /** * Set the width (in pixels) of column \a col to \a width. * * @param col Column to set * @param width Width in pixels * */ void PropertyColumnWidths::setValue(int col, int width) { if (width >= 0) { aboutToSetValue(); operator[](col) = width; dirty.insert(col); hasSetValue(); } } void PropertyColumnWidths::Save(Base::Writer &writer) const { // Save column information writer.Stream() << writer.ind() << "" << std::endl; writer.incInd(); // indention for 'ColumnInfo' std::map::const_iterator coli = begin(); while (coli != end()) { writer.Stream() << writer.ind() << "first) << "\" width=\"" << coli->second << "\" />" << std::endl; ++coli; } writer.decInd(); // indention for 'ColumnInfo' writer.Stream() << writer.ind() << "" << std::endl; } void PropertyColumnWidths::Restore(Base::XMLReader &reader) { int Cnt; // Column info reader.readElement("ColumnInfo"); Cnt = reader.hasAttribute("Count") ? reader.getAttributeAsInteger("Count") : 0; for (int i = 0; i < Cnt; i++) { reader.readElement("Column"); const char* name = reader.hasAttribute("name") ? reader.getAttribute("name") : 0; const char * width = reader.hasAttribute("width") ? reader.getAttribute("width") : 0; try { if (name && width) { int col = decodeColumn(name); int colWidth = atoi(width); setValue(col, colWidth); } } catch (...) { // Something is wrong, skip this column } } reader.readEndElement("ColumnInfo"); } PyObject *PropertyColumnWidths::getPyObject() { if (PythonObject.is(Py::_None())){ // ref counter is set to 1 PythonObject = Py::Object(new PropertyColumnWidthsPy(this),true); } return Py::new_reference_to(PythonObject); }