Lines 151-156
Link Here
|
151 |
case 0: return SimpleAttributeSet.EMPTY; |
151 |
case 0: return SimpleAttributeSet.EMPTY; |
152 |
case 1: return all.get(0); |
152 |
case 1: return all.get(0); |
153 |
case 2: return new Composite2(all.get(0), all.get(1)); |
153 |
case 2: return new Composite2(all.get(0), all.get(1)); |
|
|
154 |
case 3: return new Composite4(all.get(0), all.get(1), all.get(2), null); |
155 |
case 4: return new Composite4(all.get(0), all.get(1), all.get(2), all.get(4)); |
154 |
default: return new BigComposite(all); |
156 |
default: return new BigComposite(all); |
155 |
} |
157 |
} |
156 |
} |
158 |
} |
Lines 517-520
Link Here
|
517 |
return allKeys; |
519 |
return allKeys; |
518 |
} |
520 |
} |
519 |
} // End of Composite2 class |
521 |
} // End of Composite2 class |
|
|
522 |
|
523 |
private static final class Composite4 implements AttributeSet, CompositeAttributeSet { |
524 |
|
525 |
private final AttributeSet delegate0; |
526 |
private final AttributeSet delegate1; |
527 |
private final AttributeSet delegate2; |
528 |
private final AttributeSet delegate3; |
529 |
|
530 |
public Composite4(AttributeSet delegate0, AttributeSet delegate1, AttributeSet delegate2, AttributeSet delegate3) { |
531 |
this.delegate0 = delegate0; |
532 |
this.delegate1 = delegate1; |
533 |
this.delegate2 = delegate2; |
534 |
this.delegate3 = delegate3; |
535 |
} |
536 |
|
537 |
@Override |
538 |
public Collection<? extends AttributeSet> getDelegates() { |
539 |
if (delegate3 == null) { |
540 |
return Arrays.asList(delegate0, delegate1, delegate2); |
541 |
} else { |
542 |
return Arrays.asList(delegate0, delegate1, delegate2, delegate3); |
543 |
} |
544 |
} |
545 |
|
546 |
@Override |
547 |
public boolean isEqual(AttributeSet attr) { |
548 |
return containsAttributes(attr) && attr.containsAttributes(this); |
549 |
} |
550 |
|
551 |
@Override |
552 |
public boolean containsAttributes(AttributeSet attributes) { |
553 |
for(Enumeration<?> keys = attributes.getAttributeNames(); keys.hasMoreElements(); ) { |
554 |
Object key = keys.nextElement(); |
555 |
Object value = attributes.getAttribute(key); |
556 |
|
557 |
if (!containsAttribute(key, value)) { |
558 |
return false; |
559 |
} |
560 |
} |
561 |
|
562 |
return true; |
563 |
} |
564 |
|
565 |
@Override |
566 |
public boolean isDefined(Object key) { |
567 |
return delegate0.isDefined(key) || delegate1.isDefined(key) || delegate2.isDefined(key) || delegate3 != null && delegate3.isDefined(key); |
568 |
} |
569 |
|
570 |
@Override |
571 |
public Object getAttribute(Object key) { |
572 |
if (key instanceof String && key.equals(ATTR_DISMANTLED_STRUCTURE)) { |
573 |
return dismantle(this); |
574 |
} |
575 |
AttributeSet[] set; |
576 |
if (delegate3 == null) { |
577 |
set = new AttributeSet[] {delegate0, delegate1, delegate2}; |
578 |
} else { |
579 |
set = new AttributeSet[] {delegate0, delegate1, delegate2, delegate3}; |
580 |
} |
581 |
|
582 |
for(AttributeSet delegate : set) { |
583 |
AttributeSet current = delegate; |
584 |
while (current != null) { |
585 |
if (current.isDefined(key)) { |
586 |
return current.getAttribute(key); |
587 |
} |
588 |
current = current.getResolveParent(); |
589 |
} |
590 |
} |
591 |
|
592 |
return null; |
593 |
} |
594 |
|
595 |
@Override |
596 |
public AttributeSet getResolveParent() { |
597 |
return null; |
598 |
} |
599 |
|
600 |
@Override |
601 |
public Enumeration<?> getAttributeNames() { |
602 |
return Collections.enumeration(getAllKeys()); |
603 |
} |
604 |
|
605 |
@Override |
606 |
public int getAttributeCount() { |
607 |
return getAllKeys().size(); |
608 |
} |
609 |
|
610 |
@Override |
611 |
public AttributeSet copyAttributes() { |
612 |
if (delegate3 == null) { |
613 |
return createImmutable(delegate0, delegate1, delegate2); |
614 |
} else { |
615 |
return createImmutable(delegate0, delegate1, delegate2, delegate3); |
616 |
} |
617 |
} |
618 |
|
619 |
@Override |
620 |
public boolean containsAttribute(Object key, Object value) { |
621 |
return delegate0.containsAttribute(key, value) || delegate1.containsAttribute(key, value) || |
622 |
delegate2.containsAttribute(key, value) || delegate3 != null && delegate3.containsAttribute(key, value); |
623 |
} |
624 |
|
625 |
private Collection<?> getAllKeys() { |
626 |
HashSet<Object> allKeys = new HashSet<Object>(); |
627 |
AttributeSet[] set; |
628 |
if (delegate3 == null) { |
629 |
set = new AttributeSet[] {delegate0, delegate1, delegate2}; |
630 |
} else { |
631 |
set = new AttributeSet[] {delegate0, delegate1, delegate2, delegate3}; |
632 |
} |
633 |
for(AttributeSet delegate : set) { |
634 |
for(Enumeration<?> keys = delegate.getAttributeNames(); keys.hasMoreElements(); ) { |
635 |
Object key = keys.nextElement(); |
636 |
allKeys.add(key); |
637 |
} |
638 |
} |
639 |
|
640 |
return allKeys; |
641 |
} |
642 |
} // End of Composite4 class |
520 |
} |
643 |
} |