MWAWSection.hxx
Go to the documentation of this file.
00001 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
00002 
00003 /* libmwaw
00004 * Version: MPL 2.0 / LGPLv2+
00005 *
00006 * The contents of this file are subject to the Mozilla Public License Version
00007 * 2.0 (the "License"); you may not use this file except in compliance with
00008 * the License or as specified alternatively below. You may obtain a copy of
00009 * the License at http://www.mozilla.org/MPL/
00010 *
00011 * Software distributed under the License is distributed on an "AS IS" basis,
00012 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00013 * for the specific language governing rights and limitations under the
00014 * License.
00015 *
00016 * Major Contributor(s):
00017 * Copyright (C) 2002 William Lachance (wrlach@gmail.com)
00018 * Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
00019 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
00020 * Copyright (C) 2006, 2007 Andrew Ziem
00021 * Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
00022 *
00023 *
00024 * All Rights Reserved.
00025 *
00026 * For minor contributions see the git repository.
00027 *
00028 * Alternatively, the contents of this file may be used under the terms of
00029 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
00030 * in which case the provisions of the LGPLv2+ are applicable
00031 * instead of those above.
00032 */
00033 
00034 #ifndef MWAW_SECTION_H
00035 #define MWAW_SECTION_H
00036 
00037 #include <iostream>
00038 #include <vector>
00039 
00040 #include <librevenge/librevenge.h>
00041 
00042 #include "libmwaw_internal.hxx"
00043 
00045 class MWAWSection
00046 {
00047 public:
00048   struct Column;
00050   MWAWSection() : m_columns(), m_width(0), m_columnSeparator(), m_balanceText(false), m_backgroundColor(MWAWColor::white())
00051   {
00052     m_columnSeparator.m_style=MWAWBorder::None;
00053   }
00055   virtual ~MWAWSection()
00056   {
00057   }
00062   void setColumns(int num, double width, librevenge::RVNGUnit widthUnit, double colSep=0);
00064   int numColumns() const
00065   {
00066     return m_columns.size() <= 1 ? 1 : int(m_columns.size());
00067   }
00069   bool hasSingleColumns() const
00070   {
00071     return m_columns.size() <= 1;
00072   }
00074   void addTo(librevenge::RVNGPropertyList &propList) const;
00076   void addColumnsTo(librevenge::RVNGPropertyListVector &propList) const;
00078   friend std::ostream &operator<<(std::ostream &o, MWAWSection const &sec);
00080   bool operator!=(MWAWSection const &sec) const
00081   {
00082     if (m_columns.size()!=sec.m_columns.size())
00083       return true;
00084     for (size_t c=0; c < m_columns.size(); c++) {
00085       if (m_columns[c] != sec.m_columns[c])
00086         return true;
00087     }
00088     if (m_columnSeparator != sec.m_columnSeparator)
00089       return true;
00090     if (m_balanceText!=sec.m_balanceText || m_backgroundColor!=sec.m_backgroundColor)
00091       return true;
00092     return false;
00093   }
00095   bool operator==(MWAWSection const &sec) const
00096   {
00097     return !operator!=(sec);
00098   }
00099 
00101   std::vector<Column> m_columns;
00103   double m_width;
00105   MWAWBorder m_columnSeparator;
00107   bool m_balanceText;
00109   MWAWColor m_backgroundColor;
00110 
00111 public:
00113   struct Column {
00115     Column() : m_width(0), m_widthUnit(librevenge::RVNG_INCH)
00116     {
00117       for (int i = 0; i < 4; i++)
00118         m_margins[i]=0;
00119     }
00121     bool addTo(librevenge::RVNGPropertyList &propList) const;
00123     friend std::ostream &operator<<(std::ostream &o, Column const &column);
00125     bool operator!=(Column const &col) const
00126     {
00127       if (m_width<col.m_width || m_width>col.m_width || m_widthUnit!=col.m_widthUnit)
00128         return true;
00129       for (int i = 0; i < 4; i++) {
00130         if (m_margins[i]<col.m_margins[i] || m_margins[i]>col.m_margins[i])
00131           return true;
00132       }
00133       return false;
00134     }
00136     bool operator==(Column const &col) const
00137     {
00138       return !operator!=(col);
00139     }
00140 
00142     double m_width;
00144     librevenge::RVNGUnit m_widthUnit;
00146     double m_margins[4];
00147   };
00148 };
00149 #endif
00150 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: