mirror of
https://github.com/webmin/webmin.git
synced 2025-07-21 23:40:34 +00:00
234 lines
4.6 KiB
Java
234 lines
4.6 KiB
Java
import java.awt.*;
|
|
import java.net.*;
|
|
|
|
class CbImageChooser extends Panel implements CbButtonCallback
|
|
{
|
|
Image img;
|
|
String imgsrc;
|
|
int imgw, imgh;
|
|
CbButton but;
|
|
CbImageFileWindow filewin;
|
|
//CbImageChooserCallback callback;
|
|
|
|
CbImageChooser(Image i)
|
|
{
|
|
this(i, null);
|
|
}
|
|
|
|
CbImageChooser(Image i, String s)
|
|
{
|
|
setLayout(new BorderLayout());
|
|
add("Center", but = new CbButton("Choose..", this));
|
|
setImage(i, s==null ? "" : s);
|
|
}
|
|
|
|
void setImage(Image i, String s)
|
|
{
|
|
img = i;
|
|
imgsrc = s;
|
|
if (img != null) but.setImage(img);
|
|
else but.setText("Choose..");
|
|
}
|
|
|
|
public void click(CbButton b)
|
|
{
|
|
if (b == but && filewin == null)
|
|
new CbImageFileWindow(this);
|
|
}
|
|
}
|
|
|
|
|
|
class CbImageFileWindow extends FixedFrame implements CbButtonCallback
|
|
{
|
|
CbImageChooser parent;
|
|
ScrollImage imgp;
|
|
TextField url;
|
|
CbButton browse, ok, cancel;
|
|
FileDialog filedlog;
|
|
String lastfile = "";
|
|
|
|
CbImageFileWindow(CbImageChooser p)
|
|
{
|
|
parent = p;
|
|
parent.filewin = this;
|
|
setLayout(new BorderLayout());
|
|
add("Center", imgp = new ScrollImage(parent.img, 200, 200));
|
|
Panel bot = new GrayPanel();
|
|
bot.setLayout(new FlowLayout(FlowLayout.LEFT));
|
|
bot.add(new Label("URL:"));
|
|
bot.add(url = new TextField(parent.imgsrc, 20));
|
|
bot.add(browse = new CbButton("Browse..", this));
|
|
bot.add(new Label(" "));
|
|
bot.add(ok = new CbButton("Ok", this));
|
|
bot.add(cancel = new CbButton("Cancel", this));
|
|
add("South", bot);
|
|
|
|
pack();
|
|
show();
|
|
setTitle("Choose Image..");
|
|
Util.recursiveBackground(this, Util.body);
|
|
}
|
|
|
|
public void click(CbButton b)
|
|
{
|
|
if (b == ok)
|
|
parent.setImage(imgp.img, lastfile);
|
|
if (b == ok || b == cancel)
|
|
dispose();
|
|
else if (b == browse) {
|
|
// Open file chooser here!
|
|
FileDialog filedlog =
|
|
new FileDialog(this, "Choose Image",FileDialog.LOAD);
|
|
filedlog.show();
|
|
if (filedlog.getFile() != null) {
|
|
// file chosen.. load it in
|
|
String fn = filedlog.getDirectory()+filedlog.getFile();
|
|
url.setText(fn);
|
|
loadFile(fn);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void dispose()
|
|
{
|
|
super.dispose();
|
|
parent.filewin = null;
|
|
}
|
|
|
|
public boolean action(Event evt, Object obj)
|
|
{
|
|
if (evt.target == url) {
|
|
String ut = url.getText();
|
|
if (ut.startsWith("http:") || ut.startsWith("ftp:"))
|
|
loadURL(ut);
|
|
else
|
|
loadFile(ut);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void loadFile(String f)
|
|
{
|
|
Image i = Util.tk.getImage(f);
|
|
if (i == null || !Util.waitForImage(i))
|
|
new ErrorWindow("Failed to load image "+f);
|
|
else {
|
|
imgp.setImage(i);
|
|
lastfile = f;
|
|
}
|
|
}
|
|
|
|
private void loadURL(String u)
|
|
{
|
|
try {
|
|
Image i = Util.tk.getImage(new URL(u));
|
|
if (i == null || !Util.waitForImage(i))
|
|
new ErrorWindow("Failed to load image from "+u);
|
|
else {
|
|
imgp.setImage(i);
|
|
lastfile = u;
|
|
}
|
|
}
|
|
catch(MalformedURLException e) {
|
|
new ErrorWindow(u+" is not a valid URL");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class ScrollImage extends Panel implements CbScrollbarCallback
|
|
{
|
|
Image img;
|
|
int imgw, imgh;
|
|
int pw, ph;
|
|
CbScrollbar vsc, hsc;
|
|
boolean compute_scrollbars = true;
|
|
|
|
ScrollImage(Image i)
|
|
{
|
|
this(i, Util.getWidth(i), Util.getHeight(i));
|
|
}
|
|
|
|
ScrollImage(Image i, int w, int h)
|
|
{
|
|
pw = w; ph = h;
|
|
setLayout(new BorderLayout());
|
|
add("East", vsc = new CbScrollbar(CbScrollbar.VERTICAL, this));
|
|
add("South", hsc = new CbScrollbar(CbScrollbar.HORIZONTAL, this));
|
|
setImage(i);
|
|
}
|
|
|
|
void setImage(Image i)
|
|
{
|
|
img = i;
|
|
if (img != null) {
|
|
imgw = Util.getWidth(img);
|
|
imgh = Util.getHeight(img);
|
|
}
|
|
compute_scrollbars = true;
|
|
repaint();
|
|
}
|
|
|
|
public void paint(Graphics g)
|
|
{
|
|
int w = size().width-vsc.size().width,
|
|
h = size().height-hsc.size().height;
|
|
if (compute_scrollbars) {
|
|
if (img == null) {
|
|
hsc.setValues(0, 1, 1);
|
|
vsc.setValues(0, 1, 1);
|
|
}
|
|
else {
|
|
if (imgw < w) hsc.setValues(0, 1, 1);
|
|
else hsc.setValues(0, w, imgw);
|
|
if (imgh < h) vsc.setValues(0, 1, 1);
|
|
else vsc.setValues(0, h, imgh);
|
|
}
|
|
compute_scrollbars = false;
|
|
}
|
|
|
|
g.setColor(Util.body);
|
|
g.fillRect(0, 0, w, h);
|
|
if (img != null) {
|
|
if (imgw < w && imgh < h)
|
|
g.drawImage(img, (w-imgw)/2, (h-imgh)/2, this);
|
|
else
|
|
g.drawImage(img, -hsc.getValue(), -vsc.getValue(),this);
|
|
}
|
|
else {
|
|
g.setFont(Util.f);
|
|
g.setColor(Util.text);
|
|
String s = "<None>";
|
|
g.drawString(s, (w-Util.fnm.stringWidth(s))/2,
|
|
(h-Util.fnm.getHeight())/2);
|
|
}
|
|
}
|
|
|
|
public void update(Graphics g) { paint(g); }
|
|
|
|
public void reshape(int nx, int ny, int nw, int nh)
|
|
{
|
|
super.reshape(nx, ny, nw, nh);
|
|
compute_scrollbars = true;
|
|
repaint();
|
|
}
|
|
|
|
public void moved(CbScrollbar s, int p)
|
|
{
|
|
repaint();
|
|
}
|
|
|
|
public void moving(CbScrollbar s, int p) { }
|
|
|
|
public Dimension minimumSize()
|
|
{
|
|
return new Dimension(pw, ph);
|
|
}
|
|
|
|
public Dimension preferredSize()
|
|
{
|
|
return minimumSize();
|
|
}
|
|
}
|