From 972737bcb676cc9a1c0229de6ed4eb89717c381f Mon Sep 17 00:00:00 2001
From: tengge1 <930372551@qq.com>
Date: Mon, 15 Jul 2019 19:40:14 +0800
Subject: [PATCH] =?UTF-8?q?ui=E6=8E=A7=E4=BB=B6=E8=A7=84=E8=8C=83=E5=8C=96?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 1 +
.../src/editor2/component/CameraComponent.jsx | 8 ++---
ShadowEditor.Web/src/ui/form/Button.jsx | 19 +++++++++--
ShadowEditor.Web/src/ui/form/CheckBox.jsx | 25 ++++----------
ShadowEditor.Web/src/ui/form/Form.jsx | 27 +++++++--------
ShadowEditor.Web/src/ui/form/FormControl.jsx | 4 +--
ShadowEditor.Web/src/ui/form/IconButton.jsx | 17 ++++++++--
ShadowEditor.Web/src/ui/form/Input.jsx | 24 +++++++-------
ShadowEditor.Web/src/ui/form/Label.jsx | 10 ++++--
ShadowEditor.Web/src/ui/form/Radio.jsx | 33 ++++++++-----------
ShadowEditor.Web/src/ui/form/SearchField.jsx | 2 +-
ShadowEditor.Web/src/ui/form/Select.jsx | 30 +++++++++--------
ShadowEditor.Web/src/ui/form/TextArea.jsx | 33 +++++++------------
ShadowEditor.Web/src/ui/form/Toggle.jsx | 32 ++++++++----------
ShadowEditor.Web/src/ui/form/css/Radio.css | 4 +--
ShadowEditor.Web/src/ui/form/css/Toggle.css | 4 +--
ShadowEditor.Web/src/ui/index.js | 1 +
17 files changed, 137 insertions(+), 137 deletions(-)
diff --git a/.gitignore b/.gitignore
index 077ea2a2..2b186112 100644
--- a/.gitignore
+++ b/.gitignore
@@ -100,3 +100,4 @@ typings/
/ShadowEditor.UI/ShadowEditor.UI.csproj.user
/ShadowEditor.UI/build
/images/img
+/ShadowEditor.Web/src/ui2
diff --git a/ShadowEditor.Web/src/editor2/component/CameraComponent.jsx b/ShadowEditor.Web/src/editor2/component/CameraComponent.jsx
index 843b4246..47564d26 100644
--- a/ShadowEditor.Web/src/editor2/component/CameraComponent.jsx
+++ b/ShadowEditor.Web/src/editor2/component/CameraComponent.jsx
@@ -1,4 +1,4 @@
-import { PropertyGrid, PropertyGroup, TextProperty, DisplayProperty, CheckBoxProperty } from '../../third_party';
+import { PropertyGrid, PropertyGroup, TextProperty, DisplayProperty, CheckBoxProperty, NumberProperty } from '../../third_party';
import SetValueCommand from '../../command/SetValueCommand';
/**
@@ -28,9 +28,9 @@ class CameraComponent extends React.Component {
const { show, expanded, fov, near, far } = this.state;
return
-
-
-
+
+
+
;
}
diff --git a/ShadowEditor.Web/src/ui/form/Button.jsx b/ShadowEditor.Web/src/ui/form/Button.jsx
index f02b5658..de52cb81 100644
--- a/ShadowEditor.Web/src/ui/form/Button.jsx
+++ b/ShadowEditor.Web/src/ui/form/Button.jsx
@@ -7,32 +7,47 @@ import PropTypes from 'prop-types';
* @author tengge / https://github.com/tengge1
*/
class Button extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.handleClick = this.handleClick.bind(this, props.onClick);
+ }
+
render() {
- const { className, style, children, color, disabled, ...others } = this.props;
+ const { className, style, children, color, disabled } = this.props;
+
return ;
}
+
+ handleClick(onClick, event) {
+ onClick && onClick(this.props.name, event);
+ }
}
Button.propTypes = {
className: PropTypes.string,
style: PropTypes.object,
+ name: PropTypes.string,
children: PropTypes.node,
color: PropTypes.oneOf(['primary', 'success', 'warn', 'danger']),
disabled: PropTypes.bool,
+ onClick: PropTypes.func,
};
Button.defaultProps = {
className: null,
style: null,
+ name: null,
children: null,
color: null,
disabled: false,
+ onClick: null,
};
export default Button;
\ No newline at end of file
diff --git a/ShadowEditor.Web/src/ui/form/CheckBox.jsx b/ShadowEditor.Web/src/ui/form/CheckBox.jsx
index fefcf930..c9faefa6 100644
--- a/ShadowEditor.Web/src/ui/form/CheckBox.jsx
+++ b/ShadowEditor.Web/src/ui/form/CheckBox.jsx
@@ -10,34 +10,23 @@ class CheckBox extends React.Component {
constructor(props) {
super(props);
- this.state = {
- checked: props.checked,
- };
-
this.handleChange = this.handleChange.bind(this, props.onChange);
}
- handleChange(onChange, event) {
- const target = event.target;
- const name = target.getAttribute('name');
- const checked = target.checked;
-
- this.setState({ checked });
-
- onChange && onChange(name, checked, event);
- }
-
render() {
- const { className, style, name, checked, disabled, onChange } = this.props;
+ const { className, style, checked, disabled, onChange } = this.props;
return ;
}
+
+ handleChange(onChange, event) {
+ onChange && onChange(event.target.checked, this.props.name, event);
+ }
}
CheckBox.propTypes = {
@@ -52,7 +41,7 @@ CheckBox.propTypes = {
CheckBox.defaultProps = {
className: null,
style: null,
- name: undefined,
+ name: null,
checked: false,
disabled: false,
onChange: null,
diff --git a/ShadowEditor.Web/src/ui/form/Form.jsx b/ShadowEditor.Web/src/ui/form/Form.jsx
index 94f5d992..98a0753d 100644
--- a/ShadowEditor.Web/src/ui/form/Form.jsx
+++ b/ShadowEditor.Web/src/ui/form/Form.jsx
@@ -13,39 +13,36 @@ class Form extends React.Component {
this.handleSubmit = this.handleSubmit.bind(this, props.onSubmit);
}
+ render() {
+ const { className, style, children, direction } = this.props;
+ return
;
+ }
+
handleSubmit(onSubmit) {
event.preventDefault();
onSubmit && onSubmit();
}
-
- render() {
- const { className, style, children, direction, onSubmit, ...others } = this.props;
- return ;
- }
}
Form.propTypes = {
- onSubmit: PropTypes.func,
-
className: PropTypes.string,
style: PropTypes.object,
children: PropTypes.node,
direction: PropTypes.oneOf(['horizontal', 'vertical']),
+ onSubmit: PropTypes.func,
};
Form.defaultProps = {
- onSubmit: null,
-
className: null,
style: null,
children: null,
direction: 'horizontal',
+ onSubmit: null,
};
export default Form;
\ No newline at end of file
diff --git a/ShadowEditor.Web/src/ui/form/FormControl.jsx b/ShadowEditor.Web/src/ui/form/FormControl.jsx
index 68d27cd7..3a29e02a 100644
--- a/ShadowEditor.Web/src/ui/form/FormControl.jsx
+++ b/ShadowEditor.Web/src/ui/form/FormControl.jsx
@@ -8,9 +8,9 @@ import PropTypes from 'prop-types';
*/
class FormControl extends React.Component {
render() {
- const { className, style, children, ...others } = this.props;
+ const { className, style, children } = this.props;
- return
+ return
{children}
;
}
diff --git a/ShadowEditor.Web/src/ui/form/IconButton.jsx b/ShadowEditor.Web/src/ui/form/IconButton.jsx
index e40ac063..a32dbb9e 100644
--- a/ShadowEditor.Web/src/ui/form/IconButton.jsx
+++ b/ShadowEditor.Web/src/ui/form/IconButton.jsx
@@ -7,23 +7,33 @@ import PropTypes from 'prop-types';
* @author tengge / https://github.com/tengge1
*/
class IconButton extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.handleClick = this.handleClick.bind(this, props.onClick);
+ }
+
render() {
- const { className, style, icon, title, selected, onClick, ...others } = this.props;
+ const { className, style, icon, name, title, selected } = this.props;
return
;
}
+
+ handleClick(onClick, event) {
+ onClick && onClick(this.props.name, event);
+ };
}
IconButton.propTypes = {
className: PropTypes.string,
style: PropTypes.object,
icon: PropTypes.string,
+ name: PropTypes.string,
title: PropTypes.string,
selected: PropTypes.bool,
onClick: PropTypes.func,
@@ -33,6 +43,7 @@ IconButton.defaultProps = {
className: null,
style: null,
icon: null,
+ name: null,
title: null,
selected: false,
onClick: null,
diff --git a/ShadowEditor.Web/src/ui/form/Input.jsx b/ShadowEditor.Web/src/ui/form/Input.jsx
index 13059b76..fdd0122f 100644
--- a/ShadowEditor.Web/src/ui/form/Input.jsx
+++ b/ShadowEditor.Web/src/ui/form/Input.jsx
@@ -14,30 +14,31 @@ class Input extends React.Component {
this.handleInput = this.handleInput.bind(this, props.onInput);
}
- handleChange(onChange, event) {
- onChange && onChange(event.target.value, event);
- }
-
- handleInput(onInput, event) {
- onInput && onInput(event.target.value, event);
- }
-
render() {
- const { className, style, value, disabled, onChange, onInput } = this.props;
+ const { className, style, name, value, disabled } = this.props;
return
;
+ onInput={this.handleInput} />;
+ }
+
+ handleChange(onChange, event) {
+ onChange && onChange(event.target.value, this.props.name, event);
+ }
+
+ handleInput(onInput, event) {
+ onInput && onInput(event.target.value, this.props.name, event);
}
}
Input.propTypes = {
className: PropTypes.string,
style: PropTypes.object,
+ name: PropTypes.string,
value: PropTypes.string,
disabled: PropTypes.bool,
onChange: PropTypes.func,
@@ -47,6 +48,7 @@ Input.propTypes = {
Input.defaultProps = {
className: null,
style: null,
+ name: null,
value: '',
disabled: false,
onChange: null,
diff --git a/ShadowEditor.Web/src/ui/form/Label.jsx b/ShadowEditor.Web/src/ui/form/Label.jsx
index c8eb80a5..ea487903 100644
--- a/ShadowEditor.Web/src/ui/form/Label.jsx
+++ b/ShadowEditor.Web/src/ui/form/Label.jsx
@@ -7,10 +7,14 @@ import PropTypes from 'prop-types';
* @author tengge / https://github.com/tengge1
*/
class Label extends React.Component {
- render() {
- const { className, style, children, ...others } = this.props;
+ constructor(props) {
+ super(props);
+ }
- return
;
+ }
+
+ handleChange(onChange, event) {
+ var checked = event.target.classList.contains('checked');
+
+ onChange && onChange(!checked, this.props.name, event);
}
}
Toggle.propTypes = {
className: PropTypes.string,
style: PropTypes.object,
- selected: PropTypes.bool,
+ name: PropTypes.string,
+ checked: PropTypes.bool,
disabled: PropTypes.bool,
onChange: PropTypes.func,
};
@@ -50,7 +43,8 @@ Toggle.propTypes = {
Toggle.defaultProps = {
className: null,
style: null,
- selected: false,
+ name: null,
+ checked: false,
disabled: false,
onChange: null,
};
diff --git a/ShadowEditor.Web/src/ui/form/css/Radio.css b/ShadowEditor.Web/src/ui/form/css/Radio.css
index bb57f091..3c0dc143 100644
--- a/ShadowEditor.Web/src/ui/form/css/Radio.css
+++ b/ShadowEditor.Web/src/ui/form/css/Radio.css
@@ -7,7 +7,7 @@
cursor: pointer;
}
-.Radio.selected {
+.Radio.checked {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFlSURBVDhP1ZO/SsNQFMYzKuimm4OPoFVxlKoFoTrqI+gDiIhro4KLm9C61ERaseDiE2gRlOqmiLRd62w61enzftcTcluTNHbrDw5cknM+zl9ruJk4wfhcAYupAnZofE+eYUx+/4/0BQ7WS2hsVeDZd+jQ+N4oo77sYF/ckrHqonZcxRciOKzCyzh4FPd4KHbzLpExXL8BGRdPEhYOy+zNrP0NvHz+Gt8m9j28tIM9Ce+GA2DPxFdz+wEsFQE1DG1885tJtozm1ClGRSaAE2TTxU9nY4qZomammypm5hwLIhPAtVAldMQPz62/Yr7xn09OTT+Vx7bIBAwqyJhQQeU4cMmzecyLTAAvgEsrfpqkQ5kuYkRkuuEFHKmlFV8Ns2GJNDMzovrXXnGxK+Hh8AIqamn7cfUKrF3iQcLi4QXYPZmaMLPEYj68gGwJTTadk6TxzZ71LTMKXgCXlmtB4zQjBzAkWNYPuWx6Vj2oQrgAAAAASUVORK5CYII=);
}
@@ -16,6 +16,6 @@
cursor: default;
}
-.Radio.selected.disabled {
+.Radio.checked.disabled {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAE1SURBVDhP1ZNJDoJAEEVZaiK30XgjPYAhxvuZaDwCegMmGUIIC9r/6UIaRBR3vqRip4ZPdVVr/TdKKdv3/bXneVsaz/AtJDwNFB/CMLzC4jRNCxrPQRC4iO0l7TtQdIHAHd0MkiRJDNGTpI9DsTzPpfQ9zEHuWcqG4TX7nVVVpcqyrI1nE3aKMThS3gVxmzPTqZqiKBQ+orCQ2nimzwQ1N/zMRaYFyWsOXafpzkwxU9TslDXwrUSmBcnbLMuen+cV+2KNMdbA7cO3EZkWOH8SZA18r4K/XjmKohj+pci0ILZA0NVpmglLmYlMFxTsMZNnl4Td8Io0szOCZ5PgLe6kfBiIniY87KOUjcN/QL9TE+nsO7EGzMbhfLgobpLGBdD38ZrvQDNzjGCFhWzElvANL+BPsKwHYaPc6BXkh3gAAAAASUVORK5CYII=);
}
\ No newline at end of file
diff --git a/ShadowEditor.Web/src/ui/form/css/Toggle.css b/ShadowEditor.Web/src/ui/form/css/Toggle.css
index 01e8a1b0..1c368baf 100644
--- a/ShadowEditor.Web/src/ui/form/css/Toggle.css
+++ b/ShadowEditor.Web/src/ui/form/css/Toggle.css
@@ -7,7 +7,7 @@
cursor: pointer;
}
-.Toggle.selected {
+.Toggle.checked {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAUCAYAAADoZO9yAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABRSURBVEhLYzCe+f//YMDDxyEzz/z/P4NMXL8fYQ7FDqEEnHmGMGfUISAw6hB0MOoQdDDqEHQw6hB0MOoQdDA8HQJqBpCLqdoMoBYeJA75/x8AV8uDZSB9PMIAAAAASUVORK5CYII=);
}
@@ -16,6 +16,6 @@
cursor: default;
}
-.Toggle.selected.disabled {
+.Toggle.checked.disabled {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAUCAYAAADoZO9yAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABQSURBVEhL7dahCgAgDIRh3/9Vrw1WVhTLwmEQNci4H66Or2kD0H9YHYi7H8/M8s415KaIyDuCzAThBOEE4QThBOFqQlbP++6efgNe7RMI+gDSby3zpGs0DgAAAABJRU5ErkJggg==);
}
\ No newline at end of file
diff --git a/ShadowEditor.Web/src/ui/index.js b/ShadowEditor.Web/src/ui/index.js
index 80d3e37b..de379a01 100644
--- a/ShadowEditor.Web/src/ui/index.js
+++ b/ShadowEditor.Web/src/ui/index.js
@@ -58,6 +58,7 @@ export { default as PropertyGroup } from './property/PropertyGroup.jsx';
export { default as DisplayProperty } from './property/DisplayProperty.jsx';
export { default as TextProperty } from './property/TextProperty.jsx';
export { default as CheckBoxProperty } from './property/CheckBoxProperty.jsx';
+export { default as NumberProperty } from './property/NumberProperty.jsx';
// svg
export { default as SVG } from './svg/SVG.jsx';