📄 ngbrowser.java
字号:
/*******************************************************************************
* Copyright (c) 2004 Stefan Zeiger and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.novocode.com/legal/epl-v10.html
*
* Contributors:
* Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
*******************************************************************************/
package com.novocode.naf.gui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.*;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import com.novocode.naf.app.*;
import com.novocode.naf.data.ModelBinding;
import com.novocode.naf.data.XMLProperty;
import com.novocode.naf.gui.event.ActionEvent;
import com.novocode.naf.gui.event.ChangeEvent;
import com.novocode.naf.gui.event.DefaultActionBroadcaster;
import com.novocode.naf.gui.event.IActionListener;
import com.novocode.naf.gui.event.IActionSource;
import com.novocode.naf.gui.event.IChangeListener;
import com.novocode.naf.model.DefaultBooleanModel;
import com.novocode.naf.model.DefaultProgressModel;
import com.novocode.naf.model.DefaultStringModel;
import com.novocode.naf.model.IBooleanModifyModel;
import com.novocode.naf.model.IObjectModifyModel;
import com.novocode.naf.model.IObjectReadModel;
import com.novocode.naf.model.IProgressModifyModel;
import com.novocode.naf.resource.*;
/**
* A Browser widget.
*
* @author Stefan Zeiger (szeiger@novocode.com)
* @since Oct 24, 2004
* @version $Id: NGBrowser.java,v 1.9 2005/04/22 17:05:08 szeiger Exp $
*/
public final class NGBrowser extends NGWidget
{
private boolean border;
@XMLProperty public void setBorder(boolean b) { this.border = b; }
public boolean getBorder() { return border; }
public Control createControl(Composite parent, NGComponent parentComp, ShellWindowInstance wi, WidgetData pwd) throws NAFException
{
Browser browser;
try
{
browser = new Browser(parent, border ? SWT.BORDER : SWT.NONE);
}
catch(Throwable t)
{
CLabel cl = new CLabel(parent, SWT.CENTER);
cl.setText("Browser widget is not available");
return cl;
}
final Browser finalBrowser = browser;
final IObjectReadModel<String> urlReadModel = getModel("url", wi.models);
if(urlReadModel != null)
{
final boolean[] lock = new boolean[1];
IChangeListener cl = new IChangeListener()
{
public void stateChanged(ChangeEvent e)
{
String url = urlReadModel.getValue();
if(url == null) url = "";
String oldUrl = finalBrowser.getUrl();
if(oldUrl == null) oldUrl = "";
if(url.equals(oldUrl)) return;
try
{
lock[0] = true;
finalBrowser.setUrl(url);
}
finally { lock[0] = false; }
}
};
SWTUtil.registerModel(browser, urlReadModel, cl);
cl.stateChanged(null);
if(urlReadModel instanceof IObjectModifyModel)
{
final IObjectModifyModel<String> urlModifyModel = getModel("url", wi.models);
browser.addLocationListener(new LocationListener()
{
public void changing(LocationEvent event)
{
}
public void changed(LocationEvent event)
{
if(!event.top) return;
if(!lock[0]) urlModifyModel.setValue(event.location);
}
});
}
}
final IBooleanModifyModel backEnabledModel = getModel("back-enabled", wi.models);
final IBooleanModifyModel forwardEnabledModel = getModel("forward-enabled", wi.models);
final IBooleanModifyModel changingModel = getModel("changing", wi.models);
if(backEnabledModel != null || forwardEnabledModel != null || changingModel != null)
{
browser.addLocationListener(new LocationListener()
{
public void changing(LocationEvent event)
{
if(changingModel != null) changingModel.setBoolean(true);
if(backEnabledModel != null) backEnabledModel.setBoolean(finalBrowser.isBackEnabled());
if(forwardEnabledModel != null) forwardEnabledModel.setBoolean(finalBrowser.isForwardEnabled());
}
public void changed(LocationEvent event)
{
if(backEnabledModel != null) backEnabledModel.setBoolean(finalBrowser.isBackEnabled());
if(forwardEnabledModel != null) forwardEnabledModel.setBoolean(finalBrowser.isForwardEnabled());
if(changingModel != null) changingModel.setBoolean(false);
}
});
if(backEnabledModel != null) backEnabledModel.setBoolean(finalBrowser.isBackEnabled());
if(forwardEnabledModel != null) forwardEnabledModel.setBoolean(finalBrowser.isForwardEnabled());
if(changingModel != null) changingModel.setBoolean(false);
}
final IObjectModifyModel<String> titleModifyModel = getModel("title", wi.models);
if(titleModifyModel != null)
{
browser.addTitleListener(new TitleListener()
{
public void changed(TitleEvent event)
{
titleModifyModel.setValue(event.title);
}
});
}
final IObjectModifyModel<String> statusModifyModel = getModel("status-text", wi.models);
if(statusModifyModel != null)
{
browser.addStatusTextListener(new StatusTextListener()
{
public void changed(StatusTextEvent event)
{
statusModifyModel.setValue(event.text);
}
});
}
final IProgressModifyModel progressModifyModel = getModel("progress-reset", wi.models);
if(progressModifyModel != null)
{
browser.addProgressListener(new ProgressListener()
{
public void changed(ProgressEvent event)
{
progressModifyModel.setAll(0, event.total, event.current);
}
public void completed(ProgressEvent event)
{
progressModifyModel.setAll(0, 100, 0);
}
});
}
final IActionSource backSource = getModel("back", wi.models);
if(backSource != null)
{
SWTUtil.registerModel(browser, backSource, new IActionListener()
{
public void performAction(ActionEvent e)
{
finalBrowser.back();
}
});
}
final IActionSource forwardSource = getModel("forward", wi.models);
if(forwardSource != null)
{
SWTUtil.registerModel(browser, forwardSource, new IActionListener()
{
public void performAction(ActionEvent e)
{
finalBrowser.forward();
}
});
}
final IActionSource stopSource = getModel("stop", wi.models);
if(stopSource != null)
{
SWTUtil.registerModel(browser, stopSource, new IActionListener()
{
public void performAction(ActionEvent e)
{
finalBrowser.stop();
}
});
}
final IActionSource refreshSource = getModel("refresh", wi.models);
if(refreshSource != null)
{
SWTUtil.registerModel(browser, refreshSource, new IActionListener()
{
public void performAction(ActionEvent e)
{
finalBrowser.refresh();
}
});
}
return browser;
}
protected Object createDefaultModel(ModelBinding mb)
{
if("url".equals(mb.type)) return new DefaultStringModel();
else if("title".equals(mb.type)) return new DefaultStringModel();
else if("back".equals(mb.type)) return new DefaultActionBroadcaster(mb.id);
else if("forward".equals(mb.type)) return new DefaultActionBroadcaster(mb.id);
else if("stop".equals(mb.type)) return new DefaultActionBroadcaster(mb.id);
else if("refresh".equals(mb.type)) return new DefaultActionBroadcaster(mb.id);
else if("back-enabled".equals(mb.type)) return new DefaultBooleanModel();
else if("forward-enabled".equals(mb.type)) return new DefaultBooleanModel();
else if("changing".equals(mb.type)) return new DefaultBooleanModel();
else if("status-text".equals(mb.type)) return new DefaultStringModel();
else if("progress-reset".equals(mb.type)) return new DefaultProgressModel(0, 100, 0);
else return super.createDefaultModel(mb);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -