xref: /AOO41X/main/writerperfect/source/filter/ListStyle.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /* ListStyle: Stores (and writes) list-based information that is
2  * needed at the head of an OO document.
3  *
4  * Copyright (C) 2002-2003 William Lachance (william.lachance@sympatico.ca)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19  *
20  * For further information visit http://libwpd.sourceforge.net
21  *
22  */
23 
24 /* "This product is not manufactured, approved, or supported by
25  * Corel Corporation or Corel Corporation Limited."
26  */
27 #include "FilterInternal.hxx"
28 #include "ListStyle.hxx"
29 #include "DocumentElement.hxx"
30 
OrderedListLevelStyle(const WPXPropertyList & xPropList)31 OrderedListLevelStyle::OrderedListLevelStyle(const WPXPropertyList &xPropList) :
32         mPropList(xPropList)
33 {
34 }
35 
updateListLevel(const int iLevel,const WPXPropertyList & xPropList)36 void OrderedListStyle::updateListLevel(const int iLevel, const WPXPropertyList &xPropList)
37 {
38     if (iLevel < 0)
39         return;
40     if (!isListLevelDefined(iLevel))
41         setListLevel(iLevel, new OrderedListLevelStyle(xPropList));
42 }
43 
write(DocumentHandler * pHandler,int iLevel) const44 void OrderedListLevelStyle::write(DocumentHandler *pHandler, int iLevel) const
45 {
46     WPXString sLevel;
47     sLevel.sprintf("%i", (iLevel+1));
48 
49     TagOpenElement listLevelStyleOpen("text:list-level-style-number");
50     listLevelStyleOpen.addAttribute("text:level", sLevel);
51     listLevelStyleOpen.addAttribute("text:style-name", "Numbering Symbols");
52         if (mPropList["style:num-prefix"])
53                 listLevelStyleOpen.addAttribute("style:num-prefix", mPropList["style:num-prefix"]->getStr());
54         if (mPropList["style:num-suffix"])
55                 listLevelStyleOpen.addAttribute("style:num-suffix", mPropList["style:num-suffix"]->getStr());
56         if (mPropList["style:num-format"])
57                 listLevelStyleOpen.addAttribute("style:num-format", mPropList["style:num-format"]->getStr());
58         if (mPropList["text:start-value"])
59                 listLevelStyleOpen.addAttribute("text:start-value", mPropList["text:start-value"]->getStr());
60     listLevelStyleOpen.write(pHandler);
61 
62     TagOpenElement stylePropertiesOpen("style:properties");
63         if (mPropList["text:space-before"])
64                 stylePropertiesOpen.addAttribute("text:space-before", mPropList["text:space-before"]->getStr());
65     if (mPropList["text:min-label-width"])
66         stylePropertiesOpen.addAttribute("text:min-label-width", mPropList["text:min-label-width"]->getStr());
67     if (mPropList["text:min-label-distance"])
68         stylePropertiesOpen.addAttribute("text:min-label-distance", mPropList["text:min-label-distance"]->getStr());
69     stylePropertiesOpen.write(pHandler);
70 
71     pHandler->endElement("style:properties");
72     pHandler->endElement("text:list-level-style-number");
73 }
74 
UnorderedListLevelStyle(const WPXPropertyList & xPropList)75 UnorderedListLevelStyle::UnorderedListLevelStyle(const WPXPropertyList &xPropList)
76     : mPropList(xPropList)
77 {
78 }
79 
updateListLevel(const int iLevel,const WPXPropertyList & xPropList)80 void UnorderedListStyle::updateListLevel(const int iLevel, const WPXPropertyList &xPropList)
81 {
82     if (iLevel < 0)
83         return;
84     if (!isListLevelDefined(iLevel))
85         setListLevel(iLevel, new UnorderedListLevelStyle(xPropList));
86 }
87 
write(DocumentHandler * pHandler,int iLevel) const88 void UnorderedListLevelStyle::write(DocumentHandler *pHandler, int iLevel) const
89 {
90     WPXString sLevel;
91     sLevel.sprintf("%i", (iLevel+1));
92     TagOpenElement listLevelStyleOpen("text:list-level-style-bullet");
93     listLevelStyleOpen.addAttribute("text:level", sLevel);
94     listLevelStyleOpen.addAttribute("text:style-name", "Bullet Symbols");
95     listLevelStyleOpen.addAttribute("style:num-suffice", ".");
96         if (mPropList["text:bullet-char"])
97                 listLevelStyleOpen.addAttribute("text:bullet-char", mPropList["text:bullet-char"]->getStr());
98     listLevelStyleOpen.write(pHandler);
99 
100     TagOpenElement stylePropertiesOpen("style:properties");
101         if (mPropList["text:space-before"])
102                 stylePropertiesOpen.addAttribute("text:space-before", mPropList["text:space-before"]->getStr());
103     if (mPropList["text:min-label-width"])
104         stylePropertiesOpen.addAttribute("text:min-label-width", mPropList["text:min-label-width"]->getStr());
105     if (mPropList["text:min-label-distance"])
106         stylePropertiesOpen.addAttribute("text:min-label-distance", mPropList["text:min-label-distance"]->getStr());
107     stylePropertiesOpen.addAttribute("style:font-name", "OpenSymbol");
108     stylePropertiesOpen.write(pHandler);
109 
110     pHandler->endElement("style:properties");
111     pHandler->endElement("text:list-level-style-bullet");
112 }
113 
ListStyle(const char * psName,const int iListID)114 ListStyle::ListStyle(const char *psName, const int iListID) :
115     Style(psName),
116     miListID(iListID)
117 {
118     for (int i=0; i<WP6_NUM_LIST_LEVELS; i++)
119         mppListLevels[i] = NULL;
120 
121 }
122 
~ListStyle()123 ListStyle::~ListStyle()
124 {
125     for (int i=0; i<WP6_NUM_LIST_LEVELS; i++) {
126         if (mppListLevels[i])
127             delete(mppListLevels[i]);
128     }
129 
130 }
131 
isListLevelDefined(int iLevel) const132 bool ListStyle::isListLevelDefined(int iLevel) const
133 {
134     if (mppListLevels[iLevel] == NULL)
135         return false;
136 
137     return true;
138 }
139 
setListLevel(int iLevel,ListLevelStyle * iListLevelStyle)140 void ListStyle::setListLevel(int iLevel, ListLevelStyle *iListLevelStyle)
141 {
142     // can't uncomment this next line without adding some extra logic.
143     // figure out which is best: use the initial message, or constantly
144     // update?
145     if (mppListLevels[iLevel] == NULL)
146         mppListLevels[iLevel] = iListLevelStyle;
147 }
148 
write(DocumentHandler * pHandler) const149 void ListStyle::write(DocumentHandler *pHandler) const
150 {
151     TagOpenElement listStyleOpenElement("text:list-style");
152     listStyleOpenElement.addAttribute("style:name", getName());
153     listStyleOpenElement.write(pHandler);
154 
155     for (int i=0; i<WP6_NUM_LIST_LEVELS; i++) {
156         if (mppListLevels[i] != NULL)
157             mppListLevels[i]->write(pHandler, i);
158     }
159 
160     pHandler->endElement("text:list-style");
161 }
162