#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from .fontstyle import FontStyle
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".paragraphstyle")
#-------------------------------------------------------------------------
#
# Paragraph alignment
#
#-------------------------------------------------------------------------
PARA_ALIGN_CENTER = 0
PARA_ALIGN_LEFT = 1
PARA_ALIGN_RIGHT = 2
PARA_ALIGN_JUSTIFY = 3
#------------------------------------------------------------------------
#
# ParagraphStyle
#
#------------------------------------------------------------------------
[docs]class ParagraphStyle(object):
"""
Defines the characteristics of a paragraph. The characteristics are:
font (a :class:`.FontStyle` instance), right margin, left margin,
first indent, top margin, bottom margin, alignment, level, top border,
bottom border, right border, left border, padding, and background color.
"""
def __init__(self, source=None):
"""
:param source: if not None, then the ParagraphStyle is created using the
values of the source instead of the default values.
"""
if source:
self.font = FontStyle(source.font)
self.rmargin = source.rmargin
self.lmargin = source.lmargin
self.first_indent = source.first_indent
self.tmargin = source.tmargin
self.bmargin = source.bmargin
self.align = source.align
self.level = source.level
self.top_border = source.top_border
self.bottom_border = source.bottom_border
self.right_border = source.right_border
self.left_border = source.left_border
self.pad = source.pad
self.bgcolor = source.bgcolor
self.description = source.description
self.tabs = source.tabs
else:
self.font = FontStyle()
self.rmargin = 0
self.lmargin = 0
self.tmargin = 0
self.bmargin = 0
self.first_indent = 0
self.align = PARA_ALIGN_LEFT
self.level = 0
self.top_border = 0
self.bottom_border = 0
self.right_border = 0
self.left_border = 0
self.pad = 0
self.bgcolor = (255, 255, 255)
self.description = ""
self.tabs = []
[docs] def set_description(self, text):
"""
Set the desciption of the paragraph
"""
self.description = text
[docs] def get_description(self):
"""
Return the desciption of the paragraph
"""
return self.description
[docs] def set(self, rmargin=None, lmargin=None, first_indent=None,
tmargin=None, bmargin=None, align=None,
tborder=None, bborder=None, rborder=None, lborder=None,
pad=None, bgcolor=None, font=None):
"""
Allows the values of the object to be set.
:param rmargin: right indent in centimeters
:param lmargin: left indent in centimeters
:param first_indent: first line indent in centimeters
:param tmargin: space above paragraph in centimeters
:param bmargin: space below paragraph in centimeters
:param align: alignment type (PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER, or PARA_ALIGN_JUSTIFY)
:param tborder: non zero indicates that a top border should be used
:param bborder: non zero indicates that a bottom border should be used
:param rborder: non zero indicates that a right border should be used
:param lborder: non zero indicates that a left border should be used
:param pad: padding in centimeters
:param bgcolor: background color of the paragraph as an RGB tuple.
:param font: FontStyle instance that defines the font
"""
if font is not None:
self.font = FontStyle(font)
if pad is not None:
self.set_padding(pad)
if tborder is not None:
self.set_top_border(tborder)
if bborder is not None:
self.set_bottom_border(bborder)
if rborder is not None:
self.set_right_border(rborder)
if lborder is not None:
self.set_left_border(lborder)
if bgcolor is not None:
self.set_background_color(bgcolor)
if align is not None:
self.set_alignment(align)
if rmargin is not None:
self.set_right_margin(rmargin)
if lmargin is not None:
self.set_left_margin(lmargin)
if first_indent is not None:
self.set_first_indent(first_indent)
if tmargin is not None:
self.set_top_margin(tmargin)
if bmargin is not None:
self.set_bottom_margin(bmargin)
[docs] def set_font(self, font):
"""
Set the font style of the paragraph.
:param font: :class:`.FontStyle` object containing the font definition
to use.
"""
self.font = FontStyle(font)
[docs] def get_font(self):
"Return the :class:`.FontStyle` of the paragraph"
return self.font
[docs] def set_padding(self, val):
"""
Set the paragraph padding in centimeters
:param val: floating point value indicating the padding in centimeters
"""
self.pad = val
[docs] def get_padding(self):
"""Return a the padding of the paragraph"""
return self.pad
[docs] def set_top_border(self, val):
"""
Set the presence or absence of top border.
:param val: True indicates a border should be used, False indicates
no border.
"""
self.top_border = val
[docs] def get_top_border(self):
"Return 1 if a top border is specified"
return self.top_border
[docs] def set_bottom_border(self, val):
"""
Set the presence or absence of bottom border.
:param val: True indicates a border should be used, False
indicates no border.
"""
self.bottom_border = val
[docs] def get_bottom_border(self):
"Return 1 if a bottom border is specified"
return self.bottom_border
[docs] def set_left_border(self, val):
"""
Set the presence or absence of left border.
:param val: True indicates a border should be used, False
indicates no border.
"""
self.left_border = val
[docs] def get_left_border(self):
"Return 1 if a left border is specified"
return self.left_border
[docs] def set_right_border(self, val):
"""
Set the presence or absence of rigth border.
:param val: True indicates a border should be used, False
indicates no border.
"""
self.right_border = val
[docs] def get_right_border(self):
"Return 1 if a right border is specified"
return self.right_border
[docs] def get_background_color(self):
"""
Return a tuple indicating the RGB components of the background
color
"""
return self.bgcolor
[docs] def set_background_color(self, color):
"""
Set the background color of the paragraph.
:param color: tuple representing the RGB components of a color
(0,0,0) to (255,255,255)
"""
self.bgcolor = color
[docs] def set_alignment(self, align):
"""
Set the paragraph alignment.
:param align: PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER,
or PARA_ALIGN_JUSTIFY
"""
self.align = align
[docs] def get_alignment(self):
"Return the alignment of the paragraph"
return self.align
[docs] def get_alignment_text(self):
"""
Return a text string representing the alignment, either 'left',
'right', 'center', or 'justify'
"""
if self.align == PARA_ALIGN_LEFT:
return "left"
elif self.align == PARA_ALIGN_CENTER:
return "center"
elif self.align == PARA_ALIGN_RIGHT:
return "right"
elif self.align == PARA_ALIGN_JUSTIFY:
return "justify"
return "unknown"
[docs] def set_left_margin(self, value):
"sets the left indent in centimeters"
self.lmargin = value
[docs] def set_right_margin(self, value):
"sets the right indent in centimeters"
self.rmargin = value
[docs] def set_first_indent(self, value):
"sets the first line indent in centimeters"
self.first_indent = value
[docs] def set_top_margin(self, value):
"sets the space above paragraph in centimeters"
self.tmargin = value
[docs] def set_bottom_margin(self, value):
"sets the space below paragraph in centimeters"
self.bmargin = value
[docs] def get_left_margin(self):
"returns the left indent in centimeters"
return self.lmargin
[docs] def get_right_margin(self):
"returns the right indent in centimeters"
return self.rmargin
[docs] def get_first_indent(self):
"returns the first line indent in centimeters"
return self.first_indent
[docs] def get_top_margin(self):
"returns the space above paragraph in centimeters"
return self.tmargin
[docs] def get_bottom_margin(self):
"returns the space below paragraph in centimeters"
return self.bmargin
[docs] def set_tabs(self, tab_stops):
assert isinstance(tab_stops, list)
self.tabs = tab_stops
[docs] def get_tabs(self):
return self.tabs