예제 #1
0
 private boolean cons(Pagina p, Collection<Pagina> buf) {
   Pagina[] cp = new Pagina[0];
   Collection<Pagina> open, close = new HashSet<Pagina>();
   synchronized (ui.sess.glob.paginae) {
     open = new LinkedList<Pagina>();
     for (Pagina pag : ui.sess.glob.paginae) {
       if (pag.newp == 2) {
         pag.newp = 0;
         pag.fstart = 0;
       }
       open.add(pag);
     }
     for (Pagina pag : ui.sess.glob.pmap.values()) {
       if (pag.newp == 2) {
         pag.newp = 0;
         pag.fstart = 0;
       }
     }
   }
   boolean ret = true;
   while (!open.isEmpty()) {
     Iterator<Pagina> iter = open.iterator();
     Pagina pag = iter.next();
     iter.remove();
     try {
       AButton ad = pag.act();
       if (ad == null) throw (new PaginaException(pag));
       Pagina parent = paginafor(ad.parent);
       if ((pag.newp != 0) && (parent != null) && (parent.newp == 0)) {
         parent.newp = 2;
         parent.fstart = (parent.fstart == 0) ? pag.fstart : Math.min(parent.fstart, pag.fstart);
       }
       if (parent == p) buf.add(pag);
       else if ((parent != null) && !close.contains(parent) && !open.contains(parent))
         open.add(parent);
       close.add(pag);
     } catch (Loading e) {
       ret = false;
     }
   }
   return (ret);
 }
예제 #2
0
 private void use(Pagina r, boolean reset) {
   Collection<Pagina> sub = new LinkedList<Pagina>(), cur = new LinkedList<Pagina>();
   cons(r, sub);
   cons(this.cur, cur);
   if (sub.size() > 0) {
     this.cur = r;
     curoff = 0;
   } else if (r == bk) {
     this.cur = paginafor(this.cur.act().parent);
     curoff = 0;
   } else if (r == next) {
     if ((curoff + 14) >= cur.size()) curoff = 0;
     else curoff += 14;
   } else {
     r.newp = 0;
     use(r);
     if (reset) this.cur = null;
     curoff = 0;
   }
   updlayout();
 }