Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 160618 Details for
Bug 304356
Painting curves within AbstractCenterPart does not regard scroll offsets within diff and properties tabs
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch to solve update problems for painting curves.
304356.txt (text/plain), 15.39 KB, created by
Alexander Nyßen
on 2010-03-02 09:12:50 EST
(
hide
)
Description:
Patch to solve update problems for painting curves.
Filename:
MIME Type:
Creator:
Alexander Nyßen
Created:
2010-03-02 09:12:50 EST
Size:
15.39 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.emf.compare.ui >Index: src/org/eclipse/emf/compare/ui/viewer/content/part/ModelContentMergeTabItem.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.compare/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewer/content/part/ModelContentMergeTabItem.java,v >retrieving revision 1.7 >diff -u -r1.7 ModelContentMergeTabItem.java >--- src/org/eclipse/emf/compare/ui/viewer/content/part/ModelContentMergeTabItem.java 26 Jan 2009 19:58:24 -0000 1.7 >+++ src/org/eclipse/emf/compare/ui/viewer/content/part/ModelContentMergeTabItem.java 2 Mar 2010 14:09:48 -0000 >@@ -16,8 +16,9 @@ > > // TODO Diff should be made optional. What if a tab doesn't display diff-related information? > /** >- * This class will be used to wrap {@link Item} subclasses such as {@link TreeItem} and {@link TableItem} to >- * allow us to call methods such as <tt>getBounds</tt> without explicitely casting each time we do so. >+ * This class will be used to wrap {@link Item} subclasses such as {@link org.eclipse.swt.widgets.TreeItem} >+ * and {@link org.eclipse.swt.widgets.TableItem} to allow us to call methods such as <tt>getBounds</tt> >+ * without explicitely casting each time we do so. > * <p> > * This wrapper will allow us to maintain a logical structure of the tree : which TreeItem corresponds to > * which difference or visible parent ... >@@ -41,12 +42,12 @@ > /** Holds a reference to the difference represented by the wrapped item. */ > private final DiffElement difference; > >- /** Height of the item's control's header. */ >- private int headerHeight; >- > /** The visible item on which will be drawn UI marquees. */ > private Item visibleItem; > >+ /** Offset to correct scroll effects and table header when painting curve. */ >+ private int verticalOffset; >+ > /** > * Constructs a wrapper around the given item. This constructor specifies the color to use when drawing UI > * components with this item. >@@ -125,7 +126,8 @@ > * Returns the color which should be used when drawing the center curve and other UI colored components > * using this item. > * <p> >- * If no colors are specified for this item, {@link ModelContentMergeViewer#getChangedColor()} will be >+ * If no colors are specified for this item, >+ * {@link org.eclipse.emf.compare.ui.viewer.content.ModelContentMergeViewer#getChangedColor()} will be > * used as default. > * </p> > * >@@ -169,12 +171,12 @@ > } > > /** >- * Returns the height of the item's control header. >+ * Returns the offset needed to compensate scroll effects and table headers when painting curve. > * >- * @return The height of the item's control header. >+ * @return the vertical scrollbar offset > */ >- public int getHeaderHeight() { >- return headerHeight; >+ public int getVerticalOffset() { >+ return verticalOffset; > } > > /** >@@ -207,13 +209,13 @@ > } > > /** >- * Returns the value of the item's control header height. >+ * Specifies offset to compensate scroll effects or table headers when painting curve. > * >- * @param newHeaderHeight >- * The value of the item's control header height. >+ * @param offset >+ * the vertical offset > */ >- public void setHeaderHeight(int newHeaderHeight) { >- headerHeight = newHeaderHeight; >+ public void setVerticalOffset(int offset) { >+ verticalOffset = offset; > } > > /** >@@ -246,4 +248,5 @@ > result += ')'; > return result; > } >+ > } >Index: src/org/eclipse/emf/compare/ui/viewer/content/part/AbstractCenterPart.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.compare/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewer/content/part/AbstractCenterPart.java,v >retrieving revision 1.12 >diff -u -r1.12 AbstractCenterPart.java >--- src/org/eclipse/emf/compare/ui/viewer/content/part/AbstractCenterPart.java 27 Jan 2009 12:40:35 -0000 1.12 >+++ src/org/eclipse/emf/compare/ui/viewer/content/part/AbstractCenterPart.java 2 Mar 2010 14:09:48 -0000 >@@ -126,8 +126,8 @@ > leftY = leftItem.getCurveY() + treeTabBorder; > rightY = rightItem.getCurveY() + treeTabBorder; > } else { >- leftY = leftItem.getCurveY() + leftItem.getHeaderHeight() + treeTabBorder; >- rightY = rightItem.getCurveY() + rightItem.getHeaderHeight() + treeTabBorder; >+ leftY = leftItem.getCurveY() + treeTabBorder + leftItem.getVerticalOffset(); >+ rightY = rightItem.getCurveY() + treeTabBorder + rightItem.getVerticalOffset(); > } > final int lineWidth = leftItem.getCurveSize(); > >Index: src/org/eclipse/emf/compare/ui/viewer/content/part/diff/ModelContentMergeDiffTab.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.compare/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewer/content/part/diff/ModelContentMergeDiffTab.java,v >retrieving revision 1.26 >diff -u -r1.26 ModelContentMergeDiffTab.java >--- src/org/eclipse/emf/compare/ui/viewer/content/part/diff/ModelContentMergeDiffTab.java 19 Jan 2010 10:24:07 -0000 1.26 >+++ src/org/eclipse/emf/compare/ui/viewer/content/part/diff/ModelContentMergeDiffTab.java 2 Mar 2010 14:09:48 -0000 >@@ -58,6 +58,7 @@ > import org.eclipse.swt.graphics.Rectangle; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Item; >+import org.eclipse.swt.widgets.Scrollable; > import org.eclipse.swt.widgets.Tree; > import org.eclipse.swt.widgets.TreeItem; > import org.eclipse.swt.widgets.Widget; >@@ -117,8 +118,8 @@ > parent = parentFolder; > > setUseHashlookup(true); >- setContentProvider(new ModelContentMergeDiffTabContentProvider(AdapterUtils.getAdapterFactory())); >- setLabelProvider(new AdapterFactoryLabelProvider(AdapterUtils.getAdapterFactory())); >+ setContentProvider(createContentProvider()); >+ setLabelProvider(createLabelProvider()); > getTree().addPaintListener(new TreePaintListener()); > > // The following listeners will be used to invalidate the cache of >@@ -142,6 +143,24 @@ > } > > /** >+ * Utility function to create a new label provider. >+ * >+ * @return the new label provider instance. >+ */ >+ private AdapterFactoryLabelProvider createLabelProvider() { >+ return new AdapterFactoryLabelProvider(AdapterUtils.getAdapterFactory()); >+ } >+ >+ /** >+ * Utility function to create a new content provider. >+ * >+ * @return the new content provider instance. >+ */ >+ private ModelContentMergeDiffTabContentProvider createContentProvider() { >+ return new ModelContentMergeDiffTabContentProvider(AdapterUtils.getAdapterFactory()); >+ } >+ >+ /** > * {@inheritDoc} > * > * @see org.eclipse.emf.compare.ui.viewer.content.part.IModelContentMergeViewerTab#dispose() >@@ -250,7 +269,9 @@ > * @see org.eclipse.emf.compare.ui.viewer.content.part.IModelContentMergeViewerTab#redraw() > */ > public void redraw() { >+ clearCaches(); > getTree().redraw(); >+ setupCaches(); > } > > /** >@@ -260,10 +281,9 @@ > */ > @Override > public void refresh(Object element, boolean updateLabels) { >+ clearCaches(); > super.refresh(element, updateLabels); >- mapTreeItems(); >- mapDifferences(); >- mapTreeItemsToUI(); >+ setupCaches(); > } > > /** >@@ -271,17 +291,23 @@ > * > * @see org.eclipse.emf.compare.ui.viewer.content.part.IModelContentMergeViewerTab#setReflectiveInput(java.lang.Object) > */ >+ @SuppressWarnings("unchecked") > public void setReflectiveInput(Object object) { > // We *need* to invalidate the cache here since setInput() would try to > // use it otherwise > clearCaches(); > >- final AdapterFactory adapterFactory = AdapterUtils.getAdapterFactory(); >- setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); >+ // setLabelProvider(createLabelProvider()); // already set in constructor > if (object instanceof EObject) { > setInput(((EObject)object).eResource()); > } else { >- assert object instanceof Resource; >+ // may be invoked with a resourceSet, a list of resources, or a single resource >+ assert object instanceof Resource || object instanceof List; >+ if (object instanceof List) { >+ for (Object item : (List)object) { >+ assert item instanceof Resource; >+ } >+ } > setInput(object); > } > >@@ -307,6 +333,19 @@ > datas.add(EMFCompareEObjectUtils.getRightElement(items.get(i))); > } > } >+ >+ // filter null values >+ final Iterator<EObject> iterator = datas.iterator(); >+ while (iterator.hasNext()) { >+ if (iterator.next() == null) { >+ iterator.remove(); >+ } >+ } >+ >+ // expand those being selected first >+ for (EObject data : datas) { >+ reveal(data); >+ } > setSelection(new StructuredSelection(datas), true); > needsRedraw = true; > redraw(); >@@ -333,9 +372,8 @@ > return res; > else if (res != null) { > // mapped items are disposed >- mapTreeItems(); >- mapDifferences(); >- mapTreeItemsToUI(); >+ clearCaches(); >+ setupCaches(); > // won't call this recursively since it could eventually lead to > // stack overflows > dataToTreeItem.get(element); >@@ -367,16 +405,10 @@ > */ > @Override > protected void inputChanged(Object input, Object oldInput) { >- if (input != oldInput) { >- final TreePath[] expandedTreePaths = getExpandedTreePaths(); >- >- super.inputChanged(input, oldInput); >- >- // Expands all items so that we'll be able to find them back (defeats >- // purpose of lazy loading) >- expandAll(); >- setExpandedTreePaths(expandedTreePaths); >- } >+ // preserve expansion state >+ final TreePath[] expandedTreePaths = getExpandedTreePaths(); >+ super.inputChanged(input, oldInput); >+ setExpandedTreePaths(expandedTreePaths); > } > > /** >@@ -467,6 +499,16 @@ > } else { > item.setCurveSize(1); > } >+ >+ final Scrollable scrollable = (Scrollable)getControl(); >+ int offset = scrollable.getBounds().y + scrollable.getClientArea().height >+ - (scrollable.getClientArea().y + scrollable.getBounds().height); >+ >+ // if horizontal scrollbar is visible, compensate this as well >+ if (scrollable.getClientArea().width < ((TreeItem)item.getActualItem()).getBounds().width) { >+ offset += scrollable.getHorizontalBar().getSize().y; >+ } >+ item.setVerticalOffset(offset); > } > > /** >@@ -665,10 +707,14 @@ > // look for the matchedElement > data = getTree().getItems()[0].getData(); > } >- final Item actualItem = (Item)findItem(data); >- if (actualItem == null) { >+ final Widget actualWidget = findItem(data); >+ if (actualWidget == null) { >+ continue; >+ } >+ if (!(actualWidget instanceof Item)) { > continue; > } >+ final Item actualItem = (Item)actualWidget; > > Item visibleItem = null; > if (partSide == EMFCompareConstants.LEFT && diff instanceof ModelElementChangeRightTarget >@@ -839,8 +885,12 @@ > * > * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getElements(java.lang.Object) > */ >+ @SuppressWarnings("unchecked") > @Override > public Object[] getElements(Object object) { >+ // overwritten to ensure contents of ResourceSets, List<Resource>, and Resource are correclty >+ // returned. >+ Object[] result = null; > if (object instanceof ResourceSet) { > final List<Resource> resources = ((ResourceSet)object).getResources(); > final List<Resource> elements = new ArrayList<Resource>(resources.size()); >@@ -850,9 +900,43 @@ > elements.add(resource); > } > } >- return elements.toArray(); >+ result = elements.toArray(); >+ } else if (object instanceof List) { >+ // we may also display a list of resources >+ result = ((List)object).toArray(); >+ } else if (object instanceof Resource) { >+ // return contents of resource >+ result = ((Resource)object).getContents().toArray(); >+ } else { >+ result = super.getElements(object); >+ } >+ return result; >+ } >+ >+ /** >+ * {@inheritDoc} >+ * >+ * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getChildren(java.lang.Object) >+ */ >+ @Override >+ public Object[] getChildren(Object object) { >+ if (object instanceof Resource) { >+ return ((Resource)object).getContents().toArray(); >+ } >+ return super.getChildren(object); >+ } >+ >+ /** >+ *{@inheritDoc} >+ * >+ * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#hasChildren(java.lang.Object) >+ */ >+ @Override >+ public boolean hasChildren(Object object) { >+ if (object instanceof Resource) { >+ return ((Resource)object).getContents().size() > 0; > } >- return super.getElements(object); >+ return super.hasChildren(object); > } > } > } >Index: src/org/eclipse/emf/compare/ui/viewer/content/part/property/ModelContentMergePropertyTab.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.compare/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewer/content/part/property/ModelContentMergePropertyTab.java,v >retrieving revision 1.15 >diff -u -r1.15 ModelContentMergePropertyTab.java >--- src/org/eclipse/emf/compare/ui/viewer/content/part/property/ModelContentMergePropertyTab.java 19 Nov 2009 14:09:57 -0000 1.15 >+++ src/org/eclipse/emf/compare/ui/viewer/content/part/property/ModelContentMergePropertyTab.java 2 Mar 2010 14:09:48 -0000 >@@ -46,6 +46,7 @@ > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Control; > import org.eclipse.swt.widgets.Item; >+import org.eclipse.swt.widgets.Scrollable; > import org.eclipse.swt.widgets.TableColumn; > import org.eclipse.swt.widgets.TableItem; > import org.eclipse.swt.widgets.Widget; >@@ -207,12 +208,7 @@ > key += '/' + fragments[fragments.length - 1]; > final ModelContentMergeTabItem item = dataToItem.get(key); > if (item != null) { >- if (getSelectedElements().contains(item.getActualItem())) >- item.setCurveSize(2); >- else >- item.setCurveSize(1); >- item.setCurveY(((TableItem)item.getActualItem()).getBounds().y >- + ((TableItem)item.getActualItem()).getBounds().height / 2); >+ computeUIInfoFor(item); > } > return item; > } >@@ -245,12 +241,7 @@ > if (nextTableItem.getBounds().y >= getTable().getClientArea().y > && nextTableItem.getBounds().y <= getTable().getClientArea().y > + getTable().getClientArea().height) { >- if (getSelectedElements().contains(nextTableItem)) >- next.setCurveSize(2); >- else >- next.setCurveSize(1); >- next.setCurveY(nextTableItem.getBounds().y + nextTableItem.getBounds().height / 2); >- next.setHeaderHeight(getTable().getHeaderHeight()); >+ computeUIInfoFor(next); > result.add(next); > } > } >@@ -259,6 +250,35 @@ > } > > /** >+ * This will compute the necessary GUI information for the given {@link ModelContentMergeTabItem}. >+ * >+ * @param item >+ * The item which UI information is to be set. >+ */ >+ private void computeUIInfoFor(ModelContentMergeTabItem item) { >+ final TableItem actualItem = (TableItem)item.getActualItem(); >+ // compute vertical offset >+ final Scrollable scrollable = (Scrollable)getControl(); >+ int offset = scrollable.getBounds().y + scrollable.getClientArea().height >+ - (scrollable.getClientArea().y + scrollable.getBounds().height); >+ >+ // if horizontal scrollbar is visible, compensate this as well >+ if (scrollable.getClientArea().width < actualItem.getBounds().width) { >+ offset += scrollable.getHorizontalBar().getSize().y; >+ } >+ item.setVerticalOffset(offset); >+ >+ // compute curve >+ item.setCurveY(actualItem.getBounds().y + actualItem.getBounds().height / 2); >+ >+ if (getSelectedElements().contains(item.getActualItem())) { >+ item.setCurveSize(2); >+ } else { >+ item.setCurveSize(1); >+ } >+ } >+ >+ /** > * {@inheritDoc} > * > * @see org.eclipse.emf.compare.ui.viewer.content.part.IModelContentMergeViewerTab#redraw()
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 304356
:
160618