annotate dwtx/ui/internal/forms/MessageManager.d @ 75:5d489b9f966c

Fix continue porting
author Frank Benoit <benoit@tionex.de>
date Sat, 24 May 2008 05:11:16 +0200
parents
children e193036d82c9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
75
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2007 IBM Corporation and others.
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 ******************************************************************************/
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 module dwtx.ui.internal.forms.MessageManager;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.ui.internal.forms.Messages;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.DWT;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.custom.CLabel;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.widgets.Composite;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.widgets.Control;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.widgets.Label;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwtx.jface.dialogs.IMessageProvider;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwtx.jface.fieldassist.ControlDecoration;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwtx.jface.fieldassist.FieldDecoration;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwtx.jface.fieldassist.FieldDecorationRegistry;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwtx.ui.forms.IMessage;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwtx.ui.forms.IMessageManager;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwtx.ui.forms.IMessagePrefixProvider;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwtx.ui.forms.widgets.Hyperlink;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwtx.ui.forms.widgets.ScrolledForm;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.dwthelper.utils;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import tango.util.collection.ArraySeq;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import tango.util.collection.HashMap;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import tango.util.Convert;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 /**
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * @see IMessageManager
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 public class MessageManager : IMessageManager {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 private static final DefaultPrefixProvider DEFAULT_PREFIX_PROVIDER_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 private static final DefaultPrefixProvider DEFAULT_PREFIX_PROVIDER(){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 if( DEFAULT_PREFIX_PROVIDER_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 synchronized(MessageManager.classinfo){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 if( DEFAULT_PREFIX_PROVIDER_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 DEFAULT_PREFIX_PROVIDER_ = new DefaultPrefixProvider();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 return DEFAULT_PREFIX_PROVIDER_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 private ArraySeq!(Object) messages;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 private HashMap!(Object,Object) decorators;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 private bool autoUpdate = true;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 private ScrolledForm scrolledForm;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 private IMessagePrefixProvider prefixProvider;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 private int decorationPosition = DWT.LEFT | DWT.BOTTOM;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 private static FieldDecoration standardError_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 private static FieldDecoration standardError(){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 if( standardError_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 synchronized(MessageManager.classinfo){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 if( standardError_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 standardError_ = FieldDecorationRegistry
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 .getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 return standardError_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 private static FieldDecoration standardWarning_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 private static FieldDecoration standardWarning(){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 if( standardWarning_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 synchronized(MessageManager.classinfo){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 if( standardWarning_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 standardWarning_ = FieldDecorationRegistry
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 .getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_WARNING);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 return standardWarning_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 private static FieldDecoration standardInformation_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 private static FieldDecoration standardInformation(){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 if( standardInformation_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 synchronized(MessageManager.classinfo){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 if( standardInformation_ is null ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 standardInformation_ = FieldDecorationRegistry
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 .getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 return standardInformation_;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 private static const String[] SINGLE_MESSAGE_SUMMARY_KEYS = [
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 Messages.MessageManager_sMessageSummary,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 Messages.MessageManager_sMessageSummary,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 Messages.MessageManager_sWarningSummary,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 Messages.MessageManager_sErrorSummary ];
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 private static const String[] MULTIPLE_MESSAGE_SUMMARY_KEYS = [
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 Messages.MessageManager_pMessageSummary,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 Messages.MessageManager_pMessageSummary,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 Messages.MessageManager_pWarningSummary,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 Messages.MessageManager_pErrorSummary ];
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 static class Message : IMessage {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 Control control;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 Object data;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 Object key;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 String message;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 int type;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 String prefix;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 this(Object key, String message, int type, Object data) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 this.key = key;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 this.message = message;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 this.type = type;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 this.data = data;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 * @see dwtx.jface.dialogs.IMessage#getKey()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 public Object getKey() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 return key;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * @see dwtx.jface.dialogs.IMessageProvider#getMessage()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 public String getMessage() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 return message;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 * @see dwtx.jface.dialogs.IMessageProvider#getMessageType()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 public int getMessageType() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 return type;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 * @see dwtx.ui.forms.messages.IMessage#getControl()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 public Control getControl() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 return control;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 * @see dwtx.ui.forms.messages.IMessage#getData()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 public Object getData() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 return data;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 * @see dwtx.ui.forms.messages.IMessage#getPrefix()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 public String getPrefix() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 return prefix;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 static class DefaultPrefixProvider : IMessagePrefixProvider {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 public String getPrefix(Control c) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 Composite parent = c.getParent();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 Control[] siblings = parent.getChildren();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 for (int i = 0; i < siblings.length; i++) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 if (siblings[i] is c) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 // this is us - go backward until you hit
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 // a label-like widget
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 for (int j = i - 1; j >= 0; j--) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 Control label = siblings[j];
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 String ltext = null;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 if ( auto l = cast(Label)label ) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 ltext = l.getText();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 } else if ( auto hl = cast(Hyperlink)label ) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 ltext = hl.getText();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 } else if ( auto cl = cast(CLabel)label ) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 ltext = cl.getText();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 if (ltext !is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 if (!ltext.endsWith(":")) //$NON-NLS-1$
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 return ltext ~ ": "; //$NON-NLS-1$
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 return ltext ~ " "; //$NON-NLS-1$
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 break;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 return null;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 class ControlDecorator {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 private ControlDecoration decoration;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 private ArraySeq!(Message) controlMessages = new ArraySeq!(Message);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 private String prefix;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 this(Control control) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 this.decoration = new ControlDecoration(control, decorationPosition, scrolledForm.getBody());
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 public bool isDisposed() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 return decoration.getControl() is null;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 void updatePrefix() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 prefix = null;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 void updatePosition() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 Control control = decoration.getControl();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 decoration.dispose();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 this.decoration = new ControlDecoration(control, decorationPosition, scrolledForm.getBody());
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 update();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 String getPrefix() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 if (prefix is null)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 createPrefix();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 return prefix;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 private void createPrefix() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 if (prefixProvider is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 prefix = ""; //$NON-NLS-1$
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 return;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 prefix = prefixProvider.getPrefix(decoration.getControl());
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 if (prefix is null)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 // make a prefix anyway
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 prefix = ""; //$NON-NLS-1$
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 void addAll(ArraySeq!(Object) target) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 target.addAll(controlMessages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 void addMessage(Object key, String text, Object data, int type) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 Message message = this.outer.addMessage(getPrefix(), key,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 text, data, type, controlMessages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 message.control = decoration.getControl();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 update();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 bool removeMessage(Object key) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 Message message = findMessage(key, controlMessages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 if (message !is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 controlMessages.remove(message);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 update();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 return message !is null;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 bool removeMessages() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 if (controlMessages.isEmpty())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 return false;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 controlMessages.clear();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 update();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 return true;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 public void update() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 if (controlMessages.isEmpty()) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 decoration.setDescriptionText(null);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 decoration.hide();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 } else {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 auto peers = createPeers(controlMessages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 int type = (cast(IMessage) peers.get(0)).getMessageType();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 String description = createDetails(createPeers(peers), true);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 if (type is IMessageProvider.ERROR)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 decoration.setImage(standardError.getImage());
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 else if (type is IMessageProvider.WARNING)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 decoration.setImage(standardWarning.getImage());
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 else if (type is IMessageProvider.INFORMATION)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 decoration.setImage(standardInformation.getImage());
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 decoration.setDescriptionText(description);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 decoration.show();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 /**
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 * Creates a new instance of the message manager that will work with the
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 * provided form.
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 * @param scrolledForm
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * the form to control
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 public this(ScrolledForm scrolledForm) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 prefixProvider = DEFAULT_PREFIX_PROVIDER;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 messages = new ArraySeq!(Object);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 decorators = new HashMap!(Object,Object);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 this.scrolledForm = scrolledForm;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 * @see dwtx.ui.forms.IMessageManager#addMessage(java.lang.Object,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 * java.lang.String, int)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 public void addMessage(Object key, String messageText, Object data, int type) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 addMessage(null, key, messageText, data, type, messages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 * @see dwtx.ui.forms.IMessageManager#addMessage(java.lang.Object,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 * java.lang.String, int, dwt.widgets.Control)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 public void addMessage(Object key, String messageText, Object data,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 int type, Control control) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 ControlDecorator dec = cast(ControlDecorator) decorators.get(control);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 if (dec is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 dec = new ControlDecorator(control);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 decorators.put(control, dec);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 dec.addMessage(key, messageText, data, type);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 * @see dwtx.ui.forms.IMessageManager#removeMessage(java.lang.Object)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 public void removeMessage(Object key) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 Message message = findMessage(key, messages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 if (message !is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 messages.remove(message);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 * @see dwtx.ui.forms.IMessageManager#removeMessages()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 public void removeMessages() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 if (!messages.isEmpty()) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 messages.clear();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 * @see dwtx.ui.forms.IMessageManager#removeMessage(java.lang.Object,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 * dwt.widgets.Control)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 public void removeMessage(Object key, Control control) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 ControlDecorator dec = cast(ControlDecorator) decorators.get(control);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 if (dec is null)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 return;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 if (dec.removeMessage(key))
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 * @see dwtx.ui.forms.IMessageManager#removeMessages(dwt.widgets.Control)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 public void removeMessages(Control control) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 ControlDecorator dec = cast(ControlDecorator) decorators.get(control);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 if (dec !is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 if (dec.removeMessages()) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 if (isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 * @see dwtx.ui.forms.IMessageManager#removeAllMessages()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 public void removeAllMessages() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 bool needsUpdate = false;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 for (Enumeration enm = decorators.elements(); enm.hasMoreElements();) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 ControlDecorator control = cast(ControlDecorator) enm.nextElement();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 if (control.removeMessages())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 needsUpdate = true;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 if (!messages.isEmpty()) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 messages.clear();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 needsUpdate = true;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 if (needsUpdate && isAutoUpdate())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * Adds the message if it does not already exist in the provided list.
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 private Message addMessage(String prefix, Object key, String messageText,
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 Object data, int type, ArraySeq!(Object) list) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 Message message = findMessage(key, list);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 if (message is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 message = new Message(key, messageText, type, data);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 message.prefix = prefix;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 list.add(message);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 } else {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 message.message = messageText;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 message.type = type;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 message.data = data;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 return message;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 * Finds the message with the provided key in the provided list.
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 private Message findMessage(Object key, ArraySeq!(Object) list) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 for (int i = 0; i < list.size(); i++) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 Message message = cast(Message) list.get(i);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 if (message.getKey().equals(key))
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 return message;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 return null;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * @see dwtx.ui.forms.IMessageManager#update()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 public void update() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 // Update decorations
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 ControlDecorator dec = cast(ControlDecorator) iter.next();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 dec.update();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 // Update the form
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 updateForm();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 * Updates the container by rolling the messages up from the controls.
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 private void updateForm() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 ArrayList mergedList = new ArrayList();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 mergedList.addAll(messages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 for (Enumeration enm = decorators.elements(); enm.hasMoreElements();) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 ControlDecorator dec = cast(ControlDecorator) enm.nextElement();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 dec.addAll(mergedList);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 update(mergedList);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 private void update(ArraySeq!(Object) mergedList) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 pruneControlDecorators();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 if (scrolledForm.getForm().getHead().getBounds().height is 0 || mergedList.isEmpty() || mergedList is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 scrolledForm.setMessage(null, IMessageProvider.NONE);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 return;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 auto peers = createPeers(mergedList);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 int maxType = (cast(IMessage) peers.get(0)).getMessageType();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 String messageText;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 IMessage[] array = arraycast!(IMessage)( peers
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 .toArray());
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 if (peers.size() is 1 && (cast(Message) peers.get(0)).prefix is null) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 // a single message
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 IMessage message = cast(IMessage) peers.get(0);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 messageText = message.getMessage();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 scrolledForm.setMessage(messageText, maxType, array);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 } else {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 // show a summary message for the message
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 // and list of errors for the details
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 if (peers.size() > 1)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 messageText = Messages.bind(
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 MULTIPLE_MESSAGE_SUMMARY_KEYS[maxType],
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 [ to!(String)(peers.size()) ]); //$NON-NLS-1$
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 else
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 messageText = SINGLE_MESSAGE_SUMMARY_KEYS[maxType];
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 scrolledForm.setMessage(messageText, maxType, array);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 private static String getFullMessage(IMessage message) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 if (message.getPrefix() is null)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 return message.getMessage();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 return message.getPrefix() + message.getMessage();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 private ArraySeq!(Message) createPeers(ArraySeq!(Message) messages) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 auto peers = new ArraySeq!(Message);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 int maxType = 0;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 foreach( message; messages ){
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 if (message.type > maxType) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 peers.clear();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 maxType = message.type;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 if (message.type is maxType)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 peers.append(message);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 return peers;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 private String createDetails(ArraySeq!(Object) messages, bool excludePrefix) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 StringWriter sw = new StringWriter();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 PrintWriter out_ = new PrintWriter(sw);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 for (int i = 0; i < messages.size(); i++) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 if (i > 0)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 out_.println();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 IMessage m = cast(IMessage) messages.get(i);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 out_.print(excludePrefix ? m.getMessage() : getFullMessage(m));
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 out_.flush();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 return sw.toString();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 public static String createDetails(IMessage[] messages) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 if (messages is null || messages.length is 0)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 return null;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 StringWriter sw = new StringWriter();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 PrintWriter out_ = new PrintWriter(sw);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 for (int i = 0; i < messages.length; i++) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 if (i > 0)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 out_.println();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 out_.print(getFullMessage(messages[i]));
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 out_.flush();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 return sw.toString();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 * @see dwtx.ui.forms.IMessageManager#createSummary(dwtx.ui.forms.IMessage[])
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 public String createSummary(IMessage[] messages) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 return createDetails(messages);
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 private void pruneControlDecorators() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 ControlDecorator dec = cast(ControlDecorator) iter.next();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 if (dec.isDisposed())
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 iter.remove();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 * @see dwtx.ui.forms.IMessageManager#getMessagePrefixProvider()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 public IMessagePrefixProvider getMessagePrefixProvider() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 return prefixProvider;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 * @see dwtx.ui.forms.IMessageManager#setMessagePrefixProvider(dwtx.ui.forms.IMessagePrefixProvider)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 public void setMessagePrefixProvider(IMessagePrefixProvider provider) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 this.prefixProvider = provider;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602 for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 ControlDecorator dec = cast(ControlDecorator) iter.next();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 dec.updatePrefix();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 * @see dwtx.ui.forms.IMessageManager#getDecorationPosition()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 public int getDecorationPosition() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 return decorationPosition;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 * @see dwtx.ui.forms.IMessageManager#setDecorationPosition(int)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 public void setDecorationPosition(int position) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 this.decorationPosition = position;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 ControlDecorator dec = cast(ControlDecorator) iter.next();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 dec.updatePosition();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 * @see dwtx.ui.forms.IMessageManager#isAutoUpdate()
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 public bool isAutoUpdate() {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 return autoUpdate;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 /*
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 * (non-Javadoc)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 *
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 * @see dwtx.ui.forms.IMessageManager#setAutoUpdate(bool)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 */
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 public void setAutoUpdate(bool autoUpdate) {
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 bool needsUpdate = !this.autoUpdate && autoUpdate;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 this.autoUpdate = autoUpdate;
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 if (needsUpdate)
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 update();
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 }
5d489b9f966c Fix continue porting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 }