vertical-align: middle;
}
-.i-error {
- padding-left: 15px;
- background: #fff;
- border: 1px solid red;
+.i-errormessage {
+ padding: 7px;
+ background-color: #FFE0E0;
+ border: 1px solid #FFB0B0;
}
\ No newline at end of file
opacity: 0.3;
filter: Alpha(opacity=30);
}
-
.i-required-field-indicator {
padding-left:2px;
color: red;
}
+\r
+/* Field modified & error */\r
+input.i-modified,\r
+.i-richtextarea.i-modified iframe.gwt-RichTextArea,\r
+.i-checkbox.i-modified,\r
+.i-modified .i-select-option,\r
+.i-modified .i-textfield,\r
+.i-modified .i-datefield-calendarpanel,\r
+.i-modified .i-select-select,\r
+.i-modified .i-select-twincol-selections,\r
+.i-modified .i-select-twincol-options,\r
+.i-modified .i-slider-base {\r
+ background-color: #FFFFE0;\r
+}\r
+
+input.i-error,\r
+.i-richtextarea.i-error iframe.gwt-RichTextArea,\r
+.i-checkbox.i-error,\r
+.i-error .i-select-option,\r
+.i-error .i-textfield,\r
+.i-error .i-datefield-calendarpanel,\r
+.i-error .i-select-select,\r
+.i-error .i-select-twincol-selections,\r
+.i-error .i-select-twincol-options,\r
+.i-error .i-slider-base {\r
+ background-color: #FFE0E0;\r
+}
/**
* Context menu styles
vertical-align: middle;
}
-.i-error {
- padding-left: 15px;
- background: #fff;
- border: 1px solid red;
+.i-errormessage {
+ padding: 7px;
+ background-color: #FFE0E0;
+ border: 1px solid #FFB0B0;
}
/* body tag created by servlet */
.i-generated-body {
opacity: 0.3;
filter: Alpha(opacity=30);
}
-
.i-required-field-indicator {
padding-left:2px;
color: red;
}
+/* Field modified & error */
+input.i-modified,
+.i-richtextarea.i-modified iframe.gwt-RichTextArea,
+.i-checkbox.i-modified,
+.i-modified .i-select-option,
+.i-modified .i-textfield,
+.i-modified .i-datefield-calendarpanel,
+.i-modified .i-select-select,
+.i-modified .i-select-twincol-selections,
+.i-modified .i-select-twincol-options,
+.i-modified .i-slider-base {
+ background-color: #FFFFE0;
+}
+
+input.i-error,
+.i-richtextarea.i-error iframe.gwt-RichTextArea,
+.i-checkbox.i-error,
+.i-error .i-select-option,
+.i-error .i-textfield,
+.i-error .i-datefield-calendarpanel,
+.i-error .i-select-select,
+.i-error .i-select-twincol-selections,
+.i-error .i-select-twincol-options,
+.i-error .i-slider-base {
+ background-color: #FFE0E0;
+}
+
/**
* Context menu styles
*/
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;
import com.itmill.toolkit.terminal.gwt.client.ui.ContextMenu;
+import com.itmill.toolkit.terminal.gwt.client.ui.Field;
import com.itmill.toolkit.terminal.gwt.client.ui.IView;
import com.itmill.toolkit.terminal.gwt.client.ui.Notification;
import com.itmill.toolkit.terminal.gwt.client.ui.Notification.HideEvent;
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class ApplicationConnection {
+ public static final String MODIFIED_CLASSNAME = "i-modified";
+ public static final String ERROR_CLASSNAME = "i-error";
public static final String VAR_RECORD_SEPARATOR = "\u001e";
private void addVariableToQueue(String paintableId, String variableName,
String encodedValue, boolean immediate, char type) {
+ Paintable p = getPaintable(paintableId);
+ if (p instanceof Widget && p instanceof Field) {
+ // Mark as modified if it's a Field
+ ((Widget) p).addStyleName(MODIFIED_CLASSNAME);
+ }
final String id = paintableId + VAR_FIELD_SEPARATOR + variableName
+ VAR_FIELD_SEPARATOR + type;
for (int i = 1; i < pendingVariables.size(); i += 2) {
}
}
+ // add modified classname to Fields
+ if (component instanceof Field && uidl.hasAttribute("modified")) {
+ component.addStyleName(MODIFIED_CLASSNAME);
+ }
+ // add error classname to components w/ error
+ if (uidl.hasAttribute("error")) {
+ component.addStyleName(ERROR_CLASSNAME);
+ }
+
if (usePaintableIdsInDOM) {
DOM.setElementProperty(component.getElement(), "id", uidl.getId());
}
+ // TODO this should really build one string with all the classnames
+ // and setStyleName() once
+
return false;
}
import com.itmill.toolkit.terminal.gwt.client.ui.ToolkitOverlay;
public class ErrorMessage extends FlowPanel {
- public static final String CLASSNAME = "i-error";
+ public static final String CLASSNAME = "i-errormessage";
public ErrorMessage() {
super();
--- /dev/null
+/**\r
+ * \r
+ */\r
+package com.itmill.toolkit.terminal.gwt.client.ui;\r
+\r
+/**\r
+ * This interface indicates that the component is a Field (serverside), and\r
+ * wants (for instance) to automatically get the i-modified classname.\r
+ * \r
+ */\r
+public interface Field {\r
+\r
+}\r
import com.itmill.toolkit.terminal.gwt.client.UIDL;
public class ICheckBox extends com.google.gwt.user.client.ui.CheckBox implements
- Paintable {
+ Paintable, Field {
public static final String CLASSNAME = "i-checkbox";
import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
\r
-public class IDateField extends FlowPanel implements Paintable {\r
+public class IDateField extends FlowPanel implements Paintable, Field {\r
\r
public static final String CLASSNAME = "i-datefield";\r
\r
*
* TODO needs major refactoring (to be extensible etc)
*/
-public class IFilterSelect extends Composite implements Paintable,
+public class IFilterSelect extends Composite implements Paintable, Field,
KeyboardListener, ClickListener, FocusListener, Focusable {
public class FilterSelectSuggestion implements Suggestion, Command {
import com.google.gwt.user.client.ui.Widget;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
-public class INativeSelect extends IOptionGroupBase {
+public class INativeSelect extends IOptionGroupBase implements Field {
public static final String CLASSNAME = "i-select";
import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
\r
-abstract class IOptionGroupBase extends Composite implements Paintable,\r
+abstract class IOptionGroupBase extends Composite implements Paintable, Field,\r
ClickListener, ChangeListener, KeyboardListener {\r
\r
public static final String CLASSNAME_OPTION = "i-select-option";\r
import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
\r
-public class IPopupCalendar extends ITextualDate implements Paintable,\r
+public class IPopupCalendar extends ITextualDate implements Paintable, Field,\r
ClickListener, PopupListener {\r
\r
private final IButton calendarToggle;\r
import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
import com.itmill.toolkit.terminal.gwt.client.Util;\r
\r
-public class ISlider extends Widget implements Paintable,\r
+public class ISlider extends Widget implements Paintable, Field,\r
ContainerResizedListener {\r
\r
public static final String CLASSNAME = "i-slider";\r
* @author IT Mill Ltd.
*
*/
-public class ITextField extends TextBoxBase implements Paintable,
+public class ITextField extends TextBoxBase implements Paintable, Field,
ChangeListener, FocusListener {
/**
* The input node CSS classname.
*/
public static final String CLASSNAME = "i-textfield";
-
/**
* This CSS classname is added to the input node on hover.
*/
import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
import com.itmill.toolkit.terminal.gwt.client.Util;\r
\r
-public class ITextualDate extends IDateField implements Paintable,\r
+public class ITextualDate extends IDateField implements Paintable, Field,\r
ChangeListener, ContainerResizedListener, Focusable {\r
\r
private final ITextField text;\r
\r
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
// remove possibly added invalid value indication\r
- text.removeStyleName(ITextField.CLASSNAME + "-error");\r
+ removeStyleName("i-error");\r
\r
int origRes = currentResolution;\r
super.updateFromUIDL(uidl, client);\r
* \r
*/\r
protected void buildDate() {\r
-\r
+ removeStyleName("i-error");\r
// Create the initial text for the textfield\r
String dateText;\r
if (date != null) {\r
} else {\r
text.removeStyleName("i-readonly");\r
}\r
+\r
}\r
\r
public void onChange(Widget sender) {\r
date = DateTimeFormat.getFormat(getFormatString()).parse(\r
text.getText());\r
// remove possibly added invalid value indication\r
- text.removeStyleName(ITextField.CLASSNAME + "-error");\r
+ removeStyleName("i-error");\r
} catch (final Exception e) {\r
ApplicationConnection.getConsole().log(e.getMessage());\r
- text.addStyleName(ITextField.CLASSNAME + "-error");\r
+ addStyleName("i-error");\r
client.updateVariable(id, "lastInvalidDateString", text\r
.getText(), false);\r
date = null;\r
} else {\r
date = null;\r
// remove possibly added invalid value indication\r
- text.removeStyleName(ITextField.CLASSNAME + "-error");\r
+ removeStyleName("i-error");\r
}\r
\r
// Update variables\r
import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
import com.itmill.toolkit.terminal.gwt.client.Paintable;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
+import com.itmill.toolkit.terminal.gwt.client.ui.Field;
/**
* This class represents a basic text input field with one row.
* @author IT Mill Ltd.
*
*/
-public class IRichTextArea extends Composite implements Paintable,
+public class IRichTextArea extends Composite implements Paintable, Field,
ChangeListener, FocusListener {
/**