/*
* Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License, Version 1.0,
* which accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package net.rim.ejde.internal.ui.dialogs;
import net.rim.ejde.internal.util.Messages;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.internal.about.AboutTextManager;
import org.eclipse.ui.internal.about.AboutUtils;
/**
* New Version Detection Dialog
*
* @author tlai
*
*/
@SuppressWarnings("restriction")
public class NewVersionDetectionDialog extends MessageDialog implements SelectionListener {
private static final int DEFAULT_DAYS = 10;
private static final int TOTAL_DAYS = 15;
private String upgradeUrl;
private Button _snooze;
private Button _ignore;
private Button _ignoreAll;
private Button[] buttons;
private String[] buttonLabels;
private int defaultButtonIndex;
private int snoozeDays;
private Combo combo;
/**
* A constructor extends a constructor of MessageDialog
*
* @param parentShell
* @param dialogTitle
* @param dialogTitleImage
* @param dialogMessage
* @param dialogImageType
* @param dialogButtonLabels
* @param defaultIndex
*/
public NewVersionDetectionDialog( Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage,
String dialogUpgradeUrl, int dialogImageType, String[] dialogButtonLabels, int defaultIndex ) {
super( parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, 0 );
this.buttonLabels = dialogButtonLabels;
this.defaultButtonIndex = defaultIndex;
this.upgradeUrl = dialogUpgradeUrl;
}
protected Control createMessageArea( Composite composite ) {
Control parent = super.createMessageArea( composite );
final Label spacerLabel = new Label( composite, SWT.NONE );
spacerLabel.setLayoutData( new GridData() );
String titleLabel = Messages.BB_PLUG_IN_URL_LABEL;
Composite noteControl = createMessageComposite( (Composite) parent, titleLabel, upgradeUrl );
GridData gd = new GridData( GridData.HORIZONTAL_ALIGN_FILL );
noteControl.setLayoutData( gd );
return parent;
}
/**
* add a message into message area
*
* @param parent
* @param titleLabel
* @param upgradeUrl
* @return
*/
private Composite createMessageComposite( Composite parent, String titleLabel, String upgradeUrl ) {
Composite messageComposite = new Composite( parent, SWT.NONE );
GridLayout messageLayout = new GridLayout();
messageLayout.marginWidth = 0;
messageLayout.marginHeight = 0;
messageComposite.setLayout( messageLayout );
messageComposite.setLayoutData( new GridData( GridData.HORIZONTAL_ALIGN_FILL ) );
final Label noteLabel = new Label( messageComposite, SWT.BOLD );
noteLabel.setText( titleLabel );
noteLabel.setLayoutData( new GridData( GridData.VERTICAL_ALIGN_BEGINNING ) );
StyledText text = new StyledText( messageComposite, SWT.FULL_SELECTION | SWT.MULTI | SWT.WRAP | SWT.READ_ONLY );
text.setFont( parent.getFont() );
GridData data = new GridData( GridData.FILL, GridData.FILL, true, true );
text.setLayoutData( data );
text.setBackground( messageComposite.getBackground() );
text.setCursor( null );
text.setFocus();
AboutTextManager textManager = new AboutTextManager( text );
textManager.setItem( AboutUtils.scan( upgradeUrl ) );
return messageComposite;
}
/**
* override method
*
* @param parent
*/
protected void createButtonsForButtonBar( Composite parent ) {
buttons = new Button[ buttonLabels.length ];
String label = buttonLabels[ 0 ];
_snooze = createButton( parent, 0, label, false );
buttons[ 0 ] = _snooze;
( (GridLayout) parent.getLayout() ).numColumns++;
combo = new Combo( parent, SWT.Selection );
String[] days = new String[ TOTAL_DAYS ];
days[ 0 ] = "1 " + Messages.DAY;
for( int i = 1; i <= TOTAL_DAYS - 1; i++ ) {
days[ i ] = i + 1 + " " + Messages.DAYS;
}
combo.setItems( days );
combo.setText( Messages.DEFAULT_DAYS );
GridData data = new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING );
combo.setLayoutData( data );
combo.addSelectionListener( this );
combo.pack();
String label2 = buttonLabels[ 1 ];
_ignore = createButton( parent, 1, label2, false );
buttons[ 1 ] = _ignore;
String label3 = buttonLabels[ 2 ];
_ignoreAll = createButton( parent, 2, label3, false );
buttons[ 2 ] = _ignoreAll;
}
public void widgetDefaultSelected( SelectionEvent e ) {
// TODO Auto-generated method stub
}
public void widgetSelected( SelectionEvent e ) {
String[] temp = combo.getText().split( " " );
snoozeDays = Integer.parseInt( temp[ 0 ] );
}
public int getSnoozeDays() {
if( snoozeDays == 0 ) {
snoozeDays = DEFAULT_DAYS;
}
return snoozeDays;
}
}