summaryrefslogtreecommitdiffstats
path: root/karbon/core/vdocument.h
diff options
context:
space:
mode:
Diffstat (limited to 'karbon/core/vdocument.h')
-rw-r--r--karbon/core/vdocument.h327
1 files changed, 327 insertions, 0 deletions
diff --git a/karbon/core/vdocument.h b/karbon/core/vdocument.h
new file mode 100644
index 00000000..577dd1c2
--- /dev/null
+++ b/karbon/core/vdocument.h
@@ -0,0 +1,327 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, The Karbon Developers
+ Copyright (C) 2002, The Karbon Developers
+
+ 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., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef VDOCUMENT_H
+#define VDOCUMENT_H
+
+#include <KoUnit.h>
+
+#include <qstring.h>
+#include <qptrlist.h>
+#include <qptrdict.h>
+
+#include "vobject.h"
+
+#include "karbon_grid_data.h"
+#include <koffice_export.h>
+
+class QDomDocument;
+class QDomElement;
+class VSelection;
+class VLayer;
+class KoPageLayout;
+
+typedef QPtrList<VLayer> VLayerList;
+typedef QPtrListIterator<VLayer> VLayerListIterator;
+
+
+/**
+ * All non-visual, static doc info is in here.
+ * The karbon part uses this class.
+ * Filters can use this class as well instead of
+ * the visually oriented karbon part.
+ */
+
+class KARBONBASE_EXPORT VDocument : public VObject
+{
+public:
+ /** The different selection modes */
+ enum VSelectionMode {
+ ActiveLayer, /**< selection within the active layer */
+ VisibleLayers, /**< selection within all visible layers */
+ SelectedLayers, /**< selection within all selected layers */
+ AllLayers /**< selection within all layers */
+ };
+
+ /**
+ * Constructs a new document.
+ */
+ VDocument();
+
+ /**
+ * Copy constructor.
+ *
+ * @param document the document to copy properties from
+ */
+ VDocument( const VDocument& document );
+
+ /**
+ * Destroys the document and all of the layers.
+ */
+ virtual ~VDocument();
+
+ virtual void draw( VPainter* painter, const KoRect* rect ) const;
+
+ /**
+ * Draw the document frame to a painting device.
+ *
+ * @param painter abstraction that is used to render to a painting device.
+ * @param pl layout describing the page to draw on (restricting the painter)
+ * @param drawPageMargins if @c true, also draw the crop marks for the page margins,
+ * otherwise, don't draw them.
+ */
+ void drawPage( VPainter *painter, const KoPageLayout &pl, bool drawPageMargins ) const;
+
+ /**
+ * Returns document width.
+ *
+ * @return the document's width
+ */
+ double width() const { return m_width; }
+
+ /**
+ * Returns document height.
+ *
+ * @return the document's height
+ */
+ double height() const { return m_height; }
+
+ /**
+ * Sets document width.
+ *
+ * @param width the new document width
+ */
+ void setWidth( double width ) { m_width = width; m_boundingBox.setWidth( width ); }
+
+ /**
+ * Sets document height.
+ *
+ * @param height the new document height
+ */
+ void setHeight( double height ) { m_height = height; m_boundingBox.setHeight( height ); }
+
+ /**
+ * Returns document unit.
+ *
+ * @return the document's unit
+ */
+ KoUnit::Unit unit() const
+ { return m_unit; }
+
+ /**
+ * Sets document unit.
+ *
+ * @param unit the new document unit
+ */
+ void setUnit( KoUnit::Unit unit )
+ { m_unit = unit; }
+
+ /**
+ * Checks if specified layer can be raised.
+ *
+ * A layer can be raised if there is more than one layer and the specified layer
+ * is not already at the top.
+ *
+ * @param layer the layer to check
+ * @return true if layer can be raised, else false
+ */
+ bool canRaiseLayer( VLayer* layer );
+
+ /**
+ * Checks if specified layer can be lowered.
+ *
+ * A layer can be lowered if there is more than one layer and the specified layer
+ * is not already at the bottom.
+ *
+ * @param layer the layer to check
+ * @return true if layer can be lowered, else false
+ */
+ bool canLowerLayer( VLayer* layer );
+
+ /**
+ * Raises the layer.
+ *
+ * @param layer the layer to raise
+ */
+ void raiseLayer( VLayer* layer );
+
+ /**
+ * Lowers the layer.
+ *
+ * @param layer the layer to lower
+ */
+ void lowerLayer( VLayer* layer );
+
+ /**
+ * Returns the position of the specified layer.
+ *
+ * @param layer the layer to retrieve the position for
+ * @return the layer position
+ */
+ int layerPos( VLayer* layer );
+
+ /**
+ * Inserts a new layer.
+ *
+ * The layer is appended at the end, on top of all other layers, and is activated.
+ *
+ * @param layer the layer to insert
+ */
+ void insertLayer( VLayer* layer );
+
+ /**
+ * Removes the layer.
+ *
+ * If there is no layer left, a new layer is created, inserted and activated.
+ *
+ * @param layer the layer to remove
+ */
+ void removeLayer( VLayer* layer );
+
+ /**
+ * Sets the active layer.
+ *
+ * The specified layer is set active, if it is found in the layer list.
+ *
+ * @param layer the layer to set active
+ */
+ void setActiveLayer( VLayer* layer );
+
+ /**
+ * Returns a pointer to the active layer.
+ *
+ * @return the currently active layer
+ */
+ VLayer* activeLayer() const { return m_activeLayer; }
+
+ /**
+ * Returns the list of layers.
+ */
+ const VLayerList& layers() const { return m_layers; }
+
+ QDomDocument saveXML() const;
+ virtual void saveOasis( KoStore *store, KoXmlWriter *docWriter, KoGenStyles &mainStyles ) const;
+ enum { STYLE_GRAPHICAUTO = 20, STYLE_LINEAR_GRADIENT, STYLE_RADIAL_GRADIENT, STYLE_STROKE };
+ bool loadXML( const QDomElement& doc );
+ virtual bool loadOasis( const QDomElement &element, KoOasisLoadingContext &context );
+ virtual void save( QDomElement& element ) const;
+ virtual void load( const QDomElement& element );
+ void loadDocumentContent( const QDomElement& doc );
+
+ virtual VDocument* clone() const;
+
+ virtual void accept( VVisitor& visitor );
+
+
+ /**
+ * Returns a pointer to the selection.
+ *
+ * @return the document's selection
+ */
+ VSelection* selection() const
+ { return m_selection; }
+
+ /**
+ * Returns the selection mode.
+ *
+ * @return the actual selection mode
+ */
+ VSelectionMode selectionMode() { return m_selectionMode; }
+
+ /**
+ * Sets the selection mode.
+ *
+ * @param mode the new selection mode
+ */
+ void setSelectionMode( VSelectionMode mode ) { m_selectionMode = mode; }
+
+ /**
+ * Appends a new object to the active layer.
+ *
+ * @param object the object to append
+ */
+ void append( VObject* object );
+
+ /**
+ * Returns custom name of specified object.
+ *
+ * @param obj the object to retrieve name for
+ * @return the custom name of the object or an empty string if no custom name is set
+ */
+ QString objectName( const VObject *obj ) const;
+
+ /**
+ * Sets custom name of specified object.
+ *
+ * By default all object have generic names like path, rectangle or text that
+ * is defined within the object's class.
+ *
+ * @param obj the object to set custom name for
+ * @param name the the custom name to set
+ */
+ void setObjectName( const VObject *obj, const QString name ) { m_objectNames.insert( obj, name ); }
+
+ bool saveAsPath() const { return m_saveAsPath; }
+ void saveAsPath( bool b ) { m_saveAsPath = b; }
+
+ /**
+ * Returns the document's grid.
+ *
+ * @return the doument's grid
+ */
+ KarbonGridData &grid() { return m_gridData; }
+
+private:
+ /**
+ * Document width.
+ */
+ double m_width;
+
+ /**
+ * Document height.
+ */
+ double m_height;
+
+
+ /// The layers in this document.
+ VLayerList m_layers;
+ /// The active layer.
+ VLayer* m_activeLayer;
+
+ /// The selection. A list of selected objects.
+ VSelection* m_selection;
+ /// The selectionMode
+ VSelectionMode m_selectionMode;
+
+ /**
+ * The unit.
+ */
+ KoUnit::Unit m_unit;
+
+ QMap<const VObject *, QString> m_objectNames;
+
+ // TODO this flag is used nowhere, can we remove it?
+ bool m_saveAsPath;
+
+ KarbonGridData m_gridData;
+};
+
+#endif
+