only auto preview well known content type.

This commit is contained in:
Heng Sin Low 2010-07-27 12:19:13 +08:00
parent e73bb005d9
commit 1c3e73c240
1 changed files with 71 additions and 15 deletions

View File

@ -19,10 +19,14 @@ package org.adempiere.webui.panel;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.ListItem; import org.adempiere.webui.component.ListItem;
import org.adempiere.webui.component.Listbox; import org.adempiere.webui.component.Listbox;
import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.Panel;
@ -36,7 +40,7 @@ import org.compiere.util.Env;
import org.compiere.util.Msg; import org.compiere.util.Msg;
import org.zkoss.util.media.AMedia; import org.zkoss.util.media.AMedia;
import org.zkoss.util.media.Media; import org.zkoss.util.media.Media;
import org.zkoss.zk.au.AuScript; import org.zkoss.zk.au.out.AuScript;
import org.zkoss.zk.au.out.AuEcho; import org.zkoss.zk.au.out.AuEcho;
import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.EventListener;
@ -51,18 +55,16 @@ import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Fileupload; import org.zkoss.zul.Fileupload;
import org.zkoss.zul.Hbox; import org.zkoss.zul.Hbox;
import org.zkoss.zul.Iframe; import org.zkoss.zul.Iframe;
import org.zkoss.zul.Timer;
/** /**
* *
* @author Low Heng Sin * @author Low Heng Sin
* *
*/ */
@SuppressWarnings("deprecation")
public class WAttachment extends Window implements EventListener public class WAttachment extends Window implements EventListener
{ {
/** /**
* * generated serial version Id
*/ */
private static final long serialVersionUID = 2923895336573554570L; private static final long serialVersionUID = 2923895336573554570L;
@ -81,6 +83,8 @@ public class WAttachment extends Window implements EventListener
private Textbox text = new Textbox(); private Textbox text = new Textbox();
private Label sizeLabel = new Label();
private Listbox cbContent = new Listbox(); private Listbox cbContent = new Listbox();
private Button bDelete = new Button(); private Button bDelete = new Button();
@ -101,6 +105,17 @@ public class WAttachment extends Window implements EventListener
private int displayIndex; private int displayIndex;
private static List<String> autoPreviewList;
static {
autoPreviewList = new ArrayList<String>();
autoPreviewList.add("image/jpeg");
autoPreviewList.add("image/png");
autoPreviewList.add("image/gif");
autoPreviewList.add("text/plan");
autoPreviewList.add("application/pdf");
}
/** /**
* Constructor. * Constructor.
* loads Attachment, if ID <> 0 * loads Attachment, if ID <> 0
@ -142,10 +157,12 @@ public class WAttachment extends Window implements EventListener
{ {
setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
AEnv.showWindow(this); AEnv.showWindow(this);
displayData(0, true); if (autoPreview(0, true))
{
String script = "setTimeout(\"$e('"+ preview.getUuid() + "').src = $e('" + String script = "setTimeout(\"$e('"+ preview.getUuid() + "').src = $e('" +
preview.getUuid() + "').src\", 1000)"; preview.getUuid() + "').src\", 1000)";
Clients.response(new AuScript(null, script)); Clients.response(new AuScript(null, script));
}
//enter modal //enter modal
doModal(); doModal();
@ -195,6 +212,7 @@ public class WAttachment extends Window implements EventListener
toolBar.appendChild(bDelete); toolBar.appendChild(bDelete);
toolBar.appendChild(bSave); toolBar.appendChild(bSave);
toolBar.appendChild(cbContent); toolBar.appendChild(cbContent);
toolBar.appendChild(sizeLabel);
mainPanel.appendChild(northPanel); mainPanel.appendChild(northPanel);
Div div = new Div(); Div div = new Div();
@ -248,6 +266,8 @@ public class WAttachment extends Window implements EventListener
confirmPanel.appendChild(bRefresh); confirmPanel.appendChild(bRefresh);
confirmPanel.appendChild(bCancel); confirmPanel.appendChild(bCancel);
confirmPanel.appendChild(bOk); confirmPanel.appendChild(bOk);
text.setTooltiptext(Msg.getElement(Env.getCtx(), "TextMsg"));
} }
/** /**
@ -291,6 +311,32 @@ public class WAttachment extends Window implements EventListener
} // loadAttachment } // loadAttachment
private boolean autoPreview(int index, boolean immediate)
{
MAttachmentEntry entry = m_attachment.getEntry(index);
String mimeType = entry.getContentType();
byte[] data = entry.getData();
String unit = " KB";
BigDecimal size = new BigDecimal(data != null ? data.length : 0);
size = size.divide(new BigDecimal("1024"));
if (size.compareTo(new BigDecimal("1024")) >= 0)
{
size = size.divide(new BigDecimal("1024"));
unit = " MB";
}
size = size.setScale(2, BigDecimal.ROUND_HALF_EVEN);
sizeLabel.setText(size.toPlainString() + unit);
if (autoPreviewList.contains(mimeType))
{
displayData(index, immediate);
return true;
}
else
{
return false;
}
}
/** /**
* Display gif or jpg in gifPanel * Display gif or jpg in gifPanel
* @param index index * @param index index
@ -312,6 +358,12 @@ public class WAttachment extends Window implements EventListener
Clients.response(new AuEcho(this, "displaySelected", null)); Clients.response(new AuEcho(this, "displaySelected", null));
} // displayData } // displayData
private void clearPreview()
{
preview.setSrc(null);
preview.setVisible(false);
}
/** /**
* Use to refresh preview frame, don't call directly. * Use to refresh preview frame, don't call directly.
*/ */
@ -327,7 +379,8 @@ public class WAttachment extends Window implements EventListener
try try
{ {
AMedia media = new AMedia(entry.getName(), null, entry.getContentType(), entry.getData()); String contentType = entry.getContentType();
AMedia media = new AMedia(entry.getName(), null, contentType, entry.getData());
preview.setContent(media); preview.setContent(media);
preview.setVisible(true); preview.setVisible(true);
@ -421,7 +474,10 @@ public class WAttachment extends Window implements EventListener
// Show Data // Show Data
else if (e.getTarget() == cbContent) else if (e.getTarget() == cbContent)
displayData (cbContent.getSelectedIndex(), false); {
clearPreview();
autoPreview (cbContent.getSelectedIndex(), false);
}
// Load Attachment // Load Attachment
@ -434,9 +490,7 @@ public class WAttachment extends Window implements EventListener
saveAttachmentToFile(); saveAttachmentToFile();
else if (e.getTarget() == bRefresh) else if (e.getTarget() == bRefresh)
displayData(displayIndex, true); displayData(cbContent.getSelectedIndex(), true);
else if (e.getTarget() instanceof Timer)
displayData(displayIndex, true);
} // onEvent } // onEvent
@ -484,7 +538,8 @@ public class WAttachment extends Window implements EventListener
{ {
m_attachment.updateEntry(i, getMediaData(media)); m_attachment.updateEntry(i, getMediaData(media));
cbContent.setSelectedIndex(i); cbContent.setSelectedIndex(i);
displayData(cbContent.getSelectedIndex(), false); clearPreview();
autoPreview(cbContent.getSelectedIndex(), false);
m_change = true; m_change = true;
return; return;
} }
@ -495,7 +550,8 @@ public class WAttachment extends Window implements EventListener
{ {
cbContent.appendItem(media.getName(), media.getName()); cbContent.appendItem(media.getName(), media.getName());
cbContent.setSelectedIndex(cbContent.getItemCount()-1); cbContent.setSelectedIndex(cbContent.getItemCount()-1);
displayData(cbContent.getSelectedIndex(), false); autoPreview(cbContent.getSelectedIndex(), false);
clearPreview();
m_change = true; m_change = true;
} }
} // getFileName } // getFileName