|
Eclipse Platform 2.0 |
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.eclipse.jface.viewers.Viewer | +--org.eclipse.jface.viewers.ContentViewer | +--org.eclipse.compare.contentmergeviewer.ContentMergeViewer | +--org.eclipse.compare.contentmergeviewer.TextMergeViewer
A text merge viewer uses the RangeDifferencer
to perform a
textual, line-by-line comparison of two (or three) input documents.
It is based on the ContentMergeViewer
and uses TextViewer
s
to implement the ancestor, left, and right content areas.
In the three-way compare case ranges of differing lines are highlighted and framed
with different colors to show whether the difference is an incoming, outgoing, or conflicting change.
The TextMergeViewer
supports the notion of a current "differing range"
and provides toolbar buttons to navigate from one range to the next (or previous).
If there is a current "differing range" and the underlying document is editable
the TextMergeViewer
enables actions in context menu and toolbar to
copy a range from one side to the other side, thereby performing a merge operation.
In addition to a line-by-line comparison the TextMergeViewer
uses a token based compare on differing lines.
The token compare is activated when navigating into
a range of differing lines. At first the lines are selected as a block.
When navigating into this block the token compare shows for every line
the differing token by selecting them.
The TextMergeViewer
's default token compare works on characters separated
by whitespace. If a different strategy is needed (for example, Java tokens in
a Java-aware merge viewer), clients can create their own token
comparators by implementing the ITokenComparator
interface and overriding the
TextMergeViewer.createTokenComparator
factory method).
Access to the TextMergeViewer
's model is by means of an
IMergeViewerContentProvider
. Its get
Content methods must return
either an IDocument
, an IDocumentRange
, or an IStreamContentAccessor
.
In the IDocumentRange
case the TextMergeViewer
works on a subrange of a document. In the IStreamContentAccessor
case
a document is created internally and initialized from the stream.
A TextMergeViewer
can be used as is. However clients may subclass
to customize the behavior. For example a MergeTextViewer
for Java would override
the configureTextViewer
method to configure the TextViewer
for Java source code,
the createTokenComparator
method to create a Java specific tokenizer.
RangeDifferencer
,
TextViewer
,
ITokenComparator
,
IDocumentRange
,
IStreamContentAccessor
Field Summary |
Fields inherited from class org.eclipse.jface.viewers.Viewer |
WIDGET_DATA_KEY |
Constructor Summary | |
TextMergeViewer(Composite parent,
CompareConfiguration configuration)
Creates a text merge viewer under the given parent control. |
|
TextMergeViewer(Composite parent,
int style,
CompareConfiguration configuration)
Creates a text merge viewer under the given parent control. |
Method Summary | |
protected void |
configureTextViewer(TextViewer textViewer)
Configures the passed text viewer. |
protected void |
copy(boolean leftToRight)
Copies the content of one side to the other side. |
protected void |
createControls(Composite composite)
Creates the specific SWT controls for the content areas. |
protected ITokenComparator |
createTokenComparator(String s)
Creates an ITokenComparator which is used to show the
intra line differences. |
protected void |
createToolItems(ToolBarManager tbm)
Creates the two items for copying a difference range from one side to the other and adds them to the given toolbar manager. |
protected boolean |
doSave(Object newInput,
Object oldInput)
Overridden to prevent save confirmation if new input is sub document of current input. |
protected int |
findInsertionPosition(char type,
ICompareInput input)
This method is called if a range of text on one side is copied into an empty subdocument on the other side. |
protected byte[] |
getContents(boolean left)
Returns the contents of the underlying document as an array of bytes. |
protected IDocumentPartitioner |
getDocumentPartitioner()
Returns a document partitioner which is suitable for the underlying content type. |
protected void |
handleDispose(DisposeEvent event)
Called on the viewer disposal. |
protected void |
handleResizeAncestor(int x,
int y,
int width,
int height)
Lays out the ancestor area of the compare viewer. |
protected void |
handleResizeLeftRight(int x,
int y,
int width1,
int centerWidth,
int width2,
int height)
Lays out everything. |
void |
invalidateTextPresentation()
Invalidates the current presentation by invalidating the three text viewers. |
void |
setBackgroundColor(RGB background)
Sets the viewer's background color to the given RGB value. |
void |
setForegroundColor(RGB foreground)
Sets the viewer's foreground color to the given RGB value. |
protected void |
updateContent(Object ancestor,
Object left,
Object right)
Initializes the text viewers of the three content areas with the given input objects. |
protected void |
updateHeader()
Updates the headers of the three areas by querying the content provider for a name and image for the three sides of the input object. |
protected void |
updateToolItems()
Updates the enabled state of the toolbar items. |
Methods inherited from class org.eclipse.compare.contentmergeviewer.ContentMergeViewer |
addPropertyChangeListener, buildControl, getCompareConfiguration, getControl, getResourceBundle, getSelection, getTitle, inputChanged, refresh, removePropertyChangeListener, save, setConfirmSave, setContentProvider, setLeftDirty, setRightDirty, setSelection |
Methods inherited from class org.eclipse.jface.viewers.ContentViewer |
getContentProvider, getInput, getLabelProvider, handleLabelProviderChanged, hookControl, labelProviderChanged, setInput, setLabelProvider |
Methods inherited from class org.eclipse.jface.viewers.Viewer |
addHelpListener, addSelectionChangedListener, fireHelpRequested, fireSelectionChanged, getData, handleHelpRequest, removeHelpListener, removeSelectionChangedListener, scrollDown, scrollUp, setData, setSelection |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public TextMergeViewer(Composite parent, CompareConfiguration configuration)
parent
- the parent controlconfiguration
- the configuration objectpublic TextMergeViewer(Composite parent, int style, CompareConfiguration configuration)
parent
- the parent controlstyle
- SWT style bits for top level composite of this viewerconfiguration
- the configuration objectMethod Detail |
public void setBackgroundColor(RGB background)
null
the system's default background color is used.
background
- the background color or null
to use the system's default background colorpublic void setForegroundColor(RGB foreground)
null
the system's default foreground color is used.
foreground
- the foreground color or null
to use the system's default foreground colorpublic void invalidateTextPresentation()
protected void configureTextViewer(TextViewer textViewer)
TextMergeViewer
implementation of this method does nothing.
Subclasses may reimplement to provide a specific configuration for the text viewer.
textViewer
- the text viewer to configureprotected ITokenComparator createTokenComparator(String s)
ITokenComparator
which is used to show the
intra line differences.
The TextMergeViewer
implementation of this method returns a
tokenizer that breaks a line into words separated by whitespace.
Subclasses may reimplement to provide a specific tokenizer.
protected IDocumentPartitioner getDocumentPartitioner()
IStreamContentAccessor
and an internal document must be created. This
document is initialized with the partitioner returned from this method.
The TextMergeViewer
implementation of this method returns
null
. Subclasses may reimplement to create a partitioner for a
specific content type.
null
protected void handleDispose(DisposeEvent event)
handleDispose
in class ContentMergeViewer
event
- a dispose eventprotected void createControls(Composite composite)
createControls
in class ContentMergeViewer
composite
- the container for the three areasprotected boolean doSave(Object newInput, Object oldInput)
doSave
in class ContentMergeViewer
newInput
- the new input of this viewer, or null
if there is no new inputoldInput
- the old input element, or null
if there was previously no input
true
if saving was successful, or if the user didn't want to save (by pressing 'NO' in the confirmation dialog).protected void updateContent(Object ancestor, Object left, Object right)
updateContent
in class ContentMergeViewer
ancestor
- the input for the ancestor arealeft
- the input for the left arearight
- the input for the right areaprotected int findInsertionPosition(char type, ICompareInput input)
type
- the side for which the insertion position should be determined: 'A' for ancestor, 'L' for left hand side, 'R' for right hand side.input
- the current input object of this viewerprotected byte[] getContents(boolean left)
getContents
in class ContentMergeViewer
left
- if true
the contents of the left side is returned; otherwise the right side
protected final void handleResizeAncestor(int x, int y, int width, int height)
ContentMergeViewer
handleResizeAncestor
in class ContentMergeViewer
x
- the horizontal position of the ancestor area within its containery
- the vertical position of the ancestor area within its containerwidth
- the width of the ancestor areaheight
- the height of the ancestor areaprotected final void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height)
handleResizeLeftRight
in class ContentMergeViewer
x
- the horizontal position of the left area within its containery
- the vertical position of the left and right area within its containerwidth1
- the width of the left areacenterWidth
- the width of the gap between the left and right areaswidth2
- the width of the right areaheight
- the height of the left and right areasprotected void updateHeader()
ContentMergeViewer
This method is called whenever the header must be updated.
Subclasses may extend this method, although this is generally not required.
updateHeader
in class ContentMergeViewer
protected void createToolItems(ToolBarManager tbm)
createToolItems
in class ContentMergeViewer
tbm
- the toolbar manager to contribute toprotected void updateToolItems()
ContentMergeViewer
This method is called whenever the state of the items needs updating.
Subclasses may extend this method, although this is generally not required.
updateToolItems
in class ContentMergeViewer
protected void copy(boolean leftToRight)
ContentMergeViewer
copy
in class ContentMergeViewer
leftToRight
- if true
, the left side is copied to the right side;
if false
, the right side is copied to the left side
|
Eclipse Platform 2.0 |
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |