View Javadoc

1   /*
2    *  
3    *  Fosstrak LLRP Commander (www.fosstrak.org)
4    * 
5    *  Copyright (C) 2008 ETH Zurich
6    *
7    *  This program is free software: you can redistribute it and/or modify
8    *  it under the terms of the GNU General Public License as published by
9    *  the Free Software Foundation, either version 3 of the License, or
10   *  (at your option) any later version.
11   *
12   *  This program is distributed in the hope that it will be useful,
13   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   *  GNU General Public License for more details.
16   *
17   *  You should have received a copy of the GNU General Public License
18   *  along with this program.  If not, see <http://www.gnu.org/licenses/> 
19   *
20   */
21  
22  package org.fosstrak.llrp.commander.dialogs;
23  
24  import org.eclipse.jface.dialogs.Dialog;
25  import org.eclipse.jface.window.Window;
26  import org.eclipse.swt.SWT;
27  import org.eclipse.swt.events.SelectionAdapter;
28  import org.eclipse.swt.events.SelectionEvent;
29  import org.eclipse.swt.events.SelectionListener;
30  import org.eclipse.swt.layout.GridData;
31  import org.eclipse.swt.layout.GridLayout;
32  import org.eclipse.swt.widgets.Button;
33  import org.eclipse.swt.widgets.Composite;
34  import org.eclipse.swt.widgets.Control;
35  import org.eclipse.swt.widgets.Event;
36  import org.eclipse.swt.widgets.Label;
37  import org.eclipse.swt.widgets.Listener;
38  import org.eclipse.swt.widgets.Shell;
39  import org.eclipse.swt.widgets.Text;
40  import org.fosstrak.llrp.client.Repository;
41  import org.fosstrak.llrp.commander.ResourceCenter;
42  import org.fosstrak.llrp.commander.views.MessageboxView;
43  
44  /**
45   * models a dialog to set the options for the message box view.
46   * @author sawielan
47   *
48   */
49  public class MessageboxViewOptionsDialog extends Dialog {
50  
51  	/** the refresh time. */
52  	private long refreshTime;
53  	
54  	/** the number of messages to be displayed. */
55  	private int numberOfMessages;
56  	
57  	/** the message-box view. */
58  	private MessageboxView mbv;
59  	
60  	/**
61  	 * create a new options dialog. 
62  	 * @param aShell Shell instance.
63  	 * @param mbv a link to the surrounding message box view.
64  	 */
65  	public MessageboxViewOptionsDialog(Shell aShell, MessageboxView mbv) {
66  		super(aShell);
67  		numberOfMessages = mbv.getDisplayNumMessages();
68  		refreshTime = ResourceCenter.getInstance().getMessageBoxRefresh().getRefreshTime();
69  		this.mbv = mbv;
70  	}
71  		
72  	/**
73  	 * Create GUI elements in the dialog.
74  	 */
75  	protected Control createContents(Composite parent) {
76  	
77  		GridLayout layout = new GridLayout();
78  		layout.numColumns = 3;
79  		
80  		GridData gridLabel = new GridData(GridData.FILL_BOTH);
81  		gridLabel.verticalSpan = 1;
82  		gridLabel.horizontalSpan = 1;
83  		gridLabel.widthHint = 250;
84  		gridLabel.heightHint = 20;
85  		
86  		GridData gridText = new GridData(GridData.FILL_BOTH);
87  		gridText.verticalSpan = 1;
88  		gridText.horizontalSpan = 2;
89  		gridText.widthHint = 150;
90  		gridText.heightHint = 20;
91  		
92  		parent.getShell().setLayout(layout);
93  		parent.getShell().setText("Messagebox View Options");
94  		
95  		Label lblRefreshTime = new Label(parent, SWT.NONE);
96  		lblRefreshTime.setText("Refresh Time (ms):");
97  		lblRefreshTime.setLayoutData(gridLabel);
98  		
99  		final Text txtRefreshTime = new Text(parent, SWT.BORDER);
100 		txtRefreshTime.setText(String.format("%d", getRefreshTime()));
101 		txtRefreshTime.setLayoutData(gridText);
102 	
103 		
104 		Label lblNMsg = new Label(parent, SWT.NONE);
105 		lblNMsg.setText(String.format("Number of Messages (of %d):",
106 				ResourceCenter.getInstance().getRepository().count(
107 						mbv.getSelectedAdapter(), 
108 						mbv.getSelectedReader())));
109 		lblNMsg.setLayoutData(gridLabel);
110 		
111 		final Text txtNMsg = new Text(parent, SWT.BORDER);
112 		txtNMsg.setText(String.format("%d", getNumberOfMessages()));
113 		txtNMsg.setLayoutData(gridText);
114 		
115 		// we need to create a special grid data object for the check-box 
116 		// without width-hint as otherwise the check-box will not be displayed 
117 		// in *nix ...
118 		GridData gridNoWidthHint = new GridData();
119 		gridNoWidthHint.horizontalSpan = 3;
120 		
121 		final Button allMsg = new Button(parent, SWT.CHECK);
122 		allMsg.setText("display all messages");
123 		allMsg.setLayoutData(gridNoWidthHint);
124 		allMsg.setSelection(false);
125 		if (Repository.RETRIEVE_ALL == getNumberOfMessages()) {
126 			allMsg.setSelection(true);
127 		}
128 		// add a selection listener that changes the value of the 
129 		// number of messages field whenever the selection is changed.
130 		allMsg.addSelectionListener(new SelectionListener() {
131 			public void widgetDefaultSelected(SelectionEvent arg0) {
132 				// ignore ...
133 			}
134 
135 			public void widgetSelected(SelectionEvent arg0) {
136 				if (allMsg.getSelection()) {
137 					txtNMsg.setText(String.format("%d", 
138 							Repository.RETRIEVE_ALL));
139 				} else {
140 					txtNMsg.setText(String.format("%d", 
141 							ResourceCenter.GET_MAX_MESSAGES));
142 				}
143 			}
144 			
145 		});		
146 		
147 		final Button btnOK = new Button(parent, SWT.PUSH);
148 		btnOK.setText("OK");
149 		btnOK.setFocus();
150 		btnOK.setLayoutData(gridLabel);
151 		
152 		btnOK.addSelectionListener(new SelectionAdapter() {
153 		      public void widgetSelected(SelectionEvent e) {
154 		        setRefreshTime(Long.parseLong(txtRefreshTime.getText()));
155 		        setNumberOfMessages(Integer.parseInt(txtNMsg.getText()));
156 		        
157 		        setReturnCode(Window.OK);
158 		        close();
159 		      }
160 		    });
161 		
162 		
163 		txtRefreshTime.addListener(SWT.Modify, new Listener() {
164 			public void handleEvent(Event event) {
165 				try {
166 					if ((txtRefreshTime.getText() == null) || (txtRefreshTime.getText().length() < 3)) {
167 						btnOK.setEnabled(false);
168 					} else {
169 						btnOK.setEnabled(true);
170 						setRefreshTime(Long.parseLong(txtRefreshTime.getText()));
171 					}
172 				} catch (Exception e) {
173 					btnOK.setEnabled(false);
174 				}
175 			}
176 		});
177 		
178 		txtNMsg.addListener(SWT.Modify, new Listener() {
179 			public void handleEvent(Event event) {
180 				try {
181 					final int n = (new Integer(txtNMsg.getText())).intValue();
182 					btnOK.setEnabled(true);
183 					setNumberOfMessages(n);
184 					if (Repository.RETRIEVE_ALL != n) {
185 						allMsg.setSelection(false);
186 					} else {
187 						allMsg.setSelection(true);
188 					}
189 				} catch (Exception e) {
190 					btnOK.setEnabled(false);
191 				}
192 			}
193 		});
194 		
195 
196 		
197 		final Button btnCancel = new Button(parent, SWT.PUSH);
198 		btnCancel.setText("Cancel");
199 		btnCancel.setLayoutData(gridLabel);
200 		btnCancel.addSelectionListener(new SelectionAdapter() {
201 		      public void widgetSelected(SelectionEvent e) {
202 		    	  setReturnCode(Window.CANCEL);
203 		    	  close();
204 		      }
205 		    });
206 		
207 		parent.pack();
208 		return parent;
209 	}
210 
211 	/**
212 	 * @param refreshTime the refreshTime to set
213 	 */
214 	public void setRefreshTime(long refreshTime) {
215 		this.refreshTime = refreshTime;
216 	}
217 
218 	/**
219 	 * @return the refreshTime
220 	 */
221 	public long getRefreshTime() {
222 		return refreshTime;
223 	}
224 
225 	/**
226 	 * @param numberOfMessages the numberOfMessages to set
227 	 */
228 	public void setNumberOfMessages(int numberOfMessages) {
229 		this.numberOfMessages = numberOfMessages;
230 	}
231 
232 	/**
233 	 * @return the numberOfMessages
234 	 */
235 	public int getNumberOfMessages() {
236 		return numberOfMessages;
237 	}
238 }