Skip to content
Snippets Groups Projects
Commit f3948d60 authored by Florian Hölzl's avatar Florian Hölzl
Browse files

Added support for multiple tutorial steps.

refs 2567
parent fdd654ef
No related branches found
No related tags found
No related merge requests found
Showing
with 89 additions and 14 deletions
org.fortiss.tooling.kernel.ui/trunk/icons/tutorial_todo.gif

585 B

......@@ -21,6 +21,8 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.fortiss.tooling.kernel.extension.data.TutorialDefinition;
import org.fortiss.tooling.kernel.extension.data.TutorialStep;
import org.fortiss.tooling.kernel.service.ITutorialService;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
......@@ -64,4 +66,14 @@ public class NavigatorTreeContentSorter extends ViewerSorter {
}
return super.compare(viewer, e1, e2);
}
/** {@inheritDoc} */
@Override
public int category(Object element) {
if(element instanceof TutorialStep) {
return ITutorialService.INSTANCE.getActiveTutorial().getDefinition().getSteps()
.indexOf(element);
}
return super.category(element);
}
}
......@@ -22,6 +22,7 @@ import static org.fortiss.tooling.kernel.ui.ToolingKernelUIActivator.getImageDes
import org.eclipse.swt.graphics.Image;
import org.fortiss.tooling.kernel.extension.data.TutorialDefinition;
import org.fortiss.tooling.kernel.extension.data.TutorialStep;
import org.fortiss.tooling.kernel.service.ITutorialService;
/**
* A {@link ModelElementLabelProvider} that also handles {@link TutorialDefinition}s and
......@@ -36,6 +37,10 @@ public class TutorialDefinitionModelElementLabelProvider extends ModelElementLab
/** The image for the {@link TutorialDefinition} node. */
private Image tutorialDefinitionImage;
/** The image for the {@link TutorialStep} node when completed. */
private Image tutorialStepDoneImage;
/** The image for the {@link TutorialStep} node when still in the future. */
private Image tutorialStepTodoImage;
/** {@inheritDoc} */
@Override
......@@ -60,7 +65,31 @@ public class TutorialDefinitionModelElementLabelProvider extends ModelElementLab
}
return tutorialDefinitionImage;
}
// TODO: interactive step images
if(element instanceof TutorialStep) {
return getTutorialStepImage((TutorialStep)element);
}
return super.getImage(element);
}
/** Returns the image for the tutorial step. */
private Image getTutorialStepImage(TutorialStep element) {
ITutorialService s = ITutorialService.INSTANCE;
if(s.isEarlierStep(element)) {
if(tutorialStepDoneImage == null) {
tutorialStepDoneImage = getImageDescriptor("icons/ok.png").createImage();
}
return tutorialStepDoneImage;
}
if(s.isLaterStep(element)) {
if(tutorialStepTodoImage == null) {
tutorialStepTodoImage = getImageDescriptor("icons/tutorial_todo.gif").createImage();
}
return tutorialStepTodoImage;
}
if(tutorialDefinitionImage == null) {
tutorialDefinitionImage = getImageDescriptor("icons/tutorial.gif").createImage();
}
return tutorialDefinitionImage;
}
}
......@@ -19,7 +19,6 @@ package org.fortiss.tooling.kernel.extension;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.kernel.extension.data.TutorialDefinition;
import org.fortiss.tooling.kernel.extension.data.TutorialStep;
/**
* A tutorial provider provides all data about a single tutorial to the kernel infrastructure.
......@@ -36,12 +35,6 @@ public interface ITutorialProvider {
/** Returns the root element of this tutorial. */
public EObject getRootElement();
/** Returns the initial step of this tutorial. */
public TutorialStep getInitialStep();
/** Returns the next tutorial step for the given step. */
public TutorialStep getNextStep(TutorialStep step);
/** Returns the global whitelist provider. */
public ITutorialWhitelistProvider getGlobalWhitelistProvider();
}
......@@ -17,6 +17,8 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.extension;
import org.eclipse.emf.ecore.EObject;
/**
* Instances of this class provide completion checkers for
* tutorial steps.
......@@ -27,5 +29,6 @@ package org.fortiss.tooling.kernel.extension;
* @ConQAT.Rating RED Hash:
*/
public interface ITutorialStepCompletionChecker {
// TODO: define
/** Returns whether the completion condition is fulfilled for the given tutorial model. */
public boolean isTutorialStepComplete(EObject model);
}
......@@ -37,17 +37,23 @@ public final class TutorialDefinition {
private final List<TutorialStep> steps = new LinkedList<TutorialStep>();
/** Constructor. */
public TutorialDefinition(String title) {
public TutorialDefinition(String title, TutorialStep initialStep) {
this.title = title;
addStep(initialStep);
}
/** Returns tutorial steps. */
public final List<TutorialStep> getSteps() {
/** Returns tutorial steps. MUST NOT return <code>null</code> or an empty list. */
public List<TutorialStep> getSteps() {
return asUnmodifiable(steps);
}
/** Adds the given tutorial step to the list of steps. */
public void addStep(TutorialStep step) {
steps.add(step);
}
/** Returns the title of the tutorial. */
public final String getTitle() {
public String getTitle() {
return title;
}
}
......@@ -17,6 +17,7 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.extension.data;
import org.fortiss.tooling.kernel.extension.ITutorialStepCompletionChecker;
import org.fortiss.tooling.kernel.extension.ITutorialWhitelistProvider;
import org.fortiss.tooling.kernel.extension.base.TutorialBlacklistAllProvider;
......@@ -49,4 +50,10 @@ public abstract class TutorialStep {
public ITutorialWhitelistProvider getWhitelistProvider() {
return new TutorialBlacklistAllProvider();
}
/**
* Returns the completion checker for this tutorial step. Sub-classes MUST NOT return
* <code>null</code>.
*/
public abstract ITutorialStepCompletionChecker getCompletionChecker();
}
......@@ -26,6 +26,7 @@ import org.conqat.lib.commons.collections.UnmodifiableMap;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.kernel.extension.ITutorialProvider;
import org.fortiss.tooling.kernel.extension.data.Prototype;
import org.fortiss.tooling.kernel.extension.data.TutorialDefinition;
import org.fortiss.tooling.kernel.extension.data.TutorialStep;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.service.ITutorialService;
......@@ -91,7 +92,7 @@ public final class TutorialService implements ITutorialService {
}
try {
activeTutorial = provider.newInstance();
activeStep = activeTutorial.getInitialStep();
activeStep = activeTutorial.getDefinition().getSteps().get(0);
EObject root = activeTutorial.getRootElement();
IPersistencyService.INSTANCE.addDummyEObjectAsTopLevelElement(root);
} catch(InstantiationException e) {
......@@ -129,4 +130,22 @@ public final class TutorialService implements ITutorialService {
return activeTutorial.getGlobalWhitelistProvider().prototypeActive(prototype) ||
activeStep.getWhitelistProvider().prototypeActive(prototype);
}
/** {@inheritDoc} */
@Override
public boolean isEarlierStep(TutorialStep step) {
TutorialDefinition def = activeTutorial.getDefinition();
int current = def.getSteps().indexOf(activeStep);
int test = def.getSteps().indexOf(step);
return test < current;
}
/** {@inheritDoc} */
@Override
public boolean isLaterStep(TutorialStep step) {
TutorialDefinition def = activeTutorial.getDefinition();
int current = def.getSteps().indexOf(activeStep);
int test = def.getSteps().indexOf(step);
return test > current;
}
}
......@@ -59,6 +59,12 @@ public interface ITutorialService extends ITutorialWhitelistProvider {
/** Returns the active tutorial step. */
public TutorialStep getActiveTutorialStep();
/** Returns whether the given step is an earlier step than the current one. */
public boolean isEarlierStep(TutorialStep step);
/** Returns whether the given step is a later step than the current one. */
public boolean isLaterStep(TutorialStep step);
/** Returns all registered tutorial providers. */
public Map<String, Class<? extends ITutorialProvider>> getAllTutorialProviders();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment