Hi zusammen,
ich habe bereits vor einiger Zeit eine Art Wizard konstruiert (ich brauchte mal was, was in einem Editor ausgeführt werden kann und nicht als Wizard-Dialog - über Sinn und Unsinn lässt sich sicher streiten, aber er funktioniert augenscheinlich relativ gut).
Seit einigen Tagen versuche ich ihn noch etwas zu erweitern, was leider nur von mäßigen Erfolg gekrönt ist:
Jede Page und der Wizard selbst können einen Name haben (wenn man ihn nicht setzt, wird je ein Default-Wert verwendet).
Ich möchte nun - vergleichbar mit dem Diagramm-Wizard von OpenOffice (der einzige, der mir gerade einfällt) - auf der Seite einen Überblock über den Inhalt (also die Seiten) des Wizards geben und die aktive Seite hervorheben, bzw. auch die, die noch nicht erreichbar sind markieren (rote Schrift oder so).
Ich habe das Ganze über eine SashForm gemacht und für eine Einzelne Seite, wird der Name des Wizards und der Seite bereits ordentlich angezeigt. Aber:
Ich möchte das Composite (=Client-Area in einer Section, welche in einem ScrolledForm steckt) bei jedem hinzufügen einer Seite (was von der API her halt auch "während des Betriebs" möglich ist), bei jedem Wechsel der Seite, oder jeder Statusänderung einer Seite (ob man zu nächsten weiter gehen kann oder nicht), neu darstellen.
Dazu mache ich folgendes:
Ich habe es so weit bereits durchgetestet: die Methode wird an allen fraglichen Stellen aufgerufen (in diversen Listenern etc.).
Ein Effekt ist aber leider bislang ausgeblieben.
Wenn jemand sieht, wo ich da vielleicht auf der Stelle trete...
Vielen Dank und Gruß
Daniel
ich habe bereits vor einiger Zeit eine Art Wizard konstruiert (ich brauchte mal was, was in einem Editor ausgeführt werden kann und nicht als Wizard-Dialog - über Sinn und Unsinn lässt sich sicher streiten, aber er funktioniert augenscheinlich relativ gut).
Seit einigen Tagen versuche ich ihn noch etwas zu erweitern, was leider nur von mäßigen Erfolg gekrönt ist:
Jede Page und der Wizard selbst können einen Name haben (wenn man ihn nicht setzt, wird je ein Default-Wert verwendet).
Ich möchte nun - vergleichbar mit dem Diagramm-Wizard von OpenOffice (der einzige, der mir gerade einfällt) - auf der Seite einen Überblock über den Inhalt (also die Seiten) des Wizards geben und die aktive Seite hervorheben, bzw. auch die, die noch nicht erreichbar sind markieren (rote Schrift oder so).
Ich habe das Ganze über eine SashForm gemacht und für eine Einzelne Seite, wird der Name des Wizards und der Seite bereits ordentlich angezeigt. Aber:
Ich möchte das Composite (=Client-Area in einer Section, welche in einem ScrolledForm steckt) bei jedem hinzufügen einer Seite (was von der API her halt auch "während des Betriebs" möglich ist), bei jedem Wechsel der Seite, oder jeder Statusänderung einer Seite (ob man zu nächsten weiter gehen kann oder nicht), neu darstellen.
Dazu mache ich folgendes:
Java:
private void createOverviewContent() {
// create a new content section composite
overviewContentComposite = new Composite(overviewContentSection,
SWT.NONE);
// adapt composite to forms
formToolkit.adapt(overviewContentComposite);
formToolkit.paintBordersFor(overviewContentComposite);
// create the client-area of the section
overviewContentSection.setClient(overviewContentComposite);
overviewContentComposite.setLayout(new FormLayout());
// the last label, used to attach ne next one
Label lastLabel = null;
for (int i = 0; i < pages.size(); i++) {
// used to mark the current page
boolean currentPage = false;
if (((StackLayout) contentComposite.getLayout()).topControl == pages
.get(i).getTopComposite()) {
currentPage = true;
}
// create the text for the label...
String text = (i + 1)
+ ") "
+ (pages.get(i).pageName != null ? pages.get(i).pageName
: "page " + (i + 1));
// ... and create it
Label label = formToolkit.createLabel(overviewContentComposite,
text, SWT.WRAP);
// attachment via FormLayout --> don't know if this is a good approach at all
FormData fd_label = new FormData();
if (i == 0) {
fd_label.top = new FormAttachment(0, 5);
} else {
if (lastLabel != null) {
fd_label.top = new FormAttachment(lastLabel, 5, SWT.BOTTOM);
}
}
fd_label.left = new FormAttachment(0, 5);
fd_label.right = new FormAttachment(100, -5);
label.setLayoutData(fd_label);
// set the coloring
if (currentPage) {
if (pages.get(i).canProceed) {
label.setForeground(SWTResourceManager.getColor(0, 0, 0));
} else {
label.setForeground(SWTResourceManager.getColor(255, 0, 0));
}
label.setBackground(SWTResourceManager.getColor(0, 204, 0));
} else {
if (pages.get(i).canProceed) {
label.setForeground(SWTResourceManager.getColor(0, 204, 0));
} else {
label.setForeground(SWTResourceManager.getColor(255, 0, 0));
}
}
// remember the last label (for the form-data)
lastLabel = label;
}
// force an update of the composite and it's parent
// i guess there is something wrong here...
overviewContentComposite.update();
overviewContentComposite.getParent().layout(
new Control[] { overviewContentComposite });
}
Ich habe es so weit bereits durchgetestet: die Methode wird an allen fraglichen Stellen aufgerufen (in diversen Listenern etc.).
Ein Effekt ist aber leider bislang ausgeblieben.
Wenn jemand sieht, wo ich da vielleicht auf der Stelle trete...
Vielen Dank und Gruß
Daniel