View | Details | Raw Unified | Return to bug 272794 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jface/dialogs/TitleAreaDialog.java (-21 / +137 lines)
Lines 28-33 Link Here
28
import org.eclipse.swt.layout.FormLayout;
28
import org.eclipse.swt.layout.FormLayout;
29
import org.eclipse.swt.layout.GridData;
29
import org.eclipse.swt.layout.GridData;
30
import org.eclipse.swt.layout.GridLayout;
30
import org.eclipse.swt.layout.GridLayout;
31
import org.eclipse.swt.widgets.Button;
31
import org.eclipse.swt.widgets.Composite;
32
import org.eclipse.swt.widgets.Composite;
32
import org.eclipse.swt.widgets.Control;
33
import org.eclipse.swt.widgets.Control;
33
import org.eclipse.swt.widgets.Display;
34
import org.eclipse.swt.widgets.Display;
Lines 89-96 Link Here
89
	private RGB titleAreaRGB;
90
	private RGB titleAreaRGB;
90
91
91
	Color titleAreaColor;
92
	Color titleAreaColor;
93
	
94
	private String description = ""; //$NON-NLS-1$
92
95
93
	private String message = ""; //$NON-NLS-1$
96
	private String message;
97
	
98
	private int messageType = IMessageProvider.NONE;
94
99
95
	private String errorMessage;
100
	private String errorMessage;
96
101
Lines 103-110 Link Here
103
	private Image messageImage;
108
	private Image messageImage;
104
109
105
	private boolean showingError = false;
110
	private boolean showingError = false;
111
	
112
	private boolean showingMessage = false;
106
113
107
	private boolean titleImageLargest = true;
114
	private boolean titleImageLargest = true;
115
	
116
	private boolean dialogComplete = true;
108
117
109
	private int messageLabelHeight;
118
	private int messageLabelHeight;
110
119
Lines 372-387 Link Here
372
				// we were previously showing an error
381
				// we were previously showing an error
373
				showingError = false;
382
				showingError = false;
374
			}
383
			}
375
			// show the message
384
			// show the description or message
376
			// avoid calling setMessage in case it is overridden to call
385
			// avoid calling setDescription or setMessage in case it is overridden to call
377
			// setErrorMessage,
386
			// setErrorMessage,
378
			// which would result in a recursive infinite loop
387
			// which would result in a recursive infinite loop
379
			if (message == null) // this should probably never happen since
388
			if (showingMessage) {
380
				// setMessage does this conversion....
389
				updateMessage(message);
381
				message = ""; //$NON-NLS-1$
390
				messageImageLabel.setImage(messageImage);
382
			updateMessage(message);
391
				setImageLabelVisible(messageImage != null);
383
			messageImageLabel.setImage(messageImage);
392
			}
384
			setImageLabelVisible(messageImage != null);
393
			else {
394
				updateMessage(description);
395
				messageImageLabel.setImage(null);
396
				setImageLabelVisible(false);
397
			}
