001package gwt.material.design.client.ui; 002 003import com.google.gwt.core.client.Scheduler; 004import com.google.gwt.core.client.Scheduler.ScheduledCommand; 005 006/* 007 * #%L 008 * GwtMaterial 009 * %% 010 * Copyright (C) 2015 GwtMaterialDesign 011 * %% 012 * Licensed under the Apache License, Version 2.0 (the "License"); 013 * you may not use this file except in compliance with the License. 014 * You may obtain a copy of the License at 015 * 016 * http://www.apache.org/licenses/LICENSE-2.0 017 * 018 * Unless required by applicable law or agreed to in writing, software 019 * distributed under the License is distributed on an "AS IS" BASIS, 020 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 021 * See the License for the specific language governing permissions and 022 * limitations under the License. 023 * #L% 024 */ 025 026import com.google.gwt.dom.client.Document; 027import com.google.gwt.dom.client.Style; 028import com.google.gwt.editor.client.EditorError; 029import com.google.gwt.editor.client.HasEditorErrors; 030import com.google.gwt.editor.client.IsEditor; 031import com.google.gwt.editor.ui.client.adapters.ValueBoxEditor; 032import com.google.gwt.event.dom.client.*; 033import com.google.gwt.event.logical.shared.ValueChangeEvent; 034import com.google.gwt.event.logical.shared.ValueChangeHandler; 035import com.google.gwt.event.shared.HandlerRegistration; 036import com.google.gwt.i18n.client.AutoDirectionHandler; 037import com.google.gwt.i18n.shared.DirectionEstimator; 038import com.google.gwt.i18n.shared.HasDirectionEstimator; 039import com.google.gwt.uibinder.client.UiChild; 040import com.google.gwt.user.client.DOM; 041import com.google.gwt.user.client.ui.*; 042import com.google.gwt.user.client.ui.ValueBoxBase; 043import com.google.gwt.user.client.ui.ValueBoxBase.TextAlignment; 044import gwt.material.design.client.base.*; 045import gwt.material.design.client.base.error.*; 046import gwt.material.design.client.base.error.ErrorHandler; 047import gwt.material.design.client.base.mixin.BlankValidatorMixin; 048import gwt.material.design.client.base.mixin.CounterMixin; 049import gwt.material.design.client.base.mixin.ErrorHandlerMixin; 050import gwt.material.design.client.base.mixin.ErrorMixin; 051import gwt.material.design.client.base.mixin.FocusableMixin; 052import gwt.material.design.client.base.validator.HasBlankValidator; 053import gwt.material.design.client.base.validator.HasValidators; 054import gwt.material.design.client.base.validator.ValidationChangedEvent.ValidationChangedHandler; 055import gwt.material.design.client.base.validator.Validator; 056import gwt.material.design.client.constants.IconPosition; 057import gwt.material.design.client.constants.IconSize; 058import gwt.material.design.client.constants.IconType; 059import gwt.material.design.client.constants.InputType; 060import gwt.material.design.client.ui.html.Label; 061 062import java.util.List; 063 064//@formatter:off 065 066/** 067 * Material Text Box is an input field that accepts any text based string from user. 068 * <h3>UiBinder Usage:</h3> 069 * <pre> 070 *{@code <m:MaterialTextBox placeholder="First Name" />} 071 * </pre> 072 * @see <a href="http://gwt-material-demo.herokuapp.com/#forms">Material TextBox</a> 073 * @author kevzlou7979 074 * @author Ben Dol 075 * @author paulux84 076 */ 077//@formatter:on 078public class MaterialValueBox<T> extends MaterialWidget implements HasChangeHandlers, HasName, HasDirectionEstimator, 079 HasValue<T>, HasText, AutoDirectionHandler.Target, IsEditor<ValueBoxEditor<T>>, HasKeyUpHandlers, 080 HasClickHandlers, HasDoubleClickHandlers, HasAllDragAndDropHandlers, HasAllFocusHandlers, HasIcon, 081 HasAllGestureHandlers, HasAllKeyHandlers, HasAllMouseHandlers, HasAllTouchHandlers, HasError, HasInputType, 082 HasPlaceholder, HasCounter, HasEditorErrors<T>, HasErrorHandler, HasValidators<T>, HasBlankValidator { 083 084 private String placeholder; 085 private InputType type = InputType.TEXT; 086 087 private ValueBoxEditor<T> editor; 088 private Label label = new Label(); 089 private MaterialLabel lblName = new MaterialLabel(); 090 private MaterialLabel lblError = new MaterialLabel(); 091 private MaterialIcon icon = new MaterialIcon(); 092 093 private final CounterMixin<MaterialValueBox<T>> counterMixin = new CounterMixin<>(this); 094 private final ErrorHandlerMixin<T> errorHandlerMixin = new ErrorHandlerMixin<>(this); 095 private final BlankValidatorMixin<MaterialValueBox<T>, T> validatorMixin = new BlankValidatorMixin<>(this, 096 errorHandlerMixin.getErrorHandler()); 097 098 @Ignore protected ValueBoxBase<T> valueBoxBase; 099 100 private FocusableMixin<MaterialWidget> focusableMixin; 101 102 public class MaterialValueBoxEditor<V> extends ValueBoxEditor<V> { 103 private final ValueBoxBase<V> valueBoxBase; 104 105 private MaterialValueBoxEditor(ValueBoxBase<V> valueBoxBase) { 106 super(valueBoxBase); 107 this.valueBoxBase = valueBoxBase; 108 } 109 110 @Override 111 public void setValue(V value) { 112 super.setValue(value); 113 if (this.valueBoxBase.getText() != null && !this.valueBoxBase.getText().isEmpty()) { 114 label.addStyleName("active"); 115 } else { 116 label.removeStyleName("active"); 117 } 118 } 119 } 120 121 private final ErrorMixin<MaterialValueBox<T>, MaterialLabel> errorMixin = new ErrorMixin<>(this, lblError, valueBoxBase); 122 123 protected MaterialValueBox() { 124 super(Document.get().createDivElement(), "input-field"); 125 } 126 127 public MaterialValueBox(ValueBoxBase<T> tValueBox) { 128 this(); 129 initValueBox(tValueBox); 130 } 131 132 public void initValueBox(ValueBoxBase<T> tValueBox) { 133 valueBoxBase = tValueBox; 134 add(valueBoxBase); 135 } 136 137 @Deprecated 138 @UiChild(limit = 1) 139 public void addValueBox(ValueBoxBase<T> widget) { 140 initValueBox(widget); 141 } 142 143 @Override 144 public void onLoad() { 145 super.onLoad(); 146 147 String id = DOM.createUniqueId(); 148 valueBoxBase.getElement().setId(id); 149 label.getElement().setAttribute("for", id); 150 151 // Make valueBoxBase the primary focus target 152 getFocusableMixin().setUiObject(new MaterialWidget(valueBoxBase.getElement())); 153 } 154 155 /** 156 * Resets the textbox by removing its content and resetting visual state. 157 */ 158 public void clear() { 159 valueBoxBase.setText(""); 160 clearErrorOrSuccess(); 161 label.removeStyleName("active"); 162 } 163 164 public void removeErrorModifiers() { 165 valueBoxBase.getElement().removeClassName("valid"); 166 valueBoxBase.getElement().removeClassName("invalid"); 167 lblName.removeStyleName("green-text"); 168 lblName.removeStyleName("red-text"); 169 } 170 171 @Override 172 public String getText() { 173 return valueBoxBase.getText(); 174 } 175 176 @Override 177 public void setText(String text) { 178 valueBoxBase.setText(text); 179 180 if (text != null && !text.isEmpty()) { 181 label.addStyleName("active"); 182 } 183 } 184 185 @Override 186 public String getPlaceholder() { 187 return placeholder; 188 } 189 190 @Override 191 public void setPlaceholder(String placeholder) { 192 this.placeholder = placeholder; 193 if(getType() != InputType.SEARCH) { 194 lblName.setText(placeholder); 195 } else { 196 valueBoxBase.getElement().setAttribute("placeholder", placeholder); 197 } 198 } 199 200 @Override 201 public InputType getType() { 202 return type; 203 } 204 205 @Override 206 public void setType(InputType type) { 207 this.type = type; 208 valueBoxBase.getElement().setAttribute("type", type.getType()); 209 if(getType() != InputType.SEARCH) { 210 add(label); 211 label.add(lblName); 212 lblError.setVisible(false); 213 add(lblError); 214 } 215 } 216 217 @Override 218 public HandlerRegistration addValueChangeHandler(final ValueChangeHandler<T> handler) { 219 return valueBoxBase.addValueChangeHandler(new ValueChangeHandler<T>() { 220 @Override 221 public void onValueChange(ValueChangeEvent<T> event) { 222 if(isEnabled()){ 223 handler.onValueChange(event); 224 } 225 } 226 }); 227 } 228 229 @Override 230 public T getValue() { 231 return valueBoxBase.getValue(); 232 } 233 234 @Override 235 public void setValue(T value) { 236 setValue(value, false); 237 } 238 239 @Override 240 public void setValue(T value, boolean fireEvents) { 241 valueBoxBase.setValue(value, fireEvents); 242 243 if (value != null && !value.toString().isEmpty()) { 244 label.addStyleName("active"); 245 } 246 } 247 248 @Override 249 public void setDirection(Direction direction) { 250 valueBoxBase.setDirection(direction); 251 } 252 253 @Override 254 public Direction getDirection() { 255 return valueBoxBase.getDirection(); 256 } 257 258 @Override 259 public ValueBoxEditor<T> asEditor() { 260 if (editor == null) { 261 editor = new MaterialValueBoxEditor<>(valueBoxBase); 262 } 263 return editor; 264 } 265 266 @Override 267 public DirectionEstimator getDirectionEstimator() { 268 return valueBoxBase.getDirectionEstimator(); 269 } 270 271 @Override 272 public void setDirectionEstimator(boolean enabled) { 273 valueBoxBase.setDirectionEstimator(enabled); 274 } 275 276 @Override 277 public void setDirectionEstimator(DirectionEstimator directionEstimator) { 278 valueBoxBase.setDirectionEstimator(directionEstimator); 279 } 280 281 @Override 282 public void setName(String name) { 283 valueBoxBase.setName(name); 284 } 285 286 @Override 287 public String getName() { 288 return valueBoxBase.getName(); 289 } 290 291 @Override 292 public HandlerRegistration addKeyUpHandler(final KeyUpHandler handler) { 293 return addDomHandler(new KeyUpHandler() { 294 @Override 295 public void onKeyUp(KeyUpEvent event) { 296 if(isEnabled()){ 297 handler.onKeyUp(event); 298 } 299 } 300 }, KeyUpEvent.getType()); 301 } 302 303 @Override 304 public HandlerRegistration addChangeHandler(final ChangeHandler handler) { 305 return valueBoxBase.addChangeHandler(new ChangeHandler() { 306 @Override 307 public void onChange(ChangeEvent event) { 308 if(isEnabled()){ 309 handler.onChange(event); 310 } 311 } 312 }); 313 } 314 315 @Override 316 public HandlerRegistration addDragEndHandler(final DragEndHandler handler) { 317 return valueBoxBase.addDragEndHandler(new DragEndHandler() { 318 @Override 319 public void onDragEnd(DragEndEvent event) { 320 if(isEnabled()){ 321 handler.onDragEnd(event); 322 } 323 } 324 }); 325 } 326 327 @Override 328 public HandlerRegistration addDragEnterHandler(final DragEnterHandler handler) { 329 return valueBoxBase.addDragEnterHandler(new DragEnterHandler() { 330 @Override 331 public void onDragEnter(DragEnterEvent event) { 332 if(isEnabled()){ 333 handler.onDragEnter(event); 334 } 335 } 336 }); 337 } 338 339 @Override 340 public HandlerRegistration addDragLeaveHandler(final DragLeaveHandler handler) { 341 return valueBoxBase.addDragLeaveHandler(new DragLeaveHandler() { 342 @Override 343 public void onDragLeave(DragLeaveEvent event) { 344 if(isEnabled()) { 345 handler.onDragLeave(event); 346 } 347 } 348 }); 349 } 350 351 @Override 352 public HandlerRegistration addDragHandler(final DragHandler handler) { 353 return valueBoxBase.addDragHandler(new DragHandler() { 354 @Override 355 public void onDrag(final DragEvent event) { 356 if(isEnabled()){ 357 handler.onDrag(event); 358 } 359 } 360 }); 361 } 362 363 @Override 364 public HandlerRegistration addDragOverHandler(final DragOverHandler handler) { 365 return valueBoxBase.addDragOverHandler(new DragOverHandler() { 366 @Override 367 public void onDragOver(DragOverEvent event) { 368 if(isEnabled()){ 369 handler.onDragOver(event); 370 } 371 } 372 }); 373 } 374 375 @Override 376 public HandlerRegistration addDragStartHandler(final DragStartHandler handler) { 377 return valueBoxBase.addDragStartHandler(new DragStartHandler() { 378 @Override 379 public void onDragStart(DragStartEvent event) { 380 if(isEnabled()){ 381 handler.onDragStart(event); 382 } 383 } 384 }); 385 } 386 387 @Override 388 public HandlerRegistration addDropHandler(final DropHandler handler) { 389 return valueBoxBase.addDropHandler(new DropHandler() { 390 @Override 391 public void onDrop(DropEvent event) { 392 if(isEnabled()){ 393 handler.onDrop(event); 394 } 395 } 396 }); 397 } 398 399 @Override 400 public HandlerRegistration addFocusHandler(final FocusHandler handler) { 401 return valueBoxBase.addFocusHandler(new FocusHandler() { 402 @Override 403 public void onFocus(FocusEvent event) { 404 if(isEnabled()){ 405 handler.onFocus(event); 406 } 407 } 408 }); 409 } 410 411 @Override 412 public HandlerRegistration addBlurHandler(final BlurHandler handler) { 413 return valueBoxBase.addBlurHandler(new BlurHandler() { 414 @Override 415 public void onBlur(BlurEvent event) { 416 if(isEnabled()){ 417 handler.onBlur(event); 418 } 419 } 420 }); 421 } 422 423 @Override 424 public HandlerRegistration addGestureStartHandler(final GestureStartHandler handler) { 425 return valueBoxBase.addGestureStartHandler(new GestureStartHandler() { 426 @Override 427 public void onGestureStart(GestureStartEvent event) { 428 if(isEnabled()){ 429 handler.onGestureStart(event); 430 } 431 } 432 }); 433 } 434 435 @Override 436 public HandlerRegistration addGestureChangeHandler(final GestureChangeHandler handler) { 437 return valueBoxBase.addGestureChangeHandler(new GestureChangeHandler() { 438 @Override 439 public void onGestureChange(GestureChangeEvent event) { 440 if(isEnabled()){ 441 handler.onGestureChange(event); 442 } 443 } 444 }); 445 } 446 447 @Override 448 public HandlerRegistration addGestureEndHandler(final GestureEndHandler handler) { 449 return valueBoxBase.addGestureEndHandler(new GestureEndHandler() { 450 @Override 451 public void onGestureEnd(GestureEndEvent event) { 452 if(isEnabled()){ 453 handler.onGestureEnd(event); 454 } 455 } 456 }); 457 } 458 459 @Override 460 public HandlerRegistration addKeyDownHandler(final KeyDownHandler handler) { 461 return valueBoxBase.addKeyDownHandler(new KeyDownHandler() { 462 @Override 463 public void onKeyDown(KeyDownEvent event) { 464 if(isEnabled()){ 465 handler.onKeyDown(event); 466 } 467 } 468 }); 469 } 470 471 @Override 472 public HandlerRegistration addKeyPressHandler(final KeyPressHandler handler) { 473 return valueBoxBase.addKeyPressHandler(new KeyPressHandler() { 474 @Override 475 public void onKeyPress(KeyPressEvent event) { 476 if(isEnabled()){ 477 handler.onKeyPress(event); 478 } 479 } 480 }); 481 } 482 483 @Override 484 public HandlerRegistration addMouseDownHandler(final MouseDownHandler handler) { 485 return valueBoxBase.addMouseDownHandler(new MouseDownHandler() { 486 @Override 487 public void onMouseDown(MouseDownEvent event) { 488 if(isEnabled()){ 489 handler.onMouseDown(event); 490 } 491 } 492 }); 493 } 494 495 @Override 496 public HandlerRegistration addMouseUpHandler(final MouseUpHandler handler) { 497 return valueBoxBase.addMouseUpHandler(new MouseUpHandler() { 498 @Override 499 public void onMouseUp(MouseUpEvent event) { 500 if(isEnabled()){ 501 handler.onMouseUp(event); 502 } 503 } 504 }); 505 } 506 507 @Override 508 public HandlerRegistration addMouseOutHandler(final MouseOutHandler handler) { 509 return valueBoxBase.addMouseOutHandler(new MouseOutHandler() { 510 @Override 511 public void onMouseOut(MouseOutEvent event) { 512 if(isEnabled()){ 513 handler.onMouseOut(event); 514 } 515 } 516 }); 517 } 518 519 @Override 520 public HandlerRegistration addMouseOverHandler(final MouseOverHandler handler) { 521 return valueBoxBase.addMouseOverHandler(new MouseOverHandler() { 522 @Override 523 public void onMouseOver(MouseOverEvent event) { 524 if(isEnabled()){ 525 handler.onMouseOver(event); 526 } 527 } 528 }); 529 } 530 531 @Override 532 public HandlerRegistration addMouseMoveHandler(final MouseMoveHandler handler) { 533 return valueBoxBase.addMouseMoveHandler(new MouseMoveHandler() { 534 @Override 535 public void onMouseMove(MouseMoveEvent event) { 536 if(isEnabled()){ 537 handler.onMouseMove(event); 538 } 539 } 540 }); 541 } 542 543 @Override 544 public HandlerRegistration addMouseWheelHandler(final MouseWheelHandler handler) { 545 return valueBoxBase.addMouseWheelHandler(new MouseWheelHandler() { 546 @Override 547 public void onMouseWheel(MouseWheelEvent event) { 548 if(isEnabled()){ 549 handler.onMouseWheel(event); 550 } 551 } 552 }); 553 } 554 555 @Override 556 public HandlerRegistration addTouchStartHandler(final TouchStartHandler handler) { 557 return valueBoxBase.addTouchStartHandler(new TouchStartHandler() { 558 @Override 559 public void onTouchStart(TouchStartEvent event) { 560 if(isEnabled()){ 561 handler.onTouchStart(event); 562 } 563 } 564 }); 565 } 566 567 @Override 568 public HandlerRegistration addTouchMoveHandler(final TouchMoveHandler handler) { 569 return valueBoxBase.addTouchMoveHandler(new TouchMoveHandler() { 570 @Override 571 public void onTouchMove(TouchMoveEvent event) { 572 if(isEnabled()){ 573 handler.onTouchMove(event); 574 } 575 } 576 }); 577 } 578 579 @Override 580 public HandlerRegistration addTouchEndHandler(final TouchEndHandler handler) { 581 return valueBoxBase.addTouchEndHandler(new TouchEndHandler() { 582 @Override 583 public void onTouchEnd(TouchEndEvent event) { 584 if(isEnabled()){ 585 handler.onTouchEnd(event); 586 } 587 } 588 }); 589 } 590 591 @Override 592 public HandlerRegistration addTouchCancelHandler(final TouchCancelHandler handler) { 593 return valueBoxBase.addTouchCancelHandler(new TouchCancelHandler() { 594 @Override 595 public void onTouchCancel(TouchCancelEvent event) { 596 if(isEnabled()){ 597 handler.onTouchCancel(event); 598 } 599 } 600 }); 601 } 602 603 @Override 604 public HandlerRegistration addDoubleClickHandler(final DoubleClickHandler handler) { 605 return valueBoxBase.addDoubleClickHandler(new DoubleClickHandler() { 606 @Override 607 public void onDoubleClick(DoubleClickEvent event) { 608 if(isEnabled()){ 609 handler.onDoubleClick(event); 610 } 611 } 612 }); 613 } 614 615 @Override 616 public HandlerRegistration addClickHandler(final ClickHandler handler) { 617 return valueBoxBase.addClickHandler(new ClickHandler() { 618 @Override 619 public void onClick(ClickEvent event) { 620 if(isEnabled()){ 621 handler.onClick(event); 622 } 623 } 624 }); 625 } 626 627 @Override 628 public void setError(String error) { 629 errorMixin.setError(error); 630 631 removeErrorModifiers(); 632 lblName.setStyleName("red-text"); 633 valueBoxBase.getElement().addClassName("invalid"); 634 } 635 636 @Override 637 public void setSuccess(String success) { 638 errorMixin.setSuccess(success); 639 640 removeErrorModifiers(); 641 lblName.setStyleName("green-text"); 642 valueBoxBase.getElement().addClassName("valid"); 643 } 644 645 @Override 646 public void setHelperText(String helperText) { 647 errorMixin.setHelperText(helperText); 648 } 649 650 @Override 651 public void clearErrorOrSuccess() { 652 errorMixin.clearErrorOrSuccess(); 653 removeErrorModifiers(); 654 } 655 656 @Override 657 public MaterialIcon getIcon() { 658 return icon; 659 } 660 661 @Override 662 public void setIconType(IconType iconType) { 663 icon.setIconType(iconType); 664 icon.setIconPrefix(true); 665 lblError.setPaddingLeft(44); 666 insert(icon, 0); 667 } 668 669 @Override 670 public void setIconPosition(IconPosition position) { 671 icon.setIconPosition(position); 672 } 673 674 @Override 675 public void setIconSize(IconSize size) { 676 icon.setIconSize(size); 677 } 678 679 @Override 680 public void setIconFontSize(double size, Style.Unit unit) { 681 icon.setIconFontSize(size, unit); 682 } 683 684 @Override 685 public void setIconColor(String iconColor) { 686 icon.setIconColor(iconColor); 687 } 688 689 @Override 690 public void setIconPrefix(boolean prefix) { 691 icon.setIconPrefix(prefix); 692 } 693 694 @Override 695 public boolean isIconPrefix() { 696 return icon.isIconPrefix(); 697 } 698 699 @Override 700 public void setLength(int length) { 701 counterMixin.setLength(length); 702 } 703 704 @Override 705 public int getLength() { 706 return counterMixin.getLength(); 707 } 708 709 @Ignore 710 public ValueBoxBase<T> asValueBoxBase() { 711 return valueBoxBase; 712 } 713 714 @Override 715 public void showErrors(List<EditorError> errors) { 716 errorHandlerMixin.showErrors(errors); 717 } 718 719 @Override 720 public int getTabIndex() { 721 return valueBoxBase.getTabIndex(); 722 } 723 724 @Override 725 public void setAccessKey(char key) { 726 valueBoxBase.setAccessKey(key); 727 } 728 729 @Override 730 public void setFocus(final boolean focused) { 731 Scheduler.get().scheduleDeferred(new ScheduledCommand() { 732 @Override 733 public void execute() { 734 valueBoxBase.setFocus(focused); 735 if (focused) { 736 label.addStyleName("active"); 737 } else { 738 updateLabelActiveStyle(); 739 } 740 } 741 }); 742 } 743 744 /** 745 * Updates the style of the field label according to the field value if the 746 * field value is empty - null or "" - removes the label 'active' style else 747 * will add the 'active' style to the field label. 748 */ 749 protected void updateLabelActiveStyle() { 750 if (this.valueBoxBase.getText() != null && !this.valueBoxBase.getText().isEmpty()) { 751 label.addStyleName("active"); 752 } else { 753 label.removeStyleName("active"); 754 } 755 } 756 757 public String getSelectedText() { 758 return valueBoxBase.getSelectedText(); 759 } 760 761 public int getSelectionLength() { 762 return valueBoxBase.getSelectionLength(); 763 } 764 765 public void setSelectionRange(int pos, int length) { 766 valueBoxBase.setSelectionRange(pos, length); 767 } 768 769 public void setReadOnly(boolean readOnly) { 770 valueBoxBase.setReadOnly(readOnly); 771 } 772 773 public boolean isReadOnly() { 774 return valueBoxBase.isReadOnly(); 775 } 776 777 public void setCursorPos(int pos) { 778 valueBoxBase.setCursorPos(pos); 779 } 780 781 public void setAlignment(TextAlignment align) { 782 valueBoxBase.setAlignment(align); 783 } 784 785 @Override 786 public void setTabIndex(int tabIndex) { 787 valueBoxBase.setTabIndex(tabIndex); 788 } 789 790 @Override 791 public void setEnabled(boolean enabled) { 792 super.setEnabled(enabled); 793 valueBoxBase.setEnabled(enabled); 794 } 795 796 @Override 797 public boolean isAllowBlank() { 798 return validatorMixin.isAllowBlank(); 799 } 800 801 @Override 802 public void setAllowBlank(boolean allowBlank) { 803 validatorMixin.setAllowBlank(allowBlank); 804 } 805 806 @Override 807 public ErrorHandler getErrorHandler() { 808 return errorHandlerMixin.getErrorHandler(); 809 } 810 811 @Override 812 public void setErrorHandler(ErrorHandler errorHandler) { 813 errorHandlerMixin.setErrorHandler(errorHandler); 814 } 815 816 @Override 817 public ErrorHandlerType getErrorHandlerType() { 818 return errorHandlerMixin.getErrorHandlerType(); 819 } 820 821 @Override 822 public void setErrorHandlerType(ErrorHandlerType errorHandlerType) { 823 errorHandlerMixin.setErrorHandlerType(errorHandlerType); 824 } 825 826 @Override 827 public void addValidator(Validator<T> validator) { 828 validatorMixin.addValidator(validator); 829 } 830 831 @Override 832 public boolean isValidateOnBlur() { 833 return validatorMixin.isValidateOnBlur(); 834 } 835 836 @Override 837 public boolean removeValidator(Validator<T> validator) { 838 return validatorMixin.removeValidator(validator); 839 } 840 841 @Override 842 public void reset() { 843 validatorMixin.reset(); 844 } 845 846 @Override 847 public void setValidateOnBlur(boolean validateOnBlur) { 848 validatorMixin.setValidateOnBlur(validateOnBlur); 849 } 850 851 @Override 852 public void setValidators(@SuppressWarnings("unchecked") Validator<T>... validators) { 853 validatorMixin.setValidators(validators); 854 } 855 856 @Override 857 public boolean validate() { 858 return validatorMixin.validate(); 859 } 860 861 @Override 862 public boolean validate(boolean show) { 863 return validatorMixin.validate(show); 864 } 865 866 @Override 867 public HandlerRegistration addValidationChangedHandler(ValidationChangedHandler handler) { 868 return (HandlerRegistration)validatorMixin.addValidationChangedHandler(handler); 869 } 870}