r9133: a huge import of the qooxdoo infrastructure. I decided to import all the widge...
[kai/samba.git] / swat / style / qooxdoo / widgets / widgets / QxComboBox.js
1 /* Copyright (c): 2002-2005 (Germany): United Internet, 1&1, GMX, Schlund+Partner, Alturo */
2 function QxComboBox(){QxWidget.call(this);this.setWidth(120);this.setHeight(22);this.setBorder(QxBorder.presets.inset);this.setTabIndex(1);this._list=new QxList();this._list.set({top:0,left:0,bottom:0,right:0,overflow:"auto",timerCreate:false});this._manager=this._list.getManager();this._manager.set({multiSelection:false,dragSelection:false});this._manager.addEventListener("changeSelection",this._onchangeselection,this);this._popup=new QxPopup();this._popup.set({autoHide:false,width:150,height:180,timerCreate:false});this._popup.add(this._list);this._atom=new QxAtom();this._atom.set({width:null,top:3,left:4,right:16,tabIndex:-1});this._textfield=new QxTextField();this._textfield.setTop((new QxClient).isGecko()?1:0);this._textfield.set({left:4,right:16,tabIndex:-1});(this.isEditable()?this._atom:this._textfield).setStyleProperty("visibility","hidden");this._button=new QxWidget();this._button.set({top:0,bottom:0,width:16,right:0,border:QxBorder.presets.outset,canSelect:false});this._buttonimage = new QxImage("widgets/arrows/down.gif", 7, 4);this._buttonimage.set({top:5,left:2});this._button.add(this._buttonimage);this.add(this._textfield,this._atom,this._button);this.addEventListener("mousedown",this._g1);this.addEventListener("mouseup",this._g2);this.addEventListener("mouseover",this._onmouseover);this.addEventListener("keydown",this._g4);this.addEventListener("keypress",this._g6);this.addEventListener("mousewheel",this._onmousewheel);};QxComboBox.extend(QxWidget,"QxComboBox");QxComboBox.addProperty({name:"editable",type:Boolean,defaultValue:false,getAlias:"isEditable"});QxComboBox.addProperty({name:"selected",type:Object});QxComboBox.addProperty({name:"value",type:Object});QxComboBox.addProperty({name:"pagingInterval",type:Number,defaultValue:10});QxComboBox.addProperty({name:"maxListHeight",type:Number,defaultValue:180});proto._modifyParent=function(_b1,_b2,_b3,_b4){if(_b1){var p=_b1.getTopLevelWidget();if(p){p.add(this._popup);};}else if(_b2){var p=_b2.getTopLevelWidget();if(p){p.remove(this._popup);};};return QxWidget.prototype._modifyParent.call(this,_b1,_b2,_b3,_b4);};proto._modifySelected=function(_b1,_b2,_b3,_b4){this.setValue(_b1?_b1.getText():"",_b4);if(_b1){this._manager.setSelectedItems([_b1]);}else {this._manager.deselectAll();};return true;};proto._modifyValue=function(_b1,_b2,_b3,_b4){var vText=isValid(_b1)?_b1:"";if(this.isEditable()){this._textfield.setText(vText,_b4);}else {this._atom.setText(vText,_b4);};this.setSelected(vText==""?null:this.getList().findStringExact(vText),_b4);return true;};proto._modifyEditable=function(_b1,_b2,_b3,_b4){var l=this._atom;var t=this._textfield;if(this.isCreated()){l.setVisible(!_b1);t.setVisible(_b1);if(_b1){t.setText(this.getValue());}else {l.setText(this.getValue());};}else {if(_b1){l.setStyleProperty("visibility","hidden");t.removeStyleProperty("visibility");}else {t.setStyleProperty("visibility","hidden");l.removeStyleProperty("visibility");};};this._modifyEditablePost(_b1);return true;};if((new QxClient).isMshtml()){proto._modifyEditablePost=function(_b1){var t=this._textfield;if(_b1){t.setHtmlProperty("unselectable",false);t.setHtmlProperty("tabIndex",1);}else {t.setHtmlProperty("unselectable",true);t.setHtmlProperty("tabIndex",-1);};};}else if((new QxClient).isGecko()){proto._modifyEditablePost=function(_b1){var t=this._textfield;if(_b1){t.setStyleProperty("MozUserFocus","normal");t.setStyleProperty("userFocus","normal");}else {t.setStyleProperty("MozUserFocus","ignore");t.setStyleProperty("userFocus","ignore");};};}else {proto._modifyEditablePost=function(_b1){var t=this._textfield;if(_b1){t.setStyleProperty("userFocus","normal");t.setHtmlProperty("tabIndex",1);}else {t.setStyleProperty("userFocus","ignore");t.setHtmlProperty("tabIndex",-1);};};};proto.getList=function(){return this._list;};proto.getManager=function(){return this._manager;};proto.getPopup=function(){return this._popup;};proto.getAtom=function(){return this._atom;};proto.getTextField=function(){return this._textfield;};proto.getButton=function(){return this._button;};proto.getButtonImage=function(){return this._buttonimage;};proto.createPopup=function(){var p=this._popup;if(!p.isCreated()){p.setLeft(this.getComputedPageBoxLeft()+1);p.setTop(this.getComputedPageBoxBottom());p.setWidth(this.getComputedBoxWidth()-2);};var pa=this.getParent();var pt=pa?pa.getTopLevelWidget():null;if(pt){pt.add(p);};if(!p.isCreated()){p._createElement();p.setVisible(false);};};proto._togglePopup=function(){if(this._popup.getVisible()){this._closePopup();if(!this.getEditable()){this.setState("mark");};}else {this._openPopup();};};proto._openPopup=function(){var p=this._popup;var l=this._list;var m=this._manager;this.createPopup();var lh=l.getPreferredHeight();var mh=this.getMaxListHeight();if(lh>mh){p.setHeight(mh);l.setOverflow("scrollY");}else {p.setHeight(lh);l.setOverflow("hidden");};p.setLeft(this.getComputedPageBoxLeft()+1);p.setTop(this.getComputedPageBoxBottom());p.setWidth(this.getComputedBoxWidth()-2);if(this.isEditable()){var vFound=this._findMatchingEditItem();if(vFound){m.setSelectedItem(vFound);}else {var oldFireChange=m.getFireChange();m.setFireChange(false);m.deselectAll();m.setLeadItem(null);m.setFireChange(oldFireChange);};};var vCurrent=this._manager.getSelectedItem();if(vCurrent){m.setLeadItem(vCurrent);m.scrollItemIntoView(vCurrent);};this.setCapture(true);this.setState(null);p.setVisible(true);};proto._closePopup=function(){var vCurrent=this._manager.getSelectedItem();if(!(vCurrent==null&&this.getEditable())){this.setSelected(vCurrent);this._manager.setLeadItem(vCurrent);};this.setCapture(false);this._popup.setVisible(false);};proto._g1=function(e){var t=e.getActiveTarget();if(typeof t=="undefined"){return;};if(t instanceof QxImage){t=t.getParent();};if(t instanceof QxListItem){if(!t.isEnabled()){return;};t=t.getParent();};switch(t){case this._textfield:return;case this:case this._atom:case this._button:case this._buttonimage:this._togglePopup();this._button.setBorder(QxBorder.presets.inset);break;case this._list:if(this.getEditable()&&!this._findMatchingEditItem()){this.setSelected(null);};this._list._g1(e);if(e.getTarget()!=this._list){this._closePopup();};break;case this._popup:break;default:var sel=this.getSelected();this._manager.deselectAll();if(sel){this._manager.setSelectedItem(sel);};this._closePopup();break;};};proto._g2=function(e){this._button.setBorder(QxBorder.presets.outset);};proto._findMatchingEditItem=function(){return this._list.findStringExact(this._textfield.getElement().value);};proto._g4=function(e){var m=this._manager;if(this._popup.getVisible()){if(e.getKeyCode()==QxKeyEvent.keys.enter){this.setSelected(this._manager.getSelectedItem());this._closePopup();return;}else if(e.getKeyCode()==QxKeyEvent.keys.esc){m.setSelectedItem(this.getSelected());m.setLeadItem(this.getSelected());this._popup.setVisible(false);this.setCapture(false);return;};}else if(e.getKeyCode()==QxKeyEvent.keys.enter){this._openPopup();};if(!this._popup.getVisible()&&e.getKeyCode()==QxKeyEvent.keys.pageup){var vPrevious;var vTemp=this.getSelected();if(vTemp){var vInterval=this.getPagingInterval();do{vPrevious=vTemp;}while(--vInterval&&(vTemp=m.getPrevious(vPrevious)));}else {vPrevious=m.getLast();};this.setSelected(vPrevious);}else if(!this._popup.getVisible()&&e.getKeyCode()==QxKeyEvent.keys.pagedown){var vNext;var vTemp=this.getSelected();if(vTemp){var vInterval=this.getPagingInterval();do{vNext=vTemp;}while(--vInterval&&(vTemp=m.getNext(vNext)));}else {vNext=m.getFirst();};this.setSelected(vNext);}else if(!this.isEditable()||this._popup.getVisible()){this._list._g4(e);}else if(e.getKeyCode()==QxKeyEvent.keys.up||e.getKeyCode()==QxKeyEvent.keys.down){var vFound=this._findMatchingEditItem();if(vFound){m.setSelectedItem(vFound);m.setLeadItem(vFound);}else {m.deselectAll();m.setLeadItem(null);};this._list._g4(e);}else if(this._popup.isCreated()&&(e.getKeyCode()==QxKeyEvent.keys.pageup||e.getKeyCode()==QxKeyEvent.keys.pagedown)){var vFound=this._findMatchingEditItem();if(vFound){m.setSelectedItem(vFound);m.setLeadItem(vFound);}else {m.deselectAll();m.setLeadItem(null);};this._list._g4(e);};};proto._g6=function(e){if(!this.isEditable()||this._popup.getVisible()){this._list._g6(e);};};proto._onmouseover=function(e){var t=e.getTarget();if(t instanceof QxImage){t=t.getParent();};if(t instanceof QxListItem&&t.getEnabled()){var m=this._manager;m.deselectAll();m.setLeadItem(t);m.setSelectedItem(t);};};proto._onmousewheel=function(e){if(!this._popup.getVisible()){var toSelect;var isSelected=this.getSelected();if(e.getWheelDelta()<0){toSelect=isSelected?this._manager.getNext(isSelected):this._manager.getFirst();}else {toSelect=isSelected?this._manager.getPrevious(isSelected):this._manager.getLast();};if(toSelect){this.setSelected(toSelect);};};};proto._onchangeselection=function(e){if(!this._popup.getVisible()){this.setSelected(this._manager.getSelectedItem());};};proto._visualizeBlur=function(){this.setState(null);QxWidget.prototype._visualizeBlur.call(this);};proto.dispose=function(){if(this.getDisposed()){return;};if(this._list){this._list.dispose();this._list=null;};if(this._manager){this._manager.dispose();this._manager=null;};if(this._popup){this._popup.dispose();this._popup=null;};if(this._atom){this._atom.dispose();this._atom=null;};if(this._textfield){this._textfield.dispose();this._textfield=null;};if(this._button){this._button.dispose();this._button=null;};if(this._buttonimage){this._buttonimage.dispose();this._buttonimage=null;};return QxWidget.prototype.dispose.call(this);};