Καταχώρηση ενεργειών λειτουργίας επεξεργασίας

Το πλαίσιο της λειτουργίας επεξεργασίας κειμένου παρέχει πολλές βοηθητικές κλάσεις για την παρουσίαση και ενημέρωση του πρωτογενή κώδικα και του κώδικα κειμένου.  Στη συνέχεια θα ασχοληθούμε με τον πάγκο εργασίας όπου η λειτουργία επεξεργασίας αποτελεί μόνο ένα τμήμα.  Πώς αλληλεπιδρά η λειτουργία επεξεργασίας με άλλες λειτουργίες του πάγκου εργασίας, όπως τα μενού περιβάλλοντος, οι γραμμές μενού και οι γραμμές εργαλείων;

Ενέργειες της γραμμής μενού λειτουργίας επεξεργασίας

Για να κατανοήσετε τον τρόπο καταχώρησης των λειτουργιών επεξεργασίας με τον πάγκο εργασίας και τον τρόπο παροχής ενεργειών για τη γραμμή μενού του πάγκου εργασίας, ανατρέξτε στην ενότητα org.eclipse.ui.editors.  Δεν θα επαναδιατυπώσουμε εδώ αυτές τις πληροφορίες.  Θα ρίξουμε μόνο μια γρήγορη ματιά στον κώδικα όπου η λειτουργία επεξεργασίας του παραδείγματος Java καταχωρεί τη λειτουργία επεξεργασίας.

<extension
      point="org.eclipse.ui.editors">
<editor
         name="%javaEditorName"
         icon="icons/obj16/java.png"
         extensions="jav"
         contributorClass="org.eclipse.ui.examples.javaeditor.JavaActionContributor"
         class="org.eclipse.ui.examples.javaeditor.JavaEditor"
         id="org.eclipse.ui.JavaEditor">
   </editor>
   </extension>

Η κλάση JavaActionContributor συνεισφέρει τις ενέργειες της γραμμής μενού του πάγκου εργασίας.  Υλοποιεί ενέργειες που έχουν τοποθετηθεί στο μενού Τροποποίηση του πάγκου εργασίας και τη γραμμή εργαλείων.

public JavaActionContributor() {
	super();
	fContentAssistProposal= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistProposal."); //$NON-NLS-1$
	...
	fContentAssistTip= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistTip."); //$NON-NLS-1$
	...
	fTogglePresentation= new PresentationAction();
}

Οι πρώτες δύο ενέργειες ορίζονται ως ενέργειες λειτουργίας επεξεργασίας κειμένου μεταβλητής εμβέλειας. Η βασική αρχή μοιάζει με τις ενέργειες μεταβλητής εμβέλειας που παρέχει ο πάγκος εργασίας. Οι ενέργειες λειτουργίας επεξεργασίας κειμένου μεταβλητής εμβέλειας αντιπροσωπεύουν καταχωρήσεις μενού τις οποίες η διεργασία συνεισφοράς περιεχομένου ενεργειών συνδέει δυναμικά με αντίστοιχες ενέργειες που παρέχει η ενεργή λειτουργία επεξεργασίας. Όταν αλλάζει η ενεργή λειτουργία επεξεργασίας, αλλάζει επίσης η ενέργεια με την οποία έχει συνδεθεί μια ενέργεια λειτουργίας επεξεργασίας κειμένου μεταβλητής εμβέλειας. Το ακόλουθο τμήμα κώδικα δείχνει ότι η διεργασία συνεισφοράς περιεχομένου της ενέργειας λειτουργίας επεξεργασίας βρίσκει την αντίστοιχη ενέργεια υποβάλλοντας ερώτημα στη λειτουργία επεξεργασίας για μια ενέργεια συγκεκριμένης ταυτότητας:

protected final IAction getAction(ITextEditor editor, String actionId) {
return (editor == null ? null : editor.getAction(actionId));
} public void setActiveEditor(IEditorPart part) {
super.setActiveEditor(part);
ITextEditor editor= null;
if (part instanceof ITextEditor)
editor= (ITextEditor) part;
fContentAssistProposal.setAction(getAction(editor, "ContentAssistProposal"));
fContentAssistTip.setAction(getAction(editor, "ContentAssistTip"));
fTogglePresentation.setEditor(editor);
fTogglePresentation.update();
}

Η ταυτότητα πρέπει να είναι η ίδια με εκείνη όπου έχει καταχωρηθεί η ενέργεια με τη λειτουργία επεξεργασίας, όπως δίνεται εδώ για την κλάση JavaTextEditor. (Ανατρέξτε επίσης στην επόμενη ενότητα.):

