Lines 58-63
Link Here
|
58 |
import java.util.ArrayList; |
58 |
import java.util.ArrayList; |
59 |
import java.util.Arrays; |
59 |
import java.util.Arrays; |
60 |
import java.util.Collection; |
60 |
import java.util.Collection; |
|
|
61 |
import java.util.Collections; |
61 |
import java.util.HashMap; |
62 |
import java.util.HashMap; |
62 |
import java.util.Iterator; |
63 |
import java.util.Iterator; |
63 |
import java.util.List; |
64 |
import java.util.List; |
Lines 181-190
Link Here
|
181 |
|
182 |
|
182 |
public void setMultiViewDescriptions(MultiViewDescription[] descriptions, MultiViewDescription defaultDesc) { |
183 |
public void setMultiViewDescriptions(MultiViewDescription[] descriptions, MultiViewDescription defaultDesc) { |
183 |
assert context == null; |
184 |
assert context == null; |
|
|
185 |
_setMultiViewDescriptions(descriptions, defaultDesc); |
186 |
} |
187 |
|
188 |
private void _setMultiViewDescriptions(MultiViewDescription[] descriptions, MultiViewDescription defaultDesc) { |
189 |
Map<MultiViewDescription, MultiViewElement> createdElements = Collections.emptyMap(); |
184 |
if (model != null) { |
190 |
if (model != null) { |
185 |
model.removeElementSelectionListener(selListener); |
191 |
model.removeElementSelectionListener(selListener); |
|
|
192 |
createdElements = model.getCreatedElementsMap(); |
186 |
} |
193 |
} |
187 |
model = new MultiViewModel(descriptions, defaultDesc, factory); |
194 |
model = new MultiViewModel(descriptions, defaultDesc, factory, createdElements); |
188 |
model.addElementSelectionListener(selListener); |
195 |
model.addElementSelectionListener(selListener); |
189 |
tabs.setModel(model); |
196 |
tabs.setModel(model); |
190 |
} |
197 |
} |
Lines 607-612
Link Here
|
607 |
int currIndexSplit = 0; |
614 |
int currIndexSplit = 0; |
608 |
|
615 |
|
609 |
for (int i = 0; i < descs.length; i++) { |
616 |
for (int i = 0; i < descs.length; i++) { |
|
|
617 |
if( descs[i] instanceof RuntimeMultiViewDescription ) { |
618 |
continue; //don't store multiview elements added at runtime |
619 |
} |
610 |
if (!fromMime) { |
620 |
if (!fromMime) { |
611 |
out.writeObject(descs[i]); |
621 |
out.writeObject(descs[i]); |
612 |
} else { |
622 |
} else { |
Lines 933-942
Link Here
|
933 |
// return model.getMVComponentForDescription(desc); |
943 |
// return model.getMVComponentForDescription(desc); |
934 |
// } |
944 |
// } |
935 |
|
945 |
|
|
|
946 |
@Override |
947 |
public void addMultiViewDescription(MultiViewDescription descr, int position) { |
948 |
if( -1 != splitOrientation ) |
949 |
peerClearSplit(0); |
950 |
MultiViewDescription[] oldDesc = model.getDescriptions(); |
951 |
if( position < 0 || position >= oldDesc.length/2 ) |
952 |
position = oldDesc.length/2; |
953 |
RuntimeMultiViewDescription wrapper = new RuntimeMultiViewDescription(descr, false); |
954 |
RuntimeMultiViewDescription splitWrapper = new RuntimeMultiViewDescription(descr, true); |
955 |
MultiViewDescription[] newDesc = new MultiViewDescription[oldDesc.length+2]; |
956 |
int index = 0; |
957 |
for( int i=0; i<newDesc.length/2; i++ ) { |
958 |
if( i == position ) { |
959 |
newDesc[2*i] = wrapper; |
960 |
newDesc[2*i+1] = splitWrapper; |
961 |
} else { |
962 |
newDesc[2*i] = oldDesc[index++]; |
963 |
newDesc[2*i+1] = oldDesc[index++]; |
964 |
} |
965 |
} |
966 |
_setMultiViewDescriptions(newDesc, null); |
967 |
tabs.changeActiveManually(wrapper); |
968 |
} |
936 |
|
969 |
|
|
|
970 |
@Override |
971 |
public void removeMultiViewDescription(MultiViewDescription descr) { |
972 |
MultiViewDescription[] oldDesc = model.getDescriptions(); |
973 |
int position = -1; |
974 |
for( int i=0; i<oldDesc.length/2; i++ ) { |
975 |
if( oldDesc[2*i] instanceof RuntimeMultiViewDescription ) { |
976 |
RuntimeMultiViewDescription runtimeDesc = (RuntimeMultiViewDescription) oldDesc[2*i]; |
977 |
if( runtimeDesc.delegate.equals(descr) ) { |
978 |
position = i; |
979 |
break; |
937 |
} |
980 |
} |
|
|
981 |
} |
982 |
} |
983 |
if( position < 0 ) |
984 |
return; //trying to remove multiview description that isn't in our model |
938 |
|
985 |
|
|
|
986 |
if( -1 != splitOrientation ) |
987 |
peerClearSplit(0); |
939 |
|
988 |
|
|
|
989 |
MultiViewDescription[] newDesc = new MultiViewDescription[oldDesc.length-2]; |
990 |
int index = 0; |
991 |
for( int i=0; i<oldDesc.length/2; i++ ) { |
992 |
if( i == position ) { |
993 |
continue; |
994 |
} |
995 |
newDesc[index++] = oldDesc[2*i]; |
996 |
newDesc[index++] = oldDesc[2*i+1]; |
997 |
} |
998 |
_setMultiViewDescriptions(newDesc, null); |
999 |
tabs.changeActiveManually(newDesc[0]); |
1000 |
model.setActiveDescription(newDesc[0]); |
1001 |
showCurrentElement(); |
1002 |
} |
1003 |
} |
1004 |
|
1005 |
private static class RuntimeMultiViewDescription implements ContextAwareDescription { |
1006 |
private final MultiViewDescription delegate; |
1007 |
private final boolean split; |
1008 |
|
1009 |
public RuntimeMultiViewDescription( MultiViewDescription delegate, boolean split ) { |
1010 |
this.delegate = delegate; |
1011 |
this.split = split; |
1012 |
} |
1013 |
|
1014 |
@Override |
1015 |
public ContextAwareDescription createContextAwareDescription(Lookup context, boolean isSplitDescription) { |
1016 |
return new RuntimeMultiViewDescription(delegate, isSplitDescription); |
1017 |
} |
1018 |
|
1019 |
@Override |
1020 |
public boolean isSplitDescription() { |
1021 |
return split; |
1022 |
} |
1023 |
|
1024 |
@Override |
1025 |
public int getPersistenceType() { |
1026 |
return delegate.getPersistenceType(); |
1027 |
} |
1028 |
|
1029 |
@Override |
1030 |
public String getDisplayName() { |
1031 |
return delegate.getDisplayName(); |
1032 |
} |
1033 |
|
1034 |
@Override |
1035 |
public Image getIcon() { |
1036 |
return delegate.getIcon(); |
1037 |
} |
1038 |
|
1039 |
@Override |
1040 |
public HelpCtx getHelpCtx() { |
1041 |
return delegate.getHelpCtx(); |
1042 |
} |
1043 |
|
1044 |
@Override |
1045 |
public String preferredID() { |
1046 |
return delegate.preferredID(); |
1047 |
} |
1048 |
|
1049 |
@Override |
1050 |
public MultiViewElement createElement() { |
1051 |
return delegate.createElement(); |
1052 |
} |
1053 |
} |
1054 |
|
940 |
private class AccessTogglesAction extends AbstractAction { |
1055 |
private class AccessTogglesAction extends AbstractAction { |
941 |
|
1056 |
|
942 |
AccessTogglesAction() { |
1057 |
AccessTogglesAction() { |