001: /*
002: * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
003: *
004: * The program is provided "as is" without any warranty express or
005: * implied, including the warranty of non-infringement and the implied
006: * warranties of merchantibility and fitness for a particular purpose.
007: * IBM will not be liable for any damages suffered by you as a result
008: * of using the Program. In no event will IBM be liable for any
009: * special, indirect or consequential damages or lost profits even if
010: * IBM has been advised of the possibility of their occurrence. IBM
011: * will not be liable for any third party claims against you.
012: */
013: package com.ibm.richtext.styledtext;
014:
015: /**
016: * This interface represents a sequence of TabStops, ordered by position.
017: * The first
018: * TabStop in the ruler can be obtained with the <code>firstTab</code>
019: * method; subsequent TabStops are obtained with the <code>nextTab</code>
020: * method.
021: * <p>
022: * If a TabStop with type <code>TabStop.kAuto</code> is returned, all tabs
023: * after that TabStop will also have type <code>TabStop.kAuto</code>, and
024: * their positions will be multiples of <code>autoSpacing</code>.
025: * @see TabStop
026: */
027: public abstract class MTabRuler {
028: static final String COPYRIGHT = "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
029:
030: /**
031: * Return first tab in the ruler. If an autoTab, it is at position zero, and
032: * all subsequent tabs will be autotabs at autoSpacing intervals.
033: */
034: public abstract TabStop firstTab();
035:
036: /**
037: * Return the first tab in the ruler with fPosition > position. If it is an
038: * autotab, it is at an increment of autoSpacing, and all subsequent tabs will be
039: * autotabs at autoSpacing intervals.
040: */
041: public abstract TabStop nextTab(int position);
042:
043: /**
044: * Return the interval for autotabs.
045: */
046: public abstract int autoSpacing();
047:
048: /**
049: * Compute the hashCode for this ruler. The hashCode is the
050: * hashCode of the first tab multiplied by the autoSpacing
051: * interval.
052: */
053: public final int hashCode() {
054:
055: return firstTab().hashCode() * autoSpacing();
056: }
057:
058: /**
059: * Return true if this tab ruler contains the given tab.
060: * @param tabToTest the tab to search for
061: * @return true if this tab ruler contains <code>tabToTest</code>
062: */
063: public boolean containsTab(TabStop tabToTest) {
064:
065: for (TabStop tab = firstTab(); tab.getType() != TabStop.kAuto; tab = nextTab(tab
066: .getPosition())) {
067: if (tab.getPosition() >= tabToTest.getPosition()) {
068: return tabToTest.equals(tab);
069: }
070: }
071:
072: return false;
073: }
074:
075: /**
076: * Return a tab ruler identical to this ruler, except with the
077: * given tab added. This ruler is not modified.
078: * @param tabToAdd the tab to add to the new tab ruler
079: * @return an MTabRuler resulting from this operation
080: */
081: public MTabRuler addTab(TabStop tabToAdd) {
082:
083: return StandardTabRuler.addTabToRuler(this , tabToAdd);
084: }
085:
086: /**
087: * Return a tab ruler identical to the given ruler, except with the
088: * tab at the given position removed. This ruler is not modified.
089: * @param position the position of the tab to remove from the new tab ruler
090: * @return an MTabRuler resulting from this operation
091: */
092: public MTabRuler removeTab(int position) {
093:
094: return StandardTabRuler.removeTabFromRuler(this , position);
095: }
096:
097: /**
098: * Return a tab ruler identical to this ruler, except with the
099: * tab at position <code>fromPosition</code> moved to position
100: * <code>toPosition</code>. This ruler is not modified.
101: * @param fromPosition the position of the tab to move
102: * @param toPosition the new position of the tab
103: * @return an MTabRuler resulting from this operation
104: */
105: public MTabRuler moveTab(int fromPosition, int toPosition) {
106:
107: return StandardTabRuler.moveTabOnRuler(this, fromPosition,
108: toPosition);
109: }
110: }
|