/*
* Copyright 2011 Uwe Krueger.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mandelsoft.mand.tool;
import com.mandelsoft.io.AbstractFile;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.NumberFormat;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import com.mandelsoft.mand.MandelData;
import com.mandelsoft.mand.MandelHeader;
import com.mandelsoft.mand.MandelInfo;
import com.mandelsoft.mand.QualifiedMandelName;
import com.mandelsoft.mand.scan.MandelHandle;
import com.mandelsoft.swing.GBC;
import com.mandelsoft.swing.NumberField;
import com.mandelsoft.util.Utils;
import java.awt.event.ActionListener;
import javax.swing.JButton;
/**
*
* @author Uwe Krueger
*/
public class MandelImageAreaDialog extends MandelAreaViewDialog {
public MandelImageAreaDialog(MandelWindowAccess owner, String title, String file,
QualifiedMandelName name,
MandelInfo info, boolean readonly)
{
super(owner, title, name, info, false, readonly);
((View)getView()).setFilename(file);
}
public MandelImageAreaDialog(MandelWindowAccess owner, String title,
QualifiedMandelName name,
MandelData data)
{ super(owner,title);
AbstractFile f=data.getFile();
if (f!=null) System.out.println("data file "+f+" ("+f.isFile()+")");
setup(name, data, false, isReadonly(owner,f,name));
if (f!=null)
((View)getView()).setFilename(f.toString());
}
@Override
protected MandelAreaView createView(QualifiedMandelName name, Object info,
boolean change, boolean readonly)
{
return new View(name,(MandelData)info, readonly);
}
public void setFilename(String file)
{
((View)getView()).setFilename(file);
}
///////////////////////////////////////////////////////////////////////
// view
///////////////////////////////////////////////////////////////////////
protected class View extends MandelAreaView {
protected JTextField filename;
protected JButton save;
public View(QualifiedMandelName name, MandelInfo info, boolean readonly)
{
super(name, info, false, readonly);
}
public View(QualifiedMandelName name, MandelData data, boolean readonly)
{
super(name, data, false, readonly);
}
public void setFilename(String n)
{
filename.setText(n);
}
@Override
protected void setupFields()
{ NumberFormat fmt;
NumberField field;
MandelHeader h=null;
MandelHeader oh=null;
int row;
if (data!=null) {
h=data.getHeader();
oh=data.getOrigHeader();
}
super.setupFields();
if (data!=null) {
row=getRow();
createInfoField("creator", getInfo().getCreator());
createInfoField("site", getInfo().getSite());
addBorder(0,row,1,2);
}
else skipRows(2);
setCol(1);
row=getRow();
if (data!=null) {
if (data.isModified()) {
createInfoField("type","Unsaved Raster");
}
else {
createInfoField("type",oh.getTypeDesc());
}
}
else {
createInfoField("type","unknown");
}
createField("maximum iteration", "MaxIt");
createField("minimum iteration", "MinIt");
createInfoField("time", formatTime(getInfo().getTime()));
createField("number of iterations", "NumIt");
addBorder(1, row, 1, 5);
if (data!=null) {
row=this.getRow();
if (data.getInfo().hasMandelCount()) {
//System.out.println("row="+row);
createField("mandel set pixels", "MCnt");
double cov=((double)getInfo().getMCnt())/getInfo().getRX()/getInfo().
getRY();
cov=((double)Math.round(cov*1000))/10;
createInfoField("mandel set coverage", ""+cov+"%");
}
else skipRows(2);
addBorder(1, row, 1, 2);
row=getRow();
if (h.hasImageData()) {
String mapping="";
if (h.hasMapping()) {
mapping=" ("+data.getMapping().getType()+")";
}
if (h.hasMapper()) {
createInfoField("mapper", data.getMapper().getName()+mapping);
createInfoField("parameter", data.getMapper().getParamDesc());
}
else {
createInfoField("mapper", "-");
createInfoField("parameter", "-");
}
}
else {
String image="no image data";
if (qname!=null) {
MandelHandle i;
i=getEnvironment().getImageDataScanner().getMandelHandle(qname);
if (i!=null) {
if (i.getHeader().hasRaster()) image="raster available";
else image="image available";
}
}
createInfoField("image", image);
}
addBorder(1, row, 1, 2);
}
if (data!=null) {
if (h.hasImageData()) {
row=getRow();
createInfoField("image",h.hasRaster()?"raster":"image");
createInfoField("colormap size",(h.hasColormap()?
(""+data.getColormap().getSize()):"-"));
addBorder(1,row,1,2);
}
}
// addBorder(1,4,1,3);
row=getMaxGridRow();
add(filename=new JTextField(),GBC(0,row).setSpanW(getMaxGridCol()+1).
setFill(GBC.HORIZONTAL).
setInsets(10,0,0,0).
setWeight(200, 0));
filename.setEditable(false);
filename.setBorder(new BevelBorder(BevelBorder.LOWERED));
}
@Override
protected void setupButtons()
{
super.setupButtons();
addShowButton("Show area",false);
if (!readonlyMode) {
save=this.createButton("Save", "Save changes", new ActionListener() {
public void actionPerformed(ActionEvent e)
{
try {
MandelData orig=new MandelData(data.getFile());
if (Utils.equals(orig.getInfo().getLocation(),
data.getInfo().getLocation())
&&Utils.equals(orig.getInfo().getKeywords(),
data.getInfo().getKeywords())) {
mandelInfo("data not changed");
}
else {
try {
orig.getInfo().setLocation(data.getInfo().getLocation());
orig.getInfo().setKeywords(data.getInfo().getKeywords());
orig.write();
}
catch (IOException ex) {
mandelError("cannot write "+data.getFile()+": "+ex);
}
}
}
catch (IOException ex) {
mandelError("cannot read "+data.getFile()+": "+ex);
}
}
});
}
}
}
static String formatTime(long t)
{
StringWriter sw=new StringWriter();
PrintWriter pw=new PrintWriter(sw);
pw.printf("%d:%02d:%02d", t/3600,(t/60)%60,t%60);
return sw.toString();
}
}