]> source.dussan.org Git - vaadin-framework.git/commitdiff
ISelect component now supports "twincol" style as well. Tweaks to ITextfield (setColu...
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Sat, 16 Jun 2007 08:25:22 +0000 (08:25 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Sat, 16 Jun 2007 08:25:22 +0000 (08:25 +0000)
svn changeset:1755/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IButton.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOptionGroup.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOptionGroupBase.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ISelect.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITextArea.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITextField.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITwinColSelect.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/public/component-themes/select/css/select.css
src/com/itmill/toolkit/terminal/gwt/public/component-themes/textfield/css/textfield.css

index 08a58fa62affe4109744ba2ecd4c1c03bdf4e1e6..6a3043c2cc0e6dc88b4160c5081d9acc4646ded5 100644 (file)
@@ -18,6 +18,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet;
 import com.itmill.toolkit.terminal.gwt.client.ui.ITextArea;
 import com.itmill.toolkit.terminal.gwt.client.ui.ITextField;
 import com.itmill.toolkit.terminal.gwt.client.ui.ITree;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect;
 import com.itmill.toolkit.terminal.gwt.client.ui.IUnknownComponent;
 import com.itmill.toolkit.terminal.gwt.client.ui.IVerticalLayout;
 import com.itmill.toolkit.terminal.gwt.client.ui.IWindow;
@@ -50,6 +51,8 @@ public class DefaultWidgetFactory implements WidgetFactory {
                if ("select".equals(tag)) {
                        if("optiongroup".equals(uidl.getStringAttribute("style")))
                                return new IOptionGroup();
+                       else if("twincol".equals(uidl.getStringAttribute("style")))
+                               return new ITwinColSelect();
                        return new ISelect();
                }
                if ("panel".equals(tag) || "component".equals(tag))
index 8273a75366dda3d3420449cd8a1f236132b5a50d..7868f9e63c4394c4ede416ca23c36baa8dfe460e 100644 (file)
@@ -8,12 +8,15 @@ import com.itmill.toolkit.terminal.gwt.client.Paintable;
 import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
 public class IButton extends Button implements Paintable {
+       
+       private static final String CLASSNAME = "i-button";
 
        String id;
 
        Client client;
 
        public IButton() {
+               setStyleName(CLASSNAME);
                addClickListener(new ClickListener() {
 
                        public void onClick(Widget sender) {
@@ -26,7 +29,8 @@ public class IButton extends Button implements Paintable {
 
        public void updateFromUIDL(UIDL uidl, Client client) {
 
-               // Ensure correct implementation
+               // Ensure correct implementation,
+               // but don't let container manage caption etc.
                if (client.updateComponent(this, uidl, false))
                        return;
 
index b85368ff8faf30158c5f70b341b19ac96927dd5a..64d59a6d41215918fb7046de17ac6a05c1fea6bf 100644 (file)
@@ -1,6 +1,8 @@
 package com.itmill.toolkit.terminal.gwt.client.ui;\r
 \r
+import java.util.HashMap;\r
 import java.util.Iterator;\r
+import java.util.Map;\r
 \r
 import com.google.gwt.user.client.ui.CheckBox;\r
 import com.google.gwt.user.client.ui.Panel;\r
@@ -14,9 +16,12 @@ public class IOptionGroup extends IOptionGroupBase {
        \r
        private Panel panel;\r
        \r
+       private Map optionsToKeys;\r
+       \r
        public IOptionGroup() {\r
                super(CLASSNAME);\r
                panel = (Panel) optionsContainer;\r
+               optionsToKeys = new HashMap();\r
        }\r
        \r
        /*\r
@@ -42,13 +47,6 @@ public class IOptionGroup extends IOptionGroupBase {
                }\r
        }\r
 \r
-       protected Object getSelectedItem() {\r
-               if(getSelectedItems().length > 0)\r
-                       return getSelectedItems()[0];\r
-               else\r
-                       return null;\r
-       }\r
-\r
        protected Object[] getSelectedItems() {\r
                return selectedKeys.toArray();\r
        }\r
index 571a803e96da9c27e04c15ac34de93a653dd9baf..dad379e166033aa77b4df80c63bb1116cd9c6f91 100644 (file)
@@ -1,20 +1,19 @@
 package com.itmill.toolkit.terminal.gwt.client.ui;\r
 \r
-import java.util.HashMap;\r
-import java.util.Map;\r
 import java.util.Set;\r
 \r
 import com.google.gwt.user.client.ui.ChangeListener;\r
 import com.google.gwt.user.client.ui.ClickListener;\r
 import com.google.gwt.user.client.ui.Composite;\r
 import com.google.gwt.user.client.ui.FlowPanel;\r
+import com.google.gwt.user.client.ui.KeyboardListener;\r
 import com.google.gwt.user.client.ui.Panel;\r
 import com.google.gwt.user.client.ui.Widget;\r
 import com.itmill.toolkit.terminal.gwt.client.Client;\r
 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, ClickListener, ChangeListener {\r
+abstract class IOptionGroupBase extends Composite implements Paintable, ClickListener, ChangeListener, KeyboardListener {\r
        \r
        static final String CLASSNAME_OPTION = "i-select-option";\r
 \r
@@ -24,8 +23,6 @@ abstract class IOptionGroupBase extends Composite implements Paintable, ClickLis
        \r
        protected boolean immediate;\r
        \r
-       protected Map optionsToKeys;\r
-       \r
        protected Set selectedKeys;\r
        \r
        protected boolean multiselect;\r
@@ -57,7 +54,6 @@ abstract class IOptionGroupBase extends Composite implements Paintable, ClickLis
                container.setStyleName(classname);\r
                immediate = false;\r
                multiselect = false;\r
-               optionsToKeys = new HashMap();\r
        }\r
        \r
        /* Call this if you wish to specify your own container \r
@@ -92,6 +88,8 @@ abstract class IOptionGroupBase extends Composite implements Paintable, ClickLis
                                newItemButton.setText("+");\r
                                newItemButton.addClickListener(this);\r
                                newItemField = new ITextField();\r
+                               newItemField.addKeyboardListener(this);\r
+                               newItemField.setColumns(16);\r
                        }\r
                        newItemField.setEnabled(!disabled && !readonly);\r
                        newItemButton.setEnabled(!disabled && !readonly);\r
@@ -108,8 +106,10 @@ abstract class IOptionGroupBase extends Composite implements Paintable, ClickLis
        }\r
 \r
        public void onClick(Widget sender) {\r
-               if(sender == newItemButton && !newItemField.getText().equals(""))\r
+               if(sender == newItemButton && !newItemField.getText().equals("")) {\r
                        client.updateVariable(id, "newitem", newItemField.getText(), true);\r
+                       newItemField.setText("");\r
+               }\r
        }\r
        \r
        public void onChange(Widget sender) {\r
@@ -120,10 +120,28 @@ abstract class IOptionGroupBase extends Composite implements Paintable, ClickLis
                }\r
        }\r
        \r
+       public void onKeyPress(Widget sender, char keyCode, int modifiers) {\r
+               if(sender == newItemField && keyCode==KeyboardListener.KEY_ENTER)\r
+                       newItemButton.click();\r
+       }\r
+       \r
+       public void onKeyUp(Widget sender, char keyCode, int modifiers) {\r
+               // Ignore, subclasses may override\r
+       }\r
+       \r
+       public void onKeyDown(Widget sender, char keyCode, int modifiers) {\r
+               // Ignore, subclasses may override\r
+       }\r
+       \r
        protected abstract void buildOptions(UIDL uidl);\r
        \r
        protected abstract Object[] getSelectedItems();\r
        \r
-       protected abstract Object getSelectedItem();\r
+       protected Object getSelectedItem() {\r
+               if(getSelectedItems().length > 0)\r
+                       return getSelectedItems()[0];\r
+               else\r
+                       return null;\r
+       }\r
 \r
 }\r
index 18a398dba27006302394b8f9fbeb145a8beed0ef..4e8228a6e22d45da8fd38d21854450152e46f822 100644 (file)
@@ -11,16 +11,20 @@ public class ISelect extends IOptionGroupBase {
        
        private static final String CLASSNAME = "i-select";
        
+       private static final int VISIBLE_COUNT = 10;
+       
        private ListBox select;
        
        public ISelect() {
                super(new ListBox(), CLASSNAME);
                select = (ListBox) optionsContainer;
                select.addChangeListener(this);
+               select.setStyleName(CLASSNAME+"-select");
        }
 
        protected void buildOptions(UIDL uidl) {
                select.setMultipleSelect(multiselect);
+               if(multiselect) select.setVisibleItemCount(VISIBLE_COUNT);
                select.setEnabled(!disabled && !readonly);
                select.clear();
                for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
@@ -33,20 +37,13 @@ public class ISelect extends IOptionGroupBase {
        
        protected Object[] getSelectedItems() {
                Vector selectedItemKeys = new Vector();
-               for(int i = 0; i < select.getItemCount();i++) {
+               for(int i = 0; i < select.getItemCount(); i++) {
                        if(select.isItemSelected(i))
                                selectedItemKeys.add(select.getValue(i));
                }
                return selectedItemKeys.toArray();
        }
 
-       protected Object getSelectedItem() {
-               if(getSelectedItems().length > 0)
-                       return getSelectedItems()[0];
-               else
-                       return null;
-       }
-
        public void onChange(Widget sender) {
                if(select.isMultipleSelect())
                        client.updateVariable(id, "selected", getSelectedItems(), immediate);
index 66e0b3a4b6d3de6e4c79ff1829e393a228a71018..ca7aef3a0917e2a79147cd46a7b28115f4b8cae0 100644 (file)
@@ -21,7 +21,7 @@ public class ITextArea extends ITextField {
                super.updateFromUIDL(uidl, client);\r
                \r
                if(uidl.hasAttribute("rows"))\r
-                       setHeight(uidl.getStringAttribute("rows")+"em");\r
+                       setRows(new Integer(uidl.getStringAttribute("rows")).intValue());\r
        }\r
        \r
 }\r
index 711fb3da0654fdb27b9e8e607ac3953e0da4f4d0..abdab4a21d6c432d31c10ea7f21d839213f34d6c 100644 (file)
@@ -56,7 +56,7 @@ public class ITextField extends TextBoxBase implements
                immediate  = uidl.getBooleanAttribute("immediate");
 
                if(uidl.hasAttribute("cols"))
-                       setWidth(uidl.getStringAttribute("cols")+"em");
+                       setColumns(new Integer(uidl.getStringAttribute("cols")).intValue());
                
                setText(uidl.getStringVariable("text"));
                
@@ -75,4 +75,33 @@ public class ITextField extends TextBoxBase implements
        public void onLostFocus(Widget sender) {
                removeStyleName(CLASSNAME_FOCUS);
        }
+       
+       public void setColumns(int columns) {
+               setColumns(getElement(), columns);
+       }
+       
+       public void setRows(int rows) {
+               setRows(getElement(), rows);
+       }
+       
+       private native void setColumns(Element e, int c) /*-{
+       try {
+               switch(e.tagName.toLowerCase()) {
+                       case "input":
+                               e.size = c;
+                               break;
+                       case "textarea":
+                               e.cols = c;
+                               break;
+                       default:;
+               }
+       } catch (e) {}
+       }-*/;
+       
+       private native void setRows(Element e, int r) /*-{
+       try {
+               if(e.tagName.toLowerCase() == "textarea")
+                       e.rows = r;
+       } catch (e) {}
+}-*/;
 }
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITwinColSelect.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITwinColSelect.java
new file mode 100644 (file)
index 0000000..2b9e2f3
--- /dev/null
@@ -0,0 +1,116 @@
+package com.itmill.toolkit.terminal.gwt.client.ui;\r
+\r
+import java.util.Iterator;\r
+import java.util.Vector;\r
+\r
+import com.google.gwt.user.client.ui.FlowPanel;\r
+import com.google.gwt.user.client.ui.HTML;\r
+import com.google.gwt.user.client.ui.ListBox;\r
+import com.google.gwt.user.client.ui.Panel;\r
+import com.google.gwt.user.client.ui.Widget;\r
+import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
+\r
+public class ITwinColSelect extends IOptionGroupBase {\r
+       \r
+       private static final String CLASSNAME = "i-select-twincol";\r
+       \r
+       private static final int VISIBLE_COUNT = 10;\r
+       \r
+       private ListBox options;\r
+       \r
+       private ListBox selections;\r
+       \r
+       private IButton add;\r
+       \r
+       private IButton remove;\r
+       \r
+       public ITwinColSelect() {\r
+               super(CLASSNAME);\r
+               options = new ListBox();\r
+               selections = new ListBox();\r
+               options.setVisibleItemCount(VISIBLE_COUNT);\r
+               selections.setVisibleItemCount(VISIBLE_COUNT);\r
+               options.setStyleName(CLASSNAME+"-options");\r
+               selections.setStyleName(CLASSNAME+"-selections");\r
+               Panel buttons = new FlowPanel();\r
+               buttons.setStyleName(CLASSNAME+"-buttons");\r
+               add = new IButton();\r
+               remove = new IButton();\r
+               add.setText(">>");\r
+               remove.setText("<<");\r
+               add.addClickListener(this);\r
+               remove.addClickListener(this);\r
+               Panel p = ((Panel)optionsContainer);\r
+               p.add(options);\r
+               buttons.add(add);\r
+               HTML br = new HTML("&nbsp;");\r
+               br.setStyleName(CLASSNAME+"-deco");\r
+               buttons.add(br);\r
+               buttons.add(remove);\r
+               p.add(buttons);\r
+               p.add(selections);\r
+       }\r
+\r
+       protected void buildOptions(UIDL uidl) {\r
+               boolean enabled = !disabled && !readonly;\r
+               options.setMultipleSelect(multiselect);\r
+               selections.setMultipleSelect(multiselect);\r
+               options.setEnabled(enabled);\r
+               selections.setEnabled(enabled);\r
+               add.setEnabled(enabled);\r
+               remove.setEnabled(enabled);\r
+               options.clear();\r
+               selections.clear();\r
+               for (Iterator i = uidl.getChildIterator(); i.hasNext();) {\r
+                       UIDL optionUidl = (UIDL)i.next();\r
+                       if(optionUidl.hasAttribute("selected")) {\r
+                               selections.addItem(optionUidl.getStringAttribute("caption"), optionUidl.getStringAttribute("key"));\r
+                       } else\r
+                               options.addItem(optionUidl.getStringAttribute("caption"), optionUidl.getStringAttribute("key"));\r
+               }\r
+       }\r
+\r
+       protected Object[] getSelectedItems() {\r
+               Vector selectedItemKeys = new Vector();\r
+               for(int i = 0; i < selections.getItemCount(); i++) {\r
+                       selectedItemKeys.add(selections.getValue(i));\r
+               }\r
+               return selectedItemKeys.toArray();\r
+       }\r
+       \r
+       private String[] getItemsToAdd() {\r
+               String[] selectedIndexes = new String[options.getItemCount()];\r
+               for(int i = 0; i < options.getItemCount(); i++) {\r
+                       if(options.isItemSelected(i))\r
+                               selectedIndexes[i] = options.getValue(i);\r
+               }\r
+               return selectedIndexes;\r
+       }\r
+       \r
+       private String[] getItemsToRemove() {\r
+               String[] selectedIndexes = new String[selections.getItemCount()];\r
+               for(int i = 0; i < selections.getItemCount(); i++) {\r
+                       if(selections.isItemSelected(i))\r
+                               selectedIndexes[i] = selections.getValue(i);\r
+               }\r
+               return selectedIndexes;\r
+       }\r
+       \r
+       public void onClick(Widget sender) {\r
+               super.onClick(sender);\r
+               if(sender == add) {\r
+                       String[] sel = getItemsToAdd();\r
+                       for(int i=0; i < sel.length; i++) {\r
+                               if(sel[i]!=null) selectedKeys.add(sel[i]);\r
+                       }\r
+                       client.updateVariable(id, "selected", selectedKeys.toArray(), true); // Immediate\r
+               } else if(sender == remove) {\r
+                       String[] sel = getItemsToRemove();\r
+                       for(int i=0; i < sel.length; i++) {\r
+                               if(sel[i]!=null) selectedKeys.remove(sel[i]);\r
+                       }\r
+                       client.updateVariable(id, "selected", selectedKeys.toArray(), true); // Immediate\r
+               }\r
+       }\r
+\r
+}\r
index 710bfa1de54de8f06aa1d4dcb347a90932257468..c53569dcf2615a551cf23c0e611f42444b537057 100644 (file)
 \r
 .i-select-optiongroup .i-select-option {\r
        display: block;\r
+}\r
+\r
+.i-select-select {\r
+       border: 1px solid #b6b6b6;\r
+       border-top-color: #9d9d9d;\r
+       border-bottom-color: #d6d6d6;\r
+       border-right-color: #d6d6d6;\r
+       display: block;\r
+}\r
+\r
+/* Twincol style */\r
+.i-select-twincol-options {\r
+       float: left;\r
+}\r
+\r
+.i-select-twincol-buttons {\r
+       float: left;\r
+       width: 40px;\r
+       text-align: center;\r
+}\r
+\r
+.i-select-twincol-buttons .i-select-twincol-deco {\r
+       display: inline; /* Needed to push the two buttons in stack */\r
+}\r
+\r
+.i-select-twincol .i-textfield {\r
+       display: block;\r
+       float: left;\r
+       clear: left;\r
+}\r
+\r
+.i-select-twincol .i-button {\r
+       display: block;\r
+       float: left;\r
+}\r
+\r
+.i-select-twincol-buttons .i-button {\r
+       display: inline;\r
+       float: none;\r
 }
\ No newline at end of file
index c1cf6d833429479e4fb3d8bec3b2a56823d0d37d..45f2b8dde31d9772a50094703d0d1e6b13ebef3e 100644 (file)
@@ -4,6 +4,7 @@
        background: #fff url(../img/bg.png) repeat-x;\r
        padding: 2px;\r
        border: 1px solid #b6b6b6;\r
+       border-top-color: #9d9d9d;\r
        border-bottom-color: #d6d6d6;\r
        border-right-color: #d6d6d6;\r
        margin: 0;\r