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 <libwpd/libwpd.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     m_columnSeparator.m_style=MWAWBorder::None;
00052   }
00054   virtual ~MWAWSection() {
00055   }
00060   void setColumns(int num, double width, WPXUnit widthUnit, double colSep=0);
00062   int numColumns() const {
00063     return m_columns.size() <= 1 ? 1 : int(m_columns.size());
00064   }
00066   bool hasSingleColumns() const {
00067     return m_columns.size() <= 1;
00068   }
00070   void addTo(WPXPropertyList &propList) const;
00072   void addColumnsTo(WPXPropertyListVector &propList) const;
00074   friend std::ostream &operator<<(std::ostream &o, MWAWSection const &sec);
00076   bool operator!=(MWAWSection const &sec) const {
00077     if (m_columns.size()!=sec.m_columns.size())
00078       return true;
00079     for (size_t c=0; c < m_columns.size(); c++) {
00080       if (m_columns[c] != sec.m_columns[c])
00081         return true;
00082     }
00083     if (m_columnSeparator != sec.m_columnSeparator)
00084       return true;
00085     if (m_balanceText!=sec.m_balanceText || m_backgroundColor!=sec.m_backgroundColor)
00086       return true;
00087     return false;
00088   }
00090   bool operator==(MWAWSection const &sec) const {
00091     return !operator!=(sec);
00092   }
00093 
00095   std::vector<Column> m_columns;
00097   double m_width;
00099   MWAWBorder m_columnSeparator;
00101   bool m_balanceText;
00103   MWAWColor m_backgroundColor;
00104 
00105 public:
00107   struct Column {
00109     Column() : m_width(0), m_widthUnit(WPX_INCH) {
00110       for (int i = 0; i < 4; i++)
00111         m_margins[i]=0;
00112     }
00114     bool addTo(WPXPropertyList &propList) const;
00116     friend std::ostream &operator<<(std::ostream &o, Column const &column);
00118     bool operator!=(Column const &col) const {
00119       if (m_width<col.m_width || m_width>col.m_width || m_widthUnit!=col.m_widthUnit)
00120         return true;
00121       for (int i = 0; i < 4; i++) {
00122         if (m_margins[i]<col.m_margins[i] || m_margins[i]>col.m_margins[i])
00123           return true;
00124       }
00125       return false;
00126     }
00128     bool operator==(Column const &col) const {
00129       return !operator!=(col);
00130     }
00131 
00133     double m_width;
00135     WPXUnit m_widthUnit;
00137     double m_margins[4];
00138   };
00139 };
00140 #endif
00141 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: