/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.ui.editor.print;
import java.awt.Dimension;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Scale;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.jboss.tools.jsf.messages.JSFUIMessages;
import org.jboss.tools.jsf.ui.editor.JSFEditor;
public class PrintPreviewDialog extends Dialog{
String message = ""; //$NON-NLS-1$
String result = null;
Shell dialog;
Text text;
Display display;
GraphicalViewer viewer;
JSFEditor editor;
Rectangle dialogSize = new Rectangle(0,0,640,480);
PagesView imageView;
Pages pages;
public class SliderPanel extends Composite{
Scale sc;
Label percent;
public SliderPanel(Composite parent, int style) {
super (parent, style);
GridLayout gl = new GridLayout();
gl.numColumns = 1;
this.setLayout(gl);
percent = new Label(this,SWT.CENTER);
percent.setText(String.valueOf((int)(PageFormat.printScale*100))+ JSFUIMessages.OF_NORMAL_SIZE);
GridData gd = new GridData();
gd.horizontalAlignment = GridData.CENTER;
percent.setLayoutData(gd);
gd = new GridData();
gd.horizontalAlignment = GridData.CENTER;
sc = new Scale(this,SWT.HORIZONTAL);
sc.setMinimum(30);
sc.setMaximum(300);
sc.setIncrement(10);
sc.setSelection((int)(pages.getScale()*100));
sc.setLayoutData(gd);
sc.addSelectionListener(new SelectionListener(){
public void widgetSelected(SelectionEvent e){
percent.setText(String.valueOf(sc.getSelection())+JSFUIMessages.OF_NORMAL_SIZE);
percent.redraw();
pages.setScale((double)sc.getSelection()/100);
PageFormat.printScale = (double)sc.getSelection()/100;
}
public void widgetDefaultSelected(SelectionEvent e){
}
});
}
}
public class ControlPanel extends Composite implements PaintListener{
Button all;
SliderPanel sp;
Button selectPage;
Button selectAll;
Button unselectAll;
SelectionListener allListener;
SelectionListener selectListener;
SelectionListener selectAllListener;
SelectionListener unSelectAllListener;
public ControlPanel(Composite parent, int style) {
super (parent, style);
GridLayout gl = new GridLayout();
gl.numColumns = 2;
gl.verticalSpacing = -12;
this.setLayout(gl);
GridData data = new GridData();
data.grabExcessHorizontalSpace=true;
data.horizontalAlignment = GridData.BEGINNING;
data.horizontalIndent = 8;
Label print = new Label(this,SWT.NONE);
print.setText(JSFUIMessages.PRINT);
print.setLayoutData(data);
data = new GridData();
data.horizontalAlignment = GridData.BEGINNING;
data.horizontalIndent = 8;
Label zoom = new Label(this,SWT.NONE);
zoom.setText(JSFUIMessages.ZOOM);
zoom.setLayoutData(data);
Group gr1 = new Group(this,SWT.SHADOW_ETCHED_IN);
gl = new GridLayout();
gl.numColumns = 2;
gr1.setLayout(gl);
data = new GridData();
data.grabExcessHorizontalSpace=true;
data.horizontalAlignment = GridData.FILL;
gr1.setLayoutData(data);
data = new GridData();
data.horizontalSpan = 2;
data.horizontalAlignment = GridData.FILL;
all = new Button(gr1,SWT.RADIO);
all.setText(JSFUIMessages.ZOOM);
all.setSelection(true);
all.setLayoutData(data);
selectPage = new Button(gr1,SWT.RADIO);
selectPage.setText(JSFUIMessages.SELECTED_PAGES);
data = new GridData();
data.horizontalSpan = 2;
data.horizontalAlignment = GridData.FILL;
selectPage.setLayoutData(data);
selectAll = new Button(gr1,SWT.PUSH);
selectAll.setText(JSFUIMessages.SELECT_ALL);
selectAll.setEnabled(false);
unselectAll = new Button(gr1,SWT.PUSH);
unselectAll.setText(JSFUIMessages.UNSELECT_ALL);
unselectAll.setEnabled(false);
Group gr2 = new Group(this,SWT.SHADOW_ETCHED_IN);
gl = new GridLayout();
gl.numColumns = 1;
gl.marginHeight = 3;
gl.verticalSpacing = 2;
gr2.setLayout(gl);
data = new GridData();
data.horizontalAlignment = GridData.END;
gr2.setLayoutData(data);
sp = new SliderPanel(gr2,SWT.NONE);
data = new GridData();
data.horizontalAlignment = GridData.END;
sp.setLayoutData(data);
allListener = new SelectionListener(){
public void widgetSelected(SelectionEvent e){
pages.selectAll();
selectAll.setEnabled(false);
unselectAll.setEnabled(false);
imageView.setSelectionEnabled(false);
}
public void widgetDefaultSelected(SelectionEvent e){}
};
all.addSelectionListener(allListener);
selectListener = new SelectionListener(){
public void widgetSelected(SelectionEvent e){
imageView.setSelectionEnabled(true);
pages.unSelectAll();
imageView.redraw();
}
public void widgetDefaultSelected(SelectionEvent e){}
};
selectPage.addSelectionListener(selectListener);
PropertyChangeListener pcl = new PropertyChangeListener(){
public void propertyChange(PropertyChangeEvent e){
if(e.getPropertyName().equals("selectAll")){ //$NON-NLS-1$
if(!all.getSelection()){
selectAll.setEnabled(false);
unselectAll.setEnabled(true);
imageView.redraw();
}
}
if(e.getPropertyName().equals("unSelectAll")){ //$NON-NLS-1$
if(!all.getSelection()){
unselectAll.setEnabled(false);
selectAll.setEnabled(true);
imageView.redraw();
}
}
if(e.getPropertyName().equals("PageSelection")){ //$NON-NLS-1$
if(!all.getSelection()){
unselectAll.setEnabled(true);
selectAll.setEnabled(true);
}
}
}
};
pages.addPropertyChangeListener(pcl);
selectAllListener = new SelectionListener(){
public void widgetSelected(SelectionEvent e){
pages.selectAll();
}
public void widgetDefaultSelected(SelectionEvent e){}
};
selectAll.addSelectionListener(selectAllListener);
unSelectAllListener = new SelectionListener(){
public void widgetSelected(SelectionEvent e){
pages.unSelectAll();
}
public void widgetDefaultSelected(SelectionEvent e){}
};
unselectAll.addSelectionListener(unSelectAllListener);
}
public void paintControl(PaintEvent pevent){
GC gc = pevent.gc;
gc.setForeground(new Color(ControlPanel.this.getDisplay(),0x00,0x00,0x00));
gc.drawLine(pevent.x,pevent.y,pevent.width,pevent.x);
gc.drawLine(pevent.x,pevent.y,pevent.x,pevent.height);
gc.drawLine(pevent.x,pevent.y+pevent.height-2,pevent.x+pevent.width,pevent.y+pevent.height-2);
gc.drawLine(pevent.x+pevent.width-2,pevent.y+pevent.height,pevent.x+pevent.width-2,pevent.y);
gc.setForeground(new Color(ControlPanel.this.getDisplay(),0xff,0xff,0xff));
gc.drawLine(pevent.x+1,pevent.y+1,pevent.width-1,pevent.x+1);
gc.drawLine(pevent.x+1,pevent.y+1,pevent.x+1,pevent.height-1);
gc.dispose();
}
}
public PrintPreviewDialog (Shell parent, int style) {
super (parent, style);
display = parent.getDisplay();
}
public PrintPreviewDialog (Shell parent) {
this (parent, SWT.APPLICATION_MODAL);
}
public String getMessage () {
return message;
}
public void setMessage (String string) {
message = string;
}
public String open () {
dialog = new Shell(getParent(), getStyle());
dialog.setText(JSFUIMessages.PRINT_PREVIEW);
GridLayout rl = new GridLayout();
dialog.setLayout(rl);
ControlPanel controlPanel = new ControlPanel(dialog,SWT.RESIZE);
GridData rd = new GridData();
rd.widthHint = 550;
rd.heightHint = 105;
controlPanel.setLayoutData(rd);
imageView = new PagesView(pages,new Dimension(550,370),dialog,SWT.RESIZE);
imageView.setBackground(new Color(dialog.getDisplay(),0xff,0xff,0xff));
GridData rd1 = new GridData();
rd1.widthHint = 550;
rd1.heightHint = 400;
imageView.setLayoutData(rd1);
Composite buttons = new Composite(dialog, SWT.END|SWT.RESIZE);
GridLayout grid = new GridLayout();
grid.numColumns = 2;
buttons.setLayout(grid);
GridData data2 = new GridData(GridData.HORIZONTAL_ALIGN_END);
buttons.setLayoutData(data2);
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END);
Button ok = new Button(buttons, SWT.PUSH&SWT.MULTI);
ok.setText(JSFUIMessages.PRINT);
data = new GridData();
data.widthHint = 75;
ok.setLayoutData(data);
ok.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
result = "ok";
if(editor.isBordersPaint()){
PrintPreviewDialog.this.pages.unSelectAll();
PrintPreviewDialog.this.pages.getSourcePage(0).setSelected(true);
}
dialog.dispose();
}
});
Button cancel = new Button(buttons, SWT.PUSH);
cancel.setText(JSFUIMessages.CLOSE);
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
data.widthHint = 75;
cancel.setLayoutData(data);
cancel.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
result="cancel";
dialog.dispose();
}
});
dialog.setDefaultButton(ok);
dialog.pack();
dialog.open();
while (!dialog.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
return result;
}
public void setPrintViewer(GraphicalViewer viewer){
this.viewer = viewer;
}
public void setEditor(JSFEditor editor){
this.editor = editor;
}
public GraphicalViewer getPrintViewer(){
return this.viewer;
}
public void setPages(Pages pages){
this.pages = pages;
}
public Pages getPages(){
return this.pages;
}
}