385
		} else {
398
		} else {
386
			// Add in a space for layout purposes but do not
399
			// Add in a space for layout purposes but do not
387
			// change the instance variable
400
			// change the instance variable
Lines 492-497 Link Here
492
	 */
505
	 */
493
	public void setMessage(String newMessage, int newType) {
506
	public void setMessage(String newMessage, int newType) {
494
		Image newImage = null;
507
		Image newImage = null;
508
		messageType = newType;
495
		if (newMessage != null) {
509
		if (newMessage != null) {
496
			switch (newType) {
510
			switch (newType) {
497
			case IMessageProvider.NONE:
511
			case IMessageProvider.NONE:
Lines 518-540 Link Here
518
	 */
532
	 */
519
	private void showMessage(String newMessage, Image newImage) {
533
	private void showMessage(String newMessage, Image newImage) {
520
		// Any change?
534
		// Any change?
521
		if (message.equals(newMessage) && messageImage == newImage) {
535
		if ((message == null ? newMessage == null : message
536
				.equals(newMessage)) && messageImage == newImage) {
522
			return;
537
			return;
523
		}
538
		}
524
		message = newMessage;
539
		message = newMessage;
525
		if (message == null)
526
			message = "";//$NON-NLS-1$
527
		// Message string to be shown - if there is an image then add in
528
		// a space to the message for layout purposes
529
		String shownMessage = (newImage == null) ? message : " " + message; //$NON-NLS-1$  
530
		messageImage = newImage;
540
		messageImage = newImage;
531
		if (!showingError) {
541
		
532
			// we are not showing an error
542
		if (message == null) {
533
			updateMessage(shownMessage);
543
			if (showingMessage)
534
			messageImageLabel.setImage(messageImage);
544
				showingMessage = false;
535
			setImageLabelVisible(messageImage != null);
545
			if (!showingError) {
536
			layoutForNewMessage();
546
				updateMessage(description);
547
			}
537
		}
548
		}
549
		else {
550
			if (!showingMessage)
551
				showingMessage = true;
552
			// Message string to be shown - if there is an image then add in
553
			// a space to the message for layout purposes
554
			String shownMessage = (newImage == null) ? message : " " + message; //$NON-NLS-1$  
555
			if (!showingError) {
556
				// we are not showing an error
557
				updateMessage(shownMessage);
558
			}
559
		}
560
		messageImageLabel.setImage(messageImage);
561
		setImageLabelVisible(messageImage != null);
562
		layoutForNewMessage();
538
	}
563
	}
539
564
540
	/**
565
	/**
Lines 621-624 Link Here
621
		childData.bottom = new FormAttachment(100, 0);
646
		childData.bottom = new FormAttachment(100, 0);
622
		workArea.setLayoutData(childData);
647
		workArea.setLayoutData(childData);
623
	}
648
	}
649
	
650
	protected Control createButtonBar(Composite parent) {
651
		Control control = super.createButtonBar(parent);
652
		Button okButton = getButton(IDialogConstants.OK_ID);
653
		if (okButton != null) {
654
			okButton.setEnabled(dialogComplete);
655
		}
656
		return control;
657
	}
658
	
659
	/**
660
	 * Sets whether this dialog is complete.
661
	 * @param complete 
662
	 *             true if this dialog is complete, and and false otherwise
663
	 */
664
	public void setDialogComplete(boolean complete) {
665
		Button okButton = getButton(IDialogConstants.OK_ID);
666
		if (okButton != null)
667
			okButton.setEnabled(complete);
668
		dialogComplete = complete;
669
	}
670
	
671
	/**
672
	 * Returns the value of an internal state variable set by setPageComplete. 
673
	 * @return true if this dialog is complete, and false otherwise
674
	 */
675
	public boolean isDialogComplete() {
676
		return dialogComplete;
677
	}
678
	
679
	/**
680
	 * Sets this dialog description text.
681
	 * @param description 
682
	 *               the description text for this dialog page, or null if none
683
	 */
684
	public void setDescription(String description) {
685
		showDescription(description);
686
	}
687
	
688
	private void showDescription(String newDescription) {
689
		// Any change?
690
		if (description.equals(newDescription)) {
691
			return;
692
		}
693
		description = newDescription;
694
		if (description == null) {
695
			description = ""; //$NON-NLS-1$
696
		}
697
		
698
		if (!showingError && !showingMessage) {
699
			updateMessage(description);
700
			messageImageLabel.setImage(null);
701
			setImageLabelVisible(false);
702
			layoutForNewMessage();
703
		}
704
	}
705
	
706
	/**
707
	 * Returns this dialog description text.
708
	 * @return the description text for this dialog, or null if none
709
	 */
710
	public String getDescription() {
711
		return description;
712
	}
713
	
714
	/**
715
	 * Returns the current message for this dialog.
716
	 * A message provides instruction or information to the user, as opposed to an error message which should describe some error state.
717
	 * @return the message, or null if none
718
	 */
719
	public String getMessage() {
720
		return message;
721
	}
722
	
723
	/**
724
	 * Returns a value indicating if the message is a an information message, a warning message, or an error message.
725
	 * Returns one of NONE,INFORMATION, WARNING, or ERROR.
726
	 * @return the message type
727
	 */
728
	public int getMessageType() {
729
		return messageType;
730
	}
731
	
732
	/**
733
	 * Returns the current error message for this dialog. May be null to indicate no error message.
734
	 * An error message should describe some error state, as opposed to a message which may simply provide instruction or information to the user.
735
	 * @return the error message, or null if none
736
	 */
737
	public String getErrorMessage() {
738
		return errorMessage;
739
	}
624
}
740
}
(-)src/org/eclipse/jface/databinding/dialog/TitleAreaDialogSupport.java (-3 / +18 lines)
Lines 37-42 Link Here
37
import org.eclipse.core.runtime.Status;
37
import org.eclipse.core.runtime.Status;
38
import org.eclipse.jface.dialogs.IMessageProvider;
38
import org.eclipse.jface.dialogs.IMessageProvider;
39
import org.eclipse.jface.dialogs.TitleAreaDialog;
39
import org.eclipse.jface.dialogs.TitleAreaDialog;
40
import org.eclipse.swt.events.DisposeEvent;
41
import org.eclipse.swt.events.DisposeListener;
40
42
41
/**
43
/**
42
 * Connects the validation result from the given data binding context to the
44
 * Connects the validation result from the given data binding context to the
Lines 116-124 Link Here
116
	};
118
	};
117
	private IStatus currentStatus;
119
	private IStatus currentStatus;
118
120
119
	private TitleAreaDialogSupport(TitleAreaDialog dialogPage,
121
	private TitleAreaDialogSupport(TitleAreaDialog dialog,
120
			DataBindingContext dbc) {
122
			DataBindingContext dbc) {
121
		this.dialog = dialogPage;
123
		this.dialog = dialog;
122
		this.dbc = dbc;
124
		this.dbc = dbc;
123
		init();
125
		init();
124
	}
126
	}
Lines 127-138 Link Here
127
		aggregateStatus = new AggregateValidationStatus(dbc
129
		aggregateStatus = new AggregateValidationStatus(dbc
128
				.getValidationStatusProviders(),
130
				.getValidationStatusProviders(),
129
				AggregateValidationStatus.MAX_SEVERITY);
131
				AggregateValidationStatus.MAX_SEVERITY);
130
		aggregateStatus.addValueChangeListener(new IValueChangeListener() {
132
		final IValueChangeListener changeListener = new IValueChangeListener() {
131
			public void handleValueChange(ValueChangeEvent event) {
133
			public void handleValueChange(ValueChangeEvent event) {
132
134
133
				currentStatus = (IStatus) event.diff.getNewValue();
135
				currentStatus = (IStatus) event.diff.getNewValue();
134
				handleStatusChanged();
136
				handleStatusChanged();
135
			}
137
			}
138
		};
139
		aggregateStatus.addValueChangeListener(changeListener);
140
		dialog.getShell().addDisposeListener(new DisposeListener() {
141
			public void widgetDisposed(DisposeEvent e) {
142
				aggregateStatus.removeValueChangeListener(changeListener);
143
			}
136
		});
144
		});
137
		currentStatus = (IStatus) aggregateStatus.getValue();
145
		currentStatus = (IStatus) aggregateStatus.getValue();
138
		handleStatusChanged();
146
		handleStatusChanged();
Lines 213-218 Link Here
213
			dialog.setMessage(null);
221
			dialog.setMessage(null);
214
			dialog.setErrorMessage(null);
222
			dialog.setErrorMessage(null);
215
		}
223
		}
224
225
		boolean pageComplete = true;
226
		if (currentStatus != null) {
227
			pageComplete = !currentStatus.matches(IStatus.ERROR
228
					| IStatus.CANCEL);
229
		}
230
		dialog.setDialogComplete(pageComplete);
216
	}
231
	}
217
232
218
	private boolean currentStatusHasException() {
233
	private boolean currentStatusHasException() {

Return to bug 272794