ngui-tools
Version:
A GUI typesetting display engine and cross platform GUI application development framework based on NodeJS/OpenGL
117 lines (98 loc) • 3.42 kB
JSX
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2015, xuewen.chu
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of xuewen.chu nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL xuewen.chu BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */
import {
CSS, Div, Hybrid, Button, ViewController, atomPixel
} from './ngui';
CSS({
'.x_stepper': {
width: 45 * 2 + 3,
textFamily: 'icon',
textLineHeight: 29,
textSize: 20,
textColor: '#727272',
},
'.x_stepper .minus, .x_stepper .plus': {
width: 45,
height: 28,
border: `${atomPixel} #727272`,
borderColor: '#727272',
backgroundColor: '#fff',
},
'.x_stepper .minus': {
borderRadiusLeftTop: 6,
borderRadiusLeftBottom: 6,
},
'.x_stepper .plus': {
borderLeftWidth: 0,
borderRadiusRightTop: 6,
borderRadiusRightBottom: 6,
},
'.x_stepper .minus:down, .x_stepper .plus:down': {
backgroundColor: '#eee',
},
})
/**
* @class Stepper
*/
export class Stepper extends ViewController {
m_value = 0;
min = 0;
max = Infinity;
step = 1;
event onChange;
m_minus_click_handle() {
this.value = this.m_value - this.step;
}
m_plus_click_handle() {
this.value = this.m_value + this.step;
}
loadView(vx) {
super.loadView(
<Hybrid class="x_stepper">
<Button class="minus"
onClick="m_minus_click_handle" defaultHighlighted=0>\ued5e</Button>
<Button class="plus"
onClick="m_plus_click_handle" defaultHighlighted=0>\ued5d</Button>
</Hybrid>
)
}
get value() {
return this.m_value;
}
set value(value) {
if ( typeof value == 'number') {
value = Math.min(this.max, Math.max(this.min, value));
if ( value != this.m_value ) {
this.m_value = value;
this.triggerChange();
}
}
}
}