1 /*******************************************************************************
2 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *******************************************************************************/
9 package org
.eclipse
.egit
.ui
.internal
.preferences
;
11 import org
.eclipse
.jface
.preference
.StringFieldEditor
;
12 import org
.eclipse
.jface
.resource
.JFaceResources
;
13 import org
.eclipse
.swt
.widgets
.Composite
;
14 import org
.eclipse
.swt
.widgets
.Text
;
16 class StorageSizeFieldEditor
extends StringFieldEditor
{
17 private static final int KB
= 1024;
19 private static final int MB
= 1024 * KB
;
21 private static final int GB
= 1024 * MB
;
23 private final int minValidValue
;
25 private final int maxValidValue
;
27 StorageSizeFieldEditor(String name
, String labelText
, Composite parent
,
29 init(name
, labelText
);
31 setEmptyStringAllowed(false);
32 setErrorMessage(JFaceResources
33 .getString("IntegerFieldEditor.errorMessage"));
34 createControl(parent
);
39 protected boolean checkState() {
40 final Text text
= getTextControl();
44 final String numberString
= text
.getText();
45 final int number
= parse(numberString
);
46 if (checkValue(number
)) {
55 * Verify this value is acceptable.
58 * the value parsed from the input.
59 * @return true if the value is OK; false otherwise.
61 protected boolean checkValue(final int number
) {
62 return number
>= minValidValue
&& number
<= maxValidValue
;
65 protected void doLoad() {
66 final Text text
= getTextControl();
68 int value
= getPreferenceStore().getInt(getPreferenceName());
69 text
.setText(format(value
));
73 protected void doLoadDefault() {
74 final Text text
= getTextControl();
76 int value
= getPreferenceStore().getDefaultInt(getPreferenceName());
77 text
.setText(format(value
));
82 protected void doStore() {
83 final Text text
= getTextControl();
85 final int v
= parse(text
.getText());
86 getPreferenceStore().setValue(getPreferenceName(), v
);
90 private String
format(int value
) {
91 if (value
> GB
&& (value
/ GB
) * GB
== value
)
92 return String
.valueOf(value
/ GB
) + " g";
93 if (value
> MB
&& (value
/ MB
) * MB
== value
)
94 return String
.valueOf(value
/ MB
) + " m";
95 if (value
> KB
&& (value
/ KB
) * KB
== value
)
96 return String
.valueOf(value
/ KB
) + " k";
97 return String
.valueOf(value
);
100 private int parse(final String str
) {
101 String n
= str
.trim();
106 switch (Character
.toLowerCase(n
.charAt(n
.length() - 1))) {
118 n
= n
.substring(0, n
.length() - 1).trim();
123 return mul
* Integer
.parseInt(n
);
124 } catch (NumberFormatException nfe
) {