Customizing MessageBox [message #548058] |
Tue, 20 July 2010 14:34 |
Albert Pikus Messages: 70 Registered: October 2009 |
Member |
|
|
Hi, everybody,
I wonder if it is possible to add custom controls to MessageBox. Although I subclassed MessageBox class, there seem to be no benefit from doing so.
What I would like to achieve is to create a standard message box, with appropriate style bits (e.g. SWT.ICON_INFORMATION | SWT.YES | SW.NO) and a custom control (e.g. a Button with style SWT.CHECK) between the dialog message and YES and NO buttons.
I also looked at jFace Dialogs, but these don't provide the standard appearance (at least not on Windows 7, where system dialogs have a darker gray panel on the lower side of the dialog).
Is this possible to achieve, or do I have to fake it by extending Dialog class and then put the desired system icon on some approximately correct position, by calling
Display.getCurrent().getSystemImage(SWT.ICON_INFORMATION);
?
Any advice is greatly appreciated, best regards,
Albert
|
|
|
Re: Customizing MessageBox [message #548247 is a reply to message #548058] |
Wed, 21 July 2010 09:06 |
budili Missing name Messages: 64 Registered: May 2010 |
Member |
|
|
Hi,
for this use case i would suggest you to subclass IconAndMessageDialog, heres an example from my source:
public class ErrorQuestionMessageDialog extends IconAndMessageDialog
{
public ErrorQuestionMessageDialog(final Shell parent)
{
super(parent);
}
@Override
protected final void configureShell(final Shell newShell)
{
super.configureShell(newShell);
newShell.setText(MainMessages.ERROR_QUESTION_DIALOG_TITLE);
}
public final void setMessage(final String message)
{
this.message = message;
}
@Override
protected final Control createDialogArea(final Composite parent)
{
createMessageArea(parent);
final Composite composite = new Composite(parent, SWT.NONE);
final GridData data = new GridData(GridData.FILL_BOTH);
data.horizontalSpan = 2;
composite.setLayoutData(data);
composite.setLayout(new FillLayout());
return composite;
}
@Override
protected final void createButtonsForButtonBar(final Composite parent)
{
createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL, true);
createButton(parent, IDialogConstants.NO_ID, IDialogConstants.NO_LABEL, false);
}
@Override
protected final void buttonPressed(final int buttonId)
{
setReturnCode(buttonId);
close();
}
@Override
protected final Image getImage()
{
return getErrorImage();
}
}
Thats a dialog, with the Error Icon and two buttons (Yes, No).
|
|
|
Re: Customizing MessageBox [message #548288 is a reply to message #548247] |
Wed, 21 July 2010 11:31 |
Albert Pikus Messages: 70 Registered: October 2009 |
Member |
|
|
Hi,
first I want to thank you for your quick answer.
I tried your suggestion, but this dialog doesn't look like SWT's MessageBox does. The problem is that all dialogs in my application are of MessageBox class and (on Windows 7 at least) look like this:
http://img29.imageshack.us/img29/4917/swtstandarddialog.png
which is pretty much close to native Windows 7 dialog look:
http://img716.imageshack.us/img716/35/windows7standard.png
On the other hand, dialog you suggested looks like this (and for that matter, Eclipse dialogs too) :
http://img37.imageshack.us/img37/3098/jfaceerrordialog.png
Although standard SWT org.eclipse.swt.widgets.MessageBox doesn't look perfectly native on Windows 7, it's close enough, while Eclipse dialogs don't look really native. This isn't the biggest issue at all (perhaps I could live with not perfectly native looking dialogs in my application), but the inconsistent look between SWT dialogs which I'm already using and those provided by jFace.
Best regards,
Albert
[Updated on: Wed, 21 July 2010 11:33] Report message to a moderator
|
|
|
Powered by
FUDForum. Page generated in 0.03203 seconds