Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich verstehe die Sache mit dem SourceProvider noch nicht so richtig vielleicht kann mir jemand auf die Sprünge helfen...
Also ich wollte einen eigenen SourceProvider schreiben, so ähnlich wie hier SourceProviders Eclipse Stuff
Nur nicht für eine Table sondern für ein Textfeld.
Ich möchte immer noch erreichen, dass wenn ich in ein Textfeld etwas hinschreibe sich ein command in der toolbar deaktiviert bzw. aktiviert. Da sah die Methode mit dem Provider ganz gut aus...
Also mit einem PropertyTester hab ich es hinbekommen, dass ich den aktivenPart abfragen kann ob ein bestimmtest interface implementiert ist und eine methode true zurück liefert, dann wird der comman aktiviert/deaktiviert... Da klappt aber halt nur wenn man den aktivenPart wechselt, aber innerhalb diesen aktivenPart zu steuern brauch ich so wie ich das sehe noch so einen Provider...
Mein problem ist hauptsächlich wie ich einen eigenen Provider für ein Textfeld machen kann?
So ich hab mal was gemacht, weiß nicht ob es 100 pro perfekt ist:
Bin für weitere Tips dankbar und Verbesserungsvorschläge dankbar=)...
Also ich wollte command das nur aktiv ist wenn eine View oder Editor ein bestimmtes Interface implementiert und davon eine Methode true zurück liefert: Leider weiß ich noch nicht wie ich mein SourceProvider mit extensions point hinzufüge...Ich versuchs grad mit org.eclipse.ui.services
Hier mal ein kleines Beispiel sobald man auf save drückt geht der command an wenn man den aktiven Part wechselt geht er wieder aus:
Interface
Java:
public interface IPushable {
boolean isPushable();
void push();
}
View
Java:
public class MyView extends ViewPart implements IPushable, ISaveablePart2{
public static final String ID = "myview";
private PushSourceProvider p;
private boolean push;
public void createPartControl(Composite parent) {
//Unschön sollte iwie über extesnsion point gehen
final IEvaluationService evaluationService = (IEvaluationService) getSite()
.getWorkbenchWindow().getWorkbench().getService(
IEvaluationService.class);
p = new PushSourceProvider();
evaluationService.addSourceProvider(p);
}
public void setFocus() {
}
@Override
public boolean isPushable() {
return push;
}
@Override
public void push() {
// TODO Auto-generated method stub
}
@Override
public int promptToSaveOnClose() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void doSave(IProgressMonitor monitor) {
push = true;
p.firePushChanged(this);
}
@Override
public void dispose() {
super.dispose();
final IEvaluationService evaluationService = (IEvaluationService) getSite()
.getWorkbenchWindow().getWorkbench().getService(
IEvaluationService.class);
evaluationService.removeSourceProvider(p);
}
@Override
public void doSaveAs() {
// TODO Auto-generated method stub
}
@Override
public boolean isDirty() {
return true;
}
@Override
public boolean isSaveAsAllowed() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isSaveOnCloseNeeded() {
// TODO Auto-generated method stub
return false;
}
}
SourceProvider
Java:
package dn;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.ui.AbstractSourceProvider;
import org.eclipse.ui.ISources;
public class PushSourceProvider extends AbstractSourceProvider {
public static final String ID = "services.pushsourceprovider";
public static final String PUSH_ID = "currentPush";
private IPushable push = null;
@Override
public void dispose() {
push = null;
}
@Override
public Map<String, IPushable> getCurrentState() {
Map<String, IPushable> map = new HashMap<String, IPushable>();
map.put(PUSH_ID, push);
return map;
}
@Override
public String[] getProvidedSourceNames() {
return new String[] { ID };
}
public void firePushChanged(IPushable iPushable){
push = iPushable;
fireSourceChanged(ISources.ACTIVE_PART, PUSH_ID, push);
}
}
PropertyTester welcher die methode testet
Java:
public class PropertyTester extends org.eclipse.core.expressions.PropertyTester{
public static final String IS_PUSH = "push";
@Override
public boolean test(Object receiver, String property, Object[] args,
Object expectedValue) {
if (IS_PUSH.equals(property)) {
return ((IPushable)receiver).isPushable();
}
return false;
}
}