# # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2000-2007 Donald N. Allingham # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # $Id$ """ Note class for GRAMPS. """ #------------------------------------------------------------------------- # # GRAMPS modules # #------------------------------------------------------------------------- from gen.lib.primaryobj import BasicPrimaryObject from gen.lib.notetype import NoteType from gen.lib.markertype import MarkerType from gen.lib.styledtext import StyledText #------------------------------------------------------------------------- # # Class for notes used throughout the majority of GRAMPS objects # #------------------------------------------------------------------------- class Note(BasicPrimaryObject): """Define a text note. Starting from GRAMPS 3.1 Note object stores the text in L{StyledText} instance, thus it can have text formatting information. To get and set only the clear text of the note use the L{get} and L{set} methods. To get and set the formatted version of the Note's text use the L{get_styledtext} and L{set_styledtext} methods. The note may be 'preformatted' or 'flowed', which indicates that the text string is considered to be in paragraphs, separated by newlines. @cvar POS_: Position of attribute in the serialized format of an instance. @type POS_: int @attention: The POS_ class variables reflect the serialized object, they have to be updated in case the data structure or the L{serialize} method changes! """ (FLOWED, FORMATTED) = range(2) (POS_HANDLE, POS_ID, POS_TEXT, POS_FORMAT, POS_TYPE, POS_CHANGE, POS_MARKER, POS_PRIVATE,) = range(8) def __init__(self, text=""): """Create a new Note object, initializing from the passed string.""" BasicPrimaryObject.__init__(self) self.text = StyledText(text) self.format = Note.FLOWED self.type = NoteType() def serialize(self): """Convert the object to a serialized tuple of data. @returns: The serialized format of the instance. @rtype: tuple """ return (self.handle, self.gramps_id, self.text.serialize(), self.format, self.type.serialize(), self.change, self.marker.serialize(), self.private) def unserialize(self, data): """Convert a serialized tuple of data to an object. @param data: The serialized format of a Note. @type: data: tuple """ (self.handle, self.gramps_id, the_text, self.format, the_type, self.change, the_marker, self.private) = data self.text = StyledText() self.text.unserialize(the_text) self.marker = MarkerType() self.marker.unserialize(the_marker) self.type = NoteType() self.type.unserialize(the_type) def get_text_data_list(self): """Return the list of all textual attributes of the object. @returns: The list of all textual attributes of the object. @rtype: list """ return [str(self.text)] def set(self, text): """Set the text associated with the note to the passed string. @param text: The I{clear} text defining the note contents. @type text: str """ self.text = StyledText(text) def get(self): """Return the text string associated with the note. @returns: The I{clear} text of the note contents. @rtype: str """ return str(self.text) def set_styledtext(self, text): """Set the text associated with the note to the passed string. @param text: The I{formatted} text defining the note contents. @type text: L{StyledText} """ self.text = text def get_styledtext(self): """Return the text string associated with the note. @returns: The I{formatted} text of the note contents. @rtype: L{StyledText} """ return self.text def append(self, text): """Append the specified text to the text associated with the note. @param text: Text string to be appended to the note. @type text: str or L{StyledText} """ self.text = self.text + text def set_format(self, format): """Set the format of the note to the passed value. @param: format: The value can either indicate Flowed or Preformatted. @type format: int """ self.format = format def get_format(self): """Return the format of the note. The value can either indicate Flowed or Preformatted. @returns: 0 indicates Flowed, 1 indicates Preformated @rtype: int """ return self.format def set_type(self, the_type): """Set descriptive type of the Note. @param the_type: descriptive type of the Note @type the_type: str """ self.type.set(the_type) def get_type(self): """Get descriptive type of the Note. @returns: the descriptive type of the Note @rtype: str """ return self.type