protected void createActions() {
	super.createActions();
		
	IAction a= new TextOperationAction(JavaEditorMessages.getResourceBundle(), "ContentAssistProposal.", this, ISourceViewer.CONTENTASSIST_PROPOSALS); //$NON-NLS-1$
	a.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
	setAction("ContentAssistProposal", a); 
		
	a= new TextOperationAction(JavaEditorMessages.getResourceBundle(), "ContentAssistTip.", this, ISourceViewer.CONTENTASSIST_CONTEXT_INFORMATION);  //$NON-NLS-1$
	a.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_CONTEXT_INFORMATION);
	setAction("ContentAssistTip", a); 
}

Η τρίτη ενέργεια στη διεργασία συνεισφοράς περιεχομένου είναι μια υπαρκτή ενέργεια που έχει προστεθεί στη γραμμή εργαλείων του πάγκου εργασίας.  Εναλλάσσει την κατάσταση της λειτουργίας επεξεργασίας από την παρουσίαση της περιοχής τιμών που έχει επισημανθεί (όπως ορίζεται από τη λειτουργία διάρθρωσης περιεχομένου του παραδείγματος Java) στην παρουσίαση ολόκληρου του αρχείου.  Αυτή η ενέργεια εμφανίζεται μόνο στη γραμμή εργαλείων.

Μενού περιβάλλοντος λειτουργίας επεξεργασίας

Η δημιουργία και διαχείριση των μενού περιεχομένων της λειτουργίας επεξεργασίας γίνεται στις κλάσεις AbstractTextEditor και TextEditor.

Η μέθοδος createActions χρησιμοποιείται για την καταχώρηση ενεργειών στη λειτουργία επεξεργασίας.  Αυτό συμπεριλαμβάνει ενέργειες κατάλληλες για τα μενού περιβάλλοντος της λειτουργίας επεξεργασίας. ή οποιαδήποτε ενέργεια συνεισφέρεται σε ορισμούς επεκτάσεων  Στη λειτουργία επεξεργασίας του παραδείγματος Java, δημιουργούνται μόνο οι ενέργειες που συνδέονται με τις ενέργειες μεταβλητής εμβέλειας.  Ωστόσο, στη λειτουργία επεξεργασίας του παραδείγματος Java μεταβιβάζονται επίσης οι ενέργειες που δημιουργεί η κλάση TextEditor και οι υπερκλάσεις της.  Αυτές οι ενέργειες μπορούν να χρησιμοποιηθούν στα μενού περιβάλλοντος της λειτουργίας επεξεργασίας.

Στην κλάση TextEditor η μέθοδος editorContextMenuAboutToShow χρησιμοποιείται στο πλαίσιο και επιτρέπει στις λειτουργίες επεξεργασίας να προσθέσουν ενέργειες στο μενού περιβάλλοντος για την περιοχή επεξεργασίας.  Μπορείτε να χρησιμοποιήσετε μια διαδρομή μενού για να αποφασίσετε ακριβώς που θα πρέπει να εμφανιστεί η ενέργειά σας.  Οι έγκυρες διαδρομές μενού μέσα στο μενού περιβάλλοντος της λειτουργίας επεξεργασίας ορίζονται στην υλοποίηση αυτής της μεθόδου στην κλάση AbstractTextEditor.

Υπάρχουν πολλοί τρόποι για να προσθέσετε μια ενέργεια σε αυτό το μενού.  Ο πρώτος τρόπος είναι η προσθήκη μιας ενέργειας χρησιμοποιώντας μόνο την ταυτότητα με την οποία έχει καταχωρηθεί με τη λειτουργία επεξεργασίας.  Για παράδειγμα, η κλάση JavaTextEditor προσθέτει την ενέργεια αυτόματης συμπλήρωσης περιεχομένου στο μενού όταν κληθεί αυτή η μέθοδος.  Οι ενέργειες δε θα εμφανιστούν στο μενού όταν δεν έχει καταχωρηθεί κάποια ενέργεια με την ταυτότητα που χρησιμοποιείται.

public void editorContextMenuAboutToShow(MenuManager menu) {
	super.editorContextMenuAboutToShow(menu);
	addAction(menu, "ContentAssistProposal"); 
	addAction(menu, "ContentAssistTip"); 
}

