/[gzz]/gzz/gzz/view/FallbackBinder.java
ViewVC logotype

Diff of /gzz/gzz/view/FallbackBinder.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by benja, Thu Sep 26 11:54:07 2002 UTC revision 1.17 by benja, Sat Sep 28 17:18:11 2002 UTC
# Line 76  public static final String rcsid = "$Id$ Line 76  public static final String rcsid = "$Id$
76    
77      Cell searchStart;      Cell searchStart;
78    
79        /** The current set of marks.
80         *  Each marked cell is represented as a <code>gzz.view.Mark</code>
81         *  object. We don't have support for multiple mark sets yet.
82         */
83        java.util.List marks = new ArrayList();
84    
85        /** The set of all marked cells.
86         *  This is the set of all cells in the <code>Mark</code> objects
87         *  of <code>marks</code>. We need this because going through
88         *  the whole list for all cells on the screen scales badly.
89         *  We want to be able to have big mark sets.
90         */
91        public Set markedCells = new HashSet();
92    
93      public FallbackBinder(Fallback fallback) {      public FallbackBinder(Fallback fallback) {
94          this.fallback = fallback;          this.fallback = fallback;
95      }      }
# Line 91  public static final String rcsid = "$Id$ Line 105  public static final String rcsid = "$Id$
105          if(dbg) pa("Dir: "+dim+" "+dir+" '"+n+"'");          if(dbg) pa("Dir: "+dim+" "+dir+" '"+n+"'");
106          switch(directOp) {          switch(directOp) {
107          case NONE: if(n != null) w.cursor = n; break;          case NONE: if(n != null) w.cursor = n; break;
108          case CONNECT: dims[dim].connect(w.cursor, dir, other.cursor); break;          case CONNECT:
109                if(marks.isEmpty())
110                    dims[dim].connect(w.cursor, dir, other.cursor);
111                else {
112                    c = w.cursor;
113                    for(Iterator i=marks.iterator(); i.hasNext();) {
114                        Mark m = (Mark)i.next();
115                        c.connect(dims[dim], dir, m.cell);
116                        c = m.cell;
117                    }
118                    marks = new ArrayList();
119                    markedCells = new HashSet();
120                }
121                break;
122          case DISCONNECT: dims[dim].disconnect(w.cursor, dir); break;          case DISCONNECT: dims[dim].disconnect(w.cursor, dir); break;
123          case HOP: dims[dim].hop(w.cursor, dir); break;          case HOP: dims[dim].hop(w.cursor, dir); break;
124          case NEW: w.cursor = w.cursor.N(dims[dim], dir); break;          case NEW: w.cursor = w.cursor.N(dims[dim], dir); break;
# Line 122  public static final String rcsid = "$Id$ Line 149  public static final String rcsid = "$Id$
149          directOp = op;          directOp = op;
150      }      }
151    
152        void mark(int win) {
153            Cell c = fallback.windows[win].cursor;
154            boolean there = false;
155    
156            for(Iterator i=marks.iterator(); i.hasNext();) {
157                Mark m = (Mark)i.next();
158                if(m.cell.equals(c)) {
159                    i.remove();
160                    markedCells.remove(m.cell);
161                    there = true;
162                }
163            }
164    
165            if(!there) {
166                marks.add(new Mark(c));
167                markedCells.add(c);
168            }
169        }
170    
171      boolean save() {      boolean save() {
172              try {              try {
173                  gzz.slices.SliceSpace sp = (gzz.slices.SliceSpace)fallback.space;                  gzz.slices.SliceSpace sp = (gzz.slices.SliceSpace)fallback.space;
# Line 236  public static final String rcsid = "$Id$ Line 282  public static final String rcsid = "$Id$
282                  case 'Z': rotate(0, 2, 1); break;                  case 'Z': rotate(0, 2, 1); break;
283    
284                  // Special                  // Special
285                    case 'm': mark(1); break;
286                    case 'M': mark(0); break;
287                  case 'v': changeView(1, 1); break;                  case 'v': changeView(1, 1); break;
288                  case 'V': changeView(0, 1); break;                  case 'V': changeView(0, 1); break;
289                  case 'r':                  case 'r':

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26