blob: 41e3b5ecfefb72db936fd8397040efe2ef5240a6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.editors;
import org.eclipse.mylyn.commons.workbench.editors.CommonTextSupport;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorExtension;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ActiveShellExpression;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.handlers.IHandlerService;
public abstract class CommentEditor {
private RichTextEditor textEditor;
private IContextService contextService;
private IContextActivation commentContext;
private CommonTextSupport textSupport;
private final ITask task;
private final TaskRepository taskRepository;
public CommentEditor(ITask task, TaskRepository taskRepository) {
this.task = task;
this.taskRepository = taskRepository;
}
public void createControl(Composite composite) {
AbstractTaskEditorExtension extension = TaskEditorExtensions.getTaskEditorExtension(taskRepository);
if (extension != null) {
String contextId = extension.getEditorContextId();
if (contextId != null) {
contextService = (IContextService) PlatformUI.getWorkbench().getService(IContextService.class);
if (contextService != null) {
commentContext = contextService.activateContext(contextId,
new ActiveShellExpression(composite.getShell()));
}
}
}
textEditor = new RichTextEditor(taskRepository, SWT.V_SCROLL | SWT.BORDER | SWT.WRAP, contextService,
extension, task) {
@Override
protected void valueChanged(String value) {
CommentEditor.this.valueChanged(value);
};
};
textEditor.createControl(composite, null);
textEditor.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
if (handlerService != null) {
textSupport = new CommonTextSupport(handlerService);
textSupport.install(textEditor.getViewer(), true);
}
}
protected abstract void valueChanged(String value);
public RichTextEditor getTextEditor() {
return textEditor;
}
public String getText() {
return textEditor.getText();
}
public void dispose() {
if (contextService != null && commentContext != null) {
contextService.deactivateContext(commentContext);
commentContext = null;
}
if (textSupport != null) {
textSupport.dispose();
}
}
}