/*
* Created on 02-Oct-2005
* Created by Paul Gardner
* Copyright (C) 2005, 2006 Aelitis, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* AELITIS, SAS au capital de 46,603.30 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/
package org.gudy.azureus2.ui.swt;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.ui.swt.components.BufferedLabel;
import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;
public class
PropertiesWindow
{
private final Shell shell;
public
PropertiesWindow(
String object_name,
String[] keys,
String[] values )
{
shell = ShellFactory.createMainShell(SWT.APPLICATION_MODAL | SWT.TITLE | SWT.CLOSE |SWT.RESIZE );
shell.setText( MessageText.getString( "props.window.title", new String[]{ object_name }));
Utils.setShellIcon(shell);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
shell.setLayout(layout);
final ScrolledComposite scrollable = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.H_SCROLL );
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.horizontalSpan = 3;
scrollable.setLayoutData( gridData );
/*
* Main content composite where panels will be created
*/
final Composite main = new Composite(scrollable, SWT.NONE);
layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
//layout.verticalSpacing = 0;
layout.numColumns = 2;
main.setLayout(layout);
scrollable.setContent(main);
scrollable.setExpandVertical(true);
scrollable.setExpandHorizontal(true);
/*
* Re-adjust scrollbar setting when the window resizes
*/
scrollable.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
Rectangle r = scrollable.getClientArea();
scrollable.setMinSize(main.computeSize(r.width, SWT.DEFAULT ));
}
});
gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 3;
main.setLayoutData(gridData);
for (int i=0;i<keys.length;i++){
if ( keys[i] == null || values[i] == null ){
continue;
}
BufferedLabel msg_label = new BufferedLabel(main, SWT.NULL);
String msg;
String key = keys[i];
if ( key.startsWith( "!" ) && key.endsWith( "!" )){
msg = key.substring(1, key.length()-1 );
}else{
msg = MessageText.getString( key );
}
String value = values[i];
// hack to allow key values on their own
if ( value.equals( "<null>" )){
msg_label.setText( msg );
value = "";
}else{
msg_label.setText( msg + ":" );
}
gridData = new GridData();
gridData.verticalAlignment = GridData.VERTICAL_ALIGN_FILL;
msg_label.setLayoutData(gridData);
BufferedLabel val_label = new BufferedLabel(main,SWT.WRAP);
val_label.setText( value );
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalIndent = 6;
val_label.setLayoutData(gridData);
}
// separator
Label labelSeparator = new Label(shell,SWT.SEPARATOR | SWT.HORIZONTAL);
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = 3;
labelSeparator.setLayoutData(gridData);
// buttons
new Label(shell,SWT.NULL);
Button bOk = new Button(shell,SWT.PUSH);
Messages.setLanguageText(bOk, "Button.ok");
gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_END | GridData.HORIZONTAL_ALIGN_FILL);
gridData.grabExcessHorizontalSpace = true;
gridData.widthHint = 70;
bOk.setLayoutData(gridData);
bOk.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event e) {
close();
}
});
Button bCancel = new Button(shell,SWT.PUSH);
Messages.setLanguageText(bCancel, "Button.cancel");
gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
gridData.grabExcessHorizontalSpace = false;
gridData.widthHint = 70;
bCancel.setLayoutData(gridData);
bCancel.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event e) {
close();
}
});
shell.setDefaultButton( bOk );
shell.addListener(SWT.Traverse, new Listener() {
public void handleEvent(Event e) {
if ( e.character == SWT.ESC){
close();
}
}
});
if (!Utils.linkShellMetricsToConfig(shell, "PropWin")) {
int shell_width = 400;
int main_height = main.computeSize(shell_width, SWT.DEFAULT).y;
main_height = Math.max( main_height, 250 );
main_height = Math.min( main_height, 500 );
int shell_height = main_height + 50;
shell.setSize( shell_width, shell_height );
}
Utils.centreWindow( shell );
shell.open();
}
protected void
close()
{
if ( !shell.isDisposed()){
shell.dispose();
}
}
}