Révision 853
tmp/org.txm.synopticeditor.rcp/META-INF/MANIFEST.MF (revision 853) | ||
---|---|---|
11 | 11 |
org.eclipse.jface.text;bundle-version="3.9.2";visibility:=reexport, |
12 | 12 |
org.txm.links.rcp;bundle-version="1.0.0" |
13 | 13 |
Export-Package: org.txm.edition.rcp.editors, |
14 |
org.txm.edition.rcp.editors.ext, |
|
15 | 14 |
org.txm.edition.rcp.handlers, |
16 | 15 |
org.txm.edition.rcp.messages, |
17 | 16 |
org.txm.edition.rcp.preferences |
tmp/org.txm.synopticeditor.rcp/schema/org.txm.edition.rcp.editors.ext.ToolbarButton.exsd (revision 853) | ||
---|---|---|
1 |
<?xml version='1.0' encoding='UTF-8'?> |
|
2 |
<!-- Schema file written by PDE --> |
|
3 |
<schema targetNamespace="org.txm.edition.rcp" xmlns="http://www.w3.org/2001/XMLSchema"> |
|
4 |
<annotation> |
|
5 |
<appinfo> |
|
6 |
<meta.schema plugin="org.txm.edition.rcp" id="org.txm.edition.rcp.editors.ext.ToolbarButton" name="Synoptic Editor bottom button"/> |
|
7 |
</appinfo> |
|
8 |
<documentation> |
|
9 |
Add a button in the SynapticEditor bottom toolbar |
|
10 |
</documentation> |
|
11 |
</annotation> |
|
12 |
|
|
13 |
<element name="extension"> |
|
14 |
<annotation> |
|
15 |
<appinfo> |
|
16 |
<meta.element /> |
|
17 |
</appinfo> |
|
18 |
</annotation> |
|
19 |
<complexType> |
|
20 |
<choice minOccurs="1" maxOccurs="unbounded"> |
|
21 |
<element ref="Button"/> |
|
22 |
</choice> |
|
23 |
<attribute name="point" type="string" use="required"> |
|
24 |
<annotation> |
|
25 |
<documentation> |
|
26 |
|
|
27 |
</documentation> |
|
28 |
</annotation> |
|
29 |
</attribute> |
|
30 |
<attribute name="id" type="string"> |
|
31 |
<annotation> |
|
32 |
<documentation> |
|
33 |
|
|
34 |
</documentation> |
|
35 |
</annotation> |
|
36 |
</attribute> |
|
37 |
<attribute name="name" type="string"> |
|
38 |
<annotation> |
|
39 |
<documentation> |
|
40 |
|
|
41 |
</documentation> |
|
42 |
<appinfo> |
|
43 |
<meta.attribute translatable="true"/> |
|
44 |
</appinfo> |
|
45 |
</annotation> |
|
46 |
</attribute> |
|
47 |
</complexType> |
|
48 |
</element> |
|
49 |
|
|
50 |
<element name="Button"> |
|
51 |
<complexType> |
|
52 |
<attribute name="class" type="string" use="required"> |
|
53 |
<annotation> |
|
54 |
<documentation> |
|
55 |
|
|
56 |
</documentation> |
|
57 |
<appinfo> |
|
58 |
<meta.attribute kind="java" basedOn="org.txm.edition.rcp.editors.ext.ToolbarButton:"/> |
|
59 |
</appinfo> |
|
60 |
</annotation> |
|
61 |
</attribute> |
|
62 |
</complexType> |
|
63 |
</element> |
|
64 |
|
|
65 |
<annotation> |
|
66 |
<appinfo> |
|
67 |
<meta.section type="since"/> |
|
68 |
</appinfo> |
|
69 |
<documentation> |
|
70 |
TXM 0.8.0 |
|
71 |
</documentation> |
|
72 |
</annotation> |
|
73 |
|
|
74 |
<annotation> |
|
75 |
<appinfo> |
|
76 |
<meta.section type="examples"/> |
|
77 |
</appinfo> |
|
78 |
<documentation> |
|
79 |
[Enter extension point usage example here.] |
|
80 |
</documentation> |
|
81 |
</annotation> |
|
82 |
|
|
83 |
<annotation> |
|
84 |
<appinfo> |
|
85 |
<meta.section type="apiinfo"/> |
|
86 |
</appinfo> |
|
87 |
<documentation> |
|
88 |
[Enter API information here.] |
|
89 |
</documentation> |
|
90 |
</annotation> |
|
91 |
|
|
92 |
<annotation> |
|
93 |
<appinfo> |
|
94 |
<meta.section type="implementation"/> |
|
95 |
</appinfo> |
|
96 |
<documentation> |
|
97 |
[Enter information about supplied implementation of this extension point.] |
|
98 |
</documentation> |
|
99 |
</annotation> |
|
100 |
|
|
101 |
|
|
102 |
</schema> |
tmp/org.txm.synopticeditor.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java (revision 853) | ||
---|---|---|
70 | 70 |
import org.eclipse.ui.PlatformUI; |
71 | 71 |
import org.eclipse.ui.commands.ICommandService; |
72 | 72 |
import org.eclipse.ui.handlers.IHandlerService; |
73 |
import org.txm.edition.rcp.editors.ext.ToolbarButton; |
|
74 | 73 |
import org.txm.edition.rcp.messages.SynopticEditionUIMessages; |
75 | 74 |
import org.txm.objects.Edition; |
76 | 75 |
import org.txm.objects.Text; |
... | ... | |
104 | 103 |
private GLComposite controlsArea; |
105 | 104 |
// private GLComposite annotationWidgetsArea; |
106 | 105 |
// private TXMEditorToolBar supplementaryButtonToolbar; |
107 |
private HashSet<ToolbarButton> toolbarButtons = new HashSet<ToolbarButton>(); |
|
108 | 106 |
private ISelectionProvider selProvider; |
109 | 107 |
|
108 |
//TODO finish editor conversion |
|
109 |
public Text getResult() { |
|
110 |
for (EditionPanel panel : editionPanels.values()) { |
|
111 |
return panel.getCurrentText(); |
|
112 |
} |
|
113 |
return null; |
|
114 |
} |
|
115 |
|
|
110 | 116 |
/** |
111 | 117 |
* Instantiates a new txm browser. |
112 | 118 |
*/ |
... | ... | |
173 | 179 |
|
174 | 180 |
public void removeHighlightWordsById(RGBA color, Collection<String> wordids) { |
175 | 181 |
for(EditionPanel panel : editionPanels.values()) { |
176 |
panel.removeHighlightWordsById(color, wordids); |
|
182 |
if (!panel.isDisposed()) { |
|
183 |
panel.removeHighlightWordsById(color, wordids); |
|
184 |
} |
|
177 | 185 |
} |
178 | 186 |
} |
179 | 187 |
|
180 | 188 |
public void removeHighlightWordsById(RGBA color, String wordid) { |
181 | 189 |
for(EditionPanel panel : editionPanels.values()) { |
182 |
panel.removeHighlightWordsById(color, wordid); |
|
190 |
if (!panel.isDisposed()) { |
|
191 |
panel.removeHighlightWordsById(color, wordid); |
|
192 |
} |
|
183 | 193 |
} |
184 | 194 |
} |
185 | 195 |
|
... | ... | |
205 | 215 |
// |
206 | 216 |
// } |
207 | 217 |
|
208 |
public void dispose() { |
|
209 |
if (releaseExtensions()) { |
|
210 |
super.dispose(); |
|
211 |
} |
|
212 |
} |
|
213 |
|
|
214 |
private boolean releaseExtensions() { |
|
215 |
boolean error = false; |
|
216 |
for (ToolbarButton tb : toolbarButtons) { |
|
217 |
try { |
|
218 |
tb.onClose(); |
|
219 |
} catch(Exception e) { |
|
220 |
Log.printStackTrace(e); |
|
221 |
System.out.println("Error while closing editor toolbar button: "+e); |
|
222 |
error = true; |
|
223 |
} |
|
224 |
} |
|
225 |
return !error; |
|
226 |
} |
|
227 |
|
|
228 | 218 |
/** |
229 | 219 |
* First page. |
230 | 220 |
*/ |
... | ... | |
455 | 445 |
lastText.setImage(IImageKeys.getImage(IImageKeys.CTRLFASTFORWARDEND)); |
456 | 446 |
lastText.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_11); |
457 | 447 |
|
458 |
// browse available extension points |
|
459 |
try { |
|
460 |
IConfigurationElement[] config = Platform.getExtensionRegistry() |
|
461 |
.getConfigurationElementsFor(ToolbarButton.class.getName()); |
|
462 |
//Log.warning(Messages.ApplicationWorkbenchAdvisor_15+config.length); |
|
463 |
for (IConfigurationElement e : config) { |
|
464 |
Object o = e.createExecutableExtension("class"); //$NON-NLS-1$ |
|
465 |
if (o instanceof ToolbarButton) { |
|
466 |
ToolbarButton tb = ((ToolbarButton) o); |
|
467 |
ToolItem b = tb.getToolbarButton(getTopToolbar(), this); |
|
468 |
|
|
469 |
toolbarButtons.add(tb); |
|
470 |
} |
|
471 |
} |
|
472 |
} catch (Exception ex) { |
|
473 |
System.out.println(ex.getMessage()); |
|
474 |
Log.printStackTrace(ex); |
|
475 |
} |
|
476 |
|
|
477 | 448 |
page_text.addKeyListener(new KeyListener() { |
478 | 449 |
|
479 | 450 |
@Override |
... | ... | |
665 | 636 |
} |
666 | 637 |
|
667 | 638 |
@Override |
668 |
public void doSave(IProgressMonitor monitor) { |
|
669 |
for (ToolbarButton b : toolbarButtons) { |
|
670 |
b.save(); |
|
671 |
} |
|
672 |
firePropertyChange(IEditorPart.PROP_DIRTY); |
|
673 |
} |
|
674 |
|
|
675 |
@Override |
|
676 | 639 |
public void doSaveAs() { |
677 | 640 |
return; |
678 | 641 |
} |
... | ... | |
680 | 643 |
@Override |
681 | 644 |
public void init(IEditorSite site, IEditorInput input) |
682 | 645 |
throws PartInitException { |
683 |
setSite(site); |
|
684 |
setInput(input); |
|
646 |
super.init(site, input); |
|
685 | 647 |
|
686 | 648 |
corpus = ((SynopticEditorInput) getEditorInput()).getCorpus(); |
687 |
corpus = corpus.getMainCorpus(); |
|
649 |
corpus = corpus.getMainCorpus(); // get the main corpus of the corpus
|
|
688 | 650 |
text = ((SynopticEditorInput) getEditorInput()).getText(); |
689 | 651 |
editionNames = ((SynopticEditorInput) getEditorInput()).getEditions(); |
690 |
|
|
691 |
IPartListener2 pl = new IPartListener2() { |
|
692 |
// ... Other methods |
|
693 |
public void partClosed(IWorkbenchPartReference partRef) { |
|
694 |
if (partRef.getId().equals(ID)) { // called after this.doSave() |
|
695 |
//System.out.println("EVENT partClosed"); |
|
696 |
for (ToolbarButton b : toolbarButtons) { |
|
697 |
if (b.isDirty()) b.discardChanges(); |
|
698 |
} |
|
699 |
} |
|
700 |
} |
|
701 |
|
|
702 |
@Override |
|
703 |
public void partActivated(IWorkbenchPartReference partRef) { } |
|
704 |
|
|
705 |
@Override |
|
706 |
public void partBroughtToTop(IWorkbenchPartReference partRef) { } |
|
707 |
|
|
708 |
@Override |
|
709 |
public void partDeactivated(IWorkbenchPartReference partRef) { } |
|
710 |
|
|
711 |
@Override |
|
712 |
public void partOpened(IWorkbenchPartReference partRef) { } |
|
713 |
|
|
714 |
@Override |
|
715 |
public void partHidden(IWorkbenchPartReference partRef) { } |
|
716 |
|
|
717 |
@Override |
|
718 |
public void partVisible(IWorkbenchPartReference partRef) { } |
|
719 |
|
|
720 |
@Override |
|
721 |
public void partInputChanged(IWorkbenchPartReference partRef) { } |
|
722 |
|
|
723 |
}; |
|
724 |
this.getEditorSite().getPage().addPartListener(pl); |
|
725 | 652 |
} |
726 | 653 |
|
727 |
@Override |
|
728 |
public boolean isDirty() { |
|
729 |
boolean dirty = false; |
|
730 |
for (ToolbarButton b : toolbarButtons) { |
|
731 |
dirty = dirty || b.isDirty(); |
|
732 |
} |
|
733 |
return dirty; |
|
734 |
} |
|
735 |
|
|
736 | 654 |
public boolean isDisposed() { |
737 | 655 |
return editionsArea.isDisposed(); |
738 | 656 |
} |
... | ... | |
753 | 671 |
} |
754 | 672 |
updatePageLabel(); |
755 | 673 |
|
756 |
for (ToolbarButton button : this.toolbarButtons) { |
|
757 |
button.onBackToText(text, line_wordid); |
|
758 |
} |
|
674 |
notifyExtensions("onBackToText"); |
|
759 | 675 |
} |
760 | 676 |
|
761 | 677 |
public void reloadPage() { |
tmp/org.txm.synopticeditor.rcp/plugin.xml (revision 853) | ||
---|---|---|
1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
2 | 2 |
<?eclipse version="3.4"?> |
3 | 3 |
<plugin> |
4 |
<extension-point id="org.txm.edition.rcp.editors.ext.ToolbarButton" name="Synoptic Editor toolbar button" schema="schema/org.txm.edition.rcp.editors.ext.ToolbarButton.exsd"/> |
|
5 | 4 |
<extension |
6 | 5 |
point="org.eclipse.ui.menus"> |
7 | 6 |
<menuContribution |
tmp/org.txm.rcp.feature/feature.xml (revision 853) | ||
---|---|---|
187 | 187 |
version="0.0.0" |
188 | 188 |
optional="true"/> |
189 | 189 |
|
190 |
<includes |
|
191 |
id="org.txm.annotation.kr.feature" |
|
192 |
version="0.0.0"/> |
|
193 |
|
|
190 | 194 |
<requires> |
191 | 195 |
<import plugin="org.eclipse.core.runtime" version="3.10.0" match="greaterOrEqual"/> |
192 | 196 |
<import plugin="org.eclipse.osgi.util" version="3.2.0" match="greaterOrEqual"/> |
tmp/org.txm.analec.rcp/src/visuAnalec/donnees/Corpus.java (revision 853) | ||
---|---|---|
561 | 561 |
* @param newNom |
562 | 562 |
* @return |
563 | 563 |
*/ |
564 |
private void ajouterType(Class<? extends Element> classe, String type) {
|
|
564 |
public void ajouterType(Class<? extends Element> classe, String type) {
|
|
565 | 565 |
structure.ajouterType(classe, type); |
566 | 566 |
if (classe==Unite.class) { |
567 | 567 |
unites.put(type, new ArrayList<Unite>()); |
tmp/org.txm.analec.rcp/src/org/txm/analec/toolbarbutton/StartButton.java (revision 853) | ||
---|---|---|
1 |
package org.txm.analec.toolbarbutton; |
|
2 |
|
|
3 |
import java.util.Arrays; |
|
4 |
|
|
5 |
import org.eclipse.core.runtime.IProgressMonitor; |
|
6 |
import org.eclipse.core.runtime.IStatus; |
|
7 |
import org.eclipse.core.runtime.Status; |
|
8 |
import org.eclipse.swt.SWT; |
|
9 |
import org.eclipse.swt.events.SelectionAdapter; |
|
10 |
import org.eclipse.swt.events.SelectionEvent; |
|
11 |
import org.eclipse.swt.events.SelectionListener; |
|
12 |
import org.eclipse.swt.graphics.Point; |
|
13 |
import org.eclipse.swt.graphics.Rectangle; |
|
14 |
import org.eclipse.swt.widgets.Composite; |
|
15 |
import org.eclipse.swt.widgets.Group; |
|
16 |
import org.eclipse.swt.widgets.Menu; |
|
17 |
import org.eclipse.swt.widgets.MenuItem; |
|
18 |
import org.eclipse.swt.widgets.ToolBar; |
|
19 |
import org.eclipse.swt.widgets.ToolItem; |
|
20 |
import org.txm.analec.AnalecCorpora; |
|
21 |
import org.txm.analec.toolbar.URSAnnotationToolbar; |
|
22 |
import org.txm.analec.toolbar.SchemaToolbar; |
|
23 |
import org.txm.analec.toolbar.UnitToolbar; |
|
24 |
import org.txm.analec.view.ElementPropertiesView; |
|
25 |
import org.txm.analec.view.ElementSearchView; |
|
26 |
import org.txm.edition.rcp.editors.SynopticEditionEditor; |
|
27 |
import org.txm.edition.rcp.editors.ext.ToolbarButton; |
|
28 |
import org.txm.objects.Text; |
|
29 |
import org.txm.rcp.IImageKeys; |
|
30 |
import org.txm.rcp.editors.TXMEditorToolBar; |
|
31 |
import org.txm.rcp.swt.GLComposite; |
|
32 |
import org.txm.rcp.swt.listeners.DropdownSelectionListener; |
|
33 |
import org.txm.rcp.utils.JobHandler; |
|
34 |
import org.txm.rcp.views.corpora.CorporaView; |
|
35 |
import org.txm.searchengine.cqp.corpus.MainCorpus; |
|
36 |
|
|
37 |
import visuAnalec.Message; |
|
38 |
import visuAnalec.Message.TypeMessage; |
|
39 |
import visuAnalec.donnees.Corpus; |
|
40 |
import visuAnalec.donnees.Corpus.CorpusListener; |
|
41 |
import visuAnalec.vue.Vue; |
|
42 |
|
|
43 |
public class StartButton extends ToolbarButton { |
|
44 |
|
|
45 |
private Corpus analecCorpus; |
|
46 |
protected ToolItem openCloseButton; |
|
47 |
protected ToolItem saveButton; |
|
48 |
//protected Button drop_b; |
|
49 |
private MainCorpus corpus; |
|
50 |
|
|
51 |
// listen to corpus structure modification -> enable/disable the button |
|
52 |
// and to new annotations -> set the star modifier to the Corpus view |
|
53 |
protected CorpusListener corpusListener = new CorpusListener() { |
|
54 |
@Override |
|
55 |
public void traiterEvent(final Message e) { |
|
56 |
if (corpus == null) return; |
|
57 |
|
|
58 |
//System.out.println("StartButton.corpusListener.traiterEvent: "+e); |
|
59 |
if (openCloseButton !=null && !openCloseButton.isDisposed()) { |
|
60 |
|
|
61 |
openCloseButton.getDisplay().syncExec(new Runnable() { |
|
62 |
@Override |
|
63 |
public void run() { |
|
64 |
if (e.getType() == TypeMessage.MODIF_STRUCTURE) { |
|
65 |
boolean ready = AnalecCorpora.isAnnotationStructureReady(corpus); |
|
66 |
StartButton.this.setEnabled(ready); |
|
67 |
//if (!ready && utoolbar != null && !utoolbar.isDisposed()) utoolbar.clearHighlight(); |
|
68 |
} |
|
69 |
|
|
70 |
if (e.getType() == TypeMessage.MODIF_ELEMENT) { |
|
71 |
StartButton.this.setEnabled(AnalecCorpora.isAnnotationStructureReady(corpus)); |
|
72 |
if (!corpus.isModified()) { |
|
73 |
corpus.setIsModified(true); // to show the * in corpora view |
|
74 |
updateCorporaView(corpus); |
|
75 |
} |
|
76 |
|
|
77 |
} else if (e.getType() == TypeMessage.CORPUS_SAVED) { |
|
78 |
openCloseButton.setEnabled(false); |
|
79 |
if (corpus.isModified()) { |
|
80 |
corpus.setIsModified(false); // to remove the * in corpora view |
|
81 |
updateCorporaView(corpus); |
|
82 |
} |
|
83 |
} |
|
84 |
} |
|
85 |
}); |
|
86 |
|
|
87 |
if (utoolbar != null && !utoolbar.isDisposed()) { |
|
88 |
|
|
89 |
} |
|
90 |
} |
|
91 |
} |
|
92 |
}; |
|
93 |
private String name; |
|
94 |
protected boolean open = false; |
|
95 |
protected Composite toolbar; |
|
96 |
protected URSAnnotationToolbar utoolbar; |
|
97 |
private Vue vue; |
|
98 |
/** |
|
99 |
* the annotation tool widgets are added here |
|
100 |
*/ |
|
101 |
private Group annotationWidgetGroup; |
|
102 |
|
|
103 |
protected ToolItem createButton(TXMEditorToolBar toolbar, SynopticEditionEditor syneditor) { |
|
104 |
this.editor = syneditor; |
|
105 |
this.toolbar = toolbar; |
|
106 |
|
|
107 |
corpus = editor.getCorpus().getMainCorpus(); |
|
108 |
name = corpus.getName(); |
|
109 |
analecCorpus = AnalecCorpora.getCorpus(name); |
|
110 |
vue = AnalecCorpora.getVue(name); |
|
111 |
analecCorpus.addEventListener(corpusListener); |
|
112 |
|
|
113 |
SelectionListener openCloseSelectionListener = new SelectionListener() { |
|
114 |
@Override |
|
115 |
public void widgetDefaultSelected(SelectionEvent e) {} |
|
116 |
|
|
117 |
@Override |
|
118 |
public void widgetSelected(SelectionEvent e) { |
|
119 |
if (!open) { // if no annotation is started, default annotation mode is Unit |
|
120 |
openToolbar(UnitToolbar.class); |
|
121 |
} |
|
122 |
} |
|
123 |
}; |
|
124 |
String[] modes = {Messages.StartButton_0, Messages.StartButton_1}; |
|
125 |
SelectionListener unitStartSelectionListener = new SelectionListener() { |
|
126 |
|
|
127 |
@Override |
|
128 |
public void widgetSelected(SelectionEvent e) { |
|
129 |
if (open) { |
|
130 |
endCurrentAnnotationMode(); |
|
131 |
} |
|
132 |
openToolbar(UnitToolbar.class); |
|
133 |
|
|
134 |
} |
|
135 |
|
|
136 |
@Override |
|
137 |
public void widgetDefaultSelected(SelectionEvent e) {} |
|
138 |
}; |
|
139 |
SelectionListener schemaStartSelectionListener = new SelectionListener() { |
|
140 |
|
|
141 |
@Override |
|
142 |
public void widgetSelected(SelectionEvent e) { |
|
143 |
if (open) { |
|
144 |
endCurrentAnnotationMode(); |
|
145 |
} |
|
146 |
openToolbar(SchemaToolbar.class); |
|
147 |
} |
|
148 |
|
|
149 |
@Override |
|
150 |
public void widgetDefaultSelected(SelectionEvent e) {} |
|
151 |
}; |
|
152 |
SelectionListener[] modeListeners = {unitStartSelectionListener, schemaStartSelectionListener}; |
|
153 |
annotationWidgetGroup = toolbar.installAlternativesGroup("URS annotation", "Start URS annotation", IImageKeys.PENCIL_OPEN, IImageKeys.PENCIL_CLOSE, true, openCloseSelectionListener, Arrays.asList(modes), Arrays.asList(modeListeners)); |
|
154 |
annotationWidgetGroup.setLayout(GLComposite.createDefaultLayout(1)); |
|
155 |
saveButton = new ToolItem(toolbar, SWT.PUSH); |
|
156 |
saveButton.setImage(IImageKeys.getImage(IImageKeys.PENCIL_SAVE)); |
|
157 |
openCloseButton = toolbar.getGroupButton("URS annotation"); |
|
158 |
|
|
159 |
setButtonToStartMode(); |
|
160 |
|
|
161 |
return openCloseButton; |
|
162 |
} |
|
163 |
|
|
164 |
/** |
|
165 |
* return true is the current annotation mode has been ended |
|
166 |
*/ |
|
167 |
private boolean endCurrentAnnotationMode() { |
|
168 |
|
|
169 |
|
|
170 |
if (utoolbar != null) { |
|
171 |
|
|
172 |
setButtonToStartMode(); |
|
173 |
|
|
174 |
utoolbar.clearHighlight(); |
|
175 |
utoolbar.dispose(); |
|
176 |
|
|
177 |
if (utoolbar.getEditorClickListener() != null) |
|
178 |
editor.getEditionPanel(0).getBrowser().removeMouseListener(utoolbar.getEditorClickListener()); |
|
179 |
if (utoolbar.getMenuListener() != null) |
|
180 |
editor.getEditionPanel(0).getBrowser().getMenu().removeMenuListener(utoolbar.getMenuListener()); |
|
181 |
if (utoolbar.getEditorKeyListener() != null) |
|
182 |
editor.getEditionPanel(0).getBrowser().removeKeyListener(utoolbar.getEditorKeyListener()); |
|
183 |
editor.layout(true); |
|
184 |
utoolbar = null; |
|
185 |
editor.layout(true); |
|
186 |
|
|
187 |
ElementPropertiesView.closeView(); |
|
188 |
ElementSearchView.closeView(); |
|
189 |
|
|
190 |
return true; |
|
191 |
} |
|
192 |
|
|
193 |
return false; |
|
194 |
} |
|
195 |
|
|
196 |
public boolean onClose() { |
|
197 |
|
|
198 |
ElementPropertiesView.closeView(); |
|
199 |
ElementSearchView.closeView(); |
|
200 |
analecCorpus.removeEventListener(corpusListener); |
|
201 |
|
|
202 |
return true; |
|
203 |
} |
|
204 |
|
|
205 |
/** |
|
206 |
* manage the opening of AnnotationToolbar |
|
207 |
* |
|
208 |
* Close the current annotation if any |
|
209 |
* @param clazz |
|
210 |
*/ |
|
211 |
private void openToolbar(Class<? extends URSAnnotationToolbar> clazz) { |
|
212 |
if (utoolbar != null && utoolbar.getClass().equals(clazz)) return; |
|
213 |
if (utoolbar != null) { |
|
214 |
if (endCurrentAnnotationMode()) { |
|
215 |
|
|
216 |
} |
|
217 |
} |
|
218 |
|
|
219 |
if (analecCorpus.getStructure().isVide()) { |
|
220 |
System.out.println(Messages.StartButton_6+name+Messages.StartButton_7); |
|
221 |
return; |
|
222 |
} |
|
223 |
|
|
224 |
setButtonToSaveMode(); |
|
225 |
|
|
226 |
open = true; |
|
227 |
|
|
228 |
if (clazz.equals(UnitToolbar.class)) |
|
229 |
utoolbar = new UnitToolbar(annotationWidgetGroup, StartButton.this, SWT.NONE, editor, analecCorpus, vue); |
|
230 |
else |
|
231 |
utoolbar = new SchemaToolbar(annotationWidgetGroup, StartButton.this, SWT.NONE, editor, analecCorpus, vue); |
|
232 |
|
|
233 |
if (utoolbar.getEditorClickListener() != null) |
|
234 |
editor.getEditionPanel(0).getBrowser().addMouseListener(utoolbar.getEditorClickListener()); |
|
235 |
if (utoolbar.getMenuListener() != null) |
|
236 |
editor.getEditionPanel(0).getBrowser().getMenu().addMenuListener(utoolbar.getMenuListener()); |
|
237 |
if (utoolbar.getEditorKeyListener() != null) |
|
238 |
editor.getEditionPanel(0).getBrowser().addKeyListener(utoolbar.getEditorKeyListener()); |
|
239 |
} |
|
240 |
|
|
241 |
private void setButtonToSaveMode() { |
|
242 |
if (analecCorpus.getStructure().isVide()) { |
|
243 |
System.out.println(Messages.StartButton_9+name+Messages.StartButton_10); |
|
244 |
return; |
|
245 |
} |
|
246 |
|
|
247 |
saveButton.setEnabled(analecCorpus.isModifie()); // enable if corpus is not saved |
|
248 |
open = true; |
|
249 |
} |
|
250 |
|
|
251 |
private void setButtonToStartMode() { |
|
252 |
saveButton.setEnabled(false); |
|
253 |
open = false; |
|
254 |
} |
|
255 |
|
|
256 |
|
|
257 |
public void setEnabled(boolean state) { |
|
258 |
if (openCloseButton != null) openCloseButton.setEnabled(state); |
|
259 |
} |
|
260 |
|
|
261 |
public void updateCorporaView(final MainCorpus corpus) { |
|
262 |
CorporaView.refreshObject(corpus); |
|
263 |
} |
|
264 |
|
|
265 |
@Override |
|
266 |
public void save() { |
|
267 |
if (isDirty() && toolbar != null && !toolbar.isDisposed()) { |
|
268 |
AnalecCorpora.saveCorpus(analecCorpus); |
|
269 |
} |
|
270 |
} |
|
271 |
|
|
272 |
@Override |
|
273 |
public boolean isDirty() { |
|
274 |
return corpus.isModified(); |
|
275 |
} |
|
276 |
|
|
277 |
public void fireIsDirty() { |
|
278 |
editor.fireIsDirty(); |
|
279 |
} |
|
280 |
|
|
281 |
@Override |
|
282 |
public void discardChanges() { |
|
283 |
if (corpus.isModified()) { |
|
284 |
AnalecCorpora.revert(corpus); |
|
285 |
analecCorpus = AnalecCorpora.getCorpus(name); |
|
286 |
vue = AnalecCorpora.getVue(name); |
|
287 |
analecCorpus.addEventListener(corpusListener); |
|
288 |
CorporaView.refreshObject(corpus); |
|
289 |
} |
|
290 |
} |
|
291 |
|
|
292 |
public SynopticEditionEditor getEditor() { |
|
293 |
return editor; |
|
294 |
} |
|
295 |
|
|
296 |
@Override |
|
297 |
public void onBackToText(Text text, String line_wordid) { |
|
298 |
if (this.utoolbar != null && !this.utoolbar.isDisposed()) { |
|
299 |
this.utoolbar.onBackToText(text, line_wordid); |
|
300 |
} |
|
301 |
} |
|
302 |
} |
tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/UnitToolbar.java (revision 853) | ||
---|---|---|
18 | 18 |
import org.eclipse.swt.events.SelectionEvent; |
19 | 19 |
import org.eclipse.swt.events.SelectionListener; |
20 | 20 |
import org.eclipse.swt.layout.GridData; |
21 |
import org.eclipse.swt.layout.GridLayout; |
|
22 | 21 |
import org.eclipse.swt.widgets.Button; |
23 | 22 |
import org.eclipse.swt.widgets.Combo; |
24 | 23 |
import org.eclipse.swt.widgets.Composite; |
... | ... | |
28 | 27 |
import org.eclipse.swt.widgets.Listener; |
29 | 28 |
import org.eclipse.swt.widgets.Menu; |
30 | 29 |
import org.eclipse.swt.widgets.MenuItem; |
30 |
import org.txm.analec.AnalecCorpora; |
|
31 | 31 |
import org.txm.analec.preferences.AnalecPreferences; |
32 |
import org.txm.analec.toolbarbutton.StartButton; |
|
33 | 32 |
import org.txm.analec.view.ElementPropertiesView; |
34 | 33 |
import org.txm.analec.widgets.NavigationField; |
34 |
import org.txm.annotation.rcp.editor.AnnotationExtension; |
|
35 | 35 |
import org.txm.core.preferences.TXMPreferences; |
36 |
import org.txm.core.results.TXMResult; |
|
36 | 37 |
import org.txm.edition.rcp.editors.EditionPanel; |
37 | 38 |
import org.txm.edition.rcp.editors.RGBA; |
38 | 39 |
import org.txm.edition.rcp.editors.SynopticEditionEditor; |
... | ... | |
40 | 41 |
import org.txm.objects.Page; |
41 | 42 |
import org.txm.objects.Text; |
42 | 43 |
import org.txm.rcp.IImageKeys; |
44 |
import org.txm.rcp.editors.TXMEditor; |
|
45 |
import org.txm.rcp.swt.GLComposite; |
|
43 | 46 |
import org.txm.rcp.swt.dialog.ConfirmDialog; |
44 | 47 |
import org.txm.searchengine.cqp.AbstractCqiClient; |
45 | 48 |
import org.txm.searchengine.cqp.CQPSearchEngine; |
... | ... | |
68 | 71 |
private Button createButton; |
69 | 72 |
private Button deleteButton; |
70 | 73 |
private Button editButton; |
71 |
|
|
72 | 74 |
|
75 |
|
|
73 | 76 |
private KeyListener editorKeyListener; |
74 | 77 |
private MouseListener editorMouseListener; |
75 | 78 |
private int fixingAnnotationLimits = 0; |
... | ... | |
91 | 94 |
private Button editLeftButton; |
92 | 95 |
private Button editRightButton; |
93 | 96 |
|
94 |
public UnitToolbar(Composite toolbarsArea, StartButton button, int style, SynopticEditionEditor syneditor, Corpus analecCorpus, Vue vue) { |
|
95 |
super(toolbarsArea, "Schema", button, style); |
|
97 |
public UnitToolbar() { } |
|
96 | 98 |
|
99 |
@Override |
|
100 |
public boolean install(TXMEditor<? extends TXMResult> txmeditor, AnnotationExtension extension, Composite parent) throws Exception { |
|
101 |
super.install(txmeditor, extension, parent); |
|
102 |
|
|
103 |
annotationArea.getLayout().numColumns = 10; |
|
104 |
annotationArea.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); |
|
97 | 105 |
|
98 | 106 |
String color_palette = TXMPreferences.getString(AnalecPreferences.COLOR_PALETTE, AnalecPreferences.PREFERENCES_NODE); //$NON-NLS-1$ |
99 | 107 |
if ("yellow".equals(color_palette)) { //$NON-NLS-1$ |
... | ... | |
110 | 118 |
|
111 | 119 |
} |
112 | 120 |
|
113 |
this.button = button; |
|
114 |
this.editor = syneditor; |
|
121 |
this.button = extension.getSaveButton(); |
|
115 | 122 |
this.maincorpus = this.editor.getCorpus().getMainCorpus(); |
116 | 123 |
try { |
117 | 124 |
maxCorpusPosition = maincorpus.getSize(); |
... | ... | |
119 | 126 |
System.out.println(Messages.UnitToolbar_3+maincorpus+Messages.UnitToolbar_4+e.getLocalizedMessage()); |
120 | 127 |
Log.printStackTrace(e); |
121 | 128 |
} |
122 |
this.analecCorpus = analecCorpus; |
|
123 | 129 |
analecCorpus.addEventListener(this); |
124 |
this.vue = vue; |
|
125 |
this.getLayout().numColumns = 10; |
|
126 |
this.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); |
|
127 | 130 |
|
128 |
l = new Label(this, SWT.NONE); |
|
131 |
|
|
132 |
l = new Label(annotationArea, SWT.NONE); |
|
129 | 133 |
l.setText(Messages.UnitToolbar_5); |
130 | 134 |
l.setToolTipText(Messages.UnitToolbar_6); |
131 | 135 |
l.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER, false, false)); |
132 |
|
|
133 |
typeCombo = new Combo(this, SWT.NONE|SWT.READ_ONLY);
|
|
136 |
|
|
137 |
typeCombo = new Combo(annotationArea, SWT.NONE|SWT.READ_ONLY);
|
|
134 | 138 |
typeCombo.setToolTipText(Messages.UnitToolbar_7); |
135 | 139 |
GridData gdata = new GridData(GridData.CENTER, GridData.CENTER, false, false); |
136 | 140 |
gdata.minimumWidth = 100; |
... | ... | |
155 | 159 |
onIdentifiantComboSelected(event); |
156 | 160 |
} |
157 | 161 |
}); |
158 |
|
|
162 |
|
|
159 | 163 |
//l = new Label(this, SWT.NONE); |
160 |
|
|
161 |
createButton = new Button(this, SWT.PUSH);
|
|
164 |
|
|
165 |
createButton = new Button(annotationArea, SWT.PUSH);
|
|
162 | 166 |
createButton.setText(Messages.UnitToolbar_8); |
163 | 167 |
gdata = new GridData(GridData.CENTER, GridData.CENTER, false, false); |
164 | 168 |
createButton.setLayoutData(gdata); |
... | ... | |
171 | 175 |
onCreateButtonSelected(e); |
172 | 176 |
} |
173 | 177 |
}); |
174 |
|
|
175 |
deleteButton = new Button(this, SWT.PUSH);
|
|
178 |
|
|
179 |
deleteButton = new Button(annotationArea, SWT.PUSH);
|
|
176 | 180 |
gdata = new GridData(GridData.CENTER, GridData.CENTER, false, false); |
177 | 181 |
deleteButton.setLayoutData(gdata); |
178 | 182 |
deleteButton.setImage(IImageKeys.getImage("platform:/plugin/org.txm.rcp/icons/cross.png")); //$NON-NLS-1$ |
... | ... | |
186 | 190 |
} |
187 | 191 |
}); |
188 | 192 |
|
189 |
l = new Label(this, SWT.NONE);
|
|
190 |
|
|
191 |
editLeftButton = new Button(this, SWT.TOGGLE);
|
|
193 |
l = new Label(annotationArea, SWT.NONE);
|
|
194 |
|
|
195 |
editLeftButton = new Button(annotationArea, SWT.TOGGLE);
|
|
192 | 196 |
gdata = new GridData(GridData.CENTER, GridData.CENTER, false, false); |
193 | 197 |
editLeftButton.setLayoutData(gdata); |
194 | 198 |
editLeftButton.setText("[ ↔"); //$NON-NLS-1$ |
... | ... | |
202 | 206 |
} |
203 | 207 |
}); |
204 | 208 |
|
205 |
editButton = new Button(this, SWT.TOGGLE);
|
|
209 |
editButton = new Button(annotationArea, SWT.TOGGLE);
|
|
206 | 210 |
editButton.setText("[↔]"); //$NON-NLS-1$ |
207 | 211 |
editButton.setToolTipText(Messages.UnitToolbar_14); |
208 | 212 |
editButton.addSelectionListener(new SelectionListener() { |
... | ... | |
214 | 218 |
} |
215 | 219 |
}); |
216 | 220 |
|
217 |
editRightButton = new Button(this, SWT.TOGGLE);
|
|
221 |
editRightButton = new Button(annotationArea, SWT.TOGGLE);
|
|
218 | 222 |
editRightButton.setText("↔ ]"); //$NON-NLS-1$ |
219 | 223 |
editRightButton.setToolTipText(Messages.UnitToolbar_16); |
220 | 224 |
editRightButton.addSelectionListener(new SelectionListener() { |
... | ... | |
225 | 229 |
onEditButtonSelected(e,2); |
226 | 230 |
} |
227 | 231 |
}); |
228 |
|
|
229 |
toolbarsArea.layout(); |
|
230 |
toolbarsArea.getParent().layout(true); |
|
231 |
editor.getEditionArea().layout(); |
|
232 | 232 |
|
233 |
annotationArea.layout(); |
|
234 |
annotationArea.getParent().layout(true); |
|
235 |
editor.layout(true); |
|
236 |
|
|
233 | 237 |
reloadUnits(); // reloads types |
234 | 238 |
reloadIdentifiants(); |
235 | 239 |
|
... | ... | |
238 | 242 |
editButton.setEnabled(false); |
239 | 243 |
editLeftButton.setEnabled(false); |
240 | 244 |
editRightButton.setEnabled(false); |
241 |
|
|
245 |
|
|
242 | 246 |
//drop_b.setEnabled(false); |
243 | 247 |
if (typesUnitesAVoir.length > 0) { |
244 | 248 |
typeCombo.select(1); |
... | ... | |
249 | 253 |
|
250 | 254 |
ElementPropertiesView.openView(); |
251 | 255 |
editor.updateWordStyles(); |
256 |
|
|
257 |
return true; |
|
252 | 258 |
} |
253 | 259 |
|
254 | 260 |
public void clearHighlight() { |
255 | 261 |
if (previousSelectedUnitIDS != null) { |
256 |
editor.removeHighlightWordsById(selected_unit_color, previousSelectedUnitIDS); |
|
257 |
editor.removeFontWeightWordsById(previousSelectedUnitIDS); |
|
262 |
if (editor.isDisposed()){ |
|
263 |
editor.removeHighlightWordsById(selected_unit_color, previousSelectedUnitIDS); |
|
264 |
editor.removeFontWeightWordsById(previousSelectedUnitIDS); |
|
265 |
} |
|
258 | 266 |
previousSelectedUnitIDS = null; // release memory |
259 | 267 |
} |
260 | 268 |
if (previousSelectedTypeUnitIDS != null) { |
... | ... | |
262 | 270 |
previousSelectedTypeUnitIDS = null; // release memory |
263 | 271 |
} |
264 | 272 |
|
265 |
createButton.setEnabled(false); |
|
266 |
deleteButton.setEnabled(false); |
|
267 |
editButton.setEnabled(false); |
|
273 |
if (!createButton.isDisposed()) createButton.setEnabled(false);
|
|
274 |
if (!deleteButton.isDisposed()) deleteButton.setEnabled(false);
|
|
275 |
if (!editButton.isDisposed()) editButton.setEnabled(false);
|
|
268 | 276 |
//drop_b.setEnabled(false); |
269 | 277 |
} |
270 | 278 |
|
... | ... | |
368 | 376 |
} |
369 | 377 |
|
370 | 378 |
String[] ids = panel.getWordSelection(); // may be null |
371 |
|
|
379 |
|
|
372 | 380 |
if (fixingAnnotationLimits > 0) { |
373 | 381 |
if (debug) System.out.println(" EDITING ANNOTATION POSITION mode="+fixingAnnotationLimits); //$NON-NLS-1$ |
374 | 382 |
onFixingAnnotationLimits(ids); |
... | ... | |
378 | 386 |
if (ids == null) { // clear selection |
379 | 387 |
if (debug) System.out.println(" NO WORD SELECTION"); //$NON-NLS-1$ |
380 | 388 |
navigationField.setSelectionIndex(0); // clear selection |
381 |
|
|
389 |
|
|
382 | 390 |
return; |
383 | 391 |
} |
384 |
|
|
392 |
|
|
385 | 393 |
org.txm.searchengine.cqp.corpus.Corpus c = UnitToolbar.this.editor.getCorpus(); |
386 | 394 |
|
387 | 395 |
try { |
... | ... | |
445 | 453 |
editRightButton.setSelection(false); |
446 | 454 |
fixingAnnotationLimits = 0; |
447 | 455 |
typeCombo.setEnabled(true); |
448 |
|
|
456 |
|
|
449 | 457 |
navigationField.setEnabled(true); |
450 | 458 |
createButton.setEnabled(true); |
451 | 459 |
deleteButton.setEnabled(true); |
... | ... | |
475 | 483 |
public void keyReleased(KeyEvent e) { |
476 | 484 |
int mask = SWT.CTRL; |
477 | 485 |
if (Util.isMac()) mask = SWT.COMMAND; |
478 |
|
|
486 |
|
|
479 | 487 |
if (((e.stateMask & mask) == mask)) { |
480 | 488 |
if (e.keyCode == SWT.SPACE) { |
481 | 489 |
int i = navigationField.getSelectionIndex(); |
... | ... | |
486 | 494 |
selectPrevious(); |
487 | 495 |
} else if (e.keyCode == SWT.ARROW_RIGHT) { |
488 | 496 |
selectNext(); |
489 |
// } else if (e.keyCode == SWT.PAGE_UP) { // clash with Eclipse CTRL+PAGE_UP binding |
|
490 |
// select10Previous(); |
|
491 |
// } else if (e.keyCode == SWT.PAGE_DOWN) { // clash with Eclipse CTRL+PAGE_DOWN binding |
|
492 |
// select10Next(); |
|
497 |
// } else if (e.keyCode == SWT.PAGE_UP) { // clash with Eclipse CTRL+PAGE_UP binding
|
|
498 |
// select10Previous();
|
|
499 |
// } else if (e.keyCode == SWT.PAGE_DOWN) { // clash with Eclipse CTRL+PAGE_DOWN binding
|
|
500 |
// select10Next();
|
|
493 | 501 |
} else if (e.keyCode == SWT.END) { |
494 | 502 |
selectLast(); |
495 | 503 |
} else if (e.keyCode == SWT.HOME) { |
... | ... | |
640 | 648 |
private void highlightUnite(Unite unite, boolean focus, int clickedWordPosition) { |
641 | 649 |
int start = unite.getDeb(); |
642 | 650 |
int end = unite.getFin(); |
643 |
// System.out.println("HU: start="+start+" end="+end+" -> "+(end-start+1)); |
|
651 |
// System.out.println("HU: start="+start+" end="+end+" -> "+(end-start+1));
|
|
644 | 652 |
int len = end-start+1; |
645 | 653 |
if (len < 0) { |
646 | 654 |
System.out.println("Error: can not highlight unit="+unite+": start > end."); //$NON-NLS-1$ //$NON-NLS-2$ |
... | ... | |
660 | 668 |
} |
661 | 669 |
|
662 | 670 |
String ids[] = CQPSearchEngine.getCqiClient().cpos2Str(maincorpus.getProperty("id").getQualifiedName(), positions); //$NON-NLS-1$ |
663 |
// System.out.println("Highlight words with ids="+Arrays.toString(ids)); |
|
671 |
// System.out.println("Highlight words with ids="+Arrays.toString(ids));
|
|
664 | 672 |
|
665 | 673 |
//positions = new int[]{positions[0]}; |
666 | 674 |
Property text_id = maincorpus.getStructuralUnit("text").getProperty("id"); //$NON-NLS-1$ //$NON-NLS-2$ |
... | ... | |
673 | 681 |
firstWordId = ids[clickedWordPosition]; |
674 | 682 |
firstWordTextId = text_ids[clickedWordPosition]; |
675 | 683 |
} |
676 |
|
|
677 | 684 |
|
685 |
|
|
678 | 686 |
EditionPanel panel = editor.getEditionPanel(0); |
679 | 687 |
Edition e = panel.getEdition(); |
680 | 688 |
org.txm.objects.Corpus corpus = e.getText().getCorpus(); |
681 |
// System.out.println("firstWordTextId="+firstWordTextId); |
|
689 |
// System.out.println("firstWordTextId="+firstWordTextId);
|
|
682 | 690 |
Text newText = corpus.getText(firstWordTextId); // get the new text |
683 |
// System.out.println("positions="+Arrays.toString(positions)); |
|
684 |
// System.out.println("firstWordId="+firstWordId); |
|
685 |
// System.out.println("firstWordTextId="+firstWordTextId); |
|
686 |
// System.out.println("newText="+newText+" e="+e); |
|
691 |
// System.out.println("positions="+Arrays.toString(positions));
|
|
692 |
// System.out.println("firstWordId="+firstWordId);
|
|
693 |
// System.out.println("firstWordTextId="+firstWordTextId);
|
|
694 |
// System.out.println("newText="+newText+" e="+e);
|
|
687 | 695 |
Edition newEdition = newText.getEdition(e.getName()); // get the edition of the new text |
688 | 696 |
Page p = newEdition.getPageForWordId(firstWordId); // find out the page containing the word |
689 |
// System.out.println("page="+p+" current page="+panel.getCurrentPage()); |
|
690 |
|
|
697 |
// System.out.println("page="+p+" current page="+panel.getCurrentPage());
|
|
698 |
|
|
691 | 699 |
previousSelectedUnitIDS = Arrays.asList(ids); |
692 | 700 |
editor.addHighlightWordsById(selected_unit_color, previousSelectedUnitIDS); |
693 | 701 |
editor.addFontWeightWordsById(EditionPanel.WEIGHT_BOLD, previousSelectedUnitIDS); |
... | ... | |
734 | 742 |
setFocusInPropertiesView(); |
735 | 743 |
editor.fireIsDirty(); |
736 | 744 |
} |
737 |
|
|
745 |
|
|
738 | 746 |
if (e != null) editor.updateWordStyles(); |
739 | 747 |
} |
740 | 748 |
|
... | ... | |
758 | 766 |
highlightType(); |
759 | 767 |
} |
760 | 768 |
editor.fireIsDirty(); |
761 |
|
|
769 |
|
|
762 | 770 |
if (e != null) editor.updateWordStyles(); |
763 | 771 |
} |
764 | 772 |
|
... | ... | |
814 | 822 |
previousSelectedUnitIDS = null; // release memory |
815 | 823 |
} |
816 | 824 |
highlightType(); |
817 |
|
|
825 |
|
|
818 | 826 |
clearPropertiesView(); // unload the selected element if any |
819 | 827 |
createButton.setEnabled(false); |
820 | 828 |
deleteButton.setEnabled(false); |
... | ... | |
843 | 851 |
editRightButton.setEnabled(true); |
844 | 852 |
//drop_b.setEnabled(true); |
845 | 853 |
} |
846 |
|
|
854 |
|
|
847 | 855 |
if (e != null) editor.updateWordStyles(); |
848 | 856 |
} |
849 | 857 |
|
... | ... | |
920 | 928 |
|
921 | 929 |
@Override |
922 | 930 |
public void traiterEvent(Message e) { |
923 |
if (this.isDisposed()) return;
|
|
931 |
if (annotationArea.isDisposed()) return;
|
|
924 | 932 |
|
925 | 933 |
if (e.getType().equals(TypeMessage.MODIF_STRUCTURE)) { |
926 | 934 |
//System.out.println("UnitToolbar.traiterEvent: Update toolbar "); |
927 |
UnitToolbar.this.getDisplay().syncExec(new Runnable() { |
|
935 |
UnitToolbar.this.annotationArea.getDisplay().syncExec(new Runnable() {
|
|
928 | 936 |
@Override |
929 | 937 |
public void run() { |
930 | 938 |
setEnable(!analecCorpus.isVide()); |
... | ... | |
933 | 941 |
}); |
934 | 942 |
} else if (e.getType().equals(TypeMessage.MODIF_ELEMENT)) { |
935 | 943 |
//System.out.println("UnitToolbar.traiterEvent: Update toolbar "); |
936 |
UnitToolbar.this.getDisplay().syncExec(new Runnable() { |
|
944 |
UnitToolbar.this.annotationArea.getDisplay().syncExec(new Runnable() {
|
|
937 | 945 |
@Override |
938 | 946 |
public void run() { |
939 | 947 |
//reloadUnits(); |
... | ... | |
989 | 997 |
highlightUnite(unite, true, offset); |
990 | 998 |
|
991 | 999 |
updatePropertiesView(unite); |
992 |
|
|
1000 |
|
|
993 | 1001 |
return true; |
994 | 1002 |
} |
995 | 1003 |
|
996 |
|
|
1004 |
|
|
997 | 1005 |
navigationField.setSelectionIndex(0); |
998 |
|
|
1006 |
|
|
999 | 1007 |
return false; |
1000 | 1008 |
} |
1001 | 1009 |
|
... | ... | |
1065 | 1073 |
|
1066 | 1074 |
@Override |
1067 | 1075 |
public void onBackToText(Text text, String id) { |
1068 |
if (id.length() > 0) |
|
1076 |
if (id.length() > 0) {
|
|
1069 | 1077 |
try { |
1070 | 1078 |
tryHighlightingUnitsWord(id, this.getCQPCorpus()); |
1071 | 1079 |
} catch (CqiClientException e) { |
1072 | 1080 |
// TODO Auto-generated catch block |
1073 | 1081 |
e.printStackTrace(); |
1074 | 1082 |
} |
1083 |
} |
|
1075 | 1084 |
} |
1085 |
|
|
1086 |
@Override |
|
1087 |
public Class<? extends TXMResult> getAnnotatedTXMResultClass() { |
|
1088 |
return Text.class; |
|
1089 |
} |
|
1090 |
|
|
1091 |
@Override |
|
1092 |
public boolean save() { |
|
1093 |
return AnalecCorpora.saveCorpus(analecCorpus); |
|
1094 |
} |
|
1095 |
|
|
1096 |
@Override |
|
1097 |
public String getName() { |
|
1098 |
return "Unit"; |
|
1099 |
} |
|
1100 |
|
|
1101 |
@Override |
|
1102 |
public boolean notifyStartOfCompute() throws Exception { |
|
1103 |
// TODO Auto-generated method stub |
|
1104 |
return false; |
|
1105 |
} |
|
1106 |
|
|
1107 |
@Override |
|
1108 |
public boolean notifyEndOfCompute() throws Exception { |
|
1109 |
// TODO Auto-generated method stub |
|
1110 |
return false; |
|
1111 |
} |
|
1112 |
|
|
1113 |
@Override |
|
1114 |
public void notifyEndOfRefresh() throws Exception { |
|
1115 |
// TODO Auto-generated method stub |
|
1116 |
|
|
1117 |
} |
|
1118 |
|
|
1119 |
@Override |
|
1120 |
public void notifyStartOfCreatePartControl() throws Exception { |
|
1121 |
// TODO Auto-generated method stub |
|
1122 |
|
|
1123 |
} |
|
1124 |
|
|
1125 |
@Override |
|
1126 |
public void notifyStartOfRefresh() throws Exception { |
|
1127 |
// TODO Auto-generated method stub |
|
1128 |
|
|
1129 |
} |
|
1076 | 1130 |
} |
tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/SchemaToolbar.java (revision 853) | ||
---|---|---|
16 | 16 |
import org.eclipse.swt.events.SelectionEvent; |
17 | 17 |
import org.eclipse.swt.events.SelectionListener; |
18 | 18 |
import org.eclipse.swt.layout.GridData; |
19 |
import org.eclipse.swt.layout.GridLayout; |
|
20 | 19 |
import org.eclipse.swt.widgets.Button; |
21 | 20 |
import org.eclipse.swt.widgets.Combo; |
22 | 21 |
import org.eclipse.swt.widgets.Composite; |
... | ... | |
26 | 25 |
import org.eclipse.swt.widgets.Listener; |
27 | 26 |
import org.eclipse.swt.widgets.Menu; |
28 | 27 |
import org.eclipse.swt.widgets.MenuItem; |
29 |
import org.txm.Toolbox; |
|
30 |
import org.txm.analec.preferences.AnalecPreferencePage; |
|
28 |
import org.txm.analec.AnalecCorpora; |
|
31 | 29 |
import org.txm.analec.preferences.AnalecPreferences; |
32 |
import org.txm.analec.toolbarbutton.StartButton; |
|
33 | 30 |
import org.txm.analec.view.ElementPropertiesView; |
34 | 31 |
import org.txm.analec.widgets.NavigationField; |
32 |
import org.txm.annotation.rcp.editor.AnnotationExtension; |
|
35 | 33 |
import org.txm.core.preferences.TXMPreferences; |
34 |
import org.txm.core.results.TXMResult; |
|
36 | 35 |
import org.txm.edition.rcp.editors.EditionPanel; |
37 | 36 |
import org.txm.edition.rcp.editors.RGBA; |
38 | 37 |
import org.txm.edition.rcp.editors.SynopticEditionEditor; |
... | ... | |
40 | 39 |
import org.txm.objects.Page; |
41 | 40 |
import org.txm.objects.Text; |
42 | 41 |
import org.txm.rcp.IImageKeys; |
43 |
import org.txm.rcp.TxmPreferences;
|
|
42 |
import org.txm.rcp.editors.TXMEditor;
|
|
44 | 43 |
import org.txm.rcp.swt.dialog.ConfirmDialog; |
45 | 44 |
import org.txm.searchengine.cqp.CQPSearchEngine; |
46 | 45 |
import org.txm.searchengine.cqp.clientExceptions.CqiClientException; |
... | ... | |
52 | 51 |
|
53 | 52 |
import visuAnalec.Message; |
54 | 53 |
import visuAnalec.Message.TypeMessage; |
55 |
import visuAnalec.donnees.Corpus; |
|
56 | 54 |
import visuAnalec.elements.Element; |
57 | 55 |
import visuAnalec.elements.Schema; |
58 | 56 |
import visuAnalec.elements.Unite; |
59 |
import visuAnalec.vue.Vue; |
|
60 | 57 |
|
61 | 58 |
public class SchemaToolbar extends URSAnnotationToolbar { |
62 | 59 |
|
... | ... | |
86 | 83 |
// private Combo unitTypeCombo; |
87 | 84 |
private NavigationField subNavigationField; |
88 | 85 |
|
89 |
public SchemaToolbar(Composite toolbarsArea, StartButton button, int style, SynopticEditionEditor syneditor, Corpus analecCorpus, Vue vue) { |
|
90 |
super(toolbarsArea, "Unit", button, style); |
|
86 |
public SchemaToolbar() { } |
|
87 |
|
|
88 |
@Override |
|
89 |
public boolean install(TXMEditor<? extends TXMResult> txmeditor, AnnotationExtension extension, Composite parent) throws Exception { |
|
90 |
super.install(txmeditor, extension, parent); |
|
91 | 91 |
|
92 |
annotationArea.getLayout().numColumns = 7; |
|
93 |
annotationArea.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); |
|
94 |
|
|
92 | 95 |
String color_palette = TXMPreferences.getString(AnalecPreferences.COLOR_PALETTE, AnalecPreferences.PREFERENCES_NODE); |
93 | 96 |
if ("yellow".equals(color_palette)) { //$NON-NLS-1$ |
94 | 97 |
this.highlighted_unit_color = URSAnnotationToolbar.lightyellow; |
... | ... | |
104 | 107 |
|
105 | 108 |
} |
106 | 109 |
|
107 |
this.editor = syneditor; |
|
108 |
this.analecCorpus = analecCorpus; |
|
110 |
this.editor = (SynopticEditionEditor) txmeditor; |
|
109 | 111 |
analecCorpus.addEventListener(this); |
110 |
this.vue = vue; |
|
111 |
this.getLayout().numColumns = 7; |
|
112 |
this.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); |
|
113 | 112 |
|
114 |
l = new Label(this, SWT.NONE);
|
|
113 |
l = new Label(annotationArea, SWT.NONE);
|
|
115 | 114 |
l.setText("Type de schéma : "); |
116 | 115 |
l.setToolTipText("Type de schéma"); |
117 | 116 |
|
118 | 117 |
this.maincorpus = this.editor.getCorpus().getMainCorpus(); |
119 |
typeCombo = new Combo(this, SWT.NONE|SWT.READ_ONLY);
|
|
118 |
typeCombo = new Combo(annotationArea, SWT.NONE|SWT.READ_ONLY);
|
|
120 | 119 |
typeCombo.setToolTipText("Type de schéma"); |
121 | 120 |
GridData gdata = new GridData(GridData.FILL, GridData.CENTER, false, false); |
122 | 121 |
gdata.minimumWidth = 100; |
... | ... | |
142 | 141 |
} |
143 | 142 |
}); |
144 | 143 |
|
145 |
deleteSchemaButton = new Button(this, SWT.PUSH);
|
|
144 |
deleteSchemaButton = new Button(annotationArea, SWT.PUSH);
|
|
146 | 145 |
deleteSchemaButton.setImage(IImageKeys.getImage("platform:/plugin/org.txm.rcp/icons/cross.png")); //$NON-NLS-1$ |
147 | 146 |
deleteSchemaButton.setToolTipText("Supprimer le schéma"); |
148 | 147 |
deleteSchemaButton.setEnabled(false); |
... | ... | |
155 | 154 |
} |
156 | 155 |
}); |
157 | 156 |
|
158 |
l = new Label(this, SWT.NONE);
|
|
157 |
l = new Label(annotationArea, SWT.NONE);
|
|
159 | 158 |
l.setText("Unités :"); |
160 | 159 |
subNavigationField = new NavigationField(this, SWT.NONE); |
161 | 160 |
gdata = new GridData(GridData.FILL, GridData.FILL, true, false); |
... | ... | |
167 | 166 |
} |
168 | 167 |
}); |
169 | 168 |
|
170 |
deleteUniteButton = new Button(this, SWT.PUSH);
|
|
169 |
deleteUniteButton = new Button(annotationArea, SWT.PUSH);
|
|
171 | 170 |
deleteUniteButton.setImage(IImageKeys.getImage("platform:/plugin/org.txm.rcp/icons/cross.png")); //$NON-NLS-1$ |
172 | 171 |
deleteUniteButton.setToolTipText("Supprimer l'unité de la chaîne"); |
173 | 172 |
deleteUniteButton.setEnabled(false); |
... | ... | |
180 | 179 |
} |
181 | 180 |
}); |
182 | 181 |
|
183 |
toolbarsArea.layout();
|
|
184 |
toolbarsArea.getParent().layout(true);
|
|
182 |
annotationArea.layout();
|
|
183 |
annotationArea.getParent().layout(true);
|
|
185 | 184 |
editor.getEditionArea().layout(); |
186 | 185 |
|
187 | 186 |
reloadTypeSchemas(); // reloads ids also |
... | ... | |
205 | 204 |
// editButton.setEnabled(false); |
206 | 205 |
editor.updateWordStyles(); |
207 | 206 |
ElementPropertiesView.openView(); |
207 |
|
|
208 |
return true; |
|
208 | 209 |
} |
209 | 210 |
|
210 | 211 |
protected void testIfAwordSpanIsSelected() { |
... | ... | |
244 | 245 |
previousSelectedUniteIDS = null; // release memory |
245 | 246 |
} |
246 | 247 |
|
247 |
deleteUniteButton.setEnabled(false); |
|
248 |
if (!deleteUniteButton.isDisposed()) deleteUniteButton.setEnabled(false);
|
|
248 | 249 |
} |
249 | 250 |
|
250 | 251 |
public MouseListener getEditorClickListener() { |
... | ... | |
777 | 778 |
|
778 | 779 |
@Override |
779 | 780 |
public void traiterEvent(Message e) { |
780 |
if (this.isDisposed()) return;
|
|
781 |
if (annotationArea.isDisposed()) return;
|
|
781 | 782 |
|
782 | 783 |
if (e.getType().equals(TypeMessage.MODIF_STRUCTURE)) { |
783 | 784 |
//System.out.println("SchemaToolbar.traiterEvent: Update toolbar "); |
784 |
SchemaToolbar.this.getDisplay().syncExec(new Runnable() { |
|
785 |
SchemaToolbar.this.annotationArea.getDisplay().syncExec(new Runnable() {
|
|
785 | 786 |
@Override |
786 | 787 |
public void run() { |
787 | 788 |
setEnable(!analecCorpus.isVide()); |
... | ... | |
790 | 791 |
}); |
791 | 792 |
} else if (e.getType().equals(TypeMessage.MODIF_ELEMENT)) { |
792 | 793 |
//System.out.println("SchemaToolbar.traiterEvent: Update toolbar "); |
793 |
SchemaToolbar.this.getDisplay().syncExec(new Runnable() { |
|
794 |
SchemaToolbar.this.annotationArea.getDisplay().syncExec(new Runnable() {
|
|
794 | 795 |
@Override |
795 | 796 |
public void run() { |
796 | 797 |
//reloadUnits(); |
... | ... | |
930 | 931 |
// TODO Auto-generated method stub |
931 | 932 |
|
932 | 933 |
} |
934 |
|
|
935 |
@Override |
|
936 |
public Class<? extends TXMResult> getAnnotatedTXMResultClass() { |
|
937 |
return Text.class; |
|
938 |
} |
|
939 |
|
|
940 |
@Override |
|
941 |
public boolean save() { |
|
942 |
return AnalecCorpora.saveCorpus(analecCorpus); |
|
943 |
} |
|
944 |
|
|
945 |
@Override |
|
946 |
public String getName() { |
|
947 |
return "Schema annotation"; |
|
948 |
} |
|
949 |
|
|
950 |
@Override |
|
951 |
public boolean notifyStartOfCompute() throws Exception { |
|
952 |
// TODO Auto-generated method stub |
|
953 |
return false; |
|
954 |
} |
|
955 |
|
|
956 |
@Override |
|
957 |
public boolean notifyEndOfCompute() throws Exception { |
|
958 |
// TODO Auto-generated method stub |
|
959 |
return false; |
|
960 |
} |
|
961 |
|
|
962 |
@Override |
|
963 |
public void notifyEndOfRefresh() throws Exception { |
|
964 |
// TODO Auto-generated method stub |
|
965 |
|
|
966 |
} |
|
967 |
|
|
968 |
@Override |
|
969 |
public void notifyStartOfCreatePartControl() throws Exception { |
|
970 |
// TODO Auto-generated method stub |
|
971 |
|
|
972 |
} |
|
973 |
|
|
974 |
@Override |
|
975 |
public void notifyStartOfRefresh() throws Exception { |
|
976 |
// TODO Auto-generated method stub |
|
977 |
|
|
978 |
} |
|
933 | 979 |
} |
tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/URSAnnotationToolbar.java (revision 853) | ||
---|---|---|
3 | 3 |
import java.util.List; |
4 | 4 |
|
5 | 5 |
import org.apache.commons.lang.StringUtils; |
6 |
import org.eclipse.swt.SWT; |
|
6 | 7 |
import org.eclipse.swt.events.KeyListener; |
7 | 8 |
import org.eclipse.swt.events.MenuListener; |
8 | 9 |
import org.eclipse.swt.events.MouseListener; |
9 | 10 |
import org.eclipse.swt.widgets.Composite; |
10 |
import org.txm.analec.toolbarbutton.StartButton; |
|
11 |
import org.eclipse.swt.widgets.ToolItem; |
|
12 |
import org.txm.analec.AnalecCorpora; |
|
13 |
import org.txm.analec.toolbarbutton.Messages; |
|
11 | 14 |
import org.txm.analec.view.ElementPropertiesView; |
15 |
import org.txm.analec.view.ElementSearchView; |
|
16 |
import org.txm.annotation.rcp.editor.AnnotationArea; |
|
17 |
import org.txm.annotation.rcp.editor.AnnotationExtension; |
|
18 |
import org.txm.core.results.TXMResult; |
|
12 | 19 |
import org.txm.edition.rcp.editors.EditionPanel; |
13 | 20 |
import org.txm.edition.rcp.editors.RGBA; |
14 | 21 |
import org.txm.edition.rcp.editors.SynopticEditionEditor; |
15 | 22 |
import org.txm.objects.Text; |
23 |
import org.txm.rcp.editors.TXMEditor; |
|
16 | 24 |
import org.txm.rcp.swt.GLComposite; |
25 |
import org.txm.rcp.views.corpora.CorporaView; |
|
17 | 26 |
import org.txm.searchengine.cqp.clientExceptions.CqiClientException; |
18 | 27 |
import org.txm.searchengine.cqp.corpus.MainCorpus; |
19 | 28 |
import org.txm.searchengine.cqp.corpus.QueryResult; |
... | ... | |
21 | 30 |
import org.txm.searchengine.cqp.corpus.query.Query; |
22 | 31 |
import org.txm.utils.logger.Log; |
23 | 32 |
|
33 |
import visuAnalec.Message; |
|
34 |
import visuAnalec.Message.TypeMessage; |
|
24 | 35 |
import visuAnalec.donnees.Corpus; |
25 | 36 |
import visuAnalec.donnees.Corpus.CorpusListener; |
26 | 37 |
import visuAnalec.elements.Element; |
38 |
import visuAnalec.elements.Unite; |
|
27 | 39 |
import visuAnalec.vue.Vue; |
28 | 40 |
|
29 |
public abstract class URSAnnotationToolbar extends GLComposite implements CorpusListener {
|
|
30 |
|
|
41 |
public abstract class URSAnnotationToolbar extends AnnotationArea implements CorpusListener {
|
|
42 |
|
|
31 | 43 |
//see https://groupes.renater.fr/wiki/txm-info/public/specs_charte_graphique |
32 | 44 |
public static final RGBA blue = new RGBA(152, 159, 201, 0.7f); |
33 | 45 |
public static final RGBA lightblue = new RGBA(185, 193, 239, 0.4f); |
... | ... | |
35 | 47 |
public static final RGBA lightgreen = new RGBA(206, 240, 83, 0.5f); |
36 | 48 |
public static final RGBA yellow = new RGBA(255,255,50, 1f); |
37 | 49 |
public static final RGBA lightyellow = new RGBA(255,255,176, 0.5f); |
38 |
|
|
50 |
|
|
39 | 51 |
protected Corpus analecCorpus; |
40 | 52 |
protected Vue vue; |
41 | 53 |
protected MainCorpus maincorpus; |
42 | 54 |
protected SynopticEditionEditor editor; |
43 |
protected StartButton button; |
|
44 |
|
|
45 |
public URSAnnotationToolbar(Composite parent, String name, StartButton button, int style) { |
|
46 |
super(parent, style, name); |
|
47 |
this.button = button; |
|
48 |
} |
|
49 |
|
|
55 |
protected ToolItem button; |
|
56 |
|
|
57 |
public URSAnnotationToolbar() { } |
|
58 |
|
|
50 | 59 |
public abstract void selectFirst(); |
51 | 60 |
public abstract void selectPrevious(); |
52 | 61 |
public abstract void select10Previous(); |
... | ... | |
55 | 64 |
public abstract void selectLast(); |
56 | 65 |
public abstract void select(Element currentElement); |
57 | 66 |
|
67 |
@Override |
|
68 |
public boolean install(TXMEditor<? extends TXMResult> txmeditor, AnnotationExtension extension, Composite parent) throws Exception { |
|
69 |
|
|
70 |
this.editor = (SynopticEditionEditor) txmeditor; |
|
71 |
this.maincorpus = (MainCorpus) this.editor.getCorpus(); |
|
72 |
analecCorpus = AnalecCorpora.getCorpus(maincorpus.getName()); |
|
73 |
vue = AnalecCorpora.getVue(maincorpus.getName()); |
|
74 |
|
|
75 |
annotationArea = new GLComposite(parent, SWT.NONE, "Unit annotation"); |
|
76 |
|
|
77 |
if (getEditorClickListener() != null) |
|
78 |
editor.getEditionPanel(0).getBrowser().addMouseListener(getEditorClickListener()); |
|
79 |
if (getMenuListener() != null) |
|
80 |
editor.getEditionPanel(0).getBrowser().getMenu().addMenuListener(getMenuListener()); |
|
81 |
if (getEditorKeyListener() != null) |
|
82 |
editor.getEditionPanel(0).getBrowser().addKeyListener(getEditorKeyListener()); |
|
83 |
|
|
84 |
if (analecCorpus.getStructure().isVide()) { |
|
85 |
analecCorpus.ajouterType(Unite.class, "Entity"); |
|
86 |
analecCorpus.ajouterProp(Unite.class, "Entity", "Property"); |
|
87 |
} |
|
88 |
|
|
89 |
button = extension.getSaveButton(); |
|
90 |
button.setEnabled(analecCorpus.isModifie()); |
|
91 |
return true; |
|
92 |
} |
|
93 |
|
|
94 |
|
|
58 | 95 |
public Corpus getAnalecCorpus() { |
59 | 96 |
return analecCorpus; |
60 | 97 |
} |
61 |
|
|
98 |
|
|
62 | 99 |
protected void updatePropertiesView(Element element) { |
63 | 100 |
ElementPropertiesView view = ElementPropertiesView.openView(); |
64 | 101 |
if (view != null) view.loadElement(this.maincorpus, this.analecCorpus, element, this); |
65 | 102 |
} |
66 |
|
|
103 |
|
|
104 |
public boolean isDirty() { |
|
105 |
if (analecCorpus != null) return analecCorpus.isModifie(); |
|
106 |
return false; |
|
107 |
} |
|
108 |
|
|
109 |
public boolean isDisposed() { |
|
110 |
return annotationArea == null || annotationArea.isDisposed(); |
|
111 |
} |
|
112 |
|
|
67 | 113 |
protected void clearPropertiesView() { |
68 | 114 |
ElementPropertiesView view = ElementPropertiesView.openView(); |
69 | 115 |
if (view != null) { |
70 | 116 |
view.unloadElement(this.analecCorpus, this); |
71 | 117 |
} |
72 | 118 |
} |
73 |
|
|
119 |
|
|
74 | 120 |
protected static void setFocusInPropertiesView() { |
75 | 121 |
ElementPropertiesView view = ElementPropertiesView.openView(); |
76 | 122 |
if (view != null) { |
77 | 123 |
view.setFocusOnProperty(); |
78 | 124 |
} |
79 | 125 |
} |
80 |
|
|
126 |
|
|
81 | 127 |
protected int[] getSelectionStartEndWordPositions() { |
82 | 128 |
EditionPanel panel = this.editor.getEditionPanel(0); |
83 | 129 |
String text_name = panel.getEdition().getText().getName(); |
84 | 130 |
String[] sel = panel.getWordSelection(); |
85 | 131 |
if (sel == null) { |
86 |
Log.info(Messages.AnnotationToolbar_0);
|
|
132 |
Log.info("Error: no word selection");
|
|
87 | 133 |
return null; |
88 | 134 |
} |
89 | 135 |
//System.out.println("Selection="+sel); |
... | ... | |
94 | 140 |
} |
95 | 141 |
return null; |
96 | 142 |
} |
97 |
|
|
143 |
|
|
98 | 144 |
protected int[] getStartEndWordPositions(MainCorpus c, String[] ids, String text_name) throws CqiClientException { |
99 | 145 |
//System.out.println("IDS="+Arrays.toString(ids)); |
100 | 146 |
Query query = new Query("[_.text_id=\""+text_name+"\" & id=\""+StringUtils.join(ids, "|")+"\"]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ |
... | ... | |
109 | 155 |
// |
110 | 156 |
// } |
111 | 157 |
if (matches.size() == 0) { |
112 |
System.out.println(Messages.AnnotationToolbar_6+matches.size()+Messages.AnnotationToolbar_7+query);
|
|
158 |
System.out.println("Error: no match for query="+query);
|
|
113 | 159 |
return null; |
114 | 160 |
} else { |
115 | 161 |
start = matches.get(0).getStart(); |
... | ... | |
118 | 164 |
result.drop(); |
119 | 165 |
return new int[]{start, end}; |
Formats disponibles : Unified diff