4 class CbImageChooser extends Panel implements CbButtonCallback
10 CbImageFileWindow filewin;
11 //CbImageChooserCallback callback;
13 CbImageChooser(Image i)
18 CbImageChooser(Image i, String s)
20 setLayout(new BorderLayout());
21 add("Center", but = new CbButton("Choose..", this));
22 setImage(i, s==null ? "" : s);
25 void setImage(Image i, String s)
29 if (img != null) but.setImage(img);
30 else but.setText("Choose..");
33 public void click(CbButton b)
35 if (b == but && filewin == null)
36 new CbImageFileWindow(this);
41 class CbImageFileWindow extends FixedFrame implements CbButtonCallback
43 CbImageChooser parent;
46 CbButton browse, ok, cancel;
50 CbImageFileWindow(CbImageChooser p)
53 parent.filewin = this;
54 setLayout(new BorderLayout());
55 add("Center", imgp = new ScrollImage(parent.img, 200, 200));
56 Panel bot = new GrayPanel();
57 bot.setLayout(new FlowLayout(FlowLayout.LEFT));
58 bot.add(new Label("URL:"));
59 bot.add(url = new TextField(parent.imgsrc, 20));
60 bot.add(browse = new CbButton("Browse..", this));
61 bot.add(new Label(" "));
62 bot.add(ok = new CbButton("Ok", this));
63 bot.add(cancel = new CbButton("Cancel", this));
68 setTitle("Choose Image..");
69 Util.recursiveBackground(this, Util.body);
72 public void click(CbButton b)
75 parent.setImage(imgp.img, lastfile);
76 if (b == ok || b == cancel)
78 else if (b == browse) {
79 // Open file chooser here!
81 new FileDialog(this, "Choose Image",FileDialog.LOAD);
83 if (filedlog.getFile() != null) {
84 // file chosen.. load it in
85 String fn = filedlog.getDirectory()+filedlog.getFile();
95 parent.filewin = null;
98 public boolean action(Event evt, Object obj)
100 if (evt.target == url) {
101 String ut = url.getText();
102 if (ut.startsWith("http:") || ut.startsWith("ftp:"))
111 private void loadFile(String f)
113 Image i = Util.tk.getImage(f);
114 if (i == null || !Util.waitForImage(i))
115 new ErrorWindow("Failed to load image "+f);
122 private void loadURL(String u)
125 Image i = Util.tk.getImage(new URL(u));
126 if (i == null || !Util.waitForImage(i))
127 new ErrorWindow("Failed to load image from "+u);
133 catch(MalformedURLException e) {
134 new ErrorWindow(u+" is not a valid URL");
140 class ScrollImage extends Panel implements CbScrollbarCallback
145 CbScrollbar vsc, hsc;
146 boolean compute_scrollbars = true;
150 this(i, Util.getWidth(i), Util.getHeight(i));
153 ScrollImage(Image i, int w, int h)
156 setLayout(new BorderLayout());
157 add("East", vsc = new CbScrollbar(CbScrollbar.VERTICAL, this));
158 add("South", hsc = new CbScrollbar(CbScrollbar.HORIZONTAL, this));
162 void setImage(Image i)
166 imgw = Util.getWidth(img);
167 imgh = Util.getHeight(img);
169 compute_scrollbars = true;
173 public void paint(Graphics g)
175 int w = size().width-vsc.size().width,
176 h = size().height-hsc.size().height;
177 if (compute_scrollbars) {
179 hsc.setValues(0, 1, 1);
180 vsc.setValues(0, 1, 1);
183 if (imgw < w) hsc.setValues(0, 1, 1);
184 else hsc.setValues(0, w, imgw);
185 if (imgh < h) vsc.setValues(0, 1, 1);
186 else vsc.setValues(0, h, imgh);
188 compute_scrollbars = false;
191 g.setColor(Util.body);
192 g.fillRect(0, 0, w, h);
194 if (imgw < w && imgh < h)
195 g.drawImage(img, (w-imgw)/2, (h-imgh)/2, this);
197 g.drawImage(img, -hsc.getValue(), -vsc.getValue(),this);
201 g.setColor(Util.text);
203 g.drawString(s, (w-Util.fnm.stringWidth(s))/2,
204 (h-Util.fnm.getHeight())/2);
208 public void update(Graphics g) { paint(g); }
210 public void reshape(int nx, int ny, int nw, int nh)
212 super.reshape(nx, ny, nw, nh);
213 compute_scrollbars = true;
217 public void moved(CbScrollbar s, int p)
222 public void moving(CbScrollbar s, int p) { }
224 public Dimension minimumSize()
226 return new Dimension(pw, ph);
229 public Dimension preferredSize()
231 return minimumSize();