Η υπερκλάση TextEditor προσθέτει ενέργειες με διαφορετικό τρόπο - προσδιορίζοντας μια ομάδα μενού στο μενού περιβάλλοντος για την τοποθέτηση της ενέργειας.  Σε αυτή την περίπτωση, οι ενέργειες (Shift Left, Shift Right) εμφανίζονται στο μενού περιβάλλοντος στην ομάδα που ορίζει η κλάση AbstractTextEditor.

protected void editorContextMenuAboutToShow(IMenuManager menu) {
	super.editorContextMenuAboutToShow(menu);
	addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_RIGHT);
	addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_LEFT);
}

Μενού περιβάλλοντος λειτουργίας επεξεργασίας

Η μέθοδος rulerContextMenuAboutToShow χρησιμοποιείται με τον ίδιο τρόπο πριν εμφανιστεί το μενού περιβάλλοντος του χάρακα.  Η υλοποίηση αυτής της μεθόδου στην κλάση AbstractTextEditor ορίζει τις ομάδες όπου μπορούν να προστεθούν στοιχεία στο μενού.

Ταυτότητες μενού

Τα μενού περιβάλλοντος της λειτουργίας επεξεργασίας και του χάρακα μπορούν να αντιστοιχηθούν με ταυτότητες έτσι ώστε άλλες πρόσθετες λειτουργίες να μπορούν να συνεισφέρουν σε αυτά τα μενού στις επεκτάσεις τους.  Το σχήμα για τον καθορισμό ταυτοτήτων μενού είναι πιο ευέλικτο από την αρχική εκδοχή της πλατφόρμας.  Ωστόσο, το πλαίσιο μπορεί να εκτελεστεί σε κατάσταση συμβατότητας έτσι ώστε να παραμείνει συμβατό με πρόσθετες λειτουργίες που έχουν δημιουργηθεί για την αρχική εκδοχή.  Μπορείτε να χρησιμοποιήσετε την AbstractTextEditor.setCompatibilityMode() για να ελέγξετε αυτή τη συμπεριφορά.  Η προεπιλεγμένη ρύθμιση είναι true.

Συμβατές ταυτότητες μενού 1.0

Όταν η κατάσταση συμβατότητας είναι true, οι ταυτότητες των μενού περιβάλλοντος της λειτουργίας επεξεργασίας και του χάρακα μπορούν να ρυθμιστούν χρησιμοποιώντας το πρωτόκολλο AbstractTextEditor.  Για το σκοπό αυτό, μπορούν να χρησιμοποιηθούν οι μέθοδοι setEditorContextMenuId και setRulerContextMenuId.  Η επαναρύθμιση των ταυτοτήτων μπορεί να είναι χρήσιμη αν θέλετε να εμποδίσετε την μεταβίβαση μενού που αποτέλεσαν συνεισφορά σε μενού υπερκλάσης.  Για παράδειγμα, η κλάση JavaTextEditor που φαίνεται στο παράδειγμα επαναρυθμίζει τις ταυτότητες μενού περιβάλλοντος, ώστε να είναι αποκλειστικά για Java, με σκοπό να εμποδίσει τη μεταβίβαση συνεισφορών γενικού κειμένου από άλλες πρόσθετες λειτουργίες.

protected void initializeEditor() {
	super.initializeEditor();
	JavaEditorEnvironment.connect(this);
	setSourceViewerConfiguration(new JavaSourceViewerConfiguration());
	setEditorContextMenuId("#JavaEditorContext"); 
	setRulerContextMenuId("#JavaRulerContext"); 
}

Αν δεν έχει ορισθεί κάποια ταυτότητα κάπου στην υπαρκτή ιεραρχία, θα χρησιμοποιηθούν οι προεπιλεγμένες ταυτότητες που ορίζονται στην κλάση AbstractTextEditor.

Μη συμβατές ταυτότητες μενού 1.0

Η ταυτότητα του μενού περιβάλλοντος της λειτουργίας επεξεργασίας είναι πάντα <ταυτότητα λειτουργίας επεξεργασίας>.EditorContext, όπου <ταυτότητα λειτουργίας επεξεργασίας> είναι η ταυτότητα της λειτουργίας επεξεργασίας. Η ταυτότητα μιας λειτουργίας επεξεργασίας ορίζεται στη δήλωση xml της λειτουργίας επεξεργασίας. Η ταυτότητα μενού περιβάλλοντος του χάρακα είναι πάντα <ταυτότητα λειτουργίας επεξεργασίας>.RulerContext.