001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.api.editor.fold;
043:
044: /**
045: * Information about state changes made in a particular fold.
046: * <br>
047: * Zero or more of the state change instances can be part of a particular
048: * {@link FoldHierarchyEvent}.
049: *
050: * <p>
051: * It can be extended to carry additional information specific to particular fold
052: * types.
053: *
054: * @author Miloslav Metelka
055: * @version 1.00
056: */
057:
058: public final class FoldStateChange {
059:
060: private static final int COLLAPSED_CHANGED_BIT = 1;
061:
062: private static final int START_OFFSET_CHANGED_BIT = 2;
063:
064: private static final int END_OFFSET_CHANGED_BIT = 4;
065:
066: private static final int DESCRIPTION_CHANGED_BIT = 8;
067:
068: private Fold fold;
069:
070: private int stateChangeBits;
071:
072: private int originalStartOffset = -1;
073:
074: private int originalEndOffset = -1;
075:
076: /**
077: * Construct state change.
078: * @param fold fold being changed.
079: */
080: FoldStateChange(Fold fold) {
081: this .fold = fold;
082: }
083:
084: /**
085: * Get the fold that has changed its state.
086: */
087: public Fold getFold() {
088: return fold;
089: }
090:
091: /**
092: * Has the collapsed flag of the fold
093: * (returned by <code>getFold()</code>) changed?
094: *
095: * @return true if the collapsed flag has changed in the fold
096: * or false otherwise.
097: */
098: public boolean isCollapsedChanged() {
099: return ((stateChangeBits & COLLAPSED_CHANGED_BIT) != 0);
100: }
101:
102: /**
103: * Has the start offset of the fold
104: * (returned by <code>getFold()</code>) changed?
105: *
106: * @return true if the start offset has changed in the fold
107: * or false otherwise.
108: */
109: public boolean isStartOffsetChanged() {
110: return ((stateChangeBits & START_OFFSET_CHANGED_BIT) != 0);
111: }
112:
113: /**
114: * Return the original start offset of the fold prior
115: * to change to the current start offset that the fold has now.
116: * <br>
117: * @return original start offset or -1 if the start offset was not changed
118: * for the fold.
119: */
120: public int getOriginalStartOffset() {
121: return originalStartOffset;
122: }
123:
124: /**
125: * Has the end offset of the fold
126: * (returned by <code>getFold()</code>) changed?
127: *
128: * @return true if the end offset has changed in the fold
129: * or false otherwise.
130: */
131: public boolean isEndOffsetChanged() {
132: return ((stateChangeBits & END_OFFSET_CHANGED_BIT) != 0);
133: }
134:
135: /**
136: * Return the original end offset of the fold prior
137: * to change to the current end offset that the fold has now.
138: * <br>
139: * @return original end offset or -1 if the end offset was not changed
140: * for the fold.
141: */
142: public int getOriginalEndOffset() {
143: return originalEndOffset;
144: }
145:
146: /**
147: * Has the text description of the collapsed fold
148: * (returned by <code>getFold()</code>) changed?
149: *
150: * @return true if the collapsed text description has changed in the fold
151: * or false otherwise.
152: */
153: public boolean isDescriptionChanged() {
154: return ((stateChangeBits & DESCRIPTION_CHANGED_BIT) != 0);
155: }
156:
157: /**
158: * Mark that collapsed flag has changed
159: * for the fold.
160: */
161: void collapsedChanged() {
162: stateChangeBits |= COLLAPSED_CHANGED_BIT;
163: }
164:
165: /**
166: * Mark that start offset has changed
167: * for the fold.
168: */
169: void startOffsetChanged(int originalStartOffset) {
170: stateChangeBits |= START_OFFSET_CHANGED_BIT;
171: this .originalStartOffset = originalStartOffset;
172: }
173:
174: /**
175: * Subclasses can mark that end offset has changed
176: * for the fold.
177: */
178: void endOffsetChanged(int originalEndOffset) {
179: stateChangeBits |= END_OFFSET_CHANGED_BIT;
180: this .originalEndOffset = originalEndOffset;
181: }
182:
183: /**
184: * Subclasses can mark that collapsed flag has changed
185: * for the fold.
186: */
187: void descriptionChanged() {
188: stateChangeBits |= DESCRIPTION_CHANGED_BIT;
189: }
190:
191: public String toString() {
192: return org.netbeans.modules.editor.fold.FoldUtilitiesImpl
193: .foldStateChangeToString(this);
194: }
195:
196: }
|