001package com.hfg.xml.msoffice2003.spreadsheetml;
002
003import com.hfg.xml.XMLTag;
004
005//------------------------------------------------------------------------------
006/**
007 Excel worksheet options.
008
009 @author J. Alex Taylor, hairyfatguy.com
010 */
011//------------------------------------------------------------------------------
012// com.hfg Library
013//
014// This library is free software; you can redistribute it and/or
015// modify it under the terms of the GNU Lesser General Public
016// License as published by the Free Software Foundation; either
017// version 2.1 of the License, or (at your option) any later version.
018//
019// This library is distributed in the hope that it will be useful,
020// but WITHOUT ANY WARRANTY; without even the implied warranty of
021// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
022// Lesser General Public License for more details.
023//
024// You should have received a copy of the GNU Lesser General Public
025// License along with this library; if not, write to the Free Software
026// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
027//
028// J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com
029// jataylor@hairyfatguy.com
030//------------------------------------------------------------------------------
031
032public class ExcelWorksheetOptions extends XMLTag
033{
034
035   //---------------------------------------------------------------------------
036   public ExcelWorksheetOptions()
037   {
038      super(SpreadsheetML.WORKSHEET_OPTIONS);
039   }
040
041   //###########################################################################
042   // PUBLIC METHODS
043   //###########################################################################
044
045   //---------------------------------------------------------------------------
046   public ExcelWorksheetOptions setSelected(boolean inValue)
047   {
048      removeSubtagsByName(SpreadsheetML.SELECTED);
049      if (inValue)
050      {
051         addSubtag(new XMLTag(SpreadsheetML.SELECTED));
052      }
053
054      return this;
055   }
056
057   //---------------------------------------------------------------------------
058   public ExcelWorksheetOptions freezePaneAboveRow(int inRowIndex)
059   {
060      clearFreezeSettings();
061
062      addSubtag(new XMLTag(SpreadsheetML.FREEZE_PANES));
063
064      addSubtag(new XMLTag(SpreadsheetML.FROZEN_NO_SPLIT));
065
066      addSubtag(new XMLTag(SpreadsheetML.SPLIT_HORIZONTAL).setContent((inRowIndex - 1) + ""));
067
068      addSubtag(new XMLTag(SpreadsheetML.TOP_ROW_BOTTOM_PANE).setContent((inRowIndex - 1) + ""));
069
070      addSubtag(new XMLTag(SpreadsheetML.ACTIVE_PANE).setContent(ExcelWorksheet.Pane.LOWER_LEFT.value()));
071
072      /*
073       <Panes>
074         <Pane>
075           <Number>3</Number>
076         </Pane>
077         <Pane>
078           <Number>2</Number>
079           <ActiveRow>6</ActiveRow>
080           <ActiveCol>1</ActiveCol>
081         </Pane>
082       </Panes>
083       */
084      XMLTag panesTag = new XMLTag(SpreadsheetML.PANES);
085      addSubtag(panesTag);
086
087      XMLTag paneTag = new XMLTag(SpreadsheetML.PANE);
088      panesTag.addSubtag(paneTag);
089      paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.UPPER_LEFT.value()));
090
091      paneTag = new XMLTag(SpreadsheetML.PANE);
092      panesTag.addSubtag(paneTag);
093      paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.LOWER_LEFT.value()));
094
095
096      return this;
097   }
098
099   //---------------------------------------------------------------------------
100   public ExcelWorksheetOptions freezePaneLeftOfColumn(int inColumnIndex)
101   {
102      clearFreezeSettings();
103
104      addSubtag(new XMLTag(SpreadsheetML.FREEZE_PANES));
105
106      addSubtag(new XMLTag(SpreadsheetML.FROZEN_NO_SPLIT));
107
108      addSubtag(new XMLTag(SpreadsheetML.SPLIT_VERTICAL).setContent((inColumnIndex - 1) + ""));
109
110      addSubtag(new XMLTag(SpreadsheetML.LEFT_COLUMN_RIGHT_PANE).setContent((inColumnIndex - 1) + ""));
111
112      addSubtag(new XMLTag(SpreadsheetML.ACTIVE_PANE).setContent(ExcelWorksheet.Pane.UPPER_RIGHT.value()));
113
114
115      XMLTag panesTag = new XMLTag(SpreadsheetML.PANES);
116      addSubtag(panesTag);
117
118      XMLTag paneTag = new XMLTag(SpreadsheetML.PANE);
119      panesTag.addSubtag(paneTag);
120      paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.UPPER_LEFT.value()));
121
122      paneTag = new XMLTag(SpreadsheetML.PANE);
123      panesTag.addSubtag(paneTag);
124      paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.UPPER_RIGHT.value()));
125
126
127      return this;
128   }
129
130   //---------------------------------------------------------------------------
131   /**
132    Freezes the region above and to the left of the selected cell.
133    */
134   public ExcelWorksheetOptions freezePane(int inRowIndex, int inColumnIndex)
135   {
136      if (inRowIndex <= 1)
137      {
138         if (inColumnIndex > 1)
139         {
140            freezePaneLeftOfColumn(inColumnIndex);
141         }
142      }
143      else if (inColumnIndex <= 1)
144      {
145         freezePaneAboveRow(inRowIndex);
146      }
147      else
148      {
149         clearFreezeSettings();
150
151         addSubtag(new XMLTag(SpreadsheetML.FREEZE_PANES));
152
153         addSubtag(new XMLTag(SpreadsheetML.FROZEN_NO_SPLIT));
154
155         addSubtag(new XMLTag(SpreadsheetML.SPLIT_VERTICAL).setContent((inColumnIndex - 1) + ""));
156         addSubtag(new XMLTag(SpreadsheetML.SPLIT_HORIZONTAL).setContent((inRowIndex - 1) + ""));
157
158         addSubtag(new XMLTag(SpreadsheetML.LEFT_COLUMN_RIGHT_PANE).setContent((inColumnIndex - 1) + ""));
159         addSubtag(new XMLTag(SpreadsheetML.TOP_ROW_BOTTOM_PANE).setContent((inRowIndex - 1) + ""));
160
161         addSubtag(new XMLTag(SpreadsheetML.ACTIVE_PANE).setContent(ExcelWorksheet.Pane.LOWER_RIGHT.value()));
162
163
164         XMLTag panesTag = new XMLTag(SpreadsheetML.PANES);
165         addSubtag(panesTag);
166
167         XMLTag paneTag = new XMLTag(SpreadsheetML.PANE);
168         panesTag.addSubtag(paneTag);
169         paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.UPPER_LEFT.value()));
170
171         paneTag = new XMLTag(SpreadsheetML.PANE);
172         panesTag.addSubtag(paneTag);
173         paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.LOWER_LEFT.value()));
174
175         paneTag = new XMLTag(SpreadsheetML.PANE);
176         panesTag.addSubtag(paneTag);
177         paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.UPPER_RIGHT.value()));
178
179         paneTag = new XMLTag(SpreadsheetML.PANE);
180         panesTag.addSubtag(paneTag);
181         paneTag.addSubtag(new XMLTag(SpreadsheetML.NUMBER).setContent(ExcelWorksheet.Pane.LOWER_RIGHT.value()));
182      }
183
184      return this;
185   }
186
187   //---------------------------------------------------------------------------
188   private void clearFreezeSettings()
189   {
190      removeSubtagsByName(SpreadsheetML.FREEZE_PANES);
191      removeSubtagsByName(SpreadsheetML.FROZEN_NO_SPLIT);
192      removeSubtagsByName(SpreadsheetML.SPLIT_HORIZONTAL);
193      removeSubtagsByName(SpreadsheetML.SPLIT_VERTICAL);
194      removeSubtagsByName(SpreadsheetML.TOP_ROW_BOTTOM_PANE);
195      removeSubtagsByName(SpreadsheetML.LEFT_COLUMN_RIGHT_PANE);
196      removeSubtagsByName(SpreadsheetML.ACTIVE_PANE);
197      removeSubtagsByName(SpreadsheetML.PANES);
198   }
199}