mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
a8fa6637fe
workbook::operator== was comparing the value of the raw pointer held by two std::unique_ptr's. By definition, this is always false in a well behaved program (if it's true, things go bang...). This then led to adding equality operators to nearly every other struct/class in xlnt to support workbook::operator== workbook::load and the non-default ctors for loading data from a file are tested using the now functional equality operator NOTE: a large number of copy ctors need updates/fixing. Many should be defaulted
312 lines
7.2 KiB
C++
312 lines
7.2 KiB
C++
// Copyright (c) 2014-2018 Thomas Fussell
|
|
// Copyright (c) 2010-2015 openpyxl
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, WRISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE
|
|
//
|
|
// @license: http://www.opensource.org/licenses/mit-license.php
|
|
// @author: see AUTHORS file
|
|
|
|
#include <xlnt/worksheet/header_footer.hpp>
|
|
|
|
namespace xlnt {
|
|
|
|
bool header_footer::has_header() const
|
|
{
|
|
return !odd_headers_.empty() || !even_headers_.empty() || has_first_page_header();
|
|
}
|
|
|
|
bool header_footer::has_footer() const
|
|
{
|
|
return !odd_headers_.empty() || !even_headers_.empty() || has_first_page_footer();
|
|
}
|
|
|
|
bool header_footer::align_with_margins() const
|
|
{
|
|
return align_with_margins_;
|
|
}
|
|
|
|
header_footer &header_footer::align_with_margins(bool align)
|
|
{
|
|
align_with_margins_ = align;
|
|
return *this;
|
|
}
|
|
|
|
bool header_footer::different_odd_even() const
|
|
{
|
|
return different_odd_even_;
|
|
}
|
|
|
|
bool header_footer::different_first() const
|
|
{
|
|
return !first_headers_.empty() || !first_footers_.empty();
|
|
}
|
|
|
|
bool header_footer::scale_with_doc() const
|
|
{
|
|
return scale_with_doc_;
|
|
}
|
|
|
|
header_footer &header_footer::scale_with_doc(bool scale)
|
|
{
|
|
scale_with_doc_ = scale;
|
|
return *this;
|
|
}
|
|
|
|
// Normal Header
|
|
|
|
bool header_footer::has_header(location where) const
|
|
{
|
|
return odd_headers_.count(where) > 0 || has_first_page_header(where);
|
|
}
|
|
|
|
void header_footer::clear_header()
|
|
{
|
|
odd_headers_.clear();
|
|
even_headers_.clear();
|
|
first_headers_.clear();
|
|
}
|
|
|
|
void header_footer::clear_header(location where)
|
|
{
|
|
odd_headers_.erase(where);
|
|
even_headers_.erase(where);
|
|
first_headers_.erase(where);
|
|
}
|
|
|
|
header_footer &header_footer::header(location where, const std::string &text)
|
|
{
|
|
return header(where, rich_text(text));
|
|
}
|
|
|
|
header_footer &header_footer::header(location where, const rich_text &text)
|
|
{
|
|
odd_headers_[where] = text;
|
|
return *this;
|
|
}
|
|
|
|
rich_text header_footer::header(location where) const
|
|
{
|
|
return odd_headers_.at(where);
|
|
}
|
|
|
|
// First Page Header
|
|
|
|
bool header_footer::has_first_page_header() const
|
|
{
|
|
return !first_headers_.empty();
|
|
}
|
|
|
|
bool header_footer::has_first_page_header(location where) const
|
|
{
|
|
return first_headers_.count(where) > 0;
|
|
}
|
|
|
|
void header_footer::clear_first_page_header()
|
|
{
|
|
first_headers_.clear();
|
|
}
|
|
|
|
void header_footer::clear_first_page_header(location where)
|
|
{
|
|
first_headers_.erase(where);
|
|
}
|
|
|
|
header_footer &header_footer::first_page_header(location where, const rich_text &text)
|
|
{
|
|
first_headers_[where] = text;
|
|
return *this;
|
|
}
|
|
|
|
rich_text header_footer::first_page_header(location where) const
|
|
{
|
|
return first_headers_.at(where);
|
|
}
|
|
|
|
// Odd/Even Header
|
|
|
|
bool header_footer::has_odd_even_header() const
|
|
{
|
|
return different_odd_even() && !odd_headers_.empty();
|
|
}
|
|
|
|
bool header_footer::has_odd_even_header(location where) const
|
|
{
|
|
return different_odd_even() && odd_headers_.count(where) > 0;
|
|
}
|
|
|
|
void header_footer::clear_odd_even_header()
|
|
{
|
|
odd_headers_.clear();
|
|
even_headers_.clear();
|
|
different_odd_even_ = false;
|
|
}
|
|
|
|
void header_footer::clear_odd_even_header(location where)
|
|
{
|
|
odd_headers_.erase(where);
|
|
even_headers_.erase(where);
|
|
}
|
|
|
|
header_footer &header_footer::odd_even_header(location where, const rich_text &odd, const rich_text &even)
|
|
{
|
|
odd_headers_[where] = odd;
|
|
even_headers_[where] = even;
|
|
different_odd_even_ = true;
|
|
|
|
return *this;
|
|
}
|
|
|
|
rich_text header_footer::odd_header(location where) const
|
|
{
|
|
return odd_headers_.at(where);
|
|
}
|
|
|
|
rich_text header_footer::even_header(location where) const
|
|
{
|
|
return even_headers_.at(where);
|
|
}
|
|
|
|
// Normal Footer
|
|
|
|
bool header_footer::has_footer(location where) const
|
|
{
|
|
return odd_footers_.count(where) > 0;
|
|
}
|
|
|
|
void header_footer::clear_footer()
|
|
{
|
|
odd_footers_.clear();
|
|
even_footers_.clear();
|
|
first_footers_.clear();
|
|
}
|
|
|
|
void header_footer::clear_footer(location where)
|
|
{
|
|
odd_footers_.erase(where);
|
|
even_footers_.erase(where);
|
|
first_footers_.erase(where);
|
|
}
|
|
|
|
header_footer &header_footer::footer(location where, const std::string &text)
|
|
{
|
|
return footer(where, rich_text(text));
|
|
}
|
|
|
|
header_footer &header_footer::footer(location where, const rich_text &text)
|
|
{
|
|
odd_footers_[where] = text;
|
|
return *this;
|
|
}
|
|
|
|
rich_text header_footer::footer(location where) const
|
|
{
|
|
return odd_footers_.at(where);
|
|
}
|
|
|
|
// First Page footer
|
|
|
|
bool header_footer::has_first_page_footer() const
|
|
{
|
|
return different_first() && !first_footers_.empty();
|
|
}
|
|
|
|
bool header_footer::has_first_page_footer(location where) const
|
|
{
|
|
return different_first() && first_footers_.count(where) > 0;
|
|
}
|
|
|
|
void header_footer::clear_first_page_footer()
|
|
{
|
|
first_footers_.clear();
|
|
}
|
|
|
|
void header_footer::clear_first_page_footer(location where)
|
|
{
|
|
first_footers_.erase(where);
|
|
}
|
|
|
|
header_footer &header_footer::first_page_footer(location where, const rich_text &text)
|
|
{
|
|
first_footers_[where] = text;
|
|
return *this;
|
|
}
|
|
|
|
rich_text header_footer::first_page_footer(location where) const
|
|
{
|
|
return first_footers_.at(where);
|
|
}
|
|
|
|
// Odd/Even Footer
|
|
|
|
bool header_footer::has_odd_even_footer() const
|
|
{
|
|
return different_odd_even() && !even_footers_.empty();
|
|
}
|
|
|
|
bool header_footer::has_odd_even_footer(location where) const
|
|
{
|
|
return different_odd_even() && even_footers_.count(where) > 0;
|
|
}
|
|
|
|
void header_footer::clear_odd_even_footer()
|
|
{
|
|
odd_footers_.clear();
|
|
even_footers_.clear();
|
|
}
|
|
|
|
void header_footer::clear_odd_even_footer(location where)
|
|
{
|
|
odd_footers_.erase(where);
|
|
even_footers_.erase(where);
|
|
}
|
|
|
|
header_footer &header_footer::odd_even_footer(location where, const rich_text &odd, const rich_text &even)
|
|
{
|
|
odd_footers_[where] = odd;
|
|
even_footers_[where] = even;
|
|
different_odd_even_ = true;
|
|
|
|
return *this;
|
|
}
|
|
|
|
rich_text header_footer::odd_footer(location where) const
|
|
{
|
|
return odd_footers_.at(where);
|
|
}
|
|
|
|
rich_text header_footer::even_footer(location where) const
|
|
{
|
|
return even_footers_.at(where);
|
|
}
|
|
|
|
bool header_footer::operator==(const header_footer &rhs) const
|
|
{
|
|
return align_with_margins_ == rhs.align_with_margins_
|
|
&& different_odd_even_ == rhs.different_odd_even_
|
|
&& scale_with_doc_ == rhs.scale_with_doc_
|
|
&& odd_headers_ == rhs.odd_headers_
|
|
&& even_headers_ == rhs.even_headers_
|
|
&& first_headers_ == rhs.first_headers_
|
|
&& odd_footers_ == rhs.odd_footers_
|
|
&& even_footers_ == rhs.even_footers_
|
|
&& first_footers_ == rhs.first_footers_;
|
|
}
|
|
|
|
} // namespace xlnt
|