commit 674691d136cd1234937d85094ea2df050bc5400e Author: simonyan <315082291@qq.com> Date: Thu Sep 26 17:32:52 2024 +0800 1、初始化代码; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a85d48 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Bin/Debug +Bin/Release \ No newline at end of file diff --git a/Bin/Config/Attributes/Default_Attributes_Null.xml b/Bin/Config/Attributes/Default_Attributes_Null.xml new file mode 100644 index 0000000..01a4497 --- /dev/null +++ b/Bin/Config/Attributes/Default_Attributes_Null.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Bin/Config/Attributes/WTAI_Attributes_cn.dat b/Bin/Config/Attributes/WTAI_Attributes_cn.dat new file mode 100644 index 0000000..9dae8d7 --- /dev/null +++ b/Bin/Config/Attributes/WTAI_Attributes_cn.dat @@ -0,0 +1 @@ +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx6aEF0dHJpYnV0ZXM+DQogICwzyAgPFB0eUdyb3VwIExhYmVsPSLlr7nosaEiIE5hbWU9Ilp4T2JqQmFzZSIgT3JkZXI9IjEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5a+56LGh5ZCN56ewIiBOYW1lPSJaeE9iakJhc2UuTmFtZSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpCYXNlLmNwcCg1OTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrlrZDlr7nosaEiIE5hbWU9Ilp4T2JqQmFzZS5TaG93U3ViT2JqcyIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpCYXNlLmNwcCg1OTgpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iQXhpczEiIE9yZGVyPSIyIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWQjeensCIgTmFtZT0iQXhpcy5OYW1lIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MTgpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLljZXkvY0iIE5hbWU9IkF4aXMuVW5pdCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQyMykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6IyD5Zu0IiBOYW1lPSJBeGlzMiIgT3JkZXI9IjMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5bCPIiBOYW1lPSJTY2FsZS5NaW4iIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzMSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuacgOWkpyIgTmFtZT0iU2NhbGUuTWF4IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MzIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Iue9keagvCIgTmFtZT0iQXhpczMiIE9yZGVyPSI0Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuS4u+WIu+W6piIgTmFtZT0iQXhpcy5zaG93QmlnU2NhbGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzOSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuue7huWIhuWIu+W6piIgTmFtZT0iQXhpcy5zaG93U21hbGxTY2FsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Li75Yi75bqmIiBOYW1lPSJBeGlzLk1haW5JbnRlcnZhbCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDMzKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i57uG5YiG5Yi75bqmIiBOYW1lPSJBeGlzLlN1YkludGVydmFsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MzQpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuaYvuekuuaooeW8jyIgTmFtZT0iQXhpczQiIE9yZGVyPSI1Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWIu+W6puaYvuS6juWkluS+pyIgTmFtZT0iQXhpcy5zY2FsZU91dHdhcmQiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0MSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS5mOW5guaYvuekuuWIu+W6piIgTmFtZT0iQXhpcy5zaG93VGlja0FzRXhwIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlsI/mlbDkvY3mlbAiIE5hbWU9IkF4aXMuRGVjaW1hbE51bWJlciIgRWRpdG9yPSJJbnRTcGluIiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQyKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IkF4aXM1IiBPcmRlcj0iNiI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlkI3np7DlrZfkvZMiIE5hbWU9IkF4aXMuTmFtZUZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0NCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWIu+W6puWtl+S9kyIgTmFtZT0iQXhpcy5OdW1iZXJGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLluYLlrZfkvZMiIE5hbWU9IkF4aXMuSW5kZXhGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDgpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpopzoibIiIE5hbWU9IkF4aXMuQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSI0IiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MjYpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWfuuehgCIgTmFtZT0iUGxvdDEiIE9yZGVyPSI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuagh+mimCIgTmFtZT0iUGxvdC5TaG93VGl0bGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuWbvuS+iyIgTmFtZT0iUGxvdC5TaG93TGVnZW5kIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2ODcpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Iue9keagvCIgTmFtZT0iUGxvdDIiIE9yZGVyPSI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuS4u+WIu+W6plgiIE5hbWU9IlBsb3Quc2hvd1NjYWxlQmlnWCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjkyKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmWSIgTmFtZT0iUGxvdC5zaG93U2NhbGVCaWdZIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrmrKHliLvluqZYIiBOYW1lPSJQbG90LnNob3dTY2FsZVNtYWxsWCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMyIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk1KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65qyh5Yi75bqmWSIgTmFtZT0iUGxvdC5zaG93U2NhbGVTbWFsbFkiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjQiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY5NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aGr5YWFIiBOYW1lPSJQbG90MyIgT3JkZXI9IjkiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5riQ5Y+Y6ImyMSIgTmFtZT0iUGxvdC5CS0NvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjgyKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5riQ5Y+Y6ImyMiIgTmFtZT0iUGxvdC5CS0NvbG9yRXgiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIyIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2ODMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iUGxvdDQiIE9yZGVyPSIxMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLovrnmoYbpopzoibIiIE5hbWU9IlBsb3QuRnJhbWVDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJQbG90NSIgT3JkZXI9IjExIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+uei3nSIgTmFtZT0iUGxvdC5NYXJnaW4iIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY5OCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5YW25a6DIiBOYW1lPSJQbG90NiIgT3JkZXI9IjEyIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuagh+mimOS9jee9riIgTmFtZT0iUGxvdC5UaXRsZVBvcyIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNzAwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLln7rnoYAiIE5hbWU9Ilp4T2JqMSIgT3JkZXI9IjEzIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuabsue6v+WPr+ingSIgTmFtZT0iWnhPYmpDdXJ2ZUJhc2UuQ3VydmVWaXNpYmxlIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlUHJlc3N1cmUuY3BwKDI5NCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iue6v+WPr+ingSIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuTGluZVZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqQ3VydmVGbG93LmNwcCg4NzApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmtYHliqjmrrXlj6/op4EiIE5hbWU9Ilp4T2JqQ3VydmVGbG93LlNlZ21lbnRWaXNpYmxlIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODcxKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9Ilp4T2JqMiIgT3JkZXI9IjE0Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueUu+eslCIgTmFtZT0iWnhPYmpDdXJ2ZUJhc2UuUGVuIiBFZGl0b3I9IlBlbiIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMjkzKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5rWB5Yqo57q/6aKc6ImyIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5jbHJGbG93TGluZSIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqQ3VydmVGbG93LmNwcCg4NzIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmtYHliqjmrrXpopzoibIiIE5hbWU9Ilp4T2JqQ3VydmVGbG93LmNsckZsb3dTZWdtZW50IiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMyIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iWnhPYmpDdXJ2ZUJhc2UuRG90IiBFZGl0b3I9IkRvdCIgT3JkZXI9IjQiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMjk1KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6YCJ5Lit54K55qih5byPIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5Eb3RTZWwiIEVkaXRvcj0iRG90IiBPcmRlcj0iNSIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTYpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuS9jee9riIgTmFtZT0iWnhPYmozIiBPcmRlcj0iMTUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6YCJ5oup57Si5byVIiBOYW1lPSJaeE9iakN1cnZlRmxvdy5DdXJTZWdQdEluZGV4IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBSZWFkb25seT0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5YW25a6DIiBOYW1lPSJaeE9iajQiIE9yZGVyPSIxNiI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnp7vliqjmqKHlvI8iIE5hbWU9Ilp4T2JqQ3VydmVGbG93Lm9iakN1cnZlRmxvd01vdmVNb2RlIiBFZGl0b3I9IkVudW0iIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlUHJlc3N1cmUuY3BwKDMwMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJMZWdlbmQxIiBPcmRlcj0iMTciPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S66L655qGGIiBOYW1lPSJMZC5TaG93RnJhbWUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM3OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iTGQuRnJhbWVQZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzgwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLliIbnu4TmoIfor4YiIE5hbWU9IkxlZ2VuZDIiIE9yZGVyPSIxOCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXoibIiIE5hbWU9IkxkR3JvdXAuQmFja2dyZENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4MikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheiJsumAj+aYjuW6piIgTmFtZT0iTGRHcm91cC5CYWNrZ3JkQ2xyQWxwaGEiIEVkaXRvcj0iU2xpZGVyIiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzgzKSIgTWluPSIwIiBNYXg9IjEwMCIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5YiG57uE5ZCN56ew5a2X5L2TIiBOYW1lPSJMZEdyb3VwLlRleHRGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLliIbnu4TlkI3np7DpopzoibIiIE5hbWU9IkxkR3JvdXAuVGV4dENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Zu+5L6L6aG5IiBOYW1lPSJMZWdlbmQzIiBPcmRlcj0iMTkiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6aKc6ImyIiBOYW1lPSJMZEl0ZW0uQmFja2dyZENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4NykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheiJsumAj+aYjuW6piIgTmFtZT0iTGRJdGVtLkJhY2tncmRDbHJBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODgpIiBNaW49IjAiIE1heD0iMTAwIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77kvovlkI3np7DlrZfkvZMiIE5hbWU9IkxkSXRlbS5UZXh0Rm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Zu+5L6L5ZCN56ew6aKc6ImyIiBOYW1lPSJMZEl0ZW0uVGV4dENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5MCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJMZWdlbmQ0IiBPcmRlcj0iMjAiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5YaF57yp6L+bKHB4KSIgTmFtZT0iTGQuTWFyZ2luSW5uZXIiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlpJbnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5PdXRlciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5MykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5pW05L2T5L2N572uIiBOYW1lPSJMZWdlbmQ1IiBPcmRlcj0iMjEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5L2N572uIiBOYW1lPSJMZC5MZFBvcyIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzY2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9IkxlZ2VuZDYiIE9yZGVyPSIyMiIgRXhwYW5kPSIwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWbvuekuuWuveW6piIgTmFtZT0iTGQuTGVmdFdpZHRoIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBSZWFkb25seT0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzk0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY6auY5bqmIiBOYW1lPSJMZC5Hcm91cEhlaWdodCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5a+56LGhIiBOYW1lPSJUaXRsZTEiIE9yZGVyPSIyMyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmoIfpopjlhoXlrrkiIE5hbWU9IlRpdGxlLlRpdGxlVGV4dCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJUaXRsZS5jcHAoOTcpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iVGl0bGUyIiBPcmRlcj0iMjQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5a2X5L2TIiBOYW1lPSJUaXRsZS5UZXh0Rm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJUaXRsZS5jcHAoOTkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmoIfpopjpopzoibIiIE5hbWU9IlRpdGxlLlRleHRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLln7rnoYAiIE5hbWU9IlJlY3QxIiBPcmRlcj0iMjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S66L655qGGIiBOYW1lPSJSZWN0LlNob3dCb3giIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA5KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlJlY3QyIiBPcmRlcj0iMjYiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6ImyIiBOYW1lPSJSZWN0LkJhY2tncm91bmRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6Imy6YCP5piO5bqmIiBOYW1lPSJSZWN0LkJhY2tncm91bmRBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMwOCkiIE1pbj0iMCIgTWF4PSIxMDAiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJSZWN0MyIgT3JkZXI9IjI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueUu+eslCIgTmFtZT0iUmVjdC5Cb3VuZFBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIxIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMxMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJCYW5kMSIgT3JkZXI9IjI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW3pui+ueeVjCIgTmFtZT0iQmFuZC5MIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyMykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWPs+i+ueeVjCIgTmFtZT0iQmFuZC5SIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyNCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4iui+ueeVjCIgTmFtZT0iQmFuZC5UIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4i+i+ueeVjCIgTmFtZT0iQmFuZC5CIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2ludCIgT3JkZXI9IjI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iUG9pbnQuRG90IiBFZGl0b3I9IkRvdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUG9pbnQuY3BwKDE1NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJMaW5lMSIgT3JkZXI9IjMwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuueCuSIgTmFtZT0iTGluZS5TaG93RG90UG9pbnQiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqTGluZS5jcHAoMjgzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IkxpbmUyIiBPcmRlcj0iMzEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i55S756yUIiBOYW1lPSJMaW5lLlBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4MikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iTGluZS5Eb3QiIEVkaXRvcj0iRG90IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODQpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuS9jee9riIgTmFtZT0iTGluZTMiIE9yZGVyPSIzMiI+DQogICAgICAgIDxQdHlHcm91cCBMYWJlbD0i6LW354K5IiBOYW1lPSJTdGFydFBvcyIgT3JkZXI9IjEiIEV4cGFuZD0iMCI+DQogICAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0iWCIgTmFtZT0iU3RhcnRQb3MuWCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyNzgpIi8+DQogICAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0iWSIgTmFtZT0iU3RhcnRQb3MuWSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyNzkpIi8+DQogICAgICAgIDwvUHR5R3JvdXA+DQogICAgICAgIDxQdHlHcm91cCBMYWJlbD0i57uI54K5IiBOYW1lPSJFbmRQb3MiIE9yZGVyPSIzMyIgRXhwYW5kPSIwIj4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJYIiBOYW1lPSJFbmRQb3MuWCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODApIi8+DQogICAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0iWSIgTmFtZT0iRW5kUG9zLlkiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqTGluZS5jcHAoMjgxKSIvPg0KICAgICAgICA8L1B0eUdyb3VwPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlBvbHlnb24xIiBPcmRlcj0iMzQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5piv5ZCm5aGr5YWFIiBOYW1lPSJQb2x5Z29uLklzRmlsbCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpQb2x5Z29uLmNwcCgyODMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXpopzoibIiIE5hbWU9IlBvbHlnb24uRmlsbENvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpQb2x5Z29uLmNwcCgyODIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iUG9seWdvbjIiIE9yZGVyPSIzNSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLovrnnlYznlLvnrJQiIE5hbWU9IlBvbHlnb24uUGVuIiBFZGl0b3I9IlBlbiIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUG9seWdvbi5jcHAoMjgxKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlr7nosaEiIE5hbWU9IlRleHQxIiBPcmRlcj0iMzYiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5paH5pysIiBOYW1lPSJUZXh0LlRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjA2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLmmL7npLrmqKHlvI8iIE5hbWU9IlRleHQyIiBPcmRlcj0iMzciPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6Ieq5Yqo6LCD5pW0IiBOYW1lPSJUZXh0LkF1dG9BZGp1c3QiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjA5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5a+56b2Q5qih5byPIiBOYW1lPSJUZXh0LkFsaWduRmxhZyIgRWRpdG9yPSJGbGFncyIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjEzKSIvPg0KICAgICAgICA8UHR5R3JvdXAgTGFiZWw9IuaWh+acrOWvuem9kCIgTmFtZT0iQWxpZ24iIE9yZGVyPSIzIiAgRXhwYW5kPSIwIj4NCiAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5rC05bmz5a+56b2QIiBOYW1lPSJUZXh0LkFsaWduSG9yIiBFZGl0b3I9IkVudW0iIE9yZGVyPSIxIiBQYXRoPSJaeE9ialRleHQuY3BwKDIxNikiLz4NCiAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Z6C55u05a+56b2QIiBOYW1lPSJUZXh0LkFsaWduVmVydCIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMjYpIi8+DQogICAgICAgIDwvUHR5R3JvdXA+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iVGV4dDMiIE9yZGVyPSIzOCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZMiIE5hbWU9IlRleHQuRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDcpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZPpopzoibIiIE5hbWU9IlRleHQuQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9ialRleHQuY3BwKDIwOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iVGV4dC5Cb3JkZXJQZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iOSIgUGF0aD0iWnhTdHJpbmdJdGVtLmNwcCgxMjEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWFtuWugyIgTmFtZT0iVGV4dDQiIE9yZGVyPSIzOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlhYHorrjnvJbovpEiIE5hbWU9IlRleHQuTWFudWxFZGl0IiBFZGl0b3I9IkJvb2wiIE9yZGVyPSI1IiBQYXRoPSJaeE9ialRleHQuY3BwKDIxMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Zu+54mHIiBOYW1lPSJJbWFnZSIgT3JkZXI9IjQwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuadpea6kCIgTmFtZT0iSW1hZ2UuSW1nUGF0aCIgRWRpdG9yPSJQaWN0dXJlIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpJbWFnZS5jcHAoMTEwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLoibLooagiIE5hbWU9IkNvbG9yVGFibGUiIE9yZGVyPSI0MSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlkI3np7AiIE5hbWU9IkNvbG9yVGFibGUuTmFtZSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyODcpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLljZXkvY0iIE5hbWU9IkNvbG9yVGFibGUuVW5pdCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyODgpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlpKciIE5hbWU9IkNvbG9yVGFibGUuTWF4IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkNvbG9yVGFibGUuY3BwKDI4OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuacgOWwjyIgTmFtZT0iQ29sb3JUYWJsZS5NaW4iIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjkwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i57G75Z6LIiBOYW1lPSJDb2xvclRhYmxlLkNvbG9yVHlwZSIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iNSIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyOTIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIuQm9yZGVyIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJvcmRlciIgT3JkZXI9IjQyIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIuVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iUGVuIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJvcmRlci5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJhciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIiIE9yZGVyPSI0MyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSJXaWR0aCIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIuV2lkdGgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ2NikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIuRmlsbCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDY3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5GaWxsQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMyIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDcwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLlZhbHVlIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlIiBPcmRlcj0iNDQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlLlBpblZhbHVlIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuVmFsdWUuUGluRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDc2KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlLlBpbkNsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjMiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ3NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0iWnhPYmpDdXJ2ZUJhciIgTmFtZT0iWnhPYmpDdXJ2ZUJhciIgT3JkZXI9IjQ1Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5TaG93M0QiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ3OSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJXbUxpbmUiIE9yZGVyPSI0NiI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnlLvnrJQiIE5hbWU9IldtTGluZS5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0ibm1PYmpMaW5lLmNwcCgyNzgpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iT2JqUG9seWdvbiIgT3JkZXI9IjQ3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iT2JqUG9seWdvbi5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0ibm1PYmpQb2x5Z29uLmNwcCgxODMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXog4zmma8iIE5hbWU9Ik9ialBvbHlnb24uQmFja2dyZENvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMiIgUGF0aD0ibm1PYmpQb2x5Z29uLmNwcCgxODQpIi8+DQogICAgPC9QdHlHcm91cD4NCjwvemhBdHRyaWJ1dGVzPg0K \ No newline at end of file diff --git a/Bin/Config/Attributes/WTAI_Attributes_cn.dat_Bk b/Bin/Config/Attributes/WTAI_Attributes_cn.dat_Bk new file mode 100644 index 0000000..204d2d8 --- /dev/null +++ b/Bin/Config/Attributes/WTAI_Attributes_cn.dat_Bk @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx6aEF0dHJpYnV0ZXM+DQwzyoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iWnhPYmpCYXNlIiBPcmRlcj0iMSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlr7nosaHlkI3np7AiIE5hbWU9Ilp4T2JqQmFzZS5OYW1lIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhc2UuY3BwKDU5NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuWtkOWvueixoSIgTmFtZT0iWnhPYmpCYXNlLlNob3dTdWJPYmpzIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhc2UuY3BwKDU5OCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5a+56LGhIiBOYW1lPSJBeGlzMSIgT3JkZXI9IjIiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5ZCN56ewIiBOYW1lPSJBeGlzLk5hbWUiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQxOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWNleS9jSIgTmFtZT0iQXhpcy5Vbml0IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBSZWFkb25seT0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDIzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLojIPlm7QiIE5hbWU9IkF4aXMyIiBPcmRlcj0iMyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlsI8iIE5hbWU9IlNjYWxlLk1pbiIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDMxKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5aSnIiBOYW1lPSJTY2FsZS5NYXgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzMikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i572R5qC8IiBOYW1lPSJBeGlzMyIgT3JkZXI9IjQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmIiBOYW1lPSJBeGlzLnNob3dCaWdTY2FsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDM5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S657uG5YiG5Yi75bqmIiBOYW1lPSJBeGlzLnNob3dTbWFsbFNjYWxlIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLkuLvliLvluqYiIE5hbWU9IkF4aXMuTWFpbkludGVydmFsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MzMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnu4bliIbliLvluqYiIE5hbWU9IkF4aXMuU3ViSW50ZXJ2YWwiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzNCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5pi+56S65qih5byPIiBOYW1lPSJBeGlzNCIgT3JkZXI9IjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Yi75bqm5pi+5LqO5aSW5L6nIiBOYW1lPSJBeGlzLnNjYWxlT3V0d2FyZCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQxKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5LmY5bmC5pi+56S65Yi75bqmIiBOYW1lPSJBeGlzLnNob3dUaWNrQXNFeHAiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWwj+aVsOS9jeaVsCIgTmFtZT0iQXhpcy5EZWNpbWFsTnVtYmVyIiBFZGl0b3I9IkludFNwaW4iIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iQXhpczUiIE9yZGVyPSI2Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWQjeensOWtl+S9kyIgTmFtZT0iQXhpcy5OYW1lRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQ0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Yi75bqm5a2X5L2TIiBOYW1lPSJBeGlzLk51bWJlckZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW5guWtl+S9kyIgTmFtZT0iQXhpcy5JbmRleEZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjMiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0OCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuminOiJsiIgTmFtZT0iQXhpcy5Db2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQyNikiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJQbG90MSIgT3JkZXI9IjciPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65qCH6aKYIiBOYW1lPSJQbG90LlNob3dUaXRsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Zu+5L6LIiBOYW1lPSJQbG90LlNob3dMZWdlbmQiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i572R5qC8IiBOYW1lPSJQbG90MiIgT3JkZXI9IjgiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmWCIgTmFtZT0iUGxvdC5zaG93U2NhbGVCaWdYIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrkuLvliLvluqZZIiBOYW1lPSJQbG90LnNob3dTY2FsZUJpZ1kiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY5MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuasoeWIu+W6plgiIE5hbWU9IlBsb3Quc2hvd1NjYWxlU21hbGxYIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIzIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrmrKHliLvluqZZIiBOYW1lPSJQbG90LnNob3dTY2FsZVNtYWxsWSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iNCIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlBsb3QzIiBPcmRlcj0iOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmuJDlj5joibIxIiBOYW1lPSJQbG90LkJLQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2ODIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmuJDlj5joibIyIiBOYW1lPSJQbG90LkJLQ29sb3JFeCIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4MykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQbG90NCIgT3JkZXI9IjEwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhuminOiJsiIgTmFtZT0iUGxvdC5GcmFtZUNvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjg1KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLovrnnlYwiIE5hbWU9IlBsb3Q1IiBPcmRlcj0iMTEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6L656LedIiBOYW1lPSJQbG90Lk1hcmdpbiIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9IlBsb3Q2IiBPcmRlcj0iMTIiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5L2N572uIiBOYW1lPSJQbG90LlRpdGxlUG9zIiBFZGl0b3I9IkVudW0iIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg3MDApIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWfuuehgCIgTmFtZT0iWnhPYmoxIiBPcmRlcj0iMTMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5puy57q/5Y+v6KeBIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5DdXJ2ZVZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMjk0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i57q/5Y+v6KeBIiBOYW1lPSJaeE9iakN1cnZlRmxvdy5MaW5lVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iua1geWKqOauteWPr+ingSIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuU2VnbWVudFZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjMiIFBhdGg9Ilp4T2JqQ3VydmVGbG93LmNwcCg4NzEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iWnhPYmoyIiBPcmRlcj0iMTQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i55S756yUIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmtYHliqjnur/popzoibIiIE5hbWU9Ilp4T2JqQ3VydmVCYXNlLmNsckZsb3dMaW5lIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iua1geWKqOauteminOiJsiIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuY2xyRmxvd1NlZ21lbnQiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODczKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i54K55qih5byPIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5Eb3QiIEVkaXRvcj0iRG90IiBPcmRlcj0iNCIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpgInkuK3ngrnmqKHlvI8iIE5hbWU9Ilp4T2JqQ3VydmVCYXNlLkRvdFNlbCIgRWRpdG9yPSJEb3QiIE9yZGVyPSI1IiBQYXRoPSJaeE9iakN1cnZlUHJlc3N1cmUuY3BwKDI5NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5L2N572uIiBOYW1lPSJaeE9iajMiIE9yZGVyPSIxNSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpgInmi6nntKLlvJUiIE5hbWU9Ilp4T2JqQ3VydmVGbG93LkN1clNlZ1B0SW5kZXgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODc1KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9Ilp4T2JqNCIgT3JkZXI9IjE2Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuenu+WKqOaooeW8jyIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cub2JqQ3VydmVGbG93TW92ZU1vZGUiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMzAwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IkxlZ2VuZDEiIE9yZGVyPSIxNyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrovrnmoYYiIE5hbWU9IkxkLlNob3dGcmFtZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzc5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6L655qGG55S756yUIiBOYW1lPSJMZC5GcmFtZVBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODApIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWIhue7hOagh+ivhiIgTmFtZT0iTGVnZW5kMiIgT3JkZXI9IjE4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheiJsiIgTmFtZT0iTGRHcm91cC5CYWNrZ3JkQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzgzKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6Imy6YCP5piO5bqmIiBOYW1lPSJMZEdyb3VwLkJhY2tncmRDbHJBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE1pbj0iMCIgTWF4PSIxMDAiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLliIbnu4TlkI3np7DlrZfkvZMiIE5hbWU9IkxkR3JvdXAuVGV4dEZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjMiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWIhue7hOWQjeensOminOiJsiIgTmFtZT0iTGRHcm91cC5UZXh0Q2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iNCIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlm77kvovpobkiIE5hbWU9IkxlZ2VuZDMiIE9yZGVyPSIxOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXpopzoibIiIE5hbWU9IkxkSXRlbS5CYWNrZ3JkQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6Imy6YCP5piO5bqmIiBOYW1lPSJMZEl0ZW0uQmFja2dyZENsckFscGhhIiBFZGl0b3I9IlNsaWRlciIgTWluPSIwIiBNYXg9IjEwMCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4OCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWbvuS+i+WQjeensOWtl+S9kyIgTmFtZT0iTGRJdGVtLlRleHRGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77kvovlkI3np7DpopzoibIiIE5hbWU9IkxkSXRlbS5UZXh0Q2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iNCIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzkwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLovrnnlYwiIE5hbWU9IkxlZ2VuZDQiIE9yZGVyPSIyMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlhoXnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5Jbm5lciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUmVhZG9ubHk9IjEiICBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlpJbnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5PdXRlciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiICBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuaVtOS9k+S9jee9riIgTmFtZT0iTGVnZW5kNSIgT3JkZXI9IjIxIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS9jee9riIgTmFtZT0iTGQuTGRQb3MiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM2NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5YW25a6DIiBOYW1lPSJMZWdlbmQ2IiBPcmRlcj0iMjIiIEV4cGFuZD0iMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77npLrlrr3luqYiIE5hbWU9IkxkLkxlZnRXaWR0aCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5NCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuagh+mimOmrmOW6piIgTmFtZT0iTGQuR3JvdXBIZWlnaHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTUpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iVGl0bGUxIiBPcmRlcj0iMjMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5YaF5a65IiBOYW1lPSJUaXRsZS5UaXRsZVRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk3KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IlRpdGxlMiIgT3JkZXI9IjI0Ij4NCiAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5a2X5L2TIiBOYW1lPSJUaXRsZS5UZXh0Rm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJUaXRsZS5jcHAoOTkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmoIfpopjpopzoibIiIE5hbWU9IlRpdGxlLlRleHRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSLln7rnoYAiIE5hbWU9IlJlY3QxIiBPcmRlcj0iMjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S66L655qGGIiBOYW1lPSJSZWN0LlNob3dCb3giIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA5KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlJlY3QyIiBPcmRlcj0iMjYiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6ImyIiBOYW1lPSJSZWN0LkJhY2tncm91bmRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6Imy6YCP5piO5bqmIiBOYW1lPSJSZWN0LkJhY2tncm91bmRBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE1pbj0iMCIgTWF4PSIxMDAiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMwOCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJSZWN0MyIgT3JkZXI9IjI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueUu+eslCIgTmFtZT0iUmVjdC5Cb3VuZFBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIxIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMxMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJCYW5kMSIgT3JkZXI9IjI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW3pui+ueeVjCIgTmFtZT0iQmFuZC5MIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyMykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWPs+i+ueeVjCIgTmFtZT0iQmFuZC5SIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyNCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4iui+ueeVjCIgTmFtZT0iQmFuZC5UIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4i+i+ueeVjCIgTmFtZT0iQmFuZC5CIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2ludCIgT3JkZXI9IjI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iUG9pbnQuRG90IiBFZGl0b3I9IkRvdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUG9pbnQuY3BwKDE1NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJMaW5lMSIgT3JkZXI9IjMwIj4NCiAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S654K5IiBOYW1lPSJMaW5lLlNob3dEb3RQb2ludCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iTGluZTIiIE9yZGVyPSIzMSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnlLvnrJQiIE5hbWU9IkxpbmUuUGVuIiBFZGl0b3I9IlBlbiIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqTGluZS5jcHAoMjgyKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i54K55qih5byPIiBOYW1lPSJMaW5lLkRvdCIgRWRpdG9yPSJEb3QiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4NCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5L2N572uIiBOYW1lPSJMaW5lMyIgT3JkZXI9IjMyIj4NCiAgICAgICAgPFB0eUdyb3VwIExhYmVsPSLotbfngrkiIE5hbWU9IlN0YXJ0UG9zIiBPcmRlcj0iMSIgRXhwYW5kPSIwIj4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJYIiBOYW1lPSJTdGFydFBvcy5YIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI3OCkiLz4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJZIiBOYW1lPSJTdGFydFBvcy5ZIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI3OSkiLz4NCiAgICAgICAgPC9QdHlHcm91cD4NCiAgICAgICAgPFB0eUdyb3VwIExhYmVsPSLnu4jngrkiIE5hbWU9IkVuZFBvcyIgT3JkZXI9IjMzIiBFeHBhbmQ9IjAiPg0KICAgICAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IlgiIE5hbWU9IkVuZFBvcy5YIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4MCkiLz4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJZIiBOYW1lPSJFbmRQb3MuWSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODEpIi8+DQogICAgICAgIDwvUHR5R3JvdXA+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWhq+WFhSIgTmFtZT0iUG9seWdvbjEiIE9yZGVyPSIzNCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmK/lkKbloavlhYUiIE5hbWU9IlBvbHlnb24uSXNGaWxsIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeE9ialBvbHlnb24uY3BwKDI4MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheminOiJsiIgTmFtZT0iUG9seWdvbi5GaWxsQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialBvbHlnb24uY3BwKDI4MikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2x5Z29uMiIgT3JkZXI9IjM1Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueeVjOeUu+eslCIgTmFtZT0iUG9seWdvbi5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpQb2x5Z29uLmNwcCgyODEpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iVGV4dDEiIE9yZGVyPSIzNiIgPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5paH5pysIiBOYW1lPSJUZXh0LlRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjAzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLmmL7npLrmqKHlvI8iIE5hbWU9IlRleHQyIiBPcmRlcj0iMzciID4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuiHquWKqOiwg+aVtCIgTmFtZT0iVGV4dC5BdXRvQWRqdXN0IiBFZGl0b3I9IkJvb2wiIE9yZGVyPSI0IiBQYXRoPSJaeE9ialRleHQuY3BwKDIwNikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWvuem9kOaooeW8jyIgTmFtZT0iVGV4dC5BbGlnbkZsYWciIEVkaXRvcj0iRmxhZ3MiIE9yZGVyPSI2IiBQYXRoPSJaeE9ialRleHQuY3BwKDIwOCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJUZXh0MyIgT3JkZXI9IjM4IiA+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZMiIE5hbWU9IlRleHQuRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZPpopzoibIiIE5hbWU9IlRleHQuQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9ialRleHQuY3BwKDIwNSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iVGV4dC5Cb3JkZXJQZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iOSIgUGF0aD0iWnhTdHJpbmdJdGVtLmNwcCgxMjEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWFtuWugyIgTmFtZT0iVGV4dDQiIE9yZGVyPSIzOSIgPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5YWB6K6457yW6L6RIiBOYW1lPSJUZXh0Lk1hbnVsRWRpdCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iNSIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDcpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWbvueJhyIgTmFtZT0iSW1hZ2UiIE9yZGVyPSI0MCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnaXmupAiIE5hbWU9IkltYWdlLkltZ1BhdGgiIEVkaXRvcj0iUGljdHVyZSIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqSW1hZ2UuY3BwKDExMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6Imy6KGoIiBOYW1lPSJDb2xvclRhYmxlIiBPcmRlcj0iNDEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5ZCN56ewIiBOYW1lPSJDb2xvclRhYmxlLk5hbWUiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjg4KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Y2V5L2NIiBOYW1lPSJDb2xvclRhYmxlLlVuaXQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5aSnIiBOYW1lPSJDb2xvclRhYmxlLk1heCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyOTApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlsI8iIE5hbWU9IkNvbG9yVGFibGUuTWluIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeFN1YkNvbG9yVGFibGUuY3BwKDI5MSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuexu+WeiyIgTmFtZT0iQ29sb3JUYWJsZS5Db2xvclR5cGUiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjUiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjkzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJvcmRlciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIiIE9yZGVyPSI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIuVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iUGVuIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJvcmRlci5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJhciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIiIE9yZGVyPSI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IldpZHRoIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5XaWR0aCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDY2KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5GaWxsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NjcpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuQmFyLkZpbGxDbHIiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzApIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIuVmFsdWUiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuVmFsdWUiIE9yZGVyPSI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5WYWx1ZS5QaW5WYWx1ZSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDczKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlLlBpbkZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ3NikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5WYWx1ZS5QaW5DbHIiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzcpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIiIE9yZGVyPSIxMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuU2hvdzNEIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzkpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQo8L3poQXR0cmlidXRlcz4NCg== \ No newline at end of file diff --git a/Bin/Config/Attributes/WTAI_Attributes_en.dat b/Bin/Config/Attributes/WTAI_Attributes_en.dat new file mode 100644 index 0000000..5826338 --- /dev/null +++ b/Bin/Config/Attributes/WTAI_Attributes_en.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx6aEF0dHJpYnV0ZXM+DQwzyoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iWnhPYmpCYXNlIiBPcmRlcj0iMSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlr7nosaHlkI3np7AiIE5hbWU9Ilp4T2JqQmFzZS5OYW1lIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhc2UuY3BwKDU5NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuWtkOWvueixoSIgTmFtZT0iWnhPYmpCYXNlLlNob3dTdWJPYmpzIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhc2UuY3BwKDU5OCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5a+56LGhIiBOYW1lPSJBeGlzMSIgT3JkZXI9IjIiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5ZCN56ewIiBOYW1lPSJBeGlzLk5hbWUiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQxOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWNleS9jSIgTmFtZT0iQXhpcy5Vbml0IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBSZWFkb25seT0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDIzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLojIPlm7QiIE5hbWU9IkF4aXMyIiBPcmRlcj0iMyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlsI8iIE5hbWU9IlNjYWxlLk1pbiIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDMxKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5aSnIiBOYW1lPSJTY2FsZS5NYXgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzMikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i572R5qC8IiBOYW1lPSJBeGlzMyIgT3JkZXI9IjQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmIiBOYW1lPSJBeGlzLnNob3dCaWdTY2FsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDM5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S657uG5YiG5Yi75bqmIiBOYW1lPSJBeGlzLnNob3dTbWFsbFNjYWxlIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLkuLvliLvluqYiIE5hbWU9IkF4aXMuTWFpbkludGVydmFsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MzMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnu4bliIbliLvluqYiIE5hbWU9IkF4aXMuU3ViSW50ZXJ2YWwiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzNCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5pi+56S65qih5byPIiBOYW1lPSJBeGlzNCIgT3JkZXI9IjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Yi75bqm5pi+5LqO5aSW5L6nIiBOYW1lPSJBeGlzLnNjYWxlT3V0d2FyZCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQxKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5LmY5bmC5pi+56S65Yi75bqmIiBOYW1lPSJBeGlzLnNob3dUaWNrQXNFeHAiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWwj+aVsOS9jeaVsCIgTmFtZT0iQXhpcy5EZWNpbWFsTnVtYmVyIiBFZGl0b3I9IkludFNwaW4iIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iQXhpczUiIE9yZGVyPSI2Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWQjeensOWtl+S9kyIgTmFtZT0iQXhpcy5OYW1lRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQ0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Yi75bqm5a2X5L2TIiBOYW1lPSJBeGlzLk51bWJlckZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW5guWtl+S9kyIgTmFtZT0iQXhpcy5JbmRleEZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjMiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0OCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuminOiJsiIgTmFtZT0iQXhpcy5Db2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQyNikiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJQbG90MSIgT3JkZXI9IjciPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65qCH6aKYIiBOYW1lPSJQbG90LlNob3dUaXRsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Zu+5L6LIiBOYW1lPSJQbG90LlNob3dMZWdlbmQiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i572R5qC8IiBOYW1lPSJQbG90MiIgT3JkZXI9IjgiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmWCIgTmFtZT0iUGxvdC5zaG93U2NhbGVCaWdYIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrkuLvliLvluqZZIiBOYW1lPSJQbG90LnNob3dTY2FsZUJpZ1kiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY5MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuasoeWIu+W6plgiIE5hbWU9IlBsb3Quc2hvd1NjYWxlU21hbGxYIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIzIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrmrKHliLvluqZZIiBOYW1lPSJQbG90LnNob3dTY2FsZVNtYWxsWSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iNCIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlBsb3QzIiBPcmRlcj0iOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmuJDlj5joibIxIiBOYW1lPSJQbG90LkJLQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2ODIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmuJDlj5joibIyIiBOYW1lPSJQbG90LkJLQ29sb3JFeCIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4MykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQbG90NCIgT3JkZXI9IjEwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhuminOiJsiIgTmFtZT0iUGxvdC5GcmFtZUNvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjg1KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLovrnnlYwiIE5hbWU9IlBsb3Q1IiBPcmRlcj0iMTEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6L656LedIiBOYW1lPSJQbG90Lk1hcmdpbiIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9IlBsb3Q2IiBPcmRlcj0iMTIiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5L2N572uIiBOYW1lPSJQbG90LlRpdGxlUG9zIiBFZGl0b3I9IkVudW0iIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg3MDApIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWfuuehgCIgTmFtZT0iWnhPYmoxIiBPcmRlcj0iMTMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5puy57q/5Y+v6KeBIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5DdXJ2ZVZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMjk0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i57q/5Y+v6KeBIiBOYW1lPSJaeE9iakN1cnZlRmxvdy5MaW5lVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iua1geWKqOauteWPr+ingSIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuU2VnbWVudFZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjMiIFBhdGg9Ilp4T2JqQ3VydmVGbG93LmNwcCg4NzEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iWnhPYmoyIiBPcmRlcj0iMTQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i55S756yUIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmtYHliqjnur/popzoibIiIE5hbWU9Ilp4T2JqQ3VydmVCYXNlLmNsckZsb3dMaW5lIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iua1geWKqOauteminOiJsiIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuY2xyRmxvd1NlZ21lbnQiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODczKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i54K55qih5byPIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5Eb3QiIEVkaXRvcj0iRG90IiBPcmRlcj0iNCIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpgInkuK3ngrnmqKHlvI8iIE5hbWU9Ilp4T2JqQ3VydmVCYXNlLkRvdFNlbCIgRWRpdG9yPSJEb3QiIE9yZGVyPSI1IiBQYXRoPSJaeE9iakN1cnZlUHJlc3N1cmUuY3BwKDI5NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5L2N572uIiBOYW1lPSJaeE9iajMiIE9yZGVyPSIxNSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpgInmi6nntKLlvJUiIE5hbWU9Ilp4T2JqQ3VydmVGbG93LkN1clNlZ1B0SW5kZXgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODc1KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9Ilp4T2JqNCIgT3JkZXI9IjE2Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuenu+WKqOaooeW8jyIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cub2JqQ3VydmVGbG93TW92ZU1vZGUiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMzAwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IkxlZ2VuZDEiIE9yZGVyPSIxNyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrovrnmoYYiIE5hbWU9IkxkLlNob3dGcmFtZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzc5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6L655qGG55S756yUIiBOYW1lPSJMZC5GcmFtZVBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODApIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWIhue7hOagh+ivhiIgTmFtZT0iTGVnZW5kMiIgT3JkZXI9IjE4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheiJsiIgTmFtZT0iTGRHcm91cC5CYWNrZ3JkQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzgzKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6Imy6YCP5piO5bqmIiBOYW1lPSJMZEdyb3VwLkJhY2tncmRDbHJBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE1pbj0iMCIgTWF4PSIxMDAiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLliIbnu4TlkI3np7DlrZfkvZMiIE5hbWU9IkxkR3JvdXAuVGV4dEZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjMiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWIhue7hOWQjeensOminOiJsiIgTmFtZT0iTGRHcm91cC5UZXh0Q2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iNCIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlm77kvovpobkiIE5hbWU9IkxlZ2VuZDMiIE9yZGVyPSIxOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXpopzoibIiIE5hbWU9IkxkSXRlbS5CYWNrZ3JkQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6Imy6YCP5piO5bqmIiBOYW1lPSJMZEl0ZW0uQmFja2dyZENsckFscGhhIiBFZGl0b3I9IlNsaWRlciIgTWluPSIwIiBNYXg9IjEwMCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4OCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWbvuS+i+WQjeensOWtl+S9kyIgTmFtZT0iTGRJdGVtLlRleHRGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77kvovlkI3np7DpopzoibIiIE5hbWU9IkxkSXRlbS5UZXh0Q2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iNCIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzkwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLovrnnlYwiIE5hbWU9IkxlZ2VuZDQiIE9yZGVyPSIyMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlhoXnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5Jbm5lciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUmVhZG9ubHk9IjEiICBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlpJbnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5PdXRlciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiICBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuaVtOS9k+S9jee9riIgTmFtZT0iTGVnZW5kNSIgT3JkZXI9IjIxIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS9jee9riIgTmFtZT0iTGQuTGRQb3MiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM2NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5YW25a6DIiBOYW1lPSJMZWdlbmQ2IiBPcmRlcj0iMjIiIEV4cGFuZD0iMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77npLrlrr3luqYiIE5hbWU9IkxkLkxlZnRXaWR0aCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5NCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuagh+mimOmrmOW6piIgTmFtZT0iTGQuR3JvdXBIZWlnaHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTUpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iVGl0bGUxIiBPcmRlcj0iMjMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5YaF5a65IiBOYW1lPSJUaXRsZS5UaXRsZVRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk3KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IlRpdGxlMiIgT3JkZXI9IjI0Ij4NCiAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5a2X5L2TIiBOYW1lPSJUaXRsZS5UZXh0Rm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJUaXRsZS5jcHAoOTkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmoIfpopjpopzoibIiIE5hbWU9IlRpdGxlLlRleHRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSLln7rnoYAiIE5hbWU9IlJlY3QxIiBPcmRlcj0iMjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S66L655qGGIiBOYW1lPSJSZWN0LlNob3dCb3giIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA5KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlJlY3QyIiBPcmRlcj0iMjYiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6ImyIiBOYW1lPSJSZWN0LkJhY2tncm91bmRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6Imy6YCP5piO5bqmIiBOYW1lPSJSZWN0LkJhY2tncm91bmRBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE1pbj0iMCIgTWF4PSIxMDAiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMwOCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJSZWN0MyIgT3JkZXI9IjI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueUu+eslCIgTmFtZT0iUmVjdC5Cb3VuZFBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIxIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMxMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJCYW5kMSIgT3JkZXI9IjI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW3pui+ueeVjCIgTmFtZT0iQmFuZC5MIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyMykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWPs+i+ueeVjCIgTmFtZT0iQmFuZC5SIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyNCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4iui+ueeVjCIgTmFtZT0iQmFuZC5UIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4i+i+ueeVjCIgTmFtZT0iQmFuZC5CIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2ludCIgT3JkZXI9IjI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iUG9pbnQuRG90IiBFZGl0b3I9IkRvdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUG9pbnQuY3BwKDE1NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJMaW5lMSIgT3JkZXI9IjMwIj4NCiAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S654K5IiBOYW1lPSJMaW5lLlNob3dEb3RQb2ludCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iTGluZTIiIE9yZGVyPSIzMSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnlLvnrJQiIE5hbWU9IkxpbmUuUGVuIiBFZGl0b3I9IlBlbiIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqTGluZS5jcHAoMjgyKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i54K55qih5byPIiBOYW1lPSJMaW5lLkRvdCIgRWRpdG9yPSJEb3QiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4NCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5L2N572uIiBOYW1lPSJMaW5lMyIgT3JkZXI9IjMyIj4NCiAgICAgICAgPFB0eUdyb3VwIExhYmVsPSLotbfngrkiIE5hbWU9IlN0YXJ0UG9zIiBPcmRlcj0iMSIgRXhwYW5kPSIwIj4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJYIiBOYW1lPSJTdGFydFBvcy5YIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI3OCkiLz4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJZIiBOYW1lPSJTdGFydFBvcy5ZIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI3OSkiLz4NCiAgICAgICAgPC9QdHlHcm91cD4NCiAgICAgICAgPFB0eUdyb3VwIExhYmVsPSLnu4jngrkiIE5hbWU9IkVuZFBvcyIgT3JkZXI9IjMzIiBFeHBhbmQ9IjAiPg0KICAgICAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IlgiIE5hbWU9IkVuZFBvcy5YIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4MCkiLz4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJZIiBOYW1lPSJFbmRQb3MuWSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODEpIi8+DQogICAgICAgIDwvUHR5R3JvdXA+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWhq+WFhSIgTmFtZT0iUG9seWdvbjEiIE9yZGVyPSIzNCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmK/lkKbloavlhYUiIE5hbWU9IlBvbHlnb24uSXNGaWxsIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeE9ialBvbHlnb24uY3BwKDI4MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheminOiJsiIgTmFtZT0iUG9seWdvbi5GaWxsQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialBvbHlnb24uY3BwKDI4MikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2x5Z29uMiIgT3JkZXI9IjM1Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueeVjOeUu+eslCIgTmFtZT0iUG9seWdvbi5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpQb2x5Z29uLmNwcCgyODEpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iVGV4dDEiIE9yZGVyPSIzNiIgPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5paH5pysIiBOYW1lPSJUZXh0LlRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjAzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLmmL7npLrmqKHlvI8iIE5hbWU9IlRleHQyIiBPcmRlcj0iMzciID4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuiHquWKqOiwg+aVtCIgTmFtZT0iVGV4dC5BdXRvQWRqdXN0IiBFZGl0b3I9IkJvb2wiIE9yZGVyPSI0IiBQYXRoPSJaeE9ialRleHQuY3BwKDIwNikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWvuem9kOaooeW8jyIgTmFtZT0iVGV4dC5BbGlnbkZsYWciIEVkaXRvcj0iRmxhZ3MiIE9yZGVyPSI2IiBQYXRoPSJaeE9ialRleHQuY3BwKDIwOCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJUZXh0MyIgT3JkZXI9IjM4IiA+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZMiIE5hbWU9IlRleHQuRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZPpopzoibIiIE5hbWU9IlRleHQuQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9ialRleHQuY3BwKDIwNSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iVGV4dC5Cb3JkZXJQZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iOSIgUGF0aD0iWnhTdHJpbmdJdGVtLmNwcCgxMjEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWFtuWugyIgTmFtZT0iVGV4dDQiIE9yZGVyPSIzOSIgPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5YWB6K6457yW6L6RIiBOYW1lPSJUZXh0Lk1hbnVsRWRpdCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iNSIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDcpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWbvueJhyIgTmFtZT0iSW1hZ2UiIE9yZGVyPSI0MCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnaXmupAiIE5hbWU9IkltYWdlLkltZ1BhdGgiIEVkaXRvcj0iUGljdHVyZSIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqSW1hZ2UuY3BwKDExMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6Imy6KGoIiBOYW1lPSJDb2xvclRhYmxlIiBPcmRlcj0iNDEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5ZCN56ewIiBOYW1lPSJDb2xvclRhYmxlLk5hbWUiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjg4KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Y2V5L2NIiBOYW1lPSJDb2xvclRhYmxlLlVuaXQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5aSnIiBOYW1lPSJDb2xvclRhYmxlLk1heCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyOTApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlsI8iIE5hbWU9IkNvbG9yVGFibGUuTWluIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeFN1YkNvbG9yVGFibGUuY3BwKDI5MSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuexu+WeiyIgTmFtZT0iQ29sb3JUYWJsZS5Db2xvclR5cGUiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjUiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjkzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJvcmRlciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIiIE9yZGVyPSI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIuVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iUGVuIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJvcmRlci5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJhciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIiIE9yZGVyPSI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IldpZHRoIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5XaWR0aCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDY2KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5GaWxsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NjcpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuQmFyLkZpbGxDbHIiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzApIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIuVmFsdWUiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuVmFsdWUiIE9yZGVyPSI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5WYWx1ZS5QaW5WYWx1ZSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDczKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlLlBpbkZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ3NikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5WYWx1ZS5QaW5DbHIiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzcpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIiIE9yZGVyPSIxMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuU2hvdzNEIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzkpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KPC96aEF0dHJpYnV0ZXM+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/BtnCmds.dat b/Bin/Config/Common/BtnCmds.dat new file mode 100644 index 0000000..b2ce69d --- /dev/null +++ b/Bin/Config/Common/BtnCmds.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoTnu5jlm77pg6jliIbnmoTlip/og73mjInpkq4gICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBBdXRob3Iocyk6IHdhbmd6ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNDAzMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KPCEtLSDpg6jliIbmlbDmja7pobnor7TmmI4NCiAgICAgICAgSUQ6ICAgICAgICAgIOWUr+S4gOagh+ivhg0KICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICBUZXh0ICAgICAgICAg5YaF5a6577yM6YCa5bi45Lit5paHDQogICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQogICAgICAgIENoZWNrTW9kZe+8miAgQ2hlY2vnirbmgIHmqKHlvI/vvIzpu5jorqTkuLowDQogICAgICAgICAgICAgICAgICAgICAgICAw77ya54K55Ye75LmL5ZCO5peg54q25oCB77yM5Y+q5piv5Y2V57qv55qEQWN0aW9u77yM5q+U5aaCIOWKoOi9veWOi+WKm+aWh+S7tg0KICAgICAgICAgICAgICAgICAgICAgICAgMTog54K55Ye75LmL5ZCO5peg54q25oCB77yM5L2G6ZyA6KaB5oqK5YW25a6DQ2hlY2tlZOWOu+mZpO+8jOW5tuS4lOWbnuW9kuWIneWni+eKtuaAge+8jOWmgiDmgaLlpI3mkqTplIDjgIHmlL7lpKfjgIHnvKnlsI/jgIHljp/lp4vnirbmgIENCiAgICAgICAgICAgICAgICAgICAgICAgIDI6IOeCueWHu+S5i+WQjuacieeKtuaAge+8jOS9humcgOimgeaKiuWFtuWug0NoZWNrZWTljrvpmaTvvIzkuIDml6bmk43kvZzlrozmiJDlkI7vvIzlm57lvZLliJ3lp4vnirbmgIHvvIzlpoIg5o+S5YWl54K544CB5o+S5YWl54m55b6B57q/562JDQogICAgICAgICAgICAgICAgICAgICAgICAz77ya5oyB57ut55qE54q25oCB77yM5q+U5aaCIOawtOW5s+e8qeaUvi/lnoLnm7TnvKnmlL7vvIxNb3Zl77yM5qGG6YCJ57yp5pS+562J77yM54K55Ye75ZCO77yM5L+d5oyBQ2hlY2vnirbmgIHvvIzkuIDnm7TliLDkuozmrKHngrnlh7vmiJbngrnlh7vlhbblroMNCiAgICAgICAgICAgICAgICAgICAgICAgIDQ6IOW8gOWFs+exu+eahOaMiemSrueKtuaAge+8jOavlOWmguaYvuekuuWNgeWtl+e6v++8jOaMieS4i+S4uuW8gOOAgeWGjeasoeaMieS4i+S4uuWFs++8jOS4jeW9seWTjeWFtuWug+aMiemSrueKtuaAgQ0KICAgICAgICAgICAgICAgICAgICAgICAgNe+8muWFtuWug++8iFRPRE/vvIkNCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJvb3Q+DQoNCiAgICA8IS0tIOWRveS7pOWfuuehgOWumuS5iSAtLT4NCiAgICA8QnV0dG9ucyBOYW1lPSIxIj4NCg0KICAgICAgICA8IS0tIOWbvuWFgyAtLT4NCiAgICAgICAgPEJ0biBJRD0iMTAwIiBOYW1lPSJQb2ludCIgVGV4dD0iIiBDaGVja01vZGU9IjIiIEljb249Ikluc2VydFBvaW50IiBUaXBzPSLmj5LlhaXngrkiIC8+DQogICAgICAgIDxCdG4gSUQ9IjEwMSIgTmFtZT0iTGluZSIgVGV4dD0iIiBDaGVja01vZGU9IjIiIEljb249Ikluc2VydExpbmUiIFRpcHM9IuaPkuWFpeebtOe6vyIgLz4NCiAgICAgICAgPEJ0biBJRD0iMTAyIiBOYW1lPSJSZWN0IiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iSW5zZXJ0UmVjdCIgVGlwcz0i55+p5b2i5qGG6YCJIiAvPg0KICAgICAgICA8QnRuIElEPSIxMDMiIE5hbWU9IlBvbHlnb24iIFRleHQ9IiIgQ2hlY2tNb2RlPSIyIiBJY29uPSJJbnNlcnRQb2x5Z29uIiBUaXBzPSLmj5LlhaXlpJrovrnlvaIiIC8+DQogICAgICAgIDxCdG4gSUQ9IjEwNCIgTmFtZT0iVGV4dCIgVGV4dD0iIiBDaGVja01vZGU9IjIiIEljb249Ikluc2VydFRleHQiIFRpcHM9IuaPkuWFpeaWh+acrOahhiIgLz4NCiAgICAgICAgPEJ0biBJRD0iMTA1IiBOYW1lPSJCYW5kViIgVGV4dD0iIiBDaGVja01vZGU9IjIiIEljb249Ikluc2VydFZlckJhbmQiIFRpcHM9IuWMuuWfn+W4pijnq5bnm7Qp6YCJ5Y+WIiAvPg0KICAgICAgICA8QnRuIElEPSIxMDYiIE5hbWU9IkJhbmRIIiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iSW5zZXJ0SG9yaUJhbmQiIFRpcHM9IuWMuuWfn+W4pijmsLTlubMp6YCJ5Y+WIiAvPg0KICAgICAgICA8QnRuIElEPSIxMDciIE5hbWU9IkltYWdlIiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iSW5zZXJ0UGljIiBUaXBzPSLmj5LlhaXlm77niYciIC8+DQogICAgICAgIDxCdG4gSUQ9IjEwOCIgTmFtZT0iQ3VydmVGcmVlIiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iSW5zZXJ0Q3VydmUiIFRpcHM9IuaPkuWFpeiHqueUseabsue6vyIgLz4NCg0KICAgICAgICA8IS0tIOmrmOe6p+WbvuWFgyAtLT4NCiAgICAgICAgPEJ0biBJRD0iMTU3IiBOYW1lPSJDdXJ2ZVBQRCIgVGV4dD0iIiBDaGVja01vZGU9IjQiIEljb249IkN1cnZlUFBEIiBUaXBzPSLmj5LlhaVQUETmm7Lnur8iIC8+DQogICAgICAgIDxCdG4gSUQ9IjE1NiIgTmFtZT0iU0xSX1BPSU5UIiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iSW5zZXJ0UG9pbnQiIFRpcHM9IuaPkuWFpeeJueW+geeCuSIgLz4NCiAgICAgICAgPEJ0biBJRD0iMTUwIiBOYW1lPSJTTFJfMCIgVGV4dD0iIiBDaGVja01vZGU9IjIiIEljb249IlJhZGlhbEZsb3ciIFRpcHM9IuaPkuWFpeeJueW+gee6vygwKSIgLz4NCiAgICAgICAgPEJ0biBJRD0iMTUxIiBOYW1lPSJTTFJfNDEiIFRleHQ9IiIgQ2hlY2tNb2RlPSIyIiBJY29uPSJCaWxpbmVhckZsb3ciIFRpcHM9IuaPkuWFpeeJueW+gee6vygxLzQpIiAvPg0KICAgICAgICA8QnRuIElEPSIxNTIiIE5hbWU9IlNMUl8yMSIgVGV4dD0iIiBDaGVja01vZGU9IjIiIEljb249IkxpbmVhckZsb3ciIFRpcHM9IuaPkuWFpeeJueW+gee6vygxLzIpIiAvPg0KICAgICAgICA8QnRuIElEPSIxNTMiIE5hbWU9IlNMUl8xIiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iVW5pdFNsb3BlIiBUaXBzPSLmj5LlhaXnibnlvoHnur8oMSkiIC8+DQogICAgICAgIDxCdG4gSUQ9IjE1NCIgTmFtZT0iU0xSXzIxTmVnYXRpdmUiIFRleHQ9IiIgQ2hlY2tNb2RlPSIyIiBJY29uPSJTcGhlcmljYWxGbG93IiBUaXBzPSLmj5LlhaXnibnlvoHnur8oLTEvMikiIC8+DQogICAgICAgIDxCdG4gSUQ9IjE1NSIgTmFtZT0iTGluZVBhcmFsbGVsIiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iTGluZVBhcmFsbGVsIiBUaXBzPSLmj5LlhaXlubPooYznur8iIC8+DQoNCiAgICAgICAgPCEtLSBXZWxsTWFwIC0tPg0KICAgICAgICA8QnRuIElEPSIxODAiIE5hbWU9IldfViIgVGV4dD0iIiBDaGVja01vZGU9IjIiICBJY29uPSJJbnNlcnRQb2ludCIgVGlwcz0i55u05LqVIiAvPg0KICAgICAgICA8QnRuIElEPSIxODEiIE5hbWU9IldfSCIgVGV4dD0iIiBDaGVja01vZGU9IjIiIEljb249Ikluc2VydExpbmUiIFRpcHM9IuawtOW5s+S6lSIgLz4NCiAgICAgICAgPEJ0biBJRD0iMTgyIiBOYW1lPSJXX01MIiBUZXh0PSIiIENoZWNrTW9kZT0iMiIgSWNvbj0iSW5zZXJ0UmVjdCIgVGlwcz0i5aSa5q615LqVIiAvPg0KDQogICAgICAgIDwhLS0g57yW6L6R5Y+K5Lqk5LqSIC0tPg0KICAgICAgICA8QnRuIElEPSIyMDAiIE5hbWU9IlVuZG8iIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJVbmRvIiBUaXBzPSLmkqTplIAiIC8+DQogICAgICAgIDxCdG4gSUQ9IjIwMSIgTmFtZT0iUmVkbyIgVGV4dD0iIiBDaGVja01vZGU9IjAiIEljb249IlJlZG8iIFRpcHM9IuaBouWkjSIgLz4NCg0KICAgICAgICA8QnRuIElEPSIyMDgiIE5hbWU9IlNlbGVjdCIgVGV4dD0iIiBDaGVja01vZGU9IjMiIEljb249IkFycm93IiBUaXBzPSLliIfmjaLkuLrpgInmi6nmqKHlvI8iIC8+DQogICAgICAgIA0KICAgICAgICA8QnRuIElEPSIyMDIiIE5hbWU9IlNlbGVjdE11bHRpIiBUZXh0PSIiIENoZWNrTW9kZT0iMyIgSWNvbj0iTXVsdGlTZWxlY3QiIFRpcHM9IuWkmumAiSIgLz4NCiAgICAgICAgPEJ0biBJRD0iMjAzIiBOYW1lPSJTZWxlY3RSZWN0IiBUZXh0PSIiIENoZWNrTW9kZT0iMyIgSWNvbj0iUmVnaW9uU2VsZWN0IiBUaXBzPSLmibnph4/moYbpgInngrkiIC8+DQogICAgICAgIDxCdG4gSUQ9IjIwNCIgTmFtZT0iRXhjbHVkZVJlY3QiIFRleHQ9IiIgQ2hlY2tNb2RlPSIzIiBJY29uPSJFeGNsdWRlUmVjdCIgVGlwcz0i5qGG6YCJ5YmU6Zmk54K5IiAvPg0KICAgICAgICA8QnRuIElEPSIyMDUiIE5hbWU9IkVyYXNlUmVjdCIgVGV4dD0iIiBDaGVja01vZGU9IjMiIEljb249IkVyYXNlUmVjdCIgVGlwcz0i5qGG6YCJ5Yig6Zmk54K5IiAvPg0KICAgICAgICA8QnRuIElEPSIyMDYiIE5hbWU9Ik1vdmUiIFRleHQ9IiIgQ2hlY2tNb2RlPSIzIiBJY29uPSJNb3ZlIiBUaXBzPSJNb3ZlIiAvPg0KICAgICAgICA8IS0tIDIwMTgwMzE5IDIwN+WKn+iDveebruWJjeWwseaYr+S/ruaUueS4gOS4qm9wTm9uZeaEj+S5ieS4jeWkp++8jOaaguaXtuWOu+aOiSAtLT4NCiAgICAgICAgPEJ0biBJRD0iMjA3IiBOYW1lPSJBbGwiIFRleHQ9IiIgQ2hlY2tNb2RlPSIxIiBJY29uPSJBbGwiIFRpcHM9IlJlc2V0IiAvPg0KDQogICAgICAgIDxCdG4gSUQ9IjIwOSIgTmFtZT0iSGl0UG9pbnQiIFRleHQ9IiIgQ2hlY2tNb2RlPSIyIiBJY29uPSJBZGRQb2ludCIgVGlwcz0i5aKe5Yqg5Zue5b2S54K5IiAvPg0KICAgICAgICA8IS0tIDIwMTgwMzE56ICD6JmR5Yiw55uu5YmN55qE5Yqf6IO977yMMjA05LiOMjEw5a6e546w55qE5Yqf6IO95LiA6Ie0IC0tPg0KICAgICAgICA8QnRuIElEPSIyMTAiIE5hbWU9IlJlc2V0UmVjdCIgVGV4dD0iIiBDaGVja01vZGU9IjEiIEljb249IlJlc2V0UmVjdCIgVGlwcz0i6YeN572u54K5IiAvPg0KICAgICAgICANCiAgICAgICAgPCEtLSDnvKnmlL4gLS0+DQogICAgICAgIDxCdG4gSUQ9IjMwMCIgTmFtZT0iWm9vbUluIiBUZXh0PSIiIENoZWNrTW9kZT0iMSIgSWNvbj0iWm9vbUluIiBUaXBzPSLmlbTkvZPmlL7lpKciIC8+DQogICAgICAgIDxCdG4gSUQ9IjMxMCIgTmFtZT0iWm9vbU91dCIgVGV4dD0iIiBDaGVja01vZGU9IjEiIEljb249Ilpvb21PdXQiIFRpcHM9IuaVtOS9k+e8qeWwjyIgLz4NCiAgICAgICAgPEJ0biBJRD0iMzAxIiBOYW1lPSJab29tUmVjdEluIiBUZXh0PSIiIENoZWNrTW9kZT0iMyIgSWNvbj0iWm9vbVJlY3RJbiIgVGlwcz0i5qGG6YCJ5pS+5aSnIiAvPg0KICAgICAgICA8QnRuIElEPSIzMDIiIE5hbWU9Ilpvb21SZWN0SW5WIiBUZXh0PSIiIENoZWNrTW9kZT0iMyIgSWNvbj0iWm9vbUluViIgVGlwcz0i5qGG6YCJ5pS+5aSnKOerluebtCkiIC8+DQogICAgICAgIDxCdG4gSUQ9IjMwMyIgTmFtZT0iWm9vbVJlY3RJbkgiIFRleHQ9IiIgQ2hlY2tNb2RlPSIzIiBJY29uPSJab29tSW5IIiBUaXBzPSLmoYbpgInmlL7lpKco5rC05bmzKSIgLz4NCiAgICAgICAgPEJ0biBJRD0iMzA0IiBOYW1lPSJab29tUmVzZXQiIFRleHQ9IiIgQ2hlY2tNb2RlPSIxIiBJY29uPSJab29tUmVzZXQiIFRpcHM9IuWOn+Wni+Wkp+WwjyIgLz4NCiAgICAgICAgPEJ0biBJRD0iMzA1IiBOYW1lPSJab29tU2VsZkFkYXB0YXRpb24iIENoZWNrTW9kZT0iMSIgVGV4dD0iIiBJY29uPSJab29tU2VsZkFkYXB0YXRpb24iIFRpcHM9IuiHqumAguW6lOWkp+WwjyIgLz4NCg0KICAgICAgICA8IS0tIOaYvuekuiAtLT4NCiAgICAgICAgPEJ0biBJRD0iNDAxIiBOYW1lPSJTaG93Q3Jvc3NMaW5lIiBUZXh0PSIiIENoZWNrTW9kZT0iNCIgSWNvbj0iQ3Jvc3NsaW5lIiBUaXBzPSLmmL7npLrljYHlrZfnur8iIC8+DQogICAgICAgIDxCdG4gSUQ9IjQwMiIgTmFtZT0iU2hvd1ZhbHVlIiBUZXh0PSIiIENoZWNrTW9kZT0iNCIgSWNvbj0iU2hvd1ZhbHVlIiBUaXBzPSLmmL7npLrmlbDlgLzmj5DnpLoiIC8+DQogICAgICAgIDxCdG4gSUQ9IjQwMyIgTmFtZT0iU2hvd1Byb3BlcnR5IiBUZXh0PSIiIENoZWNrTW9kZT0iMCIgSWNvbj0iUHJvcGVydHkiIFRpcHM9IuWxnuaAp+mhtSIgLz4NCiAgICAgICAgPEJ0biBJRD0iNDA0IiBOYW1lPSJSZWZyZXNoR3JhcGgiIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJSZWZyZXNoIiBUaXBzPSLliLfmlrAiIC8+DQoNCiAgICAgICAgPCEtLSDovpPlhaXovpPlh7ogLS0+DQogICAgICAgIDxCdG4gSUQ9IjUwMCIgTmFtZT0iTG9hZEdyYXBoIiBUZXh0PSIiIENoZWNrTW9kZT0iMCIgSWNvbj0iTG9hZEdyYXBoIiBUaXBzPSLmiZPlvIDlm77ku7YiIC8+DQogICAgICAgIDxCdG4gSUQ9IjUwMSIgTmFtZT0iU2F2ZUdyYXBoIiBUZXh0PSIiIENoZWNrTW9kZT0iMCIgSWNvbj0iU2F2ZUdyYXBoIiBUaXBzPSLkv53lrZjlm77ku7YiIC8+DQogICAgICAgIDxCdG4gSUQ9IjUwMiIgTmFtZT0iTG9hZEV4Y2VsIiBUZXh0PSIiIENoZWNrTW9kZT0iMCIgSWNvbj0iSW1wb3J0RXhjZWwiIFRpcHM9IuWKoOi9vUV4Y2VsIiAvPg0KICAgICAgICA8QnRuIElEPSI1MDMiIE5hbWU9IlNhdmVFeGNlbCIgVGV4dD0iIiBDaGVja01vZGU9IjAiIEljb249IkV4cG9ydEV4Y2VsIiBUaXBzPSLlr7zlh7pFeGNlbCIgLz4NCiAgICAgICAgPEJ0biBJRD0iNTA0IiBOYW1lPSJMb2FkRGF0YWJhc2UiIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJEYXRhYmFzZSIgVGlwcz0i5LuO5pWw5o2u5bqT6K+75Y+WIiAvPg0KICAgICAgICA8QnRuIElEPSI1MDUiIE5hbWU9IlNhdmVEYXRhYmFzZSIgVGV4dD0iIiBDaGVja01vZGU9IjAiIEljb249IkluRGF0YWJhc2UiIFRpcHM9IuS/neWtmOWFpeW6kyIgLz4NCg0KICAgICAgICA8QnRuIElEPSI1MDYiIE5hbWU9IkxvYWRQIiBUZXh0PSIiIENoZWNrTW9kZT0iMCIgSWNvbj0iUHJlc3N1cmVEYXRhIiBUaXBzPSLliqDovb3ljovlipvmlbDmja4iIC8+DQogICAgICAgIDxCdG4gSUQ9IjUwNyIgTmFtZT0iTG9hZEYiIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJSYXRlRGF0YSIgVGlwcz0i5Yqg6L295rWB6YeP5pWw5o2uIiAvPg0KDQogICAgICAgIDxCdG4gSUQ9IjUwOCIgTmFtZT0iUHJpbnQiIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJQcmludCIgVGlwcz0i5omT5Y2wIiAvPg0KICAgICAgICA8QnRuIElEPSI1MDkiIE5hbWU9InByaW50X1ByZXZpZXciIENoZWNrTW9kZT0iMCIgVGV4dD0iIiBJY29uPSJQcmVQcmludCIgVGlwcz0i5omT5Y2w6aKE6KeIIiAvPg0KDQogICAgICAgIDxCdG4gSUQ9IjUxMCIgTmFtZT0iU2F2ZUFzSW1nIiBUZXh0PSIiIENoZWNrTW9kZT0iMCIgSWNvbj0iU2F2ZUFzSW1hZ2UiIFRpcHM9IuS/neWtmOS4uuWbvueJhyIgLz4NCiAgICAgICAgPEJ0biBJRD0iNTExIiBOYW1lPSJTYXZlQXNUZW1wbCIgVGV4dD0iIiBDaGVja01vZGU9IjAiIEljb249IlNhdmVBc1RlbXBsIiBUaXBzPSLkv53lrZjkuLrmqKHmnb8iIC8+DQoNCiAgICAgICAgPCEtLSDljovlipvmtYHph4/nvJbovpEgLS0+DQogICAgICAgIDxCdG4gSUQ9IjYwMCIgTmFtZT0iVGhpbm5pbmciIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJUaGlubmluZyIgVGlwcz0i5oq956iAIiAvPg0KICAgICAgICA8QnRuIElEPSI2MDEiIE5hbWU9IlNtb290aCIgVGV4dD0iIiBDaGVja01vZGU9IjAiIEljb249IlNtb290aCIgVGlwcz0i5YWJ5ruRIiAvPg0KICAgICAgICA8QnRuIElEPSI2MDIiIE5hbWU9Ikluc2VydFJhdGUiIFRleHQ9IiIgQ2hlY2tNb2RlPSIzIiBJY29uPSJSYXRlUG9pbnQiIFRpcHM9IuaPkuWFpea1gemHj+eCuSIgLz4NCiAgICAgICAgPEJ0biBJRD0iNjAzIiBOYW1lPSJQcmV2aWV3QnlDdXIiIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJQcmV2aWV3QnlDdXIiIFRpcHM9IumihOiniOW9k+WJjemAieS4rSIgLz4NCiAgICAgICAgPEJ0biBJRD0iNjA0IiBOYW1lPSJTd2FwUEYiIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJQRiIgVGlwcz0i6YCJ5oup5Y6L5Yqb5rWB6YePIiAvPg0KDQoNCiAgICAgICAgPCEtLSDmlbDlgLzor5XkupXnm7jlhbPlip/og70gLS0+DQogICAgICAgIDxCdG4gSUQ9IjcwMCIgTmFtZT0ibm1JbnNlcnRPYmpQb2ludCIgVGV4dD0iIiBDaGVja01vZGU9IjAiIEljb249Ikluc2VydFBvaW50IiBUaXBzPSJb5qC35L6LXeaPkuWFpeeCuSIgLz4NCiAgICAgICAgPEJ0biBJRD0iNzAxIiBOYW1lPSJubUluc2VydE9iakxpbmUiIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJJbnNlcnRMaW5lIiBUaXBzPSJb5qC35L6LXeaPkuWFpee6vyIgLz4NCiAgICAgICAgPEJ0biBJRD0iNzAyIiBOYW1lPSJubUluc2VydE9ialBvbHlnb24iIFRleHQ9IiIgQ2hlY2tNb2RlPSIwIiBJY29uPSJJbnNlcnRQb2x5Z29uIiBUaXBzPSJb5qC35L6LXeaPkuWFpeWkmui+ueW9oiIgLz4NCg0KICAgICAgICA8IS0tIFBWVOebuOWFsyAtLT4NCiAgICAgICAgPEJ0biBJRD0iODAwIiBOYW1lPSJCYXNpY09wdGlvbiIgVGV4dD0iIiBJY29uPSJQdnRCYXNpY09wdGlvbiIgVGlwcz0i5Z+656GA6YCJ6aG5IiAvPg0KICAgICAgICA8QnRuIElEPSI4MDEiIE5hbWU9IlBoYXNlT2lsIiBUZXh0PSIiIEljb249IlBoYXNlT2lsIiBUaXBzPSLmsrnnm7giIC8+DQogICAgICAgIDxCdG4gSUQ9IjgwMiIgTmFtZT0iUGhhc2VHYXMiIFRleHQ9IiIgSWNvbj0iUGhhc2VHYXMiIFRpcHM9IuawlOebuCIgLz4NCiAgICAgICAgPEJ0biBJRD0iODAzIiBOYW1lPSJQaGFzZVdhdGVyIiBUZXh0PSIiIEljb249IlBoYXNlV2F0ZXIiIFRpcHM9IuawtOebuCIgLz4NCiAgICAgICAgPEJ0biBJRD0iODA0IiBOYW1lPSJTYXZlUHZ0IiBUZXh0PSIiIEljb249IlNhdmVQdnQiIFRpcHM9IuS/neWtmFB2dCIgLz4NCiAgICAgICAgPEJ0biBJRD0iODA1IiBOYW1lPSJMb2FkUHZ0IiBUZXh0PSIiIEljb249IkxvYWRQdnQiIFRpcHM9IuWKoOi9vVB2dCIgLz4NCiAgICAgICAgPEJ0biBJRD0iODA2IiBOYW1lPSJQc2V1UHJlc3N1cmUiIFRleHQ9IiIgSWNvbj0iUHNlZG9QIiBUaXBzPSLorqHnrpfmi5/ljovlipsiIC8+DQogICAgICAgIDxCdG4gSUQ9IjgwNyIgTmFtZT0iUHNldVByZXNzdXJlMyIgVGV4dD0iIiBJY29uPSJQc2Vkb1AzIiBUaXBzPSLorqHnrpfkuInljLrmi5/ljovlipsiIC8+DQogICAgICAgIDxCdG4gSUQ9IjgwOCIgTmFtZT0iUHNldVByZXNzdXJlQyIgVGV4dD0iIiBJY29uPSJQc2Vkb1BDIiBUaXBzPSLnu4TliIblkKvph4/orqHnrpfmi5/ljovlipsiIC8+DQoNCiAgICAgICA8IS0tIOS6p+a2suauteWbvuW9ouebuOWFsyAtLT4NCiAgICAgICA8QnRuIElEPSI5MDAiIE5hbWU9IkVxdUxheW91dCIgVGV4dD0iIiBJY29uPSJFcXVMYXlvdXQiIFRpcHM9IuetiemXtOmalOW4g+WxgCIgLz4NCiAgICAgICA8QnRuIElEPSI5MDEiIE5hbWU9IkFsbFNlZyIgVGV4dD0iIiBJY29uPSJBbGxTZWciIFRpcHM9IuS6p+a2suauteaVtOS9k+aTjeS9nCIgLz4NCiAgICAgICA8QnRuIElEPSI5MDIiIE5hbWU9IlRvdGFsU2VnIiBUZXh0PSIiIENoZWNrTW9kZSA9ICI0IiBJY29uPSJUb3RhbFNlZyIgVGlwcz0i5Lqk5LqS5pW05L2T5pON5L2cIiAvPg0KDQogICAgICAgIDwhLS0g5YW25a6DIC0tPg0KICAgICAgICA8QnRuIElEPSI5OTkiIE5hbWU9IkhlbHAiIFRleHQ9IiIgSWNvbj0iSGVscCIgVGlwcz0i5biu5YqpIiAvPg0KDQogICAgPC9CdXR0b25zPg0KDQogICAgPCEtLSDlkb3ku6TlhbPogZQgLS0+DQogICAgPENvbW1hbmRzIE5hbWU9IjEiID4NCg0KICAgICAgICA8IS0tIOWbvuexu+Wei+WRveS7pOeahOmFjee9ru+8jOavlOWmguWNiuWvueaVsOOAgeWPjOWvueaVsOWmguaenOaMiemSruS4jeS4gOiHtO+8jOWPr+S7peWcqOatpOmFjee9riAtLT4NCg0KICAgICAgICA8IS0tIFBsb3RCYXNpY1R5cGXkuLrln7rnoYDnsbvlnovvvIzpu5jorqTnmoTlm77lvaLphY3nva4gLS0+DQogICAgICAgIDxDaGFydCBUeXBlPSJQbG90QmFzaWNUeXBlIj4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTAwOzUwMSIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMTAwOzEwMTsxMDI7MTAzOzEwNDsxMDU7MTA2OzEwNzsxMDgiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjIwMDsyMDE7OzIwODsyMDk7MjAzOzIwNDsyMDU7MjA2IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIxNTA7MTUxOzE1MjsxNTM7MTU0OzE1NTsxNTY7MjUiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjMwMTszMDI7MzAzOzMwMDszMTA7MzA0IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSI0MDE7NDAyOzQwMzs0MDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjUwODs1MDk7NTEwOzUxMTs5OTkiIC8+ICAgICAgICAgICAgDQogICAgICAgIDwvQ2hhcnQ+DQoNCiAgICAgICAgPCEtLSDljovlipvnvJbovpHmqKHlvI8gLS0+DQogICAgICAgIDxDaGFydCBUeXBlPSJQX1R5cGVfRWRpdCI+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjYwNCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA2IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIyMDg7MTAyOzEwNTsxMDY7MjA1IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIyMDA7MjAxIiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIzMDE7MzAyOzMwMzsyMDY7MzAwOzMxMDszMDQ7MzA1IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSI0MDE7NDAyOzQwMzs0MDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjUwNTs1MDg7NTA5OzUxMCIgLz4NCiAgICAgICAgPC9DaGFydD4NCg0KICAgICAgICA8IS0tIOa1gemHj+e8lui+keaooeW8jyAtLT4NCiAgICAgICAgPENoYXJ0IFR5cGU9IkZfVHlwZV9FZGl0Ij4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA3IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIyMDg7NjAyIiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIyMDA7MjAxIiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIzMDE7MzAyOzMwMzsyMDY7MzAwOzMxMDszMDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjQwMTs0MDI7NDAzOzQwNCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA1OzUwODs1MDk7NTEwIiAvPg0KICAgICAgICA8L0NoYXJ0Pg0KDQogICAgICAgIDwhLS0g5Y6L5YqbK+a1gemHj+e7n+S4gOaooeW8jyAtLT4NCiAgICAgICAgPENoYXJ0IFR5cGU9IlBGX1R5cGVfTUVSR0UiPg0KICAgICAgICAgICAgPENtZHMgSURzPSI2MDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjUwNjs1MDciIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjYwMiIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMjA4OzEwMjsxMDU7MTA2OzIwNSIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMzAxOzMwMjszMDM7MjA2OzMwMDszMTA7MzA0OzMwNSIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNDAxOzQwMjs0MDM7NDA0IiAvPg0KICAgICAgICA8L0NoYXJ0Pg0KDQoNCiAgICAgICAgPCEtLSDljovlipvnvJbovpHmqKHlvI9b5aKe5Yqg5Zue5b2S54K5XSAtLT4NCiAgICAgICAgPENoYXJ0IFR5cGU9IlBfVHlwZV9FZGl0X0VYIj4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNjA0IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSI1MDYiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjIwODsxMDI7MTA1OzEwNjsyMDUiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjIwMDsyMDEiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjMwMTszMDI7MzAzOzIwNjszMDA7MzEwOzMwNDszMDUiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjQwMTs0MDI7NDAzOzQwNCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA1OzUwODs1MDk7NTEwIiAvPg0KICAgICAgICA8L0NoYXJ0Pg0KDQogICAgICAgIDwhLS0gSVBS5qih5byPIC0tPg0KICAgICAgICA8Q2hhcnQgVHlwZT0iSVBSX1R5cGVfRWRpdCI+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjIwOTsyMDg7OzIwMDsyMDEiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjMwMTszMDI7MzAzOzIwNjszMDA7MzEwOzMwNDszMDUiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjQwMTs0MDI7NDAzOzQwNCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA4OzUwOTs1MTAiIC8+DQogICAgICAgIDwvQ2hhcnQ+DQogICAgICAgIDwhLS0g5rWB6YeP5Y6L5YqbKOWkhOeQhue7k+aenOeahOWOhuWPsuabsue6v++8jOS4iuS4i+aooeW8jykgLS0+DQogICAgICAgIDxDaGFydCBUeXBlPSJISVNUX1R5cGVfUEYiPg0KICAgICAgICAgICAgPENtZHMgSURzPSIxMDA7MTAxOzEwMjsxMDM7MTA0OzEwNTsxMDY7MTA3OzEwOCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMjAwOzIwMSIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMzAxOzMwMjszMDM7MzAwOzMxMDszMDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjQwMTs0MDI7NDAzOzQwNCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA4OzUwOTs1MTAiIC8+DQogICAgICAgIDwvQ2hhcnQ+DQogICAgICAgIDwhLS0g5rWB6YeP5Y6L5Yqb6Z2e57yW6L6R5qih5byPIC0tPg0KICAgICAgICA8Q2hhcnQgVHlwZT0iRl9UeXBlX1VuRWRpdCI+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjUwNzs1MDg7NTA5OzUxMCIgLz4NCiAgICAgICAgPC9DaGFydD4NCiAgICAgICAgPENoYXJ0IFR5cGU9IlBfVHlwZV9VbkVkaXQiPg0KICAgICAgICAgICAgPENtZHMgSURzPSI1MDY7NTA4OzUwOTs1MTAiIC8+DQogICAgICAgIDwvQ2hhcnQ+DQoNCiAgICAgICAgPENoYXJ0IFR5cGU9IkxvZ19UeXBlX0VkaXQiPg0KICAgICAgICAgICAgPENtZHMgSURzPSIyMDk7NTA2OzUwODs1MDk7NTEwIiAvPg0KICAgICAgICA8L0NoYXJ0Pg0KDQogICAgICAgIDwhLS0gUGxvdFNxdWFyZUdyaWTkuLrmlrnlvaLnvZHmoLzvvIzlj4zlr7nmlbDkuJPlsZ4gLS0+DQogICAgICAgIDxDaGFydCBUeXBlPSJQbG90U3F1YXJlR3JpZCI+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjUwMDs1MDEiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjIwMDsyMDE7OzIwODsyMDk7MjAzOzIwNDsyMDU7MjA2IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIxNTc7MTUwOzE1MTsxNTI7MTUzOzE1NDsxNTU7MTU2IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSIxMDA7MTAxOzEwMjsxMDM7MTA0OzEwNTsxMDY7MTA3OzEwOCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMzAxOzMwMDszMTA7MzA0IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSI0MDE7NDAyOzQwMzs0MDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjUwODs1MDk7NTEwOzUxMTs5OTkiIC8+DQogICAgICAgIDwvQ2hhcnQ+DQoNCiAgICAgICAgPCEtLSBQbG90VGFibGVIZWxwZXLkuLpQbG9055qE6L6F5Yqp6KGo5qC85LiK5L6n55qE6YWN572uIC0tPg0KICAgICAgICA8Q2hhcnQgVHlwZT0iUGxvdFRhYmxlSGVscGVyIj4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTAzOzUwNSIgLz4NCiAgICAgICAgPC9DaGFydD4NCg0KICAgICAgICA8IS0tIOaVsOaNrueuoeeQhuexu+eahOW3peWFt+agj+mFjee9riAtLT4NCiAgICAgICAgPENoYXJ0IFR5cGU9IlN1YlduZERhdGEiPg0KICAgICAgICAgICAgPENtZHMgSURzPSI1MDM7NTA1IiAvPg0KICAgICAgICA8L0NoYXJ0Pg0KICAgICAgICA8Q2hhcnQgVHlwZT0iU3ViV25kRGF0YVBGIj4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA2OzUwNzs7NTAzOzUwNSIgLz4NCiAgICAgICAgPC9DaGFydD4NCg0KICAgICAgICA8IS0tIFdlbGxNYXAyROe7mOWbvumFjee9riAtLT4NCiAgICAgICAgPENoYXJ0IFR5cGU9IldlbGxNYXAyRFR5cGUiPg0KICAgICAgICAgICAgPENtZHMgSURzPSIxODA7MTgxOzE4MiIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMjAwOzIwMTs7MjA4OzIwNiIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMzAxOzMwMjszMDM7MzAwOzMxMDszMDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjQwMTs0MDI7NDAzOzQwNCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA4OzUwOTs1MTA7NTExOzk5OSIgLz4NCiAgICAgICAgPC9DaGFydD4NCg0KICAgICAgICA8IS0tIOaVsOWAvOivleS6lTJE57uY5Zu+5qC35L6L6YWN572uIC0tPg0KICAgICAgICA8Q2hhcnQgVHlwZT0iTm1EZW1vMkRUeXBlIj4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNzAwOzcwMTs3MDIiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjIwMDsyMDE7OzIwOCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMzAxOzMwMjszMDM7MzAwOzMxMDszMDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjQwMTs0MDI7NDAzOzQwNCIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iNTA4OzUwOTs1MTA7NTExOzk5OSIgLz4NCiAgICAgICAgPC9DaGFydD4NCg0KICAgICAgICA8IS0tIFJzdCBGaXTphY3nva4gLS0+DQogICAgICAgIDxDaGFydCBUeXBlPSJSc3RGaXRUeXBlIj4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMzAxOzMwMDszMTA7MzA0IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSI1MDg7NTA5OzUxMCIgLz4NCiAgICAgICAgPC9DaGFydD4NCiAgICAgICAgIDwhLS0gU2VnTW9yZeS6p+a2suauteaVsOmFjee9riAtLT4NCiAgICAgICAgPENoYXJ0IFR5cGU9IlNlZ01vcmVUeXBlIj4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMjAwOzIwMTs7MjA4OzIwNiIgLz4NCiAgICAgICAgICAgIDxDbWRzIElEcz0iMzAxOzMwMDszMTA7MzA0IiAvPg0KICAgICAgICAgICAgPENtZHMgSURzPSI0MDE7NDAyOzQwMzs0MDQiIC8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjkwMDs5MDE7OTAyIi8+DQogICAgICAgICAgICA8Q21kcyBJRHM9IjUwODs1MDk7NTEwIiAvPg0KICAgICAgICA8L0NoYXJ0Pg0KDQogICAgPC9Db21tYW5kcz4NCg0KPC9Sb290Pg0K \ No newline at end of file diff --git a/Bin/Config/Common/Common.rar b/Bin/Config/Common/Common.rar new file mode 100644 index 0000000..7bd513a Binary files /dev/null and b/Bin/Config/Common/Common.rar differ diff --git a/Bin/Config/Common/CompositionDefault.txt b/Bin/Config/Common/CompositionDefault.txt new file mode 100644 index 0000000..b702064 --- /dev/null +++ b/Bin/Config/Common/CompositionDefault.txt @@ -0,0 +1,13 @@ +C1 0.5 4.599199804 -82.586 +C2 0.2 4.872199793 32.172 +C3 0.2 4.251199819 96.74 +iC4 0.1 3.628999846 134.66 +nC4 0 3.795999839 151.975 +iC5 0 3.378017245 187.2 +nC5 0 3.369999857 196.55 +C6 0 3.033999871 234.67 +C7 0 2.735999884 -6.17 +CO2 0 7.377299686 30.9782 +N2 0 3.395799856 -146.958 +H2S 0 8.999999617 99.95 +Others 0 0 0 diff --git a/Bin/Config/Common/FunDesc.dat b/Bin/Config/Common/FunDesc.dat new file mode 100644 index 0000000..a5d834e --- /dev/null +++ b/Bin/Config/Common/FunDesc.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KPCEtLSAgICDmnKzmlofmoaPnmoTnm67nmoTmmK/lu7rnq4vlkI7lj7DmiYDmlK/mjIHnmoTlpI3mnYLnrpfms5UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAxNjAxMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KPCEtLSBGdW5jdGlvbiDlh73mlbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE5hbWXvvJogIOWHveaVsOWQjeensO+8jOS7o+eggeS4reWQjeensO+8jOWHveaVsOWFpeWPo+WHveaVsCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77yaIOWIq+WQje+8jOmAmuW4uOWvueW6lOWHveaVsOWQjeensOeahOebuOWFs+ivtOaYjiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgT3V0cHV0c++8miAg6L6T5Ye66YeP77yM6Ieq5Y+Y6YePICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIHNSZW1hcmvvvJogIOWHveaVsOaOpeWPo+ivtOaYjuS/oeaBryAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCg0KPCEtLSBQYXJhIOi+k+WFpeWPguaVsCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTmFtZSAg6Iux5paH5o+P6L+w77yM5LiN5LiA5a6a6Z2e5b6X5LiO5Ye95pWw5Luj56CB5Lit5Y+C5pWw5Y+Y6YeP5LiA6Ie0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77ya5Lit5paH5Y+C5pWw5ZCN77yM6Z2e5bi46YeN6KaB77yM5L2G5aaC5p6c6YWN572u5LiO5LqM5qyh6Kej6YeK6KGo5Lit5a2X5q615LiA5qC377yM5bCG5Lya6Ieq5Yqo5Z2H5YC85Y+W5YC8ICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFVuaXTvvJrljZXkvY0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgVmFsdWU65o6o6I2Q5YC877yMb3Lpu5jorqTlgLzvvIzlpoLmnpzkuozmrKHop6Pph4rmnInvvIzliJnoh6rliqjku47kuozmrKHop6Pph4rlj5YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTWF477ya5pyA5aSn5YC8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE1pbu+8muacgOWwj+WAvCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KDQo8Um9vdD4NCjxGdW5jdGlvbiBOYW1lPSJjYWxHYXNaQnlEcmFuY2h1ayIgQWxpYXM9IuawlOS9k+WBj+W3ruWboOWtkOWFrOW8jyIgT2JqZWN0PSLpgILnlKjojIPlm7QiIE91dHB1dD0i5rCU5L2T5YGP5beu5Zug5a2QIiBzUmVtYXJrPSLorqHnrpfmsJTkvZPlgY/lt67lm6DlrZDnmoTlhazlvI8iID4NCg0KICAgIDxQYXJhIE5hbWU9IlAiIEFsaWFzPSLlnLDlsYLljovlipsiIFVuaXQ9Ik1QYSIgVmFsdWU9IjI1IiBNYXg9IjEyMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iVCIgQWxpYXM9IuWcsOWxgua4qeW6piIgVW5pdD0i4oSDIiBWYWx1ZT0iOTAiIE1heD0iNTAwIiBNaW49IjAiLz4gICAgDQogICAgPFBhcmEgTmFtZT0iQzEiIEFsaWFzPSLnlLLng7coQzEpIiBVbml0PSIlIiBWYWx1ZT0iOTAiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDMiIgQWxpYXM9IuS5meeDtyhDMikiIFVuaXQ9IiUiIFZhbHVlPSIyIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iQzMiIEFsaWFzPSLkuJnng7coQzMpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9ImlDNCIgQWxpYXM9IuW8guS4geeDtyhpQzQpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9Im5DNCIgQWxpYXM9Iuato+S4geeDtyhuQzQpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9ImlDNSIgQWxpYXM9IuW8guaIiueDtyhpQzUpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9Im5DNSIgQWxpYXM9Iuato+aIiueDtyhuQzUpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkM2IiBBbGlhcz0i5bex54O3KEM2KSIgVW5pdD0iJSIgVmFsdWU9IjEiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDNyIgQWxpYXM9IuW6mueDtyhDNykiIFVuaXQ9IiUiIFZhbHVlPSIwLjUiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDTzIiIEFsaWFzPSLkuozmsKfljJbnorMoQ08yKSIgVW5pdD0iJSIgVmFsdWU9IjAuNSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9Ik4yIiBBbGlhcz0i5rCu5rCUKE4yKSIgVW5pdD0iJSIgVmFsdWU9IjAuNSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkgyUyIgQWxpYXM9Iuehq+WMluawoihIMlMpIiBVbml0PSIlIiBWYWx1ZT0iMC41IiBNYXg9IjEwMCIgTWluPSIwIi8+DQoNCjwvRnVuY3Rpb24+DQoNCjxGdW5jdGlvbiBOYW1lPSJjYWxHYXNNdUJ5TGVlIiBBbGlhcz0i5Zyw5bGC5aSp54S25rCU57KY5bqm5YWs5byPIiBPYmplY3Q9IumAgueUqOiMg+WbtCIgT3V0cHV0PSLlpKnnhLbmsJTnspjluqYiIHNSZW1hcms9Iuiuoeeul+WkqeeEtuawlOeymOW6pueahOWFrOW8jyIgPg0KDQogICAgPFBhcmEgTmFtZT0iUCIgQWxpYXM9IuWcsOWxguWOi+WKmyIgVW5pdD0iTVBhIiBWYWx1ZT0iMjUiIE1heD0iMTIwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJUIiBBbGlhcz0i5Zyw5bGC5rip5bqmIiBVbml0PSLihIMiIFZhbHVlPSI5MCIgTWF4PSI1MDAiIE1pbj0iMCIvPiAgICANCiAgICA8UGFyYSBOYW1lPSJDMSIgQWxpYXM9IueUsueDtyhDMSkiIFVuaXQ9IiUiIFZhbHVlPSI5MCIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkMyIiBBbGlhcz0i5LmZ54O3KEMyKSIgVW5pdD0iJSIgVmFsdWU9IjIiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDMyIgQWxpYXM9IuS4meeDtyhDMykiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iaUM0IiBBbGlhcz0i5byC5LiB54O3KGlDNCkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0ibkM0IiBBbGlhcz0i5q2j5LiB54O3KG5DNCkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iaUM1IiBBbGlhcz0i5byC5oiK54O3KGlDNSkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0ibkM1IiBBbGlhcz0i5q2j5oiK54O3KG5DNSkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iQzYiIEFsaWFzPSLlt7Hng7coQzYpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkM3IiBBbGlhcz0i5bqa54O3KEM3KSIgVW5pdD0iJSIgVmFsdWU9IjAuNSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkNPMiIgQWxpYXM9IuS6jOawp+WMlueisyhDTzIpIiBVbml0PSIlIiBWYWx1ZT0iMC41IiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iTjIiIEFsaWFzPSLmsK7msJQoTjIpIiBVbml0PSIlIiBWYWx1ZT0iMC41IiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iSDJTIiBBbGlhcz0i56Gr5YyW5rCiKEgyUykiIFVuaXQ9IiUiIFZhbHVlPSIwLjUiIE1heD0iMTAwIiBNaW49IjAiLz4NCg0KPC9GdW5jdGlvbj4gIA0KDQo8RnVuY3Rpb24gTmFtZT0iY2FsR2FzRGVuc2l0eUJ5UmhvZyIgQWxpYXM9IuWkqeeEtuawlOebuOWvueWvhuW6puWFrOW8jyIgT2JqZWN0PSLpgILnlKjojIPlm7QiIE91dHB1dD0i5aSp54S25rCU5a+G5bqmIiBzUmVtYXJrPSLorqHnrpflpKnnhLbmsJTlr4bluqbnmoTlhazlvI8iID4NCg0KICAgIDxQYXJhIE5hbWU9IlAiIEFsaWFzPSLlnLDlsYLljovlipsiIFVuaXQ9Ik1QYSIgVmFsdWU9IjI1IiBNYXg9IjEyMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iVCIgQWxpYXM9IuWcsOWxgua4qeW6piIgVW5pdD0i4oSDIiBWYWx1ZT0iOTAiIE1heD0iNTAwIiBNaW49IjAiLz4gICAgDQogICAgPFBhcmEgTmFtZT0iQzEiIEFsaWFzPSLnlLLng7coQzEpIiBVbml0PSIlIiBWYWx1ZT0iOTAiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDMiIgQWxpYXM9IuS5meeDtyhDMikiIFVuaXQ9IiUiIFZhbHVlPSIyIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iQzMiIEFsaWFzPSLkuJnng7coQzMpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9ImlDNCIgQWxpYXM9IuW8guS4geeDtyhpQzQpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9Im5DNCIgQWxpYXM9Iuato+S4geeDtyhuQzQpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9ImlDNSIgQWxpYXM9IuW8guaIiueDtyhpQzUpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9Im5DNSIgQWxpYXM9Iuato+aIiueDtyhuQzUpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkM2IiBBbGlhcz0i5bex54O3KEM2KSIgVW5pdD0iJSIgVmFsdWU9IjEiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDNyIgQWxpYXM9IuW6mueDtyhDNykiIFVuaXQ9IiUiIFZhbHVlPSIwLjUiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDTzIiIEFsaWFzPSLkuozmsKfljJbnorMoQ08yKSIgVW5pdD0iJSIgVmFsdWU9IjAuNSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9Ik4yIiBBbGlhcz0i5rCu5rCUKE4yKSIgVW5pdD0iJSIgVmFsdWU9IjAuNSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkgyUyIgQWxpYXM9Iuehq+WMluawoihIMlMpIiBVbml0PSIlIiBWYWx1ZT0iMC41IiBNYXg9IjEwMCIgTWluPSIwIi8+DQoNCjwvRnVuY3Rpb24+ICANCg0KPEZ1bmN0aW9uIE5hbWU9ImNhbEdhc0J1bGtDb2VmIiBBbGlhcz0i5aSp54S25rCU5L2T56ev57O75pWw5YWs5byPIiBPYmplY3Q9IumAgueUqOiMg+WbtCIgT3V0cHV0PSLlpKnnhLbmsJTkvZPnp6/ns7vmlbAiIHNSZW1hcms9Iuiuoeeul+WkqeeEtuawlOS9k+enr+ezu+aVsOeahOWFrOW8jyIgPg0KDQogICAgPFBhcmEgTmFtZT0iUCIgQWxpYXM9IuWcsOWxguWOi+WKmyIgVW5pdD0iTVBhIiBWYWx1ZT0iMjUiIE1heD0iMTIwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJUIiBBbGlhcz0i5Zyw5bGC5rip5bqmIiBVbml0PSLihIMiIFZhbHVlPSI5MCIgTWF4PSI1MDAiIE1pbj0iMCIvPiAgICANCiAgICA8UGFyYSBOYW1lPSJDMSIgQWxpYXM9IueUsueDtyhDMSkiIFVuaXQ9IiUiIFZhbHVlPSI5MCIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkMyIiBBbGlhcz0i5LmZ54O3KEMyKSIgVW5pdD0iJSIgVmFsdWU9IjIiIE1heD0iMTAwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJDMyIgQWxpYXM9IuS4meeDtyhDMykiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iaUM0IiBBbGlhcz0i5byC5LiB54O3KGlDNCkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0ibkM0IiBBbGlhcz0i5q2j5LiB54O3KG5DNCkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iaUM1IiBBbGlhcz0i5byC5oiK54O3KGlDNSkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0ibkM1IiBBbGlhcz0i5q2j5oiK54O3KG5DNSkiIFVuaXQ9IiUiIFZhbHVlPSIxIiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iQzYiIEFsaWFzPSLlt7Hng7coQzYpIiBVbml0PSIlIiBWYWx1ZT0iMSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkM3IiBBbGlhcz0i5bqa54O3KEM3KSIgVW5pdD0iJSIgVmFsdWU9IjAuNSIgTWF4PSIxMDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IkNPMiIgQWxpYXM9IuS6jOawp+WMlueisyhDTzIpIiBVbml0PSIlIiBWYWx1ZT0iMC41IiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iTjIiIEFsaWFzPSLmsK7msJQoTjIpIiBVbml0PSIlIiBWYWx1ZT0iMC41IiBNYXg9IjEwMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iSDJTIiBBbGlhcz0i56Gr5YyW5rCiKEgyUykiIFVuaXQ9IiUiIFZhbHVlPSIwLjUiIE1heD0iMTAwIiBNaW49IjAiLz4NCg0KPC9GdW5jdGlvbj4gIA0KDQo8RnVuY3Rpb24gTmFtZT0iY2FsT2lsQnVsa0NvZWYiIEFsaWFzPSLljp/msrnkvZPnp6/ns7vmlbBCb+WFrOW8jyIgT2JqZWN0PSLpgILnlKjojIPlm7QiIE91dHB1dD0i5rK55L2T56ev57O75pWwIiBzUmVtYXJrPSLorqHnrpfmsrnkvZPnp6/ns7vmlbBCb+eahOWFrOW8jyIgPg0KDQogICAgPFBhcmEgTmFtZT0iZ2FtbWFfZyIgQWxpYXM9IuWcsOmdouWkqeeEtuawlOebuOWvueWvhuW6piIgVW5pdD0iIiBWYWx1ZT0iMC42IiBNYXg9IjEiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9ImdhbW1hX28iIEFsaWFzPSLlnLDpnaLljp/msrnnm7jlr7nlr4bluqYiIFVuaXQ9IiIgVmFsdWU9IjAuNyIgTWF4PSIxIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJQIiBBbGlhcz0i5Zyw5bGC5Y6L5YqbIiBVbml0PSJNUGEiIFZhbHVlPSIyNSIgTWF4PSIxMjAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IlQiIEFsaWFzPSLlnLDlsYLmuKnluqYiIFVuaXQ9IuKEgyIgVmFsdWU9IjkwIiBNYXg9IjUwMCIgTWluPSIwIi8+DQoNCg0KPC9GdW5jdGlvbj4NCg0KPEZ1bmN0aW9uIE5hbWU9ImNhbE9pbERlbnNpdHkiIEFsaWFzPSLlnLDlsYLljp/msrnlr4bluqblhazlvI8iIE9iamVjdD0i6YCC55So6IyD5Zu0IiBPdXRwdXQ9IuayueWvhuW6piIgc1JlbWFyaz0i6K6h566X5rK55a+G5bqm55qE5YWs5byPIiA+DQoNCiAgICA8UGFyYSBOYW1lPSJnYW1tYV9nIiBBbGlhcz0i5Zyw6Z2i5aSp54S25rCU55u45a+55a+G5bqmIiBVbml0PSIiIFZhbHVlPSIwLjYiIE1heD0iMSIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iZ2FtbWFfbyIgQWxpYXM9IuWcsOmdouWOn+ayueebuOWvueWvhuW6piIgVW5pdD0iIiBWYWx1ZT0iMC43IiBNYXg9IjEiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IlAiIEFsaWFzPSLlnLDlsYLljovlipsiIFVuaXQ9Ik1QYSIgVmFsdWU9IjI1IiBNYXg9IjEyMCIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iVCIgQWxpYXM9IuWcsOWxgua4qeW6piIgVW5pdD0i4oSDIiBWYWx1ZT0iOTAiIE1heD0iNTAwIiBNaW49IjAiLz4NCjwvRnVuY3Rpb24+DQoNCjxGdW5jdGlvbiBOYW1lPSJjYWxPaWxNdSIgQWxpYXM9IuWcsOWxguWOn+ayueeymOW6puWFrOW8jyIgT2JqZWN0PSLpgILnlKjojIPlm7QiIE91dHB1dD0i5rK557KY5bqmIiBzUmVtYXJrPSLorqHnrpfmsrnnspjluqbnmoTlhazlvI8iID4NCg0KICAgIDxQYXJhIE5hbWU9ImdhbW1hX2ciIEFsaWFzPSLlnLDpnaLlpKnnhLbmsJTnm7jlr7nlr4bluqYiIFVuaXQ9IiIgVmFsdWU9IjAuNiIgTWF4PSIxIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJnYW1tYV9vIiBBbGlhcz0i5Zyw6Z2i5Y6f5rK555u45a+55a+G5bqmIiBVbml0PSIiIFZhbHVlPSIwLjciIE1heD0iMSIgTWluPSIwIi8+DQogICAgPFBhcmEgTmFtZT0iUCIgQWxpYXM9IuWcsOWxguWOi+WKmyIgVW5pdD0iTVBhIiBWYWx1ZT0iMjUiIE1heD0iMTIwIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJUIiBBbGlhcz0i5Zyw5bGC5rip5bqmIiBVbml0PSLihIMiIFZhbHVlPSI5MCIgTWF4PSI1MDAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9InRwIiBBbGlhcz0i5Y6f5rK55Yed5Zu654K5IiBVbml0PSLihIMiIFZhbHVlPSIzMCIgTWF4PSIyMDAiIE1pbj0iMCIvPg0KDQo8L0Z1bmN0aW9uPg0KDQo8RnVuY3Rpb24gTmFtZT0iY2FsR09SIiBBbGlhcz0i5rq26Kej5rCU5rK55q+U5YWs5byPIiBPYmplY3Q9IumAgueUqOiMg+WbtCIgT3V0cHV0PSLmsJTmsrnmr5QiIHNSZW1hcms9Iuiuoeeul+awlOayueavlOeahOWFrOW8jyIgPg0KDQogICAgPFBhcmEgTmFtZT0iZ2FtbWFfZyIgQWxpYXM9IuWcsOmdouWkqeeEtuawlOebuOWvueWvhuW6piIgVW5pdD0iIiBWYWx1ZT0iMC42IiBNYXg9IjEiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9ImdhbW1hX28iIEFsaWFzPSLlnLDpnaLljp/msrnnm7jlr7nlr4bluqYiIFVuaXQ9IiIgVmFsdWU9IjAuNyIgTWF4PSIxIiBNaW49IjAiLz4NCiAgICA8UGFyYSBOYW1lPSJQIiBBbGlhcz0i5Zyw5bGC5Y6L5YqbIiBVbml0PSJNUGEiIFZhbHVlPSIyNSIgTWF4PSIxMjAiIE1pbj0iMCIvPg0KICAgIDxQYXJhIE5hbWU9IlQiIEFsaWFzPSLlnLDlsYLmuKnluqYiIFVuaXQ9IuKEgyIgVmFsdWU9IjkwIiBNYXg9IjIwMCIgTWluPSIwIi8+DQoNCjwvRnVuY3Rpb24+DQoNCjwvUm9vdD4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/IprAlgDefines.dat b/Bin/Config/Common/IprAlgDefines.dat new file mode 100644 index 0000000..b92dab1 --- /dev/null +++ b/Bin/Config/Common/IprAlgDefines.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAtLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5pivQWxnTWV0aG9k55u45YWz6YWN572uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgQXV0aG9yKHMpOiB3YW5nemcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIERhdGU6IDIwMjEwNTI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAtLT4NCg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4NCjwhLS0gQWxnVHlwZSDnrpfms5XlpKfnsbsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIElE77ya57yW5Y+35qCH6K+GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgQWxpYXPvvJog5Yir5ZCNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBOYW1l77yaICDlkI3np7AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFRpcHPvvJog5aSH5rOoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCg0KPCEtLSBBbGdNZXRob2Qg5Y+C5pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgSUTvvJrnvJblj7fmoIfor4YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBOYW1l77yaICDlkI3np7AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77yaIOWIq+WQjSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTmFtZVjvvJogIOe7mOWbvuaXtnjovbTlkI3np7AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFVuaXRY77yaICDnu5jlm77ml7Z46L205Y2V5L2NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBOYW1lWe+8miAg57uY5Zu+5pe2eei9tOWQjeensCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgVW5pdFnvvJogIOe7mOWbvuaXtnnovbTljZXkvY0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEV4cHLvvJrmmL7npLrlnKjnlYzpnaLkuIrnmoTooajovr7lvI8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEZsdWlkVHlwZe+8mueul+azleayueawlOawtOexu+Wei++8jOm7mOiupO+8mk9HV++8jOWPr+S7peS4jeWhq+WGmSzloavlhplH5Luj6KGo5Y+q5a+55rCUIC0tPg0KPCEtLSAgICBSZXN1bHRCb3Ro77ya57uT5p6c5ZGI546w77yM6buY6K6k77ya5bem5Y+z5Lik5Zu+77yM5aaC5p6c5piv5LiA5Zu+77yM5aGr5YaZMCAgICAgICAgLS0+DQo8IS0tICAgIFN1YlJhZGlvVmlzaWJsZe+8muaYr+WQpuaYvuekuiBSYWRpb++8jOm7mOiupOaYvuekuu+8jOWmguaenOS4jeaYvuekuu+8jOWhq+WGmTAgIC0tPg0KPCEtLSAgICBTcmNUYWJsZUNvbHPvvJrmupDmlbDmja7ooajmoLzliJfmoIfpopjvvIzpu5jorqTkuKTliJfvvIzljovlipsv5Lqn6YeP77yM5LiN55So6YWN572uICAgLS0+DQo8IS0tSUQ9IjA5IiDkuLpPSUwtLT4NCjxSb290Pg0KDQogICAgPEFsZ1R5cGUgSUQ9IjAxIiBOYW1lPSJCYXNlUEEiIEFsaWFzPSLlm57ljovor5XkupUiIFRpcHM9IiIgPg0KDQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjAxMDEiIE5hbWU9IkJpbm9taWFsIiBBbGlhcz0i5LqM6aG55byP5Lqn6IO95pa556iLIiBOYW1lWD0iUSIgVW5pdFg9IjEwXjQqbV4zL2QiIE5hbWVZPSIocFJeMi1Qd2ZeMikvUTtQOyhQU0VlLVBTRXdmKS9RO1BTRSIgVW5pdFk9Ik1QYV4yLygxMF40Km1eMy9kKTtNUGE7TVBhXjIvbVBhLnMvKDEwXjQqbV4zL2QpO01QYV4yL21QYS5zIiBFeHByPSIocFJeMiAtIFB3Zl4yKSAvIFEgPSBCICogUSArIEE7KFBTRWUgLSBQU0V3ZikgLyBRID0gQiAqIFEgKyBBIiAgLz4NCiAgICAgICAgPEFsZ01ldGhvZCBJRD0iMDEwMiIgTmFtZT0iQmlub21pYWxFeCIgQWxpYXM9IuaUuei/m+S6jOmhueW8j+S6p+iDveaWueeoiyIgTmFtZVg9IlEiIFVuaXRYPSIxMF40Km1eMy9kIiBOYW1lWT0iKHBSXjItUHdmXjIpL1E7UDsoUFNFZS1QU0V3ZikvUTtQU0UiIFVuaXRZPSJNUGFeMi8oMTBeNCptXjMvZCk7TVBhO01QYV4yL21QYS5zLygxMF40Km1eMy9kKTtNUGFeMi9tUGEucyIgRXhwcj0iKHBSaSAtIHBSaSsxKSAvIChRW2krMV0gLSBRW2ldKSA9IEIoUVtpKzFdICsgUVtpXSkgKyBBOyhQU0VpIC0gUFNFaSsxKSAvIChRW2krMV0gLSBRW2ldKSA9IEIoUVtpKzFdICsgUVtpXSkgKyBBIiAgLz4NCiAgICAgICAgPEFsZ01ldGhvZCBJRD0iMDEwMyIgTmFtZT0iRXhwb25lbnRpYWwiIEFsaWFzPSLmjIfmlbDlvI/kuqfog73mlrnnqIsiIE5hbWVYPSJsZ1E7USIgVW5pdFg9IjEwXjQqbV4zL2QiIE5hbWVZPSJsZyhwUl4yLSBQd2ZeMik7UDtsZyhQU0VyLVBTRXdmKTtQU0UiIFVuaXRZPSJNUGFeMjtNUGE7TVBhXjIvbVBhLnM7TVBhXjIvbVBhLnMiIEV4cHI9IlEgPSBDICogKHBSXjIgLSBQd2ZeMileTjtRID0gQyAqIChQU0VyIC0gUFNFd2YpXk4iIC8+DQoNCiAgICA8L0FsZ1R5cGU+DQoNCiAgICA8QWxnVHlwZSBJRD0iMDUiIE5hbWU9IkJhc2VQQTIiIEFsaWFzPSLnrYnml7bor5XkupUiIFRpcHM9IiIgPg0KDQogICAgICAgICAgICA8QWxnTWV0aG9kIElEPSIwNTAxIiBOYW1lPSJCaW5vbWlhbCIgQWxpYXM9IuS6jOmhueW8j+S6p+iDveaWueeoiyIgTmFtZVg9IlEiIFVuaXRYPSIxMF40Km1eMy9kIiBOYW1lWT0iKHBSXjItUHdmXjIpL1E7UDsoUFNFZS1QU0V3ZikvUTtQU0UiIFVuaXRZPSJNUGFeMi8oMTBeNCptXjMvZCk7TVBhO01QYV4yL21QYS5zLygxMF40Km1eMy9kKTtNUGFeMi9tUGEucyIgRXhwcj0iKHBSXjIgLSBQd2ZeMikgLyBRID0gQiAqIFEgKyBBOyhQU0VlIC0gUFNFd2YpIC8gUSA9IEIgKiBRICsgQSIgIC8+DQogICAgICAgICAgICA8QWxnTWV0aG9kIElEPSIwNTAzIiBOYW1lPSJFeHBvbmVudGlhbCIgQWxpYXM9IuaMh+aVsOW8j+S6p+iDveaWueeoiyIgTmFtZVg9ImxnUTtRIiBVbml0WD0iMTBeNCptXjMvZCIgTmFtZVk9ImxnKHBSXjItIFB3Zl4yKTtQO2xnKFBTRXItUFNFd2YpO1BTRSIgVW5pdFk9Ik1QYV4yO01QYTtNUGFeMi9tUGEucztNUGFeMi9tUGEucyIgRXhwcj0iUSA9IEMgKiAocFJeMiAtIFB3Zl4yKV5OO1EgPSBDICogKFBTRXIgLSBQU0V3ZileTiIgLz4NCg0KICAgIDwvQWxnVHlwZT4NCg0KICAgIDxBbGdUeXBlIElEPSIwNiIgTmFtZT0iQmFzZVBBMyIgQWxpYXM9IuS/ruato+etieaXtuivleS6lSIgVGlwcz0iIiAgU3JjVGFibGVDb2xzPSLkupXlupXljovlipsoTVBhKTvlubPlnYflnLDlsYLljovlipsoTVBhKTvkuqfph48oMTBeNCptXjMvZCkiID4NCg0KICAgICAgICA8QWxnTWV0aG9kIElEPSIwNjAxIiBOYW1lPSJCaW5vbWlhbCIgQWxpYXM9IuS6jOmhueW8j+S6p+iDveaWueeoiyIgTmFtZVg9IlEiIFVuaXRYPSIxMF40Km1eMy9kIiBOYW1lWT0iKHBSXjItUHdmXjIpL1E7UDsoUFNFZS1QU0V3ZikvUTtQU0UiIFVuaXRZPSJNUGFeMi8oMTBeNCptXjMvZCk7TVBhO01QYV4yL21QYS5zLygxMF40Km1eMy9kKTtNUGFeMi9tUGEucyIgRXhwcj0iKHBSXjIgLSBQd2ZeMikgLyBRID0gQiAqIFEgKyBBOyhQU0VlIC0gUFNFd2YpIC8gUSA9IEIgKiBRICsgQSIgIC8+DQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjA2MDMiIE5hbWU9IkV4cG9uZW50aWFsIiBBbGlhcz0i5oyH5pWw5byP5Lqn6IO95pa556iLIiBOYW1lWD0ibGdRO1EiIFVuaXRYPSIxMF40Km1eMy9kIiBOYW1lWT0ibGcocFJeMi0gUHdmXjIpO1A7bGcoUFNFci1QU0V3Zik7UFNFIiBVbml0WT0iTVBhXjI7TVBhO01QYV4yL21QYS5zO01QYV4yL21QYS5zIiBFeHByPSJRID0gQyAqIChwUl4yIC0gUHdmXjIpXk47USA9IEMgKiAoUFNFciAtIFBTRXdmKV5OIiAvPg0KDQogICAgPC9BbGdUeXBlPg0KDQogICAgPEFsZ1R5cGUgSUQ9IjAyIiBOYW1lPSJPbmVQb2ludCIgQWxpYXM9IuS4gOeCueazlSIgVGlwcz0iIiA+DQoNCiAgICAgICAgPEFsZ01ldGhvZCBJRD0iMDIwMSIgTmFtZT0iUUhTQiIgQWxpYXM9Iumdkua1t+a2qeWMl+awlOeUsCIgUmVzdWx0Qm90aD0iMCIgTmFtZVg9IlAiIFVuaXRYPSJNUGEiIE5hbWVZPSJRIiBVbml0WT0iMTBeNCptXjMvZCIgRXhwcj0icUFPRj0xLjAwNCpxZyooMS0ocHdmL3BSKV4yKV4oLTAuNzQyNikiICAvPg0KICAgICAgICA8QWxnTWV0aG9kIElEPSIwMjAyIiBOYW1lPSJDUUpCIiBBbGlhcz0i6ZW/5bqG6Z2W6L655rCU55SwIiBSZXN1bHRCb3RoPSIwIiBOYW1lWD0iUCIgVW5pdFg9Ik1QYSIgTmFtZVk9IlEiIFVuaXRZPSIxMF40Km1eMy9kIiBFeHByPSJxQU9GPXFnLygwLjAwNzU2NCsoMS4yNTY1KigwLjk4MTYtcHdmL3BSKV4wLjUpKSIgIC8+DQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjAyMDMiIE5hbWU9IkNRIiBBbGlhcz0i6ZW/5bqG5rK555Sw5LiK5Y+k55Sf55WM5Zyw5bGCIiBSZXN1bHRCb3RoPSIwIiBOYW1lWD0iUCIgVW5pdFg9Ik1QYSIgTmFtZVk9IlEiIFVuaXRZPSIxMF40Km1eMy9kIiBFeHByPSJxQU9GPXFnLygoLTAuMTc0MikrKDEuMTYxMyooMS4wMjI1LShwd2YvcFIpXjIpXjAuNSkpIiAgLz4NCiAgICAgICAgPEFsZ01ldGhvZCBJRD0iMDIwNCIgTmFtZT0iQ1lRMSIgQWxpYXM9IumZiOWFg+WNg+WFrOW8jzEiIFJlc3VsdEJvdGg9IjAiIE5hbWVYPSJQIiBVbml0WD0iTVBhIiBOYW1lWT0iUSIgVW5pdFk9IjEwXjQqbV4zL2QiIEV4cHI9InFBT0Y9cWcqKChwUl4yLXB3Zl4yKS9wUl4yKV4oLTAuNjU5NCkiICAvPg0KICAgICAgICA8QWxnTWV0aG9kIElEPSIwMjA1IiBOYW1lPSJDWVEyIiBBbGlhcz0i6ZmI5YWD5Y2D5YWs5byPMiIgUmVzdWx0Qm90aD0iMCIgTmFtZVg9IlAiIFVuaXRYPSJNUGEiIE5hbWVZPSJRIiBVbml0WT0iMTBeNCptXjMvZCIgRXhwcj0icUFPRj02KnFnLygoMSs0OCooKHBSXjItcHdmXjIpLi9wUl4yKSleMC41LTEpIiAgLz4NCiAgICAgICAgPEFsZ01ldGhvZCBJRD0iMDIwNiIgTmFtZT0iTkhZQyIgQWxpYXM9IuWNl+a1t+W0luWfjjEzLTHmsJTnlLAiIFJlc3VsdEJvdGg9IjAiIE5hbWVYPSJQIiBVbml0WD0iTVBhIiBOYW1lWT0iUSIgVW5pdFk9IjEwXjQqbV4zL2QiIEV4cHI9InFBT0Y9My42MDg1KnFnLygoKDErMjAuMjM4NSoocFJeMi1wd2ZeMikvcFJeMikpXjAuNS0xKSIgIC8+DQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjAyMDciIE5hbWU9IkRGIiBBbGlhcz0i5Lic5pa5MS0x5rCU55SwIiBSZXN1bHRCb3RoPSIwIiBOYW1lWD0iUCIgVW5pdFg9Ik1QYSIgTmFtZVk9IlEiIFVuaXRZPSIxMF40Km1eMy9kIiBFeHByPSJxQU9GPTAuOCpxZy8oMS01XigocHdmL3BSKS0xKSkiICAvPg0KDQogICAgPC9BbGdUeXBlPg0KDQogICAgPEFsZ1R5cGUgSUQ9IjAzIiBOYW1lPSJHZW5lcmFsUEExIiBBbGlhcz0i5bm/5LmJ5LqM6aG55byP5Lqn6IO9IiBUaXBzPSIiID4NCg0KICAgICAgICA8QWxnTWV0aG9kIElEPSIwMzAxIiBOYW1lPSJOSCIgQWxpYXM9IuWNl+a1t+ilv+mDqOS6p+iDveiuoeeul+aWueazlSIgU3JjVGFibGVDb2xzPSLkupXlupXljovlipsoTVBhKTvlubPlnYflnLDlsYLljovlipsoTVBhKTvkuqfph48oMTBeNCptXjMvZCkiIE5hbWVYPSJRIiBVbml0WD0iMTBeNCptXjMvZCIgTmFtZVk9IihwUl4yLVB3Zl4yKS9RO1A7KFBTRWUtUFNFd2YpL1E7UFNFIiBVbml0WT0iTVBhXjIvKDEwXjQqbV4zL2QpO01QYTtNUGFeMi9tUGEucy8oMTBeNCptXjMvZCk7TVBhXjIvbVBhLnMiIEV4cHI9IihwUl4yLVB3Zl4yKS9RID0gQStCKlE7KFBTRWUtUFNFd2YpL1EgPSBBK0IqUSIgIC8+DQoNCiAgICA8L0FsZ1R5cGU+DQoNCiAgICA8QWxnVHlwZSBJRD0iMDQiIE5hbWU9IkJhc2VQRjEiIEFsaWFzPSLkuqfog73pooTmtYsiIFRpcHM9IiIgPg0KDQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjA0MDEiIE5hbWU9IlFZSlkiIEFsaWFzPSLljLrln5/nu4/pqowiIFJlc3VsdEJvdGg9IjAiIE5hbWVYPSJL6K+V5LqVIiBVbml0WD0ibUQiIE5hbWVZPSJxQU9GLyhoKnBSXjIpIiBVbml0WT0iMTBeNCptXjMvKGQqbSpNUGEucykiIEV4cHI9InFBT0Y9QypLXm4qaCpwUl4yIiBNaW5YPSIwIiBNYXhYPSIxNTAwIi8+DQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjA0MDIiIE5hbWU9IkxTMSIgQWxpYXM9IumZteawtDEzLTLmsJTnlLDlm77niYgxIiBSZXN1bHRCb3RoPSIwIiBOYW1lWD0iS+ivleS6lSIgVW5pdFg9Im1EIiBOYW1lWT0i57Gz6YeH5rCU5oyH5pWwIiBVbml0WT0iMTBeNCptXjMvKGQqbSpNUGFeMikiIEV4cHI9Ink9MC4wMDA0NTMqeF4wLjg4NzQ5NSIgTWluWD0iMC4wMTEiIE1heFg9IjgwMCIgTGluZWFyWD0iMCIgTGluZWFyWT0iMCIgLz4NCiAgICAgICAgPEFsZ01ldGhvZCBJRD0iMDQwMyIgTmFtZT0iTFMyIiBBbGlhcz0i6Zm15rC0MTMtMuawlOeUsOWbvueJiDIiIFJlc3VsdEJvdGg9IjAiIE5hbWVYPSJL6K+V5LqVKmgiIFVuaXRYPSJtRC5tIiBOYW1lWT0icUFPRi8ocFJeMikiIFVuaXRZPSIxMF40Km1eMy8oZCpNUGFeMikiIEV4cHI9Ink9MC4wMDA1KnheMC44ODk0IiBNaW5YPSIwLjExIiBNYXhYPSI4MDAiIExpbmVhclg9IjAiIExpbmVhclk9IjAiIC8+DQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjA0MDQiIE5hbWU9IkxTMyIgQWxpYXM9IumZteawtDEzLTLmsJTnlLDlm77niYgzIiBSZXN1bHRCb3RoPSIwIiBOYW1lWD0iS+ivleS6lSpoIiBVbml0WD0ibUQubSIgTmFtZVk9InFBT0YiIFVuaXRZPSIxMF40Km1eMy9kIiBFeHByPSJ5PTIuMDQ2OSp4XjAuNjczIiBNaW5YPSIwLjExIiBNYXhYPSI4MDAiIExpbmVhclg9IjAiIExpbmVhclk9IjAiLz4NCiAgICAgICAgPEFsZ01ldGhvZCBJRD0iMDQwNSIgTmFtZT0id3huO3pqayIgQWxpYXM9IuWNl+a1t+ilv+mDqOayueeUsOmHh+ayueaMh+aVsCIgTGVnZW5kcz0i5rag6KW/5Y2X5rK555Sw576kO+ePoOaxn+WPo+ayueeUsOe+pCIgUmVzdWx0Qm90aD0iMCIgTmFtZVg9Ikvor5XkupUvbWl1b+WcsOWxgiIgVW5pdFg9Im1EL21wYS5zIiBOYW1lWT0iSm9zIiBVbml0WT0ibV4zLyhkKk1QYSptKSIgRXhwcj0ieT0wLjA4NjMqeF4wLjgwNTM7eT0wLjE1ODkqeF4wLjgyODciIE1pblg9IjEuMSIgTWF4WD0iNTAwMCIgTGluZWFyWD0iMCIgTGluZWFyWT0iMCIvPg0KICAgICAgICA8QWxnTWV0aG9kIElEPSIwNDA2IiBOYW1lPSJMZTtMUztIbCIgQWxpYXM9IuWNl+a1t+ilv+mDqOawlOeUsOaXoOmYu+a1gemHjyIgTGVnZW5kcz0i5LmQ5LicK+iOuuatjOa1tzvpmbXmsLQr5LiJ5LqaK+m7hOa1gee7hDvpu4TmtYHnu4QiIFJlc3VsdEJvdGg9IjAiIE5hbWVYPSJL6K+V5LqVKmgqcHJeMiIgVW5pdFg9Im1ELm0ubXBhXjIiIE5hbWVZPSJxQU9GIiBVbml0WT0iMTBeNCptXjMvZCIgRXhwcj0ieT0wLjExNDIxNCp4XjAuNTcwNzQ1O3k9MC4wMDM5KnheMC43NjA4O3k9MC4wMDE1KnheMC44NjI0IiBNaW5YPSIxMTAiIE1heFg9IjUwMDAwMDAwIiBMaW5lYXJYPSIwIiBMaW5lYXJZPSIwIi8+DQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjA0MDciIE5hbWU9IkxlMTtMUzExIiBBbGlhcz0i5Y2X5rW36KW/6YOo5rCU55Sw6YeH5rCU5oyH5pWwIiBMZWdlbmRzPSLkuZDkuJwr6I665q2M5rW3O+mZteawtCvkuInkupor6buE5rWB57uEIiBSZXN1bHRCb3RoPSIwIiBOYW1lWD0iS+ivleS6lSpoIiBVbml0WD0ibUQubSIgTmFtZVk9IumHh+awlOaMh+aVsCIgVW5pdFk9IjEwXjQqbV4zLyhkKk1QYV4yKSIgRXhwcj0ieT0wLjAyMTQqeF4wLjUxNzt5PTAuMDAwNyp4XjAuNzU0NiIgTWluWD0iMTEiIE1heFg9IjUwMDAwIiBMaW5lYXJYPSIwIiBMaW5lYXJZPSIwIi8+DQoNCiAgICA8L0FsZ1R5cGU+DQoNCiAgICA8QWxnVHlwZSBJRD0iMDciIE5hbWU9ImNvbmRlbnNhdGUgZ2FzIiBBbGlhcz0i5Yed5p6Q5rCU5LqV5Lqn6IO9IiBUaXBzPSIiID4NCg0KICAgICAgICA8QWxnTWV0aG9kIElEPSIwNzAxIiBOYW1lPSJTaW5nbGUgcGhhc2UiIEFsaWFzPSLmi5/ljZXnm7giIFNyY1RhYmxlQ29scz0i5LqV5bqV5Y6L5YqbKE1QYSk75rCU5Lqn6YePKDEwXjQqbV4zL2QpO+ayueS6p+mHjyhtXjMvZCkiIE5hbWVYPSJRIiBVbml0WD0iMTBeNCptXjMvZCIgTmFtZVk9IihwUl4yLVB3Zl4yKS9RO1A7KFBTRWUtUFNFd2YpL1E7UFNFIiBVbml0WT0iTVBhXjIvKDEwXjQqbV4zL2QpO01QYTtNUGFeMi9tUGEucy8oMTBeNCptXjMvZCk7TVBhXjIvbVBhLnMiIEV4cHI9IihwUl4yLVB3Zl4yKS9RID0gQStCKlE7KFBTRWUtUFNFd2YpL1EgPSBBK0IqUSIgIC8+DQogICAgICAgIDxBbGdNZXRob2QgSUQ9IjA3MDIiIE5hbWU9Imdhcy1vaWwgdHdvLXBoYXNlIiBBbGlhcz0i5rK55rCU5Lik55u4IiBTcmNUYWJsZUNvbHM9IuS6leW6leWOi+WKmyhNUGEpO+awlOS6p+mHjygxMF40Km1eMy9kKTvmsrnkuqfph48obV4zL2QpIiBOYW1lWD0iUSIgVW5pdFg9IjEwXjQqbV4zL2QiIE5hbWVZPSIocFJeMi1Qd2ZeMikvUTtQOyhQU0VlLVBTRXdmKS9RO1BTRSIgVW5pdFk9Ik1QYV4yLygxMF40Km1eMy9kKTtNUGE7TVBhXjIvbVBhLnMvKDEwXjQqbV4zL2QpO01QYV4yL21QYS5zIiBFeHByPSIocFJeMi1Qd2ZeMikvUSA9IEErQipROyhQU0VlLVBTRXdmKS9RID0gQStCKlEiICAvPg0KICAgICAgICA8QWxnTWV0aG9kIElEPSIwNzAzIiBOYW1lPSJnYXMtd2F0ZXIgdHdvLXBoYXNlIiBBbGlhcz0i5rCU5rC05Lik55u4IiBTcmNUYWJsZUNvbHM9IuS6leW6leWOi+WKmyhNUGEpO+awlOS6p+mHjygxMF40Km1eMy9kKTvmsLTkuqfph48obV4zL2QpIiAgTmFtZVg9IlEiIFVuaXRYPSIxMF40Km1eMy9kIiBOYW1lWT0iKHBSXjItUHdmXjIpL1E7UDsoUFNFZS1QU0V3ZikvUTtQU0UiIFVuaXRZPSJNUGFeMi8oMTBeNCptXjMvZCk7TVBhO01QYV4yL21QYS5zLygxMF40Km1eMy9kKTtNUGFeMi9tUGEucyIgRXhwcj0iKHBSXjItUHdmXjIpL1EgPSBBK0IqUTsoUFNFZS1QU0V3ZikvUSA9IEErQipRIiAgLz4NCg0KICAgIDwvQWxnVHlwZT4NCjwvUm9vdD4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/MPA_Well_Report.dot b/Bin/Config/Common/MPA_Well_Report.dot new file mode 100644 index 0000000..56d246a Binary files /dev/null and b/Bin/Config/Common/MPA_Well_Report.dot differ diff --git a/Bin/Config/Common/MPA_Well_Report.ini b/Bin/Config/Common/MPA_Well_Report.ini new file mode 100644 index 0000000..c4304d8 --- /dev/null +++ b/Bin/Config/Common/MPA_Well_Report.ini @@ -0,0 +1,5 @@ +;这是导出报告时,特定参数的配置。(对于局部格式固定的,可以采取这种) + +[Report] +TagCt = Ct ;意思是模板中标签为'TagCt'的要替换为当前井Ct的数值,下同 +TagS = S ; \ No newline at end of file diff --git a/Bin/Config/Common/MPA_Well_ReportXJ.dot b/Bin/Config/Common/MPA_Well_ReportXJ.dot new file mode 100644 index 0000000..c2747d0 Binary files /dev/null and b/Bin/Config/Common/MPA_Well_ReportXJ.dot differ diff --git a/Bin/Config/Common/MPA_Well_ReportXJ.ini b/Bin/Config/Common/MPA_Well_ReportXJ.ini new file mode 100644 index 0000000..4c0c50b --- /dev/null +++ b/Bin/Config/Common/MPA_Well_ReportXJ.ini @@ -0,0 +1,54 @@ +;这是导出报告时,特定参数的配置。(对于局部格式固定的,可以采取这种) + +[Report] +TagCt = Ct ;意思是模板中标签为'TagCt'的要替换为当前井Ct的数值,下同 +TagS = S ; +TagBlockName = BlockName ; +TagBlock = BlockName ; +TagLayer = LayerName ; +TagLayerName = LayerName ; +TagWellName = WellName ; +TagWellNameEx = WellName ; +TagWellType = WellType ; +TagType = WellType ; +TagWellClass = WellClass ; +TagWellRadius = WellRadius ; +TagSKJDDS1 = SKJDDS1 ; +TagSKJDDS2 = SKJDDS2 ; +TagOVF = OVF ; +TagOVis = OVis ; +TagOCF = OCF ; +TagWVisc = WVisc ; +TagWVF = WVF ; +TagWCF = WCF ; +TagODens = ODens ; +TagYCZB = YCZB ; +TagYCZB = YCZB ; +TagH = H ; +TagYH = H ; +TagHYBHD = HYBHD ; +TagHSBHD = HSBHD ; +TagHSBHD = HSBHD ; +TagZHYSXS = TotalCF ; +TagYQMC = YQMC ; +TagYQXH = YQXH ; +TagYQBH = YQBH ; +TagPor = Por ; +TagCSRQ = CSRQ ; +TagSJJSRQ = SJJSRQ ; +TagYY = YY ; +TagTY = TY ; +TagD1TJSD = D1TJSD ; +TagD2TJSD = D2TJSD ; +TagD1TJYL = D1TJYL ; +TagD1TJWD = D1TJWD ; +TagD2TJYL = D2TJYL ; +TagD2TJWD = D2TJWD ; +TagZSYLTD = ZSYLTD ; +TagZSWDTD = ZSWDTD ; +TagZSWDTD = ZSWDTD ; +TagYCZBYL = YCZBYL ; +TagHQBHD = HQBHD ; +TagJCMC = JCMC ; +TagCSLX = JCMC ; +TagDCWD = DCWD ; diff --git a/Bin/Config/Common/MPA_Well_Report_Old.dot b/Bin/Config/Common/MPA_Well_Report_Old.dot new file mode 100644 index 0000000..ee274ab Binary files /dev/null and b/Bin/Config/Common/MPA_Well_Report_Old.dot differ diff --git a/Bin/Config/Common/MenuDefines_Ribbon.dat b/Bin/Config/Common/MenuDefines_Ribbon.dat new file mode 100644 index 0000000..9682bff --- /dev/null +++ b/Bin/Config/Common/MenuDefines_Ribbon.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0i6aG555uu566h55CGKFApIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0i5paH5Lu2Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAiIE5hbWU9IkFwcEhvbWUiIEFsaWFzPSIiIEljb249IkFwcEhvbWUxMjgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAxIiBOYW1lPSJQcm9qTmV3IiBBbGlhcz0i5paw5bu66aG555uuIiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSLmiZPlvIDpobnnm64iIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0i5YWz6Zet6aG555uuIiBJY29uPSJDbG9zZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA1IiBOYW1lPSJQcm9qU2F2ZSIgQWxpYXM9IuS/neWtmOmhueebriIgU2hvcnRLZXk9IkN0cmwrUyIgSWNvbj0iU2F2ZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA2IiBOYW1lPSJQcm9qU2F2ZUFzIiBBbGlhcz0i6aG555uu5Y+m5a2YIiBJY29uPSJTYXZlYXMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA3IiBOYW1lPSJQcm9qQ29uZmlnIiBBbGlhcz0i6aG555uu5L+h5oGvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IuWIhumalOespiIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMyIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249IkFib3V0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDgiIE5hbWU9IlVwZGF0ZUxpc3RzIiBBbGlhcz0i5pu05paw5YiX6KGoKEkpIiBJY29uPSJVcGRhdGVMaXN0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ii0xIiBOYW1lPSJTZXBhcmF0b3IiIEFsaWFzPSLliIbpmpTnrKYiIFRpcHM9IiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTAiIE5hbWU9IkFwcFF1aXQiIEFsaWFzPSLpgIDlh7ooWCkiIEljb249IkNsb3NlIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMCIgTmFtZT0iV2VsQ29tZSIgQWxpYXM9IuW8gOWniyhPKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuaVsOaNruWHhuWkhyI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDk5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldlbGxOZXciIEFsaWFzPSLmlrDlu7rkupUoVykiIEljb249IldlbGxOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYkVkaXQiIEFsaWFzPSJQVlTnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkpvYk5ldyIgQWxpYXM9IuaWsOW7ulBWVOWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkpvYkVkaXQiIEFsaWFzPSJQVlTnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWx5dGljYWwiIEFsaWFzPSLop6PmnpDor5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLmtYHliqjmrrXpgInmi6kiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i5qih5Z6L55Sf5oiQIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdW1lcmljYWwiIEFsaWFzPSLmlbDlgLzor5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJQcm9wZXJ0eUxvYWQiIEFsaWFzPSLlsZ7mgKflr7zlhaUiIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJSdW5HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUyMDEiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE1hcCIgQWxpYXM9IuiuoeeulyIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iui+heWKqeaLn+WQiCIgRXh0SW5mbz0iUEYiIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iSW5wdXRCYXNpYyIgQWxpYXM9IuWfuuehgOaVsOaNriIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJJbnB1dEZsdWlkIiBBbGlhcz0i5rWB5L2T5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KDQogICAgPFRhYiBJRD0iMiIgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7nrqHnkIYoRCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWfuuehgOaVsOaNriI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSLkupXln7rnoYDmlbDmja4oQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSLlnLDotKjliIblsYLmlbDmja4oTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IuWCqOWxguaVsOaNrihSKSIgRXh0SW5mbz0iUF9EQVRBX1JFUyIgSWNvbj0iUmVzRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDQiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iRGF0YUZsdSIgQWxpYXM9Iua1geS9k+aAp+i0qOaVsOaNrihGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWOi+WKm+a1gemHjyI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjIwMSIgTmFtZT0iRGF0YUVkaXQiIEFsaWFzPSLmlbDmja7nvJbovpEoRSkiID4NCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0i5pWw5o2u57yW6L6RIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQW5hbEZsdSIgQWxpYXM9Iua1gemHj+e8lui+kSIgRXh0SW5mbz0iRiIgTWRpVHlwZT0iRGF0YUVkaXQiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsUHJlc3MiIEFsaWFzPSLljovlipvnvJbovpEiIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMzAzIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxQcmVDb24iIEFsaWFzPSLljovlipvmipjnrpciIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJBbmFsUHJlQ29uIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMyIgTmFtZT0iQW5hbHl0aWNhbFRlc3QiIEFsaWFzPSLop6PmnpDor5XkupUoQSkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9iRWRpdCIgQWxpYXM9IlBWVOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iSm9iTmV3IiBBbGlhcz0i5paw5bu6UFZU5YiG5p6QIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjEsMCIgTmFtZT0iSm9iRWRpdCIgQWxpYXM9IlBWVOeuoeeQhiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iU2VnQW5hbCIgQWxpYXM9Iua1geWKqOauteWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iua1geWKqOautemAieaLqSIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9Iua1geWKqOauteWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE90aGVycyIgQWxpYXM9IueJueW+gee6v+WIhuaekCIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0VDtDaGFydFNxcnRUO0NoYXJ0MjVUO0NoYXJ0NVQiIEV4dEluZm89IkNoYXJ0IFQ7Q2hhcnQgU3FydChUKTtDaGFydCAwLjI1VDtDaGFydCAtMC41VCIgSWNvbj0iQXNzaXNBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAxMCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBbmFsV25kTSIgQWxpYXM9Iua1geWKqOauteeql+WPoyIgVHlwZT0iMSIgSWNvbj0iQW5hbFduZE0iIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA5IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IkFuYWxEaXN0cmkiIEFsaWFzPSLliIbluIPlm74iIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydERlbjtDaGFydFZpcyIgRXh0SW5mbz0i5rWT5bqm5YiG5biD5Zu+O+m7j+W6puWIhuW4g+WbviIgSWNvbj0iQW5hbERpc3RyaSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDgiIEJvdW5kcz0iMCw1LDIsMSIgTmFtZT0iQW5hbE1hcCIgQWxpYXM9IuS6leS9jTJEIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YUZpdCIgQWxpYXM9IuaVsOaNruaLn+WQiCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i5qih5Z6L55Sf5oiQIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iUGxhdGVGaXQiIEFsaWFzPSLmlY/mhJ/mgKfliIbmnpAiIEljb249IlBsYXRlRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IuebuOWFs+W3peWFtyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlRpbWUiIEFsaWFzPSLml7bpl7QiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0i5qih5Z6L56S65oSPIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSLlrZjkuLrnpLrmhI8iIEljb249IlNhdmVBc01vZGVsU2tldGNoIiAvPg0KDQogICAgICAgPC9Hcm91cD4NCg0KPCEtLSAgICAgICAgICAgICAgICAgICAgPENtZCBJRD0iMzIwMyIgQm91bmRzPSIwLDEiIE5hbWU9IlNob3dNb2RlbFNrZXRjaCIgQWxpYXM9IueQhuiuuiIgSWNvbj0iU2hvd01vZGVsU2tldGNoIiAvPjxHcm91cCBOYW1lPSJUb29sUyIgQWxpYXM9IuaJqeWxleWKn+iDvSI+DQogICAgICAgICAgICA8Q21kIElEPSI5ODAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkZsb3dUb1MiIEFsaWFzPSLmtYHph4/lj5jooajnmq4iIEljb249IkZsb3dUb1MiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Iua3t+WQiOm7j+W6piIgSWNvbj0iTWl4VmlzY29zaXR5IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgIDwvR3JvdXA+LS0+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSLmiJDmnpznrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOCIgQm91bmRzPSIwLDAiIE5hbWU9IkpvYkxvYWQiIEFsaWFzPSLliqDovb3kvZzkuJoiIEljb249IkxvYWRKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOSIgQm91bmRzPSIxLDAiIE5hbWU9IkpvYlNhdmUiIFR5cGU9IjEiIEV4dE5hbWVzPSJKb2JTYXZlQ3VyO0pvYlNhdmVBbGwiIEV4dEluZm89IuS/neWtmOW9k+WJjeS9nOS4mjvkv53lrZjmiYDmnInkvZzkuJoiIEFsaWFzPSLkv53lrZjkvZzkuJoiIEljb249IlNhdmVKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAxMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJUb051bWVyaWNhbCIgQWxpYXM9IlRvLeaVsOWAvCIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iSW5wdXRCYXNpYyIgQWxpYXM9IuWfuuehgOaVsOaNriIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJJbnB1dEZsdWlkIiBBbGlhcz0i5rWB5L2T5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI1IiBOYW1lPSJOdW1lcmljYWxUZXN0IiBBbGlhcz0i5pWw5YC86K+V5LqVKE4pIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYkVkaXQiIEFsaWFzPSJQVlTnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkpvYk5ldyIgQWxpYXM9IuaWsOW7ulBWVOWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkpvYkVkaXQiIEFsaWFzPSJQVlTnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50SW5pdCIgQWxpYXM9IuayueawlOiXj+WIneWni+WMliI+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tRGVtbyIgQWxpYXM9Iueql+S9k+agt+S+iyIgSWNvbj0iTm1EZW1vIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlRPRE8xIiBBbGlhcz0iVE9ETzEiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAzIiBCb3VuZHM9IjEsMSIgTmFtZT0iVE9ETzIiIEFsaWFzPSJUT0RPMiIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDQiIEJvdW5kcz0iMCwyIiBOYW1lPSJUT0RPMyIgQWxpYXM9IlRPRE8zIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwNSIgQm91bmRzPSIxLDIiIE5hbWU9IlRPRE80IiBBbGlhcz0iVE9ETzQiIEljb249IlRpbWUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRHcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2VsbEdyaWQiIEFsaWFzPSLnvZHmoLzlh4blpIciIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJSdW5HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdENhbCIgQWxpYXM9IuaVsOWAvOiuoeeulyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLorqHnrpciIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTIwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLovoXliqnmi5/lkIgiIEV4dEluZm89IlBGIiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnQzRCIgQWxpYXM9Iue7mOWbvua4suafkyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MzAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLppbHlkozluqYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTMwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLlrZTpmpnluqYiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdFRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iNTQwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSLlt6XlhbcxIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTQwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9IuW3peWFtzIiIEljb249IlNob3dNb2RlbENoYXJ0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU0MDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLlt6XlhbczIiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1NDA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSLlt6Xlhbc0IiBJY29uPSJTYXZlQXNNb2RlbFNrZXRjaCIgLz4NCg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50UnN0IiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU1MDEiIEJvdW5kcz0iMCwwIiBOYW1lPSJKb2JMb2FkIiBBbGlhcz0i5Yqg6L295L2c5LiaIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU1MDIiIEJvdW5kcz0iMSwwIiBOYW1lPSJKb2JTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iSm9iU2F2ZUN1cjtKb2JTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3kvZzkuJo75L+d5a2Y5omA5pyJ5L2c5LiaIiBBbGlhcz0i5L+d5a2Y5L2c5LiaIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU1MDMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9BbmFseXRpY2FsIiBBbGlhcz0iVG8t6Kej5p6QIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTYwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSLnqpflj6MxIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTYwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i56qX5Y+jMiIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1NjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iSW5wdXRCYXNpYyIgQWxpYXM9Iueql+WPozMiIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1NjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iSW5wdXRGbHVpZCIgQWxpYXM9Iueql+WPozQiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KDQogICAgPC9UYWI+DQoNCg0KICAgIDxUYWIgSUQ9IjQiIE5hbWU9Ik1pbmlGcmFjIiBBbGlhcz0i5bCP5Z6L5Y6L6KOCKEYpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYkVkaXQiIEFsaWFzPSJQVlTnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkpvYk5ldyIgQWxpYXM9IuaWsOW7ulBWVOWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkpvYkVkaXQiIEFsaWFzPSJQVlTnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlBBIiBBbGlhcz0i5Y6L6ZmN5YiG5p6QIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDIiIEJvdW5kcz0iMCwwLDMsMSIgTmFtZT0iTWluaUZyQW5hbFBBIiBBbGlhcz0i5Y6L6ZmN5YeG5aSHIiBFeHRJbmZvPSJQRiIgSWNvbj0iUEYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDAzIiBCb3VuZHM9IjAsMSwzLDEiIE5hbWU9Ik1pbmlGclBBIiBBbGlhcz0i5Y6L6ZmN5YiG5p6QIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSI0MDA0IiBCb3VuZHM9IjAsMiwzLDEiIE5hbWU9IkNhbFN1ZGRlblN0b3BQIiBBbGlhcz0i556s5pe25YGc5rO15Y6L5YqbIiBJY29uPSJSdW5FeCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDUiIEJvdW5kcz0iMCwzIiBOYW1lPSJDYWxHRnVuY3Rpb24iIEFsaWFzPSJH5Ye95pWwIiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDYiIEJvdW5kcz0iMSwzIiBOYW1lPSJDYWxTcXJ0VCIgQWxpYXM9IuaXtumXtOW5s+aWueaguSIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA3IiBCb3VuZHM9IjIsMyIgTmFtZT0iQ2FsTG9nTG9nIiBBbGlhcz0i5Y+M5a+55pWwIiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJGQSIgQWxpYXM9IuaOkumHj+WIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1pbmlGckFuYWxGQSIgQWxpYXM9IuaOkumHj+WHhuWkhyIgRXh0SW5mbz0iSVBSIiBJY29uPSJNaW5pRnJBbmFsRkEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iTWluaUZyRkFVcCIgQWxpYXM9IumYtuair+WNhyIgSWNvbj0iU3RlcFVwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik1pbmlGckZBRG93biIgQWxpYXM9IumYtuair+mZjSIgSWNvbj0iU3RlcERvd24iIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iSm9iTG9hZCIgQWxpYXM9IuWKoOi9veS9nOS4miIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iSm9iU2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IkpvYlNhdmVDdXI7Sm9iU2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5L2c5LiaO+S/neWtmOaJgOacieS9nOS4miIgQWxpYXM9IuS/neWtmOS9nOS4miIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iSW5wdXRCYXNpYyIgQWxpYXM9IuWfuuehgOaVsOaNriIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJJbnB1dEZsdWlkIiBBbGlhcz0i5rWB5L2T5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI2IiBOYW1lPSJBZHZhbmNlZEZ1bmN0aW9uIiBBbGlhcz0i6auY57qn5Yqf6IO9KFgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlc2lnbiIgQWxpYXM9IuivleS6leiuvuiuoSI+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlRlc3REZXNpZ24iIEFsaWFzPSLor5XkupXorr7orqEiIEljb249IlRlc3REZXNpZ24iIEV4dEluZm89IlBGIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA1IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxPdGhlcnMiIEFsaWFzPSLnibnlvoHmrrXliIbmnpAiIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IuWIhuW4g+WbviIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSLmtZPluqbliIbluIPlm7476buP5bqm5YiG5biD5Zu+IiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0iTWFwMkQiIEljb249Ik1hcDJEIiBWaXNpYmxlPSIxIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBZHZhbmNlZEZ1bmN0aW9uIiBBbGlhcz0iSVBS5YiG5p6QIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iSVBSQW5hbCIgQWxpYXM9IklQUuWHhuWkhyIgRXh0SW5mbz0iSVBSIiBJY29uPSJJUFJBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMyIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJJUFJDYWwiIEFsaWFzPSJJUFLorqHnrpciIEljb249IklQUkFuYWwiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSLmlbDmja7mi5/lkIgiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9IuaooeWei+eUn+aIkCIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSLoh6rliqjmi5/lkIgiIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0i5pWP5oSf5oCn5YiG5p6QIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSLml7bpl7QiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjEsMCIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0i5qih5Z6LIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0i55CG6K66IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSLlrZjkuLrnpLrmhI8iIEljb249IlNhdmVBc01vZGVsU2tldGNoIiAvPiAgICAgICAgICAgIA0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlRvb2xTIiBBbGlhcz0i5omp5bGV5Yqf6IO9Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9Iua1gemHj+WPmOihqOeariIgSWNvbj0iRmxvd1RvUyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkyMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTWl4VmlzY29zaXR5IiBBbGlhcz0i5re35ZCI6buP5bqmIiBJY29uPSJNaXhWaXNjb3NpdHkiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iSm9iTG9hZCIgQWxpYXM9IuWKoOi9veS9nOS4miIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iSm9iU2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IkpvYlNhdmVDdXI7Sm9iU2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5L2c5LiaO+S/neWtmOaJgOacieS9nOS4miIgQWxpYXM9IuS/neWtmOS9nOS4miIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iSW5wdXRCYXNpYyIgQWxpYXM9IuWfuuehgOaVsOaNriIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJJbnB1dEZsdWlkIiBBbGlhcz0i5rWB5L2T5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI3IiBOYW1lPSJTeXNUb29sIiBBbGlhcz0i57O757uf6YWN572u5bel5YW3KFQpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlN5c1Rvb2wiIEFsaWFzPSLphY3nva7lt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iNzAwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJTeXNUb29scyIgQWxpYXM9Iuezu+e7n+mFjee9ruW3peWFtyIgSWNvbj0iU3lzVG9vbHMiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJNb2RlbE1hbmFnZXIiIEFsaWFzPSLmqKHlnovnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iNzAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbFNjYW4iIEFsaWFzPSLmqKHlnovmn6XnnIsiIEljb249Ik1vZGVsU2NhbiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOCIgTmFtZT0iUmVzdWx0IiBBbGlhcz0i5oiQ5p6c566h55CGKFIpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlc0NvbXBhcmUiIEFsaWFzPSLmiJDmnpzlr7nmr5QiPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJSZXNDb21wYXJlIiBBbGlhcz0i5oiQ5p6c5a+55q+UIiBJY29uPSJSZXNDb21wYXJlIiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUHJpbnQiIEFsaWFzPSLmiqXlkYrmiZPljbAiPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlJlcG9ydENvbmZpZyIgQWxpYXM9IuaKpeWRiuiuvue9riIgSWNvbj0icmVwb3J0Q29uZmlnIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJQcmludFByZXZpZXciIEFsaWFzPSLmiqXlkYrpooTop4giIEljb249IlByZVByaW50IiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDIiIEJvdW5kcz0iMCwxIiBOYW1lPSJQcmludCIgQWxpYXM9IuaJk+WNsCjlkKtQREYpIiBJY29uPSJQcmludCIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSI4MDA1IiBCb3VuZHM9IjEsMSIgTmFtZT0iRXhwb3J0V29yZCIgQWxpYXM9IuWvvOWHuihXb3JkKSIgSWNvbj0iV29yZDE2IiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSLlj4LmlbDnqpflj6MiIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IuWxnuaAp+eql+WPoyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQoNCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOSIgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+jKFcpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IuWfuuacrCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlZpc2libGVQcm9qVHJlZURhIiBBbGlhcz0i6aG555uu5qCRIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlSmIiIEFsaWFzPSLmqKHmnb/moJEiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVScyIgQWxpYXM9IuaIkOaenOagkSIgSWNvbj0iUHJvalRyZWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMyIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwzIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsNCIgTmFtZT0iVmlzaWJsZVB0eXMiIEFsaWFzPSLlsZ7mgKfnqpflj6MiIEljb249IlByb3BlcnR5V2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNSIgQm91bmRzPSIxLDQiIE5hbWU9IlZpc2libGVMb2dzIiBBbGlhcz0i5pel5b+X56qX5Y+jIiBJY29uPSJMb2dWaWV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNiIgQm91bmRzPSIwLDUiIE5hbWU9IlN0YWNrZWRQcm9qZWN0IiBBbGlhcz0i6aG555uu56qX5L2TIiBJY29uPSJTdGFja2VkUHJvamVjdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDciIEJvdW5kcz0iMSw1IiBOYW1lPSJTdGFja2VkTWRpIiBBbGlhcz0i5YiG5p6Q56qX5L2TIiBJY29uPSJTdGFja2VkTWRpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3dMYXlvdXQiIEFsaWFzPSLnqpflj6PluIPlsYAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMSIgQm91bmRzPSIwLDAiIE5hbWU9IldpbmRvd0xheW91dEgiIEljb25Pbmx5PSIxIiBUaXBzPSLmsLTlubPluIPlsYAiIEljb249IldpbmRvd0xheW91dEgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEyIiBCb3VuZHM9IjEsMCIgTmFtZT0iV2luZG93TGF5b3V0ViIgSWNvbk9ubHk9IjEiIFRpcHM9IuerluebtOW4g+WxgCIgSWNvbj0iV2luZG93TGF5b3V0ViIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMTMiIEJvdW5kcz0iMCwxIiBOYW1lPSJXaW5kb3dMYXlvdXRUIiBJY29uT25seT0iMSIgVGlwcz0i5bmz6ZO65biD5bGAIiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSLmipjlj6DluIPlsYAiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0i5YWz6ZetIj4gICAgICAgIA0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0i5YWz6Zet5b2T5YmNIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjIiIEJvdW5kcz0iMSwwIiBOYW1lPSJDbG9zZUFsbFduZHMiIEFsaWFzPSLlhbPpl63miYDmnIkiIEljb249IkNsb3NlQWxsV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMyIgQm91bmRzPSIwLDEiIE5hbWU9IlByZXZXbmQiIEFsaWFzPSLkuIrkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0i5LiK5LiA5Liq56qX5L2TIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSLkuIvkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJEb3duIiBUaXBzPSLkuIvkuIDkuKrnqpfkvZMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSLnqpfkvZMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjEwIiBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpKEgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IuaXpeW/l+afpeeciyhMKSIgSWNvbj0iTG9nVmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAzIiBCb3VuZHM9IjAsMCIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249Ik1QQTE2IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJBYm91dFF0IiBBbGlhcz0i5YWz5LqOUXQoUSkiIEljb249IlF0IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJMb2dpbiIgQWxpYXM9IueZu+W9lSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0i6L2v5Lu25rOo5YaMKFIpIiBJY29uPSJSZWdpc3RlciIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0i55So5oi355m75b2VKFUpIiBJY29uPSJMb2dpbiIgIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlYnVnIiBBbGlhcz0i6LCD6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKeaxh+aAu+aooeWei+WPguaVsCIgSWNvbj0iU3VtUGFyYSIgLz4NCiAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQo8L1JpYmJvbj4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/ModelDescsLP.dat b/Bin/Config/Common/ModelDescsLP.dat new file mode 100644 index 0000000..5a34fba --- /dev/null +++ b/Bin/Config/Common/ModelDescsLP.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+ebruaYr+W7uueri1dUQUnova/ku7bns7vnu5/mqKHlnovln7rmnKzlj4LmlbAo6L6T5YWlK+i+k+WHuikgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDMwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tIOmDqOWIhuaVsOaNrumhueivtOaYjg0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQotLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCiAgICAgICAgPCEtLTxPcHRpb24gSUQ9IjcwMCIgTmFtZT0iIiBBbGlhcz0i55u05LqVIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBzPSIiLz4tLT4NCiAgICAgICAgPCEtLTxPcHRpb24gSUQ9IjcwOCIgTmFtZT0iIiBBbGlhcz0i5rC05bmz5LqVIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwcz0iIi8+LS0+DQogICAgICAgIDwhLS0gICAgICAgICAgICA8T3B0aW9uIElEPSIxMDUiIE5hbWU9IldlbGxQQ0ZSIiBBbGlhcz0i5ouf5b6E5ZCR5rWBIiBUaXBzPSIiIC8+DQogICAgICAgICAgICAgICAgICAgIDxPcHRpb24gSUQ9IjEwNiIgTmFtZT0iV2VsbFBDRkYiIEFsaWFzPSLlv6vpgJ8iIFRpcHM9IiIgLz4tLT4NCg0KICAgICAgICAgICAgICAgIDwhLS08T3B0aW9uR3JvdXAgTmFtZT0iV2VsbFBDR3JvdXAiIEFsaWFzPSLljovoo4LkupXigJTigJTliIbmrrXkuqfmtrIiIFRpcHM9IiI+DQogICAgICAgICAgICAgICAgICAgIDxPcHRpb24gSUQ9IjEwNyIgTmFtZT0iV2VsbFBDMiIgQWxpYXM9IuS4pOauteS6p+a2siIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgICAgICAgICA8T3B0aW9uIElEPSIxMDgiIE5hbWU9IldlbGxQQzMiIEFsaWFzPSLkuInmrrXkuqfmtrIiIFRpcHM9IiIgLz4NCiAgICAgICAgICAgICAgICA8L09wdGlvbkdyb3VwPi0tPg0KDQo8IS0tDQogICAgICAgIDxPcHRpb24gSUQ9IjYwMCIgTmFtZT0iVE9ETzEiIEFsaWFzPSLlnoLnm7Too4LnvJ3kupUod3hkKSIgQmFzZVBhcmFzPSLlr7zmtYHns7vmlbA75LqV5L2N572ueDvkupXkvY3nva55O+WcsOWxgumVv+W6pjvlnLDlsYLlrr3luqYiIFRpcHM9IiIgLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNjAxIiBOYW1lPSJUT0RPMiIgQWxpYXM9IuaZrumAmuebtOS6lSh3eGQpIiBCYXNlUGFyYXM9Iue7hOWQiOWPguaVsENEZTJTIiBUaXBzPSIiIC8+LS0+DQo8IS0tIOmSiOWvueS9jua4l+mAj+aooeWeiy0tPg0KDQo8Um9vdD4NCg0KICAgIDwhLS0g5LqV5YKo5qih5Z6LLS0+DQogICAgPFdCU01vZGVsIE5hbWU9IjEiPg0KDQogICAgICAgIDxPcHRpb24gSUQ9IjAwIiBOYW1lPSJXYnNDb25zIiBBbGlhcz0i5a6a5LqV5YKoIiBUaXBzPSIiIC8+DQogICAgICAgIDxPcHRpb24gSUQ9IjAxIiBOYW1lPSJXYnNOb25lIiBBbGlhcz0i5peg5LqV5YKoIiBUaXBzPSIiIC8+DQogICAgICAgIDxPcHRpb24gSUQ9IjAyIiBOYW1lPSJXYnNGYWlyIiBBbGlhcz0i5Y+Y5LqV5YKoKEZhaXIpIiBQYXJhcz0i5Yid5pyr5LqV562S5YKo6ZuG57O75pWw5q+UO+WPmOWCqOaXtumXtCIgVGlwcz0iIiAvPg0KICAgICAgICA8T3B0aW9uIElEPSIwMyIgTmFtZT0iV2JzSGVnZW1hbiIgQWxpYXM9IuWPmOS6leWCqChIZWdlbWFuKSIgUGFyYXM9IuWIneacq+S6leetkuWCqOmbhuezu+aVsOavlDvlj5jlgqjml7bpl7QiIFRpcHM9IiIgLz4NCg0KICAgICAgICA8T3B0aW9uIElEPSIwNCIgTmFtZT0iV2JzU3BpdmV5UGFja2VyIiBBbGlhcz0i5Y+Y5LqV5YKoKFNwaXZleSBQYWNrZXIpIiBQYXJhcz0i5Yid5pyr5LqV562S5YKo6ZuG57O75pWw5q+UO+azhOa8j+ihqOearuezu+aVsDvlj5jlgqjml7bpl7QiIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSIwNSIgTmFtZT0iV2JzU3BpdmV5Rmlzc3VyZXMiIEFsaWFzPSLlj5jkupXlgqgoU3BpdmV5IEZpc3N1cmVzKSIgUGFyYXM9IuWIneacq+S6leetkuWCqOmbhuezu+aVsOavlDvms4TmvI/ooajnmq7ns7vmlbA75Y+Y5YKo5pe26Ze0IiBUaXBzPSIiLz4NCg0KICAgIDwvV0JTTW9kZWw+DQoNCiAgICA8IS0tIOS6leaooeWeiy0tPg0KDQogICAgPFdFTE1vZGVsIE5hbWU9IiIgQWxpYXM9IiIgVGlwcz0iIiA+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iMCIgTmFtZT0iIiBBbGlhcz0iLS0tLS0t55u05LqVLS0tLS0iIFRpcHM9IlRPRE8iIC8+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iMTAwIiBOYW1lPSJXZWxsViIgQWxpYXM9IuebtOS6lSIgVGlwcz0iIiAvPg0KICAgICAgICA8T3B0aW9uIElEPSIxMDEiIE5hbWU9IldlbGxQQ0wiIEFsaWFzPSLnm7TkupUo6YOo5YiG5bCE5byAKSIgVGlwcz0iIiAvPg0KDQogICAgICAgIDxPcHRpb24gSUQ9IjAiIE5hbWU9IiIgQWxpYXM9IuWOi+ijguebtOS6lSIgVGlwcz0iVE9ETyIgLz4NCg0KICAgICAgICA8T3B0aW9uIElEPSIxMDIiIE5hbWU9IldlbGxQVUYiIEFsaWFzPSLljovoo4Lnm7TkupUo5Z2H5YyA5rWB6YePKSIgVGlwcz0iIiAvPg0KICAgICAgICA8T3B0aW9uIElEPSIxMDMiIE5hbWU9IldlbGxQQ0kiIEFsaWFzPSLljovoo4Lnm7TkupUo5peg6ZmQ5a+85rWBKSIgVGlwcz0iIiAvPg0KDQogICAgICAgIDxPcHRpb25Hcm91cCBOYW1lPSJXZWxsUENJR3JvdXAiIEFsaWFzPSLljovoo4Lnm7TkupUo5pyJ6ZmQ5a+85rWBKSIgVGlwcz0iIj4NCiAgICAgICAgICAgIDxPcHRpb24gSUQ9IjEwNCIgTmFtZT0iV2VsbFBDRkwiIEFsaWFzPSLkuInnur/mgKfmtYEiIFRpcHM9IiIgLz4NCiAgICAgICAgPC9PcHRpb25Hcm91cD4NCiAgICAgICAgPE9wdGlvbiBJRD0iMTA5IiBOYW1lPSJXZWxsUEMyIiBBbGlhcz0i5Y6L6KOC55u05LqVKOaciemZkOWvvOa1gSkt5Lik5q61IiBUaXBzPSIiIC8+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iNzA1IiBOYW1lPSIiIEFsaWFzPSLljovoo4Lnm7TkupUo6YOo5YiG5bCE5byA5Z2H5YyA5rWB6YePKSIgICAgICAgICBUaXBzPSIiLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNzA2IiBOYW1lPSIiIEFsaWFzPSLljovoo4Lnm7TkupUo6YOo5YiG5bCE5byA5peg6ZmQ5a+85rWBKSIgICAgICAgICBUaXBzPSIiLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNzA3IiBOYW1lPSIiIEFsaWFzPSLljovoo4Lnm7TkupUo6YOo5YiG5bCE5byA5pyJ6ZmQ5a+85rWBKSIgICAgICAgICBUaXBzPSIiLz4NCg0KICAgICAgICA8T3B0aW9uIElEPSIwIiBOYW1lPSIiIEFsaWFzPSLmlpzkupUiIFRpcHM9IlRPRE8iIC8+DQoNCg0KICAgICAgICA8T3B0aW9uIElEPSIzMDAiIE5hbWU9IldlbGxEZXYiIEFsaWFzPSLmlpzkupUiIEJhc2VQYXJhcz0i5pac5LqV6ZW/5bqmO+WCqOWxguWOmuW6pjvkupXmlpzop5LluqYiIFRpcHM9IiIgLz4NCg0KICAgICAgICA8T3B0aW9uIElEPSIwIiBOYW1lPSIiIEFsaWFzPSLmsLTlubPkupUiIFRpcHM9IlRPRE8iIC8+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iMjAwIiBOYW1lPSJXZWxsSCIgQWxpYXM9IuawtOW5s+S6lSIgQmFzZVBhcmFzPSLmsLTlubPkupXplb/luqY75Z6C5ZCR5LqV5L2NO+S6leaWnOinkuW6piIgVGlwcz0iIiAvPg0KICAgICAgICA8T3B0aW9uIElEPSIyMDEiIE5hbWU9IldlbGxIUG9zU3JjIiBBbGlhcz0i5rC05bmz5LqV54K55rqQ5qih5Z6LIiBCYXNlUGFyYXM9IuawtOW5s+S6lemVv+W6pjvlnoLlkJHkupXkvY075LqV5pac6KeS5bqmIiBUaXBzPSIiIC8+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iMjAyIiBOYW1lPSJXZWxsSFNMMiIgQWxpYXM9IuawtOW5s+S6leKAlOS4pOauteS6p+a2siIgQmFzZVBhcmFzPSLmsLTlubPkupXplb/luqY75Z6C5ZCR5LqV5L2NO+S6leaWnOinkuW6pjvljovoo4LmrrXmlbA76KOC57yd5Y2K6ZW/IiBUaXBzPSIiIC8+DQogICAgICAgIDxPcHRpb24gSUQ9IjIwNCIgTmFtZT0iV2VsbEhTTDMiIEFsaWFzPSLmsLTlubPkupXigJTkuInmrrXkuqfmtrIiIEJhc2VQYXJhcz0i5rC05bmz5LqV6ZW/5bqmO+WeguWQkeS6leS9jTvkupXmlpzop5LluqY75Y6L6KOC5q615pWwO+ijgue8neWNiumVvyIgVGlwcz0iIiAvPg0KDQogICAgICAgIDxPcHRpb24gSUQ9IjAiIE5hbWU9IiIgQWxpYXM9IuWkmue6p+WOi+ijguawtOW5s+S6lSIgVGlwcz0iVE9ETyIgLz4NCg0KICAgICAgICA8T3B0aW9uIElEPSIyMDYiIE5hbWU9IldlbGxQRkNNIiBBbGlhcz0i5aSa57qn5Y6L6KOC5rC05bmz5LqVIiBUaXBzPSLlvoXlrpoiIC8+DQogICAgICAgIDxPcHRpb24gSUQ9IjIwNyIgTmFtZT0iV2VsbFBJQ00iIEFsaWFzPSLlpJrnuqfljovoo4LmsLTlubPkupUt5aSa5q615Lqn5rayIiBUaXBzPSIiIC8+DQoNCg0KICAgICAgICA8T3B0aW9uIElEPSI3MDkiIE5hbWU9IiIgQWxpYXM9IuWkmue6p+WOi+ijguawtOW5s+S6lSjlnYfljIDmtYHph48pLeetiemXtOi3neetieWNiumVvyIgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTAiIE5hbWU9IiIgQWxpYXM9IuWkmue6p+WOi+ijguawtOW5s+S6lSjlnYfljIDmtYHph48pIiAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTEiIE5hbWU9IiIgQWxpYXM9IuWkmue6p+WOi+ijguawtOW5s+S6lSjml6DpmZDlr7zmtYEpLeetiemXtOi3neetieWNiumVvyIgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTIiIE5hbWU9IiIgQWxpYXM9IuWkmue6p+WOi+ijguawtOW5s+S6lSjml6DpmZDlr7zmtYEpIiAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTMiIE5hbWU9IiIgQWxpYXM9IuWkmue6p+WOi+ijguawtOW5s+S6lSjmnInpmZDlr7zmtYEpLeetiemXtOi3neetieWNiumVvyIgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTQiIE5hbWU9IiIgQWxpYXM9IuWkmue6p+WOi+ijguawtOW5s+S6lSjmnInpmZDlr7zmtYEpIiAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KDQogICAgPC9XRUxNb2RlbD4NCg0KICAgIDwhLS0g5rK56JeP5qih5Z6LLS0+DQogICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IiIgVGlwcz0iIiA+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iMTAwIiBOYW1lPSJSZXNIbWdlIiBBbGlhcz0i5Z2H6LSo5rK56JePIiBGaWc9IldCU19Ob25lLnBuZyIgVGlwcz0iIiAvPg0KICAgICAgICA8T3B0aW9uIElEPSIxMDEiIE5hbWU9IlJlc0htZ2VFeCIgQWxpYXM9IuWdh+i0qOayueiXjyjmianlsZUpIiBGaWc9IiIgVGlwcz0iIiAvPg0KDQogICAgICAgIDxPcHRpb25Hcm91cCBOYW1lPSJSZXNUd29Qb3IiIEFsaWFzPSLlj4zph43lrZTpmpkiIFRpcHM9IiI+DQogICAgICAgICAgICA8T3B0aW9uIElEPSIxMDIiIE5hbWU9IlJlc1R3b1Bvcl9QUyIgQWxpYXM9IuaLn+eos+aAgSIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPE9wdGlvbiBJRD0iMTAzIiBOYW1lPSJSZXNUd29Qb3JfUExBIiBBbGlhcz0i5LiN56iz5oCB5p2/54q25LuL6LSoIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8T3B0aW9uIElEPSIxMDQiIE5hbWU9IlJlc1R3b1Bvcl9CQUwiIEFsaWFzPSLkuI3nqLPmgIHnkIPlvaLku4votKgiIFRpcHM9IiIgLz4NCiAgICAgICAgICAgIDxPcHRpb24gSUQ9IjEwNSIgTmFtZT0iUmVzVHdvUG9yX0NZTCIgQWxpYXM9IuS4jeeos+aAgeWchuafseW9ouS7i+i0qCIgVGlwcz0iIiAvPg0KICAgICAgICA8L09wdGlvbkdyb3VwPg0KDQogICAgICAgIDxPcHRpb24gSUQ9IjEwNyIgTmFtZT0iUmVzQ29tcDIiIEFsaWFzPSLlj4zljLrlpI3lkIgiIFRpcHM9IiIgLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iMTA4IiBOYW1lPSJSZXNDb21wMyIgQWxpYXM9IuS4ieWMuuWkjeWQiCIgVGlwcz0iIiAvPg0KDQogICAgICAgIDxPcHRpb25Hcm91cCBOYW1lPSJSZXNUd29Qb3IiIEFsaWFzPSLlpJrph43ku4votKjlvoTlkJHlpI3lkIgiIFRpcHM9IiI+DQoNCiAgICAgICAgICAgIDxPcHRpb24gSUQ9IjIwMCIgTmFtZT0iUmVzTXVsdE1lZENvbXAxMiIgQWxpYXM9IuWGhTHlpJYyIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8T3B0aW9uIElEPSIyMDEiIE5hbWU9IlJlc011bHRNZWRDb21wMTMiIEFsaWFzPSLlhoUx5aSWMyIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPE9wdGlvbiBJRD0iMjAyIiBOYW1lPSJSZXNNdWx0TWVkQ29tcDIyIiBBbGlhcz0i5YaFMuWkljIiIFRpcHM9IiIgLz4NCiAgICAgICAgICAgIDxPcHRpb24gSUQ9IjIwMyIgTmFtZT0iUmVzTXVsdE1lZENvbXAyMyIgQWxpYXM9IuWGhTLlpJYzIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8T3B0aW9uIElEPSIyMDQiIE5hbWU9IlJlc011bHRNZWRDb21wMyIgQWxpYXM9IuWGhTPlpJYzIiBUaXBzPSIiIC8+DQoNCiAgICAgICAgPC9PcHRpb25Hcm91cD4NCg0KICAgICAgICA8T3B0aW9uIElEPSIzMDAiIE5hbWU9IlJlc1R3b1BvclBvc1NyYyIgQWxpYXM9IuWPjOmHjeWtlOmamSjngrnmupApIiBUaXBzPSIiIC8+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iMzUwIiBOYW1lPSJSZXNDb21wNCIgQWxpYXM9IuW+hOWQkeWkjeWQiCIgVGlwcz0iIiAvPg0KDQogICAgICAgIDxPcHRpb24gSUQ9IjcwMCIgTmFtZT0iVE9ETzMiIEFsaWFzPSLlnYfotKjlgqjlsYIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBzPSIiLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNzAxIiBOYW1lPSJUT0RPNCIgQWxpYXM9IuWdh+i0qOWCqOWxguS6jOWxgiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwcz0iIi8+DQogICAgICAgIDxPcHRpb24gSUQ9IjcwMiIgTmFtZT0iVE9ETzUiIEFsaWFzPSLlnYfotKjlgqjlsYLkuozljLrlvoTlkJHlpI3lkIgiICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBzPSIiLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNzAzIiBOYW1lPSJUT0RPMSIgQWxpYXM9IuWdh+i0qOWCqOWxguS6jOWMuue6v+aAp+WkjeWQiChTUlYpIiAgICAgICAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MDQiIE5hbWU9IlRPRE8xIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LqM5Yy657q/5oCn5aSN5ZCIKFNSVikt5ZCv5Yqo5Y6L5Yqb5qKv5bqmIiAgICAgICAgVGlwcz0iIi8+DQoNCiAgICAgICAgPE9wdGlvbiBJRD0iNzA4IiBOYW1lPSJUT0RPMSIgQWxpYXM9IuWdh+i0qOWCqOWxguWbm+WMuuW+hOWQkeWkjeWQiCIgICAgICAgICAgICAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MDkiIE5hbWU9IlRPRE8xIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LqU5Yy657q/5oCn5aSN5ZCIKOS6lOe6v+aAp+a1gSkiICAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTAiIE5hbWU9IlRPRE8xIiBBbGlhcz0i6KOC57ydLea6tuiagOWtlOa0nijmi5/nqLPmgIHljZXmuJcpIiAgICAgICAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTEiIE5hbWU9IlRPRE8xIiBBbGlhcz0i6KOC57ydLea6tuiagOWtlOa0nijmi5/nqLPmgIHlj4zmuJcpIiAgICAgICAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTIiIE5hbWU9IlRPRE8xIiBBbGlhcz0i6KOC57ydLea6tuiagOWtlOa0ni3lrZTpmpko5ouf56iz5oCB5Y2V5riXKSIgICAgICAgICAgICAgICAgVGlwcz0iIi8+DQogICAgICAgIDxPcHRpb24gSUQ9IjcxMyIgTmFtZT0iVE9ETzEiIEFsaWFzPSLoo4LnvJ0t5rq26JqA5a2U5rSeLeWtlOmamSjmi5/nqLPmgIHlj4zmuJcpIiAgICAgICAgICAgICAgICBUaXBzPSIiLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNzE0IiBOYW1lPSJUT0RPMSIgQWxpYXM9IuWPjOmHjeWtlOmameWCqOWxgijmnb/nirbkuI3nqLPmgIHljZXmuJcpIiAgICAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTUiIE5hbWU9IlRPRE8xIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOadv+eKtuS4jeeos+aAgeWNlea4lykt5ZC46ZmEIiAgICAgICAgICAgICBUaXBzPSIiLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNzE2IiBOYW1lPSJUT0RPMSIgQWxpYXM9IuWPjOmHjeWtlOmameWCqOWxgijmi5/nqLPmgIHljZXmuJcpIiAgICAgICAgICAgICAgICAgICAgICBUaXBzPSIiLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iNzE3IiBOYW1lPSJUT0RPMSIgQWxpYXM9IuWPjOmHjeWtlOmameWCqOWxgijmi5/nqLPmgIHljZXmuJcpLeWQuOmZhCIgICAgICAgICAgICAgICAgIFRpcHM9IiIvPg0KICAgICAgICA8T3B0aW9uIElEPSI3MTgiIE5hbWU9IlRPRE8xIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOeQg+eKtuS4jeeos+aAgeWNlea4lykiICAgICAgICAgICAgICAgICAgVGlwcz0iIi8+DQogICAgICAgIDxPcHRpb24gSUQ9IjcxOSIgTmFtZT0iVE9ETzEiIEFsaWFzPSLlj4zph43lrZTpmpnlgqjlsYIo55CD54q25LiN56iz5oCB5Y2V5riXKS3lkLjpmYQiICAgICAgICAgICAgIFRpcHM9IiIvPg0KDQogICAgICAgIDxPcHRpb24gSUQ9IjYwMCIgTmFtZT0iVE9ETzEiIEFsaWFzPSLlnoLnm7Too4LnvJ3nur/mupDop6Mod3hkKSIgVGlwcz0iIiAvPg0KICAgICAgICA8T3B0aW9uIElEPSI2MDEiIE5hbWU9IlRPRE8yIiBBbGlhcz0i5Z2H6LSo5rK56JePKHd4ZCkiIFRpcHM9IiIgLz4NCg0KICAgIDwvUkVTTW9kZWw+DQoNCiAgICA8IS0tIOi+ueeVjOaooeWeiy0tPg0KICAgIDxCRFlNb2RlbCBOYW1lPSIiIEFsaWFzPSIiIFRpcHM9IiIgPg0KICAgICAgICA8T3B0aW9uIElEPSIwMCIgTmFtZT0iQmR5SW5maW5pdGUiIEFsaWFzPSLml6DpmZDlpKciIFRpcHM9IiIgLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iMDEiIE5hbWU9IkJkeU9uZSIgQWxpYXM9IuS4gOadoei+ueeVjCIgUGFyYXM9Iui+ueeVjOi3neemuzE75LiL6L6555WMIiBGaWc9IlRoZW9yeV9DdXJ2ZTIucG5nIiBUaXBzPSIiIC8+DQogICAgICAgIDxPcHRpb24gSUQ9IjAyIiBOYW1lPSJCeWRQYXJhbCIgQWxpYXM9IuW5s+ihjOi+ueeVjCIgUGFyYXM9Iui+ueeVjOi3neemuzE76L6555WM6Led56a7MjvkuIrovrnnlYw75LiL6L6555WMIiBUaXBzPSIiIC8+DQogICAgICAgIDxPcHRpb24gSUQ9IjAzIiBOYW1lPSJCeWRUcmkiIEFsaWFzPSLkuInmnaHlnoLnm7TovrnnlYwiIFBhcmFzPSLovrnnlYzot53nprsxO+i+ueeVjOi3neemuzI76L6555WM6Led56a7Mzvlt6bovrnnlYw75LiL6L6555WMO+WPs+i+ueeVjCIgVGlwcz0iIiAvPg0KICAgICAgICA8T3B0aW9uIElEPSIwNCIgTmFtZT0iQmR5Q3Jvc3MiIEFsaWFzPSLkuqTlj4novrnnlYwiIFBhcmFzPSLovrnnlYzot53nprsxO+i+ueeVjOi3neemuzI75bem6L6555WMO+S4i+i+ueeVjDvop5LluqYiIFRpcHM9IiIgLz4NCiAgICAgICAgPE9wdGlvbiBJRD0iMDUiIE5hbWU9IkJkeUNpcmNsZSIgQWxpYXM9IuWchuW9oui+ueeVjCIgUGFyYXM9Iui+ueeVjOi3neemuzE75ZyG5b2i5aSW6L6555WMIiBUaXBzPSIiIC8+DQogICAgICAgIDxPcHRpb24gSUQ9IjA2IiBOYW1lPSJCZHlSZWN0IiBBbGlhcz0i55+p5b2i6L6555WMIiBQYXJhcz0i6L6555WM6Led56a7MTvovrnnlYzot53nprsyO+i+ueeVjOi3neemuzM76L6555WM6Led56a7NDvkuIrovrnnlYw75LiL6L6555WMO+W3pui+ueeVjDvlj7PovrnnlYwiIFRpcHM9IiIgLz4NCg0KICAgIDwvQkRZTW9kZWw+DQoNCg0KICAgIDwhLS0g5YWx5oCn5Y+C5pWw77yM5p2l5rqQ5LqOIFNoZWV077ya5YWx5oCn5Y+C5pWwIC0tPg0KICAgIDwhLS0g5YW25Lit77yMT3V0cHV0c+WFseaAp+WPguaVsOi/mOimgeiAg+iZkSDovrnnlYzmqKHlnosg5LitIFBhcmFzIOaVsOaNrumhuSAtLT4NCiAgICA8Q29tbW9uUGFyYXM+DQogICAgICAgIDxMUCBJbnB1dHM9IuS6leWNiuW+hDvlgqjlsYLljprluqY75a2U6ZqZ5bqmO+S9k+enr+ezu+aVsDvmsrnnm7jpu4/luqY75rC055u46buP5bqmO+e7vOWQiOWOi+e8qeezu+aVsDvliJ3lp4vljovlipsiIC8+DQogICAgICAgIDxMUCBPdXRwdXRzPSLlnLDlsYLljovlips75LqV562S5YKo6ZuG57O75pWwO+a1i+ivleaXtumXtDvmjqLmtYvljYrlvoQ75rWB5bqmO+a3t+WQiOm7j+W6piIgLz4NCg0KICAgICAgICA8SFcgSW5wdXRzPSLkupXljYrlvoQ75YKo5bGC5Y6a5bqmO+WtlOmameW6pjvkvZPnp6/ns7vmlbA75rK55L2T56ev57O75pWwO+awlOS9k+enr+ezu+aVsDvmsLTkvZPnp6/ns7vmlbA75rK555u46buP5bqmO+awtOebuOm7j+W6pjvnu7zlkIjljovnvKnns7vmlbA75Yid5aeL5Y6L5YqbIiAvPg0KICAgICAgICA8SFcgT3V0cHV0cz0i5Zyw5bGC5Y6L5YqbO+S6leetkuWCqOmbhuezu+aVsDvmsLTlubPmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+awtOW5s+S6lemVv+W6pjvmtYHluqY75re35ZCI6buP5bqmIiAvPg0KDQogICAgICAgIDxTUiBJbnB1dHM9IuS6leWNiuW+hDvlgqjlsYLljprluqY75a2U6ZqZ5bqmO+S9k+enr+ezu+aVsDvmsrnnm7jpu4/luqY75rC055u46buP5bqmO+e7vOWQiOWOi+e8qeezu+aVsDvliJ3lp4vljovlipsiIC8+DQogICAgICAgIDxTUiBPdXRwdXRzPSLlnLDlsYLljovlips75LqV562S5YKo6ZuG57O75pWwO+a1i+ivleaXtumXtDvmjqLmtYvljYrlvoQ75rWB5bqmO+a3t+WQiOm7j+W6piIgLz4NCg0KICAgICAgICA8UEYgSW5wdXRzPSLkupXljYrlvoQ75YKo5bGC5Y6a5bqmO+WtlOmameW6pjvkvZPnp6/ns7vmlbA75rK555u46buP5bqmO+awtOebuOm7j+W6pjvnu7zlkIjljovnvKnns7vmlbA75rOo5YWl6YePO+iBmuWQiOeJqeWIneWni+a1k+W6pjvmianmlaPns7vmlbA75Yid5aeL5Y6L5YqbIiAvPg0KICAgICAgICA8UEYgT3V0cHV0cz0i5Zyw5bGC5Y6L5YqbO+S6leetkuWCqOmbhuezu+aVsDvmt7flkIjpu4/luqYiIC8+DQoNCiAgICAgICAgPFhEIElucHV0cz0i5LqV5Y2K5b6EO+WCqOWxguWOmuW6pjvlrZTpmpnluqY75L2T56ev57O75pWwO+ayueebuOm7j+W6pjvmsLTnm7jpu4/luqY757u85ZCI5Y6L57yp57O75pWwO+WIneWni+WOi+WKmyIgLz4NCiAgICAgICAgPFhEIE91dHB1dHM9IuWcsOWxguWOi+WKmzvkupXnrZLlgqjpm4bns7vmlbA75rWL6K+V5pe26Ze0O+aOoua1i+WNiuW+hDvmtYHluqY75re35ZCI6buP5bqmIiAvPg0KDQogICAgICAgIDxYQSBJbnB1dHM9IuS6leWNiuW+hDvlgqjlsYLljprluqY75a2U6ZqZ5bqmO+S9k+enr+ezu+aVsDvmsrnnm7jpu4/luqY75rC055u46buP5bqmO+e7vOWQiOWOi+e8qeezu+aVsDvliJ3lp4vljovlipsiIC8+DQogICAgICAgIDxYQSBPdXRwdXRzPSLlnLDlsYLljovlips75LqV562S5YKo6ZuG57O75pWwO+a1i+ivleaXtumXtDvmjqLmtYvljYrlvoQ75rWB5bqmO+a3t+WQiOm7j+W6piIgLz4NCg0KICAgIDwvQ29tbW9uUGFyYXM+DQoNCiAgICA8IS0tIOaooeWei+WfuuehgOWPguaVsOmFjee9riAtLT4NCiAgICA8TW9kZWxJb0Rlc2NzIE5hbWU9IiIgQWxpYXM9IuWkhOeQhuino+mHiuaooeWeiyIgVGlwcz0iIiA+DQoNCiAgICAgICAgPCEtLSDkuKrmgKflj4LmlbDvvIzkuI3lkIzkupXlnovkuI7msrnol4/mqKHlnosg5LiN5ZCMIC0tPg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i55u05LqVIiBTZXJpZXM9IkxQIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48iIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7ns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48o5omp5bGVKSIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsCIvPg0KDQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOaLn+eos+aAgSkiICAgICBTZXJpZXM9IlhBIiAgICAgICAgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvlgqjlrrnmr5Q756qc5rWB57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOadv+eKtumdnueos+aAgSkiICAgIFNlcmllcz0iWEEiICAgICAgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvlgqjlrrnmr5Q756qc5rWB57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOeQg+eKtumdnueos+aAgSkiICAgIFNlcmllcz0iWEEiICAgICAgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvlgqjlrrnmr5Q756qc5rWB57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LqM5Yy65b6E5ZCR5aSN5ZCIIiAgICAgICAgU2VyaWVzPSJYQSIgICAgICBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+a1geW6puavlDIxO+WvvOWOi+ezu+aVsOavlDIxO+WkjeWQiOWNiuW+hDIxIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LiJ5Yy65b6E5ZCR5aSN5ZCIIiAgICAgICBTZXJpZXM9IlhBIiAgICAgICBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+a1geW6puavlDIxO+WvvOWOi+ezu+aVsOavlDIxO+WkjeWQiOWNiuW+hDIxO+a1geW6puavlDMxO+WvvOWOi+ezu+aVsOavlDMxO+WkjeWQiOWNiuW+hDMyIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5Zub5Yy65b6E5ZCR5aSN5ZCIIiAgICAgIFNlcmllcz0iWEEiICAgICAgICBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+a1geW6puavlDIxO+WvvOWOi+ezu+aVsOavlDIxO+WkjeWQiOWNiuW+hDIxO+a1geW6puavlDMxO+WvvOWOi+ezu+aVsOavlDMxO+WkjeWQiOWNiuW+hDMyO+a1geW6puavlDQxO+WvvOWOi+ezu+aVsOavlDQxO+WkjeWQiOWNiuW+hDQzIi8+DQoNCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIxMDIiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTmi5/nqLPmgIEiIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7ns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvln7rotKjlrZTpmpnluqY75Z+66LSo57u85ZCI5Y6L57yp57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBJRD0iMTAzIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ4oCU4oCU5LiN56iz5oCB5p2/54q25LuL6LSoIiBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlDvnqpzmtYHns7vmlbA75Z+66LSo5a2U6ZqZ5bqmO+Wfuui0qOe7vOWQiOWOi+e8qeezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgSUQ9IjEwNCIgQWxpYXM9IuWPjOmHjeWtlOmameKAlOKAlOS4jeeos+aAgeeQg+W9ouS7i+i0qCIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q756qc5rWB57O75pWwO+Wfuui0qOWtlOmameW6pjvln7rotKjnu7zlkIjljovnvKnns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIxMDUiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTkuI3nqLPmgIHlnIbmn7HlvaLku4votKgiIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7ns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvln7rotKjlrZTpmpnluqY75Z+66LSo57u85ZCI5Y6L57yp57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5riX6YCPIiBPdXRwdXRzPSLlsYLkuIDmuJfpgI/njoc75bGC5LqM5riX6YCP546HO+WxguS4gOWCqOWxguWOmuW6pjvlsYLkuozlgqjlsYLljprluqY75bGC5LiA6KGo55qu57O75pWwO+WxguS6jOihqOearuezu+aVsDvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q756qc5rWB57O75pWwO+WxguS4gOWtlOmameW6pjvlsYLkuozlrZTpmpnluqY75bGC5LiA57u85ZCI5Y6L57yp57O75pWwO+WxguS6jOe7vOWQiOWOi+e8qeezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOWMuuWkjeWQiCIgT3V0cHV0cz0iMeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HO+ihqOearuezu+aVsDvmtYHluqbmr5Q75YKo5a655q+UO+WkjeWQiOWNiuW+hCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuS4ieWMuuWkjeWQiCIgT3V0cHV0cz0iMeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HOzPljLrmuJfpgI/njoc76KGo55qu57O75pWwO+S4gOWMuuWNiuW+hDvkuozljLrljYrlvoQ75rWB5bqm5q+UMjE75rWB5bqm5q+UMzE75YKo5a655q+UMTvlgqjlrrnmr5QyIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBJRD0iMjAwIiBBbGlhcz0i5aSa6YeN5LuL6LSo5b6E5ZCR5aSN5ZCIKOWGhTHlpJYyKSIgT3V0cHV0cz0iMeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HO+ihqOearuezu+aVsDvkuIDljLrljYrlvoQ75rWB5bqm5q+UO+WCqOWuueavlDvlpJbljLrln7rotKjnqpzmtYHns7vmlbA75aSW5Yy65Z+66LSo5by55oCn5YKo5a655q+UO+WkluWMuuijgue8neW8ueaAp+WCqOWuueavlDvlpJbljLrlrZTpmpnluqY75bGC5LqM57u85ZCI5Y6L57yp57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBJRD0iMjAxIiBBbGlhcz0i5aSa6YeN5LuL6LSo5b6E5ZCR5aSN5ZCIKOWGhTHlpJYzKSIgT3V0cHV0cz0iMeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HO+ihqOearuezu+aVsDvkuIDljLrljYrlvoQ75rWB5bqm5q+UO+WCqOWuueavlDvlupTlipvmlY/mhJ/ns7vmlbA75ZCv5Yqo5Y6L5Yqb5qKv5bqmO+WkluWMuuWtlOa0nueqnOa1geezu+aVsDvlpJbljLrlrZTmtJ7lvLnmgKflgqjlrrnmr5Q75aSW5Yy65Z+66LSo56qc5rWB57O75pWwO+WkluWMuuWfuui0qOW8ueaAp+WCqOWuueavlDvlpJbljLroo4LnvJ3lvLnmgKflgqjlrrnmr5Q75aSW5Yy65a2U6ZqZ5bqmO+WxguS6jOe7vOWQiOWOi+e8qeezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgSUQ9IjIwMiIgQWxpYXM9IuWkmumHjeS7i+i0qOW+hOWQkeWkjeWQiCjlhoUy5aSWMikiIE91dHB1dHM9IjHljLrmuJfpgI/njoc7MuWMuua4l+mAj+eOhzvooajnmq7ns7vmlbA75LiA5Yy65Y2K5b6EO+a1geW6puavlDvlgqjlrrnmr5Q75YaF5Yy65Z+66LSo56qc5rWB57O75pWwO+WGheWMuuWfuui0qOW8ueaAp+WCqOWuueavlDvlhoXljLroo4LnvJ3lvLnmgKflgqjlrrnmr5Q75aSW5Yy65Z+66LSo56qc5rWB57O75pWwO+WkluWMuuWfuui0qOW8ueaAp+WCqOWuueavlDvlpJbljLroo4LnvJ3lvLnmgKflgqjlrrnmr5Q75aSW5Yy65a2U6ZqZ5bqmO+WxguS6jOe7vOWQiOWOi+e8qeezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgSUQ9IjIwMyIgQWxpYXM9IuWkmumHjeS7i+i0qOW+hOWQkeWkjeWQiCjlhoUy5aSWMykiIE91dHB1dHM9IjHljLrmuJfpgI/njoc7MuWMuua4l+mAj+eOhzvooajnmq7ns7vmlbA75LiA5Yy65Y2K5b6EO+a1geW6puavlDvlgqjlrrnmr5Q75bqU5Yqb5pWP5oSf57O75pWwO+WQr+WKqOWOi+WKm+air+W6pjvlhoXljLrln7rotKjnqpzmtYHns7vmlbA75YaF5Yy65Z+66LSo5by55oCn5YKo5a655q+UO+WGheWMuuijgue8neW8ueaAp+WCqOWuueavlDvlpJbljLrlrZTmtJ7nqpzmtYHns7vmlbA75aSW5Yy65a2U5rSe5by55oCn5YKo5a655q+UO+WkluWMuuWfuui0qOeqnOa1geezu+aVsDvlpJbljLrln7rotKjlvLnmgKflgqjlrrnmr5Q75aSW5Yy66KOC57yd5by55oCn5YKo5a655q+UO+WkluWMuuWtlOmameW6pjvlsYLkuoznu7zlkIjljovnvKnns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIyMDQiIEFsaWFzPSLlpJrph43ku4votKjlvoTlkJHlpI3lkIgo5YaFM+WkljMpIiBPdXRwdXRzPSIx5Yy65riX6YCP546HOzLljLrmuJfpgI/njoc76KGo55qu57O75pWwO+S4gOWMuuWNiuW+hDvmtYHluqbmr5Q75YKo5a655q+UO+W6lOWKm+aVj+aEn+ezu+aVsDvlkK/liqjljovlipvmoq/luqY75YaF5Yy65a2U5rSe56qc5rWB57O75pWwO+WGheWMuuWtlOa0nuW8ueaAp+WCqOWuueavlDvlhoXljLrln7rotKjnqpzmtYHns7vmlbA75YaF5Yy65Z+66LSo5by55oCn5YKo5a655q+UO+WGheWMuuijgue8neW8ueaAp+WCqOWuueavlDvlpJbljLrlrZTmtJ7nqpzmtYHns7vmlbA75aSW5Yy65a2U5rSe5by55oCn5YKo5a655q+UO+WkluWMuuWfuui0qOeqnOa1geezu+aVsDvlpJbljLrln7rotKjlvLnmgKflgqjlrrnmr5Q75aSW5Yy66KOC57yd5by55oCn5YKo5a655q+UO+WkluWMuuWtlOmameW6pjvlsYLkuoznu7zlkIjljovnvKnns7vmlbAiLz4NCg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9Iue6v+aAp+WkjeWQiCIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvmtYHluqbmr5Q75YKo5a655q+UO+WkjeWQiOWNiuW+hDvnlYzpnaLooajnmq4iLz4NCg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOayueiXjyh3eGQpIiBPdXRwdXRzPSLmuJfpgI/njoc757uE5ZCI5Y+C5pWwQ0RlMlMiIFNlcmllcz0iWEQiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol49b6KW/5a6J5rWL6K+VXSIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsCIgU2VyaWVzPSJYQSIvPg0KDQogICAgICAgIDwvV0VMTW9kZWw+DQogICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIEFsaWFzPSLljovoo4Lnm7TkupUo5Z2H5YyA5rWB6YePKSIgU2VyaWVzPSJMUCI+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5rK56JePIiBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+ijgue8neWNiumVvyIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgSUQ9IjEwMiIgQWxpYXM9IuWPjOmHjeWtlOmameKAlOKAlOaLn+eos+aAgSIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvoo4LnvJ3ljYrplb876KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvln7rotKjlrZTpmpnluqY75Z+66LSo57u85ZCI5Y6L57yp57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5riX6YCPIiBPdXRwdXRzPSLoo4LnvJ3ljYrplb875bGC5LiA5riX6YCP546HO+WxguS6jOa4l+mAj+eOhzvlsYLkuIDlgqjlsYLljprluqY75bGC5LqM5YKo5bGC5Y6a5bqmO+WxguS4gOihqOearuezu+aVsDvlsYLkuozooajnmq7ns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvlsYLkuIDlrZTpmpnluqY75bGC5LqM5a2U6ZqZ5bqmO+WxguS4gOe7vOWQiOWOi+e8qeezu+aVsDvlsYLkuoznu7zlkIjljovnvKnns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zljLrlpI3lkIgiIE91dHB1dHM9IjHljLrmuJfpgI/njoc7MuWMuua4l+mAj+eOhzvooajnmq7ns7vmlbA75rWB5bqm5q+UO+WCqOWuueavlDvlpI3lkIjljYrlvoQiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLkuInljLrlpI3lkIgiIE91dHB1dHM9IuihqOearuezu+aVsDvoo4LnvJ3ljYrplb87MeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HOzPljLrmuJfpgI/njoc75LiA5Yy65Y2K5b6EO+S6jOWMuuWNiuW+hDvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5QxO+WCqOWuueavlDIiLz4NCiAgICAgICAgPC9XRUxNb2RlbD4NCiAgICAgICAgPFdFTE1vZGVsIE5hbWU9IiIgQWxpYXM9IuWOi+ijguebtOS6lSjml6DpmZDlr7zmtYEpIiBTZXJpZXM9IkxQIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48iIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7ns7vmlbA76KOC57yd5Y2K6ZW/Ii8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBJRD0iMTAyIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ4oCU4oCU5ouf56iz5oCBIiBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+ijgue8neWNiumVvzvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q756qc5rWB57O75pWwO+Wfuui0qOWtlOmameW6pjvln7rotKjnu7zlkIjljovnvKnns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zph43muJfpgI8iIE91dHB1dHM9Iuijgue8neWNiumVvzvlsYLkuIDmuJfpgI/njoc75bGC5LqM5riX6YCP546HO+WxguS4gOWCqOWxguWOmuW6pjvlsYLkuozlgqjlsYLljprluqY75bGC5LiA6KGo55qu57O75pWwO+WxguS6jOihqOearuezu+aVsDvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q756qc5rWB57O75pWwO+WxguS4gOWtlOmameW6pjvlsYLkuozlrZTpmpnluqY75bGC5LiA57u85ZCI5Y6L57yp57O75pWwO+WxguS6jOe7vOWQiOWOi+e8qeezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOWMuuWkjeWQiCIgT3V0cHV0cz0iMeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HO+ihqOearuezu+aVsDvmtYHluqbmr5Q75YKo5a655q+UO+WkjeWQiOWNiuW+hCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuS4ieWMuuWkjeWQiCIgT3V0cHV0cz0i6KGo55qu57O75pWwO+ijgue8neWNiumVvzsx5Yy65riX6YCP546HOzLljLrmuJfpgI/njoc7M+WMuua4l+mAj+eOhzvkuIDljLrljYrlvoQ75LqM5Yy65Y2K5b6EO+a1geW6puavlDIxO+a1geW6puavlDMxO+WCqOWuueavlDE75YKo5a655q+UMiIvPg0KICAgICAgICA8L1dFTE1vZGVsPg0KDQogICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIEFsaWFzPSLnm7TkupUo6YOo5YiG5bCE5byAKSIgU2VyaWVzPSJMUCI+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5rK56JePIiBPdXRwdXRzPSLmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+ihqOearuezu+aVsDvlsITlvIDmrrXplb/luqY75bCE5byA5q616aG26YOo5L2N572uO+mhtui+ueeVjDvlupXovrnnlYwiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIxMDIiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTmi5/nqLPmgIEiIE91dHB1dHM9Iua4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc76KGo55qu57O75pWwO+WwhOW8gOautemVv+W6pjvlsITlvIDmrrXpobbpg6jkvY3nva476KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvln7rotKjlrZTpmpnluqY75Z+66LSo57u85ZCI5Y6L57yp57O75pWwO+mhtui+ueeVjDvlupXovrnnlYwiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zph43muJfpgI8iIE91dHB1dHM9IuWeguWQkea4l+mAj+eOhzvlsITlvIDmrrXplb/luqY75bCE5byA5q616aG26YOo5L2N572uO+WxguS4gOa4l+mAj+eOhzvlsYLkuozmuJfpgI/njoc75bGC5LiA5YKo5bGC5Y6a5bqmO+WxguS6jOWCqOWxguWOmuW6pjvlsYLkuIDooajnmq7ns7vmlbA75bGC5LqM6KGo55qu57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlDvnqpzmtYHns7vmlbA75bGC5LiA5a2U6ZqZ5bqmO+WxguS6jOWtlOmameW6pjvlsYLkuIDnu7zlkIjljovnvKnns7vmlbA75bGC5LqM57u85ZCI5Y6L57yp57O75pWwO+mhtui+ueeVjDvlupXovrnnlYwiLz4NCiAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M5Yy65aSN5ZCIIiBPdXRwdXRzPSIx5Yy65riX6YCP546HOzLljLrmuJfpgI/njoc76KGo55qu57O75pWwO+a1geW6puavlDvlgqjlrrnmr5Q75aSN5ZCI5Y2K5b6EO+mhtui+ueeVjDvlupXovrnnlYwiLz4NCiAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5LiJ5Yy65aSN5ZCIIiBPdXRwdXRzPSLlnoLlkJHmuJfpgI/njoc76KGo55qu57O75pWwO+WwhOW8gOautemVv+W6pjvlsITlvIDmrrXpobbpg6jkvY3nva47MeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HOzPljLrmuJfpgI/njoc75LiA5Yy65Y2K5b6EO+S6jOWMuuWNiuW+hDvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5QxO+WCqOWuueavlDI76aG26L6555WMO+W6lei+ueeVjCIvPg0KICAgICAgICA8L1dFTE1vZGVsPg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBJRD0iMTA3IiBBbGlhcz0i5Y6L6KOC5LqV4oCU4oCU5Lik5q615Lqn5rayIiBTZXJpZXM9IkxQIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48iIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7ns7vmlbA76KOC57yd6ZW/5bqmMTvoo4LnvJ3plb/luqYyO+i/keS6leautea1gemHj+avlCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgSUQ9IjEwMiIgQWxpYXM9IuWPjOmHjeWtlOmameKAlOKAlOaLn+eos+aAgSIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvoo4LnvJ3plb/luqYxO+ijgue8nemVv+W6pjI76L+R5LqV5q615rWB6YeP5q+UO+ijgue8neW8ueaAp+WCqOWuueavlDvnqpzmtYHns7vmlbA75Z+66LSo5a2U6ZqZ5bqmO+Wfuui0qOe7vOWQiOWOi+e8qeezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOmHjea4l+mAjyIgT3V0cHV0cz0i6KOC57yd6ZW/5bqmMTvoo4LnvJ3plb/luqYyO+i/keS6leautea1gemHj+avlDvlsYLkuIDmuJfpgI/njoc75bGC5LqM5riX6YCP546HO+WxguS4gOWCqOWxguWOmuW6pjvlsYLkuozlgqjlsYLljprluqY75bGC5LiA6KGo55qu57O75pWwO+WxguS6jOihqOearuezu+aVsDvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q756qc5rWB57O75pWwO+WxguS4gOWtlOmameW6pjvlsYLkuozlrZTpmpnluqY75bGC5LiA57u85ZCI5Y6L57yp57O75pWwO+WxguS6jOe7vOWQiOWOi+e8qeezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOWMuuWkjeWQiCIgT3V0cHV0cz0iMeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HO+ihqOearuezu+aVsDvmtYHluqbmr5Q75YKo5a655q+UO+WkjeWQiOWNiuW+hCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuS4ieWMuuWkjeWQiCIgT3V0cHV0cz0i6KGo55qu57O75pWwO+ijgue8nemVv+W6pjE76KOC57yd6ZW/5bqmMjvov5HkupXmrrXmtYHph4/mr5Q7MeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HOzPljLrmuJfpgI/njoc75LiA5Yy65Y2K5b6EO+S6jOWMuuWNiuW+hDvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5QxO+WCqOWuueavlDIiLz4NCiAgICAgICAgPC9XRUxNb2RlbD4NCiAgICAgICAgPFdFTE1vZGVsIE5hbWU9IiIgSUQ9IjEwOCIgQWxpYXM9IuWOi+ijguS6leKAlOKAlOS4ieauteS6p+a2siIgU2VyaWVzPSJMUCI+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5rK56JePIiBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+ijgue8nemVv+W6pjE76KOC57yd6ZW/5bqmMjvoo4LnvJ3plb/luqYzO+i/keS6leautea1gemHj+avlDE76L+R5LqV5q615rWB6YeP5q+UMiIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgSUQ9IjEwMiIgQWxpYXM9IuWPjOmHjeWtlOmameKAlOKAlOaLn+eos+aAgSIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvoo4LnvJ3plb/luqYxO+ijgue8nemVv+W6pjI76KOC57yd6ZW/5bqmMzvov5HkupXmrrXmtYHph4/mr5QxO+i/keS6leautea1gemHj+avlDI76KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvln7rotKjlrZTpmpnluqY75Z+66LSo57u85ZCI5Y6L57yp57O75pWwIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5riX6YCPIiBPdXRwdXRzPSLoo4LnvJ3plb/luqYxO+ijgue8nemVv+W6pjI76KOC57yd6ZW/5bqmMzvov5HkupXmrrXmtYHph4/mr5QxO+i/keS6leautea1gemHj+avlDI75bGC5LiA5riX6YCP546HO+WxguS6jOa4l+mAj+eOhzvlsYLkuIDlgqjlsYLljprluqY75bGC5LqM5YKo5bGC5Y6a5bqmO+WxguS4gOihqOearuezu+aVsDvlsYLkuozooajnmq7ns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvlsYLkuIDlrZTpmpnluqY75bGC5LqM5a2U6ZqZ5bqmO+WxguS4gOe7vOWQiOWOi+e8qeezu+aVsDvlsYLkuoznu7zlkIjljovnvKnns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zljLrlpI3lkIgiIE91dHB1dHM9IjHljLrmuJfpgI/njoc7MuWMuua4l+mAj+eOhzvooajnmq7ns7vmlbA75rWB5bqm5q+UO+WCqOWuueavlDvlpI3lkIjljYrlvoQiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLkuInljLrlpI3lkIgiIE91dHB1dHM9IuihqOearuezu+aVsDvoo4LnvJ3plb/luqYxO+ijgue8nemVv+W6pjI76KOC57yd6ZW/5bqmMzvov5HkupXmrrXmtYHph4/mr5QxO+i/keS6leautea1gemHj+avlDI7MeWMuua4l+mAj+eOhzsy5Yy65riX6YCP546HOzPljLrmuJfpgI/njoc75LiA5Yy65Y2K5b6EO+S6jOWMuuWNiuW+hDvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5QxO+WCqOWuueavlDIiLz4NCiAgICAgICAgPC9XRUxNb2RlbD4NCiAgICAgICAgPFdFTE1vZGVsIE5hbWU9IiIgQWxpYXM9IuWOi+ijguebtOS6lSjmnInpmZDlr7zmtYEpLeS4pOautSIgU2VyaWVzPSJMUCI+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5rK56JePIiBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+ijgue8nemVv+W6pjE76KOC57yd6ZW/5bqmMjvoo4LnvJ3lr7zmtYHog73lipsxO+ijgue8neWvvOa1geiDveWKmzIiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIxMDIiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTmi5/nqLPmgIEiIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7ns7vmlbA76KOC57yd6ZW/5bqmMTvoo4LnvJ3plb/luqYyO+ijgue8neWvvOa1geiDveWKmzE76KOC57yd5a+85rWB6IO95YqbMjvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q756qc5rWB57O75pWwO+Wfuui0qOWtlOmameW6pjvln7rotKjnu7zlkIjljovnvKnns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zph43muJfpgI8iIE91dHB1dHM9Iuijgue8nemVv+W6pjE76KOC57yd6ZW/5bqmMjvoo4LnvJ3lr7zmtYHog73lipsxO+ijgue8neWvvOa1geiDveWKmzI75bGC5LiA5riX6YCP546HO+WxguS6jOa4l+mAj+eOhzvlsYLkuIDlgqjlsYLljprluqY75bGC5LqM5YKo5bGC5Y6a5bqmO+WxguS4gOihqOearuezu+aVsDvlsYLkuozooajnmq7ns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UO+eqnOa1geezu+aVsDvlsYLkuIDlrZTpmpnluqY75bGC5LqM5a2U6ZqZ5bqmO+WxguS4gOe7vOWQiOWOi+e8qeezu+aVsDvlsYLkuoznu7zlkIjljovnvKnns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zljLrlpI3lkIgiIE91dHB1dHM9IjHljLrmuJfpgI/njoc7MuWMuua4l+mAj+eOhzvooajnmq7ns7vmlbA75rWB5bqm5q+UO+WCqOWuueavlDvlpI3lkIjljYrlvoQiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLkuInljLrlpI3lkIgiIE91dHB1dHM9IuihqOearuezu+aVsDvoo4LnvJ3plb/luqYxO+ijgue8nemVv+W6pjI76KOC57yd5a+85rWB6IO95YqbMTvoo4LnvJ3lr7zmtYHog73lipsyOzHljLrmuJfpgI/njoc7MuWMuua4l+mAj+eOhzsz5Yy65riX6YCP546HO+S4gOWMuuWNiuW+hDvkuozljLrljYrlvoQ75rWB5bqm5q+UMjE75rWB5bqm5q+UMzE75YKo5a655q+UMTvlgqjlrrnmr5QyIi8+DQogICAgICAgIDwvV0VMTW9kZWw+DQoNCiAgICAgICAgPCEtLSDkuKrmgKflj4LmlbDvvIzkuI3lkIzkupXlnovkuI7msrnol4/mqKHlnosg5LiN5ZCMIC0tPg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i5rC05bmz5LqVIiBTZXJpZXM9IkhXIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48iIE91dHB1dHM9IuihqOearuezu+aVsDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIxMDIiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTmi5/nqLPmgIEiIE91dHB1dHM9IuihqOearuezu+aVsDvnqpzmtYHns7vmlbA75Z6C5ZCR5LqV5L2NO+ijgue8neW8ueaAp+WCqOWuueavlCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOmHjea4l+mAjyIgT3V0cHV0cz0i5bGC5LiA6KGo55qu57O75pWwO+WxguS6jOihqOearuezu+aVsDvnqpzmtYHns7vmlbA75Z6C5ZCR5LqV5L2NO+ijgue8neW8ueaAp+WCqOWuueavlCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOWMuuWkjeWQiCIgT3V0cHV0cz0i6KGo55qu57O75pWwO+a1geW6puavlDIxO+a1geW6puavlDMxO+WCqOWuueavlDvlnoLlkJHkupXkvY075aSN5ZCI5Y2K5b6EIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5LiJ5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75rWB5bqm5q+UMjE75rWB5bqm5q+UMzE75YKo5a655q+UMTvlgqjlrrnmr5QyO+S4gOWMuuWNiuW+hDvkuozljLrljYrlvoQ75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5b6E5ZCR5aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75rWB5bqm5q+UO+WCqOWuueavlDvlpI3lkIjljYrlvoQ75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i57q/5oCn5aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75rWB5bqm5q+UO+WCqOWuueavlDvlpI3lkIjljYrlvoQiLz4NCg0KDQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGCIiAgU2VyaWVzPSJYQSIgICAgICAgIE91dHB1dHM9IuW+hOWQkea4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc75Z6C5ZCR5LqV5L2NO+ihqOearuWboOWtkDvmsLTlubPkupXljYrplb87Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOaLn+eos+aAgSkiICBTZXJpZXM9IlhBIiAgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY076KGo55qu5Zug5a2QO+awtOW5s+S6leWNiumVvzvlgqjlrrnmr5Q756qc5rWB57O75pWwIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOadv+eKtumdnueos+aAgSkiICBTZXJpZXM9IlhBIiAgICBPdXRwdXRzPSLlvoTlkJHmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+WeguWQkeS6leS9jTvooajnmq7lm6DlrZA75rC05bmz5LqV5Y2K6ZW/O+WCqOWuueavlDvnqpzmtYHns7vmlbAiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zph43lrZTpmpnlgqjlsYIo55CD54q26Z2e56iz5oCBKSIgU2VyaWVzPSJYQSIgICBPdXRwdXRzPSLlvoTlkJHmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+WeguWQkeS6leS9jTvooajnmq7lm6DlrZA75rC05bmz5LqV5Y2K6ZW/O+WCqOWuueavlDvnqpzmtYHns7vmlbAiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYLkuozljLrlvoTlkJHlpI3lkIgiICAgU2VyaWVzPSJYQSIgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY076KGo55qu5Zug5a2QO+awtOW5s+S6leWNiumVvzvmtYHluqbmr5QyMTvlr7zljovns7vmlbDmr5QyMTvlpI3lkIjljYrlvoQyMSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOWCqOWxguS4ieWMuuW+hOWQkeWkjeWQiCIgICAgU2VyaWVzPSJYQSIgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY076KGo55qu5Zug5a2QO+awtOW5s+S6leWNiumVvzvmtYHluqbmr5QyMTvlr7zljovns7vmlbDmr5QyMTvlpI3lkIjljYrlvoQyMTvmtYHluqbmr5QzMTvlr7zljovns7vmlbDmr5QzMTvlpI3lkIjljYrlvoQzMiIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOWCqOWxguWbm+WMuuW+hOWQkeWkjeWQiCIgIFNlcmllcz0iWEEiICAgIE91dHB1dHM9IuW+hOWQkea4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc75Z6C5ZCR5LqV5L2NO+ihqOearuWboOWtkDvmsLTlubPkupXljYrplb875rWB5bqm5q+UMjE75a+85Y6L57O75pWw5q+UMjE75aSN5ZCI5Y2K5b6EMjE75rWB5bqm5q+UMzE75a+85Y6L57O75pWw5q+UMzE75aSN5ZCI5Y2K5b6EMzI75rWB5bqm5q+UNDE75a+85Y6L57O75pWw5q+UNDE75aSN5ZCI5Y2K5b6ENDMiLz4NCg0KDQogICAgICAgIDwvV0VMTW9kZWw+DQogICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIEFsaWFzPSLmsLTlubPkupXngrnmupDmqKHlnosiIFNlcmllcz0iSFciPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOayueiXjyIgT3V0cHV0cz0i6KGo55qu57O75pWwO+WeguWQkeS6leS9jSIvPg0KICAgICAgICA8L1dFTE1vZGVsPg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBJRD0iMjAyIiBBbGlhcz0i5rC05bmz5LqV5Lik5q615Lqn5rayIiBTZXJpZXM9IkhXIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48iIE91dHB1dHM9IuihqOearuezu+aVsDvkuqfmtrLmrrXmlbA75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBJRD0iMTAyIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ4oCU4oCU5ouf56iz5oCBIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75Lqn5ray5q615pWwO+eqnOa1geezu+aVsDvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5riX6YCPIiBPdXRwdXRzPSLlsYLkuIDooajnmq7ns7vmlbA75bGC5LqM6KGo55qu57O75pWwO+S6p+a2suauteaVsDvnqpzmtYHns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UO+WeguWQkeS6leS9jSIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOWMuuWkjeWQiCIgT3V0cHV0cz0i6KGo55qu57O75pWwO+S6p+a2suauteaVsDvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5Q75aSN5ZCI5Y2K5b6EO+WeguWQkeS6leS9jSIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuS4ieWMuuWkjeWQiCIgT3V0cHV0cz0i6KGo55qu57O75pWwO+S6p+a2suauteaVsDvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5QxO+WCqOWuueavlDI75LiA5Yy65Y2K5b6EO+S6jOWMuuWNiuW+hDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgPC9XRUxNb2RlbD4NCiAgICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIElEPSIyMDMiIEFsaWFzPSLmsLTlubPkupXkuKTmrrXkuqfmtrIo5bqV5rC0KSIgU2VyaWVzPSJIVyI+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5rK56JePIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75Lqn5ray5q615pWwO+W6leawtOezu+aVsCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgSUQ9IjEwMiIgQWxpYXM9IuWPjOmHjeWtlOmameKAlOKAlOaLn+eos+aAgSIgT3V0cHV0cz0i6KGo55qu57O75pWwO+S6p+a2suauteaVsDvnqpzmtYHns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5riX6YCPIiBPdXRwdXRzPSLlsYLkuIDooajnmq7ns7vmlbA75bGC5LqM6KGo55qu57O75pWwO+S6p+a2suauteaVsDvnqpzmtYHns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75Lqn5ray5q615pWwO+a1geW6puavlDIxO+a1geW6puavlDMxO+WCqOWuueavlDvlpI3lkIjljYrlvoQiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLkuInljLrlpI3lkIgiIE91dHB1dHM9IuihqOearuezu+aVsDvkuqfmtrLmrrXmlbA75rWB5bqm5q+UMjE75rWB5bqm5q+UMzE75YKo5a655q+UMTvlgqjlrrnmr5QyO+S4gOWMuuWNiuW+hDvkuozljLrljYrlvoQiLz4NCiAgICAgICAgPC9XRUxNb2RlbD4NCiAgICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIElEPSIyMDQiIEFsaWFzPSLmsLTlubPkupXkuInmrrXkuqfmtrIiIFNlcmllcz0iSFciPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOayueiXjyIgT3V0cHV0cz0i6KGo55qu57O75pWwO+S6p+a2suauteaVsDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIxMDIiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTmi5/nqLPmgIEiIE91dHB1dHM9IuihqOearuezu+aVsDvkuqfmtrLmrrXmlbA756qc5rWB57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zph43muJfpgI8iIE91dHB1dHM9IuWxguS4gOihqOearuezu+aVsDvlsYLkuozooajnmq7ns7vmlbA75Lqn5ray5q615pWwO+eqnOa1geezu+aVsDvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75Lqn5ray5q615pWwO+a1geW6puavlDIxO+a1geW6puavlDMxO+WCqOWuueavlDvlpI3lkIjljYrlvoQ75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5LiJ5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75Lqn5ray5q615pWwO+a1geW6puavlDIxO+a1geW6puavlDMxO+WCqOWuueavlDE75YKo5a655q+UMjvkuIDljLrljYrlvoQ75LqM5Yy65Y2K5b6EO+WeguWQkeS6leS9jSIvPg0KICAgICAgICA8L1dFTE1vZGVsPg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBJRD0iMjA1IiBBbGlhcz0i5rC05bmz5LqV5LiJ5q615Lqn5rayKOW6leawtCkiIFNlcmllcz0iSFciPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOayueiXjyIgT3V0cHV0cz0i6KGo55qu57O75pWwO+S6p+a2suauteaVsDvlupXmsLTns7vmlbAiLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIElEPSIxMDIiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTmi5/nqLPmgIEiIE91dHB1dHM9IuihqOearuezu+aVsDvkuqfmtrLmrrXmlbA756qc5rWB57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOmHjea4l+mAjyIgT3V0cHV0cz0i5bGC5LiA6KGo55qu57O75pWwO+WxguS6jOihqOearuezu+aVsDvkuqfmtrLmrrXmlbA756qc5rWB57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlCIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWPjOWMuuWkjeWQiCIgT3V0cHV0cz0i6KGo55qu57O75pWwO+S6p+a2suauteaVsDvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5Q75aSN5ZCI5Y2K5b6EIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5LiJ5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75Lqn5ray5q615pWwO+a1geW6puavlDIxO+a1geW6puavlDMxO+WCqOWuueavlDE75YKo5a655q+UMjvkuIDljLrljYrlvoQ75LqM5Yy65Y2K5b6EIi8+DQogICAgICAgIDwvV0VMTW9kZWw+DQogICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIEFsaWFzPSLlpJrnuqfljovoo4LmsLTlubPkupUiIFNlcmllcz0iSFciPg0KICAgICAgICAgICAgPFJFU01vZGVsIElucHV0cz0i5Y6L6KOC5q615pWwIiBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48iIE91dHB1dHM9IuihqOearuezu+aVsDvoo4LnvJ3ljYrplb876KOC57yd5a+85rWB6IO95YqbO+ijgue8neWuveW6pjvljovoo4LmrrXmlbA75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgSW5wdXRzPSLljovoo4LmrrXmlbAiIE5hbWU9IiIgSUQ9IjEwMiIgQWxpYXM9IuWPjOmHjeWtlOmameKAlOKAlOaLn+eos+aAgSIgT3V0cHV0cz0i6KGo55qu57O75pWwO+ijgue8neWNiumVvzvoo4LnvJ3lr7zmtYHog73lips756qc5rWB57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBJbnB1dHM9IuWOi+ijguauteaVsCIgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5riX6YCPIiBPdXRwdXRzPSLlsYLkuIDooajnmq7ns7vmlbA75bGC5LqM6KGo55qu57O75pWwO+ijgue8neWNiumVvzvoo4LnvJ3lr7zmtYHog73lips756qc5rWB57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBJbnB1dHM9IuWOi+ijguauteaVsCIgTmFtZT0iIiBBbGlhcz0i5Y+M5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA76KOC57yd5Y2K6ZW/O+ijgue8neWvvOa1geiDveWKmzvmtYHluqbmr5QyMTvmtYHluqbmr5QzMTvlgqjlrrnmr5Q75aSN5ZCI5Y2K5b6EO+WeguWQkeS6leS9jSIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIElucHV0cz0i5Y6L6KOC5q615pWwIiBOYW1lPSIiIEFsaWFzPSLkuInljLrlpI3lkIgiIE91dHB1dHM9IuihqOearuezu+aVsDvoo4LnvJ3ljYrplb876KOC57yd5a+85rWB6IO95YqbO+a1geW6puavlDIxO+a1geW6puavlDMxO+WCqOWuueavlDE75YKo5a655q+UMjvkuIDljLrljYrlvoQ75LqM5Yy65Y2K5b6EO+WeguWQkeS6leS9jSIvPg0KICAgICAgICA8L1dFTE1vZGVsPg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i5aSa57qn5Y6L6KOC5rC05bmz5LqV5YiG5q615Lqn5rayIiBTZXJpZXM9IkhXIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBJbnB1dHM9IuWOi+ijguauteaVsCIgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5rK56JePIiBPdXRwdXRzPSLooajnmq7ns7vmlbA75Y6L6KOC5q615pWwO+ijgue8neWNiumVvzvoo4LnvJ3lr7zmtYHog73lips76KOC57yd5a695bqmO+WeguWQkeS6leS9jSIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIElucHV0cz0i5Y6L6KOC5q615pWwIiBOYW1lPSIiIElEPSIxMDIiIEFsaWFzPSLlj4zph43lrZTpmpnigJTigJTmi5/nqLPmgIEiIE91dHB1dHM9IuihqOearuezu+aVsDvkuqfmtrLmrrXmlbA76KOC57yd5Y2K6ZW/O+ijgue8neWvvOa1geiDveWKmzvnqpzmtYHns7vmlbA76KOC57yd5by55oCn5YKo5a655q+UO+WeguWQkeS6leS9jSIvPg0KICAgICAgICAgICAgPFJFU01vZGVsIElucHV0cz0i5Y6L6KOC5q615pWwIiBOYW1lPSIiIEFsaWFzPSLlj4zph43muJfpgI8iIE91dHB1dHM9IuWxguS4gOihqOearuezu+aVsDvlsYLkuozooajnmq7ns7vmlbA76KOC57yd5Y2K6ZW/O+S6p+a2suauteaVsDvoo4LnvJ3lr7zmtYHog73lips756qc5rWB57O75pWwO+ijgue8neW8ueaAp+WCqOWuueavlDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBJbnB1dHM9IuWOi+ijguauteaVsCIgTmFtZT0iIiBBbGlhcz0i5Y+M5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA76KOC57yd5Y2K6ZW/O+S6p+a2suauteaVsDvoo4LnvJ3lr7zmtYHog73lips75rWB5bqm5q+UMjE75rWB5bqm5q+UMzE75YKo5a655q+UO+WkjeWQiOWNiuW+hDvlnoLlkJHkupXkvY0iLz4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBJbnB1dHM9IuWOi+ijguauteaVsCIgTmFtZT0iIiBBbGlhcz0i5LiJ5Yy65aSN5ZCIIiBPdXRwdXRzPSLooajnmq7ns7vmlbA76KOC57yd5Y2K6ZW/O+S6p+a2suauteaVsDvoo4LnvJ3lr7zmtYHog73lips75rWB5bqm5q+UMjE75rWB5bqm5q+UMzE75YKo5a655q+UMTvlgqjlrrnmr5QyO+S4gOWMuuWNiuW+hDvkuozljLrljYrlvoQ75Z6C5ZCR5LqV5L2NIi8+DQogICAgICAgPC9XRUxNb2RlbD4NCg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i5pac5LqVIiBTZXJpZXM9IlNSIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjmsrnol48iIElucHV0cz0i5pac5LqV6ZW/5bqmIiBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwO+WCqOWxguWOmuW6pjvmlpzkupXplb/luqY75LqV5pac6KeS5bqmIi8+DQogICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBJRD0iMTAyIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ4oCU4oCU5ouf56iz5oCBIiBJbnB1dHM9IuaWnOS6lemVv+W6piIgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuezu+aVsDvoo4LnvJ3lvLnmgKflgqjlrrnmr5Q756qc5rWB57O75pWwO+WCqOWxguWOmuW6pjvlnoLlkJHkupXkvY075pac5LqV6ZW/5bqmO+S6leaWnOinkuW6piIvPg0KDQogICAgICAgIDwvV0VMTW9kZWw+DQoNCiAgICAgICAgPFdFTE1vZGVsIE5hbWU9IiIgQWxpYXM9IuWeguebtOijgue8neS6lSh3eGQpIiBTZXJpZXM9IlhEIj4NCiAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnoLnm7Too4LnvJ3nur/mupDop6Mod3hkKSIgT3V0cHV0cz0i5riX6YCP546HO+ijgue8neWvvOa1geiDveWKmzvoo4LnvJ3ljYrplb875LqV5L2N572ueDvkupXkvY3nva55O+WcsOWxgumVv+W6pjvlnLDlsYLlrr3luqYiLz4NCiAgICAgICAgPC9XRUxNb2RlbD4NCg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i5pmu6YCa55u05LqVKHd4ZCkiIFNlcmllcz0iWEQiPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOayueiXjyh3eGQpIiBPdXRwdXRzPSLmuJfpgI/njoc757uE5ZCI5Y+C5pWwQ0RlMlMiLz4NCiAgICAgICAgPC9XRUxNb2RlbD4NCg0KICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i55u05LqVW+ilv+Wuiea1i+ivlV0iIFNlcmllcz0iWEEiPg0KICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOayueiXj1vopb/lronmtYvor5VdIiBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu57O75pWwIi8+DQoNCiAgICAgICAgPC9XRUxNb2RlbD4NCg0KDQoNCiAgICAgICAgPFdFTE1vZGVsIE5hbWU9IiIgQWxpYXM9IuWOi+ijguebtOS6lSjlnYfljIDmtYHph48pIiBTZXJpZXM9IlhBIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYIiICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuWboOWtkDvoo4LnvJ3ljYrplb8iLz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYLkuozljLrlvoTlkJHlpI3lkIgiICAgICAgICAgICAgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuWboOWtkDvoo4LnvJ3ljYrplb875rWB5bqm5q+UMjE75a+85Y6L57O75pWw5q+UMjE75aSN5ZCI5Y2K5b6EMjEiLz4NCiAgICAgICAgICAgICAgICA8L1dFTE1vZGVsPg0KDQogICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIEFsaWFzPSLljovoo4Lnm7TkupUo5peg6ZmQ5a+85rWBKSIgU2VyaWVzPSJYQSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGCIiAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7lm6DlrZA76KOC57yd5Y2K6ZW/Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LqM5Yy65b6E5ZCR5aSN5ZCIIiAgICAgICAgICAgIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7lm6DlrZA76KOC57yd5Y2K6ZW/O+a1geW6puavlDIxO+WvvOWOi+ezu+aVsOavlDIxO+WkjeWQiOWNiuW+hDIxIi8+DQogICAgICAgICAgICAgICAgPC9XRUxNb2RlbD4NCg0KICAgICAgICAgICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIEFsaWFzPSLljovoo4Lnm7TkupUo5pyJ6ZmQ5a+85rWBKSIgU2VyaWVzPSJYQSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGCIiAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7lm6DlrZA76KOC57yd5Y2K6ZW/O+ijgue8neWvvOa1geiDveWKmyIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOWCqOWxguS6jOWMuuW+hOWQkeWkjeWQiCIgICAgICAgICAgICBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu5Zug5a2QO+ijgue8neWvvOa1geiDveWKmzvoo4LnvJ3ljYrplb875rWB5bqm5q+UMjE75a+85Y6L57O75pWw5q+UMjE75aSN5ZCI5Y2K5b6EMjEiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYLkuozljLrnur/mgKflpI3lkIgoU1JWKSIgICAgICAgT3V0cHV0cz0i5riX6YCP546HO+ihqOearuWboOWtkDvoo4LnvJ3ljYrplb876KOC57yd5a+85rWB6IO95YqbIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LiJ5Yy657q/5oCn5aSN5ZCIKOS4iee6v+aAp+a1gSkiICBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu5Zug5a2QO+ijgue8neWNiumVvzvoo4LnvJ3lr7zmtYHog73lipsiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYLkupTljLrnur/mgKflpI3lkIgo5LqU57q/5oCn5rWBKSIgIE91dHB1dHM9Iua4l+mAj+eOhzvooajnmq7lm6DlrZA76KOC57yd5Y2K6ZW/O+ijgue8neWvvOa1geiDveWKmzvlpI3lkIjljYrlvoQyMSIvPg0KICAgICAgICAgICAgICAgIDwvV0VMTW9kZWw+DQoNCiAgICAgICAgICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i6YOo5YiG5bCE5byA55u05LqVIiBTZXJpZXM9IlhBIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYIiICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRzPSLmuJfpgI/njoc76KGo55qu5Zug5a2QIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOaLn+eos+aAgSkiICAgICAgICAgICBPdXRwdXRzPSLlvoTlkJHmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+WeguWQkeS6leS9jTvlsITlrZTpq5jluqY76KGo55qu5Zug5a2QO+WCqOWuueavlDvnqpzmtYHns7vmlbAiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlj4zph43lrZTpmpnlgqjlsYIo5p2/54q26Z2e56iz5oCBKSIgICAgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY075bCE5a2U6auY5bqmO+ihqOearuWboOWtkDvlgqjlrrnmr5Q756qc5rWB57O75pWwIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Y+M6YeN5a2U6ZqZ5YKo5bGCKOeQg+eKtumdnueos+aAgSkiICAgICAgIE91dHB1dHM9IuW+hOWQkea4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc75Z6C5ZCR5LqV5L2NO+WwhOWtlOmrmOW6pjvooajnmq7lm6DlrZA75YKo5a655q+UO+eqnOa1geezu+aVsCIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOWCqOWxguS6jOWMuuW+hOWQkeWkjeWQiCIgICAgICAgICAgIE91dHB1dHM9IuW+hOWQkea4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc75Z6C5ZCR5LqV5L2NO+WwhOWtlOmrmOW6pjvooajnmq7lm6DlrZA75rWB5bqm5q+UMjE75a+85Y6L57O75pWw5q+UMjE75aSN5ZCI5Y2K5b6EMjEiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYLkuInljLrlvoTlkJHlpI3lkIgiICAgICAgICAgICBPdXRwdXRzPSLlvoTlkJHmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+WeguWQkeS6leS9jTvlsITlrZTpq5jluqY76KGo55qu5Zug5a2QO+a1geW6puavlDIxO+WvvOWOi+ezu+aVsOavlDIxO+WkjeWQiOWNiuW+hDIxO+a1geW6puavlDMxO+WvvOWOi+ezu+aVsOavlDMxO+WkjeWQiOWNiuW+hDMyIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5Zub5Yy65b6E5ZCR5aSN5ZCIIiAgICAgICAgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY075bCE5a2U6auY5bqmO+ihqOearuWboOWtkDvmtYHluqbmr5QyMTvlr7zljovns7vmlbDmr5QyMTvlpI3lkIjljYrlvoQyMTvmtYHluqbmr5QzMTvlr7zljovns7vmlbDmr5QzMTvlpI3lkIjljYrlvoQzMjvmtYHluqbmr5Q0MTvlr7zljovns7vmlbDmr5Q0MTvlpI3lkIjljYrlvoQ0MyIvPg0KICAgICAgICAgICAgICAgIDwvV0VMTW9kZWw+DQoNCiAgICAgICAgICAgICAgICA8V0VMTW9kZWwgTmFtZT0iIiBBbGlhcz0i6YOo5YiG5bCE5byA5Y6L6KOC55u05LqVKOWdh+WMgOa1gemHjykiIFNlcmllcz0iWEEiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOWCqOWxgiIgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHM9IuW+hOWQkea4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc75Z6C5ZCR5LqV5L2NO+WwhOWtlOmrmOW6pjvooajnmq7lm6DlrZA76KOC57yd5Y2K6ZW/Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LqM5Yy65b6E5ZCR5aSN5ZCIIiAgICAgICAgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY075bCE5a2U6auY5bqmO+ihqOearuWboOWtkDvoo4LnvJ3ljYrplb875rWB5bqm5q+UMjE75a+85Y6L57O75pWw5q+UMjE75aSN5ZCI5Y2K5b6EMjEiLz4NCiAgICAgICAgICAgICAgICA8L1dFTE1vZGVsPg0KDQogICAgICAgICAgICAgICAgPFdFTE1vZGVsIE5hbWU9IiIgQWxpYXM9IumDqOWIhuWwhOW8gOWOi+ijguebtOS6lSjml6DpmZDlr7zmtYEpIiBTZXJpZXM9IlhBIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxSRVNNb2RlbCBOYW1lPSIiIEFsaWFzPSLlnYfotKjlgqjlsYIiICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRzPSLlvoTlkJHmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+WeguWQkeS6leS9jTvlsITlrZTpq5jluqY76KGo55qu5Zug5a2QO+ijgue8neWNiumVvyIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOWCqOWxguS6jOWMuuW+hOWQkeWkjeWQiCIgICAgICAgICAgIE91dHB1dHM9IuW+hOWQkea4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc75Z6C5ZCR5LqV5L2NO+WwhOWtlOmrmOW6pjvooajnmq7lm6DlrZA76KOC57yd5Y2K6ZW/O+a1geW6puavlDIxO+WvvOWOi+ezu+aVsOavlDIxO+WkjeWQiOWNiuW+hDIxIi8+DQogICAgICAgICAgICAgICAgPC9XRUxNb2RlbD4NCg0KICAgICAgICAgICAgICAgIDxXRUxNb2RlbCBOYW1lPSIiIEFsaWFzPSLpg6jliIblsITlvIDljovoo4Lnm7TkupUo5pyJ6ZmQ5a+85rWBKSIgU2VyaWVzPSJYQSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGCIiAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY075bCE5a2U6auY5bqmO+ihqOearuWboOWtkDvoo4LnvJ3ljYrplb876KOC57yd5a+85rWB6IO95YqbIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LqM5Yy65b6E5ZCR5aSN5ZCIIiAgICAgICAgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY075bCE5a2U6auY5bqmO+ihqOearuWboOWtkDvoo4LnvJ3lr7zmtYHog73lips76KOC57yd5Y2K6ZW/O+a1geW6puavlDIxO+WvvOWOi+ezu+aVsOavlDIxO+WkjeWQiOWNiuW+hDIxIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LqM5Yy657q/5oCn5aSN5ZCIKFNSVikiICAgICAgT3V0cHV0cz0i5b6E5ZCR5riX6YCP546HO+WeguWQkea4l+mAj+eOhzvlnoLlkJHkupXkvY075bCE5a2U6auY5bqmO+ihqOearuWboOWtkDvoo4LnvJ3ljYrplb876KOC57yd5a+85rWB6IO95YqbIi8+DQogICAgICAgICAgICAgICAgICAgICAgICA8UkVTTW9kZWwgTmFtZT0iIiBBbGlhcz0i5Z2H6LSo5YKo5bGC5LiJ5Yy657q/5oCn5aSN5ZCIKOS4iee6v+aAp+a1gSkiIE91dHB1dHM9IuW+hOWQkea4l+mAj+eOhzvlnoLlkJHmuJfpgI/njoc75Z6C5ZCR5LqV5L2NO+WwhOWtlOmrmOW6pjvooajnmq7lm6DlrZA76KOC57yd5Y2K6ZW/O+ijgue8neWvvOa1geiDveWKmyIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFJFU01vZGVsIE5hbWU9IiIgQWxpYXM9IuWdh+i0qOWCqOWxguS6lOWMuue6v+aAp+WkjeWQiCjkupTnur/mgKfmtYEpIiBPdXRwdXRzPSLlvoTlkJHmuJfpgI/njoc75Z6C5ZCR5riX6YCP546HO+WeguWQkeS6leS9jTvlsITlrZTpq5jluqY76KGo55qu5Zug5a2QO+ijgue8neWNiumVvzvoo4LnvJ3lr7zmtYHog73lips75aSN5ZCI5Y2K5b6EMjEiLz4NCiAgICAgICAgICAgICAgICA8L1dFTE1vZGVsPg0KDQoNCiAgICA8L01vZGVsSW9EZXNjcz4NCg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/ModelFunWxdDefines.dat b/Bin/Config/Common/ModelFunWxdDefines.dat new file mode 100644 index 0000000..4ef465a --- /dev/null +++ b/Bin/Config/Common/ModelFunWxdDefines.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KPCEtLSAgICDmnKzmlofmoaPnmoTnm67nmoTmmK/phY3nva7njovmmZPkuJzmlZnmjojmj5DkvpvnmoTop6PmnpDnrpfms5XmjqXlj6MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNDA1MTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KPCEtLSBGdW5jdGlvbiDlh73mlbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE5hbWXvvJogIOWHveaVsOWQjeensO+8jOS7o+eggeS4reWQjeensO+8jOWHveaVsOWFpeWPo+WHveaVsCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77yaIOWIq+WQje+8jOmAmuW4uOWvueW6lOWHveaVsOWQjeensOeahOebuOWFs+ivtOaYjiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgT3V0cHV0c++8miAg6L6T5Ye66YeP77yM6Ieq5Y+Y6YePICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIHNSZW1hcmvvvJogIOWHveaVsOaOpeWPo+ivtOaYjuS/oeaBryAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCg0KPCEtLSBQYXJhIOi+k+WFpeWPguaVsCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTmFtZSAg6Iux5paH5o+P6L+w77yM5LiN5LiA5a6a6Z2e5b6X5LiO5Ye95pWw5Luj56CB5Lit5Y+C5pWw5Y+Y6YeP5LiA6Ie0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77ya5Lit5paH5Y+C5pWw5ZCN77yM6Z2e5bi46YeN6KaB77yM5L2G5aaC5p6c6YWN572u5LiO5LqM5qyh6Kej6YeK6KGo5Lit5a2X5q615LiA5qC377yM5bCG5Lya6Ieq5Yqo5Z2H5YC85Y+W5YC8ICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFVuaXTvvJrljZXkvY0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgVmFsdWU65o6o6I2Q5YC877yMb3Lpu5jorqTlgLzvvIzlpoLmnpzkuozmrKHop6Pph4rmnInvvIzliJnoh6rliqjku47kuozmrKHop6Pph4rlj5YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTWF477ya5pyA5aSn5YC8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE1pbu+8muacgOWwj+WAvCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KDQo8Um9vdD4NCjxGdW5jdGlvbiBJRD0id3hkODkwMCIgTmFtZT0iRlB3RDg5MCIgQWxpYXM9IuefqeW9ouWwgemXreWcsOWxguaciemZkOWvvOa1geWeguebtOijgue8nee6v+a6kOinoyIgT2JqZWN0PSLpgILnlKjojIPlm7QiDQogICAgICAgICAgICBPdXRwdXQ9IlB3ZCINCiAgICAgICAgICAgIElucHV0cz0i5a+85rWB57O75pWwO+S6leS9jee9rng75LqV5L2N572ueTvlnLDlsYLplb/luqY75Zyw5bGC5a695bqmIj4NCg0KPC9GdW5jdGlvbj4NCg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/ModelParaDefinesLP.dat b/Bin/Config/Common/ModelParaDefinesLP.dat new file mode 100644 index 0000000..52e1cbd --- /dev/null +++ b/Bin/Config/Common/ModelParaDefinesLP.dat @@ -0,0 +1 @@ +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxQYXJhR3wzyJvdXAgTmFtZT0iIiBBbGlhcz0i5LqV5YKo5Y+C5pWwIj4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkMiIEFsaWFzPSLkupXnrZLlgqjpm4bns7vmlbAiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAuMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBmYWN0b3IiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkNpZFJhdGlvIiBBbGlhcz0i5Yid5pyr5LqV562S5YKo6ZuG57O75pWw5q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC40IiBNYXg9IjEwMDAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9IlJhdGlvIG9mIGluaXRpYWwgYW5kIGZpbmFsIHdlbGxib3JlIHN0b3JhZ2UiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImFscGhhIiBBbGlhcz0i5Y+Y5YKo5pe26Ze0IiBVbml0PSJociIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iY2hhbmdpbmcgd2VsbGJvcmUgc3RvcmFnZSB0aW1lIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJDYSIgQWxpYXM9IuinhuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMC4xIiBNYXg9IjEwMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iYXBwYXJlbnQgd2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIvPg0KICAgIDwvUGFyYUdyb3VwPg0KDQoNCiAgICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWfuuehgOWPguaVsCI+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InJ3IiBBbGlhcz0i5LqV5Y2K5b6EIiBVbml0PSJtIiBEZWZhdWx0PSIwLjEwOCIgTWF4PSIxIiBNaW49IjAuMDEiIERpZ2l0PSI1IiBEZXNjPSJ3ZWxsIHJhZGl1cyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0id2VsbERpcyIgQWxpYXM9IuS6lemXtOi3neemuyIgVW5pdD0ibSIgRGVmYXVsdD0iMTAzNCIgTWF4PSIxMDAwMCIgTWluPSIwIiBEaWdpdD0iMyIgRGVzYz0id2VsbCBpbnRlciBkaXN0YW5jZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0id2VsbEFuZ2xlIiBBbGlhcz0i5LqV6Ze05YC+6KeSIiBVbml0PSLCsCIgRGVmYXVsdD0iMCIgTWF4PSIzNjAiIE1pbj0iMCIgRGlnaXQ9IjMiIERlc2M9IndlbGwgaW50ZXIgYW5nbGUiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkwiIEFsaWFzPSLmsLTlubPkupXplb/luqYiIFVuaXQ9Im0iIERlZmF1bHQ9IjYwMCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9Imhvcml6b250YWwgd2VsbCBsZW5ndGgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ikx3IiBBbGlhcz0i5pac5LqV6ZW/5bqmIiBVbml0PSJtIiBEZWZhdWx0PSIyOC44IiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0id2VsbCBsZW5ndGgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkRldiIgQWxpYXM9IuS6leaWnOinkuW6piIgVW5pdD0iwrAiIERlZmF1bHQ9IjgwIiBNYXg9IjE4MCIgTWluPSIwIiBEaWdpdD0iMyIgRGVzYz0iV2VsbCBPcmllbnRhdGlvbiBBbmdsZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUG9zWCIgQWxpYXM9IuWdkOagh1giIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIERpZ2l0PSIzIiBEZXNjPSJXZWxsIFBvcyBYIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJQb3NZIiBBbGlhcz0i5Z2Q5qCHWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgRGlnaXQ9IjMiIERlc2M9IldlbGwgUG9zIFkiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iaCIgQWxpYXM9IuWCqOWxguWOmuW6piIgVW5pdD0ibSIgRGVmYXVsdD0iMTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJwYXkgem9uZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iSDFEUEUiIEFsaWFzPSLlsYLkuIDlgqjlsYLljprluqYiIFVuaXQ9Im0iIERlZmF1bHQ9IjEwIiBNYXg9IjEwMDAwMDAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIxc3QgcGF5IHpvbmUgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkgyRFBFIiBBbGlhcz0i5bGC5LqM5YKo5bGC5Y6a5bqmIiBVbml0PSJtIiBEZWZhdWx0PSIxMCIgTWF4PSIxMDAwMDAwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iMm5kIHBheSB6b25lIG9mIGR1YWwgcGVybWVhYmlsaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJIMU1QIiBBbGlhcz0i5YKo5bGC5Y6a5bqmMSIgVW5pdD0ibSIgRGVmYXVsdD0iMTAiIE1heD0iMTAwMDAwMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9IjFzdCBwYXkgem9uZSBvZiBkdWFsIHBlcm1lYWJpbGl0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iSDJNUCIgQWxpYXM9IuWCqOWxguWOmuW6pjIiIFVuaXQ9Im0iIERlZmF1bHQ9IjEwIiBNYXg9IjEwMDAwMDAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIybmQgcGF5IHpvbmUgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImgxIiBBbGlhcz0i5bGC5LiA5Y6a5bqmIiBVbml0PSJtIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iMXN0IHBheSB6b25lIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJoMiIgQWxpYXM9IuWxguS6jOWOmuW6piIgVW5pdD0ibSIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9IjJuZCBwYXkgem9uZSIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSLlrZTpmpnluqYiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIxZS0wNSIgRGlnaXQ9IjQiIERlc2M9InBvcm9zaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkxTVAiIEFsaWFzPSLlrZTpmpnluqYxIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4xIiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBEZXNjPSIxc3QgcG9yb3NpdHkgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InBoaTJNUCIgQWxpYXM9IuWtlOmameW6pjIiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIxZS0wNSIgRGlnaXQ9IjQiIERlc2M9IjJuZCBwb3Jvc2l0eSBvZiBkdWFsIHBlcm1lYWJpbGl0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icGhpZiIgQWxpYXM9IuWOi+ijgue8neWtlOmameW6piIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMSIgTWF4PSIxIiBNaW49IjFlLTA1IiBEaWdpdD0iNCIgVXNlTW9kZT0iNSIgRGVzYz0icG9yb3NpdHkgb2YgZnJhY3Rpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InBoaTJEIiBBbGlhcz0i6KOC57yd5a2U6ZqZ5bqmIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4xIiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBVc2VNb2RlPSI1IiBEZXNjPSJwb3Jvc2l0eSBvZiBuYXR1cmUgZnJhY3Rpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InBoaTFEIiBBbGlhcz0i5Z+66LSo5a2U6ZqZ5bqmIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4xIiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBVc2VNb2RlPSI1IiBEZXNjPSJwb3Jvc2l0eSBvZiBzdHJvbWEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InBoaTEiIEFsaWFzPSLlhoXljLrlrZTpmpnluqYiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIxZS0wNSIgRGlnaXQ9IjQiIFVzZU1vZGU9IjUiIERlc2M9IklubmVyIHBvcm9zaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkyIiBBbGlhcz0i5aSW5Yy65a2U6ZqZ5bqmIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4xIiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBVc2VNb2RlPSI1IiBEZXNjPSJPdXRlciBwb3Jvc2l0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icGhpMURQRSIgQWxpYXM9IuWxguS4gOWtlOmameW6piIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMSIgTWF4PSIxIiBNaW49IjFlLTA1IiBEaWdpdD0iNCIgVXNlTW9kZT0iNSIgRGVzYz0iMXN0IHBvcm9zaXR5IG9mIGR1YWwgcGVybWVhYmlsaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkyRFBFIiBBbGlhcz0i5bGC5LqM5a2U6ZqZ5bqmIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4xIiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBVc2VNb2RlPSI1IiBEZXNjPSIybmQgcG9yb3NpdHkgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImZhaTExIiBBbGlhcz0i5bGC5LiAMeWMuuWtlOmameW6piIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMjUiIE1heD0iMSIgTWluPSIxZS0wNSIgRGlnaXQ9IjQiIERlc2M9IjFzdCBwZXJtZWFiaWxpdHkgb2YgaW5uZXIgcmVnaW9uIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJmYWkxMiIgQWxpYXM9IuWxguS4gDLljLrlrZTpmpnluqYiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjI1IiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBEZXNjPSIxc3QgcGVybWVhYmlsaXR5IG9mIG91dGVyIHJlZ2lvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iZmFpMjEiIEFsaWFzPSLlsYLkuowx5Yy65a2U6ZqZ5bqmIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4yNSIgTWF4PSIxIiBNaW49IjFlLTA1IiBEaWdpdD0iNCIgRGVzYz0iMm5kIHBlcm1lYWJpbGl0eSBvZiBpbm5lciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImZhaTIyIiBBbGlhcz0i5bGC5LqMMuWMuuWtlOmameW6piIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMjUiIE1heD0iMSIgTWluPSIxZS0wNSIgRGlnaXQ9IjQiIERlc2M9IjJuZCBwZXJtZWFiaWxpdHkgb2Ygb3V0ZXIgcmVnaW9uIi8+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkIiIEFsaWFzPSLkvZPnp6/ns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIxIiBNYXg9IjEwIiBNaW49IjAuMDAwMSIgRGlnaXQ9IjQiIERlc2M9ImZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIi8+ICAgICAgICANCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkJvIiBBbGlhcz0i5rK55L2T56ev57O75pWwIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMSIgTWF4PSIxMCIgTWluPSIwLjAwMDEiIERpZ2l0PSI0IiBEZXNjPSJmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQmciIEFsaWFzPSLmsJTkvZPnp6/ns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIxIiBNYXg9IjEwIiBNaW49IjAuMDAwMSIgRGlnaXQ9IjQiIERlc2M9ImZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJCdyIgQWxpYXM9IuawtOS9k+enr+ezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjEiIE1heD0iMTAiIE1pbj0iMC4wMDAxIiBEaWdpdD0iNCIgRGVzYz0iZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiLz4NCiAgICAgIA0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1IiBBbGlhcz0i6buP5bqmKM68KSIgVW5pdD0ibVBhwrdzIiBEZWZhdWx0PSIxIiBNYXg9IjE1MCIgTWluPSIwLjAwMDEiIERpZ2l0PSI0IiBEZXNjPSJ2aXNjb3NpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiIFVuaXQ9Im1QYcK3cyIgRGVmYXVsdD0iMSIgTWF4PSIxNTAiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBEZXNjPSJvaWwgdmlzY29zaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJNaXVvMSIgQWxpYXM9IuWGheWMuuayueebuOm7j+W6piIgVW5pdD0ibVBhwrdzIiBEZWZhdWx0PSIxIiBNYXg9IjUwIiBNaW49IjFlLTA1IiBEaWdpdD0iNCIgRGVzYz0ib2lsIHZpc2Nvc2l0eSBvZiBDb21wbGV4IElubmVyIHpvbmUiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8yIiBBbGlhcz0i5aSW5Yy65rWB5L2T6buP5bqmIiBVbml0PSJtUGHCt3MiIERlZmF1bHQ9IjEiIE1heD0iNTAiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBEZXNjPSJvaWwgdmlzY29zaXR5IG9mIENvbXBsZXggb3V0ZXIgem9uZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1ZyIgQWxpYXM9IuawlOm7j+W6piIgVW5pdD0ibVBhwrdzIiBEZWZhdWx0PSIxIiBNYXg9IjIiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBEZXNjPSJnYXMgdmlzY29zaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJNaXV3IiBBbGlhcz0i5rC055u46buP5bqmIiBVbml0PSJtUGHCt3MiIERlZmF1bHQ9IjEiIE1heD0iMiIgTWluPSIxZS0wNSIgRGlnaXQ9IjQiIERlc2M9IndhdGVyIHZpc2Nvc2l0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1eCIgQWxpYXM9Iua3t+WQiOm7j+W6piIgVW5pdD0ibVBhwrdzIiBEZWZhdWx0PSIyLjQiIE1heD0iNTAiIE1pbj0iMWUtMDUiIERpZ2l0PSI0IiBVc2VNb2RlPSI1IiBEZXNjPSJNaXggdmlzY29zaXR5Ii8+DQogICAgICANCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkN0IiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDA0MyIgTWF4PSIxMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkgIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJDdGZGIiBBbGlhcz0i5Y6L6KOC57yd57u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDA0MyIgTWF4PSIxMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBVc2VNb2RlPSI1IiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkgb2YgZnJhY3Rpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkN0ZiIgQWxpYXM9Iuijgue8nee7vOWQiOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwNDMiIE1heD0iMTAiIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgVXNlTW9kZT0iNSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IG9mIG5hdHVyZSBmcmFjdGlvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQ3RtIiBBbGlhcz0i5Z+66LSo57u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDA0MyIgTWF4PSIxMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBVc2VNb2RlPSI1IiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkgb2Ygc3Ryb21hICIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQ3QxRFBFIiBBbGlhcz0i5bGC5LiA57u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDA0MyIgTWF4PSIxMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBVc2VNb2RlPSI1IiBEZXNjPSIxc3QgdG90YWwgY29tcHJlc3NpYmlsaXR5IG9mIGR1YWwgcGVybWVhYmlsaXR5ICIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQ3QyRFBFIiBBbGlhcz0i5bGC5LqM57u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDA0MyIgTWF4PSIxMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBVc2VNb2RlPSI1IiBEZXNjPSIybmQgdG90YWwgY29tcHJlc3NpYmlsaXR5IG9mIGR1YWwgcGVybWVhYmlsaXR5ICIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQ3QxIiBBbGlhcz0i5LiA5bGC57u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDA0MyIgTWF4PSIxMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBVc2VNb2RlPSI2IiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkxICIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQ3QyIiBBbGlhcz0i5LqM5bGC57u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMzYiIE1heD0iMTAiIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgVXNlTW9kZT0iNiIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5MiAiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkN0MyIgQWxpYXM9IuS4ieWxgue7vOWQiOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDM2IiBNYXg9IjEwIiBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFVzZU1vZGU9IjYiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eTMgIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJDdDExIiBBbGlhcz0i5bGC5LiAMeWMuue7vOWQiOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwNDMiIE1heD0iMTAiIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgVXNlTW9kZT0iNSIgRGVzYz0iMXN0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSBvZiBpbm5lciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkN0MjEiIEFsaWFzPSLlsYLkuowx5Yy657u85ZCI5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDA0MyIgTWF4PSIxMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBVc2VNb2RlPSI1IiBEZXNjPSIybmQgdG90YWwgY29tcHJlc3NpYmlsaXR5IG9mIGlubmVyIHJlZ2lvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQ3QxMiIgQWxpYXM9IuWxguS4gDLljLrnu7zlkIjljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMDQzIiBNYXg9IjEwIiBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFVzZU1vZGU9IjUiIERlc2M9IjFzdCB0b3RhbCBjb21wcmVzc2liaWxpdHkgb2Ygb3V0ZXIgcmVnaW9uIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJDdDIyIiBBbGlhcz0i5bGC5LqMMuWMuue7vOWQiOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwNDMiIE1heD0iMTAiIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgVXNlTW9kZT0iNSIgRGVzYz0iMm5kIHRvdGFsIGNvbXByZXNzaWJpbGl0eSBvZiBvdXRlciByZWdpb24iLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUGUiIEFsaWFzPSLljp/lp4vlnLDlsYLljovlipsiIFVuaXQ9Ik1QYSIgRGVmYXVsdD0iMzAiIE1heD0iNTAwIiBNaW49IjAuMSIgRGlnaXQ9IjUiIERlc2M9ImluaXRpYWwgZm9ybWF0aW9uIHByZXNzdXJlIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJQcmVmIiBBbGlhcz0i5Y+C6ICD5Y6L5YqbIiBVbml0PSJNUGEiIERlZmF1bHQ9IjMwIiBNYXg9IjUwMCIgTWluPSIwLjEiIERpZ2l0PSI1IiBEZXNjPSJSZWZlcmVuY2UgcHJlc3N1cmUiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlBpIiBBbGlhcz0i5Yid5aeL5Y6L5YqbIiBVbml0PSJNUGEiIERlZmF1bHQ9IjMwIiBNYXg9IjUwMCIgTWluPSIwLjEiIERpZ2l0PSI1IiBEZXNjPSJpbml0aWFsIHByZXNzdXJlIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJQaXQiIEFsaWFzPSLlnLDlsYLljovlipsiIFVuaXQ9Ik1QYSIgRGVmYXVsdD0iMzAiIE1heD0iMTAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgVXNlTW9kZT0iMyIgRGVzYz0iaW5pdGlhbCBwcmVzc3VyZTEiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTiIgQWxpYXM9IuWCqOmHjyIgVW5pdD0ibV4zIiBEZWZhdWx0PSIxMDAwMDAiIE1heD0iMWUrMzAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJyZXNlcnZlcyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iZ2FtbWEiIEFsaWFzPSLmuJfpgI/njofmqKHph48iIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSIxMCIgRGVzYz0ic3RyZXNzIHNlbnNpdGl2aXR5IGNvZWZmaWNpZW50Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJkZWxwYXQiIEFsaWFzPSLoo4LnvJ3ljYrplb/lj5jljJblm6DlrZAiIFVuaXQ9IiIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwIiBNaW49IjAuMSIgRGlnaXQ9IjMiIERlc2M9ImZyYWN0dXJlIHNocmlua2FnZSBjb2VmZmljaWVudCIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJOcSIgQWxpYXM9IuS6p+a2suauteaVsCIgRGVmYXVsdD0iMiIgTWF4PSI2IiBNaW49IjIiIFBhcmFUeXBlPSI4IiBEZXNjPSJudW1iZXIgb2YgbGlxdWlkIHNlY3Rpb25zIiBTdWJJdGVtcz0iTnFBO05xWDtOcUw7TnFRIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJOcUEiIEFsaWFzPSLop5LluqYiIE1pbj0iMWUtMDUiIE1heD0iMzYwIiBVbml0PSJtIiBEZWZhdWx0PSI5MCIgRGlnaXQ9IjMiIFRpcHM9IiIgRGVzYz0ibG9jYXRpb24gb2YgbGlxdWlkIHNlY3Rpb24iIC8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJOcVgiIEFsaWFzPSLkvY3nva4iIFVuaXQ9Im0iIERlZmF1bHQ9IjMwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0ibG9jYXRpb24gb2YgbGlxdWlkIHNlY3Rpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik5xTCIgQWxpYXM9IumVv+W6piIgVW5pdD0ibSIgRGVmYXVsdD0iNjAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJsZW5naCBvZiBsaXF1aWQgc2VjdGlvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTnFRIiBBbGlhcz0i5Lqn6YePIiBVbml0PSJtXjMiIERlZmF1bHQ9IjEwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0ibGlxdWlkIHByb2R1Y3Rpb24gb2YgbGlxdWlkIHNlY3Rpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik5mIiBBbGlhcz0i5Y6L6KOC5q615pWwIiBEZWZhdWx0PSI0IiBNYXg9IjYiIE1pbj0iMSIgVXNlTW9kZT0iNCIgRGVzYz0ibnVtYmVyIG9mIGZyYWN0dXJlIHNlY3Rpb25zIiBTdWJJdGVtcz0iTnFRIi8+DQoNCiAgICA8L1BhcmFHcm91cD4NCg0KICAgIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5YKo5bGC5Y+C5pWwIj4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlJjIiBBbGlhcz0i5o6i5rWL5Y2K5b6EIiBVbml0PSJtIiBEZWZhdWx0PSIxMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjMiIFVzZU1vZGU9IjMiIERlc2M9InJhZGl1cyBvZiBpbnZlc3RpZ2F0aW9uIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJkdCIgQWxpYXM9Iua1i+ivleaXtumXtCIgVW5pdD0iaHIiIERlZmF1bHQ9IjEwMCIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgVXNlTW9kZT0iMyIgRGVzYz0idGVzdCB0aW1lIi8+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksiIEFsaWFzPSLmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksxTVAiIEFsaWFzPSLmuJfpgI/njocxIiBVbml0PSJtRCIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9IjFzdCBwZXJtZWFiaWxpdHkgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksyTVAiIEFsaWFzPSLmuJfpgI/njocyIiBVbml0PSJtRCIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9IjJuZCBwZXJtZWFiaWxpdHkgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksxRFBFIiBBbGlhcz0i5bGC5LiA5riX6YCP546HIiBVbml0PSJtRCIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9IjFzdCBwZXJtZWFiaWxpdHkgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksyRFBFIiBBbGlhcz0i5bGC5LqM5riX6YCP546HIiBVbml0PSJtRCIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9IjJuZCBwZXJtZWFiaWxpdHkgb2YgZHVhbCBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksxMSIgQWxpYXM9IuWxguS4gDHljLrmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0iMXN0IHBlcm1lYWJpbGl0eSBvZiBpbm5lciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksxMiIgQWxpYXM9IuWxguS4gDLljLrmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0iMXN0IHBlcm1lYWJpbGl0eSBvZiBvdXRlciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksyMSIgQWxpYXM9IuWxguS6jDHljLrmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0iMm5kIHBlcm1lYWJpbGl0eSBvZiBpbm5lciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksyMiIgQWxpYXM9IuWxguS6jDLljLrmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0iMm5kIHBlcm1lYWJpbGl0eSBvZiBvdXRlciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IktvIiBBbGlhcz0i5rK555u45riX6YCP546HIiBVbml0PSJtRCIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIwIiBEaWdpdD0iNiIgVXNlTW9kZT0iOCIgRGVzYz0icGVybWVhYmlsaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJLZyIgQWxpYXM9IuawlOebuOa4l+mAj+eOhyIgVW5pdD0ibUQiIERlZmF1bHQ9IjUiIE1heD0iMTAwMDAiIE1pbj0iMCIgRGlnaXQ9IjYiIFVzZU1vZGU9IjgiIERlc2M9InBlcm1lYWJpbGl0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iS2giIEFsaWFzPSLmsLTlubPmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHBlcm1lYWJpbGl0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iS3YiIEFsaWFzPSLlnoLlkJHmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSIwLjUiIE1heD0iMTAwMDAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9InZlcnRpY2FsIHBlcm1lYWJpbGl0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iS3giIEFsaWFzPSJ45pa55ZCR5riX6YCP546HIiBVbml0PSJtRCIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icGVybWVhYmlsaXR5IHgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ikt5IiBBbGlhcz0ieeaWueWQkea4l+mAj+eOhyIgVW5pdD0ibUQiIERlZmF1bHQ9IjUiIE1heD0iMTAwMDAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9InBlcm1lYWJpbGl0eSB5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJLeXoiIEFsaWFzPSJ5euW5s+mdoua4l+mAj+eOhyIgVW5pdD0ibUQiIERlZmF1bHQ9IjUiIE1heD0iMTAwMDAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9InBlcm1lYWJpbGl0eSB5eiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iSzEiIEFsaWFzPSIx5Yy65riX6YCP546HIiBVbml0PSJtRCIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iSW5uZXIgcGVybWVhYmlsaXR5Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJLMiIgQWxpYXM9IjLljLrmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJPdXRlciBwZXJtZWFiaWxpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkszIiBBbGlhcz0iM+WMuua4l+mAj+eOhyIgVW5pdD0ibUQiIERlZmF1bHQ9IjUiIE1heD0iMTAwMDAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9Ik91dGVyIHBlcm1lYWJpbGl0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iS2YiIEFsaWFzPSLoo4LnvJ3muJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1MDAwIiBNYXg9IjFlMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIFVzZU1vZGU9IjMiIERlc2M9ImZyYWN0dXJlIHBlcm1lYWJpbGl0eSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iS2EiIEFsaWFzPSLlhoXljLrmuJfpgI/njociIFVuaXQ9Im1EIiBEZWZhdWx0PSI1IiBNYXg9IjEwMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0icnBlcm1lYWJpbGl0eSBvZiBpbm5lciByZWdpb24iLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUyIgQWxpYXM9IuihqOearuezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjEuMCIgTWF4PSI1MDAwIiBNaW49Ii0xMDAwIiBEaWdpdD0iNiIgRGVzYz0ic2tpbiBmYWN0b3IiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlNpbmYiIEFsaWFzPSLnlYzpnaLooajnmq4iIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSI1IiBNYXg9IjFlMzAiIE1pbj0iMC4wIiBEaWdpdD0iNiIgRGVzYz0iSW50ZXJmYWNlIHNraW4iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlMxIiBBbGlhcz0i5bGC5LiA6KGo55qu57O75pWwIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4wMSIgTWF4PSI1MDAwIiBNaW49Ii0xMDAwIiBEaWdpdD0iNSIgRGVzYz0ic2tpbiBmYWN0b3Igb2YgbGF5ZXIxIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJTMiIgQWxpYXM9IuWxguS6jOihqOearuezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMDEiIE1heD0iNTAwMCIgTWluPSItMTAwMCIgRGlnaXQ9IjUiIERlc2M9InNraW4gZmFjdG9yIG9mIGxheWVyMiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iU2ZzIiBBbGlhcz0i6KOC57yd6Z2i6KGo55qu57O75pWwIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMS4wIiBNYXg9IjUwMDAiIE1pbj0iLTEwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBmYWNlIHNraW4iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlNjaG9rZSIgQWxpYXM9IuS6leetki3oo4LnvJ3pl7Tooajnmq7ns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIxLjAiIE1heD0iNTAwMCIgTWluPSItMTAwMCIgRGlnaXQ9IjYiIERlc2M9ImNob2tlZC1mcmFjdHVyZSBza2luIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJTbGVhayIgQWxpYXM9IuazhOa8j+ihqOearuezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjEuMCIgTWF4PSI1MDAwIiBNaW49Ii0xMDAwIiBEaWdpdD0iNiIgRGVzYz0ibGVhayBza2luIGZhY3RvciIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJSaSIgQWxpYXM9IuWkjeWQiOWNiuW+hCIgVW5pdD0ibSIgRGVmYXVsdD0iNTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJjb21wb3NpdGUgcmFkaXVzIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJyMjEiIEFsaWFzPSLlpI3lkIjljYrlvoQyMSIgVW5pdD0ibSIgRGVmYXVsdD0iMTAwIiBNYXg9IjEwMDAwIiBNaW49IjEiIERpZ2l0PSIzIiBEZXNjPSJjb21wb3NpdGUgcmFkaXVzMjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InIzMiIgQWxpYXM9IuWkjeWQiOWNiuW+hDMyIiBVbml0PSJtIiBEZWZhdWx0PSIyMDAiIE1heD0iMTAwMDAiIE1pbj0iMSIgRGlnaXQ9IjMiIERlc2M9ImNvbXBvc2l0ZSByYWRpdXMzMiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icjQzIiBBbGlhcz0i5aSN5ZCI5Y2K5b6ENDMiIFVuaXQ9Im0iIERlZmF1bHQ9IjMwMCIgTWF4PSIxMDAwMCIgTWluPSIxIiBEaWdpdD0iMyIgRGVzYz0iY29tcG9zaXRlIHJhZGl1czQzIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJSMSIgQWxpYXM9IuS4gOWMuuWNiuW+hCIgVW5pdD0ibSIgRGVmYXVsdD0iNTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJyZWdpb24xIHJhZGl1cyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUjIiIEFsaWFzPSLkuozljLrljYrlvoQiIFVuaXQ9Im0iIERlZmF1bHQ9IjUwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgVmFsaWRhdGVTdHI9IkdUOlIxIiBEZXNjPSJyZWdpb24yIHJhZGl1cyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUjFMIiBBbGlhcz0i5bGC5LiA5LqV5o6n5Y2K5b6EIiBVbml0PSJtIiBEZWZhdWx0PSI2MCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9ImxheWVyMSByYWRpdXMiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlIyTCIgQWxpYXM9IuWxguS6jOS6leaOp+WNiuW+hCIgVW5pdD0ibSIgRGVmYXVsdD0iMTAwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgVmFsaWRhdGVTdHI9IkdUOlIxTCIgRGVzYz0ibGF5ZXIyIHJhZGl1cyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUjExIiBBbGlhcz0i5bGC5LiAMeWMuuWNiuW+hCIgVW5pdD0ibSIgRGVmYXVsdD0iNTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIxc3QgcmFkaXVzIG9mIGlubmVyIHJlZ2lvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUjEyIiBBbGlhcz0i5bGC5LiAMuWMuuWNiuW+hCIgVW5pdD0ibSIgRGVmYXVsdD0iNTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIxc3QgcmFkaXVzIG9mIG91dGVyIHJlZ2lvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUjIxIiBBbGlhcz0i5bGC5LqMMeWMuuWNiuW+hCIgVW5pdD0ibSIgRGVmYXVsdD0iNTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIybmQgcmFkaXVzIG9mIGlubmVyIHJlZ2lvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUjIyIiBBbGlhcz0i5bGC5LqMMuWMuuWNiuW+hCIgVW5pdD0ibSIgRGVmYXVsdD0iNTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIybmQgcmFkaXVzIG9mIG91dGVyIHJlZ2lvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUmluIiBBbGlhcz0i5YaF5Yy65Y2K5b6EIiBVbml0PSJtIiBEZWZhdWx0PSI1MCIgTWF4PSIxMDAwMCIgTWluPSIwLjAxIiBEaWdpdD0iMyIgRGVzYz0icmFkaXVzIG9mIGlubmVyIHJlZ2lvbiIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJzaWdtYSIgQWxpYXM9IuWvvOWOi+ezu+aVsOavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjMiIERlc2M9IlByZXNzdXJlIGNvbmR1Y3Rpb24gcmF0aW8iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InNpZ21hMTEiIEFsaWFzPSLlr7zljovns7vmlbDmr5QxMSIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSJjb25kdWN0aXZpdHkgZmFjdG9yIHJhdGlvMTEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InNpZ21hRjEiIEFsaWFzPSLlr7zljovns7vmlbDmr5RGMSIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSJjb25kdWN0aXZpdHkgZmFjdG9yIHJhdGlvZjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InNpZ21hMjEiIEFsaWFzPSLlr7zljovns7vmlbDmr5QyMSIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSJjb25kdWN0aXZpdHkgZmFjdG9yIHJhdGlvMjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InNpZ21hMzEiIEFsaWFzPSLlr7zljovns7vmlbDmr5QzMSIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSJjb25kdWN0aXZpdHkgZmFjdG9yIHJhdGlvMzEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InNpZ21hNDEiIEFsaWFzPSLlr7zljovns7vmlbDmr5Q0MSIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSJjb25kdWN0aXZpdHkgZmFjdG9yIHJhdGlvNDEiLz4NCiAgICA8L1BhcmFHcm91cD4NCg0KICAgIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5riX5rWB6KeE5b6L5puy57q/Ij4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImExIiBBbGlhcz0i57O75pWwMSIgVW5pdD0iIiBEZWZhdWx0PSIxMDAiIE1heD0iMTAwMDAwIiBNaW49IjEwMDAwMCIgRGlnaXQ9IjMiIERlc2M9ImN1cnZlIG9mIHZlbG9jaXR5LXByZXNzdXJlIGdyYWRpZW50IGZhY3RvcjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImEyIiBBbGlhcz0i57O75pWwMiIgVW5pdD0iIiBEZWZhdWx0PSIxMDAiIE1heD0iMTAwMDAwIiBNaW49IjEwMDAwMCIgRGlnaXQ9IjMiIERlc2M9ImN1cnZlIG9mIHZlbG9jaXR5LXByZXNzdXJlIGdyYWRpZW50IGZhY3RvcjIiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImEzIiBBbGlhcz0i57O75pWwMyIgVW5pdD0iIiBEZWZhdWx0PSIxMDAiIE1heD0iMTAwMDAwIiBNaW49IjEwMDAwMCIgRGlnaXQ9IjMiIERlc2M9ImN1cnZlIG9mIHZlbG9jaXR5LXByZXNzdXJlIGdyYWRpZW50IGZhY3RvcjMiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImE0IiBBbGlhcz0i57O75pWwNCIgVW5pdD0iIiBEZWZhdWx0PSIxMDAiIE1heD0iMTAwMDAwIiBNaW49IjEwMDAwMCIgRGlnaXQ9IjMiIERlc2M9ImN1cnZlIG9mIHZlbG9jaXR5LXByZXNzdXJlIGdyYWRpZW50IGZhY3RvcjQiLz4NCiAgICA8L1BhcmFHcm91cD4NCg0KICAgIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54m55q6K5YKo5bGC5Y+C5pWwIj4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkQiIEFsaWFzPSLlgqjlrrnmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjUiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjMiIERlc2M9InN0b3JhdGl2aXR5IHJhdGlvIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJEMSIgQWxpYXM9IuWCqOWuueavlDEiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSJzdG9yYXRpdml0eSByYXRpbzEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkQyIiBBbGlhcz0i5YKo5a655q+UMiIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjMiIERlc2M9InN0b3JhdGl2aXR5IHJhdGlvMiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ib21lZ2FmIiBBbGlhcz0i6KOC57yd5by55oCn5YKo5a655q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4xIiBNYXg9IjEiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImVsYXN0aWNpdHkgc3RvcmF0aXZpdHkgcmF0aW8iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Im9tZWdhdiIgQWxpYXM9IuWtlOa0nuW8ueaAp+WCqOWuueavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJlbGFzdGljaXR5IHN0b3JhdGl2aXR5IHJhdGlvIG9mIGlubmVyIHZ1ZyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ib21lZ2F2MSIgQWxpYXM9IuWGheWMuuWtlOa0nuW8ueaAp+WCqOWuueavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJlbGFzdGljaXR5IHN0b3JhdGl2aXR5IHJhdGlvIG9mIGlubmVyIHZ1ZyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ib21lZ2F2MiIgQWxpYXM9IuWkluWMuuWtlOa0nuW8ueaAp+WCqOWuueavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJlbGFzdGljaXR5IHN0b3JhdGl2aXR5IHJhdGlvIG9mIG91dGVyIHZ1ZyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ib21lZ2FmMSIgQWxpYXM9IuWGheWMuuijgue8neW8ueaAp+WCqOWuueavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJlbGFzdGljaXR5IHN0b3JhdGl2aXR5IHJhdGlvIG9mIGlubmVyIGZyYWN0dXJlIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJvbWVnYW0iIEFsaWFzPSLln7rotKjlvLnmgKflgqjlrrnmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iNiIgVXNlTW9kZT0iNSIgRGVzYz0iZWxhc3RpY2l0eSBzdG9yYXRpdml0eSByYXRpbyBvZiBpbm5lciBtYXRyaXgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Im9tZWdhbTEiIEFsaWFzPSLlhoXljLrln7rotKjlvLnmgKflgqjlrrnmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iNiIgVXNlTW9kZT0iNSIgRGVzYz0iZWxhc3RpY2l0eSBzdG9yYXRpdml0eSByYXRpbyBvZiBpbm5lciBtYXRyaXgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Im9tZWdhbTIiIEFsaWFzPSLlpJbljLrln7rotKjlvLnmgKflgqjlrrnmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iNiIgVXNlTW9kZT0iNSIgRGVzYz0iZWxhc3RpY2l0eSBzdG9yYXRpdml0eSByYXRpbyBvZiBvdXRlciBtYXRyaXgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Im9tZWdhZjIiIEFsaWFzPSLlpJbljLroo4LnvJ3lvLnmgKflgqjlrrnmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZWxhc3RpY2l0eSBzdG9yYXRpdml0eSByYXRpbyBvZiBvdXRlciBmcmFjdHVyZSIvPg0KDQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IncxMSIgQWxpYXM9IuWxguS4gDHljLrlgqjlrrnmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjI1IiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIxc3Qgc3RvcmF0aXZpdHkgcmF0aW8gb2YgaW5uZXIgcmVnaW9uIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ3MTIiIEFsaWFzPSLlsYLkuIAy5Yy65YKo5a655q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4yNSIgTWF4PSIxIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iMXN0IHN0b3JhdGl2aXR5IHJhdGlvIG9mIG91dGVyIHJlZ2lvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0idzIxIiBBbGlhcz0i5bGC5LqMMeWMuuWCqOWuueavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMjUiIE1heD0iMSIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9IjJuZCBzdG9yYXRpdml0eSByYXRpbyBvZiBpbm5lciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IncyMiIgQWxpYXM9IuWxguS6jDLljLrlgqjlrrnmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjI1IiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIybmQgc3RvcmF0aXZpdHkgcmF0aW8gb2Ygb3V0ZXIgcmVnaW9uIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ3MSIgQWxpYXM9IuWGheWMuuWxguS4gOWCqOWuueavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMjUiIE1heD0iMSIgTWluPSIwLjAwMSIgRGlnaXQ9IjMiIERlc2M9InN0b3JhdGl2aXR5IHJhdGlvIG9mIGlubmVyIHJlZ2lvbiBsYXllcjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IncyIiBBbGlhcz0i5aSW5Yy65bGC5LiA5YKo5a655q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4yNSIgTWF4PSIxIiBNaW49IjAuMDAxIiBEaWdpdD0iMyIgRGVzYz0ic3RvcmF0aXZpdHkgcmF0aW8gb2Ygb3V0ZXIgcmVnaW9uIGxheWVyMiIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJsYW1iZGEiIEFsaWFzPSLnqpzmtYHns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjAwMDAwMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSIxMCIgRGVzYz0iY3Jvc3MgZmxvdyBjb2VmZmljaWVudCIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ibGFtYmRhbWYiIEFsaWFzPSLln7rotKjlkJHoo4LnvJ3nqpzmtYHns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjAwMDAwMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSIxMCIgRGVzYz0iY3Jvc3MgZmxvdyBjb2VmZmljaWVudCBvZiBpbm5lciB2dWciLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImxhbWJkYW12IiBBbGlhcz0i5Z+66LSo5ZCR5a2U5rSe56qc5rWB57O75pWwIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4wMDAwMDEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iMTAiIERlc2M9ImNyb3NzIGZsb3cgY29lZmZpY2llbnQgb2YgaW5uZXIgdnVnIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJsYW1iZGF2ZiIgQWxpYXM9IuWtlOa0nuWQkeijgue8neeqnOa1geezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMDAwMDAxIiBNYXg9IjEiIE1pbj0iMCIgRGlnaXQ9IjEwIiBEZXNjPSJjcm9zcyBmbG93IGNvZWZmaWNpZW50IG9mIGlubmVyIHZ1ZyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ibGFtYmRhdjEiIEFsaWFzPSLlhoXljLrlrZTmtJ7nqpzmtYHns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjAwMDAwMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSIxMCIgRGVzYz0iY3Jvc3MgZmxvdyBjb2VmZmljaWVudCBvZiBpbm5lciB2dWciLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImxhbWJkYW0xIiBBbGlhcz0i5YaF5Yy65Z+66LSo56qc5rWB57O75pWwIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4wMDAwMDEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iMTAiIERlc2M9ImNyb3NzIGZsb3cgY29lZmZpY2llbnQgb2Ygb3V0ZXIgbWF0cml4Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJsYW1iZGF2MiIgQWxpYXM9IuWkluWMuuWtlOa0nueqnOa1geezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjFlLTgiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iMTAiIERlc2M9ImNyb3NzIGZsb3cgY29lZmZpY2llbnQgb2Ygb3V0ZXIgdnVnIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJsYW1iZGFtMiIgQWxpYXM9IuWkluWMuuWfuui0qOeqnOa1geezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjFlLTEwIiBNYXg9IjEiIE1pbj0iMCIgRGlnaXQ9IjEwIiBEZXNjPSJjcm9zcyBmbG93IGNvZWZmaWNpZW50IG9mIG91dGVyIG1hdHJpeCIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ibGFtYmRhMSIgQWxpYXM9IjHljLrlsYLnqpzns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIxZS01IiBNYXg9IjEiIE1pbj0iMWUtMTUiIERpZ2l0PSIzIiBEZXNjPSJsYXllciBjcm9zc2Zsb3cgY29lZmZpY2llbnQgb2YgaW5uZXIgcmVnaW9uIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJsYW1iZGEyIiBBbGlhcz0iMuWMuuWxgueqnOezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjFlLTUiIE1heD0iMSIgTWluPSIxZS0xNSIgRGlnaXQ9IjMiIERlc2M9ImxheWVyIGNyb3NzZmxvdyBjb2VmZmljaWVudCBvZiBvdXRlciByZWdpb24iLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTUt1IiBBbGlhcz0i5rWB5bqmIiBVbml0PSJtRC8obVBhwrdzKSIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBVc2VNb2RlPSIzIiBEZXNjPSJtb2JpbGl0eSIvPiAgICAgICAgDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJNIiBBbGlhcz0i5rWB5bqm5q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iNSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iMyIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik1MMSIgQWxpYXM9IuWxguS4gOa1geW6puavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjMiIERlc2M9Im1vYmlsaXR5IHJhdGlvIG9mIGxheWVyMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTUwyIiBBbGlhcz0i5bGC5LqM5rWB5bqm5q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iMyIgRGVzYz0ibW9iaWxpdHkgcmF0aW8gb2YgbGF5ZXIyIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJNMTEiIEFsaWFzPSLmtYHluqbmr5QxMSIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiIE1pbj0iMSIgRGlnaXQ9IjMiIERlc2M9Im1vYmlsaXR5IHJhdGlvMTEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik1GMSIgQWxpYXM9Iua1geW6puavlEYxIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIxZS0wMyIgRGlnaXQ9IjMiIERlc2M9Im1vYmlsaXR5IHJhdGlvZjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik0yMSIgQWxpYXM9Iua1geW6puavlDIxIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIxZS0wMyIgRGlnaXQ9IjMiIERlc2M9Im1vYmlsaXR5IHJhdGlvMjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik0zMSIgQWxpYXM9Iua1geW6puavlDMxIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIxZS0wMyIgRGlnaXQ9IjMiIERlc2M9Im1vYmlsaXR5IHJhdGlvMzEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik00MSIgQWxpYXM9Iua1geW6puavlDQxIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIxZS0wMyIgRGlnaXQ9IjMiIERlc2M9Im1vYmlsaXR5IHJhdGlvNDEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlgxMSIgQWxpYXM9IuWxguS4gDHljLrmtYHliqjns7vmlbDmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjI1IiBNYXg9IjEiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSIxc3QgdHJhbnNtaXNzaWJpbGl0eSBvZiBpbm5lciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlgxMiIgQWxpYXM9IuWxguS4gDLljLrmtYHliqjns7vmlbDmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjI1IiBNYXg9IjEiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSIxc3QgdHJhbnNtaXNzaWJpbGl0eSBvZiBvdXRlciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlgyMSIgQWxpYXM9IuWxguS6jDHljLrmtYHliqjns7vmlbDmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjI1IiBNYXg9IjEiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSIybmQgdHJhbnNtaXNzaWJpbGl0eSBvZiBpbm5lciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlgyMiIgQWxpYXM9IuWxguS6jDLljLrmtYHliqjns7vmlbDmr5QiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjI1IiBNYXg9IjEiIE1pbj0iMC4wMDEiIERpZ2l0PSIzIiBEZXNjPSIybmQgdHJhbnNtaXNzaWJpbGl0eSBvZiBvdXRlciByZWdpb24iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlgxIiBBbGlhcz0i5YaF5Yy65bGC5LiA5rWB5Yqo57O75pWw5q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4yNSIgTWF4PSIxIiBNaW49IjAuMDAxIiBEaWdpdD0iMyIgRGVzYz0idHJhbnNtaXNzaWJpbGl0eSBvZiBpbm5lciByZWdpb24gbGF5ZXIxIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJYMiIgQWxpYXM9IuWkluWMuuWxguS4gOa1geWKqOezu+aVsOavlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMjUiIE1heD0iMSIgTWluPSIwLjAwMSIgRGlnaXQ9IjMiIERlc2M9InRyYW5zbWlzc2liaWxpdHkgb2Ygb3V0ZXIgcmVnaW9uIGxheWVyMiIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJnYW1tYSIgQWxpYXM9IuW6lOWKm+aVj+aEn+ezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjAuMSIgTWluPSIxZS0xMCIgRGlnaXQ9IjUiIERlc2M9InN0cmVzcyBzZW5zaXRpdml0eSBjb2VmZmljaWVudCIvPiAgICAgICAgDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJHIiBBbGlhcz0i5ZCv5Yqo5Y6L5Yqb5qKv5bqmIiBVbml0PSJNUGEvbSIgRGVmYXVsdD0iMC4wMDEiIE1heD0iMTAiIE1pbj0iMC4wIiBEaWdpdD0iNiIgRGVzYz0ic3RhcnRpbmcgcHJlc3N1cmUgZ3JhZGllbnQiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImJ3ZiIgQWxpYXM9IuW6leawtOezu+aVsCIgVW5pdD0iJSIgRGVmYXVsdD0iMC41IiBNYXg9IjEiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJib3R0b20gd2F0ZXIgY29lZmZpY2llbnQiLz4NCg0KICAgIDwvUGFyYUdyb3VwPg0KDQogICAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlhbbku5blj4LmlbAiPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJodyIgQWxpYXM9IuWwhOW8gOautemVv+W6piIgVW5pdD0ibSIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9Imxlbmd0aCBvZiBjb25uZWN0ZWQgc2VjdGlvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iWmEiIEFsaWFzPSLlsITlvIDmrrXpobbpg6jkvY3nva4iIFVuaXQ9Im0iIERlZmF1bHQ9IjIuNSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9InRvcCBwb3NpdGlvbiBvZiBjb25uZWN0ZWQgc2VjdGlvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ienciIEFsaWFzPSLlnoLlkJHkupXkvY0iIFVuaXQ9Im0iIERlZmF1bHQ9IjUiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSLnlJ/kuqfmrrXkuK3lv4Pot53lgqjlsYLlupXpg6jot53nprsodmVydGljYWwgd2VsbCBwb3NpdGlvbikiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieGYiIEFsaWFzPSLoo4LnvJ3ljYrplb8iIFVuaXQ9Im0iIERlZmF1bHQ9IjUwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iZnJhY3R1cmUgaGFsZi1sZW5ndGgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IndmIiBBbGlhcz0i6KOC57yd5a695bqmIiBVbml0PSJtIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgd2lkdGgiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkZjIiBBbGlhcz0i6KOC57yd5a+85rWB6IO95YqbIiBVbml0PSJtRMK3bSIgRGVmYXVsdD0iMTAwMDAiIE1heD0iMWUrMzAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkZjMSIgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmzEiIFVuaXQ9Im1EwrdtIiBEZWZhdWx0PSIxNTAwMCIgTWF4PSIxZSszMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eTEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkZjMiIgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmzIiIFVuaXQ9Im1EwrdtIiBEZWZhdWx0PSIxMDAwMCIgTWF4PSIxZSszMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eTIiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkZjMyIgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmzMiIFVuaXQ9Im1EwrdtIiBEZWZhdWx0PSI1MDAwIiBNYXg9IjFlKzMwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5MyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieGYxIiBBbGlhcz0i6KOC57yd6ZW/5bqmMSIgVW5pdD0ibSIgRGVmYXVsdD0iMjAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aDEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InhmMiIgQWxpYXM9Iuijgue8nemVv+W6pjIiIFVuaXQ9Im0iIERlZmF1bHQ9IjQwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iZnJhY3R1cmUgaGFsZi1sZW5ndGgyIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ4ZjMiIEFsaWFzPSLoo4LnvJ3plb/luqYzIiBVbml0PSJtIiBEZWZhdWx0PSI2MCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoMyIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJxIiBBbGlhcz0i6L+R5LqV5q615rWB6YeP5q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC41IiBNYXg9IjEiIE1pbj0iMCIgRGlnaXQ9IjMiIERlc2M9InJhdGUgcmF0aW8iLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InExIiBBbGlhcz0i6L+R5LqV5q615rWB6YeP5q+UMSIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuNCIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSIzIiBEZXNjPSJyYXRlIHJhdGlvMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icTIiIEFsaWFzPSLov5HkupXmrrXmtYHph4/mr5QyIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4zIiBNYXg9IjEiIE1pbj0iMCIgRGlnaXQ9IjMiIERlc2M9InJhdGUgcmF0aW8yIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJFIiBBbGlhcz0i5bmz6Z2i5by55oCn5qih6YePIiBVbml0PSJNUGEiIERlZmF1bHQ9IjEwMDAwIiBNYXg9IjEwMDAwMCIgTWluPSIxMDAwIiBEaWdpdD0iMyIgRGVzYz0icGxhbmUtc3RyYWluIG1vZHVsdXMiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iRGlmZmRwIiBBbGlhcz0i5Yed5p6Q5L2T57O75Lik55u45YGP5beu57O75pWwIiBVbml0PSJNUGEiIERlZmF1bHQ9IjEwMDAwIiBNYXg9IjEwMDAwMCIgTWluPSIxMDAwIiBEaWdpdD0iMyIgRGVzYz0iIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJEZXdwIiBBbGlhcz0i5Yed5p6Q5rCU6Zyy54K55Y6L5YqbIiBVbml0PSJNUGEiIERlZmF1bHQ9IjEwMDAwIiBNYXg9IjEwMDAwMCIgTWluPSIxMDAwIiBEaWdpdD0iMyIgRGVzYz0iIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJrc3RhcmZ2IiBBbGlhcz0i6KOC57yd5a2U5rSe5riX6YCP546H5q+UIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC41IiBNYXg9IjEiIE1pbj0iMCIgRGlnaXQ9IjUiIERlc2M9IiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ia3N0YXJmbSIgQWxpYXM9Iuijgue8neWfuui0qOa4l+mAj+eOh+avlCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuNSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSI1IiBEZXNjPSIiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImEiIEFsaWFzPSLlkLjpmYTns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iNSIgRGVzYz0iIi8+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkFyZWEiIEFsaWFzPSLmsrnol4/pnaLnp68iIFVuaXQ9Im1eMiIgRGVmYXVsdD0iMTAwMDAiIE1heD0iMWUrMzAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJyZXNlcnZvaXIgYXJlYSIvPg0KDQogICAgPC9QYXJhR3JvdXA+DQoNCiAgICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9Iui+ueeVjCI+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InRvcCIgQWxpYXM9Iumhtui+ueeVjCIgRGVmYXVsdD0iMCIgUGFyYVR5cGU9IjYiIEJkeVR5cGU9IjEiIEl0ZW1PcHRpb25zPSLkuI3muJfpgI875rCU6aG2IiBEZXNjPSJ0b3AgYm91bmRhcnkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImJvdHRvbSIgQWxpYXM9IuW6lei+ueeVjCIgRGVmYXVsdD0iMSIgUGFyYVR5cGU9IjYiIEJkeVR5cGU9IjEiIEl0ZW1PcHRpb25zPSLkuI3muJfpgI875bqV5rC0IiBEZXNjPSJib3R0b20gYm91bmRhcnkiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieDEiIEFsaWFzPSLovrnnlYzot53nprsxIiBVbml0PSJtIiBEZWZhdWx0PSI1MCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIEJkeVR5cGU9IjAiIERlc2M9ImJvdW5kYXJ5IGRpc3RhbmNlMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieDIiIEFsaWFzPSLovrnnlYzot53nprsyIiBVbml0PSJtIiBEZWZhdWx0PSI1MCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIEJkeVR5cGU9IjAiIERlc2M9ImJvdW5kYXJ5IGRpc3RhbmNlMiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieDMiIEFsaWFzPSLovrnnlYzot53nprszIiBVbml0PSJtIiBEZWZhdWx0PSI1MCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIEJkeVR5cGU9IjAiIERlc2M9ImJvdW5kYXJ5IGRpc3RhbmNlMyIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieDQiIEFsaWFzPSLovrnnlYzot53nprs0IiBVbml0PSJtIiBEZWZhdWx0PSI1MCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIEJkeVR5cGU9IjAiIERlc2M9ImJvdW5kYXJ5IGRpc3RhbmNlNCIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJuZSIgQWxpYXM9IuS4iui+ueeVjCIgVW5pdD0ibSIgRGVmYXVsdD0iNDAwIiBNYXg9IjEwMDAwIiBNaW49IjEiIERpZ2l0PSIzIiBCZHlUeXBlPSIwIiBEZXNjPSJzcXVhcmUgYm91bmRhcnkgZGlzdGFuY2Uobm9ydGgpIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJzZSIgQWxpYXM9IuS4i+i+ueeVjCIgVW5pdD0ibSIgRGVmYXVsdD0iNDAwIiBNYXg9IjEwMDAwIiBNaW49IjEiIERpZ2l0PSIzIiBCZHlUeXBlPSIwIiBEZXNjPSJzcXVhcmUgYm91bmRhcnkgZGlzdGFuY2Uoc291dGgpIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ3ZSIgQWxpYXM9IuW3pui+ueeVjCIgVW5pdD0ibSIgRGVmYXVsdD0iNDAwIiBNYXg9IjEwMDAwIiBNaW49IjEiIERpZ2l0PSIzIiBCZHlUeXBlPSIwIiBEZXNjPSJzcXVhcmUgYm91bmRhcnkgZGlzdGFuY2Uod2VzdCkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9ImVlIiBBbGlhcz0i5Y+z6L6555WMIiBVbml0PSJtIiBEZWZhdWx0PSI0MDAiIE1heD0iMTAwMDAiIE1pbj0iMSIgRGlnaXQ9IjMiIEJkeVR5cGU9IjAiIERlc2M9InNxdWFyZSBib3VuZGFyeSBkaXN0YW5jZShlYXN0KSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icmUiIEFsaWFzPSLlnIblvaLlpJbovrnnlYwiIFVuaXQ9Im0iIERlZmF1bHQ9IjQwMCIgTWF4PSIxMDAwMCIgTWluPSIxIiBEaWdpdD0iMyIgQmR5VHlwZT0iMCIgRGVzYz0iY2lyY3VsYXIgYm91bmRhcnkgZGlzdGFuY2UiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0idGhldGEiIEFsaWFzPSLop5LluqYiIFVuaXQ9IsKwIiBEZWZhdWx0PSI5MCIgTWF4PSIxODAiIE1pbj0iMCIgRGlnaXQ9IjEiIERlc2M9ImFuZ2xlIG9mIGJvdW5kYXJ5Ii8+DQoNCiAgICA8L1BhcmFHcm91cD4NCg0KICAgIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5rWB5L2T5oCn6LSoIj4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iWmciIEFsaWFzPSLmsJTkvZPlgY/lt67lm6DlrZAiIE1pbj0iMCIgRGlnaXQ9IjQiIERlc2M9IlogZmFjdG9yIi8+DQogICAgICAgIDwhLS08UGFyYUl0ZW0gTmFtZT0iQmciIEFsaWFzPSLmsJTkvZPnp6/ns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIxIiBNYXg9IjEwIiBNaW49IjAuMDAwMSIgRGlnaXQ9IjQiIERlc2M9ImZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIi8+LS0+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJDZyIgQWxpYXM9IuawlOS9k+WOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlJob2ciIEFsaWFzPSLmsJTkvZPlr4bluqYiIFVuaXQ9ImtnL21eMyIvPg0KICAgICAgICA8IS0tPFBhcmFJdGVtIE5hbWU9Ik1pdWciIEFsaWFzPSLmsJTpu4/luqYiIFVuaXQ9Im1QYcK3cyIgRGVmYXVsdD0iMSIgTWF4PSIyIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iZ2FzIHZpc2Nvc2l0eSIvPi0tPg0KICAgICAgICA8IS0tPFBhcmFJdGVtIE5hbWU9IkRpZmZkcCIgQWxpYXM9IuWHneaekOS9k+ezu+S4pOebuOWBj+W3ruezu+aVsCIgVW5pdD0iTVBhIiBEZWZhdWx0PSIxMDAwMCIgTWF4PSIxMDAwMDAiIE1pbj0iMTAwMCIgRGlnaXQ9IjMiIERlc2M9IiIvPi0tPg0KICAgICAgICA8IS0tPFBhcmFJdGVtIE5hbWU9IkRld3AiIEFsaWFzPSLlh53mnpDmsJTpnLLngrnljovlipsiIFVuaXQ9Ik1QYSIgRGVmYXVsdD0iMTAwMDAiIE1heD0iMTAwMDAwIiBNaW49IjEwMDAiIERpZ2l0PSIzIiBEZXNjPSIiLz4tLT4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUGIiIEFsaWFzPSLms6HngrnljovlipsiIFVuaXQ9Ik1QYSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUnMiIEFsaWFzPSLmsJTmsrnmr5QiIFVuaXQ9Im1eMy9tXjMiIERlZmF1bHQ9IjEwMCIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9ImdhcyBvaWwgcmF0aW8iLz4NCiAgICAgICAgPCEtLTxQYXJhSXRlbSBOYW1lPSJCbyIgQWxpYXM9IuayueS9k+enr+ezu+aVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjEiIE1heD0iMTAiIE1pbj0iMC4wMDAxIiBEaWdpdD0iNCIgRGVzYz0iZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiLz4tLT4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkNvIiBBbGlhcz0i5rK55Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUmhvbyIgQWxpYXM9IuayueWvhuW6piIgVW5pdD0ia2cvbV4zIi8+DQogICAgICAgIDwhLS08UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9IuayueebuOm7j+W6piIgVW5pdD0ibVBhwrdzIiBEZWZhdWx0PSIxIiBNYXg9IjE1MCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9Im9pbCB2aXNjb3NpdHkiLz4tLT4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUnN3IiBBbGlhcz0i5rCU5rC05q+UIiBVbml0PSJtXjMvbV4zIiBEZWZhdWx0PSIyLjAzIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iZ2FzIHdhdGVyIHJhdGlvIi8+DQogICAgICAgIDwhLS08UGFyYUl0ZW0gTmFtZT0iQnciIEFsaWFzPSLmsLTkvZPnp6/ns7vmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIxIiBNYXg9IjEwIiBNaW49IjAuMDAwMSIgRGlnaXQ9IjQiIERlc2M9ImZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIi8+LS0+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJDdyIgQWxpYXM9IuawtOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlJob3ciIEFsaWFzPSLmsLTlr4bluqYiIFVuaXQ9ImtnL21eMyIvPg0KICAgICAgICA8IS0tPFBhcmFJdGVtIE5hbWU9Ik1pdXciIEFsaWFzPSLmsLTnm7jpu4/luqYiIFVuaXQ9Im1QYcK3cyIgRGVmYXVsdD0iMSIgTWF4PSIyIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0id2F0ZXIgdmlzY29zaXR5Ii8+LS0+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InJvIiBBbGlhcz0i5rK555u45q+U6YeNIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC44IiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0ib2lsIGdyYXZpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InJnIiBBbGlhcz0i5rCU55u45q+U6YeNIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC43IiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iZ2FzIGdyYXZpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlBzZXAiIEFsaWFzPSLliIbnprvlmajljovlipsiIFVuaXQ9Ik1QYSIgRGVmYXVsdD0iMC43OTExMSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9InNlcGFyYXRvciBwcmVzc3VyZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iVHNlcCIgQWxpYXM9IuWIhuemu+WZqOa4qeW6piIgVW5pdD0iRiIgRGVmYXVsdD0iNjAiIE1heD0iMTAwMDAiIE1pbj0iLTQ2MCIgRGlnaXQ9IjMiIERlc2M9InNlcGFyYXRvciB0ZW1wZXJhdHVyZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icnQiIEFsaWFzPSLmsrnol4/muKnluqYiIFVuaXQ9IuKEgyIgRGVmYXVsdD0iMTAwIiBNYXg9IjEwMDAwIiBNaW49Ii0yNzQiIERpZ2l0PSIzIiBEZXNjPSJyZXNlcnZvaXIgdGVtcGVyYXR1cmUiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InlnIiBBbGlhcz0i5rCU5L2T5pGp5bCU5YiG5pWwIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC41MDI0NSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSIzIiBEZXNjPSJnYXMgbW9sZSBmcmFjdGlvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0idGIiIEFsaWFzPSLmsrjngrnmuKnluqYiIFVuaXQ9IuKEgyIgRGVmYXVsdD0iODguMiIgTWF4PSIxMDAwMCIgTWluPSItMjc0IiBEaWdpdD0iMyIgRGVzYz0iYnViYmxlIHRlbXBlcmF0dXJlIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJwd1NDIiBBbGlhcz0i5qCH5Ya15LiL5rC05a+G5bqmIiBVbml0PSJrZy9tXjMiIERlZmF1bHQ9IjEwMDAiIE1heD0iMTAwMDAiIE1pbj0iMWUtNSIgRGlnaXQ9IjMiIERlc2M9IndhdGVyIGRlbnNpdHkgU0MiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InBnU0MiIEFsaWFzPSLmoIflhrXkuIvnqbrmsJTlr4bluqYiIFVuaXQ9ImtnL21eMyIgRGVmYXVsdD0iMS4yOTMiIE1heD0iMTAwMDAiIE1pbj0iMWUtNSIgRGlnaXQ9IjMiIERlc2M9ImFpciBkZW5zaXR5IFNDIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ5Q08yIiBBbGlhcz0i5LqM5rCn5YyW56Kz5pGp5bCU5YiG5pWwIiBVbml0PSJmcmFjdGlvbiIgRGVmYXVsdD0iMC4xIiBNYXg9IjEiIE1pbj0iMCIgRGlnaXQ9IjMiIERlc2M9IkNPMiBtb2xlIGZyYWN0aW9uIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ5TjIiIEFsaWFzPSLmsK7msJTmkanlsJTliIbmlbAiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIwLjEiIE1heD0iMSIgTWluPSIwIiBEaWdpdD0iMyIgRGVzYz0iTjIgbW9sZSBmcmFjdGlvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieUgyUyIgQWxpYXM9Iuehq+WMluawouaRqeWwlOWIhuaVsCIgVW5pdD0iZnJhY3Rpb24iIERlZmF1bHQ9IjAuMSIgTWF4PSIxIiBNaW49IjAiIERpZ2l0PSIzIiBEZXNjPSJIMlMgbW9sZSBmcmFjdGlvbiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0idGMiIEFsaWFzPSLkuLTnlYzmuKnluqYiIFVuaXQ9IuKEgyIgRGVmYXVsdD0iLTYwLjUiIE1heD0iMTAwMDAiIE1pbj0iLTI3NCIgRGlnaXQ9IjMiIERlc2M9ImNyaXRpY2FsIHRlbXBlcmF0dXJlIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ0cHIiIEFsaWFzPSLlr7nmr5TmuKnluqYiIFVuaXQ9ImZyYWN0aW9uIiBEZWZhdWx0PSIyLjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtNSIgRGlnaXQ9IjMiIERlc2M9ImNvcnJlc3BvbmRpbmcgdGVtcGVyYXR1cmUiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlBjIiBBbGlhcz0i5Li055WM5Y6L5YqbIiBVbml0PSJNUGEiIERlZmF1bHQ9IjQuNiIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9ImNyaXRpY2FsIHByZXNzdXJlIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJQcHIiIEFsaWFzPSLlr7nmr5TljovlipsiIFVuaXQ9Ik1QYSIgRGVmYXVsdD0iNy4yIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iY29ycmVzcG9uZGluZyBwcmVzc3VyZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTWciIEFsaWFzPSLmsJTkvZPmkanlsJTotKjph48iIFVuaXQ9ImcvbW9sIiBEZWZhdWx0PSIxNiIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjMiIERlc2M9ImdhcyBtb2xlIG1hc3MiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0id3MiIEFsaWFzPSLnn7/ljJbluqYiIFVuaXQ9Im1nL0wiIERlZmF1bHQ9IjUwMDAwMCIgTWF4PSIxMDAwMDAwIiBNaW49IjAiIERpZ2l0PSIzIiBEZXNjPSJtYXNzIGZyYWN0dXJlIG9mIHNhbHQiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InJwIiBBbGlhcz0i5rK56JeP5Y6L5YqbIiBVbml0PSJNUGEiIERlZmF1bHQ9IjMzLjQiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSJyZXNlcnZvaXIgcHJlc3N1cmUiLz4NCiAgICA8L1BhcmFHcm91cD4NCg0KICAgIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iVE9ET193eGQiPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUWciIEFsaWFzPSLkuIDngrnms5Xkuqfph48iIFVuaXQ9IjEwXjQqbV4zL2QiIERlZmF1bHQ9IjQ1IiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJwcm9kdWN0aXZpdHkiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IlB3ZiIgQWxpYXM9IuS4gOeCueazlea1geWOiyIgVW5pdD0iTVBhIiBEZWZhdWx0PSIyOS4xIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJCb3R0b20gaG9sZSBwcmVzc3VyZSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUnNxIiBBbGlhcz0iZFMvZFEiIFVuaXQ9IjEvbV4zL2QiIERlZmF1bHQ9IjAuMDAwMDEiIE1heD0iMTAwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJSYXRpbyBvZiBTIHRvIFEiLz4NCiAgICA8L1BhcmFHcm91cD4NCg0KICAgIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iVE9ET193eGQiPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieHciIEFsaWFzPSLkupXkvY3nva54IiBVbml0PSJtIiBEZWZhdWx0PSIyNTAiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSIzIiBEZXNjPSIiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Inl3IiBBbGlhcz0i5LqV5L2N572ueSIgVW5pdD0ibSIgRGVmYXVsdD0iMjUwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ4ZSIgQWxpYXM9IuWcsOWxgumVv+W6piIgVW5pdD0ibSIgRGVmYXVsdD0iNTAwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ5ZSIgQWxpYXM9IuWcsOWxguWuveW6piIgVW5pdD0ibSIgRGVmYXVsdD0iNTAwIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iMyIgRGVzYz0iIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJjZHMiIEFsaWFzPSLnu4TlkIjlj4LmlbBDRGUyUyIgVW5pdD0ibSIgRGVmYXVsdD0iMS4wIiBNaW49IjAuMDAxIiBEaWdpdD0iMyIgRGVzYz0iIi8+DQogICAgPC9QYXJhR3JvdXA+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/ModelSpecialParaDefinesLP.dat b/Bin/Config/Common/ModelSpecialParaDefinesLP.dat new file mode 100644 index 0000000..96ac595 --- /dev/null +++ b/Bin/Config/Common/ModelSpecialParaDefinesLP.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+i+heWKqU1vZGVsRGVzY3N4eC54bWzmlofku7bvvIzkvZzkuLrlhbbovoXliqnooaXlhYXpg6jliIYgICAgICAgIC0tPg0KPCEtLSAgICBBdXRob3Iocyk6IHdhbmd6ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgQ3JlYXRlZCBEYXRlOiAyMDE3MDkyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE1vZGlmaWVkIERhdGU6IDIwMjQwNzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gTW9kZWxEZXNj5pWw5o2u6aG56K+05piO77yI5omA5pyJ6aG5IOWhq+WGmeS4reaWh++8jOS4jk1vZGVsRGVzY3N4eC54bWzkuK3kv53mjIHkuIDoh7TvvIkNCiAgICAgICAgU2VyaWVz77ya57O75YiXDQogICAgICAgIFdic01vZGVs77ya5LqV5YKo5ZCN56ewDQogICAgICAgIFdlbE1vZGVs77ya5LqV5qih5Z6L5ZCN56ewDQogICAgICAgIFJlc01vZGVsOiDmsrnol4/nsbvlnosNCiAgICAgICAg5rOo77ya5aaC5p6c5p+Q5LiA6aG55rKh5pyJ77yM5YiZ6buY6K6k5omA5pyJ5oOF5Ya15LiLDQotLT4NCjwhLS0gUGFyYUl0ZW3mlbDmja7pobnor7TmmI7vvIjmiYDmnInpgInloavpobnvvIzlpoLmnpzkuI3loavvvIzliJnku45Nb2RlbFBhcmFEZWZpbmVzeHgueG1s6I635Y+W77yJDQogICAgICAgIE5hbWXvvJogIOWQjeensO+8jOW/heWhq++8jOaOqOiNkOWhq+WGmeiLseaWh++8jOW5tuS4lOS4jk1vZGVsUGFyYURlZmluZXN4eC54bWzkuK3kv53mjIHkuIDoh7QNCiAgICAgICAgVW5pdO+8miAg5Y2V5L2N77yM6YCJ5aGrDQogICAgICAgIERlZmF1bHQ66buY6K6k5YC877yM6YCJ5aGrDQogICAgICAgIERpZ2l0OiAg5bCP5pWw5L2N5pWw77yM6YCJ5aGrDQogICAgICAgIE1pbjogICAg5pyA5bCP5YC877yM6YCJ5aGrDQogICAgICAgIE1heDogICAg5pyA5aSn5YC877yM6YCJ5aGrDQogICAgICAgIE90aGVyczog5YW25a6D5b6F5aKe5Yqg6aG5DQotLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0g6ZKI5a+55L2O5riX5qih5Z6LLS0+DQoNCjxSb290Pg0KICAgIDxNb2RlbERlc2MgV2JzTW9kZWw9IuWumuS6leWCqCIgV2VsTW9kZWw9IuebtOS6lSIgUmVzTW9kZWw9IuWPjOmHjeWtlOmamSI+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJLIiBEaWdpdD0iMiIgTWluPSIwLjAxIi8+DQogICAgPC9Nb2RlbERlc2M+DQoNCiAgICA8TW9kZWxEZXNjIFdlbE1vZGVsPSLljovoo4LkupXigJTigJTpg6jliIblsITlvIAiPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgRGlnaXQ9IjIiIE1pbj0iMC4wMSIgLz4NCiAgICA8L01vZGVsRGVzYz4NCg0KICAgIDxNb2RlbERlc2MgV2JzTW9kZWw9IuWumuS6leWCqCIgV2VsTW9kZWw9IuebtOS6lSIgUmVzTW9kZWw9IuWdh+i0qOayueiXjyI+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJLIiBEaWdpdD0iMiIgTWluPSIwLjAxIiBBbGlhcz0i5riX6YCP546HW+S4tOaXtua1i+ivlV0iLz4NCiAgICA8L01vZGVsRGVzYz4NCg0KICAgIDxNb2RlbERlc2MgV2JzTW9kZWw9IuWumuS6leWCqCIgV2VsTW9kZWw9IuebtOS6lSIgUmVzTW9kZWw9IuWdh+i0qOayueiXjyI+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJLIiBEaWdpdD0iMiIgTWluPSIwLjAxIiBBbGlhcz0i5riX6YCP546HW+S4tOaXtua1i+ivlV0iLz4NCiAgICA8L01vZGVsRGVzYz4NCg0KICAgIDxNb2RlbERlc2MgU2VyaWVzPSJIVyI+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IksiIERpZ2l0PSIyIiBNaW49IjAuMDEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IndmIiBEZWZhdWx0PSIwLjAwMyIgVXNlTW9kZT0iNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9InJ3IiBEZWZhdWx0PSIwLjEiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBEZWZhdWx0PSIwLjIiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkIiIERlZmF1bHQ9IjEuMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQm8iIERlZmF1bHQ9IjEuMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQmciIERlZmF1bHQ9IjEuMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iQnciIERlZmF1bHQ9IjEuMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgRGVmYXVsdD0iMi40Ii8+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkMiIERlZmF1bHQ9IjAuNSIgRGlnaXQ9IjIiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUyIgRGVmYXVsdD0iMC41IiBEaWdpdD0iMiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iUzEiIE1pbj0iMzAiIERlZmF1bHQ9IjAiIERpZ2l0PSIyIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJTMiIgTWluPSIzMCIgRGVmYXVsdD0iMCIgRGlnaXQ9IjIiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ib21lZ2FmIiBEZWZhdWx0PSIxIiBEaWdpdD0iMiIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ibGFtYmRhIiBEaWdpdD0iMiIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJNMjEiIERlZmF1bHQ9IjEiLz4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9Ik0zMSIgRGVmYXVsdD0iMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0iRCIgRGVmYXVsdD0iMSIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ3ZiIgRGVmYXVsdD0iMC4wMDMiIFVzZU1vZGU9IjUiIERpZ2l0PSIyIi8+DQoNCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IktmIiBNYXg9IjEwMDAwIi8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJ6dyIgRGVmYXVsdD0iNSIgLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gRGVmYXVsdD0iNTAiIE5hbWU9InhmMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gRGVmYXVsdD0iNTAiIE5hbWU9InhmMiIvPg0KICAgICAgICA8UGFyYUl0ZW0gRGVmYXVsdD0iNTAiIE5hbWU9InhmMyIvPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJGYzEiIERlZmF1bHQ9IjEwMDAiLz4NCjwhLS0gICAgICAgIDxQYXJhSXRlbSBOYW1lPSJGYzIiIERlZmF1bHQ9IjEwMDAiLz4tLT4NCiAgICAgICAgPFBhcmFJdGVtIE5hbWU9IkZjMyIgRGVmYXVsdD0iMTAwMCIvPg0KDQo8IS0tICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icSIgRGVmYXVsdD0iMC41IiBBbGlhcz0i6L+R5LqV5q615rWB6YeP55m+5YiG5q+UIi8+LS0+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJxMSIgRGVmYXVsdD0iMC41IiBBbGlhcz0i6L+R5LqV5q615rWB6YeP55m+5YiG5q+UMSIvPg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0icTIiIERlZmF1bHQ9IjAuNSIgQWxpYXM9Iui/keS6leautea1gemHj+eZvuWIhuavlDIiLz4NCg0KICAgICAgICA8UGFyYUl0ZW0gTmFtZT0ieDEiIFZhbGlkYXRlU3RyPSJHVDpMIDAuNSIvPg0KDQogICAgPC9Nb2RlbERlc2M+DQoNCiAgICA8TW9kZWxEZXNjIFNlcmllcz0iUEYiPg0KDQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJsYW1iZGExIiBBbGlhcz0i56qc5rWB57O75pWwMSIgTWF4PSIwLjEiIERlZmF1bHQ9IjFlLTA2Ii8+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJsYW1iZGEyIiBBbGlhcz0i56qc5rWB57O75pWwMiIgTWF4PSIwLjEiIERlZmF1bHQ9IjFlLTA2Ii8+DQoNCiAgICA8L01vZGVsRGVzYz4NCg0KDQogICAgPE1vZGVsRGVzYyBTZXJpZXM9IlhBIj4NCg0KICAgICAgICA8IS0t5rWL6K+V5paH5pys5qCH6K+G5LiN5LiA6Ie0LS0+DQogICAgICAgIDxQYXJhSXRlbSBOYW1lPSJTIiBBbGlhcz0i6KGo55qu57O75pWwW+S4tOaXtua1i+ivlV0iLz4NCg0KICAgIDwvTW9kZWxEZXNjPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/NmXmlDemo.dat b/Bin/Config/Common/NmXmlDemo.dat new file mode 100644 index 0000000..1f3b4ed --- /dev/null +++ b/Bin/Config/Common/NmXmlDemo.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KPCEtLSAgICDmnKzmlofmoaPnmoTnm67nmoTmmK/kuLrmlbDlgLzor5XkupXpg6jliIbmj5DkvpvkuIDkuKp4bWzop6PmnpDnmoREZW1vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBBdXRob3Iocyk6IHdhbmd6ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIENyZWF0ZWQgRGF0ZTogMjAyNDA5MjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTW9kaWZpZWQgRGF0ZTogMjAyNDA5MjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gSXRlbSDor7TmmI4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE5hbWXvvJogIOiLseaWh+agh+ivhiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgQWxpYXPvvJog5Yir5ZCN77yM5Lit5paH5qCH6K+GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgVGFn77yaICAg5YaF6YOo5qCH6K+GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBQYXJhc++8miDlj4LmlbDliJfooaggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFJlc0NvZGVz77yaIOayueiXj+exu+Wei+e8lueggSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTnVt77yaIOaemuS4vuexu+Wei++8jOS4jm5tVXNlTW9kZeWumuS5ieS4peagvOWvueW6lO+8jDDvvJrmnprkuL4xICAx77ya5p6a5Li+MiAgMu+8muWFtuS7liAgICAgICAgICAgIC0tPg0KPCEtLSAgICBzVGlwc++8miAgICDlh73mlbDmjqXlj6Por7TmmI7kv6Hmga8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCg0KPFJvb3Q+DQo8SXRlbSBOYW1lPSJEZW1vTm9kZTEiIFRhZz0idGFnMSIgUGFyYXM9Iks7UyIgTnVtPSIwIiAvPg0KPEl0ZW0gTmFtZT0iRGVtb05vZGUyIiBBbGlhcz0i6IqC54K5MiIgVGFnPSJ0YWcyIiBQYXJhcz0iSztTO3J3IiBOdW09IjEiIC8+DQo8SXRlbSBOYW1lPSJEZW1vTm9kZTMiIEFsaWFzPSLoioLngrkzIiBUYWc9InRhZzMiIFBhcmFzPSJLO1M7cnciIE51bT0iMiIgLz4NCjwvUm9vdD4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/NullExcel.xls b/Bin/Config/Common/NullExcel.xls new file mode 100644 index 0000000..90ddd25 Binary files /dev/null and b/Bin/Config/Common/NullExcel.xls differ diff --git a/Bin/Config/Common/NullExcel.xlsx b/Bin/Config/Common/NullExcel.xlsx new file mode 100644 index 0000000..1d33ca9 Binary files /dev/null and b/Bin/Config/Common/NullExcel.xlsx differ diff --git a/Bin/Config/Common/PF_TitleAlias.ini b/Bin/Config/Common/PF_TitleAlias.ini new file mode 100644 index 0000000..0e2bbf6 --- /dev/null +++ b/Bin/Config/Common/PF_TitleAlias.ini @@ -0,0 +1,8 @@ +;MPA系统加载数据时的单位模糊匹配配置 + +[Global] +Date = {日}{年}{月}{Day}{Time}{Year}; +Time = {时间}{Time}{T}; +DateTime = {时间}{Time}{T}; +Pressure = {Pre}{P}{压}; +Fluid = {流}{率}{量}; \ No newline at end of file diff --git a/Bin/Config/Common/PressureConversion.dat b/Bin/Config/Common/PressureConversion.dat new file mode 100644 index 0000000..d0cc047 --- /dev/null +++ b/Bin/Config/Common/PressureConversion.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KCTxQYXJhR3wzyJvdXAgTmFtZT0iIiBBbGlhcz0i5LqV5Y+j5Y6L5Yqb5oqY566X5LqV5bqV5Y6L5YqbIj4NCgkJPFBhcmFJdGVtIERlc2M9ImNvbHVtbiBsZW5ndGgiIFVuaXQ9Im0iIFRpcHM9IiIgRGVmYXVsdD0iMjAwMCIgRGlnaXQ9IjIiIE5hbWU9ImNsIiBBbGlhcz0i566h5p+x5oC76ZW/5bqmIiBNaW49IjEiIE1heD0iMTAwMDAiLz4NCgkJPFBhcmFJdGVtIERlc2M9IndlbGxoZWFkIEkuRC4iIFVuaXQ9Im0iIFRpcHM9IiIgRGVmYXVsdD0iMC4wNzYwMCIgRGlnaXQ9IjUiIE5hbWU9IndoRCIgQWxpYXM9IuS6leWPo+WGheW+hCIgTWluPSIxZS0wNSIgTWF4PSIxMDAwIi8+DQoJCTxQYXJhSXRlbSBEZXNjPSJ3ZWxsYm90dG9tIEkuRC4iIFVuaXQ9Im0iIFRpcHM9IiIgRGVmYXVsdD0iMC4wNjIwMCIgRGlnaXQ9IjUiIE5hbWU9IndiRCIgQWxpYXM9IuS6leW6leWGheW+hCIgTWluPSIxZS0wNSIgTWF4PSIxMDAwIi8+DQoJCTxQYXJhSXRlbSBEZXNjPSJ3ZWxsaGVhZCBvaWxwaXBlIE8uRC4iIFVuaXQ9Im0iIFRpcHM9IiIgRGVmYXVsdD0iMC4wODg5MCIgRGlnaXQ9IjUiIE5hbWU9IndoT0QiIEFsaWFzPSLkupXlj6PmsrnnrqHlpJblvoQiIE1pbj0iMWUtMDUiIE1heD0iMTAwMCIvPg0KCQk8UGFyYUl0ZW0gRGVzYz0id2VsbGhlYWQgY2FzaW5nIEkuRC4iIFVuaXQ9Im0iIFRpcHM9IiIgRGVmYXVsdD0iMC4xMjQzMCIgRGlnaXQ9IjUiIE5hbWU9IndoSUQiIEFsaWFzPSLkupXlj6PlpZfnrqHlhoXlvoQiIE1pbj0iMWUtMDUiIE1heD0iMTAwMCIvPg0KCQk8UGFyYUl0ZW0gRGVzYz0id2VsbGJvdHRvbSBvaWxwaXBlIE8uRC4iIFVuaXQ9Im0iIFRpcHM9IiIgRGVmYXVsdD0iMC4wNzMwMiIgRGlnaXQ9IjUiIE5hbWU9IndiT0QiIEFsaWFzPSLkupXlupXmsrnnrqHlpJblvoQiIE1pbj0iMWUtMDUiIE1heD0iMTAwMCIvPg0KCQk8UGFyYUl0ZW0gRGVzYz0id2VsbGJvdHRvbSBjYXNpbmcgSS5ELiIgVW5pdD0ibSIgVGlwcz0iIiBEZWZhdWx0PSIwLjEyMTQwIiBEaWdpdD0iNSIgTmFtZT0id2JJRCIgQWxpYXM9IuS6leW6leWll+euoeWGheW+hCIgTWluPSIxZS0wNSIgTWF4PSIxMDAwIi8+DQoJCTxQYXJhSXRlbSBEZXNjPSJmbHVpZCBkZW5zaXR5IiBVbml0PSJrZy9tXjMiIFRpcHM9IiIgRGVmYXVsdD0iMTAwMCIgRGlnaXQ9IjIiIE5hbWU9InBmIiBBbGlhcz0i5rWB5L2T5a+G5bqmIiBNaW49IjFlLTA1IiBNYXg9IjEwMDAwIi8+DQoJCTxQYXJhSXRlbSBEZXNjPSJjb25zaXN0ZW5jeSBjb2VmZmljaWVudCIgVW5pdD0ibVBhwrdzXm4iIFRpcHM9IiIgRGVmYXVsdD0iNDAiIERpZ2l0PSIyIiBOYW1lPSJjYyIgQWxpYXM9IueooOW6puezu+aVsCIgTWluPSIxZS0wNSIgTWF4PSIxMDAwMCIvPg0KCQk8UGFyYUl0ZW0gRGVzYz0iZmxvdyBiZWhhdmlvciBpbmRleCIgVW5pdD0iZnJhY3Rpb24iIFRpcHM9IiIgRGVmYXVsdD0iMC42MCIgRGlnaXQ9IjIiIE5hbWU9ImZiaSIgQWxpYXM9Iua1geWPmOaMh+aVsCIgTWluPSIxZS0wNSIgTWF4PSIxMDAwMCIvPg0KCTwvUGFyYUdyb3VwPg0KPC9Sb290Pg0K \ No newline at end of file diff --git a/Bin/Config/Common/PvtMethodDefines.dat b/Bin/Config/Common/PvtMethodDefines.dat new file mode 100644 index 0000000..e356e8e --- /dev/null +++ b/Bin/Config/Common/PvtMethodDefines.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAtLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5pivUFZU55u45YWz6YWN572uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgQXV0aG9yKHMpOiB3YW5nemcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIERhdGU6IDIwMTcwNjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAtLT4NCg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4NCjwhLS0gRmx1aWQg5rWB5L2TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTmFtZe+8miAg5ZCN56ewICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBBbGlhc++8miDliKvlkI0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIElucHV0c++8mue7n+S4gOi+k+WFpe+8jOaaguaXtuacqueUqCAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgVGlwc++8miDlpIfms6ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KDQo8IS0tIFB2dCBQdnTlj4LmlbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBLZXnlhbfkvZPorqHnrpfnmoTlj5jph48gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgTmFtZe+8miAg5ZCN56ewICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBNZW1iZXJz77ya57G755qE5Y+C5pWw77yM6ZyA6KaB5LuO5aSW55WM5Lyg5YWl5pWw5YC8ICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE1ldGhvZHPvvJrov5nmmK/orqHnrpfnmoTmlrnms5Xnsbvlnovmj4/ov7AgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBCcm90aGVyc++8muivpeexu+iwg+eUqOeahOWFhOW8n+exu++8jOWmglJz6LCD55SoUGIgICAgICAgICAgICAgLS0+DQoNCjxSb290Pg0KDQogICAgPEZsdWlkIE5hbWU9Ik9pbCIgQWxpYXM9IuayuSIgSW5wdXRzPSJybyIgVGlwcz0iIiA+DQoNCiAgICAgICAgPCEtLeazoeeCueWOi+WKmyBidWJibGVQcmUtLT4NCiAgICAgICAgPFB2dCBOYW1lPSJQYiIgTWVtYmVycz0iUnM7cm87cmc7UHNlcDtUc2VwIiBNZXRob2RzPSJTdGFuZGluZztMYXNhdGVyO1Zhc3F1ZXogYW5kIEJlZ2dzO0dsYXNvIHZvbGF0aWxlO0dsYXNvIG5vbiB2b2xhdGlsZSIgLz4NCiAgICAgICAgPCEtLeawlOayueavlCBnYXNPaWxSYXRpby0tPg0KICAgICAgICA8UHZ0IE5hbWU9IlJzIiBNZW1iZXJzPSJybztyZztQc2VwO1RzZXA7eWc7cnQiIEJyb3RoZXJzPSJQYiIgTWV0aG9kcz0iVGFibGU7U3RhbmRpbmc7TGFzYXRlcjtWYXNxdWV6IGFuZCBCZWdncztHbGFzbyB2b2xhdGlsZTtHbGFzbyBub24gdm9sYXRpbGUiIC8+DQogICAgICAgIDwhLS3msrnkvZPnp6/ns7vmlbAgb2lsVm9sdW1lRmFjdG9yLS0+DQogICAgICAgIDxQdnQgTmFtZT0iQm8iIE1lbWJlcnM9IlJzO3JvO3JnO1BzZXA7VHNlcDtydCIgQnJvdGhlcnM9IlBiO1JzO0NvIiBNZXRob2RzPSJUYWJsZTtVc2VySW5wdXQ7U3RhbmRpbmc7VmFzcXVleiBhbmQgQmVnZ3M7R2xhc287UGV0cm9za3kgYW5kIEZhcnNoYWQiIC8+DQogICAgICAgIDwhLS3msrnljovnvKnns7vmlbAgb2lsQ29tcHJlc3NGYWN0b3ItLT4NCiAgICAgICAgPFB2dCBOYW1lPSJDbyIgTWVtYmVycz0iUnM7cm87cmc7UHNlcDtUc2VwO3J0IiBCcm90aGVycz0iUnMiIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtWYXNxdWV6IGFuZCBCZWdncztQZXRyb3NreSBhbmQgRmFyc2hhZCIgLz4NCiAgICAgICAgPCEtLeayueWvhuW6piBvaWxEZW5zaXR5LS0+DQogICAgICAgIDxQdnQgTmFtZT0iUmhvbyIgTWVtYmVycz0icm87cmc7cHdTQztwZ1NDIiBCcm90aGVycz0iUnM7Qm8iIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtJbnRlcm5hbCIgLz4NCiAgICAgICAgPCEtLeayuem7j+W6piBvaWxWaXNjb3NpdHktLT4NCiAgICAgICAgPCEtLTxQdnQgTmFtZT0iTWl1byIgTWVtYmVycz0iUnM7cm87dGI7cnQiIEJyb3RoZXJzPSJQYjtScyIgTWV0aG9kcz0iVGFibGU7VXNlcklucHV0O0JlZ2dzIEFuZCBSb2JpbnNvbl9EZWFkO0JlZ2dzIEFuZCBSb2JpbnNvbl9MaXZlO0JlYWxfRGVhZDtHbGFzb19EZWFkO1BldHJvc2t5X0RlYWQ7UGV0cm9za3lfTGl2ZTtCZXJnbWFuIEFuZCBTdXR0b25fRGVhZDtCZXJnbWFuIEFuZCBTdXR0b25fTGl2ZSIgLz4tLT4NCg0KICAgICAgICA8UHZ0IE5hbWU9Ik1pdW8iIE1lbWJlcnM9IlJzO3JvO3RiO3J0IiBCcm90aGVycz0iUGI7UnMiIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtCZWdncyBBbmQgUm9iaW5zb247UGV0cm9za3k7QmVyZ21hbiBBbmQgU3V0dG9uIiAvPg0KDQogICAgPC9GbHVpZD4NCg0KICAgIDxGbHVpZCBOYW1lPSJHYXMiIEFsaWFzPSLmsJQiIElucHV0cz0icmciIFRpcHM9IiIgPg0KDQogICAgICAgIDwhLS3msJTkvZPljovnvKnlm6DlrZAgZ2FzQ29tcHJlc3NGYWN0b3IgIOWxj+iUve+8miA7SGlnaFRIaWdoUC0tPg0KICAgICAgICA8UHZ0IE5hbWU9IlpnIiBNZW1iZXJzPSJydDtyZzt0YztQYzt5SDJTO3lDTzI7eU4yIiBCcm90aGVycz0iR2MiIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtEcmFuY2h1aztCZWdncyBBbmQgQnJpbGw7SGFsbFlhcmJvcm91Z2g7RHJhbmNoa0FidUthc3NlbTtDcmFubWVyO0xJIFhGIiAvPg0KICAgICAgICA8IS0t5rCU5L2T5L2T56ev57O75pWwIGdhc1ZvbHVtZUZhY3Rvci0tPg0KICAgICAgICA8UHZ0IE5hbWU9IkJnIiBNZW1iZXJzPSJydCIgQnJvdGhlcnM9IlpnIiBNZXRob2RzPSJUYWJsZTtJbnRlcm5hbCIgLz4NCiAgICAgICAgPCEtLeawlOS9k+WOi+e8qeezu+aVsCBnYXNDb21wcmVzc2JpbGl0eS0tPg0KICAgICAgICA8UHZ0IE5hbWU9IkNnIiBNZW1iZXJzPSIiIEJyb3RoZXJzPSJaZyIgTWV0aG9kcz0iVGFibGU7VXNlcklucHV0O0RyYW5jaHVrIiAvPg0KICAgICAgICA8IS0t5rCU5L2T5a+G5bqmIGdhc0RlbnNpdHktLT4NCiAgICAgICAgPFB2dCBOYW1lPSJSaG9nIiBNZW1iZXJzPSJydDtNZyIgQnJvdGhlcnM9IlpnIiBNZXRob2RzPSJJbnRlcm5hbCIgLz4NCiAgICAgICAgPCEtLeawlOS9k+m7j+W6piBnYXNWaXNjb3NpdHktLT4NCiAgICAgICAgPFB2dCBOYW1lPSJNaXVnIiBNZW1iZXJzPSJyZztydCIgQnJvdGhlcnM9IlpnIiBNZXRob2RzPSJUYWJsZTtVc2VySW5wdXQ7TGVlIiAvPg0KDQogICAgICAgIDwhLS3lh53mnpDkvZPns7vkuKTnm7jlgY/lt67ns7vmlbAgZ2FzVmlzY29zaXR577yMIDIwMjQwOTE0IOaaguaXtumakOWOu++8jOWSqOivomJ3cC0tPg0KICAgICAgICA8IS0tPFB2dCBOYW1lPSJEaWZmZHAiIE1lbWJlcnM9IlBjO1pnO1RjIiBCcm90aGVycz0iWmciIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtEYlBoYXNlRGlmZiIgLz4tLT4NCg0KICAgICAgICA8IS0t5Yed5p6Q5rCU6Zyy54K55Y6L5YqbIGdhc1Zpc2Nvc2l0ee+8jCAyMDI0MDkxNCDmmoLml7bpmpDljrvvvIzlkqjor6Jid3AtLT4NCiAgICAgICAgPCEtLTxQdnQgTmFtZT0iRGV3cCIgTWVtYmVycz0iQzE7QzI7QzM7aUM0O2lDNTtDNjtDNys7eUgyUzt5Q08yO3lOMiIgTWV0aG9kcz0iVGFibGU7VXNlcklucHV0O0Rld1BvaW50IiAvPi0tPg0KDQogICAgPC9GbHVpZD4NCg0KICAgIDxGbHVpZCBOYW1lPSJXYXRlciIgQWxpYXM9IuawtCIgSW5wdXRzPSJydyIgVGlwcz0iIiA+DQoNCiAgICAgICAgPCEtLeawlOawtOavlCx3YXRlckdhc1JhdGlvIC0tPg0KICAgICAgICA8UHZ0IE5hbWU9IlJzdyIgTWVtYmVycz0icnQ7d3MiIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtNY0NhaW4iIC8+DQogICAgICAgIDwhLS3msLTkvZPnp6/ns7vmlbAgd2F0ZXJWb2x1bWVGYWN0b3ItLT4NCiAgICAgICAgPFB2dCBOYW1lPSJCdyIgTWVtYmVycz0icnQiIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtHb3VsZDtNY0NhaW4iIC8+DQogICAgICAgIDwhLS3msLTljovnvKnns7vmlbAgd2F0ZXJDb21wcmVzc0ZhY3Rvci0tPg0KICAgICAgICA8UHZ0IE5hbWU9IkN3IiBNZW1iZXJzPSJydDtSc3ciIE1ldGhvZHM9IlRhYmxlO1VzZXJJbnB1dDtEb2Rzb24gQW5kIFN0YW5kaW5nIiAvPg0KICAgICAgICA8IS0t5rC05a+G5bqmIHdhdGVyRGVuc2l0eS0tPg0KICAgICAgICA8UHZ0IE5hbWU9IlJob3ciIE1lbWJlcnM9InB3U0MiIEJyb3RoZXJzPSJCdyIgTWV0aG9kcz0iSW50ZXJuYWwiIC8+DQogICAgICAgIDwhLS3msLTpu4/luqYgd2F0ZXJWaXNjb3NpdHktLT4NCiAgICAgICAgPFB2dCBOYW1lPSJNaXV3IiBNZW1iZXJzPSJydDt3cztycCIgTWV0aG9kcz0iVGFibGU7VXNlcklucHV0O1ZhbiBXaW5nZW4gQW5kIEZyaWNrO01lZWhhbiBBbmQgUmFtZXkiIC8+DQoNCiAgICA8L0ZsdWlkPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/SpeciCurveDefinesHW.dat b/Bin/Config/Common/SpeciCurveDefinesHW.dat new file mode 100644 index 0000000..03be9e4 --- /dev/null +++ b/Bin/Config/Common/SpeciCurveDefinesHW.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoTmqKHlnovln7rmnKzlj4LmlbAo6L6T5YWlK+i+k+WHuikgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDMwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKirkuLrkuobljLrliIbmlrnkvr/vvIzkuIDkuKrmlofku7blj6rpkojlr7nvvIjkvY7muJfpgI/jgIHogZrlkIjnianpqbHjgIHmsLTlubPkupXvvInkuK3nmoTkuIDnp43nsbvlnosqKiotLT4NCg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0g6YOo5YiG5pWw5o2u6aG56K+05piODQogICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCiAgICAgICAgSWNvbu+8miAgICAgICDlm77moIcNCiAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLSDpkojlr7nkvY7muJfpgI/mqKHlnostLT4NCg0KPFJvb3Q+DQoNCiAgICA8IS0tIOaooeWei+eJueW+gee6v+eCuemFjee9riAtLT4NCiAgICA8U3BlY2lDdXJ2ZURlc2NzIE5hbWU9IiIgQWxpYXM9IuawtOW5s+S6leaooeWeiyIgVGlwcz0iIiA+DQoNCiAgICAgICAgPCEtLSDlhbHmgKfnibnlvoHngrnnur/vvIzmnaXmupDkuo4gU2hlZXTvvJrlhbHmgKflj4LmlbAgLS0+DQogICAgICAgIDxDb21tb25QYXJhbXM+DQogICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJDIiBBbGlhcz0i5LqV5YKo57O75pWwIiBGdW5OYW1lID0gIuS6leWCqOmYtuauteazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOS6leWCqOmYtuauteS7u+S4gOeCueiuoeeul+S6leWCqOezu+aVsCIgUG9pbnRzID0gIuS6leWCqOeCuSIgSWNvbiA9ICIiICBVbml0ID0gIiIvPg0KICAgICAgICAgICAgIDxJdGVtIE5hbWUgPSAiS3YiIEFsaWFzPSLlnoLnm7TmlrnlkJHlnLDlsYLmuJfpgI/njociIEZ1bk5hbWUgPSAi57q/LeWeguW+hOazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOawtOW5s+e6v+aAp+a1geS7u+aEj+eCueWSjOWeguebtOW+hOWQkea1geS7u+aEj+eCuSIgUG9pbnRzID0gIuawtOW5s+e6v+aAp+a1geeCuS/lnoLlkJHlvoTlkJHmtYHngrkiIEljb24gPSAiIi8+ICANCiAgICAgICAgICAgICA8SXRlbSBOYW1lID0gIktoIiBBbGlhcz0i5rC05bmz5pa55ZCR5Zyw5bGC5riX6YCP546HIiBGdW5OYW1lID0gIuawtOW5s+W+hOWQkea1geazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOawtOW5s+e6v+aAp+a1geS7u+aEj+eCueWSjOawtOW5s+W+hOWQkea1geS7u+aEj+eCuSIgUG9pbnRzID0gIuawtOW5s+e6v+aAp+a1geeCuS/msLTlubPlvoTlkJHmtYHngrkiIEljb24gPSAiIi8+ICANCiAgICAgICAgPC9Db21tb25QYXJhbXM+DQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgIDwhLS0g5LqV5YKo5LiO6L2v5Lu255WM6Z2i5a+55bqU6YWN572uIC0tPg0KICAgICAgICA8V0JTUGFyYW1zPg0KICAgICAgICAgICAgPFdCU01vZGVscyBOYW1lPSAiIiBBbGlhcyA9ICIiPg0KICAgICAgICAgICAgPC9XQlNNb2RlbHM+DQogICAgICAgIDwvV0JTUGFyYW1zPg0KICAgICAgICANCiAgICAgICAgIDwhLS0g5LqV5qih5Z6L5LiO6L2v5Lu255WM6Z2i5a+55bqU6YWN572uIO+8iOaooeWei+aYr+WMheWQq+WFs+ezu+avlOWmguWOi+ijguS6le+8jOWPquimgeWMheWQq+WOi+ijguS6leeahOmDveihjO+8iS0tPg0KICAgICAgICA8V0VMUGFyYW1zPg0KICAgICAgICAgICAgPFdFTE1vZGVscyBOYW1lPSAiIiBBbGlhcyA9ICIiPg0KICAgICAgICAgICAgPC9XRUxNb2RlbHM+DQogICAgICAgIDwvV0VMUGFyYW1zPg0KICAgICAgICANCiAgICAgICAgIDwhLS0g5rK56JeP5LiO6L2v5Lu255WM6Z2i5a+55bqU6YWN572uIC0tPg0KICAgICAgICA8UkVTUGFyYW1zPg0KICAgICAgICANCiAgICAgICAgICAgICA8UkVTTW9kZWxzIE5hbWU9ICIiIEFsaWFzID0gIuWQhOWQkeW8guaApyI+DQogICAgICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJLeiIgQWxpYXM9InrmlrnlkJHmuJfpgI/njociIEZ1bk5hbWUgPSAi57q/LeWeguW+hOazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOawtOW5s+e6v+aAp+a1geS7u+aEj+eCueWSjOWeguebtOW+hOWQkea1geS7u+aEj+eCuSIgUG9pbnRzID0gIuawtOW5s+e6v+aAp+a1geeCuS/lnoLlkJHlvoTlkJHmtYHngrkiIEljb24gPSAiIi8+DQogICAgICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJLeSIgQWxpYXM9InnmlrnlkJHmuJfpgI/njociIEZ1bk5hbWUgPSAi5rC05bmz57q/5oCn5rWB5rOVIiBGdW5SZW1hcmsgPSAi5Yip55So5rC05bmz57q/5oCn5rWB5Lu75oSP54K5IiBQb2ludHMgPSAi5rC05bmz57q/5oCn5rWB54K5IiBJY29uID0gIiIvPiAgDQogICAgICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJLeCIgQWxpYXM9InjmlrnlkJHmuJfpgI/njociIEZ1bk5hbWUgPSAi57q/LeawtOW+hOazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOawtOW5s+e6v+aAp+a1geS7u+aEj+eCueWSjOawtOW5s+W+hOWQkea1geS7u+aEj+eCuSIgUG9pbnRzID0gIuawtOW5s+e6v+aAp+a1geeCuS/msLTlubPlvoTlkJHmtYHngrkiIEljb24gPSAiIi8+ICANCg0KICAgICAgICAgICAgIDwvUkVTTW9kZWxzPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICA8L1JFU1BhcmFtcz4NCiAgICAgICAgDQogICAgICAgICA8IS0tIOi+ueeVjOS4jui9r+S7tueVjOmdouWvueW6lOmFjee9riAtLT4NCiAgICAgICAgPEJEWVBhcmFtcz4NCiAgICAgICAgICAgICA8QkRZTW9kZWxzIE5hbWU9ICIiIEFsaWFzID0gIiI+DQogICAgICAgICAgICAgIDwvQkRZTW9kZWxzPg0KICAgICAgICA8L0JEWVBhcmFtcz4NCg0KICAgICAgIA0KICAgIDwvU3BlY2lDdXJ2ZURlc2NzPg0KDQoNCjwvUm9vdD4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/SpeciCurveDefinesLP.dat b/Bin/Config/Common/SpeciCurveDefinesLP.dat new file mode 100644 index 0000000..043564c --- /dev/null +++ b/Bin/Config/Common/SpeciCurveDefinesLP.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoTmqKHlnovln7rmnKzlj4LmlbAo6L6T5YWlK+i+k+WHuikgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDMwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKirkuLrkuobljLrliIbmlrnkvr/vvIzkuIDkuKrmlofku7blj6rpkojlr7nvvIjkvY7muJfpgI/jgIHogZrlkIjnianpqbHjgIHmsLTlubPkupXvvInkuK3nmoTkuIDnp43nsbvlnosqKiotLT4NCg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0g6YOo5YiG5pWw5o2u6aG56K+05piODQogICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCiAgICAgICAgSWNvbu+8miAgICAgICDlm77moIcNCiAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLSDpkojlr7nkvY7muJfpgI/mqKHlnostLT4NCg0KPFJvb3Q+DQoNCiAgICA8IS0tIOaooeWei+eJueW+gee6v+eCuemFjee9riAtLT4NCiAgICA8U3BlY2lDdXJ2ZURlc2NzIE5hbWU9IiIgQWxpYXM9IuS9jua4l+mAj+aooeWeiyIgVGlwcz0iIiA+DQoNCiAgICAgICAgPCEtLSDlhbHmgKfnibnlvoHngrnnur/vvIzmnaXmupDkuo4gU2hlZXTvvJrlhbHmgKflj4LmlbAgLS0+DQogICAgICAgIDxDb21tb25QYXJhbXM+DQogICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJDIiBBbGlhcz0i5LqV5YKo57O75pWwIiBGdW5OYW1lID0gIuS6leWCqOmYtuauteazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOS6leWCqOmYtuauteS7u+S4gOeCueiuoeeul+S6leWCqOezu+aVsCIgUG9pbnRzID0gIuS6leWCqOeCuSIgSWNvbiA9ICIiIFVuaXQgPSAiIi8+DQogICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJLIiBBbGlhcz0i5Zyw5bGC5riX6YCP546HIiBGdW5OYW1lID0gIuW+hOWQkea1geazlTvls7DlgLzms5U75bOw5YC8LeW+hOWQkea1geazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOW+hOWQkea1gemYtuauteS7u+aEj+S4gOeCuTvliKnnlKjov4fmuKHmtYHls7DlgLzngrnlnZDmoIc75Yip55So6L+H5rih5rWB5bOw5YC854K55ZKM5b6E5ZCR5rWB5Lu75oSP54K55Z2Q5qCHIiBQb2ludHMgPSAi5b6E5ZCR5rWB54K5O+WzsOWAvOeCuTvls7DlgLzngrkv5b6E5ZCR5rWB54K5IiBJY29uID0gIiIvPiAgDQogICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJTIiBBbGlhcz0i6KGo55qu57O75pWwIiBGdW5OYW1lID0gIuaoquWdkOagh+azlTvnurXlnZDmoIfms5UiIEZ1blJlbWFyayA9ICLlgJ/liqnkupXlgqjpmLbmrrXlkoznrKzkuIDlvoTlkJHmtYHpmLbmrrXkuqTngrnlnZDmoIflkoznrKzkuIDov4fmuKHmtYHls7DlgLzngrk75Yip55So6L+H5rih5rWB5bOw5YC854K55ZKM5b6E5ZCR5rWB5Lu75oSP54K55Z2Q5qCHIiBQb2ludHMgPSAi5LqV5YKo54K5L+WzsOWAvOeCuTvls7DlgLzngrkv5b6E5ZCR5rWB54K5IiBJY29uID0gIiIvPiAgICAgICANCiAgICAgICAgPC9Db21tb25QYXJhbXM+DQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgIDwhLS0g5LqV5YKo5LiO6L2v5Lu255WM6Z2i5a+55bqU6YWN572uIC0tPg0KICAgICAgICA8V0JTUGFyYW1zPg0KICAgICAgICAgICAgPFdCU01vZGVscz4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPC9XQlNNb2RlbHM+DQogICAgICAgIDwvV0JTUGFyYW1zPg0KICAgICAgICANCiAgICAgICAgIDwhLS0g5LqV5qih5Z6L5LiO6L2v5Lu255WM6Z2i5a+55bqU6YWN572uIO+8iOaooeWei+aYr+WMheWQq+WFs+ezu+avlOWmguWOi+ijguS6le+8jOWPquimgeWMheWQq+WOi+ijguS6leeahOmDveihjO+8iS0tPg0KICAgICAgICA8V0VMUGFyYW1zPg0KICAgICAgICAgICAgPFdFTE1vZGVscyBOYW1lPSAiIiBBbGlhcyA9ICLljovoo4LkupXigJTigJTlnYfljIDmtYE75Y6L6KOC5LqV4oCU4oCU5peg6ZmQ5a+85rWBO+WOi+ijguS6leKAlOKAlOaciemZkOWvvOa1gTvljovoo4LkupXigJTigJTpg6jliIblsITlvIA75Y6L6KOC5LqV4oCU4oCU5Lik5q615a+85rWB6IO95YqbO+WOi+ijguS6leKAlOKAlOS4ieauteWvvOa1geiDveWKmyI+DQogICAgICAgICAgICAgICAgIDxJdGVtIE5hbWUgPSAiSyIgQWxpYXM9IuWcsOWxgua4l+mAj+eOhyIgRnVuTmFtZSA9ICLnur/mgKfmtYEt5b6E5ZCR5rWB5rOVO+e6v+aAp+a1gS3lj4zlvoTlkJHmtYHms5U75b6E5ZCR5rWBLeWPjOW+hOWQkea1geazlTvnur/mgKfmtYEt5Y+M57q/5oCn5rWB5rOVIiBGdW5SZW1hcmsgPSAi5Yip55So57q/5oCn5rWB6Zi25q615LiO5b6E5ZCR5rWB6Zi25q615Lqk54K55pWw5o2uO+WIqeeUqOe6v+aAp+a1gemYtuauteS4juWPjOW+hOWQkea1gemYtuauteS6pOeCueaVsOaNrjvliKnnlKjlj4zlvoTlkJHmtYHpmLbmrrXkuI7lvoTlkJHmtYHpmLbmrrXkuqTngrnmlbDmja475Yip55So5Y+M57q/5oCn5rWB6Zi25q615LiO57q/5oCn5rWB6Zi25q615Lqk54K55pWw5o2uIiBQb2ludHMgPSAi57q/5oCn5rWBMWjngrkv57q/5oCn5rWB5LiO5b6E5ZCR5rWB5Lqk54K5O+e6v+aAp+a1gTFo54K5L+e6v+aAp+a1geS4juWPjOW+hOWQkea1geS6pOeCuTvnur/mgKfmtYExaOeCuS/lvoTlkJHmtYHkuI7lj4zlvoTlkJHmtYHkuqTngrk757q/5oCn5rWB5LiO5Y+M57q/5oCn5rWB5Lqk54K5IiBJY29uID0gIiIvPg0KICAgICAgICAgICAgICAgICA8SXRlbSBOYW1lID0gInhmIiBBbGlhcz0i6KOC57yd5Y2K6ZW/IiBGdW5OYW1lID0gIuW+hOWQkea1geazlTvnur/mgKfmtYEt5b6E5ZCR5rWB5rOVO+e6v+aAp+a1gS3lj4zlvoTlkJHmtYHms5U75b6E5ZCR5rWBLeWPjOW+hOWQkea1geazlTvnur/mgKfmtYEt5Y+M57q/5oCn5rWB5rOVIiBGdW5SZW1hcmsgPSAi5Yip55So5b6E5ZCR5rWB6Zi25q615Lu75LiA54K55pWw5o2uO+WIqeeUqOe6v+aAp+a1gemYtuauteS4juW+hOWQkea1gemYtuauteS6pOeCueaVsOaNrjvliKnnlKjnur/mgKfmtYHpmLbmrrXkuI7lj4zlvoTlkJHmtYHpmLbmrrXkuqTngrnmlbDmja475Yip55So5Y+M5b6E5ZCR5rWB6Zi25q615LiO5b6E5ZCR5rWB6Zi25q615Lqk54K55pWw5o2uO+WIqeeUqOWPjOe6v+aAp+a1gemYtuauteS4jue6v+aAp+a1gemYtuauteS6pOeCueaVsOaNriIgUG9pbnRzID0gIue6v+aAp+a1gTFo54K5L+W+hOWQkea1geeCuTvnur/mgKfmtYExaOeCuS/nur/mgKfmtYHkuI7lvoTlkJHmtYHkuqTngrk757q/5oCn5rWBMWjngrkv57q/5oCn5rWB5LiO5Y+M5b6E5ZCR5rWB5Lqk54K5O+e6v+aAp+a1gTFo54K5L+W+hOWQkea1geS4juWPjOW+hOWQkea1geS6pOeCuTvnur/mgKfmtYHkuI7lj4znur/mgKfmtYHkuqTngrkiIEljb24gPSAiIi8+DQogICAgICAgICAgICA8L1dFTE1vZGVscz4NCiAgICAgICAgICANCiAgICAgICAgICAgIDxXRUxNb2RlbHMgTmFtZT0gIiIgQWxpYXMgPSAi5Y6L6KOC5LqV4oCU4oCU5pyJ6ZmQ5a+85rWBO+WOi+ijguS6leKAlOKAlOmDqOWIhuWwhOW8gDvljovoo4LkupXigJTigJTkuKTmrrXlr7zmtYHog73lips75Y6L6KOC5LqV4oCU4oCU5LiJ5q615a+85rWB6IO95YqbIj4NCiAgICAgICAgICAgICAgICA8SXRlbSBOYW1lID0gIkZjIiBBbGlhcz0i5a+85rWB6IO95YqbIiBGdW5OYW1lID0gIuWPjOe6v+aAp+a1geazlTvnur/mgKfmtYEt5Y+M57q/5oCn5rWB5rOVO+W+hOWQkea1gS3lj4znur/mgKfmtYHms5UiIEZ1blJlbWFyayA9ICLliKnnlKjlj4znur/mgKfmtYHpmLbmrrU75Yip55So5Y+M57q/5oCn5rWB5ZKM57q/5oCn5rWB5Lqk54K555qE5qiq5Z2Q5qCHO+WIqeeUqOWPjOe6v+aAp+a1geWSjOW+hOWQkea1geS6pOeCueeahOaoquWdkOaghyIgUG9pbnRzID0gIuWPjOe6v+aAp+a1gTFo54K5O+e6v+aAp+a1geS4juWPjOe6v+aAp+a1geS6pOeCuTvlvoTlkJHmtYHkuI7lj4znur/mgKfmtYHkuqTngrkiIEljb24gPSAiIi8+DQogICAgICAgICAgICA8L1dFTE1vZGVscz4NCiAgICAgICAgPC9XRUxQYXJhbXM+DQogICAgICAgIA0KICAgICAgICAgPCEtLSDmsrnol4/kuI7ova/ku7bnlYzpnaLlr7nlupTphY3nva4gLS0+DQogICAgICAgIDxSRVNQYXJhbXM+DQogICAgICAgIA0KICAgICAgICAgICAgIDxSRVNNb2RlbHMgTmFtZT0gIiIgQWxpYXMgPSAi5Y+M6YeN5a2U6ZqZO+WPjOmHjea4l+mAjyI+DQogICAgICAgICAgICAgICAgIDxJdGVtIE5hbWUgPSAib21lZ2EiIEFsaWFzPSLlgqjlrrnmr5QiIEZ1bk5hbWUgPSAi5b6E5ZCR5rWBLeacgOS9juazlTvnrKzkuIDmnIDkvY7ms5U756ys5LqM5pyA5L2O5rOVIiBGdW5SZW1hcmsgPSAi5Yip55So5b6E5ZCR5rWB57q15Z2Q5qCH5ZKM5pyA5L2O54K557q15Z2Q5qCHO+WIqeeUqOesrOS4gOW+hOWQkea1gee7k+adn+eCueeahOaoquWdkOagh+WSjOacgOS9jueCueaoquWdkOaghzvliKnnlKjnrKzkuozlvoTlkJHmtYHlvIDlp4vngrnnmoTmqKrlnZDmoIflkozmnIDkvY7ngrnmqKrlnZDmoIciIFBvaW50cyA9ICLlj4zph43ku4votKjmnIDkvY7ngrkv5b6E5ZCR5rWB54K5O+WPjOmHjeS7i+i0qOacgOS9jueCuS/nrKzkuIDlvoTlkJHmtYHnu5PmnZ/ngrk75Y+M6YeN5LuL6LSo5pyA5L2O54K5L+esrOS6jOW+hOWQkea1geW8gOWni+eCuSIgSWNvbiA9ICIiLz4NCiAgICAgICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJsYW1iZGEiIEFsaWFzPSLnqpzmtYHns7vmlbAiIEZ1bk5hbWUgPSAi5pyA5L2O5rOVO+esrOS4gOacgOS9juazlTvnrKzkuozmnIDkvY7ms5U75pyA5L2OLeWCqOWuueavlOazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOWOi+WKm+WvvOaVsOabsue6v+S4iuacgOS9jueCueeahOaoque6teWdkOaghzvliKnnlKjnrKzkuIDlvoTlkJHmtYHnu5PmnZ/ngrnnmoTmqKrlnZDmoIflkozmnIDkvY7ngrnmqKrlnZDmoIc75Yip55So56ys5LqM5b6E5ZCR5rWB5byA5aeL54K555qE5qiq5Z2Q5qCH5ZKM5pyA5L2O54K55qiq5Z2Q5qCHO+WIqeeUqOacgOS9jueCueeahOaoque6teWdkOagh+WSjOWCqOWuueavlCIgUG9pbnRzID0gIuWPjOmHjeS7i+i0qOacgOS9jueCuTvlj4zph43ku4votKjmnIDkvY7ngrkv56ys5LiA5b6E5ZCR5rWB57uT5p2f54K5O+WPjOmHjeS7i+i0qOacgOS9jueCuS/nrKzkuozlvoTlkJHmtYHlvIDlp4vngrk75Y+M6YeN5LuL6LSo5pyA5L2O54K5IiBJY29uID0gIiIvPiAgDQogICAgICAgICAgICAgPC9SRVNNb2RlbHM+DQogICAgICAgICAgICAgDQogICAgICAgICAgICAgPFJFU01vZGVscyBOYW1lPSAiIiBBbGlhcyA9ICLlj4zljLrlpI3lkIg75LiJ5Yy65aSN5ZCIIj4NCiAgICAgICAgICAgICAgICAgPEl0ZW0gTmFtZSA9ICJNIiBBbGlhcz0i5rWB5bqm5q+UIiBGdW5OYW1lID0gIuesrOS6jOW+hOWQkea1geazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOWkjeWQiOayueiXj+eCuSIgUG9pbnRzID0gIuW+hOWQkea1geeCuS/lpI3lkIjmsrnol4/ngrkiIEljb24gPSAiIi8+ICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICA8SXRlbSBOYW1lID0gIlJpIiBBbGlhcz0i5aSN5ZCI5Y2K5b6EIiBGdW5OYW1lID0gIuesrOS6jOW+hOWQkea1geazlSIgRnVuUmVtYXJrID0gIuWIqeeUqOWkjeWQiOayueiXj+eCuSIgUG9pbnRzID0gIuWkjeWQiOayueiXj+eCuSIgSWNvbiA9ICIiLz4NCiAgICAgICAgICAgICA8L1JFU01vZGVscz4NCiAgICAgICAgICAgICANCiAgICAgICAgPC9SRVNQYXJhbXM+DQogICAgICAgIA0KICAgICAgICAgPCEtLSDovrnnlYzkuI7ova/ku7bnlYzpnaLlr7nlupTphY3nva4gLS0+DQogICAgICAgIDxCRFlQYXJhbXM+DQogICAgICAgICAgICAgPEJEWU1vZGVscyBOYW1lPSAiIiBBbGlhcyA9ICLkuIDmnaHovrnnlYwiPg0KICAgICAgICAgICAgICAgICA8SXRlbSBOYW1lID0gIngxIiBBbGlhcz0i6L6555WM5bC65a+4IiBGdW5OYW1lID0gIuWwgemXrei+ueeVjOa1geazlTvlrprljovovrnnlYzmtYHms5UiIEZ1blJlbWFyayA9ICLliKnnlKjlsIHpl63ovrnnlYzmtYHngrk75Yip55So5a6a5Y6L6L6555WM5rWB54K5IiBQb2ludHMgPSAi5bCB6Zet6L6555WM5rWB54K5O+WumuWOi+i+ueeVjOa1geeCuSIgSWNvbiA9ICIiLz4gICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgIDwvQkRZTW9kZWxzPg0KICAgICAgICA8L0JEWVBhcmFtcz4NCg0KICAgICAgIA0KICAgIDwvU3BlY2lDdXJ2ZURlc2NzPg0KDQoNCjwvUm9vdD4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/TableStructs.dat b/Bin/Config/Common/TableStructs.dat new file mode 100644 index 0000000..2c8c4be --- /dev/null +++ b/Bin/Config/Common/TableStructs.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhLS0g57yW6L6R5L2/55wzySoIFhNTFNweSB2MjAwNiBVIChodHRwOi8vd3d3LmFsdG92YS5jb20pIOeUsSBhbnkgKGFueSkgLS0+DQo8IS0tIOWxnuaAp+WAvOWtl+auteW5tumdnuW/hemhu++8jOWPr+S7peWPquWIl+WHuuadpeWPluWAvOS4jeWQjOS6jum7mOiupOWAvOeahOWxnuaApy0tPg0KDQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gTm9kZSDnuqfliKsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBOYW1l77yaICDmlbDmja7ooaggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77yaIOaVsOaNruihqOS4reaWh+WQjSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFR5cGU6ICAg5a+55bqU55qE5a+56LGh57G75YirICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQogIA0KPCEtLSBGaWVsZEluZm8g57qn5YirICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEZpZWxkTmFtZe+8miAg5a2X5q615ZCN56ewICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77ya5a2X5q615Lit5paH5ZCNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgYktlee+8muaYr+WQpuS4u+mUriAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgZURhdGFUeXBl77ya5a2X5q6157G75Z6L77yIMO+8muWtl+espuS4su+8iOaWh+acrO+8iSAx77ya5pW05b2i77yI5ZCr5p6a5Li+77yJICAy77yaRmxvYXTmlbDlgLwgIDPvvJrlm77lg48gIDTvvJrkuozov5vliLbvvIkgICAgICAtLT4NCjwhLS0gICAgc1VuaXTvvJrljZXkvY0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIG1heO+8muacgOWkp++8jOavlOi+g+eyl+eahOS4gOe6pyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBtaW7vvJrmnIDlsI/vvIzmr5TovoPnspfnmoTkuIDnuqcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGlnaXQ6IOWwj+aVsOS9jSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8Um9vdD4NCiAgICA8VHlwZU9mPg0KICAgICAgICA8Tm9kZSBBbGlhcz0iYuW3peWMuuaVsOaNruihqCIgTmFtZT0iQl9QUk9KRUNUIj4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuW3peWMuuWQjeensCIgYktleT0iMSIgRmllbGROYW1lPSJQcm9qTmFtZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5pWw5o2u5a2Y5YKo57G75Z6LIiBGaWVsZE5hbWU9IkRiVHlwZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5pWw5o2u5rqQIiBGaWVsZE5hbWU9IkRiVXJsIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmlbDmja7niYjmnKzlj7ciIEZpZWxkTmFtZT0iRGJWZXIiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuayueeUsOS7o+eggSIgRmllbGROYW1lPSJGaWVsZENvZGUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuayueeUsOWQjeensCIgRmllbGROYW1lPSJGaWVsZE5hbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuW3peWMuuaPj+i/sCIgRmllbGROYW1lPSJQcm9qRGVzYyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5Yib5bu65Lq6IiBGaWVsZE5hbWU9IkNyZWF0b3IiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWIm+W7uuaXtumXtCIgRmllbGROYW1lPSJDcmVhdGVkVGltZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L+u5pS55Lq6IiBGaWVsZE5hbWU9Ik1vZGlmaWVyIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkv67mlLnml7bpl7QiIEZpZWxkTmFtZT0iTW9kaWZpZWRUaW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlpIfms6giIEZpZWxkTmFtZT0iUmVtYXJrIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUxIiBGaWVsZE5hbWU9IkV4dDEiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIEZpZWxkTmFtZT0iRXh0MiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MyIgRmllbGROYW1lPSJFeHQzIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU0IiBGaWVsZE5hbWU9IkV4dDQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIEZpZWxkTmFtZT0iRXh0NSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L05vZGU+DQoNCiAgICAgICAgPE5vZGUgQWxpYXM9ImLkupXln7rnoYDkv6Hmga/ooagiIE5hbWU9IkJfV0VMTCI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmsrnnlLDku6PnoIEiIEZpZWxkTmFtZT0iRmllbGRDb2RlIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmsrnnlLDlkI3np7AiIEZpZWxkTmFtZT0iRmllbGROYW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLljLrlnZfku6PnoIEiIEZpZWxkTmFtZT0iQmxvY2tDb2RlIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLljLrlnZflkI3np7AiIEZpZWxkTmFtZT0iQmxvY2tOYW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkupXlj7ciIGJLZXk9IjEiIEZpZWxkTmFtZT0iV2VsbENvZGUiIC8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkupXlkI0iIEZpZWxkTmFtZT0iV2VsbE5hbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6leWIqyIgRmllbGROYW1lPSJXZWxsVHlwZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5LqV5Z6LIiBGaWVsZE5hbWU9IldlbGxDbGFzcyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLkupXljYrlvoQiIEZpZWxkTmFtZT0iV2VsbFJhZGl1cyIgc1VuaXQ9Im0iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5LqV5Y+j5Z2Q5qCHWCIgRmllbGROYW1lPSJMb2NhdGlvblgiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5LqV5Y+j5Z2Q5qCHWSIgRmllbGROYW1lPSJMb2NhdGlvblkiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWIm+W7uuS6uiIgRmllbGROYW1lPSJDcmVhdG9yIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLliJvlu7rml7bpl7QiIEZpZWxkTmFtZT0iQ3JlYXRlZFRpbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS/ruaUueS6uiIgRmllbGROYW1lPSJNb2RpZmllciIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L+u5pS55pe26Ze0IiBGaWVsZE5hbWU9Ik1vZGlmaWVkVGltZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgRmllbGROYW1lPSJFeHQxIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUyIiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgRmllbGROYW1lPSJFeHQ0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU1IiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTYiIEZpZWxkTmFtZT0iRXh0NiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NyIgRmllbGROYW1lPSJFeHQ3IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU4IiBGaWVsZE5hbWU9IkV4dDgiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTkiIEZpZWxkTmFtZT0iRXh0OSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MTAiIEZpZWxkTmFtZT0iRXh0MTAiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQogICAgICAgIDxOb2RlIEFsaWFzPSJi5Zyw5bGC5pWw5o2u6KGoIiBOYW1lPSJCX0xBWUVSIj4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6leWPtyIgYktleT0iMSIgRmllbGROYW1lPSJXZWxsQ29kZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5bGC5L2NIiBiS2V5PSIxIiBGaWVsZE5hbWU9IkxheWVyTmFtZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLpobbnlYzmlpzmt7EiIEZpZWxkTmFtZT0iVG9wTUQiIHNVbml0PSJtIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuW6leeVjOaWnOa3sSIgRmllbGROYW1lPSJCb3R0b21NRCIgc1VuaXQ9Im0iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i6aG255WM5Z6C5rexIiBGaWVsZE5hbWU9IlRvcFRWRCIgc1VuaXQ9Im0iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5bqV55WM5Z6C5rexIiBGaWVsZE5hbWU9IkJvdHRvbVRWRCIgc1VuaXQ9Im0iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5pac5Y6aIiBGaWVsZE5hbWU9IlRoaWNrbmVzc00iIHNVbml0PSJtIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuWeguWOmiIgRmllbGROYW1lPSJUaGlja25lc3NUViIgc1VuaXQ9Im0iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWxguS9jeaPj+i/sCIgRmllbGROYW1lPSJMYXllckRlc2MiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWkh+azqCIgRmllbGROYW1lPSJSZW1hcmsiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTEiIEZpZWxkTmFtZT0iRXh0MSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MiIgRmllbGROYW1lPSJFeHQyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBGaWVsZE5hbWU9IkV4dDMiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTQiIEZpZWxkTmFtZT0iRXh0NCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NSIgRmllbGROYW1lPSJFeHQ1IiBWaXNpYmxlPSIwIi8+DQoNCiAgICAgICAgPC9Ob2RlPg0KDQogICAgICAgIDxOb2RlIEFsaWFzPSJi5rCU5L2T57uE5YiGIiBOYW1lPSJCX0dBU0NPTlNUIj4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6leWPtyIgYktleT0iMSIgRmllbGROYW1lPSJXZWxsQ29kZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i55Sy54O3IiBGaWVsZE5hbWU9IkMxIiBlRGF0YVR5cGU9IjIiIC8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkuZnng7ciIEZpZWxkTmFtZT0iQzIiIGVEYXRhVHlwZT0iMiIgLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS4meeDtyIgRmllbGROYW1lPSJDMyIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5byC5LiB54O3IiBGaWVsZE5hbWU9ImlDNCIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5q2j5LiB54O3IiBGaWVsZE5hbWU9Im5DNCIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5byC5oiK54O3IiBGaWVsZE5hbWU9ImlDNSIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5q2j5oiK54O3IiBGaWVsZE5hbWU9Im5DNSIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5bex54O3IiBGaWVsZE5hbWU9IkM2IiBlRGF0YVR5cGU9IjIiIC8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLluprng7ciIEZpZWxkTmFtZT0iQzciIGVEYXRhVHlwZT0iMiIgLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9Iui+m+eDtyIgRmllbGROYW1lPSJDOCIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aOs54O3IiBGaWVsZE5hbWU9IkM5IiBlRGF0YVR5cGU9IjIiIC8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLokbXng7ciIEZpZWxkTmFtZT0iQzEwIiBlRGF0YVR5cGU9IjIiIC8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLljYHkuIDng7crIiBGaWVsZE5hbWU9IkMxMSsiIGVEYXRhVHlwZT0iMiIgLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6jOawp+WMlueisyIgRmllbGROYW1lPSJDTzIiIGVEYXRhVHlwZT0iMiIgLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuawruawlCIgRmllbGROYW1lPSJOMiIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i56Gr5YyW5rCiIiBGaWVsZE5hbWU9IkgyUyIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5YW25a6DIiBGaWVsZE5hbWU9Ik90aGVycyIgZURhdGFUeXBlPSIyIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgRmllbGROYW1lPSJFeHQxIiBlRGF0YVR5cGU9IjIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIEZpZWxkTmFtZT0iRXh0MiIgZURhdGFUeXBlPSIyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBGaWVsZE5hbWU9IkV4dDMiIGVEYXRhVHlwZT0iMiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgRmllbGROYW1lPSJFeHQ0IiBlRGF0YVR5cGU9IjIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIEZpZWxkTmFtZT0iRXh0NSIgZURhdGFUeXBlPSIyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvTm9kZT4NCg0KICAgICAgICA8Tm9kZSBBbGlhcz0icOWCqOWxgueJqeaAp+aVsOaNruihqCIgTmFtZT0iUF9EQVRBX1JFUyI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLluo/lj7ciIGJLZXk9IjEiIEZpZWxkTmFtZT0iSUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6leWPtyIgRmllbGROYW1lPSJXZWxsQ29kZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5YKo5bGC5ZCN56ewIiBGaWVsZE5hbWU9IkxheWVyTmFtZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLlgqjlsYLmnInmlYjljprluqYiIEZpZWxkTmFtZT0iRWZmVGhpY2tuZXNzIiBzVW5pdD0ibSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLlgqjlsYLpobbmt7EiIEZpZWxkTmFtZT0iUmVzVG9wRGVwdGgiIHNVbml0PSJtIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuWCqOWxguW6lea3sSIgRmllbGROYW1lPSJSZXNCb3R0b21EZXB0aCIgc1VuaXQ9Im0iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5a2U6ZqZ5bqmIiBGaWVsZE5hbWU9IlBvciIgc1VuaXQ9IiUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5riX6YCP546HIiBGaWVsZE5hbWU9IksiIHNVbml0PSJtRCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLlnLDlsYLljovlipsiIEZpZWxkTmFtZT0iRm9ybWF0aW9uUHJlc3MiIHNVbml0PSJNUGEiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5Zyw5bGC5rip5bqmIiBGaWVsZE5hbWU9IkZvcm1hdGlvblRlbXAiIHNVbml0PSLihIMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiBGaWVsZE5hbWU9IlRvdGFsQ0YiIHNVbml0PSIxL01QYSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDEiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIGVEYXRhVHlwZT0iMiIgRmllbGROYW1lPSJFeHQyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBlRGF0YVR5cGU9IjIiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIGVEYXRhVHlwZT0iMiIgRmllbGROYW1lPSJFeHQ1IiBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvTm9kZT4NCiAgICAgICAgPE5vZGUgQWxpYXM9InDmtYHkvZPnianmgKfmlbDmja7ooagiIE5hbWU9IlBfREFUQV9GTFVJRCI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLluo/lj7ciIGJLZXk9IjEiIEZpZWxkTmFtZT0iSUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6leWPtyIgRmllbGROYW1lPSJXZWxsQ29kZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLmurbop6PmsJTmsrnmr5QiIEZpZWxkTmFtZT0iR09SIiBzVW5pdD0ibTMvbTMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5Zyw5bGC5Y6f5rK55Y6L57yp57O75pWwIiBGaWVsZE5hbWU9Ik9pbENGIiBzVW5pdD0iMS9NUGEiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5Zyw5bGC5Y6f5rK55L2T56ev57O75pWwIiBGaWVsZE5hbWU9Ik9pbFZGIiBzVW5pdD0ibV4zL21eMyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLlnLDlsYLljp/msrnpu4/luqYiIEZpZWxkTmFtZT0iT2lsVmlzYyIgc1VuaXQ9Im1QYS5zIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuWcsOWxguWOn+ayueWvhuW6piIgRmllbGROYW1lPSJPaWxEZW5zIiBzVW5pdD0iZy9jbTMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5rCU5L2T5YGP5beu57O75pWwIiBGaWVsZE5hbWU9Ikdhc0RldmlGIiBzVW5pdD0ibV4zL21eMyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLlnLDlsYLlpKnnhLbmsJTpu4/luqYiIEZpZWxkTmFtZT0iR2FzVmlzYyIgc1VuaXQ9Im1QYS5zIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuWcsOWxguWkqeeEtuawlOS9k+enr+ezu+aVsCIgRmllbGROYW1lPSJHYXNWRiIgc1VuaXQ9Im1eMy9tXjMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5Zyw5bGC5aSp54S25rCU5a+G5bqmIiBGaWVsZE5hbWU9Ikdhc0RlbnMiIHNVbml0PSJnL2NtMyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLlnLDlsYLmsLTljovnvKnns7vmlbAiIEZpZWxkTmFtZT0iV2F0ZXJDRiIgc1VuaXQ9IjEvTVBhIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuWcsOWxguawtOS9k+enr+ezu+aVsCIgRmllbGROYW1lPSJXYXRlclZGIiBzVW5pdD0ibV4zL21eMyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLlnLDlsYLmsLTpu4/luqYiIEZpZWxkTmFtZT0iV2F0ZXJWaXNjIiBzVW5pdD0ibVBhLnMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5Zyw5bGC5rC05a+G5bqmIiBGaWVsZE5hbWU9IldhdGVyRGVucyIgc1VuaXQ9ImcvY20zIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlpIfms6giIEZpZWxkTmFtZT0iUmVtYXJrIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUxIiBlRGF0YVR5cGU9IjIiIEZpZWxkTmFtZT0iRXh0MSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MiIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIGVEYXRhVHlwZT0iMiIgRmllbGROYW1lPSJFeHQzIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU0IiBlRGF0YVR5cGU9IjIiIEZpZWxkTmFtZT0iRXh0NCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NSIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KICAgICAgICA8Tm9kZSBBbGlhcz0icOebkea1i+iuoemHj+WOi+WKm+aVsOaNruihqCIgTmFtZT0iUF9EQVRBX0dBVUdFX1AiPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5bqP5Y+3IiBiS2V5PSIxIiBGaWVsZE5hbWU9IklEIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkupXlj7ciIEZpZWxkTmFtZT0iV2VsbENvZGUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaXtumXtOagvOW8jyIgRmllbGROYW1lPSJUaW1lRm9ybWF0Ii8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLml7bpl7QiIEZpZWxkTmFtZT0iR2F1Z2VUaW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuWOi+WKm+aVsOaNriIgRmllbGROYW1lPSJHYXVnZURhdGEiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuiuoemHj+iuoeWQjeensCIgRmllbGROYW1lPSJHYXVnZU5hbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWIm+W7uuS6uiIgRmllbGROYW1lPSJDcmVhdG9yIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLliJvlu7rml7bpl7QiIEZpZWxkTmFtZT0iQ3JlYXRlZFRpbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS/ruaUueS6uiIgRmllbGROYW1lPSJNb2RpZmllciIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L+u5pS55pe26Ze0IiBGaWVsZE5hbWU9Ik1vZGlmaWVkVGltZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgRmllbGROYW1lPSJFeHQxIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUyIiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgRmllbGROYW1lPSJFeHQ0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU1IiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KICAgICAgICA8Tm9kZSBBbGlhcz0icOebkea1i+iuoemHj+a1gemHj+aVsOaNruihqCIgTmFtZT0iUF9EQVRBX0dBVUdFX0YiPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5bqP5Y+3IiBiS2V5PSIxIiBGaWVsZE5hbWU9IklEIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkupXlj7ciIEZpZWxkTmFtZT0iV2VsbENvZGUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaXtumXtOagvOW8jyIgRmllbGROYW1lPSJUaW1lRm9ybWF0Ii8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLml7bpl7QiIEZpZWxkTmFtZT0iR2F1Z2VUaW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9Iua1gemHjyIgRmllbGROYW1lPSJHYXVnZURhdGEiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuiuoemHj+iuoeWQjeensCIgRmllbGROYW1lPSJHYXVnZU5hbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5rWB6YePMiIgRmllbGROYW1lPSJHYXVnZURhdGFFeDIiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5rWB6YePMyIgRmllbGROYW1lPSJHYXVnZURhdGFFeDMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIxIiBBbGlhcz0i5aSa55u4IiBGaWVsZE5hbWU9Ik11bHRpUGhhc2UiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IumYtuair+exu+WeiyIgRmllbGROYW1lPSJTdGVwVHlwZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5Yib5bu65Lq6IiBGaWVsZE5hbWU9IkNyZWF0b3IiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWIm+W7uuaXtumXtCIgRmllbGROYW1lPSJDcmVhdGVkVGltZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L+u5pS55Lq6IiBGaWVsZE5hbWU9Ik1vZGlmaWVyIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkv67mlLnml7bpl7QiIEZpZWxkTmFtZT0iTW9kaWZpZWRUaW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlpIfms6giIEZpZWxkTmFtZT0iUmVtYXJrIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUxIiBGaWVsZE5hbWU9IkV4dDEiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIEZpZWxkTmFtZT0iRXh0MiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MyIgRmllbGROYW1lPSJFeHQzIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU0IiBGaWVsZE5hbWU9IkV4dDQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIEZpZWxkTmFtZT0iRXh0NSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L05vZGU+DQogICAgICAgIDxOb2RlIEFsaWFzPSJw55uR5rWL6K6h6YeP5rip5bqm5pWw5o2u6KGoIiBOYW1lPSJQX0RBVEFfR0FVR0VfVCI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLluo/lj7ciIGJLZXk9IjEiIEZpZWxkTmFtZT0iSUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6leWPtyIgRmllbGROYW1lPSJXZWxsQ29kZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5pe26Ze05qC85byPIiBGaWVsZE5hbWU9IlRpbWVGb3JtYXQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaXtumXtCIgRmllbGROYW1lPSJHYXVnZVRpbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5rip5bqm5pWw5o2uIiBGaWVsZE5hbWU9IkdhdWdlRGF0YSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5rip5bqm6K6h5ZCN56ewIiBGaWVsZE5hbWU9IkdhdWdlTmFtZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5Yib5bu65Lq6IiBGaWVsZE5hbWU9IkNyZWF0b3IiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWIm+W7uuaXtumXtCIgRmllbGROYW1lPSJDcmVhdGVkVGltZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L+u5pS55Lq6IiBGaWVsZE5hbWU9Ik1vZGlmaWVyIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkv67mlLnml7bpl7QiIEZpZWxkTmFtZT0iTW9kaWZpZWRUaW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlpIfms6giIEZpZWxkTmFtZT0iUmVtYXJrIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUxIiBGaWVsZE5hbWU9IkV4dDEiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIEZpZWxkTmFtZT0iRXh0MiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MyIgRmllbGROYW1lPSJFeHQzIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU0IiBGaWVsZE5hbWU9IkV4dDQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIEZpZWxkTmFtZT0iRXh0NSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L05vZGU+DQogICAgICAgIDxOb2RlIEFsaWFzPSJw5aSp54S25rCU5rCU5L2T57uE5YiG5pWw5o2u6KGoIiBOYW1lPSJQX0RBVEFfR0FTIj4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuW6j+WPtyIgYktleT0iMSIgRmllbGROYW1lPSJJRCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5LqV5Y+3IiBGaWVsZE5hbWU9IldlbGxDb2RlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IueUsueDtyIgRmllbGROYW1lPSJDMSIgc1VuaXQ9IiUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5LmZ54O3IiBGaWVsZE5hbWU9IkMyIiBzVW5pdD0iJSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLkuJnng7ciIEZpZWxkTmFtZT0iQzMiIHNVbml0PSIlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuW8guS4geeDtyIgRmllbGROYW1lPSJpQzQiIHNVbml0PSIlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9Iuato+S4geeDtyIgRmllbGROYW1lPSJuQzQiIHNVbml0PSIlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuW8guaIiueDtyIgRmllbGROYW1lPSJpQzUiIHNVbml0PSIlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuawlOS9k+e7hOWIhm5DNSIgRmllbGROYW1lPSJuQzUiIHNVbml0PSIlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuawlOS9k+e7hOWIhkM2IiBGaWVsZE5hbWU9IkM2IiBzVW5pdD0iJSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLmsJTkvZPnu4TliIZDNyIgRmllbGROYW1lPSJDNyIgc1VuaXQ9IiUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5LqM5rCn5YyW56KzIiBGaWVsZE5hbWU9IkNPMiIgc1VuaXQ9IiUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5rCu5rCUIiBGaWVsZE5hbWU9Ik4yIiBzVW5pdD0iJSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLnoavljJbmsKIiIEZpZWxkTmFtZT0iSDJTIiBzVW5pdD0iJSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEFsaWFzPSLng4PpnLLngrnmuKnluqYiIEZpZWxkTmFtZT0iVGVtcEhjIiBzVW5pdD0i4oSDIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuWvhuW6piIgRmllbGROYW1lPSJEZW5zIiBzVW5pdD0iZy9jbTMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i55u45a+55a+G5bqmIiBGaWVsZE5hbWU9IlJlbGF0aXZlRGVucyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDEiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIGVEYXRhVHlwZT0iMiIgRmllbGROYW1lPSJFeHQyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBlRGF0YVR5cGU9IjIiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIGVEYXRhVHlwZT0iMiIgRmllbGROYW1lPSJFeHQ1IiBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvTm9kZT4NCg0KICAgICAgICA8Tm9kZSBBbGlhcz0icOWFtuWug+WFs+iBlOaVsOaNruihqCIgTmFtZT0iUF9EQVRBX09USEVSIj4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuW6j+WPtyIgYktleT0iMSIgRmllbGROYW1lPSJJRCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5LqV5Y+3IiBGaWVsZE5hbWU9IldlbGxDb2RlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmtYvor5Xml7bpl7QiIEZpZWxkTmFtZT0iVGVzdERhdGUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5YW25a6D5LqV5pWw5o2uIiBGaWVsZE5hbWU9IldlbGxPdGhlckRhdGEiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5YW25a6D5Yy65Z2X5pWw5o2uIiBGaWVsZE5hbWU9IkJsb2NrT3RoZXJEYXRhIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlpIfms6giIEZpZWxkTmFtZT0iUmVtYXJrIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUxIiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0MSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MiIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQzIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU0IiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0NCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NSIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQoNCiAgICAgICAgPE5vZGUgQWxpYXM9Im7mlbDlgLzmoLfkvovmlbDmja7ooagiIE5hbWU9Ik5fREFUQV9ERU1PIj4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuW6j+WPtyIgYktleT0iMSIgRmllbGROYW1lPSJJRCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5LqV5Y+3IiBGaWVsZE5hbWU9IldlbGxDb2RlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlgqjlsYLlkI3np7AiIEZpZWxkTmFtZT0iTGF5ZXJOYW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuWCqOWxgumhtua3sSIgRmllbGROYW1lPSJUb3BEZXB0aCIgc1VuaXQ9Im0iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5YKo5bGC5bqV5rexIiBGaWVsZE5hbWU9IkJvdHRvbURlcHRoIiBzVW5pdD0ibSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDEiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIGVEYXRhVHlwZT0iMiIgRmllbGROYW1lPSJFeHQyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBlRGF0YVR5cGU9IjIiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkV4dDQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIGVEYXRhVHlwZT0iMiIgRmllbGROYW1lPSJFeHQ1IiBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvTm9kZT4NCg0KDQoNCiAgICAgICAgPE5vZGUgQWxpYXM9Ikror5XkupXkvZzkuJrln7rnoYDkv6Hmga/ooagiIE5hbWU9IkpfSk9CX0lORk8iPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L2c5LiaSUQiIGJLZXk9IjEiIEZpZWxkTmFtZT0iSm9iSUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS6leWPtyIgRmllbGROYW1lPSJXZWxsQ29kZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L2c5Lia5qCH6K+GIiBGaWVsZE5hbWU9IkpvYlRpdGxlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmtYHkvZPnsbvlnosiIEZpZWxkTmFtZT0iSm9iVHlwZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L2c5Lia5o+P6L+wIiBGaWVsZE5hbWU9IkpvYkRlc2MiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWIm+W7uuS6uiIgRmllbGROYW1lPSJDcmVhdG9yIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLliJvlu7rml7bpl7QiIEZpZWxkTmFtZT0iQ3JlYXRlZFRpbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS/ruaUueS6uiIgRmllbGROYW1lPSJNb2RpZmllciIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L+u5pS55pe26Ze0IiBGaWVsZE5hbWU9Ik1vZGlmaWVkVGltZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgRmllbGROYW1lPSJFeHQxIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUyIiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgRmllbGROYW1lPSJFeHQ0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU1IiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQogICAgICAgIDxOb2RlIEFsaWFzPSJK6K+V5LqV5L2c5Lia6YWN572u6KGoIiBOYW1lPSJKX0pPQl9SVU4iPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L2c5LiaSUQiIGJLZXk9IjEiIEZpZWxkTmFtZT0iSm9iSUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5Z+656GA5pWw5o2uIiBGaWVsZE5hbWU9IkRhdGFCYXNpYyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjQiIEFsaWFzPSLmtYHkvZPmlbDmja4iIEZpZWxkTmFtZT0iRGF0YUZsdWlkIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuawlOS9k+aVsOaNriIgRmllbGROYW1lPSJEYXRhR2FzQ29uc3QiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWkh+azqCIgRmllbGROYW1lPSJSZW1hcmsiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTEiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQxIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUyIiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0MiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MyIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDMiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTQiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQ0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU1IiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0NSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L05vZGU+DQoNCiAgICAgICAgPE5vZGUgQWxpYXM9Ilbor5XkupVQVlTln7rnoYDkv6Hmga8iIE5hbWU9IlZfUFZUX0lORk8iPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IlB2dElEIiBBbGlhcz0iUFZU5qCH6K+GIiBiS2V5PSIxIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUHZ0TmFtZSIgQWxpYXM9IlBWVOWQjeensCIgLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJKb2JJRCIgQWxpYXM9IuS9nOS4mklEIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuS4u+mAiemhueS/oeaBryIgRmllbGROYW1lPSJNYWluT3B0aW9uIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuayueWtkOmAiemhueS/oeaBryIgRmllbGROYW1lPSJTdWJPcHRpb25PIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuawlOWtkOmAiemhueS/oeaBryIgRmllbGROYW1lPSJTdWJPcHRpb25HIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuawtOWtkOmAiemhueS/oeaBryIgRmllbGROYW1lPSJTdWJPcHRpb25XIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLliJvlu7rkuroiIEZpZWxkTmFtZT0iQ3JlYXRvciIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5Yib5bu65pe26Ze0IiBGaWVsZE5hbWU9IkNyZWF0ZWRUaW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkv67mlLnkuroiIEZpZWxkTmFtZT0iTW9kaWZpZXIiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS/ruaUueaXtumXtCIgRmllbGROYW1lPSJNb2RpZmllZFRpbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWkh+azqCIgRmllbGROYW1lPSJSZW1hcmsiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTEiIEZpZWxkTmFtZT0iRXh0MSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MiIgRmllbGROYW1lPSJFeHQyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBGaWVsZE5hbWU9IkV4dDMiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTQiIEZpZWxkTmFtZT0iRXh0NCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NSIgRmllbGROYW1lPSJFeHQ1IiBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvTm9kZT4NCg0KICAgICAgICA8Tm9kZSBBbGlhcz0iVuivleS6lVBWVOWPguaVsOaVsOaNriIgTmFtZT0iVl9QVlRfREFUQSI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUHBySUQiIEFsaWFzPSJQVlTlj4LmlbDmoIfor4YiIGJLZXk9IjEiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJQcHJOYW1lIiBBbGlhcz0iUFZU5Y+C5pWw5ZCN56ewIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IlB2dElEIiBBbGlhcz0iUFZU5qCH6K+GIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iTWV0aG9kTmFtZSIgQWxpYXM9IumAieeUqOaWueazlSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjIiIEZpZWxkTmFtZT0iRml4ZWRQb3NYIiBBbGlhcz0ieOi9tOaVsOWAvCIgLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBGaWVsZE5hbWU9IkZpeGVkUG9zWSIgQWxpYXM9InnovbTmlbDlgLwiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5Lit6Ze06L+H56iL5pWw5o2uIiBGaWVsZE5hbWU9IlByb2NEYXRhIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlpIfms6giIEZpZWxkTmFtZT0iUmVtYXJrIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUxIiBGaWVsZE5hbWU9IkV4dDEiIGVEYXRhVHlwZT0iNCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MiIgRmllbGROYW1lPSJFeHQyIiBlRGF0YVR5cGU9IjQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIEZpZWxkTmFtZT0iRXh0MyIgZURhdGFUeXBlPSI0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU0IiBGaWVsZE5hbWU9IkV4dDQiIGVEYXRhVHlwZT0iNCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NSIgRmllbGROYW1lPSJFeHQ1IiBlRGF0YVR5cGU9IjQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQogICAgICAgIDxOb2RlIEFsaWFzPSJS6K+V5LqV5oiQ5p6c5L+h5oGv6KGoIiBOYW1lPSJSX0pPQl9VVElMUyI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmiJDmnpxJRCIgYktleT0iMSIgRmllbGROYW1lPSJSc3RVdGlsSUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaIkOaenOagh+etviIgRmllbGROYW1lPSJSc3RVdGlsVGFnIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkvZzkuJpJRCIgRmllbGROYW1lPSJKb2JJRCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5LqV5Y+3IiBGaWVsZE5hbWU9IldlbGxDb2RlIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5qih5Z6L57G75Z6LIiBGaWVsZE5hbWU9Ik1vZGVsU2VyaWVzIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLliJvlu7rkuroiIEZpZWxkTmFtZT0iQ3JlYXRvciIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5Yib5bu65pe26Ze0IiBGaWVsZE5hbWU9IkNyZWF0ZWRUaW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLkv67mlLnkuroiIEZpZWxkTmFtZT0iTW9kaWZpZXIiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS/ruaUueaXtumXtCIgRmllbGROYW1lPSJNb2RpZmllZFRpbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWkh+azqCIgRmllbGROYW1lPSJSZW1hcmsiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTEiIEZpZWxkTmFtZT0iRXh0MSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MiIgRmllbGROYW1lPSJFeHQyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBGaWVsZE5hbWU9IkV4dDMiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTQiIEZpZWxkTmFtZT0iRXh0NCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NSIgRmllbGROYW1lPSJFeHQ1IiBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvTm9kZT4NCg0KICAgICAgICA8Tm9kZSBBbGlhcz0iUuivleS6leS9nOS4mue6r+e7k+aenOaVsOaNruihqCIgTmFtZT0iUl9KT0JfUFVSRURBVEEiPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5oiQ5p6cSUQiIGJLZXk9IjEiIEZpZWxkTmFtZT0iUnN0VXRpbElEIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuWOn+Wni+absue6vyIgRmllbGROYW1lPSJDdXJ2ZVJhd3MiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5ouf5ZCI5puy57q/IiBGaWVsZE5hbWU9IkN1cnZlRml0cyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjQiIEFsaWFzPSLmqKHlnovnu5PmnpwiIEZpZWxkTmFtZT0iTW9kZWxJbmZvcyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjQiIEFsaWFzPSLmi5/lkIjlj4LmlbDnu5PmnpwiIEZpZWxkTmFtZT0iUGFyYW1ldGVySW5mb3MiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWkh+azqCIgRmllbGROYW1lPSJSZW1hcmsiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTEiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQxIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUyIiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0MiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MyIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDMiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTQiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQ0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU1IiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0NSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L05vZGU+DQogICAgICAgIDxOb2RlIEFsaWFzPSJS6K+V5LqV5oiQ5p6c6KeG56qX5pWw5o2u6KGoIiBOYW1lPSJSX0pPQl9XTkQiPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5oiQ5p6cSUQiIGJLZXk9IjEiIEZpZWxkTmFtZT0iUnN0SUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9Iue0ouW8lSIgRmllbGROYW1lPSJXbmRJbmRleCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i56qX5L2TSUQiIEZpZWxkTmFtZT0iV25kSUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9Iueql+S9k+WQjeensCIgRmllbGROYW1lPSJXbmRUYWciLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IlJzdFV0aWxzSUQiIEZpZWxkTmFtZT0iUnN0VXRpbElEIi8+DQoNCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IkpvYlJ1biIgRmllbGROYW1lPSJEYXRhSm9iUnVuIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmtYHliqjmrrUiIEZpZWxkTmFtZT0iRGF0YVNlZ0luZm8iLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaVsOaNruS9kyIgRmllbGROYW1lPSJEYXRhSW5mbyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5pWw5o2u5L2TMSIgRmllbGROYW1lPSJEYXRhSW5mbzEiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaVsOaNruS9kzIiIEZpZWxkTmFtZT0iRGF0YUluZm8yIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmlbDmja7kvZMzIiBGaWVsZE5hbWU9IkRhdGFJbmZvMyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5pWw5o2u5L2TNCIgRmllbGROYW1lPSJEYXRhSW5mbzQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaVsOaNruS9kzUiIEZpZWxkTmFtZT0iRGF0YUluZm81Ii8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmlbDmja7kvZM2IiBGaWVsZE5hbWU9IkRhdGFJbmZvNiIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5pWw5o2u5L2TNyIgRmllbGROYW1lPSJEYXRhSW5mbzciLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaVsOaNruS9kzgiIEZpZWxkTmFtZT0iRGF0YUluZm84Ii8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmlbDmja7kvZM5IiBGaWVsZE5hbWU9IkRhdGFJbmZvOSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDEiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTIiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQyIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUzIiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDQiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTUiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQ1IiBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvTm9kZT4NCg0KICAgICAgICA8Tm9kZSBBbGlhcz0iUuivleS6leaIkOaenOWfuuehgOaVsOaNruihqCIgTmFtZT0iUl9KT0JfUlVOIj4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaIkOaenElEIiBiS2V5PSIxIiBGaWVsZE5hbWU9IlJzdElEIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iNCIgQWxpYXM9IuWfuuehgOaVsOaNriIgRmllbGROYW1lPSJEYXRhQmFzaWMiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSI0IiBBbGlhcz0i5rWB5L2T5pWw5o2uIiBGaWVsZE5hbWU9IkRhdGFGbHVpZCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBlRGF0YVR5cGU9IjQiIEFsaWFzPSLmsJTkvZPmlbDmja4iIEZpZWxkTmFtZT0iRGF0YUdhc0NvbnN0Ii8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlpIfms6giIEZpZWxkTmFtZT0iUmVtYXJrIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUxIiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0MSIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MiIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIGVEYXRhVHlwZT0iNCIgRmllbGROYW1lPSJFeHQzIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU0IiBlRGF0YVR5cGU9IjQiIEZpZWxkTmFtZT0iRXh0NCIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NSIgZURhdGFUeXBlPSI0IiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQogICAgICAgIDxOb2RlIEFsaWFzPSJS6K+V5LqV5oiQ5p6c5rWB5Yqo5q615L+h5oGv6KGoIiBOYW1lPSJSX0pPQl9TRUciPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5oiQ5p6cSUQiIGJLZXk9IjEiIEZpZWxkTmFtZT0iUnN0SUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9Iua1geWKqOauteWQjeensCIgRmllbGROYW1lPSJTZWdOYW1lIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMSIgQWxpYXM9Iuexu+WeiyIgRmllbGROYW1lPSJTZWdUeXBlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuawlOS9k+aVsOaNriIgRmllbGROYW1lPSJGbG93UmF0ZVByZXYiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5Y6L5Yqb5bem5YC8IiBGaWVsZE5hbWU9IlByZXNWYWx1ZUwiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5Y6L5Yqb5Y+z5YC8IiBGaWVsZE5hbWU9IlByZXNWYWx1ZVIiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gZURhdGFUeXBlPSIyIiBBbGlhcz0i5pe26Ze05bem5YC8IiBGaWVsZE5hbWU9IlRpbWVMIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIGVEYXRhVHlwZT0iMiIgQWxpYXM9IuaXtumXtOWPs+WAvCIgRmllbGROYW1lPSJUaW1lUiIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgRmllbGROYW1lPSJFeHQxIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUyIiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgRmllbGROYW1lPSJFeHQ0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU1IiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQogICAgICAgIDxOb2RlIEFsaWFzPSJj56S65oSP5Zu+6YWN572u6KGoIiBOYW1lPSJDX01PREVMX1NLRVRDSCI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLluo/lj7ciIGJLZXk9IjEiIEZpZWxkTmFtZT0iTXN0SUQiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaooeWei+exuyIgRmllbGROYW1lPSJNb2RlbFNlcmllcyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5LqV5YKoIiBGaWVsZE5hbWU9IldCUyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5LqV5Z6LIiBGaWVsZE5hbWU9IldFTCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5rK56JePIiBGaWVsZE5hbWU9IlJFUyIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i6L6555WMIiBGaWVsZE5hbWU9IkJEWSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5YW25a6D57qm5p2fIiBGaWVsZE5hbWU9Ik90aGVycyIvPg0KDQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLnpLrmhI/lm74iIEZpZWxkTmFtZT0iU2tldGNoIiBlRGF0YVR5cGU9IjQiIC8+DQoNCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuWIm+W7uuS6uiIgRmllbGROYW1lPSJDcmVhdG9yIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLliJvlu7rml7bpl7QiIEZpZWxkTmFtZT0iQ3JlYXRlZFRpbWUiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuS/ruaUueS6uiIgRmllbGROYW1lPSJNb2RpZmllciIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5L+u5pS55pe26Ze0IiBGaWVsZE5hbWU9Ik1vZGlmaWVkVGltZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5aSH5rOoIiBGaWVsZE5hbWU9IlJlbWFyayIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61MSIgRmllbGROYW1lPSJFeHQxIiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrUyIiBGaWVsZE5hbWU9IkV4dDIiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxGaWVsZEluZm8gQWxpYXM9IuaJqeWxleWtl+autTMiIEZpZWxkTmFtZT0iRXh0MyIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i5omp5bGV5a2X5q61NCIgRmllbGROYW1lPSJFeHQ0IiBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmianlsZXlrZfmrrU1IiBGaWVsZE5hbWU9IkV4dDUiIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQoNCiAgICAgICAgPE5vZGUgQWxpYXM9Im/kurrlkZjooagiIE5hbWU9Ik9fUEVSU09OUyI+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLljZXkvY0iIGJLZXk9IjEiIEZpZWxkTmFtZT0iRGVwYXJ0Ii8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLlp5PlkI0iIGJLZXk9IjEiIEZpZWxkTmFtZT0iTmFtZSIvPg0KICAgICAgICAgICAgPEZpZWxkSW5mbyBBbGlhcz0i6IGM5YqhIiBGaWVsZE5hbWU9IlBvc2l0aW9uIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLmiYvmnLrlj7ciIEZpZWxkTmFtZT0iTW9iaWxlIi8+DQogICAgICAgICAgICA8RmllbGRJbmZvIEFsaWFzPSLpgq7nrrEiIEZpZWxkTmFtZT0iRW1haWwiLz4NCiAgICAgICAgPC9Ob2RlPg0KDQoNCg0KICAgIDwvVHlwZU9mPg0KPC9Sb290Pg0K \ No newline at end of file diff --git a/Bin/Config/Common/URRS.db b/Bin/Config/Common/URRS.db new file mode 100644 index 0000000..dbd76e3 Binary files /dev/null and b/Bin/Config/Common/URRS.db differ diff --git a/Bin/Config/Common/UnitDefault.dat b/Bin/Config/Common/UnitDefault.dat new file mode 100644 index 0000000..903a4ab --- /dev/null +++ b/Bin/Config/Common/UnitDefault.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iY29tcHJlc3NpYmlsaXR5IiBOYW1lPSJjb21wcmVzc2liaWxpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSIxL01QYSIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9jbV4zIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibGIvZnReMyIgaz0iMC4wMTYwMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYi9nYWwoVVMpIiBrPSIwLjExOTgyNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYi9nYWwoVUspIiBrPSIwLjA5OTc2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImxiL2JibCIgaz0iMC4wMDI4NTMiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9jYyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnL2NmIiBrPSIzLjUzMTQ3ZS0wNSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnL2Z0XjMiIGs9IjMuNTMxNDdlLTA1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Imdlb3RoZXJtYWxncmFkaWVudCIgTmFtZT0iZ2VvdGhlcm1hbGdyYWRpZW50Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZGVnL20iIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9pbiIgaz0iMS44Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wOTkiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9taWxlIiBrPSIwLjAzNDQ4MjgiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9mdCIgaz0iMTgxLjgxOCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJsZW5ndGgiIE5hbWU9Imxlbmd0aCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImluIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im0iIGs9IjM5LjM3MDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY20iIGs9IjAuMzkzNzAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1tIiBrPSIwLjAzOTM3MDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia20iIGs9IjM5MzcwLjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQiIGs9IjEyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1pIiBrPSI2MzM0Ni41Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InlkIiBrPSIzNS45ODczIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im5taWxlIiBrPSI3MjkxMy40Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im5tIiBrPSIzLjkzNzAxZS0wOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJyYWQiIGs9IjcuODI4MzEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IiUiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icHUiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL21eMyIgaz0iMTAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InYvdiIgaz0iMTAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImZyYWN0aW9uIiBrPSIxMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVybWVhYmlsaXR5IiBOYW1lPSJwZXJtZWFiaWxpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJEIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1EIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjbV4tMiIgaz0iOS44MWUrMDciLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iVyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2dmLm0vcyIgaz0iOS44MDY2NSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjYWwvcyIgaz0iNC4xODY4Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhwIiBrPSI3MzUuNDk5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlBhIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Ik1QYSIgaz0iMWUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iS1BhIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJhciIgaz0iMTA1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlRvcnIiIGs9IjEzMy4zMjIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZHluL2NtXjIiIGs9IjAuMSIvPg0KICAgICAgICAgICAgPFVuaXQgVW5pdD0ibW1IZyIgaz0iMTMzLjMyMiIvPg0KICAgICAgICAgICAgPFVuaXQgVW5pdD0ibW1IMk8iIGs9IjkuODA2NjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icHNpIiBrPSI2ODk2LjU1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImF0bSIgaz0iMTAxMzI1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZi9jbV4yIiBrPSI5ODA3OS43Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByb2R1Y3Rpb24iIE5hbWU9InByb2R1Y3Rpb24iPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtXjMvZCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0Y2YvZCIgaz0iMC4wMjgzMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtXjMvYSIgaz0iMC4wMDI3NDAwNyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJiY2YvZCIgaz0iMC4wMjgzMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtbWNmL2QiIGs9IjI4MzIwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1jZi9kIiBrPSIyOC4zMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJzdGIvZCIgaz0iMC4xNTkiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icHJvZGdhcyIgTmFtZT0icHJvZGdhcyI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9kIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IjEwXjQqbV4zL2QiIGs9IjEwMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InRjZi9kIiBrPSIwLjAyODMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9hIiBrPSIwLjAwMjc0MDA3Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJjZi9kIiBrPSIwLjAyODMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1tY2YvZCIgaz0iMjgzMjAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWNmL2QiIGs9IjI4LjMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InN0Yi9kIiBrPSIwLjE1OSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJwcm9kb2lsIiBOYW1lPSJwcm9kb2lsIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2QiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idGNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2EiIGs9IjAuMDAyNzQwMDciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZi9kIiBrPSIyODMyMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtY2YvZCIgaz0iMjguMzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RiL2QiIGs9IjAuMTU5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByb2R3YXRlciIgTmFtZT0icHJvZHdhdGVyIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2QiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idGNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2EiIGs9IjAuMDAyNzQwMDciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZi9kIiBrPSIyODMyMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtY2YvZCIgaz0iMjguMzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RiL2QiIGs9IjAuMTU5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnQVBJIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkFQSSIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ1cy9tIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InVzL2Z0IiBrPSIzLjI4MDg0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNxdWFyZSIgTmFtZT0ic3F1YXJlIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4yIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImttXjIiIGs9IjFlKzA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImluXjIiIGs9IjAuMDAwNjQ1MiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjbV4yIiBrPSIwLjAwMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYWNyZSIgaz0iNDA0NyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtaWxlXjIiIGs9IjIuNTg4ODhlKzA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImZ0XjIiIGs9IjAuMDkzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhhIiBrPSIxMDAwMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ5ZF4yIiBrPSIwLjgzNjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icmFkMiIgaz0iMC4wMzk1MzY5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InN0cmVuZ3RoIiBOYW1lPSJzdHJlbmd0aCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Ik4iIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibGJmIiBrPSI0LjQ0NDQ0Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZiIgaz0iOS44MSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJkeW4iIGs9IjFlLTA1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlIiBOYW1lPSJ0ZW1wZXJhdHVyZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImRlZyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJLIiBrPSIxIiBiPSIyNzMuMTUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRiIgaz0iMS44Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IuKEgyIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0aGVtYWwgcG93ZXIiIE5hbWU9InRoZW1hbCBwb3dlciI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkoiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY2FsIiBrPSI0LjE4NjgiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2dmLm0iIGs9IjkuODA2NjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iQnR1IiBrPSIxMDU1LjA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtXLmgiIGs9IjMuNmUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQubGJmIiBrPSIxLjM1NTgyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhwLmgoVVMpIiBrPSIyLjY0Nzc5ZSswNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJIcC5oKFVLKSIgaz0iMi42ODQ1MmUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2cubSIgaz0iOS44MDAwOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJrY2FsIiBrPSI0MTg1Ljg1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkJUVSIgaz0iMTA1NC44NSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0aW1lIiBOYW1lPSJ0aW1lIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idXMiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibXMiIGs9IjEwMDAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icyIgaz0iMWUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWluIiBrPSI2ZSswNyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJociIgaz0iMy42ZSswOSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJEYXkiIGs9IjguNjRlKzEwIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im0vcyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtaWxlL2giIGs9IjAuNDQ3MDQiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQvcyIgaz0iMC4zMDQ4Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtUGHCt3MiIGs9IjAuMDAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlAiIGs9IjAuMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjUCIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmYucy9mdF4yIiBrPSI0Ny44ODAzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZi5zL21eMyIgaz0iOS44MDY2NSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHkgYWN0IiBOYW1lPSJ2aXNjb3NpdHkgYWN0Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4yL3MiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY21eMi9zIiBrPSIwLjAwMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnReMi9zIiBrPSIwLjA5MjkwMyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJTdCIgaz0iMC4wMDAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImNTdCIgaz0iMWUtMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1eMi9zIiBrPSIxZS0wNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2b2x0YWdlIiBOYW1lPSJ2b2x0YWdlIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibXYiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idiIgaz0iMTAwMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2b2x1bWUiIE5hbWU9InZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtbCIgaz0iMWUtMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iTCIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iaW5eMyIgaz0iMS42MzllLTA1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImNtXjMiIGs9IjFlLTA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnYWwoVVMpIiBrPSIwLjAwMzc4NSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJiYmwiIGs9IjAuMTU5Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJjZiIgaz0iMi44MzE3ZSswNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0Y2YiIGs9IjIuODMxN2UrMTAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZiIgaz0iMjgzMTciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWNmIiBrPSIyOC4zMTciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnReMyIgaz0iMC4wMjgzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImdpIiBrPSIwLjAwMDExOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY2MiIGs9IjFlLTA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImFjcmUuZnQiIGs9IjEyMzQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0id2VpZ2h0IiBOYW1lPSJ3ZWlnaHQiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJrZyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0b24iIGs9IjEwMDAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibHRvbiIgaz0iMTAxNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYiIgaz0iMC40NTQiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ib3oiIGs9IjAuMDI4MzUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RvbiIgaz0iOTA3Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImciIGs9IjAuMDAxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQoNCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJUb0RvMSIgTmFtZT0iVG9EbzEiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSIxL21eMy9kIiBrPSIxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9IlRvRG8yIiBOYW1lPSJUb0RvMiI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IsKwIiBrPSIxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9IlRvRG8zIiBOYW1lPSJUb0RvMyI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9NUGEiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzQiIE5hbWU9IlRvRG80Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibUQvKG1QYcK3cykiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzUiIE5hbWU9IlRvRG81Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iTVBhL20iIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzYiIE5hbWU9IlRvRG82Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibUTCt20iIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzciIE5hbWU9IlRvRG83Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9tb2wiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzgiIE5hbWU9IlRvRG84Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/UrrsSql001.txt b/Bin/Config/Common/UrrsSql001.txt new file mode 100644 index 0000000..5d3ef78 --- /dev/null +++ b/Bin/Config/Common/UrrsSql001.txt @@ -0,0 +1,13 @@ +select t.* from U_RIGHT_INFO t left join U_ROLE_RIGHT_INFO m +on t.ID = m.RIGHT_ID +where t.MODULE='%1' and m.ROLE_ID in +( +select t.ROLE_ID from U_USER_ROLE_INFO t left join U_USER_INFO m +on t.USER_ID=m.ID where m.ID='%2' +union +select t.ROLE_ID from U_GROUP_ROLE_INFO t left join U_GROUP_INFO m +on t.GROUP_ID=m.ID where m.ID in +(Select t.GROUP_ID from U_USER_GROUP_INFO t left join U_USER_INFO m +on t.USER_ID=m.ID where m.ID='%2' +) +) \ No newline at end of file diff --git a/Bin/Config/Common/UrrsStruct.dat b/Bin/Config/Common/UrrsStruct.dat new file mode 100644 index 0000000..93626d4 --- /dev/null +++ b/Bin/Config/Common/UrrsStruct.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhLS0g57yW6L6R5L2/55wzySoIFhNTFNweSB2MjAwNiBVIChodHRwOi8vd3d3LmFsdG92YS5jb20pIOeUsSBhbnkgKGFueSkgLS0+DQo8IS0tIOWxnuaAp+WAvOWtl+auteW5tumdnuW/hemhu++8jOWPr+S7peWPquWIl+WHuuadpeWPluWAvOS4jeWQjOS6jum7mOiupOWAvOeahOWxnuaApy0tPg0KDQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gTm9kZSDnuqfliKsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBOYW1l77yaICDmlbDmja7ooaggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77yaIOaVsOaNruihqOS4reaWh+WQjSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFR5cGU6ICAg5a+55bqU55qE5a+56LGh57G75YirICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQogIA0KPCEtLSBGaWVsZEluZm8g57qn5YirICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEZpZWxkTmFtZe+8miAg5a2X5q615ZCN56ewICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEFsaWFz77ya5a2X5q615Lit5paH5ZCNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgYktlee+8muaYr+WQpuS4u+mUriAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgZURhdGFUeXBl77ya5a2X5q6157G75Z6L77yIMO+8muWtl+espuS4su+8iOaWh+acrO+8iSAx77ya5pW05b2i77yI5ZCr5p6a5Li+77yJICAy77yaRmxvYXTmlbDlgLwgIDPvvJrlm77lg48gIDTvvJrkuozov5vliLbvvIkgICAgICAtLT4NCjwhLS0gICAgc1VuaXTvvJrljZXkvY0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIG1heO+8muacgOWkp++8jOavlOi+g+eyl+eahOS4gOe6pyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBtaW7vvJrmnIDlsI/vvIzmr5TovoPnspfnmoTkuIDnuqcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGlnaXQ6IOWwj+aVsOS9jSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8Um9vdD4NCiAgPFR5cGVPZj4NCg0KICAgIDxOb2RlIE5hbWU9IlVfVVNFUl9JTkZPIiBBbGlhcz0ideeUqOaIt+S/oeaBr+ihqCIgPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IklEIiBBbGlhcz0i55So5oi3SUQiIGJLZXk9IjEiIGVEYXRhVHlwZT0iMCIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9Ik5BTUUiIEFsaWFzPSLnlKjmiLflkI3np7AiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJQT1NJVElPTiIgQWxpYXM9IuiBjOS9jSIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IkRFUEFSVCIgQWxpYXM9IumDqOmXqCIgZURhdGFUeXBlPSIwIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iVEVMIiBBbGlhcz0i55S16K+dIiBlRGF0YVR5cGU9IjAiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJNT0JJTEUiIEFsaWFzPSLmiYvmnLoiIGVEYXRhVHlwZT0iMCIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IlJUWCIgQWxpYXM9IuiFvuiur+mAmiIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IkVNQUlMIiBBbGlhcz0i6YKu566xIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUkVNQVJLIiBBbGlhcz0i5aSH5rOoIiAvPg0KICAgIDwvTm9kZT4NCg0KICAgIDxOb2RlIE5hbWU9IlVfR1JPVVBfSU5GTyIgQWxpYXM9InXnlKjmiLfnu4Tkv6Hmga/ooagiID4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJJRCIgQWxpYXM9IueUqOaIt+e7hElEIiBiS2V5PSIxIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iTkFNRSIgQWxpYXM9IueUqOaIt+e7hOWQjeensCIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IlJFTUFSSyIgQWxpYXM9IuWkh+azqCIvPg0KICAgIDwvTm9kZT4NCg0KICAgIDxOb2RlIE5hbWU9IlVfUk9MRV9JTkZPIiBBbGlhcz0ideinkuiJsuS/oeaBr+ihqCI+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iSUQiIEFsaWFzPSLop5LoibJJRCIgYktleT0iMSIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9Ik5BTUUiIEFsaWFzPSLop5LoibLlkI3np7AiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJERVNDIiBBbGlhcz0i5o+P6L+wIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUkVNQVJLIiBBbGlhcz0i5aSH5rOoIi8+DQogICAgPC9Ob2RlPg0KICAgDQogICAgPE5vZGUgTmFtZT0iVV9SSUdIVF9JTkZPIiBBbGlhcz0ideadg+mZkOS/oeaBr+ihqCIgPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IklEIiBBbGlhcz0i5p2D6ZmQSUQiIGJLZXk9IjEiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJOQU1FIiBBbGlhcz0i5p2D6ZmQ5ZCN56ewIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iRlVOX0lEIiBBbGlhcz0i5a+55bqU5Yqf6IO9SUQiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJGVU5fREVTQyIgQWxpYXM9IuWvueW6lOWKn+iDveaPj+i/sCIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9Ik1PRFVMRSIgQWxpYXM9IuWvueW6lOWKn+iDveaooeWdlyIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IlJFTUFSSyIgQWxpYXM9IuWkh+azqCIgLz4NCiAgICA8L05vZGU+DQoNCiAgICA8Tm9kZSBOYW1lPSJVX1VTRVJfR1JPVVBfSU5GTyIgQWxpYXM9InXnlKjmiLfkuI7nlKjmiLfnu4TlhbPns7vooagiID4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJVU0VSX0lEIiBBbGlhcz0i55So5oi3SUQiIGJLZXk9IjEiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJHUk9VUF9JRCIgQWxpYXM9IueUqOaIt+e7hElEIiBiS2V5PSIxIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUkVNQVJLIiBBbGlhcz0i5aSH5rOoIi8+DQogICAgPC9Ob2RlPg0KDQogICAgPE5vZGUgTmFtZT0iVV9VU0VSX1JPTEVfSU5GTyIgQWxpYXM9InXnlKjmiLfop5LoibLooagiID4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJVU0VSX0lEIiBBbGlhcz0i55So5oi3SUQiIGJLZXk9IjEiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJST0xFX0lEIiBBbGlhcz0i6KeS6ImySUQiIGJLZXk9IjEiLz4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJSRU1BUksiIEFsaWFzPSLlpIfms6giLz4NCiAgICA8L05vZGU+DQoNCiAgICA8Tm9kZSBOYW1lPSJVX0dST1VQX1JPTEVfSU5GTyIgQWxpYXM9InXnlKjmiLfnu4Top5LoibLooagiID4NCiAgICAgIDxGaWVsZEluZm8gRmllbGROYW1lPSJHUk9VUF9JRCIgQWxpYXM9IueUqOaIt+e7hElEIiBiS2V5PSIxIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUk9MRV9JRCIgQWxpYXM9IuinkuiJsklEIiBiS2V5PSIxIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUkVNQVJLIiBBbGlhcz0i5aSH5rOoIi8+DQogICAgPC9Ob2RlPg0KDQogICAgPE5vZGUgTmFtZT0iVV9ST0xFX1JJR0hUX0lORk8iIEFsaWFzPSJ16KeS6Imy5p2D6ZmQ6KGoIiA+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUk9MRV9JRCIgQWxpYXM9IuinkuiJsklEIiBiS2V5PSIxIi8+DQogICAgICA8RmllbGRJbmZvIEZpZWxkTmFtZT0iUklHSFRfSUQiIEFsaWFzPSLmnYPpmZBJRCIgYktleT0iMSIvPg0KICAgICAgPEZpZWxkSW5mbyBGaWVsZE5hbWU9IlJFTUFSSyIgQWxpYXM9IuWkh+azqCIvPg0KICAgIDwvTm9kZT4NCg0KICA8L1R5cGVPZj4NCjwvUm9vdD4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/WTAI - 副本.css b/Bin/Config/Common/WTAI - 副本.css new file mode 100644 index 0000000..176ce5e --- /dev/null +++ b/Bin/Config/Common/WTAI - 副本.css @@ -0,0 +1,668 @@ +/* +* WTAI's css setting +* By WANG, Zhan-guo +* Created On: 2023-12-05 +* Modified On: 2024-09-13 +*/ + +/*窗体背景*/ +iDlgBase{ + background-color: #ffffff; +} +iPlotCurveWxT,iGuiPlot { + border : none; +} + + +/*参数及绘图属性窗体*/ +iGridRowUtils{ + background-color: #ffffff; + border : none; +} +ZxPtyPano{ + background-color: #ffffff; +/* border : none;*/ +} + +/* 两种Button:QPushButton&QToolButton */ +QPushButton,QToolButton { + background-color: transparent; + color: black; +} +QPushButton:hover:pressed,QPushButton:checked,QToolButton:hover:pressed,QToolButton:checked { + background-color: rgb(157, 195, 230); + border-radius: 5px; + box-sizing: border-box; +} +QPushButton:hover:!pressed,QToolButton:hover:!pressed { + background-color: rgb(198, 221, 241); + border-radius: 5px; + box-sizing: border-box; +} +QPushButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: padding; + left: -2px; +} +/* only for MenuButtonPopup */ +QToolButton[popupMode="1"] { + padding-right: 20px; +} +/*QToolButton::menu-button { + background: transparent; + width: 16px; +}*/ + + +/* QToolBar */ +QToolBar { + background-color: transparent; + border-style : dotted; +} +QToolBar:handle { +} +QToolBar::separator { +} + +/*日历组件*/ +#qt_calendar_calendarview { + background: white; +} +QDateTimeEdit { + background: transparent; +} +QCalendarView QHeaderView::section { + border: 1px solid lightgray; + height: 1px +} +QCalendarView QHeaderView { + border: 1px solid lightgray; + height: 1px +} +QCalendarView QTableCornerButton::section { + border: 1px solid lightgray; + height: 1px +} + +/*一些设置为透明背景的基础控件*/ +QToolTip{ + background-color: transparent; +} + +/* QTextEdit */ +QTextEdit { +} + +/* QLineEdit */ +QLineEdit { +} +QLineEdit[readOnly="true"]{ + color: gray; +} + + + + +/* === QToolTip === */ +QToolTip { + background-color: light gray; + color: black; +} + + + +/*QSlider*/ +QSlider::groove:horizontal { + position: absolute; + top: 1px; height: 1px; + background: #B1B1B1; +} +QSlider::handle:horizontal { + border-image:url($/Res/Icon/slider-handle.png); + border: 1px solid #000000; + width: 8px; + margin: -5px 0; +} + + +/* QCheckBox */ +QCheckBox { + background-color: transparent; + background-size: 20px 20px; +} +QCheckBox::indicator::checked { + image: url($/Res/Icon/checkBox_checked.png); +} +QCheckBox::indicator::unchecked { + image: url($/Res/Icon/checkBox_unchecked.png); +} + + +/* QRadioButton */ +QRadioButton { + background-color: transparent; + background-size: 20px 20px; +} +QRadioButton::indicator::checked { + image: url($/Res/Icon/radio_checked.png); +} +QRadioButton::indicator::unchecked { + image: url($/Res/Icon/radio_unchecked.png); +} + +/* QComboBox*/ +QComboBox { + border: 1px solid gray; + border-radius: 3px; + padding: 1px 2px 1px 2px; + min-width: 3em; +} +ZxHeaderComboBoxEx{ + background-color: light gray; + min-width: 1em; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 20px; + + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +QComboBox::down-arrow { + image: url($/Res/Icon/CbxBtn.png); +} + +QDoubleSpinBox,QSpinBox { + background-color: transparent; +} + + +/* QGroupBox */ +QGroupBox { + background-color: transparent; +} +QGroupBox::title { + color: rgb(47, 85, 151); + subcontrol-origin: margin; + subcontrol-position: top left; + margin-left: 5px; +} + + + +/* QSplitter */ +QSplitter { +/* background-color: transparent;*/ +} +QSplitter::handle { + background-color:light blue; + border-width:0px; + border-style:dotted; + height:1px; +} + +/*QProgressBar*/ +QProgressBar{ + border: 1px solid gray; + border-radius: 5px; + text-align: center; +} + +/* QListWidget */ +QListWidget { + background-color: #ffffff; + border: 1px solid gray; +} +QListWidget::item:selected{ + background:lightblue; + color:blue; +} + + +/* QTreeWidget */ +QTreeWidget{ + background-color: #ffffff; + border-color:light gray; +} +QTreeWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeWidget QHeaderView { + background: transparent; +} + + +/*QTreeView*/ +QTreeView{ + background-color: #ffffff; + alternate-background-color:rgb(0, 192, 0); + border-color:light gray; +} +QTreeView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeView QHeaderView { + background: transparent; +} +/*QTreeView::item:selected{ + background:lightblue; + color:blue; +}*/ + + +/* QTableWidget */ +QTableWidget{ + background-color:transparent; + alternate-background-color:rgb(0, 192, 0); + border: none; +} +QTableWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QHeaderView { + background: transparent; +} +QTableWidget QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QScrollBar { + background:transparent; +} + + + +/* QTableView */ +QTableView{ + background-color:transparent; + alternate-background-color:rgb(232, 232, 232); + border: 1px solid gray; + /*border-style : ridge;*/ + + selection-background-color: rgb(51, 153, 255)/*lightblue*/; + selection-color: white; + + gridline-color: lightgray; +} +QTableView::grid +{ + border: 1px solid red; + color: rgb(255, 0, 0); + gridline-color: rgb(255, 0, 0); +} + + + +QTableView QHeaderView::section { +/*border: 0.5px lightgray; + background: rgb(228, 228, 228); + sectionline-color: rgb(255, 0, 0);*/ +}/* +QTableView QHeaderView { + background: transparent; +border: 1px solid lightgray; +} +QTableView QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableView QScrollBar { + background:transparent; +} +/*QTableView::item::selected +{ + background-color:lightblue; + color: white; +}*/ + + +/* QTabWidget */ +QTabWidget::pane{ + border-width:1px; + border-style:dotted; +} +QTabWidget::tab-bar{ + border-width:0px; +} +QTabBar::tab:first:selected, +QTabBar::tab:middle:selected, +QTabBar::tab:last:selected, +QTabBar::tab:only-one{ +/* background-color: white;*/ +/* color: blue;*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: outset;*/ +} +QTabBar::tab:first:!selected, +QTabBar::tab:middle:!selected, +QTabBar::tab:last:!selected { +/* background-color: transparent;*/ +/* color: rgb(128, 128, 128);*/ +/* border:1px solid rgba(0,0,0,50);*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: ridge;*/ +} + +QTabBar::tab:top, QTabBar::tab:bottom { +/* min-width:60px;*/ +} +QTabBar::tab:left, QTabBar::tab:right { +/* min-height:50px;*/ +} + + +/* === QMenu === */ +QMenu { + background-color: rgb(138, 209, 251); +} + +/* === QMenuBar === */ +QMenuBar { + background-color: transparent; +} + + +/*QDockWidget*/ +QDockWidget{ +/* image: url($/Res/Image/WTAI_Main.png);*/ +/* border:1px ridge lightgray; + border:3px ridge red;*/ + /*titlebar-close-icon: url($/Res/Icon/close.png);*/ +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background-color: rgb(218,227,243); + +} +QDockWidget::title { + text-align: left; +/* background: transparent; +background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6);*/ +background-color: rgb(218,227,243); + padding-left:0px; + height:20px; +} +QDockWidget::close-button,QDockWidget::float-button { + /* border:1px solid darkgray;*/ +/* background: darkgray;*/ +/* padding:0px;*/ +} +QDockWidget::close-button:hover,QDockWidget::float-button:hover { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background: gray; +} +QDockWidget::close-button:pressed,QDockWidget::float-button:pressed { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +/* padding:1px-1px-1px-1px;*/ +} +/*QDockWidget::close-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:0px; bottom:0px; + width:14px; +} +QDockWidget::float-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:16px; bottom:0px; + width:14px; +}*/ + +QTreeView, QListView, QTabWidget::pane{ + border:1px solid #C0DCF2; + selection-background-color:#F2F9FF; + selection-color:#386487; + alternate-background-color:#DAEFFF; + gridline-color:#C0DCF2; +} + + +/*QMdiArea*/ +QMdiArea { + border:1px ridge gray; +} + +/*QMdiSubWindow*/ +QMdiSubWindow { + background-color: #f0f0f0; +} +QMdiSubWindow::systemButton { + background-color: #ffffff; /* 按钮背景色 */ + border: 1px solid #000000; /* 按钮边框 */ + border-radius: 4px; /* 按钮边框圆角 */ +} +QMdiSubWindow::systemButton:hover { + background-color: #eeeeee; /* 鼠标悬停时的背景色 */ +} +QMdiSubWindow::titleBar { + background-color: #cccccc; /* 标题栏背景色 */ + font: bold 12px; /* 加粗,12px 字体 */ + color: #000000; /* 标题栏文字颜色 */ +} + +MdiSubWindowEx::title { + height:32px; +} + +MdiSubWindowEx QWidget { + icon-size: 16px; +} + +SubMdiSubWindowEx::title { + height:32px; +} + +/*Ribbon*/ +QMenu { + background-color: #FCFCFC; + border: 1px solid #8492A6; +} +QMenu::item { + background-color: transparent; +} +iWxMenuItem::hover{ + border: 1px solid #FFB700; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +} +QMenu::item:selected { + background-color: #654321; +} + +#btnRibbonFile::menu-indicator{ + image:None; +} + +#btnRibbonFile{ + min-width:50px; + max-width:50px; + height:22px; + + color:white; + border: 1px solid #416ABD; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); +} +#btnRibbonFile::hover{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); +} +#btnRibbonFile::pressed{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467BBB, stop:0.5 #2F63AE,stop:0.51 #1C438A, stop:1 #358BC9); +} + +#tabWxMain::tab-bar { + left: 65px; +} +#tabWxMain QTabBar::tab{ + height:24px; +} + + +#tabWxMain QTabBar::tab:selected +{ + /*border:1px solid blue; + border-bottom-color: none; + border-top-left-radius: 1px; + border-top-right-radius: 1px;*/ + /*margin-left: 2px; + margin-right: 2px;*/ + /*border: 1px solid #BAC9DB; + border-top: 1px solid #BAC9DB; + background: rgb(255,255,255); + font: Italic ; + margin:5px;*/ +} +#tabWxMain QTabBar::tab:!selected +{ + /*background: rgb(189,215,238); + border-bottom: 1px solid red; + margin-top: 1px; + border: none; + border-bottom-color: #FFFFFF;*/ +/* margin-left: 2px; + margin-right: 2px; + border-left-color: #FFFFFF;*/ +} +#tabWxMain QTabBar::tab:hover :selected +{ + /*border: 2px solid black; + background-color: black; + border-top-left-radius: 5px; + border-top-right-radius: 5px;*/ +} +#tabWxMain QTabBar::tab:hover:!selected +{ + /*border: 1px solid red;*/ +} + + +#tabWxMain QTabWidget::pane{ + /*border-width:4px; + border-color:red; + border-style: solid; + background-color: transparent; + border: 1px solid red; top: -1px;background-color:grey;*/ +} + + +#tabWxMain::pane +{ + border-width: 1px; + border-color: rgb(192, 192, 192); + border-style:solid; + top: -1px;/*background-color:grey;*/ +} + + +#tabWxMain QGroupBox{ + border-left: 1px solid #B0B0B0; + border-top: 0px solid gray; +} +#tabWxMain QGroupBox::title { + color: #081121/*#738399*/; + subcontrol-position: bottom center; +} + +/* QWebView */ +QWebView { + background-color: transparent; +} + + +#iWxWelcome #groupBox_2{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 77, 0, 255), stop:1 rgba(255, 255, 255, 255)); +} + + + + + + +QScrollBar:horizontal{ +background:#transparent; +padding:0px; +border-radius:5px; +max-height:12px; +} + +QScrollBar::handle:horizontal{ +background:rgb(220,220,220); +min-width:50px; +border-radius:5px; +} + +QScrollBar::handle:horizontal:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:horizontal:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:horizontal{ +background:none; +} + +QScrollBar::sub-page:horizontal{ +background:none; +} + +QScrollBar::add-line:horizontal{ +background:none; +} + +QScrollBar::sub-line:horizontal{ +background:none; +} + +QScrollBar:vertical{ +background:#transparent; +padding:0px; +border-radius:5px; +max-width:10px; +} + +QScrollBar::handle:vertical{ +background:rgb(220,220,220); +min-height:50px; +border-radius:5px; +} + +QScrollBar::handle:vertical:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:vertical:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:vertical{ +background:none; +} + +QScrollBar::sub-page:vertical{ +background:none; +} + +QScrollBar::add-line:vertical{ +background:none; +} + +QScrollBar::sub-line:vertical{ +background:none; +} + + diff --git a/Bin/Config/Common/WTAI.css b/Bin/Config/Common/WTAI.css new file mode 100644 index 0000000..8ce493a --- /dev/null +++ b/Bin/Config/Common/WTAI.css @@ -0,0 +1,671 @@ +/* +* WTAI's css setting +* By WANG, Zhan-guo +* Created On: 2023-12-05 +* Modified On: 2024-09-13 +*/ + +/*窗体背景*/ +iDlgBase{ + background-color: #ffffff; +} +iPlotCurveWxT,iGuiPlot { + border : none; +} + + +/*参数及绘图属性窗体*/ +iGridRowUtils{ + background-color: #ffffff; + border : none; +} +ZxPtyPano{ + background-color: #ffffff; +/* border : none;*/ +} + +/* 两种Button:QPushButton&QToolButton */ +QPushButton,QToolButton { + background-color: transparent; + color: black; +} +QPushButton:hover:pressed,QPushButton:checked,QToolButton:hover:pressed,QToolButton:checked { + background-color: rgb(157, 195, 230); + border-radius: 5px; + box-sizing: border-box; +} +QPushButton:hover:!pressed,QToolButton:hover:!pressed { + background-color: rgb(198, 221, 241); + border-radius: 5px; + box-sizing: border-box; +} +QPushButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: padding; + left: -2px; +} +/* only for MenuButtonPopup */ +QToolButton[popupMode="1"] { + padding-right: 20px; +} +/*QToolButton::menu-button { + background: transparent; + width: 16px; +}*/ + + +/* QToolBar */ +QToolBar { + background-color: transparent; + border-style : dotted; +} +QToolBar:handle { +} +QToolBar::separator { +} + +/*日历组件*/ +#qt_calendar_calendarview { + background: white; +} +QDateTimeEdit { + background: transparent; +} +QCalendarView QHeaderView::section { + border: 1px solid lightgray; + height: 1px +} +QCalendarView QHeaderView { + border: 1px solid lightgray; + height: 1px +} +QCalendarView QTableCornerButton::section { + border: 1px solid lightgray; + height: 1px +} + +/*一些设置为透明背景的基础控件*/ +QToolTip{ + background-color: transparent; +} + +/* QTextEdit */ +QTextEdit { +} + +/* QLineEdit */ +QLineEdit { +} +QLineEdit[readOnly="true"]{ + color: gray; +} + + + + +/* === QToolTip === */ +QToolTip { + background-color: light gray; + color: black; +} + + + +/*QSlider*/ +QSlider::groove:horizontal { + position: absolute; + top: 1px; height: 1px; + background: #B1B1B1; +} +QSlider::handle:horizontal { + border-image:url($/Res/Icon/slider-handle.png); + border: 1px solid #000000; + width: 8px; + margin: -5px 0; +} + + +/* QCheckBox */ +QCheckBox { + background-color: transparent; + background-size: 20px 20px; +} +QCheckBox::indicator::checked { + image: url($/Res/Icon/checkBox_checked.png); +} +QCheckBox::indicator::unchecked { + image: url($/Res/Icon/checkBox_unchecked.png); +} + + +/* QRadioButton */ +QRadioButton { + background-color: transparent; + background-size: 20px 20px; +} +QRadioButton::indicator::checked { + image: url($/Res/Icon/radio_checked.png); +} +QRadioButton::indicator::unchecked { + image: url($/Res/Icon/radio_unchecked.png); +} + +/* QComboBox*/ +QComboBox { + border: 1px solid gray; + border-radius: 3px; + padding: 1px 2px 1px 2px; + min-width: 3em; +} +ZxHeaderComboBoxEx{ + background-color: light gray; + min-width: 1em; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 20px; + + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +QComboBox::down-arrow { + image: url($/Res/Icon/CbxBtn.png); +} + +QDoubleSpinBox,QSpinBox { + background-color: transparent; +} + + +/* QGroupBox */ +QGroupBox { + background-color: transparent; +} +QGroupBox::title { + color: rgb(47, 85, 151); + subcontrol-origin: margin; + subcontrol-position: top left; + margin-left: 5px; +} + + + +/* QSplitter */ +QSplitter { +/* background-color: transparent;*/ +} +QSplitter::handle { + background-color:light blue; + border-width:0px; + border-style:dotted; + height:1px; +} + +/*QProgressBar*/ +QProgressBar{ + border: 1px solid gray; + border-radius: 5px; + text-align: center; +} + +/* QListWidget */ +QListWidget { + background-color: #ffffff; + border: 1px solid gray; +} +QListWidget::item:selected{ + background:lightblue; + color:blue; +} + + +/* QTreeWidget */ +QTreeWidget{ + background-color: #ffffff; + border-color:light gray; +} +QTreeWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeWidget QHeaderView { + background: transparent; +} + + +/*QTreeView*/ +QTreeView{ + background-color: #ffffff; + alternate-background-color:rgb(0, 192, 0); + border-color:light gray; +} +QTreeView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeView QHeaderView { + background: transparent; +} +/*QTreeView::item:selected{ + background:lightblue; + color:blue; +}*/ + + +/* QTableWidget */ +QTableWidget{ + background-color:transparent; + alternate-background-color:rgb(0, 192, 0); + border: none; +} +QTableWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QHeaderView { + background: transparent; +} +QTableWidget QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QScrollBar { + background:transparent; +} + + + +/* QTableView */ +QTableView{ + background-color:transparent; + alternate-background-color:rgb(232, 232, 232); + border: 1px solid gray; + /*border-style : ridge;*/ + + selection-background-color: rgb(51, 153, 255)/*lightblue*/; + selection-color: white; + + gridline-color: lightgray; +} +/*QTableView::grid +{ border: 1px solid red; +color: rgb(255, 0, 0); +gridline-color: rgb(255, 0, 0); +} +QTableView::grid +{ border: 1px solid gray; +}*/ + + +QTableView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableView QHeaderView { + background: transparent; +border: 1px solid lightgray; +} +QTableView QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableView QScrollBar { + background:transparent; +} +/*QTableView::item::selected +{ + background-color:lightblue; + color: white; +}*/ + + +/* QTabWidget */ +QTabWidget::pane{ + border-width:1px; + border-style:dotted; +} +QTabWidget::tab-bar{ + border-width:0px; + +} +QTabBar::tab:first:selected, +QTabBar::tab:middle:selected, +QTabBar::tab:last:selected, +QTabBar::tab:only-one{ +/* background-color: white;*/ +/* color: blue;*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: outset;*/ +} +QTabBar::tab:first:!selected, +QTabBar::tab:middle:!selected, +QTabBar::tab:last:!selected { +/* background-color: transparent;*/ +/* color: rgb(128, 128, 128);*/ +/* border:1px solid rgba(0,0,0,50);*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: ridge;*/ +} + +QTabBar::tab:top, QTabBar::tab:bottom { +/* min-width:60px;*/ +} +QTabBar::tab:left, QTabBar::tab:right { +/* min-height:50px;*/ +} + + +/* === QMenu === */ +QMenu { + background-color: rgb(138, 209, 251); +} + +/* === QMenuBar === */ +QMenuBar { + background-color: transparent; +} + + +/*QDockWidget*/ +QDockWidget{ +/* image: url($/Res/Image/WTAI_Main.png);*/ +/* border:1px ridge lightgray; + border:3px ridge red;*/ + /*titlebar-close-icon: url($/Res/Icon/close.png);*/ +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background-color: rgb(218,227,243); + +} +QDockWidget::title { + text-align: left; +/* background: transparent; +background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6);*/ +background-color: rgb(218,227,243); + padding-left:0px; + height:20px; +} +QDockWidget::close-button,QDockWidget::float-button { + /* border:1px solid darkgray;*/ +/* background: darkgray;*/ +/* padding:0px;*/ +} +QDockWidget::close-button:hover,QDockWidget::float-button:hover { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background: gray; +} +QDockWidget::close-button:pressed,QDockWidget::float-button:pressed { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +/* padding:1px-1px-1px-1px;*/ +} +/*QDockWidget::close-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:0px; bottom:0px; + width:14px; +} +QDockWidget::float-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:16px; bottom:0px; + width:14px; +}*/ + +QTreeView, QListView, QTabWidget::pane{ + border:1px solid #C0DCF2; + selection-background-color:#F2F9FF; + selection-color:#386487; + alternate-background-color:#DAEFFF; + gridline-color:#C0DCF2; +} + + +/*QMdiArea*/ +QMdiArea { + border:1px ridge gray; +} + +/*QMdiSubWindow*/ +QMdiSubWindow { + background-color: #f0f0f0; +} +QMdiSubWindow::systemButton { + background-color: #ffffff; /* 按钮背景色 */ + border: 1px solid #000000; /* 按钮边框 */ + border-radius: 4px; /* 按钮边框圆角 */ +} +QMdiSubWindow::systemButton:hover { + background-color: #eeeeee; /* 鼠标悬停时的背景色 */ +} +QMdiSubWindow::titleBar { + background-color: #cccccc; /* 标题栏背景色 */ + font: bold 12px; /* 加粗,12px 字体 */ + color: #000000; /* 标题栏文字颜色 */ +} + +MdiSubWindowEx::title { + height:32px; +} + +MdiSubWindowEx QWidget { + icon-size: 16px; +} + +SubMdiSubWindowEx::title { + height:32px; +} + +/*Ribbon*/ +QMenu { + background-color: #FCFCFC; + border: 1px solid #8492A6; +} +QMenu::item { + background-color: transparent; +} +iWxMenuItem::hover{ + border: 1px solid #FFB700; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +} +QMenu::item:selected { + background-color: #654321; +} + +#btnRibbonFile::menu-indicator{ + image:None; +} + +#btnRibbonFile{ + /*对大小统一放代码进行处理*/ + /*min-width:50px; + max-width:50px; + height:22px; + border: 1px; + border-top-left-radius: 2px; + border-top-right-radius: 2px;*/ + border: solid #416ABD; + color:white; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); +} +#btnRibbonFile::hover{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); +} +#btnRibbonFile::pressed{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467BBB, stop:0.5 #2F63AE,stop:0.51 #1C438A, stop:1 #358BC9); +} + +#tabWxMain::tab-bar { +/*对大小统一放代码进行处理*/ + /*left: 65px;*/ +} +#tabWxMain QTabBar::tab{ +/*对大小统一放代码进行处理*/ + /*height:40% + height:24px;*/ +} + + +#tabWxMain QTabBar::tab:selected +{ + /*border:1px solid blue; + border-bottom-color: none; + border-top-left-radius: 1px; + border-top-right-radius: 1px;*/ + /*margin-left: 2px; + margin-right: 2px;*/ + /*border: 1px solid #BAC9DB; + border-top: 1px solid #BAC9DB; + background: rgb(255,255,255); + font: Italic ; + margin:5px;*/ +} +#tabWxMain QTabBar::tab:!selected +{ + /*background: rgb(189,215,238); + border-bottom: 1px solid red; + margin-top: 1px; + border: none; + border-bottom-color: #FFFFFF;*/ +/* margin-left: 2px; + margin-right: 2px; + border-left-color: #FFFFFF;*/ +} +#tabWxMain QTabBar::tab:hover :selected +{ + /*border: 2px solid black; + background-color: black; + border-top-left-radius: 5px; + border-top-right-radius: 5px;*/ +} +#tabWxMain QTabBar::tab:hover:!selected +{ + /*border: 1px solid red;*/ +} + +#tabWxMain QTabWidget::pane{ + /*border-width:4px; + border-color:red; + border-style: solid; + background-color: transparent; + border: 1px solid red; top: -1px;background-color:grey;*/ +} + +#tabWxMain::pane +{ + border-width: 1px; + border-color: rgb(192, 192, 192); + border-style:solid; + top: -1px;/*background-color:grey;*/ +} + + +#tabWxMain QGroupBox{ + border-left: 1px solid #B0B0B0; + border-top: 0px solid gray; +} +#tabWxMain QGroupBox::title { + color: #081121/*#738399*/; + subcontrol-position: bottom center; +} + +/* QWebView */ +QWebView { + background-color: transparent; +} + + +#iWxWelcome #groupBox_2{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 77, 0, 255), stop:1 rgba(255, 255, 255, 255)); +} + + + + + + +QScrollBar:horizontal{ +background:#transparent; +padding:0px; +border-radius:5px; +max-height:12px; +} + +QScrollBar::handle:horizontal{ +background:rgb(220,220,220); +min-width:50px; +border-radius:5px; +} + +QScrollBar::handle:horizontal:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:horizontal:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:horizontal{ +background:none; +} + +QScrollBar::sub-page:horizontal{ +background:none; +} + +QScrollBar::add-line:horizontal{ +background:none; +} + +QScrollBar::sub-line:horizontal{ +background:none; +} + +QScrollBar:vertical{ +background:#transparent; +padding:0px; +border-radius:5px; +max-width:10px; +} + +QScrollBar::handle:vertical{ +background:rgb(220,220,220); +min-height:50px; +border-radius:5px; +} + +QScrollBar::handle:vertical:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:vertical:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:vertical{ +background:none; +} + +QScrollBar::sub-page:vertical{ +background:none; +} + +QScrollBar::add-line:vertical{ +background:none; +} + +QScrollBar::sub-line:vertical{ +background:none; +} + + diff --git a/Bin/Config/Common/WTAI.db b/Bin/Config/Common/WTAI.db new file mode 100644 index 0000000..c703116 Binary files /dev/null and b/Bin/Config/Common/WTAI.db differ diff --git a/Bin/Config/Common/WTAI_2k.css b/Bin/Config/Common/WTAI_2k.css new file mode 100644 index 0000000..c3f6eb0 --- /dev/null +++ b/Bin/Config/Common/WTAI_2k.css @@ -0,0 +1,694 @@ +/* +* WTAI's css setting for 2k-about monitor +* By WANG, Zhan-guo +* Created On: 2023-12-05 +* Modified On: 2024-09-13 +*/ + +/*窗体背景*/ +iDlgBase{ + background-color: #ffffff; +} +iPlotCurveWxT,iGuiPlot { + border : none; +} +/*QWidget { + font: 9pt; +}*/ + +/*参数及绘图属性窗体*/ +iGridRowUtils{ + background-color: #ffffff; + border : none; +} +ZxPtyPano{ + background-color: #ffffff; +/* border : none;*/ +} + +/* 两种Button:QPushButton&QToolButton */ +QPushButton,QToolButton { + background-color: transparent; + color: black; +} +QPushButton:hover:pressed,QPushButton:checked,QToolButton:hover:pressed,QToolButton:checked { + background-color: rgb(157, 195, 230); + border-radius: 5px; + box-sizing: border-box; +} +QPushButton:hover:!pressed,QToolButton:hover:!pressed { + background-color: rgb(198, 221, 241); + border-radius: 5px; + box-sizing: border-box; +} +QPushButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: padding; + left: -2px; +} +/* only for MenuButtonPopup */ +QToolButton[popupMode="1"] { + padding-right: 20px; +} +/*QToolButton::menu-button { + background: transparent; + width: 16px; +}*/ + + +/* QToolBar */ +QToolBar { + background-color: transparent; + border-style : dotted; +} +QToolBar:handle { +} +QToolBar::separator { +} + +/*日历组件*/ +#qt_calendar_calendarview { + background: white; +} +QDateTimeEdit { + background: transparent; +} +QCalendarView QHeaderView::section { + border: 1px solid lightgray; + height: 1px +} +QCalendarView QHeaderView { + border: 1px solid lightgray; + height: 1px +} +QCalendarView QTableCornerButton::section { + border: 1px solid lightgray; + height: 1px +} + +/*一些设置为透明背景的基础控件*/ +QToolTip{ + background-color: transparent; +} + +/* QTextEdit */ +QTextEdit { +} + +/* QLineEdit */ +QLineEdit { +} +QLineEdit[readOnly="true"]{ + color: gray; +} + +/* === QToolTip === */ +QToolTip { + background-color: light gray; + color: black; +} + +/*QSlider*/ +QSlider::groove:horizontal { + position: absolute; + top: 1px; height: 1px; + background: #B1B1B1; +} +QSlider::handle:horizontal { + border-image:url($/Res/Icon/slider-handle.png); + border: 1px solid #000000; + width: 8px; + margin: -5px 0; +} + + +/* QCheckBox */ +QCheckBox { + background-color: transparent; + background-size: 20px 20px; +} +QCheckBox::indicator::checked { + image: url($/Res/Icon/checkBox_checked.png); +} +QCheckBox::indicator::unchecked { + image: url($/Res/Icon/checkBox_unchecked.png); +} + + +/* QRadioButton */ +QRadioButton { + background-color: transparent; + background-size: 20px 20px; +} +QRadioButton::indicator::checked { + image: url($/Res/Icon/radio_checked.png); +} +QRadioButton::indicator::unchecked { + image: url($/Res/Icon/radio_unchecked.png); +} + +/* QComboBox*/ +QComboBox { + border: 1px solid gray; + border-radius: 3px; + padding: 1px 2px 1px 2px; + min-width: 3em; +} +ZxHeaderComboBoxEx{ + background-color: light gray; + min-width: 1em; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 20px; + + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +QComboBox::down-arrow { + image: url($/Res/Icon/CbxBtn.png); +} + +QDoubleSpinBox,QSpinBox { + background-color: transparent; +} + + +/* QGroupBox */ +QGroupBox { + background-color: transparent; +} +QGroupBox::title { + color: rgb(47, 85, 151); + subcontrol-origin: margin; + subcontrol-position: top left; + margin-left: 5px; +} + + + +/* QSplitter */ +QSplitter { +/* background-color: transparent;*/ +} +QSplitter::handle { + background-color:light blue; + border-width:0px; + border-style:dotted; + height:1px; +} + +/*QProgressBar*/ +QProgressBar{ + border: 1px solid gray; + border-radius: 5px; + text-align: center; +} + +/* QListWidget */ +QListWidget { + background-color: #ffffff; + border: 1px solid gray; +} +QListWidget::item:selected{ + background:lightblue; + color:blue; +} + + +/* QTreeWidget */ +QTreeWidget{ + background-color: #ffffff; + border-color:light gray; +} +QTreeWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeWidget QHeaderView { + background: transparent; +} + + +/*QTreeView*/ +QTreeView{ + background-color: #ffffff; + alternate-background-color:rgb(0, 192, 0); + border-color:light gray; +} +QTreeView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeView QHeaderView { + background: transparent; +} +/*QTreeView::item:selected{ + background:lightblue; + color:blue; +}*/ + + +/* QTableWidget */ +QTableWidget{ + background-color:transparent; + alternate-background-color:rgb(0, 192, 0); + border: none; +} +QTableWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QHeaderView { + background: transparent; +} +QTableWidget QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QScrollBar { + background:transparent; +} + + + +/* QTableView */ +QTableView{ + background-color:transparent; + alternate-background-color:rgb(232, 232, 232); + border: 1px solid gray; + /*border-style : ridge;*/ + + selection-background-color: rgb(51, 153, 255)/*lightblue*/; + selection-color: white; + + gridline-color: lightgray; +} +/*QTableView::grid +{ border: 1px solid red; +color: rgb(255, 0, 0); +gridline-color: rgb(255, 0, 0); +} +QTableView::grid +{ border: 1px solid gray; +}*/ + +QTableView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; + margin-left:-10px; +} +QTableView QHeaderView { + background: transparent; + border: 1px solid lightgray; +} +QTableView QTableCornerButton::section { + border: 0px solid lightgray; + background: transparent; +} +QTableView QScrollBar { + background:transparent; +} +/*QTableView::item::selected +{ + background-color:lightblue; + color: white; +}*/ + + +/* QTabWidget */ +QTabWidget::pane{ + border-width:1px; + border-style:dotted; +} +QTabWidget::tab-bar{ + border-width:0px; + +} +QTabBar::tab:first:selected, +QTabBar::tab:middle:selected, +QTabBar::tab:last:selected, +QTabBar::tab:only-one{ +/* background-color: white;*/ +/* color: blue;*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: outset;*/ +} +QTabBar::tab:first:!selected, +QTabBar::tab:middle:!selected, +QTabBar::tab:last:!selected { +/* background-color: transparent;*/ +/* color: rgb(128, 128, 128);*/ +/* border:1px solid rgba(0,0,0,50);*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: ridge;*/ +} + +QTabBar::tab:top, QTabBar::tab:bottom { +/* min-width:60px;*/ +} +QTabBar::tab:left, QTabBar::tab:right { +/* min-height:50px;*/ +} + + +/* === QMenu === */ +QMenu { + background-color: rgb(138, 209, 251); +} + +/* === QMenuBar === */ +QMenuBar { + background-color: transparent; +} +QMainWindow::separator { + + background-color: transparent; + border: 1px solid transparent; +} +QMainWindow::separator:horizontal { + border-top: 1px solid #a6a5a5; +} +QMainWindow::separator:vertical { + border-right: 1px solid #a6a5a5; +} + +/*QDockWidget*/ +QDockWidget{ +/* image: url($/Res/Image/WTAI_Main.png);*/ +/* border:1px ridge lightgray; + border:3px ridge red;*/ + /*titlebar-close-icon: url($/Res/Icon/close.png);*/ +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background-color: rgb(218,227,243); + + /* background: #dfdfdf; + border: 1px solid #C8C8C8; + border-right: 3px solid qlineargradient(x1: 1, y1: 0, x2: 0, y2: 0, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + border-left: 3px solid qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + border-top: 3px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + border-bottom: 3px solid qlineargradient(x1: 0, y1: 1, x2: 0, y2: 0, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + margin: 0px;*/ + +} + +QDockWidget::title { + text-align: left; +/* background: transparent; +background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6);*/ + background-color: #dfdfdf; + padding-left:0px; + height:24px; +} +QDockWidget::close-button,QDockWidget::float-button { + /* border:1px solid darkgray;*/ +/* background: darkgray;*/ +/* padding:0px;*/ +} +QDockWidget::close-button:hover,QDockWidget::float-button:hover { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background: gray; +} +QDockWidget::close-button:pressed,QDockWidget::float-button:pressed { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +/* padding:1px-1px-1px-1px;*/ +} +/*QDockWidget::close-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:0px; bottom:0px; + width:14px; +} +QDockWidget::float-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:16px; bottom:0px; + width:14px; +}*/ + +QTreeView, QListView, QTabWidget::pane{ + border:1px solid #C0DCF2; + selection-background-color:#F2F9FF; + selection-color:#386487; + alternate-background-color:#DAEFFF; + gridline-color:#C0DCF2; +} + + +/*QMdiArea*/ +QMdiArea { + border:1px ridge gray; +} + +/*QMdiSubWindow*/ +QMdiSubWindow { + background-color: #f0f0f0; +} +QMdiSubWindow::systemButton { + background-color: #ffffff; /* 按钮背景色 */ + border: 1px solid #000000; /* 按钮边框 */ + border-radius: 4px; /* 按钮边框圆角 */ +} +QMdiSubWindow::systemButton:hover { + background-color: #eeeeee; /* 鼠标悬停时的背景色 */ +} +QMdiSubWindow::titleBar { + background-color: #cccccc; /* 标题栏背景色 */ + font: bold 12px; /* 加粗,12px 字体 */ + color: #000000; /* 标题栏文字颜色 */ +} + +ZxMdiSubWindow::title { + height:32px; +} + +ZxMdiSubWindow QWidget { + icon-size: 16px; +} + +ZxMdiSubWindowChild::title { + height:30px; +} + +/*Ribbon*/ +QMenu { + background-color: #FCFCFC; + border: 1px solid #8492A6; +} +QMenu::item { + background-color: transparent; +} +iWxMenuItem::hover{ + border: 1px solid #FFB700; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +} +QMenu::item:selected { + background-color: #654321; +} + +#btnRibbonFile::menu-indicator{ + image:None; +} + +#btnRibbonFile{ + min-width:50px; + max-width:50px; + height:21px; + border: 1px; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + border: solid #416ABD; + color:white; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); +} +#btnRibbonFile::hover{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); +} +#btnRibbonFile::pressed{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467BBB, stop:0.5 #2F63AE,stop:0.51 #1C438A, stop:1 #358BC9); +} + +#tabWxMain::tab-bar { + left: 65px; +} +#tabWxMain QTabBar::tab{ + height:24px; +} + + +#tabWxMain QTabBar::tab:selected +{ + /*border:1px solid blue; + border-bottom-color: none; + border-top-left-radius: 1px; + border-top-right-radius: 1px;*/ + /*margin-left: 2px; + margin-right: 2px;*/ + /*border: 1px solid #BAC9DB; + border-top: 1px solid #BAC9DB; + background: rgb(255,255,255); + font: Italic ; + margin:5px;*/ +} +#tabWxMain QTabBar::tab:!selected +{ + /*background: rgb(189,215,238); + border-bottom: 1px solid red; + margin-top: 1px; + border: none; + border-bottom-color: #FFFFFF;*/ +/* margin-left: 2px; + margin-right: 2px; + border-left-color: #FFFFFF;*/ +} +#tabWxMain QTabBar::tab:hover :selected +{ + /*border: 2px solid black; + background-color: black; + border-top-left-radius: 5px; + border-top-right-radius: 5px;*/ +} +#tabWxMain QTabBar::tab:hover:!selected +{ + /*border: 1px solid red;*/ +} + +#tabWxMain QTabWidget::pane{ + /*border-width:4px; + border-color:red; + border-style: solid; + background-color: transparent; + border: 1px solid red; top: -1px;background-color:grey;*/ +} + +#tabWxMain::pane +{ + border-width: 1px; + border-color: rgb(192, 192, 192); + border-style:solid; + top: -1px;/*background-color:grey;*/ +} + + +#tabWxMain QGroupBox{ + border-left: 1px solid #B0B0B0; + border-top: 0px solid gray; +} +#tabWxMain QGroupBox::title { + color: #081121/*#738399*/; + subcontrol-position: bottom center; +} + +/* QWebView */ +QWebView { + background-color: transparent; +} + + +#iWxWelcome #groupBox_2{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 77, 0, 255), stop:1 rgba(255, 255, 255, 255)); +} + + + + + + +QScrollBar:horizontal{ +background:#transparent; +padding:0px; +border-radius:5px; +/*max-height:12px;*/ +height:12px; + +} + +QScrollBar::handle:horizontal{ +background:rgb(220,220,220); +min-width:50px; +border-radius:5px; + +/*min-width: 20px; +margin-bottom: 4px; +margin-top: 4px;*/ +} + +QScrollBar::handle:horizontal:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:horizontal:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:horizontal{ +background:none; +} + +QScrollBar::sub-page:horizontal{ +background:none; +} + +QScrollBar::add-line:horizontal{ +background:none; +} + +QScrollBar::sub-line:horizontal{ +background:none; +} + +QScrollBar:vertical{ +background:#transparent; +padding:0px; +border-radius:5px; +/*max-width:10px;*/ +width:10px; +} + +QScrollBar::handle:vertical{ +background:rgb(220,220,220); +min-height:50px; +border-radius:5px; +} + +QScrollBar::handle:vertical:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:vertical:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:vertical{ +background:none; +} + +QScrollBar::sub-page:vertical{ +background:none; +} + +QScrollBar::add-line:vertical{ +background:none; +} + +QScrollBar::sub-line:vertical{ +background:none; +} + + diff --git a/Bin/Config/Common/WTAI_4k.css b/Bin/Config/Common/WTAI_4k.css new file mode 100644 index 0000000..79bece0 --- /dev/null +++ b/Bin/Config/Common/WTAI_4k.css @@ -0,0 +1,692 @@ +/* +* WTAI's css setting for 4k-about monitor +* By WANG, Zhan-guo +* Created On: 2023-12-05 +* Modified On: 2024-09-13 +*/ + +/*窗体背景*/ +iDlgBase{ + background-color: #ffffff; +} +iPlotCurveWxT,iGuiPlot { + border : none; +} +/*QWidget { + font: 9pt; +}*/ + +/*参数及绘图属性窗体*/ +iGridRowUtils{ + background-color: #ffffff; + border : none; +} +ZxPtyPano{ + background-color: #ffffff; +/* border : none;*/ +} + +/* 两种Button:QPushButton&QToolButton */ +QPushButton,QToolButton { + background-color: transparent; + color: black; +} +QPushButton:hover:pressed,QPushButton:checked,QToolButton:hover:pressed,QToolButton:checked { + background-color: rgb(157, 195, 230); + border-radius: 10px; + box-sizing: border-box; +} +QPushButton:hover:!pressed,QToolButton:hover:!pressed { + background-color: rgb(198, 221, 241); + border-radius: 10px; + box-sizing: border-box; +} +QPushButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: padding; + left: -4px; +} +/* only for MenuButtonPopup */ +QToolButton[popupMode="1"] { + padding-right: 40px; +} +/*QToolButton::menu-button { + background: transparent; + width: 16px; +}*/ + + +/* QToolBar */ +QToolBar { + background-color: transparent; + border-style : dotted; +} +QToolBar:handle { +} +QToolBar::separator { +} + +/*日历组件*/ +#qt_calendar_calendarview { + background: white; +} +QDateTimeEdit { + background: transparent; +} +QCalendarView QHeaderView::section { + border: 2px solid lightgray; + height: 2px +} +QCalendarView QHeaderView { + border: 2px solid lightgray; + height: 2px +} +QCalendarView QTableCornerButton::section { + border: 2px solid lightgray; + height: 2px +} + +/*一些设置为透明背景的基础控件*/ +QToolTip{ + background-color: transparent; +} + +/* QTextEdit */ +QTextEdit { +} + +/* QLineEdit */ +QLineEdit { +} +QLineEdit[readOnly="true"]{ + color: gray; +} + +/* === QToolTip === */ +QToolTip { + background-color: light gray; + color: black; +} + +/*QSlider*/ +QSlider::groove:horizontal { + position: absolute; + top: 2px; height: 2px; + background: #B1B1B1; +} +QSlider::handle:horizontal { + border-image:url($/Res/Icon/slider-handle_4k.png); + border: 2px solid #000000; + width: 16px; + margin: -10px 0; +} + + +/* QCheckBox */ +QCheckBox { + background-color: transparent; + background-size: 40px 40px; +} +QCheckBox::indicator::checked { + image: url($/Res/Icon/checkBox_checked_4k.png); +} +QCheckBox::indicator::unchecked { + image: url($/Res/Icon/checkBox_unchecked_4k.png); +} + + +/* QRadioButton */ +QRadioButton { + background-color: transparent; + background-size: 40px 40px; +} +QRadioButton::indicator::checked { + image: url($/Res/Icon/radio_checked_4k.png); +} +QRadioButton::indicator::unchecked { + image: url($/Res/Icon/radio_unchecked_4k.png); +} + +/* QComboBox*/ +QComboBox { + border: 1px solid gray; + border-radius: 6px; + padding: 2px 4px 2px 4px; + min-width: 3em; +} +ZxHeaderComboBoxEx{ + background-color: light gray; + min-width: 1em; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 40px; + + border-left-width: 2px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +QComboBox::down-arrow { + image: url($/Res/Icon/CbxBtn_4k.png); +} + +QDoubleSpinBox,QSpinBox { + background-color: transparent; +} + + +/* QGroupBox */ +QGroupBox { + background-color: transparent; +} +QGroupBox::title { + color: rgb(47, 85, 151); + subcontrol-origin: margin; + subcontrol-position: top left; + margin-left: 10px; +} + + + +/* QSplitter */ +QSplitter { +/* background-color: transparent;*/ +} +QSplitter::handle { + background-color:light blue; + border-width:0px; + border-style:dotted; + height:2px; +} + +/*QProgressBar*/ +QProgressBar{ + border: 2px solid gray; + border-radius: 10px; + text-align: center; +} + +/* QListWidget */ +QListWidget { + background-color: #ffffff; + border: 2px solid gray; +} +QListWidget::item:selected{ + background:lightblue; + color:blue; +} + + +/* QTreeWidget */ +QTreeWidget{ + background-color: #ffffff; + border-color:light gray; +} +QTreeWidget QHeaderView::section { + border: 2px solid lightgray; + background: transparent; +} +QTreeWidget QHeaderView { + background: transparent; +} + + +/*QTreeView*/ +QTreeView{ + background-color: #ffffff; + alternate-background-color:rgb(0, 192, 0); + border-color:light gray; +} +QTreeView QHeaderView::section { + border: 2px solid lightgray; + background: transparent; +} +QTreeView QHeaderView { + background: transparent; +} +/*QTreeView::item:selected{ + background:lightblue; + color:blue; +}*/ + + +/* QTableWidget */ +QTableWidget{ + background-color:transparent; + alternate-background-color:rgb(0, 192, 0); + border: none; +} +QTableWidget QHeaderView::section { + border: 2px solid lightgray; + background: transparent; +} +QTableWidget QHeaderView { + background: transparent; +} +QTableWidget QTableCornerButton::section { + border: 2px solid lightgray; + background: transparent; +} +QTableWidget QScrollBar { + background:transparent; +} + + + +/* QTableView */ +QTableView{ + background-color:transparent; + alternate-background-color:rgb(232, 232, 232); + border: 2px solid gray; + /*border-style : ridge;*/ + + selection-background-color: rgb(51, 153, 255)/*lightblue*/; + selection-color: white; + + gridline-color: lightgray; +} +/*QTableView::grid +{ border: 1px solid red; +color: rgb(255, 0, 0); +gridline-color: rgb(255, 0, 0); +} +QTableView::grid +{ border: 1px solid gray; +}*/ + +QTableView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableView QHeaderView { + background: transparent; + border: 1px solid lightgray; +} +QTableView QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableView QScrollBar { + background:transparent; +} +/*QTableView::item::selected +{ + background-color:lightblue; + color: white; +}*/ + + +/* QTabWidget */ +QTabWidget::pane{ + border-width:1px; + border-style:dotted; +} +QTabWidget::tab-bar{ + border-width:0px; + +} +QTabBar::tab:first:selected, +QTabBar::tab:middle:selected, +QTabBar::tab:last:selected, +QTabBar::tab:only-one{ +/* background-color: white;*/ +/* color: blue;*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: outset;*/ +} +QTabBar::tab:first:!selected, +QTabBar::tab:middle:!selected, +QTabBar::tab:last:!selected { +/* background-color: transparent;*/ +/* color: rgb(128, 128, 128);*/ +/* border:1px solid rgba(0,0,0,50);*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: ridge;*/ +} + +QTabBar::tab:top, QTabBar::tab:bottom { +/* min-width:60px;*/ +} +QTabBar::tab:left, QTabBar::tab:right { +/* min-height:50px;*/ +} + + +/* === QMenu === */ +QMenu { + background-color: rgb(138, 209, 251); +} + +/* === QMenuBar === */ +QMenuBar { + background-color: transparent; +} +QMainWindow::separator { + + background-color: transparent; + border: 2px solid transparent; +} +QMainWindow::separator:horizontal { + border-top: 2px solid #a6a5a5; +} +QMainWindow::separator:vertical { + border-right: 2px solid #a6a5a5; +} + +/*QDockWidget*/ +QDockWidget{ +/* image: url($/Res/Image/WTAI_Main.png);*/ +/* border:1px ridge lightgray; + border:3px ridge red;*/ + /*titlebar-close-icon: url($/Res/Icon/close.png);*/ +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background-color: rgb(218,227,243); + + /* background: #dfdfdf; + border: 1px solid #C8C8C8; + border-right: 3px solid qlineargradient(x1: 1, y1: 0, x2: 0, y2: 0, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + border-left: 3px solid qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + border-top: 3px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + border-bottom: 3px solid qlineargradient(x1: 0, y1: 1, x2: 0, y2: 0, + stop: 0 #999999, stop: 0.33 #999999, stop: 0.34 transparent, stop: 1 transparent); + margin: 0px;*/ + +} + +QDockWidget::title { + text-align: left; +/* background: transparent; +background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6);*/ + background-color: #dfdfdf; + padding-left:0px; + height:48px; +} +QDockWidget::close-button,QDockWidget::float-button { + /* border:1px solid darkgray;*/ +/* background: darkgray;*/ +/* padding:0px;*/ +} +QDockWidget::close-button:hover,QDockWidget::float-button:hover { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background: gray; +} +QDockWidget::close-button:pressed,QDockWidget::float-button:pressed { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +/* padding:1px-1px-1px-1px;*/ +} +/*QDockWidget::close-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:0px; bottom:0px; + width:14px; +} +QDockWidget::float-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:16px; bottom:0px; + width:14px; +}*/ + +QTreeView, QListView, QTabWidget::pane{ + border:1px solid #C0DCF2; + selection-background-color:#F2F9FF; + selection-color:#386487; + alternate-background-color:#DAEFFF; + gridline-color:#C0DCF2; +} + + +/*QMdiArea*/ +QMdiArea { + border:1px ridge gray; +} + +/*QMdiSubWindow*/ +QMdiSubWindow { + background-color: #f0f0f0; +} +QMdiSubWindow::systemButton { + background-color: #ffffff; /* 按钮背景色 */ + border: 8px solid #000000; /* 按钮边框 */ + border-radius: 4px; /* 按钮边框圆角 */ +} +QMdiSubWindow::systemButton:hover { + background-color: #eeeeee; /* 鼠标悬停时的背景色 */ +} +QMdiSubWindow::titleBar { + background-color: #cccccc; /* 标题栏背景色 */ + font: bold 15px; /* 加粗,12px 字体 */ + color: #000000; /* 标题栏文字颜色 */ +} + +ZxMdiSubWindow::title { + height:64px; +} + +ZxMdiSubWindow QWidget { + icon-size: 32px; +} + +ZxMdiSubWindowChild::title { + height:48px; +} + +/*Ribbon*/ +QMenu { + background-color: #FCFCFC; + border: 1px solid #8492A6; +} +QMenu::item { + background-color: transparent; +} +iWxMenuItem::hover{ + border: 1px solid #FFB700; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +} +QMenu::item:selected { + background-color: #654321; +} + +#btnRibbonFile::menu-indicator{ + image:None; +} + +#btnRibbonFile{ + min-width:100px; + max-width:100px; + height:42px; + border: 2px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border: solid #416ABD; + color:white; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); +} +#btnRibbonFile::hover{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); +} +#btnRibbonFile::pressed{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467BBB, stop:0.5 #2F63AE,stop:0.51 #1C438A, stop:1 #358BC9); +} + +#tabWxMain::tab-bar { + left: 130px; +} +#tabWxMain QTabBar::tab{ + height:48px; +} + + +#tabWxMain QTabBar::tab:selected +{ + /*border:1px solid blue; + border-bottom-color: none; + border-top-left-radius: 1px; + border-top-right-radius: 1px;*/ + /*margin-left: 2px; + margin-right: 2px;*/ + /*border: 1px solid #BAC9DB; + border-top: 1px solid #BAC9DB; + background: rgb(255,255,255); + font: Italic ; + margin:5px;*/ +} +#tabWxMain QTabBar::tab:!selected +{ + /*background: rgb(189,215,238); + border-bottom: 1px solid red; + margin-top: 1px; + border: none; + border-bottom-color: #FFFFFF;*/ +/* margin-left: 2px; + margin-right: 2px; + border-left-color: #FFFFFF;*/ +} +#tabWxMain QTabBar::tab:hover :selected +{ + /*border: 2px solid black; + background-color: black; + border-top-left-radius: 5px; + border-top-right-radius: 5px;*/ +} +#tabWxMain QTabBar::tab:hover:!selected +{ + /*border: 1px solid red;*/ +} + +#tabWxMain QTabWidget::pane{ + /*border-width:4px; + border-color:red; + border-style: solid; + background-color: transparent; + border: 1px solid red; top: -1px;background-color:grey;*/ +} + +#tabWxMain::pane +{ + border-width: 1px; + border-color: rgb(192, 192, 192); + border-style:solid; + top: -1px;/*background-color:grey;*/ +} + + +#tabWxMain QGroupBox{ + border-left: 2px solid #B0B0B0; + border-top: 0px solid gray; +} +#tabWxMain QGroupBox::title { + color: #081121/*#738399*/; + subcontrol-position: bottom center; +} + +/* QWebView */ +QWebView { + background-color: transparent; +} + + +#iWxWelcome #groupBox_2{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 77, 0, 255), stop:1 rgba(255, 255, 255, 255)); +} + + + + + + +QScrollBar:horizontal{ +background:#transparent; +padding:0px; +border-radius:10px; +/*max-height:12px;*/ +height:24px; +} + +QScrollBar::handle:horizontal{ +background:rgb(220,220,220); +min-width:80px; +border-radius:10px; + +/*min-width: 20px; +margin-bottom: 4px; +margin-top: 4px;*/ +} + +QScrollBar::handle:horizontal:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:horizontal:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:horizontal{ +background:none; +} + +QScrollBar::sub-page:horizontal{ +background:none; +} + +QScrollBar::add-line:horizontal{ +background:none; +} + +QScrollBar::sub-line:horizontal{ +background:none; +} + +QScrollBar:vertical{ +background:#transparent; +padding:0px; +border-radius:5px; +/*max-width:10px;*/ +width:18px; +} + +QScrollBar::handle:vertical{ +background:rgb(220,220,220); +min-height:100px; +border-radius:10px; +} + +QScrollBar::handle:vertical:hover{ +background:rgb(220,220,220); +} + +QScrollBar::handle:vertical:pressed{ +background:rgb(192,192,192); +} + +QScrollBar::add-page:vertical{ +background:none; +} + +QScrollBar::sub-page:vertical{ +background:none; +} + +QScrollBar::add-line:vertical{ +background:none; +} + +QScrollBar::sub-line:vertical{ +background:none; +} + + diff --git a/Bin/Config/Common/WTAI_Attributes_cn.dat b/Bin/Config/Common/WTAI_Attributes_cn.dat new file mode 100644 index 0000000..9dae8d7 --- /dev/null +++ b/Bin/Config/Common/WTAI_Attributes_cn.dat @@ -0,0 +1 @@ +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx6aEF0dHJpYnV0ZXM+DQogICwzyAgPFB0eUdyb3VwIExhYmVsPSLlr7nosaEiIE5hbWU9Ilp4T2JqQmFzZSIgT3JkZXI9IjEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5a+56LGh5ZCN56ewIiBOYW1lPSJaeE9iakJhc2UuTmFtZSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpCYXNlLmNwcCg1OTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrlrZDlr7nosaEiIE5hbWU9Ilp4T2JqQmFzZS5TaG93U3ViT2JqcyIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpCYXNlLmNwcCg1OTgpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iQXhpczEiIE9yZGVyPSIyIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWQjeensCIgTmFtZT0iQXhpcy5OYW1lIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MTgpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLljZXkvY0iIE5hbWU9IkF4aXMuVW5pdCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQyMykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6IyD5Zu0IiBOYW1lPSJBeGlzMiIgT3JkZXI9IjMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5bCPIiBOYW1lPSJTY2FsZS5NaW4iIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzMSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuacgOWkpyIgTmFtZT0iU2NhbGUuTWF4IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MzIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Iue9keagvCIgTmFtZT0iQXhpczMiIE9yZGVyPSI0Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuS4u+WIu+W6piIgTmFtZT0iQXhpcy5zaG93QmlnU2NhbGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzOSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuue7huWIhuWIu+W6piIgTmFtZT0iQXhpcy5zaG93U21hbGxTY2FsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Li75Yi75bqmIiBOYW1lPSJBeGlzLk1haW5JbnRlcnZhbCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDMzKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i57uG5YiG5Yi75bqmIiBOYW1lPSJBeGlzLlN1YkludGVydmFsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MzQpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuaYvuekuuaooeW8jyIgTmFtZT0iQXhpczQiIE9yZGVyPSI1Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWIu+W6puaYvuS6juWkluS+pyIgTmFtZT0iQXhpcy5zY2FsZU91dHdhcmQiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0MSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS5mOW5guaYvuekuuWIu+W6piIgTmFtZT0iQXhpcy5zaG93VGlja0FzRXhwIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlsI/mlbDkvY3mlbAiIE5hbWU9IkF4aXMuRGVjaW1hbE51bWJlciIgRWRpdG9yPSJJbnRTcGluIiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQyKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IkF4aXM1IiBPcmRlcj0iNiI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlkI3np7DlrZfkvZMiIE5hbWU9IkF4aXMuTmFtZUZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0NCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWIu+W6puWtl+S9kyIgTmFtZT0iQXhpcy5OdW1iZXJGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLluYLlrZfkvZMiIE5hbWU9IkF4aXMuSW5kZXhGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDgpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpopzoibIiIE5hbWU9IkF4aXMuQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSI0IiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MjYpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWfuuehgCIgTmFtZT0iUGxvdDEiIE9yZGVyPSI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuagh+mimCIgTmFtZT0iUGxvdC5TaG93VGl0bGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuWbvuS+iyIgTmFtZT0iUGxvdC5TaG93TGVnZW5kIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2ODcpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Iue9keagvCIgTmFtZT0iUGxvdDIiIE9yZGVyPSI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuS4u+WIu+W6plgiIE5hbWU9IlBsb3Quc2hvd1NjYWxlQmlnWCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjkyKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmWSIgTmFtZT0iUGxvdC5zaG93U2NhbGVCaWdZIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrmrKHliLvluqZYIiBOYW1lPSJQbG90LnNob3dTY2FsZVNtYWxsWCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMyIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk1KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65qyh5Yi75bqmWSIgTmFtZT0iUGxvdC5zaG93U2NhbGVTbWFsbFkiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjQiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY5NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aGr5YWFIiBOYW1lPSJQbG90MyIgT3JkZXI9IjkiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5riQ5Y+Y6ImyMSIgTmFtZT0iUGxvdC5CS0NvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjgyKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5riQ5Y+Y6ImyMiIgTmFtZT0iUGxvdC5CS0NvbG9yRXgiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIyIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2ODMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iUGxvdDQiIE9yZGVyPSIxMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLovrnmoYbpopzoibIiIE5hbWU9IlBsb3QuRnJhbWVDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJQbG90NSIgT3JkZXI9IjExIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+uei3nSIgTmFtZT0iUGxvdC5NYXJnaW4iIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY5OCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5YW25a6DIiBOYW1lPSJQbG90NiIgT3JkZXI9IjEyIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuagh+mimOS9jee9riIgTmFtZT0iUGxvdC5UaXRsZVBvcyIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNzAwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLln7rnoYAiIE5hbWU9Ilp4T2JqMSIgT3JkZXI9IjEzIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuabsue6v+WPr+ingSIgTmFtZT0iWnhPYmpDdXJ2ZUJhc2UuQ3VydmVWaXNpYmxlIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlUHJlc3N1cmUuY3BwKDI5NCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iue6v+WPr+ingSIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuTGluZVZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqQ3VydmVGbG93LmNwcCg4NzApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmtYHliqjmrrXlj6/op4EiIE5hbWU9Ilp4T2JqQ3VydmVGbG93LlNlZ21lbnRWaXNpYmxlIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODcxKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9Ilp4T2JqMiIgT3JkZXI9IjE0Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueUu+eslCIgTmFtZT0iWnhPYmpDdXJ2ZUJhc2UuUGVuIiBFZGl0b3I9IlBlbiIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMjkzKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5rWB5Yqo57q/6aKc6ImyIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5jbHJGbG93TGluZSIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqQ3VydmVGbG93LmNwcCg4NzIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmtYHliqjmrrXpopzoibIiIE5hbWU9Ilp4T2JqQ3VydmVGbG93LmNsckZsb3dTZWdtZW50IiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMyIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iWnhPYmpDdXJ2ZUJhc2UuRG90IiBFZGl0b3I9IkRvdCIgT3JkZXI9IjQiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMjk1KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6YCJ5Lit54K55qih5byPIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5Eb3RTZWwiIEVkaXRvcj0iRG90IiBPcmRlcj0iNSIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTYpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuS9jee9riIgTmFtZT0iWnhPYmozIiBPcmRlcj0iMTUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6YCJ5oup57Si5byVIiBOYW1lPSJaeE9iakN1cnZlRmxvdy5DdXJTZWdQdEluZGV4IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBSZWFkb25seT0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5YW25a6DIiBOYW1lPSJaeE9iajQiIE9yZGVyPSIxNiI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnp7vliqjmqKHlvI8iIE5hbWU9Ilp4T2JqQ3VydmVGbG93Lm9iakN1cnZlRmxvd01vdmVNb2RlIiBFZGl0b3I9IkVudW0iIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlUHJlc3N1cmUuY3BwKDMwMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJMZWdlbmQxIiBPcmRlcj0iMTciPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S66L655qGGIiBOYW1lPSJMZC5TaG93RnJhbWUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM3OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iTGQuRnJhbWVQZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzgwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLliIbnu4TmoIfor4YiIE5hbWU9IkxlZ2VuZDIiIE9yZGVyPSIxOCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXoibIiIE5hbWU9IkxkR3JvdXAuQmFja2dyZENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4MikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheiJsumAj+aYjuW6piIgTmFtZT0iTGRHcm91cC5CYWNrZ3JkQ2xyQWxwaGEiIEVkaXRvcj0iU2xpZGVyIiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzgzKSIgTWluPSIwIiBNYXg9IjEwMCIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5YiG57uE5ZCN56ew5a2X5L2TIiBOYW1lPSJMZEdyb3VwLlRleHRGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLliIbnu4TlkI3np7DpopzoibIiIE5hbWU9IkxkR3JvdXAuVGV4dENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Zu+5L6L6aG5IiBOYW1lPSJMZWdlbmQzIiBPcmRlcj0iMTkiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6aKc6ImyIiBOYW1lPSJMZEl0ZW0uQmFja2dyZENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4NykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheiJsumAj+aYjuW6piIgTmFtZT0iTGRJdGVtLkJhY2tncmRDbHJBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODgpIiBNaW49IjAiIE1heD0iMTAwIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77kvovlkI3np7DlrZfkvZMiIE5hbWU9IkxkSXRlbS5UZXh0Rm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Zu+5L6L5ZCN56ew6aKc6ImyIiBOYW1lPSJMZEl0ZW0uVGV4dENsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5MCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJMZWdlbmQ0IiBPcmRlcj0iMjAiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5YaF57yp6L+bKHB4KSIgTmFtZT0iTGQuTWFyZ2luSW5uZXIiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlpJbnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5PdXRlciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5MykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5pW05L2T5L2N572uIiBOYW1lPSJMZWdlbmQ1IiBPcmRlcj0iMjEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5L2N572uIiBOYW1lPSJMZC5MZFBvcyIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzY2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9IkxlZ2VuZDYiIE9yZGVyPSIyMiIgRXhwYW5kPSIwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWbvuekuuWuveW6piIgTmFtZT0iTGQuTGVmdFdpZHRoIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBSZWFkb25seT0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzk0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY6auY5bqmIiBOYW1lPSJMZC5Hcm91cEhlaWdodCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5NSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5a+56LGhIiBOYW1lPSJUaXRsZTEiIE9yZGVyPSIyMyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmoIfpopjlhoXlrrkiIE5hbWU9IlRpdGxlLlRpdGxlVGV4dCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJUaXRsZS5jcHAoOTcpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iVGl0bGUyIiBPcmRlcj0iMjQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5a2X5L2TIiBOYW1lPSJUaXRsZS5UZXh0Rm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJUaXRsZS5jcHAoOTkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmoIfpopjpopzoibIiIE5hbWU9IlRpdGxlLlRleHRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLln7rnoYAiIE5hbWU9IlJlY3QxIiBPcmRlcj0iMjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S66L655qGGIiBOYW1lPSJSZWN0LlNob3dCb3giIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA5KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlJlY3QyIiBPcmRlcj0iMjYiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6ImyIiBOYW1lPSJSZWN0LkJhY2tncm91bmRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6Imy6YCP5piO5bqmIiBOYW1lPSJSZWN0LkJhY2tncm91bmRBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMwOCkiIE1pbj0iMCIgTWF4PSIxMDAiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJSZWN0MyIgT3JkZXI9IjI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueUu+eslCIgTmFtZT0iUmVjdC5Cb3VuZFBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIxIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMxMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJCYW5kMSIgT3JkZXI9IjI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW3pui+ueeVjCIgTmFtZT0iQmFuZC5MIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyMykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWPs+i+ueeVjCIgTmFtZT0iQmFuZC5SIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyNCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4iui+ueeVjCIgTmFtZT0iQmFuZC5UIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4i+i+ueeVjCIgTmFtZT0iQmFuZC5CIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2ludCIgT3JkZXI9IjI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iUG9pbnQuRG90IiBFZGl0b3I9IkRvdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUG9pbnQuY3BwKDE1NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJMaW5lMSIgT3JkZXI9IjMwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuueCuSIgTmFtZT0iTGluZS5TaG93RG90UG9pbnQiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqTGluZS5jcHAoMjgzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IkxpbmUyIiBPcmRlcj0iMzEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i55S756yUIiBOYW1lPSJMaW5lLlBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4MikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iTGluZS5Eb3QiIEVkaXRvcj0iRG90IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODQpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuS9jee9riIgTmFtZT0iTGluZTMiIE9yZGVyPSIzMiI+DQogICAgICAgIDxQdHlHcm91cCBMYWJlbD0i6LW354K5IiBOYW1lPSJTdGFydFBvcyIgT3JkZXI9IjEiIEV4cGFuZD0iMCI+DQogICAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0iWCIgTmFtZT0iU3RhcnRQb3MuWCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyNzgpIi8+DQogICAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0iWSIgTmFtZT0iU3RhcnRQb3MuWSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyNzkpIi8+DQogICAgICAgIDwvUHR5R3JvdXA+DQogICAgICAgIDxQdHlHcm91cCBMYWJlbD0i57uI54K5IiBOYW1lPSJFbmRQb3MiIE9yZGVyPSIzMyIgRXhwYW5kPSIwIj4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJYIiBOYW1lPSJFbmRQb3MuWCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODApIi8+DQogICAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0iWSIgTmFtZT0iRW5kUG9zLlkiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqTGluZS5jcHAoMjgxKSIvPg0KICAgICAgICA8L1B0eUdyb3VwPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlBvbHlnb24xIiBPcmRlcj0iMzQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5piv5ZCm5aGr5YWFIiBOYW1lPSJQb2x5Z29uLklzRmlsbCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpQb2x5Z29uLmNwcCgyODMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXpopzoibIiIE5hbWU9IlBvbHlnb24uRmlsbENvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpQb2x5Z29uLmNwcCgyODIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iUG9seWdvbjIiIE9yZGVyPSIzNSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLovrnnlYznlLvnrJQiIE5hbWU9IlBvbHlnb24uUGVuIiBFZGl0b3I9IlBlbiIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUG9seWdvbi5jcHAoMjgxKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlr7nosaEiIE5hbWU9IlRleHQxIiBPcmRlcj0iMzYiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5paH5pysIiBOYW1lPSJUZXh0LlRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjA2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLmmL7npLrmqKHlvI8iIE5hbWU9IlRleHQyIiBPcmRlcj0iMzciPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6Ieq5Yqo6LCD5pW0IiBOYW1lPSJUZXh0LkF1dG9BZGp1c3QiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjA5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5a+56b2Q5qih5byPIiBOYW1lPSJUZXh0LkFsaWduRmxhZyIgRWRpdG9yPSJGbGFncyIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjEzKSIvPg0KICAgICAgICA8UHR5R3JvdXAgTGFiZWw9IuaWh+acrOWvuem9kCIgTmFtZT0iQWxpZ24iIE9yZGVyPSIzIiAgRXhwYW5kPSIwIj4NCiAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5rC05bmz5a+56b2QIiBOYW1lPSJUZXh0LkFsaWduSG9yIiBFZGl0b3I9IkVudW0iIE9yZGVyPSIxIiBQYXRoPSJaeE9ialRleHQuY3BwKDIxNikiLz4NCiAgICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Z6C55u05a+56b2QIiBOYW1lPSJUZXh0LkFsaWduVmVydCIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMjYpIi8+DQogICAgICAgIDwvUHR5R3JvdXA+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iVGV4dDMiIE9yZGVyPSIzOCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZMiIE5hbWU9IlRleHQuRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDcpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZPpopzoibIiIE5hbWU9IlRleHQuQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9ialRleHQuY3BwKDIwOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iVGV4dC5Cb3JkZXJQZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iOSIgUGF0aD0iWnhTdHJpbmdJdGVtLmNwcCgxMjEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWFtuWugyIgTmFtZT0iVGV4dDQiIE9yZGVyPSIzOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlhYHorrjnvJbovpEiIE5hbWU9IlRleHQuTWFudWxFZGl0IiBFZGl0b3I9IkJvb2wiIE9yZGVyPSI1IiBQYXRoPSJaeE9ialRleHQuY3BwKDIxMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Zu+54mHIiBOYW1lPSJJbWFnZSIgT3JkZXI9IjQwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuadpea6kCIgTmFtZT0iSW1hZ2UuSW1nUGF0aCIgRWRpdG9yPSJQaWN0dXJlIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpJbWFnZS5jcHAoMTEwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLoibLooagiIE5hbWU9IkNvbG9yVGFibGUiIE9yZGVyPSI0MSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlkI3np7AiIE5hbWU9IkNvbG9yVGFibGUuTmFtZSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyODcpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLljZXkvY0iIE5hbWU9IkNvbG9yVGFibGUuVW5pdCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyODgpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlpKciIE5hbWU9IkNvbG9yVGFibGUuTWF4IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkNvbG9yVGFibGUuY3BwKDI4OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuacgOWwjyIgTmFtZT0iQ29sb3JUYWJsZS5NaW4iIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjkwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i57G75Z6LIiBOYW1lPSJDb2xvclRhYmxlLkNvbG9yVHlwZSIgRWRpdG9yPSJFbnVtIiBPcmRlcj0iNSIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyOTIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIuQm9yZGVyIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJvcmRlciIgT3JkZXI9IjQyIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIuVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iUGVuIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJvcmRlci5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJhciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIiIE9yZGVyPSI0MyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSJXaWR0aCIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIuV2lkdGgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ2NikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIuRmlsbCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDY3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5GaWxsQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMyIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDcwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLlZhbHVlIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlIiBPcmRlcj0iNDQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlLlBpblZhbHVlIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuVmFsdWUuUGluRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDc2KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlLlBpbkNsciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjMiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ3NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0iWnhPYmpDdXJ2ZUJhciIgTmFtZT0iWnhPYmpDdXJ2ZUJhciIgT3JkZXI9IjQ1Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5TaG93M0QiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ3OSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJXbUxpbmUiIE9yZGVyPSI0NiI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnlLvnrJQiIE5hbWU9IldtTGluZS5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0ibm1PYmpMaW5lLmNwcCgyNzgpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iT2JqUG9seWdvbiIgT3JkZXI9IjQ3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iT2JqUG9seWdvbi5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0ibm1PYmpQb2x5Z29uLmNwcCgxODMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXog4zmma8iIE5hbWU9Ik9ialBvbHlnb24uQmFja2dyZENvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMiIgUGF0aD0ibm1PYmpQb2x5Z29uLmNwcCgxODQpIi8+DQogICAgPC9QdHlHcm91cD4NCjwvemhBdHRyaWJ1dGVzPg0K \ No newline at end of file diff --git a/Bin/Config/Common/WTAI_Attributes_en.dat b/Bin/Config/Common/WTAI_Attributes_en.dat new file mode 100644 index 0000000..5826338 --- /dev/null +++ b/Bin/Config/Common/WTAI_Attributes_en.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx6aEF0dHJpYnV0ZXM+DQwzyoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iWnhPYmpCYXNlIiBPcmRlcj0iMSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlr7nosaHlkI3np7AiIE5hbWU9Ilp4T2JqQmFzZS5OYW1lIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhc2UuY3BwKDU5NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuWtkOWvueixoSIgTmFtZT0iWnhPYmpCYXNlLlNob3dTdWJPYmpzIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhc2UuY3BwKDU5OCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5a+56LGhIiBOYW1lPSJBeGlzMSIgT3JkZXI9IjIiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5ZCN56ewIiBOYW1lPSJBeGlzLk5hbWUiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQxOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWNleS9jSIgTmFtZT0iQXhpcy5Vbml0IiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBSZWFkb25seT0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDIzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLojIPlm7QiIE5hbWU9IkF4aXMyIiBPcmRlcj0iMyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlsI8iIE5hbWU9IlNjYWxlLk1pbiIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDMxKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5aSnIiBOYW1lPSJTY2FsZS5NYXgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzMikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i572R5qC8IiBOYW1lPSJBeGlzMyIgT3JkZXI9IjQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmIiBOYW1lPSJBeGlzLnNob3dCaWdTY2FsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDM5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S657uG5YiG5Yi75bqmIiBOYW1lPSJBeGlzLnNob3dTbWFsbFNjYWxlIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLkuLvliLvluqYiIE5hbWU9IkF4aXMuTWFpbkludGVydmFsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0MzMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnu4bliIbliLvluqYiIE5hbWU9IkF4aXMuU3ViSW50ZXJ2YWwiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQzNCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5pi+56S65qih5byPIiBOYW1lPSJBeGlzNCIgT3JkZXI9IjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Yi75bqm5pi+5LqO5aSW5L6nIiBOYW1lPSJBeGlzLnNjYWxlT3V0d2FyZCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQxKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5LmY5bmC5pi+56S65Yi75bqmIiBOYW1lPSJBeGlzLnNob3dUaWNrQXNFeHAiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0OSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWwj+aVsOS9jeaVsCIgTmFtZT0iQXhpcy5EZWNpbWFsTnVtYmVyIiBFZGl0b3I9IkludFNwaW4iIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkF4aXNCYXNlLmNwcCg0NDIpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iQXhpczUiIE9yZGVyPSI2Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWQjeensOWtl+S9kyIgTmFtZT0iQXhpcy5OYW1lRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJBeGlzQmFzZS5jcHAoNDQ0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Yi75bqm5a2X5L2TIiBOYW1lPSJBeGlzLk51bWJlckZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW5guWtl+S9kyIgTmFtZT0iQXhpcy5JbmRleEZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjMiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQ0OCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuminOiJsiIgTmFtZT0iQXhpcy5Db2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjQiIFBhdGg9Ilp4U3ViQXhpc0Jhc2UuY3BwKDQyNikiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJQbG90MSIgT3JkZXI9IjciPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65qCH6aKYIiBOYW1lPSJQbG90LlNob3dUaXRsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Zu+5L6LIiBOYW1lPSJQbG90LlNob3dMZWdlbmQiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i572R5qC8IiBOYW1lPSJQbG90MiIgT3JkZXI9IjgiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S65Li75Yi75bqmWCIgTmFtZT0iUGxvdC5zaG93U2NhbGVCaWdYIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrkuLvliLvluqZZIiBOYW1lPSJQbG90LnNob3dTY2FsZUJpZ1kiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY5MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuaYvuekuuasoeWIu+W6plgiIE5hbWU9IlBsb3Quc2hvd1NjYWxlU21hbGxYIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIzIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2OTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrmrKHliLvluqZZIiBOYW1lPSJQbG90LnNob3dTY2FsZVNtYWxsWSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iNCIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlBsb3QzIiBPcmRlcj0iOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmuJDlj5joibIxIiBOYW1lPSJQbG90LkJLQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg2ODIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmuJDlj5joibIyIiBOYW1lPSJQbG90LkJLQ29sb3JFeCIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4UGxvdEJhc2UuY3BwKDY4MykiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQbG90NCIgT3JkZXI9IjEwIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhuminOiJsiIgTmFtZT0iUGxvdC5GcmFtZUNvbG9yIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjg1KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLovrnnlYwiIE5hbWU9IlBsb3Q1IiBPcmRlcj0iMTEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6L656LedIiBOYW1lPSJQbG90Lk1hcmdpbiIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhQbG90QmFzZS5jcHAoNjk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9IlBsb3Q2IiBPcmRlcj0iMTIiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5L2N572uIiBOYW1lPSJQbG90LlRpdGxlUG9zIiBFZGl0b3I9IkVudW0iIE9yZGVyPSIxIiBQYXRoPSJaeFBsb3RCYXNlLmNwcCg3MDApIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWfuuehgCIgTmFtZT0iWnhPYmoxIiBPcmRlcj0iMTMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5puy57q/5Y+v6KeBIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5DdXJ2ZVZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMjk0KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i57q/5Y+v6KeBIiBOYW1lPSJaeE9iakN1cnZlRmxvdy5MaW5lVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iua1geWKqOauteWPr+ingSIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuU2VnbWVudFZpc2libGUiIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjMiIFBhdGg9Ilp4T2JqQ3VydmVGbG93LmNwcCg4NzEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iWnhPYmoyIiBPcmRlcj0iMTQiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i55S756yUIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTMpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmtYHliqjnur/popzoibIiIE5hbWU9Ilp4T2JqQ3VydmVCYXNlLmNsckZsb3dMaW5lIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUZsb3cuY3BwKDg3MikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iua1geWKqOauteminOiJsiIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cuY2xyRmxvd1NlZ21lbnQiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODczKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i54K55qih5byPIiBOYW1lPSJaeE9iakN1cnZlQmFzZS5Eb3QiIEVkaXRvcj0iRG90IiBPcmRlcj0iNCIgUGF0aD0iWnhPYmpDdXJ2ZVByZXNzdXJlLmNwcCgyOTUpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpgInkuK3ngrnmqKHlvI8iIE5hbWU9Ilp4T2JqQ3VydmVCYXNlLkRvdFNlbCIgRWRpdG9yPSJEb3QiIE9yZGVyPSI1IiBQYXRoPSJaeE9iakN1cnZlUHJlc3N1cmUuY3BwKDI5NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5L2N572uIiBOYW1lPSJaeE9iajMiIE9yZGVyPSIxNSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLpgInmi6nntKLlvJUiIE5hbWU9Ilp4T2JqQ3VydmVGbG93LkN1clNlZ1B0SW5kZXgiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeE9iakN1cnZlRmxvdy5jcHAoODc1KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlhbblroMiIE5hbWU9Ilp4T2JqNCIgT3JkZXI9IjE2Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuenu+WKqOaooeW8jyIgTmFtZT0iWnhPYmpDdXJ2ZUZsb3cub2JqQ3VydmVGbG93TW92ZU1vZGUiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqQ3VydmVQcmVzc3VyZS5jcHAoMzAwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IkxlZ2VuZDEiIE9yZGVyPSIxNyI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmL7npLrovrnmoYYiIE5hbWU9IkxkLlNob3dGcmFtZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzc5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6L655qGG55S756yUIiBOYW1lPSJMZC5GcmFtZVBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODApIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWIhue7hOagh+ivhiIgTmFtZT0iTGVnZW5kMiIgT3JkZXI9IjE4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheiJsiIgTmFtZT0iTGRHcm91cC5CYWNrZ3JkQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzgzKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6Imy6YCP5piO5bqmIiBOYW1lPSJMZEdyb3VwLkJhY2tncmRDbHJBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE1pbj0iMCIgTWF4PSIxMDAiIE9yZGVyPSIyIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLliIbnu4TlkI3np7DlrZfkvZMiIE5hbWU9IkxkR3JvdXAuVGV4dEZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjMiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4NSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWIhue7hOWQjeensOminOiJsiIgTmFtZT0iTGRHcm91cC5UZXh0Q2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iNCIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg2KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlm77kvovpobkiIE5hbWU9IkxlZ2VuZDMiIE9yZGVyPSIxOSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLloavlhYXpopzoibIiIE5hbWU9IkxkSXRlbS5CYWNrZ3JkQ2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzg3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5aGr5YWF6Imy6YCP5piO5bqmIiBOYW1lPSJMZEl0ZW0uQmFja2dyZENsckFscGhhIiBFZGl0b3I9IlNsaWRlciIgTWluPSIwIiBNYXg9IjEwMCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM4OCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWbvuS+i+WQjeensOWtl+S9kyIgTmFtZT0iTGRJdGVtLlRleHRGb250IiBFZGl0b3I9IkZvbnQiIE9yZGVyPSIzIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzODkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77kvovlkI3np7DpopzoibIiIE5hbWU9IkxkSXRlbS5UZXh0Q2xyIiBFZGl0b3I9IkNvbG9yIiBPcmRlcj0iNCIgUGF0aD0iWnhTdWJMZWdlbmRFeC5jcHAoMzkwKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLovrnnlYwiIE5hbWU9IkxlZ2VuZDQiIE9yZGVyPSIyMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlhoXnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5Jbm5lciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUmVhZG9ubHk9IjEiICBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTIpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlpJbnvKnov5socHgpIiBOYW1lPSJMZC5NYXJnaW5PdXRlciIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUmVhZG9ubHk9IjEiICBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuaVtOS9k+S9jee9riIgTmFtZT0iTGVnZW5kNSIgT3JkZXI9IjIxIj4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS9jee9riIgTmFtZT0iTGQuTGRQb3MiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM2NikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5YW25a6DIiBOYW1lPSJMZWdlbmQ2IiBPcmRlcj0iMjIiIEV4cGFuZD0iMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlm77npLrlrr3luqYiIE5hbWU9IkxkLkxlZnRXaWR0aCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUmVhZG9ubHk9IjEiIFBhdGg9Ilp4U3ViTGVnZW5kRXguY3BwKDM5NCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuagh+mimOmrmOW6piIgTmFtZT0iTGQuR3JvdXBIZWlnaHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFJlYWRvbmx5PSIxIiBQYXRoPSJaeFN1YkxlZ2VuZEV4LmNwcCgzOTUpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iVGl0bGUxIiBPcmRlcj0iMjMiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5YaF5a65IiBOYW1lPSJUaXRsZS5UaXRsZVRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk3KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLlpJbop4IiIE5hbWU9IlRpdGxlMiIgT3JkZXI9IjI0Ij4NCiAgICA8UHR5SXRlbSBMYWJlbD0i5qCH6aKY5a2X5L2TIiBOYW1lPSJUaXRsZS5UZXh0Rm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMSIgUGF0aD0iWnhTdWJUaXRsZS5jcHAoOTkpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmoIfpopjpopzoibIiIE5hbWU9IlRpdGxlLlRleHRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViVGl0bGUuY3BwKDk4KSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSLln7rnoYAiIE5hbWU9IlJlY3QxIiBPcmRlcj0iMjUiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S66L655qGGIiBOYW1lPSJSZWN0LlNob3dCb3giIEVkaXRvcj0iQm9vbCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA5KSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLloavlhYUiIE5hbWU9IlJlY3QyIiBPcmRlcj0iMjYiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6ImyIiBOYW1lPSJSZWN0LkJhY2tncm91bmRDb2xvciIgRWRpdG9yPSJDb2xvciIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUmVjdC5jcHAoMzA3KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i6IOM5pmv6aKc6Imy6YCP5piO5bqmIiBOYW1lPSJSZWN0LkJhY2tncm91bmRBbHBoYSIgRWRpdG9yPSJTbGlkZXIiIE1pbj0iMCIgTWF4PSIxMDAiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMwOCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJSZWN0MyIgT3JkZXI9IjI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueUu+eslCIgTmFtZT0iUmVjdC5Cb3VuZFBlbiIgRWRpdG9yPSJQZW4iIE9yZGVyPSIxIiBQYXRoPSJaeE9ialJlY3QuY3BwKDMxMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6L6555WMIiBOYW1lPSJCYW5kMSIgT3JkZXI9IjI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuW3pui+ueeVjCIgTmFtZT0iQmFuZC5MIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyMykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWPs+i+ueeVjCIgTmFtZT0iQmFuZC5SIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyNCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4iui+ueeVjCIgTmFtZT0iQmFuZC5UIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOCkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuS4i+i+ueeVjCIgTmFtZT0iQmFuZC5CIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeE9iakJhbmQuY3BwKDIyOSkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2ludCIgT3JkZXI9IjI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IueCueaooeW8jyIgTmFtZT0iUG9pbnQuRG90IiBFZGl0b3I9IkRvdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqUG9pbnQuY3BwKDE1NykiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5Z+656GAIiBOYW1lPSJMaW5lMSIgT3JkZXI9IjMwIj4NCiAgICA8UHR5SXRlbSBMYWJlbD0i5pi+56S654K5IiBOYW1lPSJMaW5lLlNob3dEb3RQb2ludCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODMpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWkluingiIgTmFtZT0iTGluZTIiIE9yZGVyPSIzMSI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLnlLvnrJQiIE5hbWU9IkxpbmUuUGVuIiBFZGl0b3I9IlBlbiIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqTGluZS5jcHAoMjgyKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i54K55qih5byPIiBOYW1lPSJMaW5lLkRvdCIgRWRpdG9yPSJEb3QiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4NCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5L2N572uIiBOYW1lPSJMaW5lMyIgT3JkZXI9IjMyIj4NCiAgICAgICAgPFB0eUdyb3VwIExhYmVsPSLotbfngrkiIE5hbWU9IlN0YXJ0UG9zIiBPcmRlcj0iMSIgRXhwYW5kPSIwIj4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJYIiBOYW1lPSJTdGFydFBvcy5YIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI3OCkiLz4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJZIiBOYW1lPSJTdGFydFBvcy5ZIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI3OSkiLz4NCiAgICAgICAgPC9QdHlHcm91cD4NCiAgICAgICAgPFB0eUdyb3VwIExhYmVsPSLnu4jngrkiIE5hbWU9IkVuZFBvcyIgT3JkZXI9IjMzIiBFeHBhbmQ9IjAiPg0KICAgICAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IlgiIE5hbWU9IkVuZFBvcy5YIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakxpbmUuY3BwKDI4MCkiLz4NCiAgICAgICAgICAgIDxQdHlJdGVtIExhYmVsPSJZIiBOYW1lPSJFbmRQb3MuWSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpMaW5lLmNwcCgyODEpIi8+DQogICAgICAgIDwvUHR5R3JvdXA+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWhq+WFhSIgTmFtZT0iUG9seWdvbjEiIE9yZGVyPSIzNCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmmK/lkKbloavlhYUiIE5hbWU9IlBvbHlnb24uSXNGaWxsIiBFZGl0b3I9IkJvb2wiIE9yZGVyPSIxIiBQYXRoPSJaeE9ialBvbHlnb24uY3BwKDI4MykiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWhq+WFheminOiJsiIgTmFtZT0iUG9seWdvbi5GaWxsQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIyIiBQYXRoPSJaeE9ialBvbHlnb24uY3BwKDI4MikiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJQb2x5Z29uMiIgT3JkZXI9IjM1Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueeVjOeUu+eslCIgTmFtZT0iUG9seWdvbi5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpQb2x5Z29uLmNwcCgyODEpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWvueixoSIgTmFtZT0iVGV4dDEiIE9yZGVyPSIzNiIgPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5paH5pysIiBOYW1lPSJUZXh0LlRleHQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqVGV4dC5jcHAoMjAzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSLmmL7npLrmqKHlvI8iIE5hbWU9IlRleHQyIiBPcmRlcj0iMzciID4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuiHquWKqOiwg+aVtCIgTmFtZT0iVGV4dC5BdXRvQWRqdXN0IiBFZGl0b3I9IkJvb2wiIE9yZGVyPSI0IiBQYXRoPSJaeE9ialRleHQuY3BwKDIwNikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IuWvuem9kOaooeW8jyIgTmFtZT0iVGV4dC5BbGlnbkZsYWciIEVkaXRvcj0iRmxhZ3MiIE9yZGVyPSI2IiBQYXRoPSJaeE9ialRleHQuY3BwKDIwOCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KICAgIDxQdHlHcm91cCBMYWJlbD0i5aSW6KeCIiBOYW1lPSJUZXh0MyIgT3JkZXI9IjM4IiA+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZMiIE5hbWU9IlRleHQuRm9udCIgRWRpdG9yPSJGb250IiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDQpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLlrZfkvZPpopzoibIiIE5hbWU9IlRleHQuQ29sb3IiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9ialRleHQuY3BwKDIwNSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iui+ueahhueUu+eslCIgTmFtZT0iVGV4dC5Cb3JkZXJQZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iOSIgUGF0aD0iWnhTdHJpbmdJdGVtLmNwcCgxMjEpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWFtuWugyIgTmFtZT0iVGV4dDQiIE9yZGVyPSIzOSIgPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5YWB6K6457yW6L6RIiBOYW1lPSJUZXh0Lk1hbnVsRWRpdCIgRWRpdG9yPSJCb29sIiBPcmRlcj0iNSIgUGF0aD0iWnhPYmpUZXh0LmNwcCgyMDcpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KDQoNCiAgICA8UHR5R3JvdXAgTGFiZWw9IuWbvueJhyIgTmFtZT0iSW1hZ2UiIE9yZGVyPSI0MCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnaXmupAiIE5hbWU9IkltYWdlLkltZ1BhdGgiIEVkaXRvcj0iUGljdHVyZSIgT3JkZXI9IjEiIFBhdGg9Ilp4T2JqSW1hZ2UuY3BwKDExMCkiLz4NCiAgICA8L1B0eUdyb3VwPg0KDQoNCg0KICAgIDxQdHlHcm91cCBMYWJlbD0i6Imy6KGoIiBOYW1lPSJDb2xvclRhYmxlIiBPcmRlcj0iNDEiPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5ZCN56ewIiBOYW1lPSJDb2xvclRhYmxlLk5hbWUiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjEiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjg4KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5Y2V5L2NIiBOYW1lPSJDb2xvclRhYmxlLlVuaXQiIEVkaXRvcj0iRWRpdCIgT3JkZXI9IjIiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjg5KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0i5pyA5aSnIiBOYW1lPSJDb2xvclRhYmxlLk1heCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMyIgUGF0aD0iWnhTdWJDb2xvclRhYmxlLmNwcCgyOTApIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSLmnIDlsI8iIE5hbWU9IkNvbG9yVGFibGUuTWluIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSI0IiBQYXRoPSJaeFN1YkNvbG9yVGFibGUuY3BwKDI5MSkiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9Iuexu+WeiyIgTmFtZT0iQ29sb3JUYWJsZS5Db2xvclR5cGUiIEVkaXRvcj0iRW51bSIgT3JkZXI9IjUiIFBhdGg9Ilp4U3ViQ29sb3JUYWJsZS5jcHAoMjkzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQoNCg0KDQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJvcmRlciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIiIE9yZGVyPSI3Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5Cb3JkZXIuVmlzaWJsZSIgRWRpdG9yPSJCb29sIiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYwKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iUGVuIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJvcmRlci5QZW4iIEVkaXRvcj0iUGVuIiBPcmRlcj0iMiIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDYzKSIvPg0KICAgIDwvUHR5R3JvdXA+DQogICAgPFB0eUdyb3VwIExhYmVsPSJaeE9iakN1cnZlQmFyLkJhciIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5CYXIiIE9yZGVyPSI4Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IldpZHRoIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5XaWR0aCIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDY2KSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLkJhci5GaWxsIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIyIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NjcpIi8+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuQmFyLkZpbGxDbHIiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzApIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIuVmFsdWUiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuVmFsdWUiIE9yZGVyPSI5Ij4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5WYWx1ZS5QaW5WYWx1ZSIgRWRpdG9yPSJFZGl0IiBPcmRlcj0iMSIgUGF0aD0iWnhPYmpDdXJ2ZUJhci5jcHAoNDczKSIvPg0KICAgICAgICA8UHR5SXRlbSBMYWJlbD0iIiBOYW1lPSJaeE9iakN1cnZlQmFyLlZhbHVlLlBpbkZvbnQiIEVkaXRvcj0iRm9udCIgT3JkZXI9IjIiIFBhdGg9Ilp4T2JqQ3VydmVCYXIuY3BwKDQ3NikiLz4NCiAgICAgICAgPFB0eUl0ZW0gTGFiZWw9IiIgTmFtZT0iWnhPYmpDdXJ2ZUJhci5WYWx1ZS5QaW5DbHIiIEVkaXRvcj0iQ29sb3IiIE9yZGVyPSIzIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzcpIi8+DQogICAgPC9QdHlHcm91cD4NCiAgICA8UHR5R3JvdXAgTGFiZWw9Ilp4T2JqQ3VydmVCYXIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIiIE9yZGVyPSIxMCI+DQogICAgICAgIDxQdHlJdGVtIExhYmVsPSIiIE5hbWU9Ilp4T2JqQ3VydmVCYXIuU2hvdzNEIiBFZGl0b3I9IkVkaXQiIE9yZGVyPSIxIiBQYXRoPSJaeE9iakN1cnZlQmFyLmNwcCg0NzkpIi8+DQogICAgPC9QdHlHcm91cD4NCg0KPC96aEF0dHJpYnV0ZXM+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/WTAI_Inner_Update_List.txt b/Bin/Config/Common/WTAI_Inner_Update_List.txt new file mode 100644 index 0000000..c9d200d --- /dev/null +++ b/Bin/Config/Common/WTAI_Inner_Update_List.txt @@ -0,0 +1,12 @@ + +[20240401 WTAI V0.80] + +create table J_JOB_DETAILS ( +JobID NVARCHAR2(32) not null, +WellCode NVARCHAR2(32) not null, +ModelPara NVARCHAR2(32) not null, +ProcData BLOB, +Ext1 BLOB, +Remark NVARCHAR2(255), +primary key (JobID, WellCode, ModelPara) +On Conflict Replace); diff --git a/Bin/Config/Common/WTAI_Novel.css b/Bin/Config/Common/WTAI_Novel.css new file mode 100644 index 0000000..f38c4ca --- /dev/null +++ b/Bin/Config/Common/WTAI_Novel.css @@ -0,0 +1,609 @@ +/* +* WTAI's css setting +* By WANG, Zhan-guo +* Created On: 2017-04-05 +* Modified On: 2022-06-13 +*/ +/*对话框的背景色 白色*/ +QWidget{ + /* background: #ffffff;*/ +} + +/* QPushButton */ +QPushButton { + /*border: none; 去掉默认边框*/ + background: transparent; +} +QPushButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: padding; + left: -2px; +} +QPushButton:hover:pressed { + background-color: #0081cf; +} +QPushButton:hover:!pressed { + background-color: #0081cf; + border-radius: 5px; + box-sizing: border-box; /* 确保边框包含在元素的总尺寸中 */ +} +QPushButton { + color: black; +} + + +/* QToolBar */ +QToolBar { + background-color: transparent; + border-style : dotted; +} +QToolBar:handle { +} +QToolBar::separator { +} + + + +/* === QToolButton === */ +QToolButton { + background-color: transparent; +} +QToolButton:hover { + background-color: #0081cf; +} +QToolButton:checked{ /*选中后*/ + background-color: #0081cf; + border:none; +} + +/*QToolButton:pressed { + background-color: #8100cf; +}*/ + + +/* only for MenuButtonPopup */ +QToolButton[popupMode="1"] { + padding-right: 20px; +} +/*QToolButton::menu-button { + background: transparent; + width: 16px; +}*/ + +QDateTimeEdit { + background: transparent; +} + +#qt_calendar_calendarview { + background: white; +} +QCalendarView{ +} +QCalendarView QHeaderView::section { + border: 1px solid lightgray; +height: 1px +} +QCalendarView QHeaderView { +border: 1px solid lightgray; +height: 1px +} +QCalendarView QTableCornerButton::section { + border: 1px solid lightgray; +height: 1px +} +QCalendarView QScrollBar { +} + +QDockWidget::title { + text-align: left; + background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6); + padding-left:5px; + height:20px; +} + +QTreeView,QListView,QTableView,QTabWidget::pane{ +border:1px solid #C0DCF2; +selection-background-color:#F2F9FF; +selection-color:#386487; +alternate-background-color:#DAEFFF; +gridline-color:#C0DCF2; +} + +QTreeView,QListView,QTableView,iWxParam,QSplitter::handle,QTreeView::branch{ +background:#EAF7FF; +} + +QTableView::item:selected,QListView::item:selected,QTreeView::item:selected{ +color:#386487; +background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6); +} + +QTableView::item:hover,QListView::item:hover,QTreeView::item:hover{ +color:#386487; +background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #F2F9FF,stop:1 #DAEFFF); +} + +QTableView::item,QListView::item,QTreeView::item{ +padding:1px; +margin:0px; +} + +QTreeView::branch:closed:has-children{ +margin:4px; +border-image:url($/ResIcon/Collapse.png); +} + +QTreeView::branch:open:has-children{ +margin:4px; +border-image:url($/ResIcon/Expand.png); +} + +QHeaderView::section{ +padding:3px; +margin:0px; +color:#386487; +border:1px solid #C0DCF2; +border-left-width:0px; +border-right-width:1px; +border-top-width:0px; +border-bottom-width:1px; +background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #F2F9FF,stop:1 #DAEFFF); +} + +MdiSubWindowEx::title { + height:26px; +} + +SubMdiSubWindowEx::title { + height:20px; +} + +MdiSubWindowEx +{ + padding: 5px; + border-left-width:2px; + border-right-width:2px; + border-top-width:2px; + border-bottom-width:2px; + + background:#DEF0FE; +} + +SubMdiSubWindowEx +{ + padding: 5px; + border-left-width:2px; + border-right-width:2px; + border-top-width:2px; + border-bottom-width:2px; + + background:#DEF0FE; +} + +SubMdiSubWindowEx::hover +{ + background:#C0DCF2; +} + +QSlider::groove:horizontal{ +background:#DEF0FE; +height:8px; +border-radius:4px; +} + +QSlider::add-page:horizontal{ +background:#DEF0FE; +height:8px; +border-radius:4px; +} + +QSlider::sub-page:horizontal{ +background:#C0DCF2; +height:8px; +border-radius:4px; +} + +QSlider::handle:horizontal{ +width:13px; +margin-top:-3px; +margin-bottom:-3px; +border-radius:6px; +background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #EAF7FF,stop:0.8 #C0DCF2); +} + +QSlider::groove:vertical{ +width:8px; +border-radius:4px; +background:#DEF0FE; +} + +QSlider::add-page:vertical{ +width:8px; +border-radius:4px; +background:#DEF0FE; +} + +QSlider::sub-page:vertical{ +width:8px; +border-radius:4px; +background:#C0DCF2; +} + +QSlider::handle:vertical{ +height:14px; +margin-left:-3px; +margin-right:-3px; +border-radius:6px; +background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #EAF7FF,stop:0.8 #C0DCF2); +} + +QScrollBar:horizontal{ +background:#DEF0FE; +padding:0px; +border-radius:6px; +max-height:12px; +} + +QScrollBar::handle:horizontal{ +background:#ADD8E6; +min-width:50px; +border-radius:6px; +} + +QScrollBar::handle:horizontal:hover{ +background:#C0DCF2; +} + +QScrollBar::handle:horizontal:pressed{ +background:#C0DCF2; +} + +QScrollBar::add-page:horizontal{ +background:none; +} + +QScrollBar::sub-page:horizontal{ +background:none; +} + +QScrollBar::add-line:horizontal{ +background:none; +} + +QScrollBar::sub-line:horizontal{ +background:none; +} + +QScrollBar:vertical{ +background:#DEF0FE; +padding:0px; +border-radius:6px; +max-width:12px; +} + +QScrollBar::handle:vertical{ +background:#ADD8E6; +min-height:50px; +border-radius:6px; +} + +QScrollBar::handle:vertical:hover{ +background:#C0DCF2; +} + +QScrollBar::handle:vertical:pressed{ +background:#C0DCF2; +} + +QScrollBar::add-page:vertical{ +background:none; +} + +QScrollBar::sub-page:vertical{ +background:none; +} + +QScrollBar::add-line:vertical{ +background:none; +} + +QScrollBar::sub-line:vertical{ +background:none; +} + +QScrollArea{ +border:0px; +} + + +/*Ribbon*/ + +QMenu { + background-color: #FCFCFC; + border: 1px solid #8492A6; +} +QMenu::item { + background-color: transparent; +} +iWxMenuItem::hover{ + border: 1px solid #FFB700; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +} +QMenu::item:selected { + background-color: #654321; +} + +#btnRibbonFile::menu-indicator{ + image:None; +} + +#btnRibbonFile{ + min-width:50px; + max-width:50px; + height:22px; + + color:white; + border: 1px solid #416ABD; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); +} +#btnRibbonFile::hover{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); +} +#btnRibbonFile::pressed{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467BBB, stop:0.5 #2F63AE,stop:0.51 #1C438A, stop:1 #358BC9); +} +QDialog#iWxRibbon +{ + background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6); +} +#tabWxMain QTabBar +{ + background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6); +} +#tabWxMain::tab-bar { + left: 65px; +} +#tabWxMain QTabBar::tab{ + height:24px; + background: transparent; +} +#tabWxMain QTabBar::tab:selected +{ + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); + color : #ffffff; +} +#tabWxMain QTabBar::tab:!selected +{ + background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6); +} + +#tabWxMain QTabBar::tab:hover :selected +{ + background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); + color : #ffffff; +} +#tabWxMain QTabBar::tab:hover:!selected +{ + background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); + color : #ffffff; +} + +#tabWxMain QTabWidget::pane{ + background-color: transparent; +} + +#tabWxMain::pane +{ + border-width: 1px; + border-color: rgb(192, 192, 192); + border-style:solid; + top: -1px;/*background-color:grey;*/ +} + +#tabWxMain QGroupBox{ + border-left: 1px solid #B0B0B0; + border-top: 0px solid gray; +} +#tabWxMain QGroupBox::title { + color: #081121/*#738399*/; + subcontrol-position: bottom center; +} + +TabWidgetEx#mTabWidget QTabBar::tab{ +border:1px solid #C0DCF2; +color:#386487; +margin:0px; +background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #F2F9FF,stop:1 #DAEFFF); +} + +TabWidgetEx#mTabWidget QTabBar::tab:selected,TabWidgetEx#mTabWidget QTabBar::tab:hover{ +border-style:solid; +background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #DEF0FE,stop:1 #C0DEF6); +} + +TabWidgetEx#mTabWidget QTabBar::tab:top,TabWidgetEx#mTabWidget QTabBar::tab:bottom{ +padding:3px 8px 3px 8px; +} + +TabWidgetEx#mTabWidget QTabBar::tab:left,TabWidgetEx#mTabWidget QTabBar::tab:right{ +padding:8px 3px 8px 3px; +} + +TabWidgetEx#mTabWidget QTabBar::tab:top:selected,TabWidgetEx#mTabWidget QTabBar::tab:top:hover{ +border-width:2px 0px 0px 0px; +} + +TabWidgetEx#mTabWidget QTabBar::tab:right:selected,TabWidgetEx#mTabWidget QTabBar::tab:right:hover{ +border-width:0px 0px 0px 2px; +} + +TabWidgetEx#mTabWidget QTabBar::tab:bottom:selected,TabWidgetEx#mTabWidget QTabBar::tab:bottom:hover{ +border-width:0px 0px 2px 0px; +} + +TabWidgetEx#mTabWidget QTabBar::tab:left:selected,TabWidgetEx#mTabWidget QTabBar::tab:left:hover{ +border-width:0px 2px 0px 0px; +} + +TabWidgetEx#mTabWidget QTabBar::tab:first:top:selected,TabWidgetEx#mTabWidget QTabBar::tab:first:top:hover,TabWidgetEx#mTabWidget QTabBar::tab:first:bottom:selected,TabWidgetEx#mTabWidget QTabBar::tab:first:bottom:hover{ +border-left-width:1px; +border-left-color:#C0DCF2; +} + +TabWidgetEx#mTabWidget QTabBar::tab:first:left:selected,TabWidgetEx#mTabWidget QTabBar::tab:first:left:hover,TabWidgetEx#mTabWidget QTabBar::tab:first:right:selected,TabWidgetEx#mTabWidget QTabBar::tab:first:right:hover{ +border-top-width:1px; +border-top-color:#C0DCF2; +} + +TabWidgetEx#mTabWidget QTabBar::tab:last:top:selected,TabWidgetEx#mTabWidget QTabBar::tab:last:top:hover,TabWidgetEx#mTabWidget QTabBar::tab:last:bottom:selected,TabWidgetEx#mTabWidget QTabBar::tab:last:bottom:hover{ +border-right-width:1px; +border-right-color:#C0DCF2; +} + +TabWidgetEx#mTabWidget QTabBar::tab:last:left:selected,TabWidgetEx#mTabWidget QTabBar::tab:last:left:hover,TabWidgetEx#mTabWidget QTabBar::tab:last:right:selected,TabWidgetEx#mTabWidget QTabBar::tab:last:right:hover{ +border-bottom-width:1px; +border-bottom-color:#C0DCF2; +} + +iDlgBase +{ + background-color: #FFFFFF; +} + +QGroupBox#gbxCurrentProjs +{ + background-color: #DAEFFF; +} +/* +QGroupBox#groupBox_2 +{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +}*/ + +QRadioButton::indicator::unchecked{ +image:url($/ResIcon/radiobutton_unchecked.png); +} + +QRadioButton::indicator::unchecked:disabled{ +image:url($/ResIcon/radiobutton_unchecked_disable.png); +} + +QRadioButton::indicator::checked{ +image:url($/ResIcon/radiobutton_checked.png); +} + +QRadioButton::indicator::checked:disabled{ +image:url($/ResIcon/radiobutton_checked_disable.png); +} + +QCheckBox::indicator:unchecked,QGroupBox::indicator:unchecked,QTreeWidget::indicator:unchecked,QListWidget::indicator:unchecked{ +image:url($/ResIcon/checkbox_unchecked.png); +} + +QCheckBox::indicator:unchecked:disabled,QGroupBox::indicator:unchecked:disabled,QTreeWidget::indicator:unchecked:disabled,QListWidget::indicator:disabled{ +image:url($/ResIcon/checkbox_unchecked_disable.png); +} + +QCheckBox::indicator:checked,QGroupBox::indicator:checked,QTreeWidget::indicator:checked,QListWidget::indicator:checked{ +image:url($/ResIcon/checkbox_checked.png); +} + +QCheckBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled,QTreeWidget::indicator:checked:disabled,QListWidget::indicator:checked:disabled{ +image:url($/ResIcon/checkbox_checked_disable.png); +} + +QCheckBox::indicator:indeterminate,QGroupBox::indicator:indeterminate,QTreeWidget::indicator:indeterminate,QListWidget::indicator:indeterminate{ +image:url($/ResIcon/checkbox_parcial.png); +} + +QCheckBox::indicator:indeterminate:disabled,QGroupBox::indicator:indeterminate:disabled,QTreeWidget::indicator:indeterminate:disabled,QListWidget::indicator:indeterminate:disabled{ +image:url($/ResIcon/checkbox_parcial_disable.png); +} + +/* QComboBox*/ +QComboBox { + background-color: transparent; + border: 1px solid gray; + border-radius: 3px; + padding: 1px 2px 1px 2px; + min-width: 3em; +} + +ZxHeaderComboBoxEx{ + background-color: light gray; + min-width: 1em; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 20px; + + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +QComboBox::down-arrow { + /*border: 2px solid #333333;*/ +/* background: #5f5f5f;*/ +/* border-style : dotted;*/ + image: url($/ResIcon/CbxBtn.png); +} + +/* QSpinBox */ +QSpinBox { + background-color: transparent; +/* border: 1px solid gray;*/ +} + + + +/* QDoubleSpinBox */ +QDoubleSpinBox { + background-color: transparent; +/* border: 1px solid gray;*/ +} + + +/* QGroupBox */ +QGroupBox { + background-color: transparent; +} +QGroupBox::title { + color: blue; + subcontrol-origin: margin; + subcontrol-position: top left; + margin-left: 5px; +} + + + +/* QSplitter */ +QSplitter { +/* background-color: transparent;*/ +} +QSplitter::handle { + background-color:light blue; + border-width:0px; + border-style:dotted; + height:1px; +} + + + +/*QProgressBar*/ +QProgressBar{ + border: 1px solid gray; + border-radius: 5px; + text-align: center; +} diff --git a/Bin/Config/Common/WTAI_Old.css b/Bin/Config/Common/WTAI_Old.css new file mode 100644 index 0000000..d2ba49e --- /dev/null +++ b/Bin/Config/Common/WTAI_Old.css @@ -0,0 +1,699 @@ +/* +* WTAI's css setting +* By WANG, Zhan-guo +* Created On: 2017-04-05 +* Modified On: 2022-06-13 +*/ + +QWidget{ + /*background-color: #ffffff; + border : 1px ridge gray;*/ +} + +/*iPlotCurveWxT*/ +iPlotCurveWxT { + border : 1px ridge gray; +} + +/* QPushButton */ +QPushButton { + background-color: transparent; +} +QPushButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: padding; + left: -2px; +} +QPushButton:hover:pressed { + background-color: #0081cf; +} +QPushButton:hover:!pressed { + background-color: #0081cf; +/* font-size:24px;*/ +} +QPushButton { + color: black; +} + + + +/* QToolBar */ +QToolBar { + /*background-color: transparent;*/ + border-style : dotted; +} + +/* === QToolButton === */ +QToolButton { + background-color: transparent; +} +QToolButton:hover { + background-color: #0081cf; +} +QToolButton:checked{ /*选中后*/ + background-color: #0081cf; + border:none; +} + +/*QToolButton:pressed { + background-color: #8100cf; +}*/ + + +/* only for MenuButtonPopup */ +QToolButton[popupMode="1"] { + padding-right: 20px; +} +QToolButton::menu-button { + background: transparent; + width: 16px; +} + +QDateTimeEdit { + background: transparent; +} + +#qt_calendar_calendarview { + background: white; +} +QCalendarView{ +} +QCalendarView QHeaderView::section { + border: 1px solid lightgray; +height: 1px +} +QCalendarView QHeaderView { +border: 1px solid lightgray; +height: 1px +} +QCalendarView QTableCornerButton::section { + border: 1px solid lightgray; +height: 1px +} +QCalendarView QScrollBar { +} + + + + + + + +/* === QToolTip === */ +QToolTip { + background-color: light gray; + color: black; +} + + + + +/* QLabel */ +QLabel { + background-color: transparent; +} + + + +/* QLineEdit */ +QLineEdit { + background-color: transparent; +} +QLineEdit[readOnly="true"]{ + color: gray; +} + + + + +/* QTextEdit */ +QTextEdit { + +} + +/*QSlider*/ +QSlider::groove:horizontal { + position: absolute; + top: 1px; height: 1px; + background: #B1B1B1; +} +QSlider::handle:horizontal { + border-image:url($/Res/Icon/slider-handle.png); + border: 1px solid #000000; + width: 8px; + margin: -5px 0; +} + + + +/* QCheckBox */ +QCheckBox { + background-color: transparent; + background-size: 20px 20px; /* 设置背景图像的大小为20px x 20px */ +} +QCheckBox::indicator::checked { + image: url($/Res/Icon/checkBox_checked.png); +} +QCheckBox::indicator::unchecked { + image: url($/Res/Icon/checkBox_unchecked.png); +} + + + +/* QRadioButton */ +QRadioButton { + background-color: transparent; +background-size: 20px 20px; /* 设置背景图像的大小为20px x 20px */ +} +QRadioButton::indicator::checked { + image: url($/Res/Icon/radio_checked.png); +} +QRadioButton::indicator::unchecked { + image: url($/Res/Icon/radio_unchecked.png); +} + +/* QComboBox*/ +QComboBox { + background-color: transparent; + border: 1px solid gray; + border-radius: 3px; + padding: 1px 2px 1px 2px; + min-width: 3em; +} + +ZxHeaderComboBoxEx{ + background-color: light gray; + min-width: 1em; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 20px; + + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +QComboBox::down-arrow { + /*border: 2px solid #333333;*/ +/* background: #5f5f5f;*/ +/* border-style : dotted;*/ + image: url($/Res/Icon/CbxBtn.png); +} + +/* QSpinBox */ +QSpinBox { + background-color: transparent; +/* border: 1px solid gray;*/ +} + + + +/* QDoubleSpinBox */ +QDoubleSpinBox { + background-color: transparent; +/* border: 1px solid gray;*/ +} + + +/* QGroupBox */ +QGroupBox { + background-color: transparent; +} +QGroupBox::title { + color: blue; + subcontrol-origin: margin; + subcontrol-position: top left; + margin-left: 5px; +} + + + +/* QSplitter */ +QSplitter { +/* background-color: transparent;*/ +} +QSplitter::handle { + background-color:light blue; + border-width:0px; + border-style:dotted; + height:1px; +} + + + +/*QProgressBar*/ +QProgressBar{ + border: 1px solid gray; + border-radius: 5px; + text-align: center; +} + + + +/* QListWidget */ +QListWidget { + background-color: transparent; + border: 1px solid gray; +} +QListWidget::item:selected{ + background:lightblue; + color:blue; +} +QListWidget QScrollBar { +/* background:transparent;*/ +} + + + +/* QTreeWidget */ +QTreeWidget{ + background-color: transparent; + border-color:light gray; +} +QTreeWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeWidget QHeaderView { + background: transparent; +} + + + +/*QTreeView*/ +QTreeView{ + background-color: transparent; + alternate-background-color:rgb(0, 192, 0); + border-color:light gray; +} +QTreeView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeView QHeaderView { + background: transparent; +} +/*QTreeView::item:selected{ + background:lightblue; + color:blue; +}*/ + + +/* QTableWidget */ +QTableWidget{ + background-color:transparent; + alternate-background-color:rgb(0, 192, 0); + border: none; +} +QTableWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QHeaderView { + background: transparent; +} +QTableWidget QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QScrollBar { + background:transparent; +} + + + +/* QTableView */ +QTableView{ + background-color:transparent; + alternate-background-color:rgb(232, 232, 232); + border: 1px solid gray; + /*border-style : ridge;*/ + + selection-background-color: rgb(51, 153, 255)/*lightblue*/; + selection-color: white; + + gridline-color: lightgray; +} +/*QTableView::grid +{ border: 1px solid red; +color: rgb(255, 0, 0); +gridline-color: rgb(255, 0, 0); +} +QTableView::grid +{ border: 1px solid gray; +}*/ + + +QTableView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableView QHeaderView { + background: transparent; +border: 1px solid lightgray; +} +QTableView QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableView QScrollBar { + background:transparent; + border: 1px solid red; +} +/*QTableView::item::selected +{ + background-color:lightblue; + color: white; +}*/ + + +/* QTabWidget */ +QTabWidget { + background-color: transparent; +} +QTabWidget::pane{ + border-width:1px; + border-color:transparent; + border-style:dotted; + background-color: transparent; +} +QTabWidget::tab-bar{ + border-width:0px; +} +QTabBar::tab:first:selected, +QTabBar::tab:middle:selected, +QTabBar::tab:last:selected, +QTabBar::tab:only-one{ +/* background-color: white;*/ +/* color: blue;*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: outset;*/ +} +QTabBar::tab:first:!selected, +QTabBar::tab:middle:!selected, +QTabBar::tab:last:!selected { +/* background-color: transparent;*/ +/* color: rgb(128, 128, 128);*/ +/* border:1px solid rgba(0,0,0,50);*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: ridge;*/ +} + +QTabBar::tab:top, QTabBar::tab:bottom { +/* min-width:60px;*/ +} +QTabBar::tab:left, QTabBar::tab:right { +/* min-height:50px;*/ +} +/*QTabBar::tab{ + border-bottom-color: red; + padding: 0px; +} +QTabBar QToolButton::right-arrow { + background-color:light blue; + border-width: 0; + background-image: url(:/images/tab/rightbtn.png); +} +QTabBar QToolButton::left-arrow { + background-color:light blue; + border-width: 0; + background-image: url(:/images/tab/leftbtn.png); +}*/ + + +/* === QMenu === */ +QMenu { + background-color: rgb(138, 209, 251); +/* border: 1px solid gray; + color: white; + padding: 1px;*/ +} +/*QMenu::item { + padding: 2px 25px 2px 20px; + border: 1px solid transparent; +} +QMenu::item:disabled { + color: #666666; +} +QMenu::item:selected { + border-color: gray; + background: #222222; +} +QMenu::icon:checked { +} +QMenu::separator { + height: 1px; +} +QMenu::indicator { + width: 13px; + height: 13px; +}*/ + + + + +/* === QMenuBar === */ +QMenuBar { + background-color: transparent; +} +/*QMenuBar::item { + background: transparent; +} +QMenuBar::item:disabled { + color: gray; +} +QMenuBar::item:selected { + background: #222222; +} +QMenuBar::item:pressed { + background: #444444; +}*/ + + + +/*QDockWidget*/ +QDockWidget{ +/* image: url($/Res/Image/WTAI_Main.png);*/ +/* border:1px ridge lightgray; + border:3px ridge red;*/ + /*titlebar-close-icon: url($/Res/Icon/close.png);*/ +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +} +QDockWidget::title { + text-align: left; +/* background: transparent;*/ + padding-left:5px; + height:20px; +} +QDockWidget::close-button,QDockWidget::float-button { + /* border:1px solid darkgray;*/ +/* background: darkgray;*/ +/* padding:0px;*/ +} +QDockWidget::close-button:hover,QDockWidget::float-button:hover { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background: gray; +} +QDockWidget::close-button:pressed,QDockWidget::float-button:pressed { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +/* padding:1px-1px-1px-1px;*/ +} +/*QDockWidget::close-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:0px; bottom:0px; + width:14px; +} +QDockWidget::float-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:16px; bottom:0px; + width:14px; +}*/ + + + +/*ZxPtyDock*/ +ZxPtyDock { + + border:1px ridge gray; +} +ZxPtyPano { + + border:1px ridge gray; +} + +/*QMdiArea*/ +QMdiArea { +/* background : transparent;*/ + border:1px ridge gray; +/* border-image:url($/Res/Image/WTAI_Main.png); + image:url($/Res/Image/WTAI_Main.png);*/ + +} +iSubWndFitting { +/* background : transparent;*/ + border-image:url($/Res/Image/WTAI_Main.png); + image:url($/Res/Image/WTAI_Main.png); + +} + +/*QMdiSubWindow*/ +QMdiSubWindow{ + background : rgb(194, 213, 233); +/* border:1px ridge gray;*/ +} + + +/*Ribbon*/ + +QMenu { + background-color: #FCFCFC; + border: 1px solid #8492A6; +} +QMenu::item { + background-color: transparent; +} +iWxMenuItem::hover{ + border: 1px solid #FFB700; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +} +QMenu::item:selected { + background-color: #654321; +} +/*QWidget{ + font-family: "微软雅黑"; +} +#MainWindowClass{ + background-color: #D2DCEA; +}*/ +#btnRibbonFile::menu-indicator{ + image:None; +} + + + +#btnRibbonFile{ + min-width:50px; + max-width:50px; + height:22px; + + color:white; + border: 1px solid #416ABD; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); +} +#btnRibbonFile::hover{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); +} +#btnRibbonFile::pressed{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467BBB, stop:0.5 #2F63AE,stop:0.51 #1C438A, stop:1 #358BC9); +} + +/* +QTabWidget:pane{ \ + border: 1px solid red; top: -1px;background-color:grey;}\ +QTabBar::tab{height:22px; background-color:grey; margin-right: 2px; margin-bottom:-2px;}\ + QTabBar::tab:selected{border:1px solid red;border-bottom-color: none;}\ + QTabBar::tab:!selected{border-bottom: 3px solid red;}*/ + + + +#tabWxMain::tab-bar { + left: 65px; +/* border: 1px solid #BAC9DB;*/ +} +#tabWxMain QTabBar::tab{ + height:24px; + /*background: transparent; + margin-left: 5px; + margin-right: 5px;*/ +/* border: 1px solid #BAC9DB;*/ +} +#tabWxMain QTabBar::tab:selected +{ + /*border:1px solid red;border-bottom-color: none; + border-top-left-radius: 0px; + border-top-right-radius: 0px; + margin-left: 2px; + margin-right: 2px; + border: 1px solid #BAC9DB; + border-bottom-color: #FFFFFF;*/ +} +#tabWxMain QTabBar::tab:!selected +{ + background-color: transparent; + /*border-bottom: 1px solid red; + margin-top: 1px; + border: none; + border-bottom-color: #FFFFFF;*/ +/* margin-left: 2px; + margin-right: 2px; + border-left-color: #FFFFFF;*/ +} + + + +#tabWxMain QTabBar::tab:hover :selected +{ + /* background-color: light Gray; + border-top-left-radius: 2px; + border-top-right-radius: 2px;*/ +} +#tabWxMain QTabBar::tab:hover:!selected +{ + background-color: rgb(250, 250, 250); +/* border: 1px solid #ECBC3D;*/ +} + +#tabWxMain QTabWidget::pane{ + /*border-width:4px; + border-color:red; + border-style: solid; + background-color: transparent; + border: 1px solid red; top: -1px;background-color:grey;*/ +} + + +#tabWxMain::pane +{ + border-width: 1px; + border-color: rgb(192, 192, 192); + border-style:solid; + top: -1px;/*background-color:grey;*/ +} + + +#tabWxMain QGroupBox{ + border-left: 1px solid #B0B0B0; + border-top: 0px solid gray; +} +#tabWxMain QGroupBox::title { + color: #081121/*#738399*/; + subcontrol-position: bottom center; +} + +/* QWebView */ +QWebView { + background-color: transparent; +} + + +#iWxWelcome #groupBox_2{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 77, 0, 255), stop:1 rgba(255, 255, 255, 255)); +} + + + diff --git a/Bin/Config/Common/WTAI_Qt5.css b/Bin/Config/Common/WTAI_Qt5.css new file mode 100644 index 0000000..3ffe4f0 --- /dev/null +++ b/Bin/Config/Common/WTAI_Qt5.css @@ -0,0 +1,696 @@ +/* +* WTAI's css setting +* By WANG, Zhan-guo +* Created On: 2017-04-05 +* Modified On: 2017-07-13 +*/ + +/*iPlotCurveWxT*/ +iPlotCurveWxT { + border : 1px ridge gray; +} + +/* QPushButton */ +QPushButton { + background-color: transparent; +} +QPushButton::menu-indicator { + subcontrol-position: right bottom; + subcontrol-origin: padding; + left: -2px; +} +QPushButton:hover:pressed { + background-color: #0081cf; +} +QPushButton:hover:!pressed { + background-color: #0081cf; +/* font-size:24px;*/ +} +QPushButton { + color: black; +} + + + +/* QToolBar */ +QToolBar { + background-color: transparent; + border-style : dotted; +} +QToolBar:handle { +} +QToolBar::separator { +} + + + +/* === QToolButton === */ +QToolButton { + background-color: transparent; +} +QToolButton:hover { + background-color: #0081cf; +} +QToolButton:checked{ /*选中后*/ + background-color: #0081cf; + border:none; +} + +/*QToolButton:pressed { + background-color: #8100cf; +}*/ + + +/* only for MenuButtonPopup */ +QToolButton[popupMode="1"] { + padding-right: 20px; +} +/*QToolButton::menu-button { + background: transparent; + width: 16px; +}*/ + +QDateTimeEdit { + background: transparent; +} + +#qt_calendar_calendarview { + background: white; +} +QCalendarView{ +} +QCalendarView QHeaderView::section { + border: 1px solid lightgray; +height: 1px +} +QCalendarView QHeaderView { +border: 1px solid lightgray; +height: 1px +} +QCalendarView QTableCornerButton::section { + border: 1px solid lightgray; +height: 1px +} +QCalendarView QScrollBar { +} + + +/* === QToolTip === */ +QToolTip { + background-color: lightgray; + color: black; +} + + + + +/* QLabel */ +QLabel { + background-color: transparent; +} + + + +/* QLineEdit */ +QLineEdit { + background-color: transparent; +} +QLineEdit[readOnly="true"]{ + color: gray; +} + + + + +/* QTextEdit */ +QTextEdit { + background-color: transparent; +} + +/*QSlider*/ +QSlider::groove:horizontal { + position: absolute; + top: 1px; height: 1px; + background: #B1B1B1; +} +QSlider::handle:horizontal { + border-image:url($/Res/Icon/slider-handle.png); + border: 1px solid #000000; + width: 8px; + margin: -5px 0; +} + + + +/* QCheckBox */ +QCheckBox { + background-color: transparent; +} +QCheckBox::indicator::checked { + image: url($/Res/Icon/checkBox_checked.png); +} +QCheckBox::indicator::unchecked { + image: url($/Res/Icon/checkBox_unchecked.png); +} + + + +/* QRadioButton */ +QRadioButton { + background-color: transparent; +} +QRadioButton::indicator::checked { + image: url($/Res/Icon/radio_checked.png); +} +QRadioButton::indicator::unchecked { + image: url($/Res/Icon/radio_unchecked.png); +} + +/* QComboBox*/ +QComboBox { + background-color: transparent; + border: 1px solid gray; + border-radius: 3px; + padding: 1px 2px 1px 2px; + min-width: 3em; +} + +ZxHeaderComboBoxEx{ + background-color: lightgray; + min-width: 1em; +} + +QComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + width: 20px; + + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +QComboBox::down-arrow { + /*border: 2px solid #333333;*/ +/* background: #5f5f5f;*/ +/* border-style : dotted;*/ + image: url($/Res/Icon/CbxBtn.png); +} + +/* QSpinBox */ +QSpinBox { + background-color: transparent; +/* border: 1px solid gray;*/ +} + + + +/* QDoubleSpinBox */ +QDoubleSpinBox { + background-color: transparent; +/* border: 1px solid gray;*/ +} + + + +/* QDateTimeEdit */ +/*QDateTimeEdit { + background-color: transparent; +}*/ + + + +/* QGroupBox */ +QGroupBox { + background-color: transparent; +} +QGroupBox::title { + color: blue; + subcontrol-origin: margin; + subcontrol-position: top left; + margin-left: 5px; +} + + + +/* QSplitter */ +QSplitter { +/* background-color: transparent;*/ +} +QSplitter::handle { + background-color:lightblue; + border-width:0px; + border-style:dotted; + height:1px; +} + + + +/*QProgressBar*/ +QProgressBar{ + border: 1px solid gray; + border-radius: 5px; + text-align: center; +} + + + +/* QListWidget */ +QListWidget { + background-color: transparent; + border: 1px solid gray; +} +QListWidget::item:selected{ + background:lightblue; + color:blue; +} +QListWidget QScrollBar { +/* background:transparent;*/ +} + + + +/* QTreeWidget */ +QTreeWidget{ + background-color: transparent; + border-color:lightgray; +} +QTreeWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeWidget QHeaderView { + background: transparent; +} + +/*QTreeWidget*/ +QTreeWidget { + background-color: transparent; +} + +/*QTreeView*/ +QTreeView{ + background-color: transparent; + alternate-background-color:rgb(0, 192, 0); + border-color:lightgray; +} +QTreeView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTreeView QHeaderView { + background: transparent; +} +/*QTreeView::item:selected{ + background:lightblue; + color:blue; +}*/ + + +/* QTableWidget */ +QTableWidget{ + background-color:transparent; + alternate-background-color:rgb(0, 192, 0); + border: none; +} +QTableWidget QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QHeaderView { + background: transparent; +} +QTableWidget QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; +} +QTableWidget QScrollBar { + background:transparent; +} + + + +/* QTableView */ +QTableView { + background-color: transparent; + alternate-background-color: rgb(232, 232, 232); + gridline-color: lightgray; + selection-background-color: rgb(51, 153, 255); + selection-color: white; + border: 1px solid gray; + border-style: ridge; +} +/* QTableView::item { + selection-background-color: rgb(23,165,230) + }*/ + +QTableView QHeaderView { + background: transparent; + border: 1px solid lightgray; +} + +QTableView QHeaderView::section { + border: 1px solid lightgray; + background: transparent; +} + +/*上侧表头*/ +/*QTableView QHeaderView#hHeader::section { + height:20;color: red;padding-left: 4px; +} +/*左侧表头*/ +/*QTableView QHeaderView#vHeader::section { + width:30; + height:10; +}*/ + +QTableView QTableCornerButton::section { + border: 1px solid lightgray; + background: transparent; + border-radius:0px; +} +QTableView QScrollBar { + background:transparent; +} +/*QTableView::item::selected +{ + background-color:lightblue; + color: white; +}*/ + + +/* QTabWidget */ +QTabWidget { + background-color: transparent; +} +QTabWidget::pane{ + border-width:1px; + border-color:transparent; + border-style:dotted; + background-color: transparent; +} +QTabWidget::tab-bar{ + border-width:0px; +} +QTabBar::tab:first:selected, +QTabBar::tab:middle:selected, +QTabBar::tab:last:selected, +QTabBar::tab:only-one{ +/* background-color: white;*/ +/* color: blue;*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: outset;*/ +} +QTabBar::tab:first:!selected, +QTabBar::tab:middle:!selected, +QTabBar::tab:last:!selected { +/* background-color: transparent;*/ +/* color: rgb(128, 128, 128);*/ +/* border:1px solid rgba(0,0,0,50);*/ +/* border-width:10px; + border-color:rgb(48, 104, 151); + border-style: ridge;*/ +} + +QTabBar::tab:top, QTabBar::tab:bottom { +/* min-width:60px;*/ +} +QTabBar::tab:left, QTabBar::tab:right { +/* min-height:50px;*/ +} +/*QTabBar::tab{ + border-bottom-color: red; + padding: 0px; +} +QTabBar QToolButton::right-arrow { + background-color:light blue; + border-width: 0; + background-image: url(:/images/tab/rightbtn.png); +} +QTabBar QToolButton::left-arrow { + background-color:light blue; + border-width: 0; + background-image: url(:/images/tab/leftbtn.png); +}*/ + + +/* === QMenu === */ +QMenu { + background-color: rgb(138, 209, 251); +/* border: 1px solid gray; + color: white; + padding: 1px;*/ +} +/*QMenu::item { + padding: 2px 25px 2px 20px; + border: 1px solid transparent; +} +QMenu::item:disabled { + color: #666666; +} +QMenu::item:selected { + border-color: gray; + background: #222222; +} +QMenu::icon:checked { +} +QMenu::separator { + height: 1px; +} +QMenu::indicator { + width: 13px; + height: 13px; +}*/ + + + + +/* === QMenuBar === */ +QMenuBar { + background-color: transparent; +} +/*QMenuBar::item { + background: transparent; +} +QMenuBar::item:disabled { + color: gray; +} +QMenuBar::item:selected { + background: #222222; +} +QMenuBar::item:pressed { + background: #444444; +}*/ + + + +/*QDockWidget*/ +QDockWidget{ +/* image: url($/Res/Image/WTAI_Main.png);*/ +/* border:1px ridge lightgray; + border:3px ridge red;*/ + /*titlebar-close-icon: url($/Res/Icon/close.png);*/ +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +} +QDockWidget::title { + text-align: left; +/* background: transparent;*/ + padding-left:5px; + height:20px; +} +QDockWidget::close-button,QDockWidget::float-button { + /* border:1px solid darkgray;*/ +/* background: darkgray;*/ +/* padding:0px;*/ +} +QDockWidget::close-button:hover,QDockWidget::float-button:hover { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ + background: gray; +} +QDockWidget::close-button:pressed,QDockWidget::float-button:pressed { +/* titlebar-normal-icon: url($/Res/Icon/ExcludeRect.png);*/ +/* padding:1px-1px-1px-1px;*/ +} +/*QDockWidget::close-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:0px; bottom:0px; + width:14px; +} +QDockWidget::float-button { + subcontrol-position: top left; + subcontrol-origin: margin; + position: absolute; + top:0px; left:16px; bottom:0px; + width:14px; +}*/ + + + +/*ZxPropertySheet*/ +ZxPropertySheet { + background : transparent; + border:1px ridge gray; +} + +/*QMdiArea*/ +QMdiArea { +/* background : transparent;*/ + border:1px ridge gray; +/* border-image:url($/Res/Image/WTAI_Main.png); + image:url($/Res/Image/WTAI_Main.png);*/ + +} +iSubWndFitting { +/* background : transparent;*/ + border-image:url($/Res/Image/WTAI_Main.png); + image:url($/Res/Image/WTAI_Main.png); + +} + +/*QMdiSubWindow*/ +QMdiSubWindow{ + background : rgb(194, 213, 233); +/* border:1px ridge gray;*/ +} + + +/*接下来是Ribbon中涉及到的内容*/ + +QMenu { + background-color: #FCFCFC; + border: 1px solid #8492A6; +} +QMenu::item { + background-color: transparent; +} +iWxMenuItem::hover{ + border: 1px solid #FFB700; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,stop:0 #FEF9F4, stop:0.38 #FDE0BD,stop:0.39 #FFCE69, stop:1 #FFFFE7); +} +QMenu::item:selected { + background-color: #654321; +} +/*QWidget{ + font-family: "微软雅黑"; +} +#MainWindowClass{ + background-color: #D2DCEA; +}*/ +#btnRibbonFile::menu-indicator{ + image:None; +} + + + +#btnRibbonFile{ + min-width:50px; + max-width:50px; + height:22px; + + color:white; + border: 1px solid #416ABD; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467FBD, stop:0.5 #2A5FAC,stop:0.51 #1A4088, stop:1 #419ACF); +} +#btnRibbonFile::hover{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #7BB2EB, stop:0.5 #477ECD,stop:0.51 #114ECF, stop:1 #80E1FF); +} +#btnRibbonFile::pressed{ + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, + stop:0 #467BBB, stop:0.5 #2F63AE,stop:0.51 #1C438A, stop:1 #358BC9); +} + +/* +QTabWidget:pane{ \ + border: 1px solid red; top: -1px;background-color:grey;}\ +QTabBar::tab{height:22px; background-color:grey; margin-right: 2px; margin-bottom:-2px;}\ + QTabBar::tab:selected{border:1px solid red;border-bottom-color: none;}\ + QTabBar::tab:!selected{border-bottom: 3px solid red;}*/ + + + +#tabWxMain::tab-bar { + left: 65px; +/* border: 1px solid #BAC9DB;*/ +} +#tabWxMain QTabBar::tab{ + height:24px; + /*background: transparent; + margin-left: 5px; + margin-right: 5px;*/ +/* border: 1px solid #BAC9DB;*/ +} +#tabWxMain QTabBar::tab:selected +{ + /*border:1px solid red;border-bottom-color: none; + border-top-left-radius: 0px; + border-top-right-radius: 0px; + margin-left: 2px; + margin-right: 2px; + border: 1px solid #BAC9DB; + border-bottom-color: #FFFFFF;*/ +} +#tabWxMain QTabBar::tab:!selected +{ + background-color: transparent; + /*border-bottom: 1px solid red; + margin-top: 1px; + border: none; + border-bottom-color: #FFFFFF;*/ +/* margin-left: 2px; + margin-right: 2px; + border-left-color: #FFFFFF;*/ +} + + + +#tabWxMain QTabBar::tab:hover :selected +{ + /* background-color: light Gray; + border-top-left-radius: 2px; + border-top-right-radius: 2px;*/ +} +#tabWxMain QTabBar::tab:hover:!selected +{ + background-color: rgb(250, 250, 250); +/* border: 1px solid #ECBC3D;*/ +} + +#tabWxMain QTabWidget::pane{ + /*border-width:4px; + border-color:red; + border-style: solid; + background-color: transparent; + border: 1px solid red; top: -1px;background-color:grey;*/ +} + + +#tabWxMain::pane +{ + border-width: 1px; + border-color: rgb(192, 192, 192); + border-style:solid; + top: -1px;/*background-color:grey;*/ +} + + +#tabWxMain QGroupBox{ + border-left: 1px solid #B0B0B0; + border-top: 0px solid gray; +} +#tabWxMain QGroupBox::title { + color: #081121/*#738399*/; + subcontrol-position: bottom center; +} + +/* QWebView */ +QWebView { + background-color: transparent; +} diff --git a/Bin/Config/Common/WxdPwdFunDefines.dat b/Bin/Config/Common/WxdPwdFunDefines.dat new file mode 100644 index 0000000..ba7ab4b --- /dev/null +++ b/Bin/Config/Common/WxdPwdFunDefines.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KPCEtLSAgICDmnKzmlofmoaPnmoTnm67nmoTmmK/pkojlr7nnjovmmZPkuJzogIHluIhwd2TorqHnrpfnrpfms5XmqKHlnovov5vooYzlrprkuYkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgQ3JlYXRlZCBEYXRlOiAyMDI0MDUyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIE1vZGlmaWVkIERhdGU6IDIwMjQwNzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gRnVuY3Rpb24g5Ye95pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBOYW1l77yaICDlh73mlbDlkI3np7DvvIzku6PnoIHkuK3lkI3np7DvvIzlh73mlbDlhaXlj6Plh73mlbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBBbGlhc++8miDliKvlkI3vvIzpgJrluLjlr7nlupTlh73mlbDlkI3np7DnmoTnm7jlhbPor7TmmI4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFdic0NvZGVz77yaIOS6leWCqOe8luegge+8jOWmguaenOS4uuepuu+8jOWImeaJgOacie+8jOWPpuWkluS4ieS4quWQjCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgV2VsQ29kZXPvvJog5LqV5Z6L57yW56CBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIFJlc0NvZGVz77yaIOayueiXj+exu+Wei+e8lueggSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEJkeUNvZGVz77yaIOi+ueeVjOe8lueggSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBJbnB1dHPvvJogICDovpPlhaXlj4LmlbDvvIzku6U75YiG5Ymy77yM5pSv5oyB566A5Y2V55qE5Yqg5YeP5LmY6ZmkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBPdXRwdXRz77yaICDovpPlh7rph4/vvIzpu5jorqTkuLpQd2TvvIzlj6/ku6XkuLrnqbrvvIzmmoLml7bml6DpnIDphY3nva4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgc1RpcHPvvJogICAg5Ye95pWw5o6l5Y+j6K+05piO5L+h5oGvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KDQoNCjxSb290Pg0KPEZ1bmN0aW9uIE5hbWU9IkRFTU8iIFdic0NvZGVzPSIwMCIgV2VsQ29kZXM9IjcwMTs3MDIiIFJlc0NvZGVzPSI3MDEiIEJkeUNvZGVzPSIwMTswMiIgSW5wdXRzPSJjZHMqMjt4ZS94Zjt0RCIgT3V0cHV0PSJQd2QiIHNUaXBzPSLku4Xku4XkuLrkuobmvJTnpLoiIC8+DQo8RnVuY3Rpb24gTmFtZT0iVlB3RDAiIFdlbENvZGVzPSI2MDEiIFJlc0NvZGVzPSI2MDEiIElucHV0cz0iY2RzO3REIiBPdXRwdXQ9IlB3ZCIgc1JlbWFyaz0i5pmu6YCa55u05LqV5peg6ZmQ5bu25Ly45qih5Z6LIiAvPg0KPEZ1bmN0aW9uIE5hbWU9IkZQd0Q4OTAiIFdlbENvZGVzPSI2MDAiIFJlc0NvZGVzPSI2MDAiIElucHV0cz0iRmMvKHhmKkspO3h3L3hmO3l3L3hmO3hlL3hmO3llL3hmO3REIiBzUmVtYXJrPSLnn6nlvaLlsIHpl63lnLDlsYLmnInpmZDlr7zmtYHlnoLnm7Too4LnvJ3nur/mupDop6MiIC8+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Lang/cn/Framework_cn.qm b/Bin/Config/Lang/cn/Framework_cn.qm new file mode 100644 index 0000000..6e31e6a Binary files /dev/null and b/Bin/Config/Lang/cn/Framework_cn.qm differ diff --git a/Bin/Config/Lang/cn/Framework_cn.ts b/Bin/Config/Lang/cn/Framework_cn.ts new file mode 100644 index 0000000..04a1392 --- /dev/null +++ b/Bin/Config/Lang/cn/Framework_cn.ts @@ -0,0 +1,4208 @@ + + + + + ExcelEngine + + + Failed to start excel application + 未能启动Excel应用程序。 + + + + Failed to query excel workbooks. + 未能开启Excel的workbooks。 + + + + Failed to query workbook. + + + + + Failed to querySubObject Worksheets. + + + + + Failed to get proper sheet. + + + + + Failed to query work sheet (%1). + 打开Excel工作簿(%1)失败。 + + + + Failed to query excel UsedRange. + 查询Excel的UsedRange失败。 + + + + Failed to query excel normalize range. + 查询Excel规范化Range失败。 + + + + + No data to save. + + + + + Failed to convert data. + + + + + Range error. + + + + + ExcelEngineEx + + + nColFrom is not proper. + + + + + No data to export + + + + + Failed to extract excel contents. + + + + + GmCurveDictModel + + Linear + 线性拟合 + + + + QHeaderViewWx + + OK + 确定 + + + + QListViewEx + + All + 全部 + + + + QObject + + MPA is loading... + MPA加载中... + + + + + + %1%2:%3%4 + + + + + + %1 + + + + + + + + + Open File + 打开文件 + + + + + Excel files (*.xls *.xlsx) + + + + + + Failed to get excel file %1. + 未能找到Excel文件%1. + + + + No enough data in excel file %1. + Excel文件%1数据为空. + + + + Application not installed properlly. + 程序未能正确安装。 + + + + Export excel file + 导出Excel + + + + Excel files (*.xlsx);;Excel 97-2003 files (*.xls) + + + + Unit info error with sUnit: '%1' a=%2 b=%3 + 单位信息错误: '%1' a=%2 b=%3 + + + Found no info of unit '%1' + 未能找到'%1'的单位信息 + + + Failed to find unit config for UnitName '%1' + 未能找到'%1'的单位信息 + + + + + + + + + NON + + + + + UPTRIANGLE + + + + + DOWNTRIANGLE + + + + + CIRCLE + + + + + SQUARE + + + + + DIAMOND + + + + + CROSS + + + + + PLUS + + + + + STAR + + + + + LEFTTRIANGLE + + + + + RIGHTTRIANGLE + + + + + RIG + + + + + TRIANGLEWITHLINE + + + + + CRICLEWITHLINE + + + + + ARROW + + + + + Failed to find file: +%1 + Sql is empty. + Sql为空. + + + + Failed to open file: +%1 + + + + + Failed to extract file: +%1 + + + + + Failed to extract info of file: +%1 + + + + + Failed to decrypt file: +%1 + + + + + File format not supported %1 file + 文件格式不支持:%1 + + + + Find no data from Excel '%1' + Excel文件%1数据为空. + + + + + Failed to find infomation of '%1' + 未能找到参数'%1'的配置信息 + + + + Failed to find config of '%1' + 未能找到单位'%1'的配置信息 + + + + Jpg files (*.jpg *.jpeg);;Png files (*.png);;Icon files (*.ico);;All files (*.*) + + + + + + ModelParas files (*.xml) + + + + + + Save File + 保存 + + + + + Excel files (*.xls *.xlsx);;Unit files (*.xml) + + + + + Current point already added. + 已经加入. + + + + Cannot find the palettes directory: %1 + 未能找到目录:%1 + + + + LegendItems + 图例子项 + + + + Low permibility + 常规模型 + + + + Horizational well + 水平井模型 + + + + Prod driven + 聚合物驱 + + + + Special reservoirs + 特殊油气藏 + + + + FitWindow + 适合窗口 + + + + FitWidth + 整宽 + + + + FitHeight + 整高 + + + + Soft system used + + + + + Soft system used used + + + + + Other + 其它 + + + MPA system used + MPA系统 + + + Current project used + 当前项目 + + + + Customed by user + 用户自定义 + + + + Pause + 暂停 + + + + Continue + 继续 + + + + Quit + 退出 + + + Failed to save data of: %1 + 保存'%1'数据失败 + + + + + + License code not match. + 许可不匹配. + + + + Failed to get mixed inner code. + 获取混合内码失败. + + + + Failed to create license code_i. + 生成许可码失败. + + + + Date Code error. + 日期错误. + + + + Date error. + 日期错误. + + + Succeeded! + 操作成功. + + + Failed! please check the logs + 操作失败,请查看日志. + + + + Failed to find %1 file + Well is null. + 未能找到文件:'%1' + + + + Seg %1 + + + + + Len Error: Per Len is %1; All Len is %2 + + + + + In layer count not match current inputs. + + + + + + Failed to find table xml defines of '%1' + + + + + '%1' key field is empty. + + + + + Failed to find default code here, please check it. + + + + + Type '%1' not supported. + + + + + '%1' key field and value not match. + + + + + Error configed. + + + + + KeyIndex: %1 is larger than colMax: %2 + + + + + Failed to delete data for null 'Where' + + + + + %1 is loading... + + + + + Failed to open database: +%1 + + + + + + + Failed to open file +%1 + + + + + Find no proper data +%1 + + + + + Failed to parse header of file +%1 + + + + + More parameters... + + + + + Scene of view is null, +nothing to save. + + + + + TreeWxConfig + + + System setting + 系统配置 + + + + Unit manager + 单位配置 + + + + PlotTemplate + 绘图模板配置 + + + + ModelParas + 模型参数 + + + PtyManager + 属性配置 + + + + BtnCmds + 功能按钮 + + + + Icons + 图标 + + + BsfEdit + 序列化文件管理 + + + + Help + 帮助 + + + + WordEngine + + + Failed to initialize Ole with error: %x. + 初始化OLE失败,错误:%x。 + + + + Failed to load word application. + 未能启动Word应用程序。 + + + + Failed to load word documents. + 未能加载Word文档。 + + + + Failed to query current active document. + Word活动文档获取失败。 + + + + Failed to insert table. + 插入表格失败。 + + + + ZxAlignTool + + Align Left + 左对齐 + + + Align Right + 右对齐 + + + Align Top + 上对齐 + + + Align Bottom + 下对齐 + + + Same Width + 等宽 + + + Same Height + 等高 + + + Same Size + 等大小 + + + Align Horizontal Center + 水平居中 + + + Align Vertical Center + 竖直居中 + + + Average Horizontal Spacing + 水平均分 + + + Average Vertical Spacing + 竖直均分 + + + Align + 对齐 + + + + ZxAppWindow + + Tile the windows + 窗口平铺 + + + Cascade the windows + 窗口折叠 + + + + ZxArrowTool + + + Arrow + + + + + ZxBarPlot + + + Top + 顶部 + + + + Bottom + 底部 + + + + ZxCmdTool + + + ZoomEx + + + + + Image file (*.png;*.jpg;*.bmp) + + + + + Open File + 打开文件 + + + + ZxColorGradientDialog + + + Dialog + 许可管理 + + + + 数据值: + + + + + Nex + + + + + Def + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + Flp + + + + + Pre + + + + + Sav + + + + + Ope + + + + + Red + + + + + Ond + + + + + 透明度: + + + + + Save File + 保存 + + + + color(*.clr) + + + + + ZxColorPopup + + + Color + 颜色 + + + + ZxComboBoxCbxRadioWx + + + Method Option + 选项 + + + + OK + 确定 + + + + Cancel + 取消 + + + + No proper option(s) given. + 无合适选项. + + + + ZxComboBoxFuzzy + + + OK + 确定 + + + + Cancel + 取消 + + + + ZxConfigDialog + + Gradient + 渐变 + + + + ZxConfigSymbolModel + + Name + 名称 + + + + ZxConfigSymbolSelectionDialog + + Ok + 确定 + + + Cancel + 取消 + + + + ZxContextMenuTool + + + Context Menu + + + + + ZxDotEdit + + + %1 mm + + + + + ZxDragScrollTool + + + Drag Scroll + + + + + ZxGradientDialog + + + Gradient + 渐变 + + + + Color... + + + + + Index + + + + + Delete + 删除 + + + + Color count + + + + + Interpolation + + + + + Ok + 确定 + + + + Cancel + 取消 + + + + Linear + 线性拟合 + + + + Color + 颜色 + + + + ZxGraphItem + + Failed to save file. + 保存文档失败。 + + + Failed to export image: %1 + 导出图片失败:%1 + + + + ZxGraphView + + Export scene graph + 导出场景 + + + Export selection graph + 导出所选对象 + + + Export view graph + 导出视图 + + + no scene + 没有场景 + + + + ZxHandleTool + + + Handle + Handle + + + + ZxLibSymbolSelectionDialog + + Ok + 确定 + + + Cancel + 取消 + + + + ZxLibSymbolSelectionModel + + Name + 名称 + + + + ZxLinearGradientDialog + + + Gradient + 渐变 + + + + Color1 + 颜色1 + + + + Color2 + 颜色2 + + + + Vertical + 竖直 + + + + Horizontal + 水平 + + + + + Color + 颜色 + + + + ZxMarqueeSelectTool + + Marquee Select + Marquee选择 + + + + ZxModuleInfo + + Module launch failed: + 启动模块失败: + + + + ZxModuleManager + + (unconfigured?) + (未配置?) + + + + ZxMoveTool + + + Move + Move + + + + ZxObjBandTool + + + mObjBandTool + mObjBandTool + + + + ZxObjCurve + + + Free + 自由移动 + + + + Point_Free + 点模式 + + + + Line_Free + 线模式 + + + + Move_withBrother + 联动模式 + + + + Whole_Hori + 水平整体 + + + + Whole_Vert + 数值整体 + + + + Whole_Free + 整体自由移动 + + + + ZxObjCurveBarExTool + + + mCurveBarExTool + + + + + ZxObjCurveBarTool + + + WtCurveBaseTool + + + + + ZxObjCurveBase + + + Point state array's size not match with m_vecPoints + 点状态数组与点数据不匹配 + + + + ZxObjCurveBaseTool + + + MoveF + + + + + ZxObjCurveDiscreteTool + + + MoveDiscrete + + + + + ZxObjCurveFlow + + + %4: %1 +%5: %2 - %3 + + + + + %4: %1 - %2 +%5: %3 + + + + + Free + + + + + Point_Free + 点模式 + + + + Line_Free + 线模式 + + + + Move_withBrother + 联动模式 + + + + Whole_Hori + 水平整体 + + + + Whole_Vert + 数值整体 + + + + Whole_Free + 整体自由移动 + + + + ZxObjCurveFlowTool + + + MoveF + + + + + ZxObjCurveFreeTool + + + WtCurveBaseTool + + + + + ZxObjCurvePressure + + + Free + + + + + Point_Free + 点模式 + + + + Line_Free + 线模式 + + + + Move_withBrother + 联动模式 + + + + Whole_Hori + 水平整体 + + + + Whole_Vert + 数值整体 + + + + Whole_Free + 整体自由移动 + + + + ZxObjImage + + + Image file (*.png;*.jpg;*.bmp) + + + + + Open File + 打开文件 + + + + ZxObjImageTool + + + mObjImageTool + + + + + ZxObjLineParallel + + + + Parallel %1 + + + + + Parallel -1/%1 + + + + + Parallel 1/%1 + + + + + ZxObjLineParallelTool + + + mObjLineParallelTool + + + + + ZxObjLineSlr + + + + Line %1 + + + + + Line -1/%1 + + + + + Line 1/%1 + + + + + ZxObjLineSlrTool + + + mObjLineSlrTool + + + + + ZxObjLineSpecialTool + + + mObjLineSpecialTool + + + + + ZxObjLineTool + + + mObjLineTool + + + + + ZxObjPointSlr + + + Speci Point + 特征点 + + + + ZxObjPointSlrTool + + + mObjPointSlrTool + + + + + ZxObjPointTool + + + mObjPointTool + + + + + ZxObjPolygonTool + + + mObjPolygonTool + + + + + ZxObjRectTool + + + mObjRectTool + + + + + ZxObjText + + + Left + 靠左 + + + + CenterH + 居中 + + + + Right + 靠右 + + + + Top + 靠上 + + + + CenterV + 居中 + + + + Bottom + 靠下 + + + + ZxObjTextTool + + + TextEditTool + + + + + ZxObjToolBase + + + mObjToolBase + + + + + ZxPenEdit + + + 1 px + + + + + ZxPlot + + + Make sure to clear selected state of current curve? + 确定清除当前曲线的选择状态? + + + + Show data of '%1' + 显示'%1'数据 + + + + Clear points selection of '%1' + 清除'%1'选择点 + + + + Failed to append obj. + 添加对象失败。 + + + + ZxPlotBase + + + Top + 顶部 + + + + Bottom + 底部 + + + + ZxPrintOptionDialog + + Print Mode + 打印模式 + + + Oringinal Size + 原始大小 + + + Fit Width + 整宽 + + + Fit Page + 整页 + + + + ZxProcessUI + + Cancel + 取消 + + + + ZxPropEdit_Enum + + + <empty> + + + + + ZxPropEdit_Flags + + + | + + + + + ZxPropEdit_Picture + + + Open + 打开 + + + + Images (*.png *.bmp *.jpg) + + + + + ZxPropertySheet + + Property + 属性 + + + Value + 数值 + + + Help:TODO + 备注:待填写 + + + + ZxPtyCommand + + + change + + + + + ZxPtyDock + + + SaveForSelf + + + + + SaveForAll + + + + + ZxPtyFileManager + + + Pty tag is empty, use 'default'. + + + + + Failed to load pty file: +%1 + + + + + ZxPtyPano + + + Property + 属性 + + + + Value + 数值 + + + + Help:TODO + 备注:待填写 + + + + ZxRenderItem + + + Failed to find file +%1 + + + + + Failed to save file. + 保存文档失败。 + + + + ZxSceneItem + + + Back Layer + + + + + Main Layer + + + + + Front Layer + + + + + Temporay Layer + + + + + Copy + + + + + &Copy + 复制 + + + + Ctrl+C + + + + + Paste + + + + + &Paste + 粘贴 + + + + Ctrl+V + + + + + Cut + + + + + Cu&t + + + + + Ctrl+X + + + + + + Del + 删除 + + + + &Delete + + + + + edit-select-all + + + + + Select &All + + + + + Ctrl+A + + + + + Save File + 保存 + + + + Dotted archived files (*.dat) + + + + + Save + + + + + before close? + + + + + Untitled + + + + + ... (x + + + + + ) + + + + + ZxScrollTool + + + Hand + + + + + ZxSelectTool + + + Select + + + + + ZxStratumModel + + Other + 其它 + + + + ZxSubAxisBase + + + Axis type not supported '%1' + + + + + ZxSubAxisDt + + + sec + + + + + min + + + + + hour + + + + + ZxSubAxisY + + + + Error: Axis height is 0. + 错误:坐标轴高度为0. + + + + ZxSubLegend + + + LeftTop + 左上角 + + + + LeftBottom + 左下角 + + + + RightTop + 右上角 + + + + RightBottom + 右下角 + + + + Free + 任意 + + + + ZxSubLegendTool + + + mObjLegendTool + + + + + ZxSubNaviBar + + + Production + 生产 + + + + Fall Off + 压降 + + + + ZxSymbolPullList + + + Form + + + + + ZxSystem + + + (DEBUG) + + + + + ZxTableOption + + + Table format + 表格格式设置 + + + + All + 全部 + + + + + AutoTrim + 裁剪0 + + + + Columns + 列选项 + + + + * Determined column type by first row + * 列属性由该列首行数据属性确定 + + + + ColName + 列名 + + + + Digits + 小数位数 + + + + Remark + 备注 + + + + (*Unused column) + + + + + OK + 确定 + + + + Cancel + 取消 + + + + ZxTableView + + + + &Format columns + 设置样式 + + + + &Insert One Row (Above) + 插入一行(上侧) + + + + &Insert One Row (Below) + 插入一行(下侧) + + + + &Insert Multi Rows + 插入多行 + + + + &Above + 上侧 + + + + &Below + 下侧 + + + + &Insert Column + 插入列 + + + + &Remove Row + 删除行 + + + + &Remove Column + 删除列 + + + + &Copy + 复制 + + + + &Paste + 粘贴 + + + + &Cut + 剪切 + + + + &Save to DataBase + 保存入库 + + + + &Export Data + 导出 + + + + + Input insert Rows + 插入的行数 + + + + + Row Number: + 行数: + + + + Input insert Columns + 插入的列数 + + + + Column Number: + 列数: + + + + Make sure to delete selected records? + 确定删除所选? + + + + Data exported successfully. + 数据成功导出. + + + + Failed to export data. + 导出数据失败. + + + + ZxTableViewEx + + + All + 全部 + + + + ZxTestAddGraphDialog + + Dialog + 许可管理 + + + + ZxTranslationsManager + + English + 英文 + + + Chinese + 中文 + + + + ZxTranslator + + + English + 英文 + + + + Chinese + 中文 + + + + ZxUiBase + + + Error to write type of '%1' here + + + + + Error to read type of '%1' here + + + + + + + %1 not considered. + + + + + + + TODO: type of '%1' here + 序列化操作类型'%1'出错 + + + + Not matched: %1 + 不匹配:%1 + + + + ZxWindow + + Properties + 属性 + + + + ZxZoomTool + + + Zoom + + + + + iBaseNavi + + + Please re-choose model type, current is: + 请选择模型系列,目前所选为: + + + + Open selected project at same time. + 同时打开如下项目: + + + + (%1) %2 [%3] + + + + + iBsfEditTreeModel + + no such object + 无对象体 + + + + iCppExtractor + + + Flags + + + + + Brush + + + + + Marker Code + + + + + Code + Job编码 + + + + Marker + + + + + Pen + + + + + Offset + + + + + X + + + + + Y + + + + + Width + + + + + Height + + + + + Text + + + + + Depth + + + + + Top Depth + + + + + Bottom Depth + + + + + Length + + + + + Style + + + + + Min + 最小值 + + + + Max + 最大值 + + + + Color + 颜色 + + + + Font + + + + + Angle + + + + + Type + + + + + Title + 标题 + + + + Name + 名称 + + + + Unit + 单位 + + + + iDlgBase + + TODO: type of '%1' here + 序列化操作类型'%1'出错 + + + Not matched: %1 + 不匹配:%1 + + + + iGridRowItemBdy + + + CloseB + 封闭 + + + + FixP + 定压 + + + + iGridRowItemImg + + + Image file (*.png;*.jpg;*.bmp) + + + + + Browse image file + + + + + file not exists: %1 + + + + + iGridRowUtils + + + No parameters found + + + + + Failed to find config of '%1' + 未能找到参数'%1'的配置信息 + + + + Property + 属性 + + + + Value + 数值 + + + + iLicWxUtils + + + Dialog + 许可管理 + + + + 许可文件 + + + + + 注册码 + + + + + 许可服务器 + + + + + 其它(待扩展) + + + + + 当前产品列表 + + + + + 90 + + + + + 授权时长 + + + + + 授权对象 + + + + + 有效天数 + + + + + 天 + + + + + 姓名 + + + + + 单位 + + + + + 生成时同步保存 + + + + + 生成 + + + + + 存为Lic + + + + + 注册 + + + + + 关闭 + + + + + %1 License Manager + %1 许可管理 + + + + Register + 注册 + + + + LicenseGenerator + 生成 + + + Error license config, please contact MPA members. + 许可配置信息错误,请联系MPA技术人员. + + + + Save lic info to Excel or not: + + + + + + Error license config, please contact tech. members. + + + + + Failed to export data. + 导出数据失败. + + + + Valid date size is not ok. + 日期不对. + + + + Curtomer name is null. + 客户姓名不能为空,请填写. + + + + License codes generated successfully. + 许可授权码生成成功. + + + + License saved successfully. + 许可保存成功. + + + + License registered successfully. + 许可注册成功. + + + + License checked successfully. + 许可检测通过. + + + + iLicenseXmlTool + + Close + 关闭 + + + + iParaItemCtrl + + + CloseB + 封闭 + + + + FixP + 定压 + + + + iPlotBaseWxT + + + Failed to parse + + + + + + Failed to load + + + + + + iPlotContourWxT + + Delete + 删除 + + + Next + 下一步 + + + + iPropEditTreeModel + + Code + Job编码 + + + Min + 最小值 + + + Max + 最大值 + + + Color + 颜色 + + + Type + 井型 + + + Title + 标题 + + + Name + 名称 + + + Unit + 单位 + + + + iSplashObjImgLoop + + + 名称重命名 + + + + + iWisDataSelectDlg + + Dialog + 许可管理 + + + + iWxBsfEdit + + iWxBsfEdit + 内置文件格式编辑 + + + Doc Header + 文档头 + + + Bsf Version: + 格式版本 + + + Doc Type + 文档类型 + + + Doc Version + 文档版本 + + + Doc VerDate + 文档日期 + + + Doc Flags + 文档标识 + + + New + 新建 + + + Open + 打开 + + + Save + 保存 + + + Close + 关闭 + + + Exit + 退出 + + + Save As... + 另存为... + + + Find + 查找 + + + Extract Properties + 提取 + + + Failed to open %1 + 未能打开文件:'%1' + + + Save current file? + 保存当前文件? + + + Fail to save. + 保存文件失败. + + + + iWxClassInfo + + MPA Class Info + MPA源码类信息 + + + Header Dir + .h文件路径 + + + Expand + 展开 + + + Collapse + 折叠 + + + Consider Sole Class + 仅仅考虑当前class + + + Extract + 提取 + + + ExportCur + 导出当前 + + + ExportAll + 导出所有 + + + Close + 关闭 + + + Browse directories + 浏览 + + + Extract infos successfully. + 数据提取完成. + + + + iWxConfigAlgoSetting + + + iWxConfigAlgoSetting + 算法配置 + + + + Test Type + 测试类型 + + + + Fluid Type + 流体类型 + + + + Algorithm Settings + 算法设置 + + + + iWxConfigBase + + + Save + + + + + Name '%1' already defined which is repeated. + 名称'%1'重复定义. + + + + iWxConfigBtnCmds + + + iWxConfigBtnCmds + + + + + + Refresh + 刷新 + + + + Refresh current btn_cmds + + + + + Current Buttons + 当前按钮(s) + + + + Desc: + 描述: + + + + GraphItems + 图元 + + + + Advanced GraphItems + 高级图元 + + + + UserInterface + 界面 + + + + ZoomTools + 缩放 + + + + Visible + 显示 + + + + I/O + 输入/输出 + + + + Delete + 删除 + + + + Browse folder + 浏览 + + + + Add + 新增 + + + + iWxConfigDefaultValue + + + iWxConfigDefaultValue + 默认值配置 + + + + Test Type + 测试类型 + + + + Fluid Type + 流体类型 + + + + Default values + 默认值 + + + + iWxConfigIcons + + + iWxConfigIcons + 图标配置 + + + + + + Refresh + 刷新 + + + + Browse + + + + + Browse icon folder + + + + + Current Icons + 当前图标(s) + + + + Delete + 删除 + + + + Browse folder + 浏览 + + + + Add + 新增 + + + + Make sure to delete selected info(s)? + 确定删除所选? + + + + iWxConfigModelParas + + + iWxConfigModelParas + + + + + LoadCurrent + 加载当前 + + + + Load Current Selection + + + + + Model Parameter Descriptions + 模型参数描述 + + + + Name + 名称 + + + + Alias + 别名 + + + + Unit + 单位 + + + + DefaultValue + 默认值 + + + + Max + 最大值 + + + + Min + 最小值 + + + + Tips + 备注 + + + + Failed to find unit config of '%1' + 未能找到单位'%1'的配置信息 + + + + Failed to export data. + 导出数据失败. + + + + iWxConfigPaths + + + iWxConfigPaths + + + + + Test Type + 测试类型 + + + + Fluid Type + 流体类型 + + + + Paths + 路径 + + + + iWxConfigPlotTemplate + + + iWxConfigPlotTemplate + + + + + LoadCurrent + 加载当前 + + + + OpenFolder + 打开模板文件夹 + + + + Load template for current typed object + + + + + Open template folder + + + + + Plot template + 绘图模板 + + + + TestPlot + + + + + FreeCurve + + + + + Properties + 属性 + + + + iWxConfigSys + + + Dialog + 许可管理 + + + + Language + 语言 + + + + Chinese + 中文 + + + + English + 英文 + + + + Other + 其它 + + + + System Sheets + 系统样式 + + + + CurSheet + 当前样式 + + + + MPA.css + + + + + SheetSrc + 样式来源 + + + + $/Config/MPA/MPA.css + + + + + ... + + + + + Standards + 石油标准 + + + + PetroChina + 中石油 + + + + SinoPetro + 中石化 + + + + CNOOC + 中海油 + + + + Unit Standards + 单位系统 + + + + Unit System 1 + + + + + Unit System 2 + + + + + Others + 其它 + + + + AutoSave + 自动保存 + + + + Per + + + + + minutes + 分钟 + + + + Run MPA with splash mode + + + + + iWxConfigSys + + + + + iWxConfigUnit + + + iWxConfigUnit + + + + + LoadCurrent + 加载当前 + + + + LoadExcel + 加载Excel + + + + CheckCurXml + + + + + Load Current Selection + + + + + Load From Excel + 加载Excel + + + + Check Current Xml + + + + + Unit lists + + + + + Type + 单位类别 + + + + Unit + 单位 + + + + k + k系数 + + + + b + b系数 + + + + Digit + 小数位数 + + + + Remark + 备注 + + + + There are %1 para unit(s) not configed properly in Model '%2' + + 模型系列'%2'中有%1种单位参数没有配置\r\n + + + + [Para] Name:%1 Alias:%2 Unit:%3 + + + + + + + Failed to export data. + 导出数据失败. + + + + Data exported successfully. + 数据成功导出. + + + + iWxConfigWizard + + + All Configs + 配置分类 + + + + Help + 帮助 + + + + Save + 保存当前 + + + + SaveAll + 保存所有 + + + + <<Back + <<前一个 + + + + Next>> + 下一个>> + + + + Config settings (%1/%2): %3 + 配置(%1/%2): %3 + + + + TODO: hidden into subwnd + + + + + iWxDataMigrate + + Open File + 打开文件 + + + + iWxFileUtils + + MPA Class Info + MPA源码类信息 + + + Close + 关闭 + + + Browse directories + 浏览 + + + + iWxFileUtilsWt + + MPA Class Info + MPA源码类信息 + + + Close + 关闭 + + + Browse directories + 浏览 + + + + iWxHelp + + + Chapters + + + + + MPA Help + + + + + Test + + + + + iWxIconExtract + + Dialog + 许可管理 + + + Extract + 提取 + + + Cancel + 取消 + + + Code + Job编码 + + + Remark + 备注 + + + Data exported successfully. + 数据成功导出. + + + Failed to export data. + 导出数据失败. + + + + iWxLogSaveOption + + Color + 颜色 + + + Digit + 小数位数 + + + Linear + 线性拟合 + + + Cancel + 取消 + + + + iWxLogSpider + + Options + 选项 + + + Failed to save. + 序列化保存出错. + + + + iWxProDepends + + Dialog + 许可管理 + + + Extract + 提取 + + + Cancel + 取消 + + + Extract infos successfully. + 数据提取完成. + + + + iWxPropEdit + + Save + 保存 + + + Reload + 重新加载 + + + Check + 检测 + + + Find + 查找 + + + Export csv ... + 导出CSV + + + Export csv file + 导出CSV + + + ApplyBaseOrder + 排序 + + + Apply base order to current file + 对当前配置文件排序 + + + Extract + 提取 + + + Extract properties from source files + 从配置文件提取属性项 + + + BaseOrder + 排序 + + + Bsftool + 文档工具 + + + ExportCSV + 导出CSV + + + Properties + 属性 + + + Export + 导出 + + + + iWxPropItemAdd + + Dialog + 许可管理 + + + File: + 文件: + + + + iWxRegBase + + + Failed to create license code with '%1' + + + + + Inner code not contains ':' + + + + + Failed to get license code with '%1' + + + + + Error lic info. + + + + + Lic code not contains ':' + + + + + Failed to register. + + + + + iWxRegCode + + + MPA许可注册 + + + + + 初始内码 + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + 授权码 + + + + + Inner code is empty. + + + + + iWxRegFile + + + Dialog + 许可管理 + + + + 请选择许可文件 + + + + + 文件 + + + + + ... + + + + + 授权码 + + + + + Loaded lic file successfully. + + + + + Failed to load file. + + + + + Failed to parse lic file. + + + + + File path is empty. + + + + + Failed to save file. + 保存文档失败。 + + + + Inner code is empty. + + + + + Lic files (*.lic) + + + + + Open file + + + + + Save file + + + + + iWxRegServer + + + Dialog + 许可管理 + + + + 服务器信息 + + + + + IP + + + + + 1521 + + + + + User + + + + + admin + + + + + 测试连接 + + + + + 授权码 + + + + + Inner code is empty. + + + + + iWxRibbon + + + Dialog + 许可管理 + + + + 文件 + + + + + Tab 1 + + + + + + + + + + + + GroupBox + Job选项 + + + + + + + A + + + + + + + + a + + + + + + + + + PushButton + + + + + RadioButton + + + + + CommandLinkButton + + + + + + ... + + + + + Tab 2 + + + + + wenthis + + + + + + 页 + + + + + CheckBox + + + + + failed to find Ribbon File settings + + + + + Type '%1' from '%2' not supported + + + + + (%1) %2 [%3] + + + + + iWxToolAttributes + + + Attribute Manager + + + + + File options + + + + + + + ... + + + + + CurrentXml + + + + + CurrentDat + + + + + ExtractDir + + + + + M + + + + + F + + + + + Excluded dir that contains one of the following + + + + + Append (checked) or overwrite(unchecked) if xml exist + + + + + Append if xml exist + + + + + Load current or empty file (xml-formated) + + + + + 1. LoadXml + + + + + Extract from cpp files and cache to xml doc + + + + + 2. ExtractCpp + + + + + Save to xml file + + + + + 3. SaveXml + + + + + Convert xml file to dat file + + + + + 4. XmlToDat + + + + + Close + 关闭 + + + + Cpp dir to extract + + + + + +Loaded successfully. + + + + + + run 'Load' first. + + + + + +Extracted %1 items successfully. + + + + + + Make sure to save/override attribute file? + + + + + Failed to open temp file +%1. + + + + + +Saved xmlfile successfully. + + + + + + File not exists. + + + + + +Converted xml to dat successfully. + + + + + + +Failed to converted xml to dat. + + + + + + iWxTreeBase + + + Rename + 重命名 + + + + Del + 删除 + + + + Edit + 编辑 + + + + Expand current node + 展开 + + + + Collapse current node + 折叠 + + + + Expand all nodes + 展开所有 + + + + Collapse all nodes + 折叠所有 + + + + refresh + 刷新 + + + + Make sure to delete selected data? + 确定删除所选数据? + + + + The input is empty. + 名称信息为空。 + + + + iWxUnitManager + + Dialog + 许可管理 + + + + iWxUpdater + + Title + 标题 + + + Save + 保存 + + + Close + 关闭 + + + + iXmlItemBase + + + Parent object changed from '%1'' to '%2'. + + + + + tCurvePlotView + + + Save as image + 存为图片 + + + + Copy to clipboard + 复制图片 + + + + Print + 打印 + + + + Print Preview + 打印预览 + + + Image copied successfully. + + 图片已复制到粘贴板. + + + Exported file successfully. + + 图片保存成功. + + + + Undo + + + + + Redo + + + + + Failed to copy image. + 复制图片失败. + + + + PNG file(*.png);;JPG file(*.jpg);;TIFF file(*.tiff);;BMP file(*.bmp);;SVG file(*.svg);;PDF file(*.pdf) + + + + + Save File + 保存文件 + + + + Failed to export image file. + 存为图片失败. + + + + Current Pos:%1-%2 + + + + + wxAdminLogin + + Dialog + 许可管理 + + + + wxDataInfo + + Name + 名称 + + + Failed to save data. + 保存文件失败. + + + Dialog + 许可管理 + + + + wxUserUtil + + Dialog + 许可管理 + + + Del + 删除 + + + Refresh + 刷新 + + + Name + 名称 + + + Others + 其它 + + + Delete + 删除 + + + + xUrrsMainWx + + Logs + 日志 + + + Help + 帮助 + + + Close + 关闭 + + + diff --git a/Bin/Config/Lang/cn/WTAI_cn.qm b/Bin/Config/Lang/cn/WTAI_cn.qm new file mode 100644 index 0000000..f12e86f Binary files /dev/null and b/Bin/Config/Lang/cn/WTAI_cn.qm differ diff --git a/Bin/Config/Lang/cn/WTAI_cn.ts b/Bin/Config/Lang/cn/WTAI_cn.ts new file mode 100644 index 0000000..0a3666b --- /dev/null +++ b/Bin/Config/Lang/cn/WTAI_cn.ts @@ -0,0 +1,9004 @@ + + + + + QObject + + In layer count not match current inputs. + 中间层与输入层不匹配. + + + + 'rg' should be in range of 0.57~1.68. + rg数值范围0.57~1.28. + + + + 'pr' should be larger than 0. + + + + + Error value of 'Z' is 0. + Z为0. + + + + Error value of 'T' is 0. + T为0. + + + Error value of 'm_fro' is %1. + m_fro是'%1'. + + + + Error value of 'm_fRo' is %1. + + + + + Error value of 'fMo' is %1. + fMo是'%1'. + + + + Error value of 'm_fyg' is %1. + m_frg是'%1'. + + + + + Error value of 'm_ft' is %1. + m_ft是'%1'. + + + + Error value of 'p' is %1. + p是'%1'. + + + + + + Error value of 'p' is %1. + p是'%1'. + + + + + + + + Error value of 'Rs' is %1. + Rs错误:数值为'%1'. + + + + Error value of 'pb' is %1. + pb错误:数值为'%1'. + + + + Error value of 't' is %1. + t错误:数值为'%1'. + + + + Error value of 'den60' is %1 + den60错误:数值为'%1'. + + + + Error value of 'Tb' is %1 + Tb错误:数值为'%1'. + + + + Error value of 'Tc' is %1 + Tc错误:数值为'%1'. + + + + Error value of 'f2' is %1. + f2错误:数值为'%1'. + + + + Error value of 'f1' is %1. + f1错误:数值为'%1'. + + + + Error value of 'Rs' is 0. + Rs错误:数值为0'. + + + + Error value of 'Bw' is %1. + BW错误:数值为'%1'. + + + + + + + + Open File + 打开文件 + + + + Excel Files(*.xls *.xlsx) + + + + + Excel file(*.xlsx);;Excel 97-2003 file(*.xls) + + + + + Input time %1 is greater than %2 + 输入时间%1大于%2 + + + + Input time %1 is greater than %2 or %1 is less than %3 + 输入时间%1大于%2或者%1小于%3 + + + + Input time %1 is less than %2 + 输入时间%1小于%2 + + + Failed to find table xml defines of '%1' + 未能找到表'%1'的xml定义 + + + Failed to find default code here, please check it. + 未能找到默认代码. + + + + Type '%1' not supported. + 类型'%1'不支持. + + + '%1'?s key field and value not match. + '%1'主键不匹配. + + + Error configed. + 配置错误. + + + + Failed to find config db file. + 未能找到db文件. + + + + + Well code count not match with name count + 井名井号数目不匹配 + + + + Failed to load jobinfos with + '%1' + + + + + Failed to load jobruns with + '%1' + + + + + Failed to load PVTInfo with + '%1' + + + + + Failed to load RstJobUtils with + '%1' + + + + + Failed to load fluid with + '%1' + + + + + Failed to load Res with + '%1' + + + + + Failed to load layer infos with + '%1' + + + + + Failed to load guage pressure infos with + '%1' + + + + + Failed to load guage fluid infos with + '%1' + + + + + Failed to load gas infos with + '%1' + + + + + Failed to load other infos with + '%1' + + + + + Currrent well or wellcode is null + 当前井为空 + + + + + + Failed to find config of '%1' + 未能找到单位'%1'的配置信息 + + + + Load wizard setting + 加载 + + + + + Wizard files (*.dnd) + + + + + Save wizard setting + 保存 + + + + + Load model results + 加载 + + + + + Save model results + 保存 + + + + New Project Dir + 新建 + + + + Project Save As + 另存为 + + + + + Project name can't be empty. + + + + + Project name is invalid. + + + + + Project name is beyond %1 bytes. + + + + + Project desc is beyond %1 bytes. + + + + + Project path can't be empty. + + + + + Project path is invalid. + + + + + Project name already exists. + + + + Please input project name correctly. + 项目名称不正确. + + + + + Working Directory + 工作目录 + + + + Loaded + 已加载 + + + + UnSaved + 未保存 + + + + Unloaded + 未加载 + + + + Unknown + 未知 + + + + Failed to load ByteArray + 解析文档失败 + + + + Please select options correctly. + 请先确定选项. + + + Base + 基础 + + + + Export word file + 导出word + + + + Word files (*.docx);;word 2003 files (*.doc) + + + + + + Ipr point more than three! + IPR拟合需要至少3个点. + + + + Save rst fitting results + 保存Rst对比结果 + + + + Load rst fitting results + 加载Rst对比成果 + + + + Not Find Bo + + + + + Not Find Ct + + + + + + + + + '%1' not supported. + + + + + Points (%1 and %2) are too close. + + + + + Failed to find point of '%1' + + + + + CD is zero + + + + + u is zero + + + + + CiD is zero + + + + + alpha is zero + + + + + Structure + 基本参数 + + + + ContractionStructure + 突缩参数 + + + + ExpansionStructure + 突扩参数 + + + + CloseWellDynSurface + 启用关井动液面数据 + + + + Next + 下一步>> + + + + Prev + <<上一步 + + + + Run + 折算 + + + + SaveFile + 存为文件 + + + + LoadFile + 从文件加载 + + + + WellHeadPressure + 井口压力 + + + + BottomHolePressure + 井底压力 + + + + Value (FromStart) + + + + + Value (Duration) + + + + + RealTime + + + + + RealDateTime + + + + + RealDate + + + + + ProdOil + 油产量 + + + + ProdGas + 气产量 + + + + ProdWater + 水产量 + + + + Single phase + 单相 + + + + Multiphase + 多相 + + + + Pseu3Contained + 含三区 + + + + Inflow Performance Relationship + IPR + + + + Wbs + 井储 + + + + Wel + 井型 + + + + Res + 油藏 + + + + Bdy + 边界 + + + + Normal + 常规 + + + + Interference + 干扰 + + + + FractuWell + 压裂 + + + + PressGrad + 启动压力梯度 + + + + DynamicK + 动态渗透率 + + + + SmallSignal + 小信号 + + + + UseOrNot options + 启用选项 + + + + StressSensitive + 应力敏感 + + + + ModelOption + 模型选项 + + + + ModelParameter + 解释参数 + + + + WellBasic + 基础数据 + + + + WellRes + 储层数据 + + + + WellFluid + 流体数据 + + + + New sub wnd + + + + + Date + 日期 + + + + Time + 时间 + + + + DateTime + 日期时间 + + + + Pressure + 压力 + + + + AvgP + 平均地层压力 + + + + FlowRate + 流量 + + + + PseudoPressure + 拟压力 + + + + Radius + 井径 + + + + Vis + 粘度 + + + + Den + 密度 + + + + Other + 其它 + + + + All supported files(*.txt *.dat *.rec *.xls *.xlsx);;Test text file(*.txt);;Test dat file(*.dat);;Test dat file(*.rec);;Excel file(*.xlsx);;Excel 97-2003 file(*.xls);;All file(*.*) + + + + + Sqlite Database File(*.db) + + + + + Sqlite Database File(*.mdb) + + + + + Export excel file + + + + + Excel files (*.xls *.xlsx) + + + + + m_fPc can't be 0 + + + + + Y-F/dF is 0 + + + + + + + + + + + + + + + + + Failed to adjust Pwd by WBS + + + + + Not supported model-type + + + + + + Failed to get cross point of current 4 points + + + + + + Improper cross point of current 4 points + + + + + Pressure range or interval not proper + + + + + Failed to adjust comps args. + + + + + Comps data not proper. + + + + + No component with none-zeror ratio. + + + + + Failed to calculate_subsequent_variables. + + + + + + Data improper + + + + + + data size not match + + + + + Array data error + + + + + Error: min %1; max %2 + + + + + + Failed to get value of '%1' + Failed to get value of '{key}' + + + + + x / y arrays are improper. + + + + + (by %1) + + + + + + + + + + + Failed to call alg + + + + + Only %1 data left after adjusting deriv. + + + + + + + Failed to interpolate. + + + + + Failed to find value in array Prs that is near m_dPc enough. + + + + + Failed to find data in time array that t > m_dTc + + + + + Only %1 proper data in time array that t > m_dTc + + + + + m_dK value not set + + + + + Failed to find 0 data of Flow. + + + + + clpx value not set + + + + + m_dTp value not set + + + + + m_dTp value is set (%1) but improper + + + + + Failed to find a(%1) and b(%2) + + + + + + Failed to divide matrixes by left mode + + + + + Two fitting lines are parallel. + + + + + Error: Left %1; Right %2 + + + + + Well name already exists. + + + + + Well name is beyond %1 bytes. + + + + + Failed to build wx run option + + + + + + + + + Failed to resolve function: %1. + + + + + cds is zero + + + + + K is zero + + + + + xf is zero + + + + + + Failed to load library file: %1. + + + + + Failed to current fun defines. + + + + + Failed to get value of '%1'. + + + + + Lib file not loaded properly, please setLibName first. + + + + + No fun define for %1 paras, please contact dev + + + + + Failed to find ModelDesc with +WBS='%1' and WEL='%2' and RES='%3' and BDY='%4' + + + + + Failed to load PVTData with + '%1' + + + + + Failed to load ZxRstJobPureData with +%1 + + + + + Failed to load ZxRstJobWnd with +%1 + + + + + Failed to load ZxRstJobRun with +%1 + + + + + Failed to load ZxRstJobSeg with +%1 + + + + + Failed to find file +%1 + + + + + Failed to open file +%1 + + + + + Failed to parse updating file +%1 + + + + + Failed to load nmDataDemo with + '%1' + + + + + TreeWxBase + + + Rename + 重命名 + + + + Del + 删除 + + + + Edit + 编辑 + + + + Expand current node + 展开 + + + + Collapse current node + 折叠 + + + + Expand all nodes + 展开所有 + + + + Collapse all nodes + 折叠所有 + + + + refresh + 刷新 + + + + Make sure to delete selected data? + 确定删除所选数据? + + + + The input is empty. + 名称信息为空。 + + + + TreeWxMain + + + Jobs(Current):%1 + + + + + + Jobs(Others):%1 + + + + + + Pressure:%1 + + + + + + Fluid:%1 + + + + + + Others + + + + + Failed to delete data. + + + + + TreeWxMainD + + Rate&Press + 压力&流量 + + + Well is null, please readjust. + 井为空,请重新选择。 + + + New well + 新建井 + + + Set Current Well + 设为当前井 + + + Scan data + 浏览 + + + Append and show this curve + 显示曲线 + + + Browse this curve + 编辑曲线 + + + Selected data own well object, make sure to delete anyway? + 所选数据包含井数据,确定删除? + + + + TreeWxMainDa + + + + Rate&Press + 压力&流量 + + + + Well is null, please readjust. + 井为空,请重新选择。 + + + + + New well + 新建井 + + + + Set Current Well + 设为当前井 + + + + Scan data + 浏览 + + + + + No need to move item node. + + + + + Make sure to change data object? + + + + Append and show this curve + 显示曲线 + + + + Browse this curve + 编辑曲线 + + + + NewWellName%1 + + + + + Others + + + + + Selected data own well object, make sure to delete anyway? + 所选数据包含井数据,确定删除? + + + + TreeWxMainJ + + Load Job(s) + 加载作业 + + + Save Job(s) + 保存作业 + + + Fit result parameters + 解释参数对比 + + + Compare results + 成果对比 + + + Well is null, please readjust. + 井为空,请重新选择。 + + + Set Current Well + 设为当前井 + + + + TreeWxMainJb + + + refresh + 刷新 + + + + + New job + + + + + + Job manager + + + + + Set As Default + + + + + NewJobName%1 + + + + + Make sure to default current job? + 把当前Job设为默认? + + + + TreeWxMainRs + + + Load Job(s) + 加载作业 + + + + Save Job(s) + 保存作业 + + + + Fit result parameters + 解释参数对比 + + + + Compare results + 成果对比 + + + + Well is null, please readjust. + 井为空,请重新选择。 + + + + Set Current Well + 设为当前井 + + + + ZxObjPointExTool + + + mObjPointExTool + + + + + ZxObjSegLineTool + + + mObjLineSingleMoveTool + + + + + ZxObjWmLineTool + + + mObjWmPointTool + + + + + ZxObjWmPoint + + + Well + + + + + ZxObjWmPointTool + + + mObjWmPointTool + + + + + ZxSegmentInfo + + + Segment1 + 流动段1 + + + + iAlgFitAutoGN + + + The Jacobian matrix Error + Jacobian矩阵错误 + + + + Step(%1) + + + + + Passing + Passed + + + + iAlgIprCal + + + IPrResult Error + IPR结果计算错误 + + + + (B:%1-->%2) + + + + + iAlgModelPF + + AdJDis is 0 + AdjDis参数为0 + + + + iAlgModelXcm + + + Xcm derivRealCurves failed and now use default + + + + + Xcm find no curve of '%1' + + + + + iAlgPreCon + + + FlowQ is empty + FlowQ为空 + + + + The %1 flow rate is 0 + + + + + The bottom hole pressure difference of the wellhead is empty + + + + + iAlgPreConAnnulus + + + Diam1(Diam2) is less than 0 Or Diam2 is less than Diam1 + + + + + ExpTubODiam(ExpCasIDiam) is less than 0 Or ExpCasIDiam is less than ExpTubODiam + + + + + BehinConTubODiam(BehinConCasIDiam) is less than 0 Or BehinConCasIDiam is less than BehinConTubODiam + + + + + A1 is less than A2 + + + + + FluidDen(ConsisCoeffi;LiquidiIndex) is less than 0 + + + + + fDim2(fDim1) is less than 0 Or fDim2 is less than fDim1 + + + + + iAlgPreConTubing + + + Q is less than 0 Or Diam is less than 0 + + + + + The number is divided into 0 + + + + + ConsisCoeffi is less than 0 Or LiquidiIndex is less than 0 + + + + + Q is less than 0 Or Dim is less than 0 + + + + + iDlgRename + + + 名称重命名 + + + + + 原名称 + + + + + 新名称 + + + + + 确定 + + + + + 取消 + + + + + New name can't be null. + 新名称不能为空. + + + + Same name already exists. + 名称已经存在. + + + + iDockBaseWx + + + Find + 查找 + + + + iDockModelOption + + + Model Infos + 模型信息 + + + + WellModel + 井型 + + + + ReseriorModel + 油藏类型 + + + + BoundsType(Inner) + 内边界类型 + + + + BoundsType(Outer) + 外边界类型 + + + + Option 1 + 选项1 + + + + Option 2 + 选项2 + + + + Option 3 + 选项3 + + + + Option 4 + 选项4 + + + + iDockResult + + + Show ALL + 显示全部 + + + + iDockTableView + + + Load From Excel + 加载Excel + + + + Save To Excel + 存为Excel + + + + iDockWellExplorer + + + Test_1 + 测试1 + + + + Test_2 + 测试2 + + + + Test_3 + 测试3 + + + + iGuiDataLoad + + + iGuiDataLoad + 数据加载 + + + + File: + 文件: + + + + OK + 确定 + + + + Cancel + 取消 + + + + iGuiPlot + + + iGuiPlot + + + + + iGuiPlotCmdHelper + + + + Model Result Files (*.mrf) + + + + + Failed to find file +%1 + 未能找到文件:\r\n%1 + + + + Failed to parse file +%1 + 未能解析文件%1 + + + + Failed to save file. + 保存文件失败. + + + + iGuiPlotMap + + + iGuiPlotMap + + + + + x + 东西方向 + + + + y + 南北方向 + + + + Well1# + + + + + iGuiPlotMapCmdHelper + + + Well + + + + + iGuiPlotPF + + + Pressure and flow rate curves are not correct. + 压力或流量曲线数据不对. + + + + Flow rate segent bounds are not correct. + 流动段边界不正确. + + + + Pressure index start or end not found. + 压力起始或终止(流动段内)索引未找到. + + + + iGuiPlotPFCmdHelper + + + + Model Result Files (*.mrf) + + + + + Failed to find file +%1 + + + + + Failed to parse file +%1 + + + + + Failed to save file. + + + + + iGuiPlotSeg + + + iGuiPlotSeg + + + + + x + 东西方向 + + + + y + 南北方向 + + + + Well1# + + + + + iGuiPlotTableHelper + + + Failed to save data. + 保存文件失败. + + + + Failed to save data of '%1' + + + + + iJobRun + + + Failed to load ByteArray + + + + + iMpaTrayIcon + + Exit + 退出 + + + + iPseudo3Cal + + + Find no fitting info (%1) + + + + + Fitting info is not OK (%1) + + + + + iPseudoCCal + + + Find no fitting info (%1) + + + + + Fitting info is not OK (%1) + + + + + iSubWnd + + + iSubWnd + + + + + + Failed to load ByteArray + 序列化解析二进制出错 + + + + Failed to parse + + + + + + + Failed to save. + 序列化保存出错. + + + + Properties + 属性 + + + + + Do you want to save your changes? + 保存更改的数据内容? + + + + iSubWndAdvanced + + + iSubWndAdvanced + + + + + iSubWndAnal + + + iSubWndAnal + + + + + SubWnd is null. + + + + + Well not matched, %1 vs %2 + + + + + Failed to get PF data. + 获取压力或流量数据失败. + + + + iSubWndAnalDn + + + iSubWndAnalDn + + + + + Q->P + + + + + P->Q + + + + + Run design + 运行试井设计 + + + + Config time settings + 时间配置 + + + + Save results designed + 保存设计的结果 + + + + Model creating... + 模型算法正在研制中... + + + + Please prepare data and calulate first. + + + + + + Failed to check input Data. + 输入参数校验出错. + + + + Time Rang Error + 时间范围不对 + + + + Failed to check model option. + 模型校验出错. + + + + Failed to check and define algo. + 算法定义和校验出错. + + + + Failed to check parameters. + 解释参数校验出错. + + + + Failed to check Time. + 时间校验出错. + + + + iSubWndAnalEdit + + + iSubWndAnalEdit + + + + + iSubWndAnalLPR + + + iSubWndAnalLPR + + + + + iSubWndAnalSeg + + + iSubWndAnalSeg + + + + + iSubWndBaseFit + + + Make sure to quit current cal processing? + 确定退出当前计算过程? + + + + iSubWndConfig + + + iSubWndConfig + + + + + iSubWndData + + + iSubWndData + + + + + + Find no data records to remove. + 无数据可删除. + + + + Failed to get key info of '%1' + 未能找到表'%1'的主键信息 + + + + Failed to get sql desc to delete data + 删除数据Sql出错 + + + + iSubWndDataOther + + + iSubWndDataOther + + + + + iSubWndDataPF + + + iSubWndDataPF + + + + + Value + 数值 + + + + Graph + 图示 + + + + Well not matched, %1 vs %2 + + + + + Please prepare basic gauge data first. + 请先准备左侧基础数据. + + + + Failed to sum gauge data. + + + + + iSubWndFitting + + + + + TAG1 + 双对数 + + + + + + TAG2 + 半对数 + + + + + + TAG3 + 历史曲线 + + + + + + TAG4 + 历史曲线 {4?} + + + + AutoFit + 自动拟合 + + + + + + T + + + + + + + Sqrt(T) + + + + + + + 0.25T + + + + + + + -0.5T + + + + + + + DenChart + 浓度图 + + + + + + VisChart + 粘度图 + + + + iSubWndFitting + + + + + + Failed to prepare save dblog curves. + 序列化保存失败. + + + + Need to fit model before saving sketch. + 在保存示意图之前需要生成模型. + + + + Parameters do not correspond to + + + + + Microsoft Access File(*.mdb;*.accdb) + + + + + The current well is empty + + + + + The saved table does not exist + + + + + Name + + + + + Value + 数值 + + + + Unit + 单位 + + + + Data exported successfully. + + + + + + DataIn + + + + + Failed to export data. + + + + + + + Failed to check license. + + + + + + + Algo is still running, please wait. + 算法仍在执行,请稍候. + + + + Model creating... + 模型算法正在研制中... + + + + + Time Rang Error. + 时间范围不对. + + + + + Failed to swap abouts. + + + + + Please select model, theoryCurve is null. + 理论曲线为空,请重选. + + + + %1 param not find: %2 + + + + + m_pAlgModel == NULL + 算法模型体为空 + + + + Time Rang Error + 时间范围不对 + + + + Gas not have Viscosity + + + + + Failed to init iWxMixVis + + + + + No need of using Rsq mode. + + + + + Failed to get value of S. + + + + + Failed to get proper info of segment. + + + + + Failed to build alg model. + + + + + iSubWndFree + + + iSubWndFree + + + + + TestPlot + + + + + iSubWndLPR + + + IprFit + IPR拟合图 + + + + IprGraph + IPR曲线图 + + + + iSubWndLPR + + + + + Ipr result + IPR结果 + + + + + + QAOP + 无阻流量 + + + Productivity factor + 采油指数 + + + + + ModelMethods + IPR方法 + + + + + ModelDescs + 表达式 + + + + FitLine + 拟合线 + + + + DeterCoff + 相关系数 + + + Specific productivity factor + 比采油指数 + + + + iSubWndMap + + + iSubWndMap + + + + + Parameters + 解释参数 + + + + iSubWndMiniAnalFrFA + + + iSubWndMiniAnalFrFA + + + + + SubWnd is null. + + + + + iSubWndMiniAnalFrPA + + + iSubWndMiniAnalFrPA + + + + + SubWnd is null. + + + + + iSubWndMiniFrFA + + + IprFit + IPR拟合图 + + + + IprGraph + IPR曲线图 + + + + iSubWndMiniFrFA + + + + + Ipr result + IPR结果 + + + + iSubWndMiniFrPA + + + SuddenStopP + + + + + GFunction + + + + + SqrtT + + + + + LogLog + + + + + iSubWndMiniFrPA + + + + + Failed to check license. + + + + + Algo is still running, please wait. + 算法仍在执行,请稍候. + + + + Algo not supported. + + + + + iSubWndModel + + + iSubWndModel + + + + + iSubWndResCompare + + + iSubWndResCompare + + + + + Result items + 对比选项 + + + + CompareResults + 解释结果 + + + + ChartResults + + + + + + Raw Curves + 原始曲线 + + + + + Theory Curves + 理论曲线 + + + + Failed to prepare save dblog curves. + 序列化保存失败. + + + + iSubWndTool + + + iSubWndTool + + + + + iWxAbout + + + Dialog + + + + + <html><head/><body><p>警告:本计算机程序受著作权法和国际条约保护。</p></body></html> + + + + + 确定 + + + + + 软件授权对象: + + + + + 设计研制单位: + + + + + 硬件信息 + + + + + 软件系统版本: + + + + + 如未经授权而擅自复制或传播本程序(或其中任何部分),将受到严厉的民事 + + + + + 及刑事制裁,并将在法律许可范围内受到最大程度的起诉。 + + + + + 中国石油大学(北京)石工学院 + + + + + Ver.1.0 + + + + + About %1 + 关于%1 + + + Framework: %1 ; MPAModule: %2 + 框架:%1; 模块:%2 + + + + %1 (%2) + + + + + iWxAutoFit + + + Auto fit setting + 自动拟合设置 + + + + AutoFitParamSet + 自动拟合设置 + + + + Particle Swarm + + + + + MaxLoopCount + 迭代次数上限 + + + + MaxError + 误差上限 + + + + Weight + 权重 + + + + MaxSimulations + + + + + MaximumTime + + + + + Discretization + + + + + PopulationSize + + + + + Gauss-Newton + 高斯-牛顿 + + + + Normalized Gauss Newton + 规则化高斯-牛顿 + + + Genetic Algorithm + 遗传算法 + + + + Parameter + 参数 + + + + Minimum + 最小 + + + + Value + 数值 + + + + Maximum + 最大 + + + + Unit + 单位 + + + + + SelectInv + 反选 + + + + Ok + 确定 + + + + Cancel + 取消 + + + + + SelectAll + 全选 + + + + iWxAxisTest + + Properties + 属性 + + + + iWxBase + + + Failed to load ByteArray + 加载ByteArray失败 + + + + Name '%1' already defined which is repeated. + 名称'%1'重复定义. + + + Current well is null. + 当前井为空. + + + + Find no config info of '%1'. + + + + + iWxCalSkin + + + S + + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxCalSkinQ + + + Use Rsq + 启用流量变表皮 + + + + Rsq opened + 启用流量变表皮 + + + + Rsq not open + 当前未启用-流量变表皮 + + + + iWxCharact + + + Charact setting + 特征点设置 + + + + CharactPoint + 特征点 + + + + OK + 确定 + + + + Param + 参数 + + + + Point + + + + + Speci Point + 特征点 + + + + Speci Line + 特征线 + + + + iWxDataAccessLoad + + + Dialog + + + + + Data Source + 数据源 + + + + FilePath: + 文件 + + + + ... + + + + + + GroupBox + 选项 + + + + Run + 加载 + + + + Save + 保存 + + + + Close + 关闭 + + + + MPA data manager from ACCESS file + MPA加载Access数据 + + + + Microsoft Access File(*.mdb;*.accdb) + + + + + Please select the file (MDB) + + + + + iWxDataBasic + + + Reference pressure + 参考压力 + + + + DataBasic + 基础数据 + + + + + Test Type + 测试类型 + + + + + Fluid Type + 流体类型 + + + + Layer Parameters + 储层参数 + + + + Standard + 标准 + + + + + Interference + 干扰 + + + + + MiniFrac + 小型压裂 + + + + Job's Tag + 作业标识 + + + + iWxDataFluid + + + DataFluid + 流体数据 + + + + iWxDataFluidSub + + + Dialog + 气计算 + + + + Parameter options + 参数选项 + + + + Use Advanced calculating methods + 启用高级计算 + + + + Ct=(So*Co+Sg*Cg+Sw*Cw)*Phi+Cf + + + + + 0.5 + + + + + So + + + + + Sg + + + + + Co + + + + + Cg + + + + + Sw + + + + + MPa-1 + + + + + Cw + + + + + Cf + + + + + Phi + + + + + Cal So/Sg + 计算 So/Sg + + + + Cal Co/Cg/Cw + 计算 Co/Cg/Cw + + + + CalResult + 结果刷新 + + + + DataFluidSub + + + + + iWxDataGasConst + + + DataGasConst + PVT数据 + + + + Failed to find xml define of GasConst + + + + + Output description + 结果描述 + + + + iWxDataLoad + + + Dialog + 数据加载 + + + + Data Source + 数据源 + + + + FromDatabase + 数据库 + + + + + ... + + + + + FromFile + 文件 + + + + + Run + 执行 + + + + DateTimeFormat + 时间格式 + + + + Value (FromStart) + + + + + Value (Duration) + + + + + RealTime + + + + + RealDateTime + + + + + RealDate + + + + + yyyy/MM/dd hh:mm:ss + + + + + yyyy/M/d h:m:s + + + + + MM/dd/yyyy hh:mm:ss + + + + + M/d/yyyy h:m:s + + + + + dd/MM/yyyy hh:mm:ss + + + + + d/M/yyyy h:m:s + + + + + yyyy/MM/dd + + + + + MM/dd/yyyy + + + + + dd/MM/yyyy + + + + + hh:mm:ss + + + + + StartTime + 起始时间 + + + + RowFrom + 起始行 + + + + RowTo + 结束行 + + + + RateAccuMode + 数据累积 + + + + StepF + + + + + StepP + + + + + Sheets + + + + + UsingCodec + 转换Codec + + + + Date and time separated + 日期与时间分开 + + + + Src Units + 源数据单位 + + + + 油 + + + + + 气 + + + + + 水 + + + + + Thin data automatically when size is larger than 10000 + 数据量较大时自动抽稀 + + + + AutoThinning + 抽稀 + + + + Well + + + + + GaugeName + + + + + + Apply + 应用 + + + + DataTag + + + + + Save + 保存 + + + + Close + 关闭 + + + + Cancel + 取消 + + + + ----- + + + + + Data Load ... + 加载... + + + + Browse... + 浏览 + + + + Config database + 配置数据库 + + + + OK + 确定 + + + + Not supported file format and try to parse in txt + + + + + The flow value of the adjacent segment is equal, and does it continue? + 流量数据存在相邻项非常接近的情形,继续? + + + + Failed to parse data value of row %1. + + + + + +Data: %1 %2 %3 + + + + + Beginning datetime seems improper, continue? + 起始时间似乎未正确设置,继续? + + + + Datatag name is empty. + + + + + Datatag name already exists. + + + + + Parse error:nCount(%1);nIndexD(%3);nIndexT1(%3) + + + + + Failed to get title index of current. + + + + + Failed to find unit config of '%1' + 未能找到单位'%1'的配置信息 + + + + Whether there is a mistake to continue the data? + 有错误数据是否继续? + + + + Failed to convert current binary data. + + + + + iWxDataObjEdit + + + Please set tablename info first. + 请设置表名信息. + + + + Table '%1' not supported. + 表'%1'不支持. + + + + Edit Object + + + + + New Object + + + + + Object info to be create or modify: + 待创建或修改的对象数据信息: + + + + + + Failed to config field UI of '%1' + 配置'%1'UI信息失败. + + + + Save + 保存 + + + + Cancel + 取消 + + + + Key information must be filled. + 关键字段信息不能为空. + + + + Empty wellname or same wellname already exists. + 井名为空或井名已存在. + + + + Failed to save object data of '%1' + 保存'%1'数据失败 + + + + iWxDataObjEditPF + + + CurrentWell + 当前井 + + + + Options + 选项 + + + + iWxIprRunOption + + Ipr Run Option + IPR选项 + + + IprBasic + 基础信息 + + + IprOption: + 名称 + + + IprData + IPR数据 + + + PressureIPR + 井底压力 + + + FlowRateIPR + 产量 + + + OnePointResults + 一点法结果 + + + Alg Method + 算法选择 + + + Equation: + 方程式 + + + + iWxJobRunManager + + + Job Run Manager + Job管理 + + + + All Job Infos + Job信息 + + + + Show extent info for selected job + 显示详细数据信息 + + + + Show by tab mode + Tab模式显示 + + + + Current selected job info + 当前选中的Job数据信息 + + + + DataBasic + 基础数据 + + + + DataFluid + 流体数据 + + + + DataGasConst + PVT数据 + + + + New + 新建 + + + + Save + 保存 + + + + Del + 删除 + + + + Set current job as default + 把选中的Job设为默认Job. + + + + Default + 默认 + + + + OK + 确定 + + + + Cancel + 取消 + + + + Exit + 退出 + + + + DataJobRun of '%1' is null + + + + + Make sure to default current job? + 把当前Job设为默认? + + + + Make sure to delete current info? + 确定删除所选数据? + + + + iWxJobRunOption + + Fluid Segment Settiing + 流动段相关设置 + + + Segment Base + 流动段基础信息 + + + Name + 名称 + + + Type + 类型 + + + 压恢 + 压恢 + + + Segment Info + 流动段数据 + + + Segment + 流量索引 + + + SegmentPrev + 前一流量 + + + PressureIndex + 压力索引 + + + PressureValue + 压力数值 + + + Chart + 曲线图示 + + + Smoothing && thinning + 光滑 + + + Smoothing + 启用光滑 + + + SmoothFactor + 光滑因子 + + + Thinning + 启用抽稀 + + + ThinLoop + 抽稀因数 + + + WndOption + 窗口选项 + + + Wnd to apply + 应用于 + + + Create if not exists + 不存在则创建 + + + GroupBox + Job选项 + + + JobType: + 模型类型 + + + Set as current JobRun + 设为当前Job + + + MpData + 多相产量 + + + Apply + 应用 + + + OK + 确定 + + + Cancel + 取消 + + + Code + Job编码 + + + TestType + 测试类型 + + + FluidType + 流体 + + + WellRadus + 井径 + + + Remark + 备注 + + + Find no multiphase data, continue? + 多相产量数据不全,继续进行? + + + Same name already exists. + 名称已经存在. + + + Multiphase data needed, prepare for it now? + 需要多相产量数据,现在准备? + + + + iWxJobSave + + + Save job informations + 作业保存 + + + + Job options + 作业选项 + + + + Job headers + 名称后缀 + + + + If exists, add _1,_2,_3... automatically, else over write. + 如存在,则自动添加_1,_2,_3,否则覆盖之 + + + + Save + 保存 + + + + Cancel + 取消 + + + + Title is empty of '%1' + 标题 '%1'为空 + + + + NewTitle + + + + + iWxLogin + + + Dialog + + + + + 用 户 名 + + + + + 密 码 + + + + + 保存信息 + + + + + 说明:本功能只是Demo,具体需要根据甲方调整 + + + + + 测试连接 + + + + + 登录 + + + + + 取消 + + + + + %1 Login + + + + + Not valid user info. + + + + + User '%1' has no right of module '%2'. + + + + + iWxMapWellInfo + + + Well information + + + + + WellInfo + + + + + Basic info + + + + + WellName + + + + + Well 1# + + + + + Set as central well + + + + + WellType + + + + + Vertical Well + + + + + Fractrured Well + + + + + Horizontal Well + + + + + Fractured Horizontal Well + + + + + Position + + + + + By XY + + + + + By Distance + + + + + X (m) + + + + + Y (m) + + + + + Dis (m) + + + + + θ (°) + + + + + Parameters + 解释参数 + + + + Fluid + + + + + Pressure + 压力 + + + + Help + 帮助 + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxMiniFrac + + + P&F Selected Points Preview + + + + + ISIP + + + + + SqrtT + + + + + LogLog + + + + + GFunction + + + + + HornorL + + + + + HornorR + + + + + StepRateUp + + + + + StepRateDown + + + + + Chart + 曲线图示 + + + + Run + + + + + OK + 确定 + + + + iWxMixVis + + + Dialog + 混合粘度计算 + + + + Viscosity + 粘度 + + + + OilVis: + 油粘度: + + + + + + TextLabel + + + + + WaterVis: + 水粘度: + + + + ViscosityRatio + 含水率 + + + + Oil + + + + + Water + + + + + WaterRatio: + 含水率: + + + + + MixVis + 混合粘度 + + + + MixVis: + 混合粘度: + + + + IsEnableMixVis + 启用混合粘度 + + + + Run + 计算 + + + + Save + 保存 + + + + Close + 关闭 + + + + iWxModelOption + + + + + + + + Yes + + + + %1 option + %1 + + + use %1 + %1 + + + + Option '%1' not supported. + 选项'%1'不支持. + + + + Dialog + 模型选项 + + + + UseOrNot options + 启用选项 + + + + use PressGrad + 启动压力梯度 + + + + use SmallSignal + 小信号 + + + + Wbs Option + 井储 + + + + Wel Option + 井型 + + + + Res Option + 油藏 + + + + Use Recents + 启用最近 + + + + Maxs + 个数最多 + + + + Bdy Option + 边界 + + + + Open and choose special model(s) + + + + + More. + ... + + + Recent model groups + 最近选用 + + + + 无井储+直井[bj]+均质油藏+无限大 + + + + + 定井储+直井[bj]+均质油藏+无限大 + + + + + 变井储(Fair)+直井——部分射开[bj]+均质油藏+交叉边界 + + + + + iWxModelParameter + + Failed to find config of '%1' + 未能找到'%1'的配置信息 + + + + Failed to find config o '%1' + + + + + TODO: Error to read type of '%1' here + 序列化读取类型'%1'出错 + + + + iWxModelParameterEx + + + Name + 井号 + + + + Type + 井型 + + + + iWxModelScan + + + Dialog + 模型查看 + + + + UseOrNot options + 启用选项 + + + + use PressGrad + 启动压力梯度 + + + + use DynamicK + 动态渗透率 + + + + use SmallSignal + 小信号 + + + + Wbs Option + 井储模型 + + + + Wel Option + 井型 + + + + Res Option + 油藏模型 + + + + Bdy Option + 边界模型 + + + + Model Sketch Chart + 模型示意图 + + + + Wbs + 井储 + + + + Wel + 井型 + + + + Res + 油藏 + + + + Bdy + 边界 + + + + Theory Sketch Chart + 模型示意图 + + + + GroupBox + Job选项 + + + + Apply To + 应用于 + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + + Option '%1' not supported. + 选项'%1'不支持. + + + + iWxModelSketch + + + SketchChart + 模型示意图 + + + + WBS + 井储模型 + + + + WEL + 井型 + + + + RES + 油藏模型 + + + + BDY + 边界模型 + + + + iWxMpInfo + + + Multiphase data + + + + + Datatable + + + + + Set As Default + + + + + LoadDefault + + + + + OK + 确定 + + + + Cancel + 取消 + + + + Find no default multiphase data. + + + + + Multiphase data not match, %1 lines needed but %2 loadded. + + + + + + Improper multiphase data. + + + + + Failed to set as default. + + + + + iWxOptionResCompare + + + Name + Job名称 + + + + Type + 升降 + + + + SegmentInfo + 流动段 + + + + States + 状态 + + + + Codes + 编码 + + + + Series + + + + + At least two infos selected. + 至少需要选择两种成果. + + + + No contents selected. + 没有选择内容. + + + + Same name already exists. + 名称已经存在. + + + + Results comparing option + + + + + 井及井次成果 + + + + + 井名 + + + + + 流动段 + + + + + + + 全部 + + + + + 压恢压降 + + + + + 压恢 + 压恢 + + + + 压降 + + + + + 模型系列 + + + + + 考虑当前井已保存但未加载的成果 + + + + + 全选 + + + + + 刷新 + + + + + T + + + + + U + + + + + D + + + + + B + + + + + 辅助信息 + + + + + 应用于 + + + + + 不存在则创建 + + + + + 分析人 + + + + + 分析日期 + + + + + 对比内容 + + + + + 关键对比内容(*) + + + + + 双对数(原始) + + + + + 双对数(拟合) + + + + + 解释模型 + + + + + 解释结果 + + + + + 其它对比内容 + + + + + 半对数曲线 + + + + + 历史曲线 + + + + + 压力数据 + + + + + 流量数据 + + + + + 井数据 + + + + + 流体数据 + + + + + 储层数据 + + + + + 加载默认 + + + + + 存为默认 + + + + + 实时刷新 + + + + + 单一视图模式 + + + + + 应用 + + + + + 确定 + + + + + 退出 + + + + + iWxOptionSmooth + + + P&F Data Edit By Smoothing + + + + + Options + 选项 + + + + Smoothing Method + + + + + Smooth method 1 + + + + + Smooth method 2 + + + + + Smooth method 3 + + + + + Smoothing Factor + + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxOptionThinning + + + P&F Data Edit By Thinning + + + + + Options + 选项 + + + + Thinning Methods + + + + + Thinning method 1 + + + + + Thinning method 2 + + + + + Thinning method 3 + + + + + Thinning Loop + + + + + Thinning continually + + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxPlateFit + + + Plate fit setting + 图版拟合设置 + + + + PlateFitParamSet + 图版拟合设置 + + + + ParamSet + 参数设置 + + + + Step + 步长 + + + + Num + 步数 + + + + Ok + 确定 + + + + Cancel + 取消 + + + + + SelectInv + 反选 + + + + + SelectAll + 全选 + + + + iWxPointSelPreview + + + P&F Selected Points Preview + + + + + Consider all selected point(s) + + + + + Linear + 线性拟合 + + + + DoubleLogChart + + + + + HalfLogChart + + + + + Chart + 曲线图示 + + + + OK + 确定 + + + + iWxPre + + + + + Next>> + 下一步>> + + + + Save + 保存入库 + + + + Cancel + 取消 + + + + <<Back + <<上一步 + + + + Failed to cal pressure + + + + + Failed to save file. + 保存文件失败 + + + + Failed to find file +%1 + 没有找到文件 + + + + iWxPreCon + + + Dialog + + + + + Options + 选项 + + + + Well + + + + + + + 0000 + + + + + P(s) + 压力 + + + + 0 + + + + + F(s) + 流量 + + + + Pressure + 压力 + + + + FluidRate + 流量 + + + + Pt(s) + 点数 + + + + Seg(s) + 段数 + + + + EnableCloseWellDynamicSurface + 启用关井动液面数据 + + + + Refresh + 刷新 + + + + Data + 数据 + + + + Plot + 图示 + + + + + Time + 时间 + + + + WellHeadPressure + 井口压力 + + + + BottomHolePressure + 井底压力 + + + + DurationTime + 持续时长 + + + + Flow + 流量 + + + + DynSurfaceH + 动液面 + + + + iWxPreInput + + + Dialog + + + + + InputMode + 注入方式 + + + + AnnulusInput + 环空注入 + + + + TubingInput + 油管注入 + + + + ColumnParameter + 管柱参数 + + + + TotalLenght: + 管柱总长度: + + + + + + + + + + (m) + + + + + FluidParameter + 流体参数 + + + + FluidDensity: + 流体密度: + + + + (kg/m^3) + + + + + ConsisCoeffi: + 稠度系数: + + + + (Pa·s^n) + + + + + LiquidiIndex: + 流变指数: + + + + WellParameter + 井眼参数 + + + + WHTubOutDiam: + 井口油管外径: + + + + WHCasInDiam: + 井口套管内径: + + + + WBTubOutDiam: + 井底油管外径: + + + + WBCasInDiam: + 井底套管内径: + + + + WHInDiam: + 井口内径: + + + + WBInDiam: + 井底内径: + + + + ColumnCompanded + 变径结构 + + + + EnbleContractionStructure + 启用突缩结构 + + + + EnbleExpansionStructure + 启用突扩结构 + + + + ColumnStructure + 管柱结构 + + + + DepthStart + 起始深度 + + + + DepthEnd + 终止深度 + + + + TubODiam + 油管外径 + + + + CasIDiam + 套管内径 + + + + InnerDiam + 油管内径 + + + + BeforConTubODiam + 突缩前油管外径 + + + + BeforConCasIDiam + 突缩前套管内径 + + + + BehinConTubODiam + 突缩后油管外径 + + + + BehinConCasIDiam + 突缩后套管内径 + + + + + ConNum + 数量 + + + + BeforConODiam + 突缩前油管内径 + + + + BehinConIDiame + 突缩后油管内径 + + + + BeforExpTubODiam + 突扩前油管外径 + + + + BeforExpCasIDiam + 突扩前套管内径 + + + + BehinExpTubODiam + 突扩后油管外径 + + + + BehinExpCasIDiam + 突扩后套管内径 + + + + + ExpNum + 数量 + + + + BeforExpODiam + 突扩前油管内径 + + + + BehinExpIDiame + 突扩后油管内径 + + + + iWxPressError + + + Dialog + + + + + TreatMode + 处理方式 + + + + Ignore new data + 忽略新数据 + + + + Ignore old data + 忽略旧数据 + + + + Jump 24 hours + 增加24小时 + + + + TimeOverlap + 时间重叠 + + + + iWxPrintOption + + + Report options + 报告选项 + + + + 报告分析对象 + + + + + 井1 + + + + + 井2 + + + + + 时间1 + + + + + 时间2 + + + + + 时间3 + + + + + 报告基础信息 + + + + + 显示报告基础信息 + + + + + 压力计测试深度 + + + + + 测试类型 + + + + + 井名 + + + + + 分析日期 + + + + + 报告标题 + + + + + 测试时间 + + + + + 分析人 + + + + + 基础数据 + + + + + 井数据 + + + + + 流体数据 + + + + + 储层数据 + + + + + 图形数据 + + + + + 双对数 + + + + + 半对数 + + + + + 历史曲线 + + + + + 解释模型 + + + + + 解释结果 + + + + + 压力流量数据 + + + + + 压力数据(*) + + + + + 流量数据(*) + + + + + 先后顺序控制 + + + + + U + + + + + D + + + + + x + 东西方向 + + + + 由于显示顺序与真实的情况存 +在逻辑冲突的问题,故此处暂 +未使用,待后续处理。 + + + + + 预览 + + + + + 打印(含PDF) + + + + + 导出(Word) + + + + + 确定 + + + + + 加载默认 + + + + + 存为默认 + + + + + 其它选项 + + + + + 退出 + + + + + + Report of Well + 处理解释报告 + + + + TestPrev + 测前 + + + + TestMid + 测中 + + + + TestPost + 测后 + + + + Failed to find file +%1 + 未能找到文件:\r\n%1 + + + + Failed to save file. + 保存文件失败. + + + + + ID + + + + + This is test + + + + + + Failed to load file: +%1 + + + + + + TAG1 + 双对数 + + + + + TAG2 + 半对数 + + + + + TAG3 + 历史曲线 + + + + Word exported successfully. +Open it or not? + word成功导出. + + + + OpenDir + 打开所在目录 + + + + Close + 关闭 + + + + TODO: this is header of page + + + + + TODO: this is footer of page + + + + + Too much pressure data, continue with simple mode? + 压力数据过多,将只导出部分数据以示意,继续吗? + + + + Report Of Well %1.docx + %1处理解释报告.docx + + + + iWxPrintOthers + + + Dialog + + + + + 页眉 + + + + + 报告名称: + + + + + + 显示 + + + + + 图标 + + + + + MPA + + + + + 从本地 + + + + + 加载 + + + + + + + + + 字体设置 + + + + + 页脚 + + + + + 显示页码 + + + + + 显示页脚内容 + + + + + 设置字体 + + + + + 页边距 + + + + + 上: + + + + + 下: + + + + + 左: + + + + + 右: + + + + + 正文字体设置 + + + + + 正文 + + + + + 图名 + + + + + 图例 + + + + + 坐标轴 + + + + + 取消 + + + + + 确定 + + + + + 打印机 + + + + + iWxProjMore + + + All projects of current directory + + + + + Dir + + + + + Projects + + + + + 确定 + + + + + 取消 + + + + + iWxProjectMigrate + + + MPA项目迁移 + 项目数据迁移 + + + + 源项目 + + + + + + 存储类型 + + + + + + 数据库 + + + + + + IP/Port + + + + + + 1521 + + + + + + 用户/密码 + + + + + + 存储路径 + + + + + + ... + + + + + + 项目 + + + + + + Sqlite Database + + + + + + Oracle Database + + + + + 目标项目 + + + + + 按井名 + + + + + 常规数据(按井) + + + + + 按表名 + + + + + 常规数据(按表) + + + + + 辅助数据 + + + + + 刷新 + + + + + Swap source and target + + + + + 左右切换 + + + + + 数据选项 + + + + + 选择是否迁移配置信息 + + + + + 迁移配置 + + + + + 引用源工区配置 + + + + + 从源项目迁移 + + + + + 引用系统配置 + + + + + 从MPA系统迁移 + 从软件默认系统迁移 + + + + Current Table: + + + + + 迁移 + + + + + 关闭 + + + + + All + + + + + + project directory + + + + + Failed to get wellName. +%1 + + + + + nothing to migrate. + 无可迁移数据. + + + + Make sure to migrate or overide records? + 确定迁移(或覆盖)数据? + + + + Source database is not opened successfully. + 源项目数据库打开失败. + + + + Target database is not opened successfully. + 目标项目数据库打开失败. + + + + Table: %1 + + + + + Error with '%1': +%2 + + + + + Failed to copy Config File to Target Project. + 迁移配置文件到目标项目失败. + + + + Migration finished. + 项目迁移完成. + + + + Failed to get table info of '%1'. + + + + + + '%1' + + + + + Failed to query by +%1 + + + + + Failed to write data to %1 + + + + + iWxProjectNew + + + 新建工区 + + + + + 创建时间: + + + + + + ... + + + + + 修改时间: + + + + + 项目数据类型: + + + + + 油田名称: + + + + + Sqlite Database + + + + + 项目名称: + + + + + 项目路径: + + + + + 项目另存为路径: + + + + + 数据版本号: + + + + + 1.0.0 + + + + + 项目描述: + + + + + DM + + + + + Oracle + + + + + 创建人: + + + + + 修改人: + + + + + 确定 + + + + + 取消 + + + + + New Project + 新建项目 + + + + Project Sketch + 项目信息 + + + + Project Save As + 项目另存为... + + + + Copy_of_ + + + + + iWxProjectOpen + + + Open Project + 打开项目 + + + Current Model Series : + 当前模型类别: + + + + 项目路径: + + + + + 重设工作路径 + + + + + 浏览... + + + + + 新建项目 + + + + + 新建(&N) + + + + + 打开(O) + + + + + 删除项目 + + + + + 删除(&D) + + + + + 概要(S) + + + + + 项目迁移(M) + + + + + + + + 刷新 + + + + + 刷新(&R) + + + + + 最近打开的目录... + + + + + 最近打开项目... + + + + + Update lists + + + + + 最近更新... + + + + + 该功能自动将项目配置文件替换为系统配置文件. + + + + + 更新系统配置 + + + + + OpenProject + 打开项目 + + + + Make sure to delete selected project? + 确定删除所选项目? + + + + (%1) %2 [%3] + + + + + There is no project selected. + 未选中项目. + + + + iWxPseudo3Sub + + + Dialog + 三区拟压力 + + + + CalPseu3 + 计算三区拟压力 + + + + Whole + 全段拟合 + + + + Auto fitting + 自动拟合 + + + + RunFit + 拟合 + + + + _fit + + + + + iWxPseudo3SubFit + + + Exponential + 指数拟合 + + + + Linear + 线性拟合 + + + + Logarithmic + 对数拟合 + + + + Polynomial + 一元多次方程式 + + + + Power + 乘幂拟合 + + + + iWxPseudoCSub + + + Dialog + + + + + CalPseu3 + 计算三区拟压力 + + + + Whole + 全段拟合 + + + + Auto fitting + 自动拟合 + + + + RunFit + 拟合 + + + + Critical flow pressure + + + + + MPa + + + + + Krg Swi + + + + + _fit + + + + + iWxPseudoCSubFit + + + Exponential + 指数拟合 + + + + Linear + 线性拟合 + + + + Logarithmic + 对数拟合 + + + + Polynomial + 一元多次方程式 + + + + Power + 乘幂拟合 + + + + iWxPseudoCSubInput + + + Dialog + + + + + Input parameters + + + + + Bottom hole pressure + + + + + Dew point pressure + + + + + P.Min + + + + + P.Max + + + + + Temperature + + + + + Composition + + + + + Run + + + + + Please config compositions first. + + + + + Failed to cal by phase Equilibrium. + + + + + iWxPseudoCSubPseu + + + Not fitted: %1 + + + + + iWxPseudoCSubSo + + + Pressure vs So + + + + + iWxPvtComposition + + + DataGasConst + PVT数据 + + + + Failed to find xml define of GasConst + + + + + Output description + 结果描述 + + + + iWxPvtMain + + + Help + 帮助 + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxPvtMatch + + + Matching data + 拟合数据 + + + + Edit data + 编辑数据点 + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + Error data for matching. + 数据不正确,请重新输入. + + + + iWxPvtSeg + + Parameters + 解释参数 + + + Cancel + 取消 + + + OK + 确定 + + + + iWxPvtSubHeader + + + Dialog + + + + + Fluid type + 流体类型 + + + + Saturated Oil (bubble point fluid) + 饱和油(泡点) + + + + Dead oil + 死油 + + + + Dry gas + 干气 + + + + Condensate (dew point fluid) + 凝析气(露点) + + + + From PVT report + + + + + Reservoir option + 基本参数 + + + + Res temperature + 参考温度 + + + + Res pressure + 参考压力 + + + + Gas-Oil Ratio (GOR) + 气油比 + + + + Pressure&Temperature scale + 压力温度范围 + + + + P.Max + 最大压力 + + + + P.Min + 最小压力 + + + + # pts + 点数 + + + + Value + 数值 + + + + Increment + 区间类型 + + + + Data scale is not OK. + + + + + Data increment is not OK. + + + + + Increment value is not OK. + + + + + Increment count is not OK. + + + + + iWxPvtSubPhase + + + + + MainOptions + + + + + there are same configs of '%1' + + + + + Failed to find algo '%1' + + + + + iWxPvtUtilItem + + + Temp + 温度 + + + + Value + 数值 + + + + TODO:This is some desc of the above + + + + + + Size not match. Input:%1 Output:%2 + + + + + GP/G Ratio + + + + + Edit + 校正点 + + + + Match + 校正 + + + + Use Ppc as new + 应用 + + + + Error data for matching. + 数据不正确,请重新输入. + + + + Ppc(Mpa) Raw:%1 + Pc(MPa)校正前:%1 + + + + ; Adjusted:%1 + ;校正后:%1 + + + + Ppc(Mpa) %1-->%2 + Pc(Mpa) %1-->%2 + + + + Use adjusted Ppc (%1) in the following + 后续处理应用校正后Pc(%1) + + + + iWxPvtUtilItemPseudo + + + P + + + + + m(P) + + + + + PressureScales + + + + + PressureSteps + + + + + Refresh + 刷新 + + + + Data count not matched. + + + + + Found no '%1' data. + + + + + Zg or Miug count not match. + + + + + iWxPvtUtilItemPseudo3 + + + Not fitted: %1 + + + + + iWxPvtUtilItemPseudo3Sub + + Dialog + 三区拟压力 + + + Auto fitting + 自动拟合 + + + Refresh + 刷新 + + + Exponential + 指数拟合 + + + Linear + 线性拟合 + + + Logarithmic + 对数拟合 + + + Polynomial + 一元多次方程式 + + + Power + 乘幂拟合 + + + + iWxPvtUtilItemPseudoC + + + Failed to find proper pressure data + + + + + Failed to find proper split index of pressure data. + + + + + Failed to find alg fitting of %1 + + + + + Not fitted: %1 + + + + + iWxPvtUtilOptionG + + + Dialog + + + + + Gravity + 相对密度 + + + + 0.7 + + + + + Critical properties + 临界性质 + + + + Tc + 临界温度 + + + + Pc + 临界压力 + + + + Standing + + + + + Carr et al. + + + + + Sutton + + + + + From composition + 组分 + + + + Non-hydrocarbons + 非烃类 + + + + H2S + + + + + CO2 + + + + + N2 + + + + + mole fraction + 分子量(faction) + + + + mole % + 分子量(%) + + + + Composition + 组分定义 + + + + Method options + 方法 + + + + Car-Kobayshi-Burrows + + + + + High CO2 Adjustment + + + + + Wichert-Aziz + + + + + Input ratio value(s) not OK. + + + + + iWxPvtUtilOptionO + + + Dialog + + + + + Gravity + 重度 + + + + Method options + 方法 + + + + V-B Setting + + + + + Vasquez Beggs settings + + + + + iWxPvtUtilOptionW + + + Dialog + + + + + + Gravity + 重度 + + + + 1.00782 + + + + + Salinity + 盐度 + + + + 30000 + + + + + mg/L + + + + + Impose water gravity or calculate water gravity from the water salinity + + + + + Method options + 方法 + + + + iWxPvtVasBeg + + + Vasquez and Beggs setting + + + + + Use Separator Settings + + + + + Parameters + 解释参数 + + + + Tsep + + + + + 60 + + + + + F + + + + + Psep + + + + + 0.791 + + + + + MPa + + + + + Cancel + 取消 + + + + OK + 确定 + + + + iWxRateInsert + + + Rate Data Edit + 流量数据编辑 + + + + Options + 选项 + + + + TimeSeparatedAt + 时间分割点 + + + + + + + TextLabel + + + + + TimeFrom + 开始时间 + + + + TimeTo + 结束时间 + + + + Last Rate + 前一流量 + + + + New Rate + 新流量 + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxResCpOption + + + Result compare selections + 成果对比筛选项 + + + + 当前井: + + + + + w + + + + + 自动刷新 + + + + + 刷新 + + + + + 全选 + + + + + Lood all results of current well + 列举当前井所有成果 + + + + 加载所有 + + + + + iWxResult + + + Dialog + + + + + Simple + 基本 + + + + All + 详细 + + + + Temp + 临时 + + + + Help + 帮助 + + + + Print + 打印 + + + + OK + 确定 + + + + Result + 解释结果 + + + + + Print current results + 打印当前 + + + + + Jobs: %1 + 作业: %1 + + + + + Date: %1 + 日期: %1 + + + + + + + Name + 名称 + + + + + + Value + 数值 + + + + + Unit + 单位 + + + + iWxResultParaFit + + + Result parameter's fitting + 解释成果参数拟合分析 + + + + Parameter && Fitting options + 参数及拟合方法选择 + + + + Parameter data show + 解释结果数据显示 + + + + Chart View + 图示 + + + + 即时刷新结果 + + + + + Run + 运行 + + + + CopyImage + 复制图片 + + + + SaveImage + 保存图片 + + + + SaveGraph + 保存分析成果 + + + + LoadGraph + 加载分析成果 + + + + Close + 关闭 + + + + Para + 参数 + + + + FitType + 拟合方法 + + + + FitOrder + + + + + FitExpr + 表达式 + + + + Exponential + 指数拟合 + + + + Linear + 线性拟合 + + + + Logarithmic + 对数拟合 + + + + Polynomial + 一元多次方程式 + + + + Power + 乘幂拟合 + + + + RstName + 名称 + + + + xAxisNew + x轴新名 + + + + Rst Infos + Rst名称 + + + + Para Results + 参数数值 + + + + RstID + Rst名称 + + + + xValueNew + x轴新名 + + + + + Rst Fitting Files (*.rff) + + + + + Failed to save file. + + + + + Failed to find file +%1 + + + + + _fit + + + + + iWxRunOption + + + Name + 名称 + + + + Code + Job编码 + + + + TestType + 测试类型 + + + + FluidType + 流体 + + + + WellRadus + 井径 + + + + Remark + 备注 + + + + + + MiniFrac + 小型压裂 + + + + + Please select a JobRun first + + + + + Same name already exists. + 名称已经存在. + + + + iWxRunOptionIPR + + + Fluid Segment Settiing + 流动段相关设置 + + + + + Alg Method + 算法选择 + + + + IprBasic + 基础信息 + + + + + IprData + IPR数据 + + + + One Point Rs + 一点法结果 + + + + Chart + 曲线图示 + + + + GroupBox + Job选项 + + + + JobType: + 模型类型 + + + + Set as current JobRun + 设为当前Job + + + + Wnd to apply + 应用于 + + + + Create if not exists + 不存在则创建 + + + + MpData + 多相产量 + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + Ipr Run Option + IPR选项 + + + + OnePointResults + 一点法结果 + + + + Equation: + 方程式 + + + + FlowRateIPR + 产量 + + + + Data not proper or enough + + + + + iWxRunOptionMiniFrFA + + + MiniFr Segment Setting + 小型压裂段设置 + + + + MiniFrBasic + 基础信息 + + + + MiniFrData + 数据 + + + + iWxRunOptionMiniFrPA + + + MiniFr Segment Setting + 小型压裂段设置 + + + + MiniFr + + + + + iWxRunOptionStd + + + Fluid Segment Settiing + 流动段相关设置 + + + + Segment Base + 流动段基础信息 + + + + Name + 名称 + + + + Type + 类型 + + + + 压恢 + 压恢 + + + + 压降 + + + + + Smoothing && thinning + 光滑/抽稀 + + + + Smoothing + 启用光滑 + + + + SmoothFactor + 光滑因子 + + + + ThinLoop + 抽稀因数 + + + + Thinning + 启用抽稀 + + + + Chart + 曲线图示 + + + + GroupBox + Job选项 + + + + JobType: + 模型类型 + + + + Set as current JobRun + 设为当前Job + + + + Wnd to apply + 应用于 + + + + Create if not exists + 不存在则创建 + + + + MpData + 多相产量 + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + Thinning factor used in Douglas-Peukcer algorithm + + + + + Find no multiphase data, continue? + 多相产量数据不全,继续进行? + + + + Multiphase data needed, prepare for it now? + 需要多相产量数据,现在准备? + + + + iWxSaveDnPF + + + Save design P&F results + 保存试井设计结果 + + + + Options + 选项 + + + + Well + + + + + + + 0000 + + + + + P(s) + 压力 + + + + 0 + + + + + F(s) + 流量 + + + + Pressure + 压力 + + + + FluidRate + 流量 + + + + Pt(s) + 点数 + + + + Seg(s) + 段数 + + + + SaveP + 保存压力 + + + + SaveF + 保存流量 + + + + Save current selection as default + 存为默认 + + + + Save + 保存 + + + + Cancel + 取消 + + + + New one object + + + + + + Failed to save data (%1). + + + + + Override current data? + 覆盖已有数据? + + + + iWxSegLineLayout + + + Equal Spaced Layout Set + + + + + Well Seg Info + + + + + Well DepthStart: + + + + + Well DepthEnd: + + + + + Seg Num: + + + + + Equal Segmentation Method + + + + + + Fix Seg StartDepth + + + + + + Fix Seg EndDepth + + + + + + Fix Seg Depth + + + + + Seg StartDepth: + + + + + Seg EndDepth: + + + + + Equal Space: + + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxSegLineWholeSet + + + Multi Segment Set + + + + + Well Seg Info + + + + + Well DepthStart: + + + + + Well DepthEnd: + + + + + Mulit Seg Select + + + + + SelectAll + 全选 + + + + Invert + + + + + Depth Set + + + + + Depth Offset: + + + + + Lenght Set + + + + + + + + Add Up + + + + + + + + Reset + + + + + Angle Set + + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxSegMore + + + SegMore Set + + + + + OK + 确定 + + + + Cancel + 取消 + + + + Param + 参数 + + + + + Seg%1 + + + + + Properties + 属性 + + + + iWxSketchSaveAs + + + Save as sketch graph + 存为模型示意图 + + + + Model options used by design + 模型选项 + + + + Save to others freely + 任意选定模型 + + + + WBS + 井储模型 + + + + WEL + 井型 + + + + RES + 油藏模型 + + + + BDY + 边界模型 + + + + Save to + 存至 + + + + Current project + 当前项目 + + + + MPA system + 系统默认 + + + + Customer file + 用户自定义 + + + + Sketch preview + 示意图预览 + + + + ChangeImg + 调整图片 + + + + Save + 保存 + + + + Close + 关闭 + + + + Option '%1' not supported. + 选项'%1'不支持. + + + + Chart + 曲线图示 + + + + Image file (*.png;*.jpg;*.bmp) + + + + + Browse sketch file + 浏览 + + + + no sketch image found. + 未能找到示意图图片文件. + + + + PNG file(*.png);;JPG file(*.jpg);;TIFF file(*.tiff);;BMP file(*.bmp);;SVG file(*.svg) + + + + + Save as sketch + 示意图另存为 + + + + iWxSwapPF + + + Choose and change current P&F data + + + + + Options + 选项 + + + + Well + + + + + + + 0000 + + + + + P(s) + 压力 + + + + 0 + + + + + F(s) + 流量 + + + + Pressure + 压力 + + + + FluidRate + 流量 + + + + Pt(s) + 点数 + + + + Seg(s) + 段数 + + + + Save current selection as default + 存为默认 + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxTabShareOption + + + New sub wnd by instant way + 快速复制窗体 + + + + Title + 标题 + + + + + 流动段分析 + + + + + Types + 类型 + + + + 流动段选择 + + + + + Copy from one of the followings + 从如下窗体复制 + + + + Help + 帮助 + + + + Apply + 应用 + + + + OK + 确定 + + + + Cancel + 取消 + + + + iWxTableMF + + + DateTime + 日期时间 + + + + Value + 数值 + + + + iWxTableViewTest + + OK + 确定 + + + Cancel + 取消 + + + + iWxTest + + Types + 类型 + + + OK + 确定 + + + Close + 关闭 + + + + iWxTime + + + Time about settings + 时间设定 + + + + Start of simulation: + 模拟起始: + + + + End of simulation: + 模拟终止: + + + + TimeSet + 时间设置 + + + + Min time step: + 最小时间步长: + + + + Max time step: + 最大时间步长: + + + + UnitSet + 单位设置 + + + + Automatic + 自动获取 + + + + Unit: + 单位: + + + + iWxUpdateLists + + + WTAI Update Lists + + + + + 软件更新列表 + + + + + 硬件信息 + + + + + 确定 + + + + + iWxWelcome + + + Open Project + 打开项目 + + + + 新建项目 + + + + + 新建(&N) + + + + + ... + + + + + + + + 刷新 + + + + + 刷新(&R) + + + + + 项目路径: + + + + + 重设工作路径 + + + + + 浏览... + + + + + SortBy + + + + + TimeInc + + + + + TimeDesc + + + + + NameInc + + + + + NameDesc + + + + + MaxRC + + + + + Row + + + + + Col + + + + + 最近打开项目... + + + + + 最近打开的目录... + + + + + 最近文件/图件个数 + + + + + 更新系统配置 + + + + + WTAI Welcome + + + + + Make sure to delete selected project? + 确定删除所选项目? + + + + '%1' owns %2 well(s) and all will be removed if continue, + + + + + + + This project is deleted or destroyed, +remove this name from recent directory lists? + + + + + No WTAI projects in this directory, +remove this name from recent directory lists? + + + + + This project seems to be invalid. + + + + + WTAI project files (*.wtf) + + + + + Browse all projects + + + + + More... + + + + + Delete + + + + + (%1) %2 [%3] + + + + + iWxWellNew + + + 新建井 + + + + + 油田名称: + + + + + 井名(*): + + + + + 修改人: + + + + + 创建人: + + + + + 创建时间: + + + + + 修改时间: + + + + + 井半径: + + + + + m + + + + + 井别: + + + + + 井型: + + + + + 井口坐标X: + + + + + 辅助说明: + + + + + 区块名称: + + + + + <html><head/><body><p><span style=" color:#8f8f8f;">井号(*):</span></p></body></html> + + + + + 井口坐标Y: + + + + + 确定 + + + + + 取消 + + + + + New Well + + + + + Edit Well + + + + + iWxWizard + + + Help + 帮助 + + + + LoadFromFile + 从文件加载 + + + + SaveToFile + 存为文件 + + + + <<Back + <<上一步 + + + + + Next>> + 下一步>> + + + + Cancel + 取消 + + + + OK + 确定 + + + + Job Wizard Steps (%1/%2): %3 + Job创建向导 (%1/%2): %3 + + + + Failed to find file +%1 + + + + + Failed to save file. + 保存文件失败. + + + + mProjectFile + + + Failed to save file: +%1 + + + + + Failed to find file: +%1 + + + + + Failed to load file: +%1 + + + + + test + + + Dialog + + + + + + PushButton + + + + + wxTestBase + + Results + 成果 + + + Cancel + 取消 + + + + wxTestThread + + GroupBox + Job选项 + + + Pause + 暂停 + + + Cancel + 取消 + + + + xMainWindow + + + + Well is null. + Job's Well is null + 作业从属井为空 + + + + Failed to load ByteArray + + + + + Not licensed, just run in readonly mode + 未能找到授权信息,只读模式运行 + + + Series Navi + 切换测试模型 + + + + failed to find Ribbon File settings + + + + + Data + 井数据 + + + + Results + 成果 + + + + Jobs + + + + + Main + 基本 + + + + Logs + 日志 + + + + All + 全部 + + + + Started %1 at %2 + 启动 %1 于 %2 + + + + Current user: %1 Login time: %2 + 登录用户:%1 登录时间:%2 + + + + Please open or new a project first. + 请先打开或新建一个项目。 + + + + + + Not supported with ID='%1' + 不支持的ID='%1' + + + + + SubWnd is null. + + + + + Error found: Mdi wnd type is empty. ID is '%1' + 错误:Mdi窗体类型为空。ID为'%1' + + + + Type is empty. + 类型为空。 + + + + Failed to create wnd of '%1' + 创建窗体'%1'失败 + + + + Master of Pressure Analysis %1 (%2) + 压力分析大师 %1 (%2) + + + + %1 %2 (%3) + + + + + %1 Project: [%2] DataPath: [%3] + + + + + Current project dbVer is old, update it? + 项目数据库版本较低,升级? + + + + New Job %1 + 新建Job %1 + + + + Rename current tab + 重命名 + + + + Close current tab + 关闭当前页签 + + + + Close all tabs except current + 关闭所有页签(当前除外) + + + + Close all tabs + 关闭所有页签 + + + + Failed to rename dir of '%1' + 重命名目录'%1'失败 + + + + Failed to find config of table: '%1' + + + + + Failed to save project, +turn to logviews for details + + + + + Saved project successfully. + + + + + This project is deleted or destroyed, +remove this name from recent project lists? + + + + + Project file not exists. + + + + diff --git a/Bin/Config/Lang/cn/qt_zh_CN.qm b/Bin/Config/Lang/cn/qt_zh_CN.qm new file mode 100644 index 0000000..d6f3648 Binary files /dev/null and b/Bin/Config/Lang/cn/qt_zh_CN.qm differ diff --git a/Bin/Config/Unit/UnitConfig.unt b/Bin/Config/Unit/UnitConfig.unt new file mode 100644 index 0000000..a46d162 Binary files /dev/null and b/Bin/Config/Unit/UnitConfig.unt differ diff --git a/Bin/Config/Unit/UnitConfig.xls b/Bin/Config/Unit/UnitConfig.xls new file mode 100644 index 0000000..797af7b Binary files /dev/null and b/Bin/Config/Unit/UnitConfig.xls differ diff --git a/Bin/Config/Unit/UnitConfigDefault.unt b/Bin/Config/Unit/UnitConfigDefault.unt new file mode 100644 index 0000000..a46d162 Binary files /dev/null and b/Bin/Config/Unit/UnitConfigDefault.unt differ diff --git a/Bin/Config/Unit/UnitDataTemplate.xls b/Bin/Config/Unit/UnitDataTemplate.xls new file mode 100644 index 0000000..f9b9a90 Binary files /dev/null and b/Bin/Config/Unit/UnitDataTemplate.xls differ diff --git a/Bin/Config/Unit/UnitDefault.dat b/Bin/Config/Unit/UnitDefault.dat new file mode 100644 index 0000000..903a4ab --- /dev/null +++ b/Bin/Config/Unit/UnitDefault.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iY29tcHJlc3NpYmlsaXR5IiBOYW1lPSJjb21wcmVzc2liaWxpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSIxL01QYSIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9jbV4zIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibGIvZnReMyIgaz0iMC4wMTYwMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYi9nYWwoVVMpIiBrPSIwLjExOTgyNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYi9nYWwoVUspIiBrPSIwLjA5OTc2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImxiL2JibCIgaz0iMC4wMDI4NTMiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9jYyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnL2NmIiBrPSIzLjUzMTQ3ZS0wNSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnL2Z0XjMiIGs9IjMuNTMxNDdlLTA1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Imdlb3RoZXJtYWxncmFkaWVudCIgTmFtZT0iZ2VvdGhlcm1hbGdyYWRpZW50Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZGVnL20iIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9pbiIgaz0iMS44Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wOTkiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9taWxlIiBrPSIwLjAzNDQ4MjgiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9mdCIgaz0iMTgxLjgxOCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJsZW5ndGgiIE5hbWU9Imxlbmd0aCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImluIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im0iIGs9IjM5LjM3MDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY20iIGs9IjAuMzkzNzAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1tIiBrPSIwLjAzOTM3MDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia20iIGs9IjM5MzcwLjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQiIGs9IjEyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1pIiBrPSI2MzM0Ni41Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InlkIiBrPSIzNS45ODczIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im5taWxlIiBrPSI3MjkxMy40Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im5tIiBrPSIzLjkzNzAxZS0wOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJyYWQiIGs9IjcuODI4MzEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IiUiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icHUiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL21eMyIgaz0iMTAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InYvdiIgaz0iMTAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImZyYWN0aW9uIiBrPSIxMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVybWVhYmlsaXR5IiBOYW1lPSJwZXJtZWFiaWxpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJEIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1EIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjbV4tMiIgaz0iOS44MWUrMDciLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iVyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2dmLm0vcyIgaz0iOS44MDY2NSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjYWwvcyIgaz0iNC4xODY4Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhwIiBrPSI3MzUuNDk5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlBhIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Ik1QYSIgaz0iMWUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iS1BhIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJhciIgaz0iMTA1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlRvcnIiIGs9IjEzMy4zMjIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZHluL2NtXjIiIGs9IjAuMSIvPg0KICAgICAgICAgICAgPFVuaXQgVW5pdD0ibW1IZyIgaz0iMTMzLjMyMiIvPg0KICAgICAgICAgICAgPFVuaXQgVW5pdD0ibW1IMk8iIGs9IjkuODA2NjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icHNpIiBrPSI2ODk2LjU1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImF0bSIgaz0iMTAxMzI1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZi9jbV4yIiBrPSI5ODA3OS43Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByb2R1Y3Rpb24iIE5hbWU9InByb2R1Y3Rpb24iPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtXjMvZCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0Y2YvZCIgaz0iMC4wMjgzMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtXjMvYSIgaz0iMC4wMDI3NDAwNyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJiY2YvZCIgaz0iMC4wMjgzMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtbWNmL2QiIGs9IjI4MzIwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1jZi9kIiBrPSIyOC4zMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJzdGIvZCIgaz0iMC4xNTkiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icHJvZGdhcyIgTmFtZT0icHJvZGdhcyI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9kIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IjEwXjQqbV4zL2QiIGs9IjEwMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InRjZi9kIiBrPSIwLjAyODMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9hIiBrPSIwLjAwMjc0MDA3Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJjZi9kIiBrPSIwLjAyODMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1tY2YvZCIgaz0iMjgzMjAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWNmL2QiIGs9IjI4LjMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InN0Yi9kIiBrPSIwLjE1OSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJwcm9kb2lsIiBOYW1lPSJwcm9kb2lsIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2QiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idGNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2EiIGs9IjAuMDAyNzQwMDciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZi9kIiBrPSIyODMyMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtY2YvZCIgaz0iMjguMzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RiL2QiIGs9IjAuMTU5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByb2R3YXRlciIgTmFtZT0icHJvZHdhdGVyIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2QiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idGNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2EiIGs9IjAuMDAyNzQwMDciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZi9kIiBrPSIyODMyMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtY2YvZCIgaz0iMjguMzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RiL2QiIGs9IjAuMTU5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnQVBJIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkFQSSIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ1cy9tIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InVzL2Z0IiBrPSIzLjI4MDg0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNxdWFyZSIgTmFtZT0ic3F1YXJlIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4yIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImttXjIiIGs9IjFlKzA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImluXjIiIGs9IjAuMDAwNjQ1MiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjbV4yIiBrPSIwLjAwMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYWNyZSIgaz0iNDA0NyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtaWxlXjIiIGs9IjIuNTg4ODhlKzA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImZ0XjIiIGs9IjAuMDkzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhhIiBrPSIxMDAwMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ5ZF4yIiBrPSIwLjgzNjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icmFkMiIgaz0iMC4wMzk1MzY5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InN0cmVuZ3RoIiBOYW1lPSJzdHJlbmd0aCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Ik4iIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibGJmIiBrPSI0LjQ0NDQ0Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZiIgaz0iOS44MSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJkeW4iIGs9IjFlLTA1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlIiBOYW1lPSJ0ZW1wZXJhdHVyZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImRlZyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJLIiBrPSIxIiBiPSIyNzMuMTUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRiIgaz0iMS44Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IuKEgyIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0aGVtYWwgcG93ZXIiIE5hbWU9InRoZW1hbCBwb3dlciI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkoiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY2FsIiBrPSI0LjE4NjgiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2dmLm0iIGs9IjkuODA2NjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iQnR1IiBrPSIxMDU1LjA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtXLmgiIGs9IjMuNmUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQubGJmIiBrPSIxLjM1NTgyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhwLmgoVVMpIiBrPSIyLjY0Nzc5ZSswNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJIcC5oKFVLKSIgaz0iMi42ODQ1MmUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2cubSIgaz0iOS44MDAwOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJrY2FsIiBrPSI0MTg1Ljg1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkJUVSIgaz0iMTA1NC44NSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0aW1lIiBOYW1lPSJ0aW1lIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idXMiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibXMiIGs9IjEwMDAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icyIgaz0iMWUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWluIiBrPSI2ZSswNyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJociIgaz0iMy42ZSswOSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJEYXkiIGs9IjguNjRlKzEwIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im0vcyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtaWxlL2giIGs9IjAuNDQ3MDQiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQvcyIgaz0iMC4zMDQ4Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtUGHCt3MiIGs9IjAuMDAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlAiIGs9IjAuMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjUCIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmYucy9mdF4yIiBrPSI0Ny44ODAzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZi5zL21eMyIgaz0iOS44MDY2NSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHkgYWN0IiBOYW1lPSJ2aXNjb3NpdHkgYWN0Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4yL3MiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY21eMi9zIiBrPSIwLjAwMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnReMi9zIiBrPSIwLjA5MjkwMyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJTdCIgaz0iMC4wMDAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImNTdCIgaz0iMWUtMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1eMi9zIiBrPSIxZS0wNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2b2x0YWdlIiBOYW1lPSJ2b2x0YWdlIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibXYiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idiIgaz0iMTAwMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2b2x1bWUiIE5hbWU9InZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtbCIgaz0iMWUtMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iTCIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iaW5eMyIgaz0iMS42MzllLTA1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImNtXjMiIGs9IjFlLTA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnYWwoVVMpIiBrPSIwLjAwMzc4NSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJiYmwiIGs9IjAuMTU5Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJjZiIgaz0iMi44MzE3ZSswNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0Y2YiIGs9IjIuODMxN2UrMTAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZiIgaz0iMjgzMTciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWNmIiBrPSIyOC4zMTciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnReMyIgaz0iMC4wMjgzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImdpIiBrPSIwLjAwMDExOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY2MiIGs9IjFlLTA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImFjcmUuZnQiIGs9IjEyMzQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0id2VpZ2h0IiBOYW1lPSJ3ZWlnaHQiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJrZyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0b24iIGs9IjEwMDAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibHRvbiIgaz0iMTAxNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYiIgaz0iMC40NTQiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ib3oiIGs9IjAuMDI4MzUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RvbiIgaz0iOTA3Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImciIGs9IjAuMDAxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQoNCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJUb0RvMSIgTmFtZT0iVG9EbzEiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSIxL21eMy9kIiBrPSIxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9IlRvRG8yIiBOYW1lPSJUb0RvMiI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IsKwIiBrPSIxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9IlRvRG8zIiBOYW1lPSJUb0RvMyI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9NUGEiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzQiIE5hbWU9IlRvRG80Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibUQvKG1QYcK3cykiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzUiIE5hbWU9IlRvRG81Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iTVBhL20iIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzYiIE5hbWU9IlRvRG82Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibUTCt20iIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzciIE5hbWU9IlRvRG83Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9tb2wiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzgiIE5hbWU9IlRvRG84Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/WTAI/AccessConfig.ini b/Bin/Config/WTAI/AccessConfig.ini new file mode 100644 index 0000000..b7cf933 --- /dev/null +++ b/Bin/Config/WTAI/AccessConfig.ini @@ -0,0 +1,4 @@ +;井别、井型 +[WellDataOptions] +WellType = 采油井/油井/报废采油井/稀油采油井/调整油井/二次调整油井/更新油井/排液采油井/气驱采油井/三元驱采油井/试采油井/吞吐采油井#采气井/气井/注气库气井/注汽井#注入井/水井/报废注水井/补充注水井/待报废注水井/调整注水井/更新注水井/正常注水井/注聚合物井; +WellEn = Oil#Gas#Water; \ No newline at end of file diff --git a/Bin/Config/WTAI/AccessTrs.txt b/Bin/Config/WTAI/AccessTrs.txt new file mode 100644 index 0000000..c9fbd9d --- /dev/null +++ b/Bin/Config/WTAI/AccessTrs.txt @@ -0,0 +1,156 @@ +FieldName Alias Unit Table Ndex IsShow ValueType Param +JH , 井号 , , B_WELL , 4 , 1 , 0 , +JHDM , 井号代码 , , B_WELL , 3 , 0 , 0 , +CW , 层位 , , B_LAYER , 2 , 1 , 0 , +CWDM , 层位代码 , , , , 0 , 0 , +QK , 区块 , , B_WELL , 2 , 1 , 0 , +QKDM , 区块代码 , , B_WELL , 1 , 0 , 0 , +CSRQ , 测试日期 , , , , 1 , 5 , +CSCH , 测试序号 , , , , 1 , 2 , +SJJSRQ , 试井结束日期 , , , , 1 , 5 , +JB , 井别 , , B_WELL , 5 , 1 , 0 , +JBDM , 井别代码 , , , , 0 , 0 , +CYFS , 采油方式 , , , , 1 , 0 , +CYFSDM , 采油方式代码 , , , , 0 , 0 , +JX , 井型 , , B_WELL , 6 , 1 , 0 , +JXDM , 井型代码 , , , , 0 , 0 , +YPFL , 油品分类 , , , , 1 , 0 , +YPFLDM , 油品分类代码 , , , , 0 , 0 , +GXDW , 管辖单位 , , , , 0 , 0 , +GXDWDM , 管辖单位代码 , , , , 0 , 0 , +CJGXDW , 次级管辖单位 , , , , 0 , 0 , +CJGXDWDM , 次级管辖单位代码 , , , , 0 , 0 , +JCDM , 监测代码 , , , , 0 , 0 , +JCMC , 监测名称 , , , , 0 , 0 , +SGDW , 施工单位 , , , , 0 , 0 , +SGDWDM , 施工单位代码 , , , , 0 , 0 , +YQBH , 仪器编号 , , , , 0 , 0 , +YQMC , 仪器名称 , , , , 1 , 0 , +YQXH , 仪器型号 , , , , 0 , 0 , +JSFY , , , , , 0 , 0 , +SSYL , 损失油量 , , , , 1 , 2 , +ZRJC , 自然井次 , , , , 1 , 2 , +YY , 油压 , MPa , , , 1 , 2 , +TY , 套压 , MPa , , , 1 , 2 , +D1TJSD , 第一台阶深度 , m , , , 1 , 2 , +D1TJYL , 第一台阶压力 , Mpa , , , 1 , 2 , +D1TJWD , 第一台阶温度 , ℃ , , , 1 , 2 , +D2TJSD , 第二台阶深度 , m , , , 1 , 2 , +D2TJYL , 第二台阶压力 , Mpa , , , 1 , 2 , +D2TJWD , 第二台阶温度 , ℃ , , , 1 , 2 , +ZSYLTD , 折算压力梯度 , MPa/m , , , 1 , 2 , +ZSWDTD , 折算温度梯度 , ℃/100m , , , 1 , 2 , +WDSCSJ , 稳定生产时间 , d , P_DATA_GAUGE_F , 5 , 0 , 4 , +GCSJ , 关测时间 , h , , , 1 , 2 , +YCZB , 油层中部 , m , , , 1 , 2 , +YXHD , 有效厚度 , m , P_DATA_RES , 4 , 1 , 2 , H +RCYL1 , 日产液量 , t/d , , , 1 , 2 , +HS , 含水 , % , , , 1 , 2 , +RCQL , 日产气量 , 10^4*m^3/d , , , 1 , 2 , +DCWD , 地层温度 , ℃ , P_DATA_RES , 10 , 1 , 2 , +JDJH , 激动井号 , , , , 1 , 0 , +JSRQ , 解释日期 , , , , 1 , 5 , +JSR , 解释人 , , , , 1 , 0 , +ZXD1QSSK , , , , , 0 , 2 , +ZXD1XL , , , , , 0 , 2 , +ZXD2QSSK , , , , , 0 , 2 , +ZXD2XL , , , , , 0 , 2 , +ZXDJSSK , , , , , 0 , 2 , +JSFF , 解释方法 , , , , 1 , 0 , +CNXS , 产能系数 , 10^3μm^2*m , , , 1 , 2 , +YXSTL , 有效渗透率 , 10^3μm^2 , P_DATA_RES , 8 , 1 , 2 , K +LDXS , 流动系数 , 10^3μm^2*m , , , 1 , 2 , +DYXS , 导压系数 , m^2/h , , , 1 , 2 , +LFDLNL , 裂缝导流能力 , 10^3μm^2*m , , , 1 , 2 , +LD , 流度 , 10^3μm^2/mPa*s , , , 1 , 2 , MKu +CLXS , 窜流系数 , , , , 1 , 2 , lambda +TXCNB , 弹性储能比 , m/Mpa , , , 1 , 2 , D +SBPXS , 视表皮系数 , , , , 1 , 2 , +BPXS , 表皮系数 , , , , 1 , 2 , S +WSXS , 完善系数 , , , , 1 , 2 , +JTCJXS , 井筒储集系数 , m^3/Mpa , , , 1 , 2 , C +YCZBYL , 油层中部压力 , Mpa , , , 1 , 2 , +FBMJ , 封闭面积 , , , , 1 , 2 , +DJKZMJ , 单井控制面积 , , , , 1 , 2 , +DJKZYCL , 单井控制油储量 , 10^4t , , , 1 , 2 , +DJKZQCL , 单井控制气储量 , , , , 1 , 2 , +PJYL , 平均压力 , Mpa , , , 1 , 2 , Pi +LFBC , 裂缝半长 , m , , , 1 , 2 , +LFKD , 裂缝宽度 , m , , , 1 , 2 , +BJ1JL , 边界距离1 , m , , , 1 , 2 , +BJ1XZ , 边界性质1 , , , , 1 , 0 , +BJ2JL , 边界距离2 , m , , , 1 , 2 , +BJ2XZ , 边界性质2 , , , , 1 , 0 , +JJ , 截距 , , , , 1 , 2 , +LY , 流压 , MPa , , , 1 , 2 , +SSTL , 水渗透率 , 10^3μm^2 , , , 1 , 2 , +ZLSS , 阻力损失 , MPa , , , 1 , 2 , +ZSBJ , 折算半径 , MPa , , , 1 , 2 , +SLDXS , 水流动系数 , 10^3μm^2*m , , , 1 , 2 , +SDCXS , 水地层系数 , 10^3μm^2*m , , , 1 , 2 , +SLD , 水流度 , 10^3μm^2/mPa*s , , , 1 , 2 , +LDXL , 流动效率 , , , , 1 , 2 , +KJYXBJ , 开井影响半径 , , , , 1 , 2 , +GJYXBJ , 关井影响半径 , , , , 1 , 2 , +JMX , 井模型 , , , , 1 , 0 , +NBJMX , 内边界模型 , , , , 1 , 0 , +WBJMX , 外边界模型 , , , , 1 , 0 , +LLMX , 流量模型 , , , , 1 , 0 , +CCMX , 储层模型 , , , , 1 , 0 , +JCBYXS , 井储变异系数 , dec , , , 1 , 2 , +XZFBXS , 相再分布系数 , , , , 1 , 2 , +BGJCXS , 表观井储系数 , , , , 1 , 2 , +DCXSB , 地层系数比 , , , , 1 , 2 , +GSCSTL , 高渗层渗透率 , 10^3μm^2 , , , 1 , 2 , +DSCSTL , 低渗层渗透率 , 10^3μm^2 , , , 1 , 2 , +WQCLXS , 外区流窜系数 , , , , 1 , 2 , +JSRJMC , 解释软件名称 , , , , 0 , 0 , +CZSTL , 垂直渗透率 , 10^3μm^2 , , , 1 , 2 , +SPSTL , 水平渗透率 , 10^3μm^2 , , , 1 , 2 , +BJXZ3 , 边界性质3 , , , , 1 , 0 , +BJJL3 , 边界距离3 , m , , , 1 , 2 , +BJXZ4 , 边界性质4 , , , , 1 , 0 , +BJJL4 , 边界距离4 , m , , , 1 , 2 , +YQBJ , 一区半径 , m , , , 1 , 2 , +YQSTL , 一区渗透率 , 10^3μm^2 , , , 1 , 2 , +ERQBJ , 二区半径 , m , , , 1 , 2 , +ERQSTL , 二区渗透率 , 10^3μm^2 , , , 1 , 2 , +SQBJ , 三区半径 , m , , , 1 , 2 , +SQSTL , 三区渗透率 , 10^3μm^2 , , , 1 , 2 , +SQBJ1 , 四区半径 , m , , , 1 , 2 , +SQSTL1 , 四区渗透率 , 10^3μm^2 , , , 1 , 2 , +JLYJY , 结论与建议 , , , , 0 , 0 , +BZ , 备注 , , , , 0 , 0 , +YSSJ , 原始数据 , , P_DATA_GAUGE_P, 5 , 0 , 4 , +WELL_ID , , , , , 0 , 0 , +CSJD , , , , , 0 , 0 , +SYID , , , , , 0 , 0 , +TLID , , , , , 0 , 0 , +CSSD , 测试深度 , , , , 1 , 2 , +RZSL , 日注水量 , , , , 1 , 2 , +TGZJ , 套管直径 , , , , 1 , 2 , +SKJDDS1 , 射孔井段顶深 , , , , 1 , 2 , +SKJDDS2 , 射孔井段底深 , , , , 1 , 2 , +LRR , 录入人 , , , , 1 , 0 , +SHR , 审核人 , , , , 1 , 0 , +YYTJXS , 原油体积系数 , , P_DATA_FLUID, 5 , 1 , 2 , +YYND , 原油粘度 , , P_DATA_FLUID , 6 , 1 , 2 , +YYMD , 原油密度 , , P_DATA_FLUID , 7 , 1 , 2 , +YYSXS , 油压缩系数 , , P_DATA_FLUID , 4 , 1 , 2 , +STJXS , 水体积系数 , , P_DATA_FLUID , 13 , 1 , 2 , +SND , 水粘度 , , P_DATA_FLUID , 14 , 1 , 2 , +SYSXS , 水压缩系数 , , P_DATA_FLUID , 12 , 1 , 2 , +QTJXS , 气体积系数 , , P_DATA_FLUID , 10 , 1 , 2 , +QND , 气粘度 , , P_DATA_FLUID , 9 , 1 , 2 , +QMD , 气密度 , , P_DATA_FLUID , 11 , 1 , 2 , +QYSXS , 气压缩系数 , , P_DATA_FLUID , 8 , 1 , 2 , +TRQYSYZ , 天然气压缩因子 , , , , 1 , 2 , +HYBHD , 含油饱和度 , , , , 1 , 2 , +HSBHD , 含水饱和度 , , , , 1 , 2 , +HQBHD , 含气饱和度 , , , , 1 , 2 , +KXD , 孔隙度 , , P_DATA_RES , 7 , 1 , 2 , +ZHYSXS , 综合压缩系数 , , P_DATA_RES , 11 , 1 , 2 , +YSDCYL , 原始地层压力 , , P_DATA_RES , 9 , 1 , 2 , +BZ , 备注 , , , , 1 , 0 , +GXDW , 管辖单位 , , , , 1 , 0 , +GXDWDM , 管辖单位代码 , , , , 0 , 0 , \ No newline at end of file diff --git a/Bin/Config/WTAI/PhaseEquili.ini b/Bin/Config/WTAI/PhaseEquili.ini new file mode 100644 index 0000000..82b2f27 --- /dev/null +++ b/Bin/Config/WTAI/PhaseEquili.ini @@ -0,0 +1,17 @@ +;相平衡内部参数 +[InputArgs] +Item01_N2 = 0.0019/3.46/126.2/0.0377/28.103/1/1 +Item02_CO2 = 0.0794/7.382/304.19/0.228/44.01/1/1 +Item03_C1 = 0.5789/4.599/190.56/0.012/16.043/1/1 +Item04_C2 = 0.0603/4.872/305.32/0.1/30.07/1/1 +Item05_C3 = 0.1274/4.248/369.83/0.152/44.097/1/1 +Item06_iC4 = 0.0026/3.64/407.8/0.184/58.123/1/1 +Item07_nC4 = 0.0047/3.796/425.12/0.2/58.123/1/1 +Item08_iC5 = 0.0064/3.38/460.4/0.228/72.15/1/1 +Item09_nC5 = 0.0139/3.37/469.7/0.252/72.15/1/1 +Item10_C6 = 0.0178/3.33/512.8/0.25/84/1/1 +Item11_C7 = 0.0154/3.12/547.2/0.28/96/1/1 +Item12_C8 = 0.0121/2.89/575.6/0.312/107/1/1 +Item13_C9 = 0.0132/2.64/602.8/0.348/121/1/1 +Item14_C10 = 0.0125/2.42/626.7/0.385/134/1/1 +Item14_C11+ = 0.0535/1.66638767/707.5347075/1.87199502/227/1/1 diff --git a/Bin/Config/WTAI/Template/ZxPlot.tmpl b/Bin/Config/WTAI/Template/ZxPlot.tmpl new file mode 100644 index 0000000..efd7dd0 Binary files /dev/null and b/Bin/Config/WTAI/Template/ZxPlot.tmpl differ diff --git a/Bin/Config/WTAI/WTAI.db b/Bin/Config/WTAI/WTAI.db new file mode 100644 index 0000000..e69de29 diff --git a/Bin/Config/WTAI/WTAIConfig.ini b/Bin/Config/WTAI/WTAIConfig.ini new file mode 100644 index 0000000..195e400 --- /dev/null +++ b/Bin/Config/WTAI/WTAIConfig.ini @@ -0,0 +1,83 @@ +;WTAI系统配置相关的内容 + +[Global] +AppID = WTAI ;AppID +AppLogo = WTAI.png ;Logo +AppDescCH = 现代试井解释软件;中文 +AppDescEN = (WTAI);英文 +Dev = 中国石油勘探开发研究院; +DebugLevel = 0; 1 为Debug模式,可以打印更多日志,比如SQL语句 +AppVer = c4ca4238a0b923820dcc509a6f75849b; 内定的编码,则为常规版本,否则为 临时版本 +Customer = 研究院\r\n试井相关研究人员; +PtyAdvanced = 1; 属性采用高级模式 + +[Version] +DbVer = V0.80 ;数据库版本 + +;数据库选择相关 +[DataBaseSrc] +DatabaseType = QDM ;数据库类型 QDM: 武汉达梦 QKB: 人大金仓 QOCI:Oracle QSQLITE:SqlLite文件 +Server = localhost +Port = 5236 +database = DMTest +username = WANGZG +Password = fk20258888 +SQLiteByWell = 0; 是否一口井一个db文件模式,1:是,其它:否 +WellTestStar = 0; 新疆试井之星,1:是,其它:否 + +;项目树中的数据节点 +[ProjTreeInfos] +DataChildNames = {井基础数据}{地质分层数据}{储层数据}{流体性质数据}; +DataChildTables = {B_Well}{B_Layer}{P_DATA_RES}{P_DATA_FLUID}{P_DATA_GAUGE_P}{P_DATA_GAUGE_F}; +DataChildIcons = {tBase}{tLayer}{tRes}{tFluid}{tPressure}{tFluidRate}; +RsChildNames = {Job Info}{Data Used}{Results}{Report}; +RsChildIcons = {jBase}{jData}{jResult}{jReport}; +DataAllName = 所有井; +WellAllName = 基础数据; + +;油气水对应的参数选项 +[FluildOptionParas] +Oil = {Bo}{Miuo};20180322根据代力建议去掉{Ct} +Gas = {Zg}{Bg}{Miug}{Ct}; +Water = {Bw}{Miuw}{Ct}; + +;井别、井型 +[WellDataOptions] +WellType = {油井}{气井}{水井}; +JobType = {Oil}{Gas}{Water}; +WellIcon = {OilWell}{OilWell}{OilWell};原来是{OilWell}{GasWell}{WaterWell} +WellClass = {直井}{水平井}; + +;软件类型 +[ModuleType] +MenuType = ClientMenu ;菜单类型 客户菜单: ClientMenu 数据菜单:DataMenu + +;服务器端登录信息 +[ServerLogin] +UserInfo = 21232f297a57a5a743894a0e4a801fc3 ;用户,密文 +PasswordInfo = 71ed24437bb898b63f398e246d83789d;密码,密文,需要借助软件工具生成 + +;开机闪屏配置 +[Splash] +SplashOpen = 0; 是否启用闪屏,1:启用 0:不启用 +SplashMode = 1; 闪屏模式 + ;0基于Qt自带,增加进度条 + ;1多幅图片循环播放 + ;2Flash模式,运行swf文件 + ;3Gif模式,运行gif文件 +SplashTime = 2000; 开启启动的闪屏时长(单位:ms) + +;其它一些琐碎信息 +[Others] +ProgressLoop = 10; 速度控制,进度条刷新间隔点 +wLineCountPerPage = 36; 导出word时,表格数据每页多少行 +wColCountPerPage = 2; 导出word时,表格数据每页多少表格并排 +wLineCountPerSpan = 461e8b88f5f7119a7c45dc91a59fa029; 导出word时,内部描述信息 +NaviShowMode = 1; 模型导航模式,1:为菜单模式,其它:原来模式 +SegMaxToTrim = 5; 一旦流动段多于该数,则仅仅对当前段进行处理 +CustomThin = 1; 是否允许定制抽稀参数 +TailorOffset = 8; (范围0-50,%) +BaseResolutionW = 1920; 基准分辨率 1024 1920 +BaseResolutionH = 1080;768 1080 +NovelQss = 0; 是否启用新的样式表,ZXF202407 + diff --git a/Bin/Config/WTAI/WTAIDemoUtils.ini b/Bin/Config/WTAI/WTAIDemoUtils.ini new file mode 100644 index 0000000..5181d83 --- /dev/null +++ b/Bin/Config/WTAI/WTAIDemoUtils.ini @@ -0,0 +1,55 @@ +;MPA研发过程中的软件测试小工具相关配置 + +; 系统配置 +[SysConfig] +OnlyOne = 0 ; 是否仅仅显示一个窗体,可以单独打包软件 1:是 0:不是 +;CurType = _TestPlot ; 默认启动 +;CurWx = iGuiPlot ; +CurType = _TestPlot ; 默认启动 +CurWx = iWxAxisTest ; + +; About Base +[_TestBase] +wxTestBase = 框架基础测试 ; +wxTestThread = 线程测试 ; +;Key2 = {Item1}{Item2}; + +; About Gui +[_TestGui] +iWxWizard = Job向导 ; +iWxConfigWizard = 系统配置向导 ; +iWxResult = 拟合处理结果 ; +iWxPrintOption = 打印/打印预览选项 ; +iWxOptionResCompare = 成果对比 ; +iWxParaUtilTest = 新参数展示测试 ; + +; About Plot +[_TestPlot] +;wxTestBase = 绘图基础测试 ; +iGuiPlot = 绘图(单一) ; +iGuiPlotPF = 绘图(压力+流量) ; +iWxConfigPlotTemplate = 系统配置之绘图模板配置 ; +iWxAxisTest = 坐标轴测试 ; + +; About Tool +[_TestTool] +iWxRibbon = Ribbon模式 ; +iWxPvtMain = PVT工具 ; +iWxUpdater = 软件更新工具 ; +iWxHelp = 帮助工具 ; +iWxIconExtract = 图标Tag提取 ; +iWxProDepends = Pro依赖 ; +iWxToolClassInfo = Class信息提取 ; +iWxFileUtils = 文件批量处理 ; + +; About Algo +[_TestAlg] +wxTestAlg = 算法配置类基础测试 ; +iWxResultParaFit = 参数散点数据拟合 ; + +; About Data +[_TestData] +iWxTestDb = 数据库类试 ; +iWxDataLoad = 数据加载 ; +iWxTableViewTest = 表格展示测试 ; +iWxProjectMigrate = 项目数据迁移 ; diff --git a/Bin/Config/WTAI/WTAI_update_list.html b/Bin/Config/WTAI/WTAI_update_list.html new file mode 100644 index 0000000..9134c98 --- /dev/null +++ b/Bin/Config/WTAI/WTAI_update_list.html @@ -0,0 +1,296 @@ + + + + 软件更新日志 + + + + + + +

WTAI latest updates

+ +
+ +

软件版本:20240922

+
    +
  1. 优化:进一步优化高分辨率下显示效果
  2. +
+ +

软件版本:20240920

+
    +
  1. 调整:边界文字放前面,吻合习惯
  2. +
  3. 调整:对数双对数默认改为显示次级刻度
  4. +
  5. 调整:水平井部分模型计算时出现"dt"参数不存在的日志情况
  6. +
  7. 调整:简化模型序列 s_Current_ModelSeries
  8. +
  9. 优化:压裂段数的可视化处理
  10. +
  11. 优化:坐标轴更改刻度是否显示无效
  12. +
  13. 优化:压恢压降下拉无效问题
  14. +
  15. 优化:没有研发的模型会用别的进行计算 Failed to find ModelDesc with
  16. + +
+ +

软件版本:20240914

+
    +
  1. 调整:软件名称调整为——现代试井解释软件
  2. +
  3. 新增:西安模型挂接(直接二区/三区部分)
  4. +
  5. 新增:模型参数统一命名及定义规范
  6. +
  7. 新增:绘图窗口自动追加/缓存隐藏机制
  8. +
  9. 修复:压降段进行处理解释时,表皮渗透率总为0问题修复
  10. +
  11. 优化:试井设计参考压力调整问题
  12. +
  13. 优化:PVT Rhog个别算法计算不对问题修复
  14. +
  15. 优化:PVT界面优化(避免过大)及界面英文翻译
  16. +
  17. 优化:Ribbon TabWx高分辨率问题
  18. +
  19. 优化:敏感性分析功能绘图优化及调整(70%)
  20. +
  21. 优化:文本框组件自动把空格裁切问题修复
  22. +
  23. 优化:图元对象工具及策略交织问题优化处理
  24. +
  25. 完善:PVT 管理界面,继续进行计算pvt时,参考压力未传递问题修复
  26. +
  27. 完善:完善西安算法接口机制,对内存机制进行升级优化
  28. +
  29. 完善:成果序列化机制调整(60%)
  30. +
  31. 调整:界面窗口部分调整
  32. +
+ +

软件版本:20240904

+
    +
  1. 新增:数值试井窗口框架及接口定制(70%)
  2. +
  3. 调整:进一步三图+结果窗口布局方式
  4. +
  5. 优化:首页面行列数字默认根据一定规则隐藏
  6. +
  7. 优化:优化表格标题下拉选择功能
  8. +
  9. 优化:对于个别单位过长的情形,选中情况下显示不开
  10. +
  11. 优化:个别情况下最近选用列表双击切换模型,参数框会重复
  12. +
  13. 优化[试井设计]:右键双击崩溃问题
  14. +
  15. 优化[试井设计]:Job管理默认,如果没有最近的,则默认取第一个
  16. +
  17. 优化[试井设计]:流量数据输入不一定非要所有行军输入
  18. +
  19. 优化[试井设计]:点击计算之后,计算按钮变灰问题修复
  20. +
  21. 优化[试井设计]:没有计算时,无需保存
  22. +
  23. 优化[试井设计]:保存逻辑优化处理(是否新建),同时实时刷新左侧工区树
  24. +
  25. 优化[试井设计]:表格默认首行为0/0,这是流量数据的特殊性
  26. +
  27. 优化[试井设计]:表格单位换行显示
  28. +
  29. 优化[试井设计]:设计后,自动判断流动段
  30. +
  31. 优化[试井设计]:设计后,流动段分析无法直接点击的问题处理
  32. +
  33. 优化[试井设计]:右侧结果Tab页优化显示
  34. + +
+ +

软件版本:20240823

+
    +
  1. 新增:调整窗体类库结构,为数值试井做准备
  2. +
  3. 新增:井型/油藏类型增加新的分级机制,实现模型类型的规范化
  4. +
  5. 优化:默认最后一段(如果为0)为选择段,方便直接进行流动段分析
  6. +
  7. 完善:Ribbon中分割线显示效果
  8. +
  9. 完善:完善单位配置系统
  10. +
  11. 完善:三图+结果窗口布局方式
  12. +
+ +

软件版本:20240812

+
    +
  1. 新增:石大北京解析模型挂接
  2. +
  3. 新增:算法层增加拟合算法定制功能机制(可能暂时不用)
  4. +
  5. 新增:开始 的主菜单,方便用户直接进行处理解释,基本上通过该菜单能完成基本流程
  6. +
  7. 新增:挂接水平井多段属性可视化功能
  8. +
  9. 新增:增加样式表开关,具体咨询wzg,注:样式表仍在进行中
  10. +
  11. 新增:新建PVT区分是否小型压裂,并且分类存储,分别引用(注:小型压力功能研发中)
  12. +
  13. 完善:压力流量视图,按esc键会退出
  14. +
  15. 完善:气顶+底水显示问题以及选项替换
  16. +
  17. 完善:结果窗口井型显示错误问题
  18. +
  19. 完善:正演及拟合增加时间输出
  20. +
  21. 完善:部分射开模型气顶底水参数问题
  22. +
  23. 优化:高斯牛顿拟合算法逻辑调整及优化(参数设定问题)
  24. +
  25. 优化:把原先的ModelSerie功能引用转换为目前的类型(区分北京/西安/其它)
  26. +
  27. 优化:特征线绑定功能
  28. +
  29. 优化:无压力流量数据,则自动弹出加载界面
  30. +
  31. 优化:流动线移动过程默认配色以及流动段背景色
  32. +
  33. 优化:Ribbon分组效果,重绘
  34. +
  35. 优化:再次封装优化矩阵类接口
  36. +
  37. 修复:手工调整参数,模型生成,参数发生变化的问题
  38. +
  39. 修复:二次右键双击流动段,默认参数计算错误问题(问题复杂:由隐藏左侧数据树引起)
  40. +
  41. 修复:PVT保存/加载文件,对于气,组分界面显示丢失
  42. +
  43. 修复:斜井+均质功能(整合时遗漏了斜井长度选项)
  44. + +
+ +

软件版本:20240705

+
    +
  1. 新增:模型生成之前,显示四个窗口,而非原先的一个窗口
  2. +
  3. 新增:0°和45°特征线进行合并,作为一体进行编辑调整
  4. +
  5. 新增:小型压裂算法由C#到C++移植完毕,待后续功能研发
  6. +
  7. 新增:底层框架增加水平井多段属性可视化支持
  8. +
  9. 完善:完善水平井相关的参数属性设置
  10. +
  11. 完善:完善单位制接口
  12. +
  13. 调整:成果树型控件层级调整,去除原先的Series级别
  14. +
  15. 调整:压力右键菜单"显示曲线"和"编辑曲线",冗余,删除一个。
  16. +
  17. 修复:成果节点的拖拽显示功能
  18. +
  19. 修复:井基础数据导出Excel,结果崩溃。
  20. +
  21. 修复:创建一个有区块的井1和一个无区块的井2,编辑井2,却显示了井1的区块名字。
  22. +
+ +

软件版本:20240627

+
    +
  1. 完善:近期jmq和ls测试的所有问题集中反馈
  2. +
  3. 完善:建议点保存项目弹出对话框,确认已经保存
  4. +
  5. 完善:建议首页打开项目可以选择路径打开以前做过的项目
  6. +
  7. 完善:C盘目录创建项目,项目首页显示路径错误。
  8. +
  9. 完善:项目名字较长,会导致创建项目异常。
  10. +
  11. 完善:建议新建项目并定义油田名后,再定义新井时,新建项目里的油田名可以自动加载进去。
  12. +
  13. 完善:软件首页,尝试双击打开最近项目,导致崩溃。
  14. +
  15. 完善:在空的目录创建项目,进入项目后返回,项目名字 斜体、正题文字重叠。
  16. +
  17. 完善:井基础数据导出excel,为什么都在excel文件的sheet2里,有个sheet1是空的,请确认下是否有问题。
  18. +
  19. 完善:在项目首页,删除项目的井,当删除最后一个井后,软件崩溃。
  20. +
  21. 修复:流动段选择窗口的最右侧竖排按钮“属性页”点了之后没反应?
  22. +
  23. 新增:建议把压力图和流量图的最右边功能选项竖条合并成一竖条
  24. +
  25. 新增:项目列表支持按照时间/名称排序
  26. +
  27. 新增:增加恢复/撤销的Clear接口
  28. +
  29. 新增:自定义项目文件,为后续扩展做准备,兼容原先项目
  30. +
  31. 新增:集成挂接石大北京算法,方便测试(石大北京在测试中)
  32. +
  33. 优化:探测半径文字提示的颜色效果(原先有些喧宾夺主)
  34. +
+ +

软件版本:20240622

+
    +
  1. 新增:树上直接拖曳把井从一个区块移至另一区块
  2. +
  3. 新增:树上直接拖曳把压力/流量曲线从一口井移植/复制至另一口井
  4. +
  5. 新增:早期小信号机制挂接完毕
  6. +
  7. 新增:根据西安新增Ap相关函数以进一步控制算法执行进度
  8. +
  9. 修复:流量数据计量计名称保存错乱问题
  10. +
  11. 完善:所有表格默认列宽度设置
  12. +
  13. 完善:最近选取的模型支持效果
  14. +
  15. 完善:Clone函数对于标识m_ch遗漏导致Clone之后默认的编码只有数字
  16. +
+ +

软件版本:20240621

+
    +
  1. 完善:外挂算法,增加进度接口
  2. +
  3. 优化:像素级缩放效果,尤其是高数据量压力数据情况下
  4. +
  5. 优化:矩阵类库处理效率
  6. +
  7. 完善:建议新建项目并定义油田名后,再定义新井时,新建项目里的油田名可以自动加载进去
  8. +
  9. 调整:软件首页项目列表最大显示行和列适当调整,规避重叠
  10. +
+ +

软件版本:20240617

+
    +
  1. 优化:继续优化高分辨率效果(主要是按钮、表格列宽等)
  2. +
  3. 优化:自动拟合配置对话框调整
  4. +
  5. 优化:PVT管理器/JOB管理器重置
  6. +
  7. 新增:首页工区增加布局管理以及More功能
  8. +
  9. 修复:增加区块层级后序列化中id紊乱问题处理
  10. +
  11. 修复:IPR算法窗口优化(公式显示错乱)
  12. +
  13. 完善:树型节点提示改为动态
  14. +
  15. 完善:表格组件新建宽度自适应接口
  16. +
  17. 完善:图标组件增加缩放接口
  18. +
  19. 完善:首页面布局调整及优化
  20. +
+ +

软件版本:20240615

+
    +
  1. 测试完善:大分辨率效果
  2. +
  3. 修复:新建井创建人无法保存
  4. +
  5. 修复:首页,项目路径,浏览后不可手动编辑
  6. +
  7. 修复:项目路径内有斜线和反斜线,不统一
  8. +
  9. 修复:空白路径显示
  10. +
  11. 修复:编辑过程中的路径,无限制添加到最近目录中
  12. +
  13. 修复:双击树节点编辑状态不对
  14. +
  15. 完善:删除工区时,如果非空工区,则二次确认提醒
  16. +
  17. 完善:分类区分图标大小
  18. +
+ + +

软件版本:20240613[临时版]

+
    +
  1. 测试:大分辨率效果
  2. +
  3. 修复:连续点击井基础数据,表格标题异常(jmq)
  4. +
  5. 优化:数据管理逻辑
  6. +
  7. 优化:三个组分对话框统一
  8. +
  9. 优化:完善右键tips
  10. +
  11. 优化:模型选择功能界面优化处理
  12. +
+ + +

软件版本:20240612

+
    +
  1. 新增:发布WTAI前处理功能部分功能
  2. +
  3. 新增:项目管理(新增、编辑、删除、打开...)
  4. +
  5. 新增:井对象管理(新增、编辑、删除、打开...)
  6. +
  7. 新增:PVT分析管理(新增、编辑、删除、设为默认、管理界面...)
  8. +
  9. 新增:压力、流程数据加载
  10. +
  11. 新增:流量数据编辑,支持交互式拆分
  12. +
  13. 新增:左侧三个树型控件的功能,主要是右键功能
  14. +
+ + +

软件版本:20240419

+
    +
  1. 完善:继续PVT功能设计及功能实现
  2. +
  3. 新增:软件系统菜单布局设计及类Ribbon功能实现
  4. +
+ + +

软件版本:20240313

+
    +
  1. 新增:数据接口定义及功能实现
  2. +
  3. 新增:数据导入功能开发(压力/流量)
  4. +
  5. 新增:PVT功能设计及功能实现,进行中
  6. +
  7. 新增:系统主页面设计及实现
  8. +
  9. 新增:上标/下标功能实现
  10. +
  11. 新增:均质模型算法编写
  12. +
+ + +

软件版本:2024220

+
    +
  1. 新增:系统框架与应用模块代码构建
  2. +
  3. 新增:数据对象构建
  4. +
  5. 新增:绘图对象构建
  6. +
  7. 新增:算法对象构建,并且建立三对象之间关联
  8. +
  9. 新增:敲定软件系统标识,构建WTAI软件平台
  10. +
  11. 新增:均质模型算法编写
  12. +
+ +
+ + diff --git a/Bin/Config/WTAI/iAlgTest.ini b/Bin/Config/WTAI/iAlgTest.ini new file mode 100644 index 0000000..7415254 --- /dev/null +++ b/Bin/Config/WTAI/iAlgTest.ini @@ -0,0 +1,16 @@ +;iAlgTest配置相关的内容 + +;基础数据UI(UI名字/默认值/单位/类型(0是编辑框 、1下拉选项)) +[Param] +BaseParam = {井径:/0.09144//rw}{产层厚度:/20//H}{孔隙度:/0.1//phi}{体积系数:/1//B}{粘度:/1//Bo}{综合压缩系数:/0.0004351//Ct}{水平井长度:/609.6//L}{压裂段数:/4//N}{距油层底部距离:/10//zw}{裂缝宽度:/0.003//w} +ModelType = {井眼模型:/定井储:无井储:变井储(Fair):变井储(Hegeman)//1}{井模型:/水平井:水平井分段产液:多级压裂水平井:多级压裂水平井分段产液//1}{油藏模型:/均质油藏:双重孔隙:双重渗透:双区复合:三区复合//1}{边界模型:/无限大:一条边界:平行边界:交叉边界:圆形边界:矩形边界//1} +ModelParam = {储集系数:/0.5//C}{表皮系数:/0.5//S}{水平渗透率:/5//Kh}{垂向渗透率:/5//Kv}{裂缝渗透率:/500000//Kf}{地层压力:/34.4738//Pi}{水平井有效长度:/50//L0}{裂缝半长:/60.96//Xf}{导流能力:/1500//Fcd} + +;数据展示及图形绘制页面TAB标签 +;PlotTag{图标签名/X轴:线性:名称:单位&Y轴:线性:名称:单位&Y2轴:线性:名称:单位} +;DataTag{表名标签/表的标题/表数据属于的Plot} +[Tag] +;PlotTag = {Source/X:Line:T:s&Y:Line:P:mP&Y2:Line:Q:ton//}{PLine-TLog/X:Log:T:s&Y:Line:P:mP/0/0}{PLine-TLine/X:Line:T:s&Y:Line:P:mP/0/1}{PLog-TLog/X:Log:T:s&Y:Log:P:mP/1/1} +DataTag = {Pressure/T:P/P-T Source}{FlowRate/T:Q/P-T Source}{P-T_Tab1/T:P/PLine-TLog}{P-T_Tab2/T:P/PLine-TLog}{P-T_Tab3/T:P/PLine-TLine}{P-T_Tab4/T:P/PLine-TLine}{P-T_Tab5/T:P/PLog-TLog}{P-T_Tab6/T:P/PLog-TLog}{P-T_Tab7/T:P/PLog-TLog}{P-T_Tab8/T:P/PLog-TLog}{P-T_Tab9/T:P/PLog-TLog}{P-T_Tab10/T:P/PLog-TLog} +PlotTag = {Source/P-T Source&&}{Result/PLine-TLog&1&0:PLine-TLine&1&1:PLog-TLog&0&0} + diff --git a/Bin/Doc/iWTAI_DataStructure.pdm b/Bin/Doc/iWTAI_DataStructure.pdm new file mode 100644 index 0000000..2f9d585 --- /dev/null +++ b/Bin/Doc/iWTAI_DataStructure.pdm @@ -0,0 +1,28539 @@ + + + + + + + + + +EE2423D6-A117-4A7F-ACB9-A639DA3EF182 +物理结构 +物理结构 +1389407059 +Administrator +1718271881 +wangzg +[FolderOptions] + +[FolderOptions\Physical Objects] +GenerationCheckModel=Yes +GenerationPath= +GenerationOptions= +GenerationTasks= +GenerationTargets= +GenerationSelections= +RevPkey=Yes +RevFkey=Yes +RevAkey=Yes +RevCheck=Yes +RevIndx=Yes +RevOpts=Yes +RevViewAsTabl=No +RevViewOpts=Yes +RevSystAsTabl=Yes +RevTablPerm=No +RevViewPerm=No +RevProcPerm=No +RevDbpkPerm=No +RevSqncPerm=No +RevAdtPerm=No +RevUserPriv=No +RevUserOpts=No +RevGrpePriv=No +RevRolePriv=No +RevDtbsOpts=Yes +RevDtbsPerm=No +RevViewIndx=Yes +RevJidxOpts=Yes +RevStats=No +RevTspcPerm=No +RevCaseSensitive=No +GenTrgrStdMsg=Yes +GenTrgrMsgTab= +GenTrgrMsgNo= +GenTrgrMsgTxt= +TrgrPreserve=No +TrgrIns=Yes +TrgrUpd=Yes +TrgrDel=Yes +TrgrC2Ins=Yes +TrgrC2Upd=Yes +TrgrC3=Yes +TrgrC4=Yes +TrgrC5=Yes +TrgrC6=Yes +TrgrC7=Yes +TrgrC8=Yes +TrgrC9=Yes +TrgrC10=Yes +TrgrC11=Yes +TrgrC1=Yes +TrgrC12Ins=Yes +TrgrC12Upd=Yes +TrgrC13=Yes +UpdateTableStatistics=Yes +UpdateColumnStatistics=Yes + +[FolderOptions\Physical Objects\Database Generation] +GenScriptName=iWTAI_DB_SQLite_V0.2.sql +GenScriptName0= +GenScriptName1= +GenScriptName2= +GenScriptName3= +GenScriptName4= +GenScriptName5= +GenScriptName6= +GenScriptName7= +GenScriptName8= +GenScriptName9= +GenPathName=E:\Run\mWTAI\Bin\Doc\ +GenSingleFile=Yes +GenODBC=No +GenCheckModel=Yes +GenScriptPrev=Yes +GenArchiveModel=No +GenUseSync=No +GenSyncChoice=0 +GenSyncArch= +GenSyncRmg=0 + +[FolderOptions\Physical Objects\Database Generation\Format] +GenScriptTitle=No +GenScriptNamLabl=No +GenScriptQDtbs=No +GenScriptQOwnr=No +GenScriptCase=0 +GenScriptEncoding=ANSI +GenScriptNAcct=No +IdentifierDelimiter=" + +[FolderOptions\Physical Objects\Database Generation\Database] +Create=Yes +Open=Yes +Close=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Database\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Tablespace] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Tablespace\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Storage] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\User] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No +Grant=Yes + +[FolderOptions\Physical Objects\Database Generation\User\Create] +Physical Options=No + +[FolderOptions\Physical Objects\Database Generation\Group] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\Role] +Create=Yes +Drop=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create] +Default value=Yes +Check=Yes + +[FolderOptions\Physical Objects\Database Generation\AbstractDataType] +Create=Yes +Header=Yes +Footer=Yes +Drop=Yes +Comment=Yes +Install JAVA class=Yes +Remove JAVA class=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Rule] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Default] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Sequence] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create] +Check=Yes +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column] +User datatype=No +Default value=Yes +Check=Yes +Physical Options=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key\Create] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Create] +Constraint declaration=Yes +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Filter] +Primary key=No +Foreign key=Yes +Alternate key=No +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\View] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\View\Create] +Force Column list=No +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewColumn] +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create] +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter] +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\DBMSTrigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym\Filter] +Table=Yes +View=Yes +Proc=Yes +Synonym=Yes +Database Package=Yes +Sequence=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Procedure] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Procedure\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\DatabasePackage] +Create=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\WebService] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Dimension] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synchronization] +GenBackupTabl=1 +GenKeepBackTabl=1 +GenTmpTablDrop=No +GenKeepTablOpts=No + +[FolderOptions\Physical Objects\Test Data] +GenDataPathName= +GenDataSinglefile=Yes +GenDataScriptName=testdata +GenDataScriptName0= +GenDataScriptName1= +GenDataScriptName2= +GenDataScriptName3= +GenDataScriptName4= +GenDataScriptName5= +GenDataScriptName6= +GenDataScriptName7= +GenDataScriptName8= +GenDataScriptName9= +GenDataOdbc=0 +GenDataDelOld=No +GenDataTitle=No +GenDataDefNumRows=20 +GenDataCommit=0 +GenDataPacket=0 +GenDataOwner=No +GenDataProfNumb= +GenDataProfChar= +GenDataProfDate= +GenDataCSVSeparator=, +GenDataFileFormat=CSV +GenDataUseWizard=No + +[FolderOptions\Pdm] +IndxIQName=%COLUMN%_%INDEXTYPE% +IndxPK=Yes +IndxFK=Yes +IndxAK=Yes +IndxPKName=%TABLE%_PK +IndxFKName=%REFR%_FK +IndxAKName=%AKEY%_AK +IndxPreserve=No +IndxThreshold=0 +IndxStats=No +RefrPreserve=No +JidxPreserve=No +RbldMultiFact=Yes +RbldMultiDim=Yes +RbldMultiJidx=Yes +CubePreserve=No +TablStProcPreserve=No +ProcDepPreserve=Yes +TrgrDepPreserve=Yes +CubeScriptPath= +CubeScriptCase=0 +CubeScriptEncoding=ANSI +CubeScriptNacct=No +CubeScriptHeader=No +CubeScriptExt=csv +CubeScriptExt0=txt +CubeScriptExt1= +CubeScriptExt2= +CubeScriptSep=, +CubeScriptDeli=" +EstimationYears=0 +DfltDomnName=D_%.U:VALUE% +DfltColnName=D_%.U:VALUE% +DfltReuse=Yes +DfltDrop=Yes + +[FolderOptions\CheckModel] + +[FolderOptions\CheckModel\Package] + +[FolderOptions\CheckModel\Package\CircularReference] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\ConstraintName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CnstMaxLen] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CircularDependency] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\ShortcutUniqCode] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Package\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table] + +[FolderOptions\CheckModel\Table\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\UniqIndex] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\MaxLen - NAME] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - COLNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - INDXCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - KEYCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\SerialColumnNumber] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyCollYesYes] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\TableIndexes] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\Mapping] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\MappingSFMap] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - PERMCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Table\CheckTablePartitionKey] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableStartDate] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableRefNoLifecycle] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableSourceMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTablePartialColumnMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableKeyColumnMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableNotOnLifecycleTablespace] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column] + +[FolderOptions\CheckModel\Table.Column\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\DomainDivergence] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColumnMandatory] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckNumParam] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckPrecSupLng] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckUndefDttp] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\FkeyDttpDivergence] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\FkeyCheckDivergence] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColnSqncNoKey] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColnSqncDttp] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\SerialColumnFK] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColumnCompExpr] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckColumnOneToOneMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckColumnDataTypeMapping] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckColumnNoMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckDttpIncompatibleFormat] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index] + +[FolderOptions\CheckModel\Table.Index\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\EmptyColl - CIDXCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\UndefIndexType] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\IndexColumnCount] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\IQIndxHNGUniq] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\CheckIncludeColl - Tabl] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\ORACLE10g_Index_Check_Column_Expression] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\ORA11GR1_Index_Check_Column_Encryption] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\ORA11GR1_Index_Check_Column_Expression] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key] + +[FolderOptions\CheckModel\Table.Key\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\EmptyColl - COLNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\CheckIncludeColl - Tabl] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\MultiKeySqnc] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger] + +[FolderOptions\CheckModel\Table.Trigger\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index] + +[FolderOptions\CheckModel\Join Index\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\EmptyColl - JIDXTABL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\JidxRefr] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\IQJoinIndexRelationships] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\IQJoinIndexDuplicates] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\ORACLE10g_JoinIndex_Join_Index_Namespace] +CheckSeverity=No +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Join Index\ORA11GR1_JoinIndex_Join_Index_Namespace] +CheckSeverity=No +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Join Index\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View] + +[FolderOptions\CheckModel\View\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\EmptyColl - PERMCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\View\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index] + +[FolderOptions\CheckModel\View.View Index\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\EmptyColl - CIDXCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\IndexColumnCount] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\CheckIncludeColl - Tabl] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference] + +[FolderOptions\CheckModel\Reference\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\Reflexive] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\EmptyColl - RFJNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\IncompleteJoin] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\JoinOrder] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\ORACLE10g_Reference_Rely_reference_on_Rely_primary_key] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\ORA11GR1_Reference_Rely_reference_on_Rely_primary_key] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference] + +[FolderOptions\CheckModel\View Reference\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\EmptyColl - VRFJNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain] + +[FolderOptions\CheckModel\Domain\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckNumParam] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckPrecSupLng] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckUndefDttp] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckDttpIncompatibleFormat] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default] + +[FolderOptions\CheckModel\Default\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DfltValeEmpty] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DfltSameVale] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User] + +[FolderOptions\CheckModel\User\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\UniquePassword] +CheckSeverity=No +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\User\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group] + +[FolderOptions\CheckModel\Group\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\EmptyColl - USERCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\UniquePassword] +CheckSeverity=No +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Group\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role] + +[FolderOptions\CheckModel\Role\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\EmptyColl - USERCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure] + +[FolderOptions\CheckModel\Procedure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\ProcBodyEmpty] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\EmptyColl - PERMCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Procedure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger] + +[FolderOptions\CheckModel\DBMS Trigger\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\DbmsTriggerEvent] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\ORACLE10g_DBMSTrigger_Trigger_event_with_inappropriate_time] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\ORA11GR1_DBMSTrigger_Trigger_event_with_inappropriate_time] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source] + +[FolderOptions\CheckModel\Data Source\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\EmptyColl - MODLSRC] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\DtscTargets] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\CheckDataSourceModels] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning] + +[FolderOptions\CheckModel\Horizontal Partitioning\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning\EmptyColl - PARTCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning\TargetTables] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning] + +[FolderOptions\CheckModel\Vertical Partitioning\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning\EmptyColl - PARTCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning\TargetTables] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing] + +[FolderOptions\CheckModel\Table Collapsing\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing\EmptyColl - TargetTable] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing\TargetTables] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube] + +[FolderOptions\CheckModel\Cube\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\EmptyColl - ALLOLINKCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\EmptyColl - Facts] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\CubeDupAssociation] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Cube\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact] + +[FolderOptions\CheckModel\Fact\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\EmptyColl - MEASCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\Mapping] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\MappingSFMap] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension] + +[FolderOptions\CheckModel\Dimension\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\EmptyColl - DATTRCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\EmptyColl - HIERCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DimnDupHierarchy] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DimnDefHierarchy] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\Mapping] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\MappingSFMap] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\SerialColumnNumber] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association] + +[FolderOptions\CheckModel\Association\EmptyColl - Hierarchy] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute] + +[FolderOptions\CheckModel\Dimension.Attribute\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure] + +[FolderOptions\CheckModel\Fact.Measure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy] + +[FolderOptions\CheckModel\Dimension.Hierarchy\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\ORACLE10g_DimensionHierarchy_Minimum_number_of_attributes] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\EmptyColl - DATTRCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\ORA11GR1_DimensionHierarchy_Minimum_number_of_attributes] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym] + +[FolderOptions\CheckModel\Synonym\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\MaxLen - NAME] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\EmptyColl - BASEOBJ] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type] + +[FolderOptions\CheckModel\Abstract Data Type\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\AdtInstantiable] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\AdtAbstractUsed] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure] + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\AdtProcUniqName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\ReturnDataType] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package] + +[FolderOptions\CheckModel\Database Package\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\MaxLen - NAME] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\EmptyColl - PROCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\EmptyColl - CURCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package\EmptyColl - VARCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package\EmptyColl - TYPCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package\EmptyColl - EXCCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure] + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\EmptyColl - PARM] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\ReturnDataType] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence] + +[FolderOptions\CheckModel\Sequence\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor] + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\ReturnDataType] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\EmptyColl - PARM] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable] + +[FolderOptions\CheckModel\Database Package.Database Package Variable\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUndefDttp] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type] + +[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception] + +[FolderOptions\CheckModel\Database Package.Database Package Exception\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace] + +[FolderOptions\CheckModel\Tablespace\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\IsObjectUsed] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\ORACLE10g_Tablespace_Tablespace_Undo_and_Temporary] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\ORA11GR1_Tablespace_Tablespace_Undo_and_Temporary] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage] + +[FolderOptions\CheckModel\Storage\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\IsObjectUsed] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database] + +[FolderOptions\CheckModel\Database\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\IsObjectUsed] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service] + +[FolderOptions\CheckModel\Web Service\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation] + +[FolderOptions\CheckModel\Web Service.Web Operation\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle] + +[FolderOptions\CheckModel\Lifecycle\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckLifecyclePhase] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckLifecycleRetention] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckPartitionRange] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase] + +[FolderOptions\CheckModel\Lifecycle.Phase\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseTbspace] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseIQTbspace] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseDuplicateTbspace] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseTbspaceCurrency] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseRetention] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseIdlePeriod] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseDataSource] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseExternalOnFirst] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Replication] + +[FolderOptions\CheckModel\Replication\PartialReplication] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule] + +[FolderOptions\CheckModel\Business Rule\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\EmptyColl - OBJCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object] + +[FolderOptions\CheckModel\Extended Object\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\ORA11GR1_ExtendedObject_Cluster_Hash_cluster_index] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link] + +[FolderOptions\CheckModel\Extended Link\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File] + +[FolderOptions\CheckModel\File\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\CheckPathExists] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Physical Data Model] + +[FolderOptions\CheckModel\Physical Data Model\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Physical Data Model\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Physical Data Model\ORA11GR1_Model_Encryption_Password_existence] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Physical Data Model\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Physical Data Model\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Physical Data Model\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Physical Data Model\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format] + +[FolderOptions\CheckModel\Data Format\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\CheckDataFormatNullExpression] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes +[ModelOptions] + +[ModelOptions\Physical Objects] +CaseSensitive=No +DisplayName=Yes +EnableTrans=No +UseTerm=No +EnableRequirements=No +EnableFullShortcut=No +DefaultDttp= +IgnoreOwner=No +RebuildTrigger=Yes +RefrUnique=No +RefrAutoMigrate=Yes +RefrMigrateReuse=Yes +RefrMigrateDomain=Yes +RefrMigrateCheck=Yes +RefrMigrateRule=Yes +RefrMigrateExtd=No +RefrMigrDefaultLink=No +RefrDfltImpl=D +RefrPrgtColn=No +RefrMigrateToEnd=No +RebuildTriggerDep=No +ColnFKName=%.3:PARENT%_%COLUMN% +ColnFKNameUse=No +DomnCopyDttp=Yes +DomnCopyChck=No +DomnCopyRule=No +DomnCopyMand=No +DomnCopyExtd=No +DomnCopyProf=No +Notation=0 +DomnDefaultMandatory=No +ColnDefaultMandatory=No +TablDefaultOwner= +ViewDefaultOwner= +TrgrDefaultOwnerTabl= +TrgrDefaultOwnerView= +IdxDefaultOwnerTabl= +IdxDefaultOwnerView= +JdxDefaultOwner= +DBPackDefaultOwner= +SeqDefaultOwner= +ProcDefaultOwner= +DBMSTrgrDefaultOwner= +Currency=USD +RefrDeleteConstraint=1 +RefrUpdateConstraint=1 +RefrParentMandatory=No +RefrParentChangeAllow=Yes +RefrCheckOnCommit=No + +[ModelOptions\Physical Objects\NamingOptionsTemplates] + +[ModelOptions\Physical Objects\ClssNamingOptions] + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG] + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN] + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\TABL] + +[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Code] +Template= +MaxLen=30 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\COLN] + +[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Code] +Template= +MaxLen=30 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\INDX] + +[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\REFR] + +[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VREF] + +[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEW] + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Code] +Template= +MaxLen=30 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC] + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV] + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Code] +Template= +MaxLen=254 +Case=M +ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()" +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP] + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Code] +Template= +MaxLen=254 +Case=M +ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()" +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM] + +[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FACT] + +[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DIMN] + +[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\CUBE] + +[ModelOptions\Physical Objects\ClssNamingOptions\CUBE\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\CUBE\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\MEAS] + +[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DATTR] + +[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FILO] + +[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ] + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK] + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass] + +[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=D:\工作软件\PowerDesigner 15\Resource Files\Conversion Tables + +[ModelOptions\Connection] + +[ModelOptions\Pdm] + +[ModelOptions\Generate] + +[ModelOptions\Generate\Pdm] +RRMapping=No + +[ModelOptions\Generate\Cdm] +CheckModel=Yes +SaveLinks=Yes +NameToCode=No +Notation=2 + +[ModelOptions\Generate\Oom] +CheckModel=Yes +SaveLinks=Yes +ORMapping=No +NameToCode=Yes +ClassPrefix= + +[ModelOptions\Generate\Xsm] +CheckModel=Yes +SaveLinks=Yes +ORMapping=No +NameToCode=No + +[ModelOptions\Generate\Ldm] +CheckModel=Yes +SaveLinks=Yes +NameToCode=No + +[ModelOptions\Default Opts] + +[ModelOptions\Default Opts\TABL] +PhysOpts= + +[ModelOptions\Default Opts\COLN] +PhysOpts= + +[ModelOptions\Default Opts\INDX] +PhysOpts= + +[ModelOptions\Default Opts\AKEY] +PhysOpts= + +[ModelOptions\Default Opts\PKEY] +PhysOpts= + +[ModelOptions\Default Opts\STOR] +PhysOpts= + +[ModelOptions\Default Opts\TSPC] +PhysOpts= + +[ModelOptions\Default Opts\SQNC] +PhysOpts= + +[ModelOptions\Default Opts\DTBS] +PhysOpts= + +[ModelOptions\Default Opts\USER] +PhysOpts= + +[ModelOptions\Default Opts\JIDX] +PhysOpts= + +[ModelOptions\Default Opts\FRMEOBJ<<Cluster>>] +PhysOpts= + +[ModelOptions\Default Opts\FRMEOBJ<<MaterializedViewLog>>] +PhysOpts= + +[ModelOptions\Default Opts\FRMESOB<<Cluster>>] +PhysOpts= + +[ModelOptions\Default Opts\FRMESOB<<MaterializedViewLog>>] +PhysOpts= + +[ModelOptions\Default Opts\FRMESOB<<ClusterIndex>>] +PhysOpts= +{BAE632F3-AC04-4059-9893-259ABA89351C},ORA11GR1,220={34547757-F8C8-45D1-9453-38C7A6C7FEF0},AutoFixClusterIndexesDone,4=true +{EFD6ACEF-B17B-4809-8139-2A448365E86C},AutoFixMaterializedViewDone,4=true +{0DF03778-2F9C-42B9-9746-AFD816115F7F},AutoFixTempAttributeDone,4=true + + + + +BB76597F-BCFF-4032-8237-A5D2CA88F447 +ODBC 3.0 +ODBC 3 +1718271869 +wangzg +1718271869 +wangzg + +A8334AA1-B463-4BAB-9885-05DC861515BE +4BA9F647-DAB1-11D1-9944-006097355D9B + + + + +FF1292BC-017F-437C-BAE8-294D6F8151A8 +WTAI +WTAI +1389407057 +Administrator +1717468473 +wangzg +[DisplayPreferences] + +[DisplayPreferences\PDM] + +[DisplayPreferences\General] +Adjust to text=Yes +Snap Grid=No +Constrain Labels=Yes +Display Grid=No +Show Page Delimiter=No +Show Links intersections=No +Activate automatic link routing=No +Grid size=800 +Graphic unit=2 +Window color=255 255 255 +Background image= +Background mode=8 +Watermark image= +Watermark mode=8 +Show watermark on screen=No +Gradient mode=0 +Gradient end color=255 255 255 +Show Swimlane=No +SwimlaneVert=Yes +TreeVert=No +CompDark=0 + +[DisplayPreferences\Object] +Show Icon=No +Mode=0 +Trunc Length=80 +Word Length=80 +Word Text=!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~ +Shortcut IntIcon=Yes +Shortcut IntLoct=Yes +Shortcut IntFullPath=No +Shortcut IntLastPackage=Yes +Shortcut ExtIcon=Yes +Shortcut ExtLoct=No +Shortcut ExtFullPath=No +Shortcut ExtLastPackage=Yes +Shortcut ExtIncludeModl=Yes +EObjShowStrn=Yes +ExtendedObject.Comment=No +ExtendedObject.IconPicture=No +ExtendedObject.TextStyle=No +ExtendedObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Object Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +ELnkShowStrn=Yes +ELnkShowName=Yes +ExtendedLink_SymbolLayout=<Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Source" >[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] </Form>[CRLF]</Form> +FileObject.Stereotype=No +FileObject.DisplayName=Yes +FileObject.LocationOrName=No +FileObject.IconPicture=No +FileObject.TextStyle=No +FileObject.IconMode=Yes +FileObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Location" Attribute="LocationOrName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Package.Stereotype=Yes +Package.Comment=No +Package.IconPicture=No +Package.TextStyle=No +Package_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Display Model Version=Yes +Table.Stereotype=Yes +Table.DisplayName=Yes +Table.OwnerDisplayName=No +Table.Columns=Yes +Table.Columns._Filter= +Table.Columns._Columns=Stereotype DataType KeyIndicator +Table.Columns._Limit=-5 +Table.Keys=No +Table.Keys._Columns=Stereotype Indicator +Table.Indexes=No +Table.Indexes._Columns=Stereotype +Table.Triggers=No +Table.Triggers._Columns=Stereotype +Table.Comment=No +Table.IconPicture=No +Table.TextStyle=No +Table_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No" Filters="&quot;All Columns&quot; PDMCOLNALL &quot;&quot;\r\n&quot;PK Columns&quot; PDMCOLNPK &quot;PRIM \&quot;TRUE\&quot; TRUE&quot;\r\n&quot;Key Columns&quot; PDMCOLNKEY &quot;KEYS \&quot;TRUE\&quot; TRUE&quot;" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Keys" Collection="Keys" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Triggers" Collection="Triggers" Columns="Stereotype No\r\nDisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +View.Stereotype=Yes +View.DisplayName=Yes +View.OwnerDisplayName=No +View.Columns=Yes +View.Columns._Columns=DisplayName +View.Columns._Limit=-5 +View.TemporaryVTables=Yes +View.Indexes=No +View.Comment=No +View.IconPicture=No +View.TextStyle=No +View_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nIndexIndicator No" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Tables" Collection="TemporaryVTables" Columns="Name Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="DisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Procedure.Stereotype=No +Procedure.DisplayName=Yes +Procedure.OwnerDisplayName=No +Procedure.Comment=No +Procedure.IconPicture=No +Procedure.TextStyle=No +Procedure_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Reference.Cardinality=No +Reference.ImplementationType=No +Reference.ChildRole=Yes +Reference.Stereotype=Yes +Reference.DisplayName=No +Reference.ForeignKeyConstraintName=No +Reference.JoinExpression=No +Reference.Integrity=No +Reference.ParentRole=Yes +Reference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Cardinality" Attribute="Cardinality" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Implementation" Attribute="ImplementationType" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Cons&amp;traint Name" Attribute="ForeignKeyConstraintName" Prefix="" Suffix="" Caption="Cons&amp;traint Name" Mandatory="No" />[CRLF] <StandardAttribute Name="Join" Attribute="JoinExpression" Prefix="" Suffix="" Caption="Join" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Referential integrity" Attribute="Integrity" Prefix="" Suffix="" Caption="Referential integrity" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> +ViewReference.ChildRole=Yes +ViewReference.Stereotype=Yes +ViewReference.DisplayName=No +ViewReference.JoinExpression=No +ViewReference.ParentRole=Yes +ViewReference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Join Expression" Attribute="JoinExpression" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> +PckgShowStrn=Yes + +[DisplayPreferences\Symbol] + +[DisplayPreferences\Symbol\FRMEOBJ] +STRNFont=Arial,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=Arial,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=Arial,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=6000 +Height=2000 +Brush color=255 255 255 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=64 +Brush gradient color=192 192 192 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 255 128 128 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FRMELNK] +CENTERFont=Arial,8,N +CENTERFont color=0, 0, 0 +Line style=2 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FILO] +OBJSTRNFont=新宋体,8,N +OBJSTRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LCNMFont=新宋体,8,N +LCNMFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=Yes +Keep center=Yes +Keep size=No +Width=2400 +Height=2400 +Brush color=255 255 255 +Fill Color=No +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 0 255 +Shadow color=192 192 192 +Shadow=-1 + +[DisplayPreferences\Symbol\PDMPCKG] +STRNFont=Arial,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=Arial,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=Arial,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=3600 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 178 178 178 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\TABL] +STRNFont=Arial,8,N +STRNFont color=0 0 0 +DISPNAMEFont=Arial,8,N +DISPNAMEFont color=0 0 0 +OWNRDISPNAMEFont=Arial,8,N +OWNRDISPNAMEFont color=0 0 0 +ColumnsFont=Arial,8,N +ColumnsFont color=0 0 0 +TablePkColumnsFont=Arial,8,U +TablePkColumnsFont color=0 0 0 +TableFkColumnsFont=Arial,8,N +TableFkColumnsFont color=0 0 0 +KeysFont=Arial,8,N +KeysFont color=0 0 0 +IndexesFont=Arial,8,N +IndexesFont color=0 0 0 +TriggersFont=Arial,8,N +TriggersFont color=0 0 0 +LABLFont=Arial,8,N +LABLFont color=0 0 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=210 137 2 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 64 0 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VIEW] +STRNFont=Arial,8,N +STRNFont color=0 0 0 +DISPNAMEFont=Arial,8,N +DISPNAMEFont color=0 0 0 +OWNRDISPNAMEFont=Arial,8,N +OWNRDISPNAMEFont color=0 0 0 +ColumnsFont=Arial,8,N +ColumnsFont color=0 0 0 +TablePkColumnsFont=新宋体,8,U +TablePkColumnsFont color=0, 0, 0 +TableFkColumnsFont=新宋体,8,N +TableFkColumnsFont color=0, 0, 0 +TemporaryVTablesFont=Arial,8,N +TemporaryVTablesFont color=0 0 0 +IndexesFont=Arial,8,N +IndexesFont color=0 0 0 +LABLFont=Arial,8,N +LABLFont color=0 0 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=233 202 131 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 128 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\PROC] +STRNFont=Arial,8,N +STRNFont color=0 0 0 +DISPNAMEFont=Arial,8,N +DISPNAMEFont color=0 0 0 +OWNRDISPNAMEFont=Arial,8,N +OWNRDISPNAMEFont color=0 0 0 +LABLFont=Arial,8,N +LABLFont color=0 0 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4000 +Height=1000 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 108 0 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\REFR] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=2 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 0 64 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VREF] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=2 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 0 64 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\USRDEPD] +OBJXSTRFont=Arial,8,N +OBJXSTRFont color=0 0 0 +Line style=0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=2 0 128 0 64 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\Free Symbol] +Free TextFont=Arial,8,N +Free TextFont color=0 0 0 +Line style=2 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 64 0 +Shadow color=192 192 192 +Shadow=0 +(8268, 11693) +((315,354), (433,354)) +1 +15 + + +1515999808 +1515999862 +-1 +((-51854,-156770), (62778,-73776)) +0 +11711154 +12648447 +12632256 +STRN 0 Arial,8,N +DISPNAME 0 Arial,8,N +LABL 0 Arial,8,N +6 +65 +16777215 +1 + + + + + +1483083532 +1483083608 +-1 +((-21431,-64325), (34857,-28693)) +0 +11711154 +12648447 +12632256 +STRN 0 Arial,8,N +DISPNAME 0 Arial,8,N +LABL 0 Arial,8,N +6 +65 +16777215 +1 + + + + + +1483083488 +1483587830 +((5793,-74521), (5893,-64254)) +((5793,-64254),(5793,-74521)) +2 +4130 +0 +16512 +12632256 +Arial,8,N + + +1438776288 +1717467032 +-1 +((-73321,-71026), (-70922,-68627)) +16711680 +16777215 +12632256 +OBJSTRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +LCNM 0 新宋体,8,N +1 +1 + + + + + +{\rtf1\ansi\ansicpg936\deff0\nouicompat\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fcharset134 \'ce\'a2\'c8\'ed\'d1\'c5\'ba\'da;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}} +{\*\generator Riched20 10.0.14393}\viewkind4\uc1 +\pard\f0\fs20\lang2052\'c8\'a8\'cf\'de\'be\'f6\'b2\'df\'cf\'b5\'cd\'b3\f1\par +} + +1483083644 +1483588073 +((6724,-65163), (14606,-69887)) +4130 +0 +16512 +8454143 +12632256 +Arial,8,N +1 + + +{\rtf1\ansi\ansicpg936\deff0\nouicompat\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fcharset134 \'ce\'a2\'c8\'ed\'d1\'c5\'ba\'da;}{\f1\fnil Microsoft Sans Serif;}{\f2\fnil\fcharset0 Microsoft Sans Serif;}} +{\colortbl ;\red0\green0\blue0;\red255\green255\blue255;} +{\*\generator Riched20 10.0.14393}\viewkind4\uc1 +\pard\b\i\f0\fs24\lang2052\'ca\'d4\'be\'ae\'c8\'ed\'bc\'fe\'cf\'b5\'cd\'b3\'ca\'fd\'be\'dd\'bf\'e2\'c9\'e8\'bc\'c6\b0\i0\fs20\par +\cf1\highlight2\i\f1\lang1033 MPA_DataStructure_v0.9\par +\par +\f2 Author: wangzg\par +Date: 2016-12-29\cf0\highlight0\i0\lang2052\par +} + +1483083802 +1483083964 +((-62109,-46987), (-42455,-58873)) +4130 +0 +16512 +8454143 +12632256 +Arial,8,N +1 + + + + + + +4644B4E3-60CA-4828-8F07-0FC48442C44C +Package_1 +Package_1 +1483083532 +wangzg +1483588835 +wangzg +[FolderOptions] + +[FolderOptions\Physical Objects] +GenerationCheckModel=Yes +GenerationPath= +GenerationOptions= +GenerationTasks= +GenerationTargets= +GenerationSelections= +RevPkey=Yes +RevFkey=Yes +RevAkey=Yes +RevCheck=Yes +RevIndx=Yes +RevOpts=Yes +RevViewAsTabl=No +RevViewOpts=Yes +RevSystAsTabl=Yes +RevTablPerm=No +RevViewPerm=No +RevProcPerm=No +RevDbpkPerm=No +RevSqncPerm=No +RevAdtPerm=No +RevUserPriv=No +RevUserOpts=No +RevGrpePriv=No +RevRolePriv=No +RevDtbsOpts=Yes +RevDtbsPerm=No +RevViewIndx=Yes +RevJidxOpts=Yes +RevStats=No +RevTspcPerm=No +RevCaseSensitive=No +GenTrgrStdMsg=Yes +GenTrgrMsgTab= +GenTrgrMsgNo= +GenTrgrMsgTxt= +TrgrPreserve=No +TrgrIns=Yes +TrgrUpd=Yes +TrgrDel=Yes +TrgrC2Ins=Yes +TrgrC2Upd=Yes +TrgrC3=Yes +TrgrC4=Yes +TrgrC5=Yes +TrgrC6=Yes +TrgrC7=Yes +TrgrC8=Yes +TrgrC9=Yes +TrgrC10=Yes +TrgrC11=Yes +TrgrC1=Yes +TrgrC12Ins=Yes +TrgrC12Upd=Yes +TrgrC13=Yes +UpdateTableStatistics=Yes +UpdateColumnStatistics=Yes + +[FolderOptions\Physical Objects\Database Generation] +GenScriptName=crebas +GenScriptName0= +GenScriptName1= +GenScriptName2= +GenScriptName3= +GenScriptName4= +GenScriptName5= +GenScriptName6= +GenScriptName7= +GenScriptName8= +GenScriptName9= +GenPathName= +GenSingleFile=Yes +GenODBC=No +GenCheckModel=Yes +GenScriptPrev=Yes +GenArchiveModel=No +GenUseSync=No +GenSyncChoice=0 +GenSyncArch= +GenSyncRmg=0 + +[FolderOptions\Physical Objects\Database Generation\Format] +GenScriptTitle=Yes +GenScriptNamLabl=No +GenScriptQDtbs=Yes +GenScriptQOwnr=Yes +GenScriptCase=0 +GenScriptEncoding=ANSI +GenScriptNAcct=No +IdentifierDelimiter=" + +[FolderOptions\Physical Objects\Database Generation\Database] +Create=Yes +Open=Yes +Close=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Database\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Tablespace] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Tablespace\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Storage] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\User] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No +Grant=Yes + +[FolderOptions\Physical Objects\Database Generation\User\Create] +Physical Options=No + +[FolderOptions\Physical Objects\Database Generation\Group] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\Role] +Create=Yes +Drop=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create] +Default value=Yes +Check=Yes + +[FolderOptions\Physical Objects\Database Generation\AbstractDataType] +Create=Yes +Header=Yes +Footer=Yes +Drop=Yes +Comment=Yes +Install JAVA class=Yes +Remove JAVA class=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Rule] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Default] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Sequence] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create] +Check=Yes +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column] +User datatype=Yes +Default value=Yes +Check=Yes +Physical Options=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key\Create] +Constraint declaration=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Create] +Constraint declaration=Yes +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Filter] +Primary key=Yes +Foreign key=Yes +Alternate key=Yes +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\View] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\View\Create] +Force Column list=No +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewColumn] +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create] +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter] +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\DBMSTrigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym\Filter] +Table=Yes +View=Yes +Proc=Yes +Synonym=Yes +Database Package=Yes +Sequence=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Procedure] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Procedure\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\DatabasePackage] +Create=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\WebService] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Dimension] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synchronization] +GenBackupTabl=1 +GenKeepBackTabl=1 +GenTmpTablDrop=No +GenKeepTablOpts=No + +[FolderOptions\Physical Objects\Test Data] +GenDataPathName= +GenDataSinglefile=Yes +GenDataScriptName=testdata +GenDataScriptName0= +GenDataScriptName1= +GenDataScriptName2= +GenDataScriptName3= +GenDataScriptName4= +GenDataScriptName5= +GenDataScriptName6= +GenDataScriptName7= +GenDataScriptName8= +GenDataScriptName9= +GenDataOdbc=0 +GenDataDelOld=No +GenDataTitle=No +GenDataDefNumRows=20 +GenDataCommit=0 +GenDataPacket=0 +GenDataOwner=No +GenDataProfNumb= +GenDataProfChar= +GenDataProfDate= +GenDataCSVSeparator=, +GenDataFileFormat=CSV +GenDataUseWizard=No + +[FolderOptions\Pdm] +IndxIQName=%COLUMN%_%INDEXTYPE% +IndxPK=Yes +IndxFK=Yes +IndxAK=Yes +IndxPKName=%TABLE%_PK +IndxFKName=%REFR%_FK +IndxAKName=%AKEY%_AK +IndxPreserve=No +IndxThreshold=0 +IndxStats=No +RefrPreserve=No +JidxPreserve=No +RbldMultiFact=Yes +RbldMultiDim=Yes +RbldMultiJidx=Yes +CubePreserve=No +TablStProcPreserve=No +ProcDepPreserve=Yes +TrgrDepPreserve=Yes +CubeScriptPath= +CubeScriptCase=0 +CubeScriptEncoding=ANSI +CubeScriptNacct=No +CubeScriptHeader=No +CubeScriptExt=csv +CubeScriptExt0=txt +CubeScriptExt1= +CubeScriptExt2= +CubeScriptSep=, +CubeScriptDeli=" +EstimationYears=0 +DfltDomnName=D_%.U:VALUE% +DfltColnName=D_%.U:VALUE% +DfltReuse=Yes +DfltDrop=Yes + + +1BFB6921-9233-41E3-B54D-94E643F2A66D +PhysicalDiagram_1 +PhysicalDiagram_1 +1483083532 +wangzg +1483083532 +wangzg +[DisplayPreferences] + +[DisplayPreferences\PDM] + +[DisplayPreferences\General] +Adjust to text=Yes +Snap Grid=No +Constrain Labels=Yes +Display Grid=No +Show Page Delimiter=Yes +Show Links intersections=No +Activate automatic link routing=No +Grid size=0 +Graphic unit=2 +Window color=255, 255, 255 +Background image= +Background mode=8 +Watermark image= +Watermark mode=8 +Show watermark on screen=No +Gradient mode=0 +Gradient end color=255, 255, 255 +Show Swimlane=No +SwimlaneVert=Yes +TreeVert=No +CompDark=0 + +[DisplayPreferences\Object] +Show Icon=No +Mode=2 +Trunc Length=40 +Word Length=40 +Word Text=!"#$%&')*+,-./:;=>?@\]^_`|}~ +Shortcut IntIcon=Yes +Shortcut IntLoct=Yes +Shortcut IntFullPath=No +Shortcut IntLastPackage=Yes +Shortcut ExtIcon=Yes +Shortcut ExtLoct=No +Shortcut ExtFullPath=No +Shortcut ExtLastPackage=Yes +Shortcut ExtIncludeModl=Yes +EObjShowStrn=Yes +ExtendedObject.Comment=No +ExtendedObject.IconPicture=No +ExtendedObject.TextStyle=No +ExtendedObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Object Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +ELnkShowStrn=Yes +ELnkShowName=Yes +ExtendedLink_SymbolLayout=<Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Source" >[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] </Form>[CRLF]</Form> +FileObject.Stereotype=No +FileObject.DisplayName=Yes +FileObject.LocationOrName=No +FileObject.IconPicture=No +FileObject.TextStyle=No +FileObject.IconMode=Yes +FileObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Location" Attribute="LocationOrName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Package.Stereotype=Yes +Package.Comment=No +Package.IconPicture=No +Package.TextStyle=No +Package_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Display Model Version=Yes +Table.Stereotype=Yes +Table.DisplayName=Yes +Table.OwnerDisplayName=No +Table.Columns=Yes +Table.Columns._Filter= +Table.Columns._Columns=Stereotype DataType KeyIndicator +Table.Columns._Limit=-5 +Table.Keys=No +Table.Keys._Columns=Stereotype Indicator +Table.Indexes=No +Table.Indexes._Columns=Stereotype +Table.Triggers=No +Table.Triggers._Columns=Stereotype +Table.Comment=No +Table.IconPicture=No +Table.TextStyle=No +Table_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No" Filters="&quot;All Columns&quot; PDMCOLNALL &quot;&quot;\r\n&quot;PK Columns&quot; PDMCOLNPK &quot;PRIM \&quot;TRUE\&quot; TRUE&quot;\r\n&quot;Key Columns&quot; PDMCOLNKEY &quot;KEYS \&quot;TRUE\&quot; TRUE&quot;" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Keys" Collection="Keys" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Triggers" Collection="Triggers" Columns="Stereotype No\r\nDisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +View.Stereotype=Yes +View.DisplayName=Yes +View.OwnerDisplayName=No +View.Columns=Yes +View.Columns._Columns=DisplayName +View.Columns._Limit=-5 +View.TemporaryVTables=Yes +View.Indexes=No +View.Comment=No +View.IconPicture=No +View.TextStyle=No +View_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nIndexIndicator No" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Tables" Collection="TemporaryVTables" Columns="Name Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="DisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Procedure.Stereotype=No +Procedure.DisplayName=Yes +Procedure.OwnerDisplayName=No +Procedure.Comment=No +Procedure.IconPicture=No +Procedure.TextStyle=No +Procedure_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Reference.Cardinality=No +Reference.ImplementationType=No +Reference.ChildRole=Yes +Reference.Stereotype=Yes +Reference.DisplayName=No +Reference.ForeignKeyConstraintName=No +Reference.JoinExpression=No +Reference.Integrity=No +Reference.ParentRole=Yes +Reference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Cardinality" Attribute="Cardinality" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Implementation" Attribute="ImplementationType" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Cons&amp;traint Name" Attribute="ForeignKeyConstraintName" Prefix="" Suffix="" Caption="Cons&amp;traint Name" Mandatory="No" />[CRLF] <StandardAttribute Name="Join" Attribute="JoinExpression" Prefix="" Suffix="" Caption="Join" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Referential integrity" Attribute="Integrity" Prefix="" Suffix="" Caption="Referential integrity" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> +ViewReference.ChildRole=Yes +ViewReference.Stereotype=Yes +ViewReference.DisplayName=No +ViewReference.JoinExpression=No +ViewReference.ParentRole=Yes +ViewReference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Join Expression" Attribute="JoinExpression" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> + +[DisplayPreferences\Symbol] + +[DisplayPreferences\Symbol\FRMEOBJ] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=6000 +Height=2000 +Brush color=255 255 255 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=64 +Brush gradient color=192 192 192 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 255 128 128 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FRMELNK] +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FILO] +OBJSTRNFont=新宋体,8,N +OBJSTRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LCNMFont=新宋体,8,N +LCNMFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=3600 +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 0 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\PDMPCKG] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 178 178 178 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\TABL] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +ColumnsFont=新宋体,8,N +ColumnsFont color=0, 0, 0 +TablePkColumnsFont=新宋体,8,U +TablePkColumnsFont color=0, 0, 0 +TableFkColumnsFont=新宋体,8,N +TableFkColumnsFont color=0, 0, 0 +KeysFont=新宋体,8,N +KeysFont color=0, 0, 0 +IndexesFont=新宋体,8,N +IndexesFont color=0, 0, 0 +TriggersFont=新宋体,8,N +TriggersFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=178 214 252 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VIEW] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +ColumnsFont=新宋体,8,N +ColumnsFont color=0, 0, 0 +TablePkColumnsFont=新宋体,8,U +TablePkColumnsFont color=0, 0, 0 +TableFkColumnsFont=新宋体,8,N +TableFkColumnsFont color=0, 0, 0 +TemporaryVTablesFont=新宋体,8,N +TemporaryVTablesFont color=0, 0, 0 +IndexesFont=新宋体,8,N +IndexesFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=208 208 255 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\PROC] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4000 +Height=1000 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 108 0 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\REFR] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VREF] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\USRDEPD] +OBJXSTRFont=新宋体,8,N +OBJXSTRFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=2 0 128 128 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\Free Symbol] +Free TextFont=新宋体,8,N +Free TextFont color=0, 0, 0 +Line style=0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 0 255 +Shadow color=192 192 192 +Shadow=0 +(8268, 11693) +((315,354), (433,354)) +1 +1 + + + + + + + +AB6D6BC6-E073-46BC-BABB-E25146BC3BE6 +DataTables +DataTables +1515999808 +wangzg +1515999986 +wangzg +[FolderOptions] + +[FolderOptions\Physical Objects] +GenerationCheckModel=Yes +GenerationPath= +GenerationOptions= +GenerationTasks= +GenerationTargets= +GenerationSelections= +RevPkey=Yes +RevFkey=Yes +RevAkey=Yes +RevCheck=Yes +RevIndx=Yes +RevOpts=Yes +RevViewAsTabl=No +RevViewOpts=Yes +RevSystAsTabl=Yes +RevTablPerm=No +RevViewPerm=No +RevProcPerm=No +RevDbpkPerm=No +RevSqncPerm=No +RevAdtPerm=No +RevUserPriv=No +RevUserOpts=No +RevGrpePriv=No +RevRolePriv=No +RevDtbsOpts=Yes +RevDtbsPerm=No +RevViewIndx=Yes +RevJidxOpts=Yes +RevStats=No +RevTspcPerm=No +RevCaseSensitive=No +GenTrgrStdMsg=Yes +GenTrgrMsgTab= +GenTrgrMsgNo= +GenTrgrMsgTxt= +TrgrPreserve=No +TrgrIns=Yes +TrgrUpd=Yes +TrgrDel=Yes +TrgrC2Ins=Yes +TrgrC2Upd=Yes +TrgrC3=Yes +TrgrC4=Yes +TrgrC5=Yes +TrgrC6=Yes +TrgrC7=Yes +TrgrC8=Yes +TrgrC9=Yes +TrgrC10=Yes +TrgrC11=Yes +TrgrC1=Yes +TrgrC12Ins=Yes +TrgrC12Upd=Yes +TrgrC13=Yes +UpdateTableStatistics=Yes +UpdateColumnStatistics=Yes + +[FolderOptions\Physical Objects\Database Generation] +GenScriptName=MPA_SQLite_V1.3.sql +GenScriptName0=MPA_SQLite_V1.3.sql +GenScriptName1=MPA_SQLite_V1.0.sql +GenScriptName2=MPA_Oracle11g_V0.91111.sql +GenScriptName3=MPA_Oracle11g_V0.9.sql +GenScriptName4=MPA_SQLite_V0.9.sql +GenScriptName5= +GenScriptName6= +GenScriptName7= +GenScriptName8= +GenScriptName9= +GenPathName=E:\Run\iMPA\Bin\Doc\ +GenSingleFile=Yes +GenODBC=No +GenCheckModel=Yes +GenScriptPrev=Yes +GenArchiveModel=No +GenUseSync=No +GenSyncChoice=0 +GenSyncArch= +GenSyncRmg=0 + +[FolderOptions\Physical Objects\Database Generation\Format] +GenScriptTitle=Yes +GenScriptNamLabl=No +GenScriptQDtbs=Yes +GenScriptQOwnr=Yes +GenScriptCase=0 +GenScriptEncoding=ANSI +GenScriptNAcct=No +IdentifierDelimiter=" + +[FolderOptions\Physical Objects\Database Generation\Database] +Create=Yes +Open=Yes +Close=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Database\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Tablespace] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Tablespace\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Storage] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\User] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No +Grant=Yes + +[FolderOptions\Physical Objects\Database Generation\User\Create] +Physical Options=No + +[FolderOptions\Physical Objects\Database Generation\Group] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\Role] +Create=Yes +Drop=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create] +Default value=Yes +Check=Yes + +[FolderOptions\Physical Objects\Database Generation\AbstractDataType] +Create=Yes +Header=Yes +Footer=Yes +Drop=Yes +Comment=Yes +Install JAVA class=Yes +Remove JAVA class=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Rule] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Default] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Sequence] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create] +Check=Yes +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column] +User datatype=Yes +Default value=Yes +Check=Yes +Physical Options=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key\Create] +Constraint declaration=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Create] +Constraint declaration=Yes +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Filter] +Primary key=Yes +Foreign key=Yes +Alternate key=Yes +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\View] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\View\Create] +Force Column list=No +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewColumn] +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create] +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter] +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\DBMSTrigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym\Filter] +Table=Yes +View=Yes +Proc=Yes +Synonym=Yes +Database Package=Yes +Sequence=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Procedure] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Procedure\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\DatabasePackage] +Create=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\WebService] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Dimension] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synchronization] +GenBackupTabl=1 +GenKeepBackTabl=1 +GenTmpTablDrop=No +GenKeepTablOpts=No + +[FolderOptions\Physical Objects\Database Generation\ExtendedObject <<Cluster>>] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\ExtendedObject <<Cluster>>\ExtendedSubObject <<ClusterColumn>>] +Create=Yes + +[FolderOptions\Physical Objects\Database Generation\ExtendedObject <<Cluster>>\ExtendedSubObject <<ClusterIndex>>] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\ExtendedObject <<DatabaseLink>>] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\ExtendedObject <<MaterializedViewLog>>] +Create=Yes + +[FolderOptions\Physical Objects\Test Data] +GenDataPathName= +GenDataSinglefile=Yes +GenDataScriptName=testdata +GenDataScriptName0= +GenDataScriptName1= +GenDataScriptName2= +GenDataScriptName3= +GenDataScriptName4= +GenDataScriptName5= +GenDataScriptName6= +GenDataScriptName7= +GenDataScriptName8= +GenDataScriptName9= +GenDataOdbc=0 +GenDataDelOld=No +GenDataTitle=No +GenDataDefNumRows=20 +GenDataCommit=0 +GenDataPacket=0 +GenDataOwner=No +GenDataProfNumb= +GenDataProfChar= +GenDataProfDate= +GenDataCSVSeparator=, +GenDataFileFormat=CSV +GenDataUseWizard=No + +[FolderOptions\Pdm] +IndxIQName=%COLUMN%_%INDEXTYPE% +IndxPK=Yes +IndxFK=Yes +IndxAK=Yes +IndxPKName=%TABLE%_PK +IndxFKName=%REFR%_FK +IndxAKName=%AKEY%_AK +IndxPreserve=No +IndxThreshold=0 +IndxStats=No +RefrPreserve=No +JidxPreserve=No +RbldMultiFact=Yes +RbldMultiDim=Yes +RbldMultiJidx=Yes +CubePreserve=No +TablStProcPreserve=No +ProcDepPreserve=Yes +TrgrDepPreserve=Yes +CubeScriptPath= +CubeScriptCase=0 +CubeScriptEncoding=ANSI +CubeScriptNacct=No +CubeScriptHeader=No +CubeScriptExt=csv +CubeScriptExt0=txt +CubeScriptExt1= +CubeScriptExt2= +CubeScriptSep=, +CubeScriptDeli=" +EstimationYears=0 +DfltDomnName=D_%.U:VALUE% +DfltColnName=D_%.U:VALUE% +DfltReuse=Yes +DfltDrop=Yes + + +4719BEA2-EFA8-45BB-BCDD-0E64663948DB +PhysicalDiagram_1 +PhysicalDiagram_1 +1515999808 +wangzg +1515999808 +wangzg +[DisplayPreferences] + +[DisplayPreferences\PDM] + +[DisplayPreferences\General] +Adjust to text=Yes +Snap Grid=No +Constrain Labels=Yes +Display Grid=No +Show Page Delimiter=Yes +Show Links intersections=No +Activate automatic link routing=No +Grid size=0 +Graphic unit=2 +Window color=255, 255, 255 +Background image= +Background mode=8 +Watermark image= +Watermark mode=8 +Show watermark on screen=No +Gradient mode=0 +Gradient end color=255, 255, 255 +Show Swimlane=No +SwimlaneVert=Yes +TreeVert=No +CompDark=0 + +[DisplayPreferences\Object] +Show Icon=No +Mode=2 +Trunc Length=40 +Word Length=40 +Word Text=!"#$%&')*+,-./:;=>?@\]^_`|}~ +Shortcut IntIcon=Yes +Shortcut IntLoct=Yes +Shortcut IntFullPath=No +Shortcut IntLastPackage=Yes +Shortcut ExtIcon=Yes +Shortcut ExtLoct=No +Shortcut ExtFullPath=No +Shortcut ExtLastPackage=Yes +Shortcut ExtIncludeModl=Yes +EObjShowStrn=Yes +ExtendedObject.Comment=No +ExtendedObject.IconPicture=No +ExtendedObject.TextStyle=No +ExtendedObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Object Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +ELnkShowStrn=Yes +ELnkShowName=Yes +ExtendedLink_SymbolLayout=<Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Source" >[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] </Form>[CRLF]</Form> +FileObject.Stereotype=No +FileObject.DisplayName=Yes +FileObject.LocationOrName=No +FileObject.IconPicture=No +FileObject.TextStyle=No +FileObject.IconMode=Yes +FileObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Location" Attribute="LocationOrName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Package.Stereotype=Yes +Package.Comment=No +Package.IconPicture=No +Package.TextStyle=No +Package_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Display Model Version=Yes +Table.Stereotype=Yes +Table.DisplayName=Yes +Table.OwnerDisplayName=No +Table.Columns=Yes +Table.Columns._Filter= +Table.Columns._Columns=Stereotype DataType KeyIndicator +Table.Columns._Limit=-5 +Table.Keys=No +Table.Keys._Columns=Stereotype Indicator +Table.Indexes=No +Table.Indexes._Columns=Stereotype +Table.Triggers=No +Table.Triggers._Columns=Stereotype +Table.Comment=No +Table.IconPicture=No +Table.TextStyle=No +Table_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No" Filters="&quot;All Columns&quot; PDMCOLNALL &quot;&quot;\r\n&quot;PK Columns&quot; PDMCOLNPK &quot;PRIM \&quot;TRUE\&quot; TRUE&quot;\r\n&quot;Key Columns&quot; PDMCOLNKEY &quot;KEYS \&quot;TRUE\&quot; TRUE&quot;" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Keys" Collection="Keys" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Triggers" Collection="Triggers" Columns="Stereotype No\r\nDisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +View.Stereotype=Yes +View.DisplayName=Yes +View.OwnerDisplayName=No +View.Columns=Yes +View.Columns._Columns=DisplayName +View.Columns._Limit=-5 +View.TemporaryVTables=Yes +View.Indexes=No +View.Comment=No +View.IconPicture=No +View.TextStyle=No +View_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nIndexIndicator No" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Tables" Collection="TemporaryVTables" Columns="Name Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="DisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Procedure.Stereotype=No +Procedure.DisplayName=Yes +Procedure.OwnerDisplayName=No +Procedure.Comment=No +Procedure.IconPicture=No +Procedure.TextStyle=No +Procedure_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Reference.Cardinality=No +Reference.ImplementationType=No +Reference.ChildRole=Yes +Reference.Stereotype=Yes +Reference.DisplayName=No +Reference.ForeignKeyConstraintName=No +Reference.JoinExpression=No +Reference.Integrity=No +Reference.ParentRole=Yes +Reference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Cardinality" Attribute="Cardinality" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Implementation" Attribute="ImplementationType" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Cons&amp;traint Name" Attribute="ForeignKeyConstraintName" Prefix="" Suffix="" Caption="Cons&amp;traint Name" Mandatory="No" />[CRLF] <StandardAttribute Name="Join" Attribute="JoinExpression" Prefix="" Suffix="" Caption="Join" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Referential integrity" Attribute="Integrity" Prefix="" Suffix="" Caption="Referential integrity" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> +ViewReference.ChildRole=Yes +ViewReference.Stereotype=Yes +ViewReference.DisplayName=No +ViewReference.JoinExpression=No +ViewReference.ParentRole=Yes +ViewReference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Join Expression" Attribute="JoinExpression" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> + +[DisplayPreferences\Symbol] + +[DisplayPreferences\Symbol\FRMEOBJ] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=6000 +Height=2000 +Brush color=255 255 255 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=64 +Brush gradient color=192 192 192 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 255 128 128 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FRMELNK] +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FILO] +OBJSTRNFont=新宋体,8,N +OBJSTRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LCNMFont=新宋体,8,N +LCNMFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=3600 +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 0 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\PDMPCKG] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 178 178 178 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\TABL] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +ColumnsFont=新宋体,8,N +ColumnsFont color=0, 0, 0 +TablePkColumnsFont=新宋体,8,U +TablePkColumnsFont color=0, 0, 0 +TableFkColumnsFont=新宋体,8,N +TableFkColumnsFont color=0, 0, 0 +KeysFont=新宋体,8,N +KeysFont color=0, 0, 0 +IndexesFont=新宋体,8,N +IndexesFont color=0, 0, 0 +TriggersFont=新宋体,8,N +TriggersFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=178 214 252 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VIEW] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +ColumnsFont=新宋体,8,N +ColumnsFont color=0, 0, 0 +TablePkColumnsFont=新宋体,8,U +TablePkColumnsFont color=0, 0, 0 +TableFkColumnsFont=新宋体,8,N +TableFkColumnsFont color=0, 0, 0 +TemporaryVTablesFont=新宋体,8,N +TemporaryVTablesFont color=0, 0, 0 +IndexesFont=新宋体,8,N +IndexesFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=208 208 255 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\PROC] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4000 +Height=1000 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 108 0 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\REFR] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VREF] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\USRDEPD] +OBJXSTRFont=新宋体,8,N +OBJXSTRFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=2 0 128 128 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\Free Symbol] +Free TextFont=新宋体,8,N +Free TextFont color=0, 0, 0 +Line style=0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 0 255 +Shadow color=192 192 192 +Shadow=0 +(8268, 11693) +((315,354), (433,354)) +1 +1 + + + + + + + + + +F2240D53-1962-4F30-A487-3071EF863EB9 +Report 1 +Report 1 +1438826575 +wangzg +1438826575 +wangzg +Administrator +%DATE% +LightBlue_Theme.css +Header_LightBlue.html +Footer_LightBlue.html +54 +18 +4 +Home_LightBlue.html +Light Blue +Professional +1 + + +C7879612-DAFB-49EC-B1E1-30EA69CC0755 +1438826575 +wangzg +1438826575 +wangzg +新宋体 +10 +1 +4 +423 +106 +15 +0 + + +4E700224-5526-40AA-8418-1E7C41D302B1 +1438826575 +wangzg +1438826575 +wangzg +Microsoft Sans Serif +10 +4 +0 + + + + +6451D7F8-9422-4B8E-9F4D-ECEBEAD2D09A +Section_1 +0 + +1438826575 +wangzg +EE2423D6-A117-4A7F-ACB9-A639DA3EF182 +%_HOME%\Resource Files\Report Templates\pdmstdus.rtp +1 +TEMPLATE +PDM +%MODULE% %MODELNAME% +%APPNAME% %DATE% Page %PAGE% +((800,899), (1100,899)) +((549,508), (660,635)) +(20998, 29698) + + +226BB5BE-5280-49ED-BF3F-5371384F2F59 +1438826575 +wangzg +1438826575 +wangzg +1 +TBLCTS +PDM + + +2CB3603E-5E87-4D96-9C9E-784624B39A7F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + +32ED1A4D-C1A6-43E2-A63F-AA62AF16A227 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +1 + + +3372A05E-597A-485F-B02D-4211E6C60A47 +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +BF5009BC-C09F-4BE2-BA95-2F52EBEE7872 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +350 +1 + + +35E8696F-637A-43E2-B208-359A42A3125A +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +0D51A3B7-115C-4D76-89B0-8134AA9B2921 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +700 +1 + + +628E00D4-D041-4DB1-A0FC-C0EB0826B58A +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +6B26B4F2-0F71-4D78-AB67-C873A836372A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +1050 +1 + + +8CB576FD-6294-4928-8221-D0F145382790 +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +187E9FD9-1177-46C4-9F13-152666B39403 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +1400 +1 + + +0E064C20-198A-4F25-AA0F-1ECA786C426E +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +43294BC4-7FBA-4524-8F82-E10BA51096A3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +1750 +1 + + +B8498135-039E-43E7-B069-1F2B89507D4B +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +0E295525-2B7E-418A-857E-B3FBFBF7F219 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +2100 +1 + + +3C839A82-2CF3-4917-8575-AA2BDDF64D77 +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +941FA149-CB8C-49D5-9B78-9D97C6D12704 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +2450 +1 + + +049C12AC-C5AF-425B-A623-D166EC84E12C +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +31ED6397-D567-4B46-BA8A-ECB7A08F009C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +2800 +1 + + +562E4AD1-7171-4594-B645-AEED133A8B5D +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + + + +859D3288-53EB-4C7C-A748-243ADD12E70F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +PDM Diagrams + + +FD97E829-D940-4965-A85B-C6C058185BFF +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Model level diagrams + + +4212FAE9-CDD5-4C7D-93CC-F0148200D2D5 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_DIAG_TITLE +PDM +Diagram %ITEM% +Diagram %ITEM% +Diagram %ITEM% + + +340942A5-AF06-483D-92F2-5C6AF3554E72 +1438826575 +wangzg +1438826575 +wangzg +1 +PDM_GRAPHIC +PDM +1 +1 + + +0C4675BA-21E2-4B92-90F7-E730962AA20A +1438826575 +wangzg +1438826575 +wangzg +Matrix Item Font Name +22959464 +21916 +1 +353 +106 + + + + + + +93A7EB80-C4F8-4666-8CD3-059577BE93AE +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + + + + + +F74F38EF-B18C-47C8-98FB-BAE5ACCECC69 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 + + + + +88C4D5A5-C9C0-471C-8E46-CA6F53D4B434 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_PCKG_TITLE +PDM +Package %ITEM% +Package %ITEM% +Package diagrams %ITEM% +1 + + +1C11337A-80E0-4B46-93DB-0E76F50F64BD +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_DIAG_TITLE +PDM +Diagram %ITEM% +Diagram %ITEM% +Diagram %ITEM% + + +B8EBC399-EE8B-4DD4-A754-3C4D1C1916D7 +1438826575 +wangzg +1438826575 +wangzg +1 +PDM_GRAPHIC +PDM +1 +1 + + +0B499A91-BF9E-4EE7-B97F-24AEBE8413F3 +1438826575 +wangzg +1438826575 +wangzg +Matrix Item Font Name +22959464 +21916 +1 +353 +106 + + + + + + +40A36F7F-8BD8-4F4C-ADF8-22644E5780EF +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + + + + + +F2770948-23BA-4F0B-8BFA-E8DCBCF92369 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + + + +ADF991AC-05C7-4BBD-B0C1-F25ECC742952 +1438826575 +wangzg +1438826575 +wangzg +1 +PAGEBREAK +PDM + + + + +25DB3D1A-02EF-4ABA-BA97-7F9CF84132A6 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 + + + + +EA8022A9-789E-444E-AEF2-CF046F97D7D9 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Model level object lists + + +CBD79E7C-85B3-4F76-9AD5-808D2A861F98 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Common Objects + + +EE71D416-A8FE-4161-BB58-FAA7D0BB271B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_RULE_LIST +PDM +Business rule list +Business rule list +Business rule list +1 +-40 Name +-40 Code +-20 Type + + + +9EE63425-E883-49C2-98E8-9F2DB44ED260 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + +2A6CE5F6-AE05-4997-91D1-544B6CA50EF4 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +64C8C317-228E-4256-AE2D-6BFD3908C453 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +2B2F40A9-BEB4-43E4-96C7-92CE1BD72790 +1438826575 +wangzg +1438826575 +wangzg + + + + +3118C0EF-F3A3-4C39-B5E8-8448BB0366CC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_DTSC_LIST +PDM +Data source list +Data source list +Data source list +1 +-50 Name +-50 Code + + + +3E82F7C4-E4E1-4C7C-B18D-9F261FDA5686 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +1BC2F805-FB7B-4BCF-B142-6251CBE68E70 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +4F30A158-C13C-4BC5-B326-9A224679198C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +7E9256CB-A347-4139-A124-F73CEA418202 +1438826575 +wangzg +1438826575 +wangzg + + + + +028E7789-1243-4610-8068-5D8C07827EEF +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_DIAG_LIST +PDM +Diagram list +Diagram list +Diagram list +1 +-33 Name +-33 Code + + + +B52F03C4-09FF-40AC-9F4D-977A8EE86450 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A36AAB87-E3FE-4667-A7FE-C7E61EBA2D65 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +738174AD-120E-4DC7-93E4-1F47AE37298C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +29E39A90-A701-4BB2-94AA-9E16E240E1C4 +1438826575 +wangzg +1438826575 +wangzg + + + + +1F797E6E-735E-44FA-9F6E-5D927DCCFC94 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_EXA_LIST +PDM +Extended Attribute list +Extended Attribute list +Extended Attribute list +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +F3409D10-A47F-435E-B34F-EBB1BAD1EC75 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +5A162FF2-A2F2-4D2A-A010-F831FAB43DC4 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +40187271-9CB5-4957-A0F8-FFD6AFAA8E3A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +0339F474-0740-443D-9DAC-D8D7158B57D9 +1438826575 +wangzg +1438826575 +wangzg + + + + +3C0993F6-C7E3-4B6D-97D4-36DCFFFC9A59 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_FILE_LIST +PDM +Files list +Files list +Files list +1 +-40 Name +-40 Location +-20 LocationType + + + +C38EBB67-FFBC-44CB-9F0D-888B259D9120 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + +B8EC3293-5E0B-4336-B03D-A2E12B85CBBF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +A6076476-DA10-425C-9F31-63DF41F211EE +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +8EFE1180-C601-4828-BA49-47B9AC043022 +1438826575 +wangzg +1438826575 +wangzg + + + + +870935CC-E2D1-4016-8DC6-36B19161AED6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_PCKG_LIST +PDM +Package list +Package list +Package list +1 +-33 Name +-33 Code +-33 UseParentNamespace + + + +C93EBF57-D372-4BE1-A4D5-BB075C6BB303 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C2334FA3-AA9C-4A54-922A-1003E050C324 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +B795E410-E7C7-4D9B-941A-189160FE0180 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +C7A0EAD1-91D8-46A8-9FB3-FCFD582F1251 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +A2BDA4DC-84CD-4B40-A760-384D0C76E5DE +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +134414DE-2989-4E82-9603-F74E37AEB7F3 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Physical diagrams objects + + +FBE5DFC9-DE8E-49FC-9B24-EA7A5BEF051C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_ADTS_LIST +PDM +Abstract Data Type list +Abstract Data Type list +Abstract Data Type list +1 +-50 Name +-50 Code + + + +60EF8D6C-C36E-447B-9344-9F1A011D212A +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +D9B99FD8-A2DE-4815-8AFA-C3B697DCE1E9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +29295005-268F-4B74-BAE9-F6DBC7DCDD64 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +FB8C6ADB-FAEA-4A43-8846-6BD246C3BF44 +1438826575 +wangzg +1438826575 +wangzg + + + + +AB95F6A5-ECDE-447E-9A7C-127F3CB5A7F7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_COLN_LIST +PDM +Table columns list +Table columns list +Table columns list +1 +-50 Name +-50 Code + + + +1E3CC828-014E-4C12-85EB-3ED0132293CE +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0FE7D494-A796-4BEF-A7A7-C7FCA0527C61 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +F3CF9352-821C-404F-88B6-D6A5630A4B4E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +86927B19-59F9-456B-829F-36558E744839 +1438826575 +wangzg +1438826575 +wangzg + + + + +2175C67D-E9AC-4CA3-A556-282471B2E107 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_DOMN_LIST +PDM +Domain list +Domain list +Domain list +1 +-30 Name +-30 Code +-30 DataType +-10 Mandatory + + + +B072C049-E3AB-40AB-AAA4-5DFA1AB55980 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +015E49C0-4C25-4425-B063-F6255FA4F0B3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +183D2CD6-649F-4ABD-AFC3-AEB1CB0E6FAA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +AEDB2D8B-E03D-4A1F-9D84-FDDEEF6D7990 +1438826575 +wangzg +1438826575 +wangzg + + + + +C047EEF5-E85B-477D-B7E4-E5A9685239E4 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_INDX_LIST +PDM +Table indexes list +Table indexes list +Table indexes list +1 +-33 Name +-33 Code +15 Unique +15 Clustered +15 Primary +15 ForeignKey +15 AlternateKey +-33 Table + + + +4022F41D-6CAD-4501-BFE5-F53A23868166 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7C7BE75B-4F9A-43F4-AF08-9044EC42AD24 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +A20C6E11-17CF-467D-A879-33D96A3B38AF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +378CF073-75C8-440D-B106-16E54D98A13F +1438826575 +wangzg +1438826575 +wangzg + + + + +362C87B1-7D30-44AA-BC12-794CA4016083 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_JIDX_LIST +PDM +Join Index list +Join Index list +Join Index list +1 +-50 Name +-50 Code + + + +B5A07F49-2A89-4527-86EB-1CC6D33B45EE +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4F22D261-5B6D-4385-9FCD-05F5A2F4B255 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +EF0642D6-CB63-4E7E-A457-A6FCF742D7A5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +21CD1949-8A66-445D-9AE5-230513159400 +1438826575 +wangzg +1438826575 +wangzg + + + + +736EA5AF-4854-4C0D-9504-4951AEECB818 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_KEY_LIST +PDM +Table keys list +Table keys list +Table keys list +1 +-33 Name +-33 Code +-33 Table + + + +763DA8C7-AF0F-4F1E-BA2B-B4CF38A593B6 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +FA458105-09E3-4CEA-A2C3-3B19F4B7F574 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +7E3A7CCD-E8CA-4A12-8615-879F6757053B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +47C9EAE7-70AC-4473-861D-3D7D3F4F3971 +1438826575 +wangzg +1438826575 +wangzg + + + + +A2DCC1C8-B74C-4811-9876-2AD756D7861B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_PROC_LIST +PDM +Procedure list +Procedure list +Procedure list +1 +-50 Name +-50 Code + + + +A80D370F-06CA-46E8-9C3B-7CB14B980221 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +33DA9081-6F89-4CF9-9B3E-5002C05AE189 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +B2308D32-1232-4B36-A193-FE29DA4EA127 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +0B36B407-ABF0-4938-AB00-ACF9E62DDB01 +1438826575 +wangzg +1438826575 +wangzg + + + + +44739A91-3F3D-49CF-B103-55B210B58094 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_REFR_LIST +PDM +Reference list +Reference list +Reference list +1 +-25 Name +-25 Code +-25 ParentTable +-25 ChildTable + + + +2A719F40-28D6-450F-84F5-C69B76D00BC8 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +3CEEA5C9-DC9F-442A-84FB-75F4628DBAD0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +5D40ED51-870F-4639-BCDB-BBDCE08AB229 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +F7BA43FB-6837-4710-829D-8BBC7ADA97EF +1438826575 +wangzg +1438826575 +wangzg + + + + +F63A5E44-4A3B-4E24-92A8-4BBD37F84A87 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_SQNC_LIST +PDM +Sequence list +Sequence list +Sequence list +1 +-50 Name +-50 Code + + + +C429549B-36CC-48DF-B8DF-40BB9CA679ED +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +55E36365-4AF6-41BB-917E-18E6868FDDAF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +60732FB0-BCE5-44E3-9576-4530C0E2DB76 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +C6E40014-5098-454A-8973-65369E3FA4CF +1438826575 +wangzg +1438826575 +wangzg + + + + +2AD4EC1A-BD9C-4F62-AA23-CF383184BF1B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_STOR_LIST +PDM +Storage list +Storage list +Storage list +1 +-50 Name +-50 Code + + + +E539CB6E-36B1-447F-A19E-AE0D14CC3CBF +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +64170F87-2887-4C84-B5C1-63EE34D91501 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +6BF45221-4D77-4D72-B1BF-F014F0CAC01A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +28A487C8-CCAF-44F1-9FB3-260B47765C3F +1438826575 +wangzg +1438826575 +wangzg + + + + +CDB52388-3CF2-449F-8F3F-9B67ACC85026 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_LIST +PDM +Table list +Table list +Table list +1 +-50 Name +-50 Code + + + +4383CED4-727C-435C-B812-866839FEDF66 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A6BADF87-DBE1-4D7D-8040-CC03EF3FE3C1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +E769F2FA-B83D-4846-8DA9-16E4B1CD4D3D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +69A33BFD-3F62-4B36-B6F7-3CD26BF53B29 +1438826575 +wangzg +1438826575 +wangzg + + + + +04367E9D-C9E9-42F2-8437-929F8F9D4F40 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TSPC_LIST +PDM +Tablespace list +Tablespace list +Tablespace list +1 +-50 Name +-50 Code + + + +80CBCA32-5A39-478C-AC5F-81D969AE945D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +957C05C1-235F-4FA1-A088-652E587B25A4 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +8C48F564-7EBE-488A-8849-1D0FCF1D2070 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +2635FCC8-C444-45DB-9426-D3F820144DCB +1438826575 +wangzg +1438826575 +wangzg + + + + +C081FE64-E4FE-479B-A6D2-FFFD062B7A99 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_PROF_LIST +PDM +Test Data Profile list +Test Data Profile list +Test Data Profile list +1 +-50 Name +-50 Code + + + +AF7DC41E-2E90-41D5-80C6-0A92E8C6FEE0 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9DBAE5BD-0048-4C30-A683-EFD7731468E1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +AAF25145-A068-4A88-B3F3-6AD8F515C78C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +981D1EBB-0968-4213-9A58-9A903DA91C35 +1438826575 +wangzg +1438826575 +wangzg + + + + +344C91F6-D568-42A5-8D95-F75D63DE34A7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_TRGR_LIST +PDM +Table triggers list +Table triggers list +Table triggers list +1 +-50 Name +-50 Code + + + +1261547D-D067-4338-8490-F8FCEAC4A626 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +46184121-C880-4FDD-A5C4-D318282E8A7C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +39A4A250-64C0-4FCA-8BE5-422D1E09516A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +FC0752A1-8BCA-40EA-9750-F6E37A5487AA +1438826575 +wangzg +1438826575 +wangzg + + + + +F2ACCFB1-330D-42A5-B52D-224535E418E6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TRGI_LIST +PDM +Trigger item list +Trigger item list +Trigger item list +1 +-50 Name +-50 Code + + + +B41223BD-8AF2-4C6D-807F-A65A8D2B4CED +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +75C13D33-51DA-4D81-8C9E-904D30D9E7AD +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C9E14F9B-ECFD-4A0A-A1B1-6B6AC6FF1711 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +D2F380CA-A4CF-4A9B-A928-557142E611E0 +1438826575 +wangzg +1438826575 +wangzg + + + + +5B0045FB-158E-4E78-BD67-E87BC6284C4A +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TRGT_LIST +PDM +Trigger template list +Trigger template list +Trigger template list +1 +-50 Name +-50 Code + + + +07063ADF-4B1B-4606-961E-5D1FCB034536 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +086C2015-5B31-47EB-9F5C-87E0FF916E58 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C9042B12-096D-4156-A7AE-0CC39622A205 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +0D9ED729-F877-40F8-9662-87AADDFF22C9 +1438826575 +wangzg +1438826575 +wangzg + + + + +6CAD1EAC-93EB-46DB-B8FD-B5DE80DD87CA +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_USER_LIST +PDM +User list +User list +User list +1 +-50 Name +-50 Code + + + +504B715B-24C9-4732-BB98-CDE308F1B6C2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9261A1E3-0EF1-4B57-9DEF-F6D34760A2C3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +F3D29A11-329A-41A2-A84F-40B1EE324677 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +815FB6F6-9AE3-46F4-80DE-86897DE0BCF0 +1438826575 +wangzg +1438826575 +wangzg + + + + +90312B8C-19B5-4772-9130-99F8E0B01175 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_VIEW_LIST +PDM +View list +View list +View list +1 +-50 Name +-50 Code + + + +AFD1F106-977D-412D-9743-253BF78B111A +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2CA547F1-2B8F-4A67-B40F-3516EA4C2770 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +24CC35D3-E680-405A-868B-DF5FA657DF05 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +F80E63C1-3E02-43A6-A989-DA3A40B93EE0 +1438826575 +wangzg +1438826575 +wangzg + + + + +FDF99FE4-0403-406B-8B09-5EE253128EFE +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_VREF_LIST +PDM +View reference list +View reference list +View reference list +1 +-25 Name +-25 Code +-25 TableView1 +-25 TableView2 + + + +7954209B-6806-49FF-815D-C047B479DBF3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2C1EA110-5036-4A81-BF6A-A47FB4CC8A02 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +77E65CB4-5652-4B79-BC4F-98C6E84CB275 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +3910F901-90C9-4670-9CDC-232B654969AE +1438826575 +wangzg +1438826575 +wangzg + + + + +1C147965-1AF3-466E-B47B-6888C64DD78F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_SYNM_LIST +PDM +Synonym list +Synonym list +Synonym list +1 +-50 Name +-50 Code + + + +3460925B-0E18-453C-B3F8-40CD12034BAC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +353 +106 +0 + + +1D02BB6E-EA0B-47E6-B982-9F0C58276E24 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +4 +1 +1 + + +5D79FE16-9417-443F-9F14-B2B3696BF515 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +1 + + + + +4E8286D8-37C2-4B8A-82A3-361CF4196333 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +10A5BD00-FF80-4602-BA9B-06A6D055C9B2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +19BDCFBE-A076-4688-B381-C978D2D8C058 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Multi-dimensional Diagrams Objects + + +24382BF2-0A16-4AC7-B408-7C40336C6C76 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_ASSC_LIST +PDM +Association list +Association list +Association list +1 + + +6BC0BB28-4706-4D61-85DF-091F067F4C26 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +27038A5C-C46D-4D76-AB8C-830A3E7A9679 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +429B56D3-0247-4D32-9639-CB29D94135AD +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +644FA223-8628-4410-87AE-7761ED6E828A +1438826575 +wangzg +1438826575 +wangzg + + + + +925CD8E3-5FEA-4523-9C83-CD808AC9D698 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_CUBE_LIST +PDM +Cube list +Cube list +Cube list +1 +-50 Name +-50 Code + + + +5E8A0654-297B-489E-9B86-4D7720C58EA9 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +236EA2DE-23EC-4014-9727-33BB139BA851 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +16E1867F-57A5-4730-B423-229E1E410097 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +FE216E31-6078-4844-903B-19527C6ABA92 +1438826575 +wangzg +1438826575 +wangzg + + + + +4F3819E9-8F68-4DEE-9AD6-880D00B5EF51 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_DIMN_LIST +PDM +Dimension list +Dimension list +Dimension list +1 +-50 Name +-50 Code + + + +3B0E91EF-3A4D-47B6-85CF-5944EB66CBAD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +68D4829C-4611-4A7B-9EC0-59A15897603C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +0DDFAB1A-8418-4342-9F09-C4EBDA7AA870 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +2AE29A15-69A9-4EF3-95E5-C75E9F9D5862 +1438826575 +wangzg +1438826575 +wangzg + + + + +E439059E-0394-47D4-8662-D798E193C5D2 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_FACT_LIST +PDM +Fact list +Fact list +Fact list +1 +-50 Name +-50 Code + + + +D88F8FA1-8512-4F48-B969-76D4693D8B91 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +495378E6-C15A-45E2-83D2-16C269A879AB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +AE0DA260-1730-4CC9-B098-6A832BBAE6CC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +8E55A6B3-6E8C-48D9-A35E-3184230C44E9 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +A033F276-0C90-493E-BC6B-29B57D1B3E28 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + + + +2AE90C5F-5740-425E-A1C6-5900B5A58FD5 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 + + + + +8E1A60C4-969C-41CA-8CC7-67DB417F2100 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_PCKG_TITLE +PDM +Package %ITEM% +Package %ITEM% +List of objects for package %ITEM% +1 +Packages + + +2E019AC4-B2A4-48B7-969F-3BF43B01AF9C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Common Objects + + +16D8EADE-E702-4ABF-B5D0-DF8C33379BDB +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_DIAG_LIST +PDM +Diagram list +Diagram list +Diagram list +1 +-33 Name +-33 Code + + + +39409EB7-6761-42F6-999B-44D6A1D7FA3E +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7D1CED7B-BBBC-49C9-968D-B92BA1BEAC29 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +BDAB0E56-70F7-467D-B67E-3F1BEC379B76 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +55A16BF8-0360-4006-9B05-39C173B9EE32 +1438826575 +wangzg +1438826575 +wangzg + + + + +04810391-177A-4EC2-A092-B2D592C6489D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_EXA_LIST +PDM +Extended Attribute list +Extended Attribute list +Extended Attribute list +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +43036A9A-511D-4C76-8958-E7D574918E51 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +177D63C3-B15F-4E72-9E9B-1887F78A064D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +4791DA29-2344-45DB-BFD6-6D16DF553FD6 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +72B7AE7D-5FA6-4DFB-A71D-D0EE1C6C5125 +1438826575 +wangzg +1438826575 +wangzg + + + + +17B586E8-35A6-4DEE-8C31-6603B7CF40C6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_FILE_LIST +PDM +Files list +Files list +Files list +1 +-40 Name +-40 Location +-20 LocationType + + + +1DBAEA55-E30D-42ED-84BB-37524F81FED7 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + +BBF39872-FDCD-4314-AA74-2326D31AAB77 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +8D4D2B68-5CBC-4C44-8863-6E0820B597FC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +E687338B-1728-4298-8698-E8E6C69E2D3A +1438826575 +wangzg +1438826575 +wangzg + + + + +DC23F69B-7D50-45A4-ACD5-0B39DC6FF39C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_PCKG_LIST +PDM +Package list +Package list +Package list +1 +-33 Name +-33 Code +-33 UseParentNamespace + + + +13FDC4EE-9C05-463C-821A-38BC2EA1F307 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +15C4BFD2-5EAC-4C0E-9753-B3B99F4C8038 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +2EF4F9AC-9003-4AD6-A4F8-5D1B2CFFA7D7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +B04D884F-470D-41D0-BCFD-07E94AE937B9 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +DD2F1F66-68DC-463D-BCC3-3BE43F0125F6 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +215CF57F-A7B6-4DEB-8E3D-DDE7382EDA0B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Physical diagrams objects + + +0B7242D9-AA5E-4CAB-9927-050ECA0F3B8B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_COLN_LIST +PDM +Table columns list +Table columns list +Table columns list +1 +-50 Name +-50 Code + + + +07628EA8-3197-4F2E-96DA-E5228052E55A +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +23AFA7B5-5FBC-4ABF-AC94-221F2BA90468 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +D7F7A6D2-E543-40D4-A3B2-5A58FCF3B229 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +E91811BD-21CC-4530-897B-EF4BB6AB6F74 +1438826575 +wangzg +1438826575 +wangzg + + + + +7B3242DB-7420-41FE-A0A6-C8C62D7EA585 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_DOMN_LIST +PDM +Domain list +Domain list +Domain list +1 +-30 Name +-30 Code +-30 DataType +-10 Mandatory + + + +C88CD4C4-4A96-4BFA-8B24-FD41288CBD26 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +EE75C831-A8E6-4B29-90A4-7AC948BE5AF0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C0A9B7C1-A679-463D-A497-E7E9EA151EEC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +46624EEA-06C5-4C54-B6AE-2AFCECF717DF +1438826575 +wangzg +1438826575 +wangzg + + + + +85C0F199-ABBB-4BBA-9913-18BFA56A52C8 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_INDX_LIST +PDM +Table indexes list +Table indexes list +Table indexes list +1 +-33 Name +-33 Code +15 Unique +15 Clustered +15 Primary +15 ForeignKey +15 AlternateKey +-33 Table + + + +0BD11F49-8C81-4F6B-9DE0-15DD8AF487BF +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B5B09F0B-012D-49E0-AF22-AEC8B6ED5F02 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +591212AE-2AF3-4D3A-90E0-F76E1E091F29 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +82E71DC5-C250-43A9-9AEF-A286E0B68D82 +1438826575 +wangzg +1438826575 +wangzg + + + + +3DD56EED-116D-421B-87D0-43F167F81425 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_JIDX_LIST +PDM +Join Index list +Join Index list +Join Index list +1 +-50 Name +-50 Code + + + +4B9EF400-B7DA-4CB4-8027-2FB780C60693 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8F7CAB1C-07CC-467A-91FB-5E17207C482D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +77EDFE57-0AF4-4E46-84F2-E57B2FA8F5E5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +A2525860-3FFC-46C2-8E8B-7D9C6C219A2D +1438826575 +wangzg +1438826575 +wangzg + + + + +4E6398F8-1811-4650-A76F-B7135E7B7A4F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_KEY_LIST +PDM +Table keys list +Table keys list +Table keys list +1 +-33 Name +-33 Code +-33 Table + + + +49F523A3-FF36-4590-B9FE-C5375F6B50AC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +3BE28337-125D-4A8C-AB2A-19D9044ECF8D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C1E71A0A-39EC-4550-88C6-BB9D7B277C72 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +EEC6A40E-D788-4BE3-9ECE-AE297141C574 +1438826575 +wangzg +1438826575 +wangzg + + + + +0F938B76-F812-4308-8B50-481A7EA03EB4 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_PROC_LIST +PDM +Procedure list +Procedure list +Procedure list +1 +-50 Name +-50 Code + + + +C7513EB7-577F-4B19-A7A9-5170EF7929ED +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4E3F1838-7DC8-403C-921B-F727468248BE +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +9C40E192-D287-4664-9BB7-ED58217D1A2C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +F057B22A-D65A-4F9F-8C11-DCD7D12E044F +1438826575 +wangzg +1438826575 +wangzg + + + + +3FD168F7-2E9F-413D-A103-C7FB57C06B3C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_REFR_LIST +PDM +Reference list +Reference list +Reference list +1 +-25 Name +-25 Code +-25 ParentTable +-25 ChildTable + + + +38F6A420-1A3E-4504-AE08-56F56FDE6786 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +DECF5F5D-CE72-4FD8-9E2B-1D8C726C83C5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +B0B4065A-CE23-4918-93AF-EEEECCFE2CA9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +DEA992CB-94A7-4A5C-8E06-B33E6438BB64 +1438826575 +wangzg +1438826575 +wangzg + + + + +49008B55-FAB0-4BEA-BD4F-BDDD72E39AAE +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_SQNC_LIST +PDM +Sequence list +Sequence list +Sequence list +1 +-50 Name +-50 Code + + + +36F6F385-CC6C-4FE9-BE44-3F437F589238 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8FB53DD5-7B71-48E0-82F9-19DF7AD5AE2C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +86B205BD-165C-43B6-8DC7-AE40CCAC5A10 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +2F703296-78B6-4D1C-A5C7-21F6FECCFD47 +1438826575 +wangzg +1438826575 +wangzg + + + + +F8B3714C-D3EA-42AE-86DF-D4E5083139A7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_STOR_LIST +PDM +Storage list +Storage list +Storage list +1 +-50 Name +-50 Code + + + +CC209248-F9D6-4081-B59A-6B7ED6EEC616 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +3B2300A0-9D74-4360-86DD-3CFA8178884E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +041F15C3-F32A-4A09-999B-6EF1076A615F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +98EBFE99-00DB-40BD-B6FB-75D0B82E2E07 +1438826575 +wangzg +1438826575 +wangzg + + + + +5833DC65-410B-4BC8-8A34-F352BFA34127 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_LIST +PDM +Table list +Table list +Table list +1 +-50 Name +-50 Code + + + +627B0B03-69AC-468E-A744-3D1019FAD00F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +1B049D60-8CF8-4B20-8599-D682AA8677DF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +9B78FE32-0952-483F-BDC4-938AF4639B62 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +A676A674-27D7-4F7A-879A-2D6B10AFB276 +1438826575 +wangzg +1438826575 +wangzg + + + + +0FABC472-7342-42B9-B540-D2A8750A838B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TSPC_LIST +PDM +Tablespace list +Tablespace list +Tablespace list +1 +-50 Name +-50 Code + + + +A1F52181-5B0B-4631-9086-E7E3042B5299 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4307FB28-8F23-4707-AC06-F5589E2500D9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +B05CC53D-211E-4A5E-A210-088484980059 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +67FAA903-F204-432D-BDD7-ADCB533873E4 +1438826575 +wangzg +1438826575 +wangzg + + + + +DF04FDAD-C5AD-49CD-BF2C-FEC76CF9B369 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_PROF_LIST +PDM +Test Data Profile list +Test Data Profile list +Test Data Profile list +1 +-50 Name +-50 Code + + + +1276E7E9-F10A-4402-BBF3-48808EEE1A31 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C90A00B6-96AE-40F6-AA3C-33F71C7AE49F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +B7D4872F-7C93-4250-9BBE-51E9359AB569 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +0778C3E2-C916-405E-A057-07F31AD3B848 +1438826575 +wangzg +1438826575 +wangzg + + + + +3904D5C9-B4FA-4D61-84C9-D5CBBD1303FC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_TABL_TRGR_LIST +PDM +Table triggers list +Table triggers list +Table triggers list +1 +-50 Name +-50 Code + + + +5AC429D1-1E41-4536-A75B-646E5BB3B830 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0C9FD7F6-982A-46C7-8C10-0B048437805A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +35C4AF8E-EFCA-4510-8528-AD3DB919D315 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +E9AB7D58-091C-4343-9663-29133F7F9D65 +1438826575 +wangzg +1438826575 +wangzg + + + + +30C537EE-B712-4B7B-9AD9-6342C901E514 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_USER_LIST +PDM +User list +User list +User list +1 +-50 Name +-50 Code + + + +9299F768-2C2C-47A7-963C-DE332A21DED2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +45588907-B259-4D32-947F-656976C81D7D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +30FC7B56-F64E-4841-9E28-3A44A49000F4 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +AE507042-06A4-42FA-B7B0-579A2F63EB4D +1438826575 +wangzg +1438826575 +wangzg + + + + +1B3320A4-CF0F-4038-821E-79BB5EF80769 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_VIEW_LIST +PDM +View list +View list +View list +1 +-50 Name +-50 Code + + + +92C57F8B-9535-4E7E-A90D-978629525766 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9B623711-D2B9-4AD5-863B-66FC5E7CBAB5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +EE760CAF-CF6D-4014-8B3A-F80E5F7E6F9C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +C39C0F84-3061-46B7-BCDE-869BFEAF6819 +1438826575 +wangzg +1438826575 +wangzg + + + + +B8B7F921-FD62-4867-9C26-129B3238214F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_VREF_LIST +PDM +View reference list +View reference list +View reference list +1 +-25 Name +-25 Code +-25 TableView1 +-25 TableView2 + + + +735BFF48-99DE-405D-83CB-4FB0F7F4CF90 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +20A57F9C-EA48-419D-928D-BC020C76451A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +038ABEB1-D97F-4D53-B20A-B6E3751A3E5A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +16D9E325-A4B7-4B90-BAEC-63BC335B01D5 +1438826575 +wangzg +1438826575 +wangzg + + + + +6E401786-7FD2-4165-9D93-90F67E5297D8 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_SYNM_LIST +PDM +Synonym list +Synonym list +Synonym list +1 +-50 Name +-50 Code + + + +81E3B14F-4CBF-4620-8D9C-64C41CF8E8C8 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +353 +106 +0 + + +0B220638-6D4F-4DE5-909D-DB934EE8067F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +4 +1 +1 + + +26F4ED7F-219A-4DBF-B3C6-C08444DD36DD +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +1 + + + + +C0864632-82C2-4E3A-BD70-D47DB1666E9D +1438826575 +wangzg +1438826575 +wangzg + + + + + + +C21662CF-975D-4FBE-BD3B-C3CEEAD535A3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +0C76FAD7-FB38-4FC1-B54E-974FA9638089 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Multi-dimensional Diagrams Objects + + +25CC4760-BED5-4D8B-8990-99E629B495B2 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_ASSC_LIST +PDM +Association list +Association list +Association list +1 + + +F3B31E37-58F0-4574-8C56-7E782B780C14 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +CF770ACC-8B92-4C8A-AFF6-9FE7FF00E2FC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +08AFB5F2-34DB-4543-8E77-A16781C67DFA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +659E00F6-E63D-412B-8048-AD1C56668274 +1438826575 +wangzg +1438826575 +wangzg + + + + +169A3F33-F1AD-4B8D-8D78-8CB893152005 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_CUBE_LIST +PDM +Cube list +Cube list +Cube list +1 +-50 Name +-50 Code + + + +C736E6DD-86BD-4F48-BE7F-771813445E3E +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +1F9609EA-2305-4522-AFC7-2D6CAE015878 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +7763BFC2-A85D-48F0-B8E1-B565328A1BEB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +6B6068B7-04F9-46A7-9F46-6989AB5A1ABD +1438826575 +wangzg +1438826575 +wangzg + + + + +C31A3F30-54AD-4B3A-BFF2-F536FD2DAAC6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_DIMN_LIST +PDM +Dimension list +Dimension list +Dimension list +1 +-50 Name +-50 Code + + + +C779BB1E-29FB-4654-AD01-88ACADFED80B +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +ABF0BC16-F48E-4D3D-9306-6C992035339C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +F24F249F-82C0-4F45-ABE3-5B08BEB0DD9E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +37CC1DA5-A8ED-4BBD-BD2D-C0649AEAB4CF +1438826575 +wangzg +1438826575 +wangzg + + + + +7770573F-EE46-496F-A076-07B0725163ED +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_MODEL_FACT_LIST +PDM +Fact list +Fact list +Fact list +1 +-50 Name +-50 Code + + + +6F90199D-74D6-4950-B703-84B3A19DF743 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +CAD0FB68-2CA2-4E02-8EBC-CF66DDA6E84C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +7D56D18D-A765-4319-A657-3B7573D063B9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +7E8BFDD2-3DF6-47EF-B9DE-FAC17694BC47 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +0D22AA15-D109-42E7-B956-5501B90F2B84 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +4BDFDD48-C4FB-439E-ADAE-E7B03130D05A +1438826575 +wangzg +1438826575 +wangzg +1 +PAGEBREAK +PDM + + + + +B0DC5843-400A-454C-8CF6-521C88E30F7C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 + + + + +B37B8497-9DB5-4E04-85B4-0397B03457CD +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Tables + + +C90E4A98-75B2-42AD-9830-71A79C47D1DE +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Model level tables + + +2ED7CCE7-B517-4957-B4F9-01B6C1564B04 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TITLE +PDM +Table %ITEM% +Table %ITEM% +Table %ITEM% + + +33685A97-E9F1-4285-AF40-2E89D2BE4030 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CARD +PDM +Card of the table %ITEM% +Card of the table %ITEM% +Card of the table %ITEM% +Name +Code +DBMS + + + +FCC9350E-D94F-4A09-9679-4A1A89862563 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +5695E114-3A90-4A8B-8E51-7B80CBC12FF6 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +79B20D27-1236-424A-A375-E9A8C97C6122 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +B8958EE0-5CED-40A0-8A64-C6C31533DD60 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_DESC +PDM +Description of table %ITEM% +Description of table %ITEM% +Description of table %ITEM% + + +777221D1-8ACC-4BDF-86EA-8F0558BBC207 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B7B951E8-D2E0-447D-8108-E7C946832B24 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +536DC1C5-CAAF-4DA0-9859-7A03E1C78CCC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_NOTE +PDM +Annotation of table %ITEM% +Annotation of table %ITEM% +Annotation of table %ITEM% + + +A20613A2-A3E7-47B9-914A-45441336688F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +51CB2BE6-7720-4C1E-B117-116EDC884B31 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +30388666-3656-40F8-884C-4F413B6597F3 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CKCN +PDM +Constraint name of table %ITEM% +Constraint name of table %ITEM% +Constraint name of table %ITEM% + + +7E3817F6-85B1-42BB-B4CC-33BBA8D61BF4 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +595881CE-60E8-4D6A-BF11-88BADEF2E4B5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +17CBE7D3-4F34-4C63-8C8F-9F8EE97A9807 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_OPTS +PDM +Options of table %ITEM% +Options of table %ITEM% +Options of table %ITEM% + + +1774742C-686B-4657-88B5-1F72BFEA290D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0299A805-9684-4B95-B004-7894D3F8D2A0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +E0C63CF6-B7A3-4B1F-B02A-D798D3CC61D6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CRUL +PDM +Client check expression of table %ITEM% +Client check expression of table %ITEM% +Client check expression of table %ITEM% + + +9F40A5AA-8937-4356-83DA-FA27A3D5FADC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C57CC70E-0AC7-4CB4-B604-FB739863C370 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +45A9DC01-0B5B-43BD-ADBE-2A2B28C82EAB +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_SRUL +PDM +Server check expression of table %ITEM% +Server check expression of table %ITEM% +Server check expression of table %ITEM% + + +95F1C89D-A212-41D6-90CE-E54897C53610 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +97105C26-7719-41DB-AB6E-75FD1C9145F9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +FAF6EA04-0529-44E3-B144-BBE79D604FA5 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_HEAD +PDM +Begin script of table %ITEM% +Begin script of table %ITEM% +Begin script of table %ITEM% + + +6BEE27AF-9558-4640-9092-816EA81CAF3F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +1B81E3FD-CB2E-491A-ADB1-B3390F992ECF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +5F968151-D2F6-4FB8-8F94-D8BD91EBC94A +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_FOOT +PDM +End script of table %ITEM% +End script of table %ITEM% +End script of table %ITEM% + + +04713F61-10F6-4EC7-AB67-476C79E5E224 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A28EEAAF-4F58-49DC-8C98-8C1941A3E30B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +F511D9BD-44D3-4072-853A-BF8D4614F197 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +60FCA1F8-6B88-474D-93C0-C8B21B491869 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2B2CB46B-7855-42C4-A1C9-2C7BEB01EAC9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +59AD4CB6-6B58-47EA-9AC8-649F92D85247 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_DIAG_LIST +PDM +List of diagrams containing table %PARENT% +List of diagrams containing table %PARENT% +List of diagrams containing table %PARENT% +1 +-50 Name +-50 Code + + + +896A266A-0802-4BE6-A64F-DB7995786D37 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4316A166-A36C-48EB-820E-0A799C692D35 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +D8884953-883F-43DF-89AB-ADBC917193B1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +9602479F-7880-42EA-982B-FC8C3098CB78 +1438826575 +wangzg +1438826575 +wangzg + + + + +6C6669BD-88C4-4681-9156-61CD81BB9C59 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_OUTREFR_LIST +PDM +Reference from list of the table %PARENT% +Reference from list of the table %PARENT% +Reference from list of the table %PARENT% +1 +-30 Name +-30 Code +-40 ForeignKeyColumnList + + + +554FBBA4-96B4-4C43-BB8E-BBB8A9064B17 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0C16DD8A-8770-49F8-B05B-F6FF37E956D3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +5504E0B5-0F57-4ED8-839E-9B7616180DE7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +285CCD9B-588E-4A73-989A-3047E5792D41 +1438826575 +wangzg +1438826575 +wangzg + + + + +A62D0B81-57DD-4493-B538-6319A21D7B8C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INREFR_LIST +PDM +Reference to list of the table %PARENT% +Reference to list of the table %PARENT% +Reference to list of the table %PARENT% +1 +-50 Name +-50 Code + + + +0E89272E-5998-4BCE-844C-86261CAB9FB2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +6DFB938A-F154-4A87-AD9F-57F5590C0A1D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +2301DFE4-2133-43CF-B65A-58D7935C6D00 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +ECC2FEB9-6F47-4DE1-8E17-D8DD941FD3CD +1438826575 +wangzg +1438826575 +wangzg + + + + +15F1AACE-6000-4A54-94B2-97569746D3A0 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_RULE_LIST +PDM +Rule list of the table %PARENT% +Rule list of the table %PARENT% +Rule list of the table %PARENT% +1 +-50 Name +-50 Code + + + +FAD9BBBA-16CE-4706-831F-503FF26A47A4 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0C695A42-6848-4BEC-889A-0731D320BF35 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +9D219A8D-F568-4095-B4C3-37FDBD2D5129 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +8A673DA9-85F0-4F37-9E7F-E3A88A154231 +1438826575 +wangzg +1438826575 +wangzg + + + + +E3DEE48F-F6E4-48B8-A990-9EFC81C5EDB1 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_DEPND_LIST +PDM +Dependent Object list of table %PARENT% +Dependent Object list of table %PARENT% +Dependent Object list of table %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +6108DD4F-F0A2-4046-A87F-483418502F1F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +6771C8F9-CAA4-43E4-B470-9E64F173279C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +00776374-A564-4DC0-A204-83CC8D43678C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +039BE084-03A8-4254-BEB4-8006C1F55C80 +1438826575 +wangzg +1438826575 +wangzg + + + + +DA323C15-B013-4188-A9A4-8ECF90DC0209 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_EXA_LIST +PDM +Extended Attribute list of table %PARENT% +Extended Attribute list of table %PARENT% +Extended Attribute list of table %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +C06249B8-E57E-4D10-A98D-29076815EA20 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C885EC3B-33F2-4CA1-887D-2D17176199BB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +CB8E9AB0-A59F-4B6D-8B28-EF983B01E201 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +CFF26CA0-B006-42A8-BD1A-19495048262A +1438826575 +wangzg +1438826575 +wangzg + + + + +3CE5BB10-F9F9-4A62-BF51-164284D2E68D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_USRDEPD_LIST +PDM +Extended Dependency list of table %PARENT% +Extended Dependency list of table %PARENT% +Extended Dependency list of table %PARENT% +1 +-33 LinkType +-33 LinkedObject +-33 LinkedObjectType + + + +BE475469-4B5A-41D6-A800-5C192431CC21 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +6FA4E2D2-7CE5-4838-9B57-9ECDA7D1D5EC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +26C45F15-7063-4097-B095-C1802982D9F6 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +1CD99DA4-E822-4609-8020-F786D9A0313C +1438826575 +wangzg +1438826575 +wangzg + + + + +C49C3ACD-9F61-4CDF-BAE5-C226412A09E7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_LIST +PDM +Column list of the table %PARENT% +Column list of the table %PARENT% +Column list of the table %PARENT% +1 +-50 Name +-50 Code + + + +C07BA13A-1A99-4EBC-855B-00CF59FF6701 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0AE32536-A694-4E02-AA92-050F42E6652A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C9829E29-A271-4D02-8C44-95E298D4E724 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +E540EA03-0804-4932-B685-764182440B9B +1438826575 +wangzg +1438826575 +wangzg + + + + +898F5C9B-3864-4143-811E-CAD62EF16A97 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_GROUP +PDM +Column %ITEM% of table %PARENT% +Column %ITEM% of table %PARENT% +Column %ITEM% of table %PARENT% + + +EEAAA0B3-79EC-46A9-9D52-49A6E5C93FF6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CARD +PDM +Card of the column %ITEM% of the table %PARENT% +Card of the column %ITEM% of the table %PARENT% +Card of the column %ITEM% of the table %PARENT% +Name +Code +DataType +Mandatory + + + +6D6D7786-1840-492B-9E97-55C6159E2CC4 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +92498FE9-D6D4-44BD-8ED1-1E168DFD80E7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +44E66709-257F-4E2A-A5F9-C0B8E416749B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +10C179AB-B831-40C3-9A82-A8D9ED301435 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_DESC +PDM +Description of column %ITEM% of table %PARENT% +Description of column %ITEM% of table %PARENT% +Description of column %ITEM% of table %PARENT% + + +C08A633B-0509-4C58-992A-BD20962F189C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7D751489-890C-4553-BE20-61EB8050681E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +4A839A5A-3011-4F87-9F6B-7B440A4A0FD6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_NOTE +PDM +Annotation of column %ITEM% of table %PARENT% +Annotation of column %ITEM% of table %PARENT% +Annotation of column %ITEM% of table %PARENT% + + +0463C05E-471A-4EBC-81EB-9DD55D44FCBC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9CBE8C2E-91C6-4633-9DB1-F36CD7FCD941 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +F3A5186D-F130-4578-BC06-6DFC33864928 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CKCN +PDM +Constraint name of column %ITEM% of table %PARENT% +Constraint name of column %ITEM% of table %PARENT% +Constraint name of column %ITEM% of table %PARENT% + + +4D2FF12D-087C-4970-9C11-73C0BBD28FFB +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4C5D7F6F-BCFA-4B32-BF47-993DF4B716A5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +695ECFB3-4541-405D-A3BC-58757033161A +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CHECK +PDM +Standard check of column %ITEM% of table %PARENT% +Standard check of column %ITEM% of table %PARENT% +Standard check of column %ITEM% of table %PARENT% +LowValue +HighValue +DefaultValue +Unit +Format +CharacterCase +CannotModify +ListOfValues + + +2CBE7581-3795-413E-BC1F-B0F953DFE399 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8D4FA1C8-F063-4933-B8CA-E72640194D50 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +1013C13B-7C3A-40A9-9C73-8A82CFA1ABEB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +C52B6DBE-62FD-4627-8636-01D752984DD1 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CRUL +PDM +Client check expression of column %ITEM% of table %PARENT% +Client check expression of column %ITEM% of table %PARENT% +Client check expression of column %ITEM% of table %PARENT% + + +7C5DC9F7-73E5-40B2-A8AA-5FDFFA965FFD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +58BB0B16-B70F-407F-B53A-DED2B50215DA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +3413FBD1-7814-49EF-8136-94B70F1673EC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_SRUL +PDM +Server check expression of column %ITEM% of table %PARENT% +Server check expression of column %ITEM% of table %PARENT% +Server check expression of column %ITEM% of table %PARENT% + + +48B01DEF-8C7D-48BA-A5DD-587058598A7F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +39101562-4AC5-4C96-B0DE-D068873BD021 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +4979A4C2-9AE8-4E2C-8905-33D8A6A0FC69 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_RULE_LIST +PDM +Business rule list for column %PARENT% +Business rule list for column %PARENT% +Business rule list for column %PARENT% +1 +-40 Name +-40 Code +-20 Type + + + +DBC8F836-EC99-4AE5-9F4F-BFEE480F503C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A061EF1B-FFA8-42CB-B32D-AA29378341EF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +D923D339-320B-420C-BCE0-C27DB9D60253 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +73449B8F-9858-4942-8B4E-5CAFB92DD20A +1438826575 +wangzg +1438826575 +wangzg + + + + +E0F18C84-7D0E-4C1C-A275-E822C63E9F49 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_DEPND_LIST +PDM +Dependent Object list of column %PARENT% +Dependent Object list of column %PARENT% +Dependent Object list of column %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +74DD7F1B-C53E-4014-9515-CAD1B84D83E0 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +EF819924-BD85-4567-9EE9-2263344FD008 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +871D4DBC-BE42-4F0B-8932-6F8C4200845E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +2A80B547-9C07-4BF1-92DD-332A5E09628D +1438826575 +wangzg +1438826575 +wangzg + + + + +7CE5BE86-2D20-494F-B66F-170D20BAA002 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_EXA_LIST +PDM +Extended Attribute List of column %PARENT% +Extended Attribute List of column %PARENT% +Extended Attribute List of column %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +2D338DEB-5D4D-47F1-951C-93885633FF35 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +E118C1DB-69FD-4A0A-853D-45ED3258BAE7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +9C1DE3C4-410D-4DF1-94B7-0DAE56E72BD8 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +8A35D2D7-518E-4F1C-97EF-650E4DCFEA07 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +84C14473-660A-4C85-93F2-EB0F95E2871B +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +3FE182CC-088C-4ECE-BD85-714DB20B8BA7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_LIST +PDM +Key list of the table %PARENT% +Key list of the table %PARENT% +Key list of the table %PARENT% +1 +-40 Name +-40 Code +-20 Primary + + + +6473FA6D-A33C-490C-86C0-7A7047CA0974 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +6A0FE2E6-DAA4-4CDE-ADAF-12310E0FB6FC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +30CFE89B-DC0B-4E27-A4E3-6068A167B51E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +7684D910-CAEC-4214-9EA0-B38631185E7B +1438826575 +wangzg +1438826575 +wangzg + + + + +B8D738B0-0320-459B-96A1-285CC608451B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_GROUP +PDM +Key %ITEM% of table %PARENT% +Key %ITEM% of table %PARENT% +Key %ITEM% of table %PARENT% + + +B1388881-FAA2-4726-9024-3E3B8913B06C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_CARD +PDM +Card of the key %ITEM% of the table %PARENT% +Card of the key %ITEM% of the table %PARENT% +Card of the key %ITEM% of the table %PARENT% +Name +Code +Table + + + +A65DEDCF-F795-4E25-B81F-38C14CFCE321 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B82EBDB4-F5EF-4239-B94D-AF9097CF8E37 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +448BE583-12AF-451A-B909-9085643B7776 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +D0DEF621-49B0-483B-954E-DDD4B87FCFB3 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_DESC +PDM +Description of key %ITEM% of table %PARENT% +Description of key %ITEM% of table %PARENT% +Description of key %ITEM% of table %PARENT% + + +DECEBA42-E984-456A-BEC1-CB71E1731392 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A0555529-CF1A-4A45-BAAC-C8B1806A4D89 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +CE3DAF87-FE97-44DD-A105-E456677EF63F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_NOTE +PDM +Annotation of key %ITEM% of table %PARENT% +Annotation of key %ITEM% of table %PARENT% +Annotation of key %ITEM% of table %PARENT% + + +2B57718A-ECA4-478F-919C-4BB7D4F98D08 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B96944D6-3372-44BA-9CD9-1E1CDA29CBFC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +58503D2D-F9CF-40FC-BA27-D3914E56D39C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +6F609456-2982-4245-BFA7-22ECC21FDED5 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7AEC1975-6FFC-425C-9746-62F73C4CB614 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +2AE65551-CC2F-48F2-ABF7-42BD9DAF0471 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_COLN_LIST +PDM +Column list of the key %PARENT% +Column list of the key %PARENT% +Column list of the key %PARENT% +1 +-40 Name +-40 Code + + + +F29AF0DE-0187-4247-87A6-FCD73A45E788 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8F75B780-4E61-4238-8135-53BB1514B784 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +F3BAA39A-D979-41CB-A137-FE5133BD3B0A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +833D22A1-BE74-438B-BD75-063F4792C02C +1438826575 +wangzg +1438826575 +wangzg + + + + +F272238F-D25E-4EAC-9282-4414F23DDDA2 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_DEPND_LIST +PDM +Dependent Object list of key %PARENT% +Dependent Object list of key %PARENT% +Dependent Object list of key %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +968D5C06-14F3-4AB2-8933-A261D21CEFDA +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0BDB3E2E-D63F-4809-A019-6DDECE41E24F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +37E3B316-35B8-4BEA-8952-B7E91DDBE180 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +3CED7067-AB02-4331-B822-8FC8C44F11E5 +1438826575 +wangzg +1438826575 +wangzg + + + + +46E6C004-98B5-4CA4-BF1D-8C9B4485CAA6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_EXA_LIST +PDM +Extended Attribute List of key %PARENT% +Extended Attribute List of key %PARENT% +Extended Attribute List of key %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +FBC0DB8C-D4E9-41F7-9C27-8D9576E3610B +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4F05791F-450A-4868-9617-54A651D1279D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +17E3DAE3-1FFF-45F0-BF4C-1E405D434380 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +24CBFC9F-A592-4731-A66D-9665D345DECC +1438826575 +wangzg +1438826575 +wangzg + + + + + + +C580488A-48C2-4244-90BF-A7EF3036F0D5 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +02CB692D-7093-43D5-8853-888F25BB39F6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_LIST +PDM +Index list of the table %PARENT% +Index list of the table %PARENT% +Index list of the table %PARENT% +1 +-20 Name +-20 Code +-12 Unique +-12 Clustered +-12 Primary +-12 ForeignKey +-12 AlternateKey + + + +9B32DE5F-E6C2-4608-9B54-C2CF83257D84 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +D3D5E53D-1C18-4F02-8AF0-0A5F15F3A30B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +6573FC00-7534-478D-B864-CBF585A79391 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +6109C42C-5E5E-407F-B6B7-FEDBEAC5B3A9 +1438826575 +wangzg +1438826575 +wangzg + + + + +3ED1C084-A0DF-4FFB-B084-E8B70945F9D1 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_GROUP +PDM +Index %ITEM% of table %PARENT% +Index %ITEM% of table %PARENT% +Index %ITEM% of table %PARENT% + + +DEB4AE99-2C25-45DE-9FDA-010D8BADAC0F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_CARD +PDM +Card of the index %ITEM% of the table %PARENT% +Card of the index %ITEM% of the table %PARENT% +Card of the index %ITEM% of the table %PARENT% +Name +Code +Unique +Clustered +Primary +ForeignKey +AlternateKey +Table + + + +0AF46B70-5FC5-4C43-B6A6-2B72C04956A9 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +22284358-20EE-4940-AE67-C2A4D9603463 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +3019F268-101B-4475-9E89-A6628B0364D3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +924584FD-3055-4676-A10F-82E9E41B49DC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_DESC +PDM +Description of index %ITEM% of table %PARENT% +Description of index %ITEM% of table %PARENT% +Description of index %ITEM% of table %PARENT% + + +485D5D76-CA90-4C1B-96AD-C15BD1E550A4 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +FC5FB27E-615A-4997-80A4-A4F5162D961C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +C0803DF2-26BC-4C6B-BB2D-F1927E3D9B8E +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_NOTE +PDM +Annotation of index %ITEM% of table %PARENT% +Annotation of index %ITEM% of table %PARENT% +Annotation of index %ITEM% of table %PARENT% + + +8F8F5A76-E897-4960-A8EB-59ED1DBB64EF +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0942ED56-E0CB-4ACE-914E-201C7F7AB0D7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +AD346DD3-EFEA-4075-A4ED-4700AF04CB1B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +193BFEB6-7853-4FDE-A134-03F53D9B35F1 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +E2F4B15D-0F7C-48AE-A890-1720B27851A8 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +7A6B864F-63CF-44BA-8B3B-217D5A45B6F2 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_COLN_LIST +PDM +Column list of the index %PARENT% +Column list of the index %PARENT% +Column list of the index %PARENT% +1 +-38 Name +-38 Code +-24 Ascending + + + +63E92FA8-CF98-4B9A-8A6B-B06B65441278 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +FDDA7BF1-38E2-42DB-BE23-31ECF628485C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +D41098C3-F02F-416D-926A-F47ABDE22E95 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +6A59F592-B930-4E3A-91D0-9463D245D55D +1438826575 +wangzg +1438826575 +wangzg + + + + +FBE5EA34-19C7-4816-8C31-E5019DFC2A54 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_DEPND_LIST +PDM +Dependent Object list of index %PARENT% +Dependent Object list of index %PARENT% +Dependent Object list of index %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +E5A3C3E0-F511-4935-8485-7399101844C2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C6D90EB8-D35D-4360-B01E-194C4CE1A6DF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +E015C6B1-5BE3-4F41-8100-B11C0D5CE2BA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +A32E4B1E-72D0-4AD7-A30F-113EA750081A +1438826575 +wangzg +1438826575 +wangzg + + + + +7952147F-73A1-4986-9B88-EB6465F8C247 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_EXA_LIST +PDM +Extended Attribute List of index %PARENT% +Extended Attribute List of index %PARENT% +Extended Attribute List of index %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +853B9472-2C26-4EC3-B746-36A5C0A04503 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +17DB5FC1-8173-450A-9A48-2A3A5885A9B7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +F23B91BC-7F88-47F1-BCAF-4DA2E89D0AAE +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +1D416A2D-F7D7-4A18-9B59-E7D4ED1D7EB1 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +841E6D72-48D6-4501-8B12-3461C9B7C0B4 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +EBA0450D-7256-4D66-94C3-B49C017CDCFA +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_LIST +PDM +Trigger list of the table %PARENT% +Trigger list of the table %PARENT% +Trigger list of the table %PARENT% +1 +-50 Name +-50 Code + + + +251DC485-3159-4CD2-AFBA-ECAACB4D39EA +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +BB013524-77F3-4A6F-9FBC-C706EB187B5D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +48489BD2-06D6-43AF-8A92-57A7333C8025 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +D0212968-76A6-4B05-B7B4-32FF0F9823D9 +1438826575 +wangzg +1438826575 +wangzg + + + + +CC3E2E13-22BC-4DC4-9DD8-5031DC35A142 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_GROUP +PDM +Trigger %ITEM% of table %PARENT% +Trigger %ITEM% of table %PARENT% +Trigger %ITEM% of table %PARENT% + + +48FCEA93-D417-4D08-8EB5-F083E363FA4D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_CARD +PDM +Card of the trigger %ITEM% of the table %PARENT% +Card of the trigger %ITEM% of the table %PARENT% +Card of the trigger %ITEM% of the table %PARENT% +Name +Code +Generated +Table +TriggerTemplate +UserDefinedSQL + + + +92B737A2-0DB1-4CC4-8DCF-15B297E26E63 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +F88C4208-2907-40FF-9439-9B1DAB2F1572 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +7A53FFD5-1E48-4BD2-BAAC-97E65871812D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +4A3E23ED-C118-4D32-8EFA-4E3CCAD1DE44 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_DESC +PDM +Description of trigger %ITEM% of table %PARENT% +Description of trigger %ITEM% of table %PARENT% +Description of trigger %ITEM% of table %PARENT% + + +9EF9218B-6B9F-44D3-9272-BBF760C43702 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +008EC6B3-BA94-4EFE-BEFB-02DB2892706A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +BD5535E1-66CF-4690-BF34-D7122EBF7E90 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_NOTE +PDM +Annotation of trigger %ITEM% of table %PARENT% +Annotation of trigger %ITEM% of table %PARENT% +Annotation of trigger %ITEM% of table %PARENT% + + +2254F88C-8C46-4E90-83BA-D174DBEB3A89 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +EB363577-6C33-4838-8C68-D5322B87D8B5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +8A4DA056-7DA1-4A36-A88A-C991E6272273 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +D1B1CD16-9C38-4389-8B64-2D27BA0FEDEE +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +67D1FC18-40EF-4E12-A146-85FE805E62EA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +E4F48B48-184C-4D7B-9AC5-23C94672CE9D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_EXA_LIST +PDM +Extended Attribute List of trigger %PARENT% +Extended Attribute List of trigger %PARENT% +Extended Attribute List of trigger %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +D0C50E89-85B4-450A-9104-FD8737B994EF +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +F31E9F88-944C-4F4D-936E-60B3A5C5B7D9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +ECCAB55C-2F49-4DB7-BE49-7C66BCB2D44F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +D8F0CF9C-D576-4527-A076-9FDA6D6B523C +1438826575 +wangzg +1438826575 +wangzg + + + + + + +386F1735-13F1-458C-9A56-417F2FFC9EBB +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +91D9A2D4-2AE1-41CA-BA60-24934393818E +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_LIST +PDM +Mapping list of the table %PARENT% +Mapping list of the table %PARENT% +Mapping list of the table %PARENT% +1 +-50 Name +-50 Code + + + +28CD9C2C-4521-432B-929D-5C0C0C5B0CA3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0F3E64F2-B04F-4D5B-AAAD-1272532A27AC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +5FBDE400-698E-4F40-8667-6D2673FDEE4D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +9CD6F611-7AFA-431A-8765-653A8A3B4170 +1438826575 +wangzg +1438826575 +wangzg + + + + +40E9E3B3-C093-4C84-B8CE-2F1181190F8A +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_GROUP +PDM +Mapping %ITEM% of table %PARENT% +Mapping %ITEM% of table %PARENT% +Mapping %ITEM% of table %PARENT% + + +8C68CDD0-E1A6-4267-B615-8E829D261664 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_CARD +PDM +Card of the mapping %ITEM% of the table %PARENT% +Card of the mapping %ITEM% of the table %PARENT% +Card of the mapping %ITEM% of the table %PARENT% +Name +Code + + + +0896BC79-C5E0-483D-B995-5E2DE02D0784 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +16F0388C-8A6D-43D8-A28C-DE1425AB67EE +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +5C525EB5-6661-45D5-BF99-3243ECD2C210 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +74E21A02-6DD7-4DCF-A4AA-43999E9A3F50 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_CRTR +PDM +Criteria of mapping %ITEM% of table %PARENT% +Criteria of mapping %ITEM% of table %PARENT% +Criteria of mapping %ITEM% of table %PARENT% + + +C5E94664-CF6E-4C80-ACFE-5C7893B517BC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2BCC5CC6-B7CE-4D40-992A-3FBCC5ED5470 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +E865433E-99C9-47AE-924C-2387EC196165 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_EXPR +PDM +Source expression of mapping %ITEM% of table %PARENT% +Source expression of mapping %ITEM% of table %PARENT% +Source expression of mapping %ITEM% of table %PARENT% + + +9815A791-AE45-41F2-8721-B4989D35EDBD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9EC63FF8-DEEE-4B1E-8BB3-BC0F3E296B14 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +4C8E23F3-0EB8-4A84-9E1A-077F478A1DC6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_SFEA_LIST +PDM +Column mapping list of %PARENT% +Column mapping list of %PARENT% +Column mapping list of %PARENT% +1 +-50 Column +-50 MappedTo + + + +8DD4273F-6139-4452-9AE9-4D0427B6CF38 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +6CC3D685-EC5C-4A9D-A911-54E37AC9D50B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +FF90E7FB-79DF-4DA4-BC01-C7B28C376829 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +563D7CF1-A7AB-4C94-992E-627E57FB45E6 +1438826575 +wangzg +1438826575 +wangzg + + + + +EC74F162-CD10-45FF-87D7-E7399BC3EED0 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_SCRC_LIST +PDM +Table sources list of mapping %PARENT% +Table sources list of mapping %PARENT% +Table sources list of mapping %PARENT% +1 +-50 Name +-50 Code + + + +FC5C86DE-0888-4D2A-BEE1-033DBBC07A50 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +AEA20459-18A1-4006-9B37-DD925CC9C251 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +B1B10634-5ACA-41A0-B281-EFA7C444FC14 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +6AB62F46-67FF-49E9-8E6E-CD487D5B68A4 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +3240A7A1-8B7A-4C6C-BC6C-7CD61E01FD01 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +35B98F2F-BA4A-4E08-9BB4-EE9D08739E32 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +66FDF418-4B93-4916-80DE-528582F04A30 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +FC4D7CBF-97F2-4EDE-B5D5-BB59C1E65DE2 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_PCKG_TITLE +PDM +Package %ITEM% +Package %ITEM% +Tables from Package %ITEM% +1 + + +5353DD9B-CFB9-46E7-9BB8-07890964DC2E +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TITLE +PDM +Table %ITEM% +Table %ITEM% +Table %ITEM% + + +BF951AB6-E26B-4BAB-B4F8-FF0B9AE74280 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CARD +PDM +Card of the table %ITEM% +Card of the table %ITEM% +Card of the table %ITEM% +Name +Code +DBMS + + + +21BC1ED4-44E6-41FB-A167-19A1422E9E80 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8AEC8CBF-8CAC-45D4-9938-E11C6606A359 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +432CCD9F-686C-41CE-BC89-BF47F3F69C01 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +25334013-320E-4478-AABD-056F205970C9 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_DESC +PDM +Description of table %ITEM% +Description of table %ITEM% +Description of table %ITEM% + + +FF7FE4E8-3E1B-4F02-831B-E42643D60F74 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C02CBC6C-82D3-42DA-86FE-F91AB94252DF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +3A132EF0-0962-4663-ADD5-36A1E96616AA +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_NOTE +PDM +Annotation of table %ITEM% +Annotation of table %ITEM% +Annotation of table %ITEM% + + +E9A3A165-CEF0-4FED-BD2A-05C4737B4848 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +D585F27D-8752-43D5-A7C5-A06E06108FF3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +1E76C4AA-A9BB-4BC6-865A-EC65C5C78880 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CKCN +PDM +Constraint name of table %ITEM% +Constraint name of table %ITEM% +Constraint name of table %ITEM% + + +30F372DA-CCA4-4669-826D-F098D181CC37 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7CD20C89-9227-4F28-88D6-8C16F174247A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +B079D4E4-53C0-47F5-82EC-8C52A782823E +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_OPTS +PDM +Options of table %ITEM% +Options of table %ITEM% +Options of table %ITEM% + + +FBDBCD7F-C42A-49E5-8D89-9F1672B87F4C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0AEFCE66-A78F-4CA5-876A-578456DF12FC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +36657B1C-C00E-4115-A202-DFFF51FFCBE7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CRUL +PDM +Client check expression of table %ITEM% +Client check expression of table %ITEM% +Client check expression of table %ITEM% + + +86CE2A95-E789-4AE5-B818-F1966D381800 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +11582B60-A60F-4A5B-A66C-A127CC79E1CF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +EE10D990-E959-44CC-B1A5-5C8F8F60DA1F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_SRUL +PDM +Server check expression of table %ITEM% +Server check expression of table %ITEM% +Server check expression of table %ITEM% + + +C79D57D0-8D05-4366-868D-07791E658CA4 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2308E9F4-8DB5-4F61-8BEE-692DA5EF31C8 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +15119EFE-2396-46FC-B049-CC68C4A8EDE0 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_HEAD +PDM +Begin script of table %ITEM% +Begin script of table %ITEM% +Begin script of table %ITEM% + + +D31EB3E1-FD11-448D-8D1F-5F9F87B83580 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8F80D316-8B7B-44EB-B118-6C475F877961 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +D553A0E0-978C-477B-BB22-17D07BA16A44 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_FOOT +PDM +End script of table %ITEM% +End script of table %ITEM% +End script of table %ITEM% + + +F31CEFA4-06BC-4D6B-B7E3-9BD73FF3CF93 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B527E875-6180-4331-97AB-29E5B25165DB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +A757B6B1-70E2-4A15-9954-C836A4472380 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +F38AF415-8E0D-44BD-8093-3A62E6C73038 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4041015C-EB78-408A-B0E6-6B173560DF40 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +E96C5A10-AD29-48E8-97CC-23DB9ABB55B1 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_DIAG_LIST +PDM +List of diagrams containing table %PARENT% +List of diagrams containing table %PARENT% +List of diagrams containing table %PARENT% +1 +-50 Name +-50 Code + + + +DA3BA809-B1D6-4251-984D-390717A641DC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +DAE2624C-DE6F-4F08-B6E9-C32BD6655AEF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +A9E6EA90-81E7-4B54-9934-F8D25E3BC2EA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +9EA0E811-D759-4943-882C-339E83ABD455 +1438826575 +wangzg +1438826575 +wangzg + + + + +420C0E65-DE8E-4D7F-A14E-A298F7F3CB14 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_OUTREFR_LIST +PDM +Reference from list of the table %PARENT% +Reference from list of the table %PARENT% +Reference from list of the table %PARENT% +1 +-30 Name +-30 Code +-40 ForeignKeyColumnList + + + +D107CFBC-B383-48C3-880B-CE265A38F9F5 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +31A0E927-FF24-4C14-98F1-C341AA6C6F96 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +090CF4A1-D18E-49EB-A2C2-8D8F1F4CC25B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +5E239A09-28AF-4528-B6AE-064C8FA18060 +1438826575 +wangzg +1438826575 +wangzg + + + + +D825E46D-84AB-4FB6-B51D-FCFF6D614F0D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INREFR_LIST +PDM +Reference to list of the table %PARENT% +Reference to list of the table %PARENT% +Reference to list of the table %PARENT% +1 +-50 Name +-50 Code + + + +1673B696-2F0B-450C-9634-0CF8FCCDC274 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B4EBA13D-4C8B-46F6-8F3F-25C70A46A75B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +3FEEDCC6-34F5-4C9C-ADBC-4E58909B8175 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +EF741E90-5D32-4202-8645-3D9976E809BD +1438826575 +wangzg +1438826575 +wangzg + + + + +3E5F9E8C-C371-460A-B899-A6A6CD83E086 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_RULE_LIST +PDM +Rule list of the table %PARENT% +Rule list of the table %PARENT% +Rule list of the table %PARENT% +1 +-50 Name +-50 Code + + + +409FAFC4-482B-40CD-85CF-E1A8D7F0C7C0 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +5FE6DCAC-F7E3-457F-A090-AEA078F40FCB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +28E40FDF-D652-4CE6-9235-D65F6FD9BE7D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +C4D8FD02-9F3E-40EB-9EE2-9EEB24BB307B +1438826575 +wangzg +1438826575 +wangzg + + + + +F5717368-9818-4F71-ACCB-13331D4F6BAA +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_DEPND_LIST +PDM +Dependent Object list of table %PARENT% +Dependent Object list of table %PARENT% +Dependent Object list of table %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +4B382C47-57F5-4D78-8735-7FCF6896695D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +543E798F-C9D3-45EA-BA32-8DC6D17AEC80 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +11194995-911E-4BC0-A0F3-B2F0C7554A26 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +3DC5D71F-C73E-4419-BAF5-828C151D16A2 +1438826575 +wangzg +1438826575 +wangzg + + + + +FE890DE4-7463-409A-85E0-C2E26E98D177 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_EXA_LIST +PDM +Extended Attribute list of table %PARENT% +Extended Attribute list of table %PARENT% +Extended Attribute list of table %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +321D3647-0D62-4728-9729-880014115E02 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +64D39551-0E54-4E58-8503-08E063A27ECA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +F1F371B5-9DBA-472C-84B7-5EBB1F228EF0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +4D97A115-6229-4093-9E68-FE848733F65F +1438826575 +wangzg +1438826575 +wangzg + + + + +344DA869-C1B9-4A8A-BC73-B2F240A033C4 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_USRDEPD_LIST +PDM +Extended Dependency list of table %PARENT% +Extended Dependency list of table %PARENT% +Extended Dependency list of table %PARENT% +1 +-33 LinkType +-33 LinkedObject +-33 LinkedObjectType + + + +A97DC226-9CBF-4F00-B3CD-C14F47EF59BC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +E0EE6362-3ABD-4110-9634-D89E3442ECD1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +CF3B6895-ADC0-4750-87C3-C859961E7476 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +0B576C9A-5487-461F-BA7D-AE7A9FB7A699 +1438826575 +wangzg +1438826575 +wangzg + + + + +BD53E59A-C4E0-45F5-AE4E-3A82E6182521 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_LIST +PDM +Column list of the table %PARENT% +Column list of the table %PARENT% +Column list of the table %PARENT% +1 +-50 Name +-50 Code + + + +259C7A8F-80FE-4C49-BA50-A38232C81587 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A64C3251-2105-46EC-B77B-821E1E0A882E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +5A0CFCCE-E425-4F17-9D07-BA36A7100E84 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +896809A1-C56E-4928-8636-FEA1D60FCB93 +1438826575 +wangzg +1438826575 +wangzg + + + + +AB5FD9A8-8F5C-425F-8C42-A7C873A6E78C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_GROUP +PDM +Column %ITEM% of table %PARENT% +Column %ITEM% of table %PARENT% +Column %ITEM% of table %PARENT% + + +D8D68425-67B5-4748-BEEC-A721CA987241 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CARD +PDM +Card of the column %ITEM% of the table %PARENT% +Card of the column %ITEM% of the table %PARENT% +Card of the column %ITEM% of the table %PARENT% +Name +Code +DataType +Mandatory + + + +7F57F516-6125-4D85-91F5-4CA5322404CD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C004CA93-66AE-494C-B96A-333D5BD2EFBF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +A4C5413D-0E9F-408B-8A6B-6642A37F7245 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +C02E1202-C0B9-4BA7-9E5C-664346CB4793 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_DESC +PDM +Description of column %ITEM% of table %PARENT% +Description of column %ITEM% of table %PARENT% +Description of column %ITEM% of table %PARENT% + + +323370CD-3DF8-46FD-A0AE-34D342C59733 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +3CDA6F99-C725-4660-86FB-087B683F018F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +0427FA5A-4EDF-4CAF-AF99-F86C8E227D47 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_NOTE +PDM +Annotation of column %ITEM% of table %PARENT% +Annotation of column %ITEM% of table %PARENT% +Annotation of column %ITEM% of table %PARENT% + + +EB257CBE-A456-42B0-B89F-1782C316C344 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +CBD7A1EC-8B2C-42C0-8349-1A3AF8A4B81D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +21184395-3113-492D-9436-E3C6FDB652CF +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CKCN +PDM +Constraint name of column %ITEM% of table %PARENT% +Constraint name of column %ITEM% of table %PARENT% +Constraint name of column %ITEM% of table %PARENT% + + +9F129A49-E596-4B44-A519-E3C5179D9E10 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A4A17402-C6B8-45CA-9255-24482E3D680D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +5E43CCC5-4DA3-4EBC-B4E7-18C6F72620C2 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CHECK +PDM +Standard check of column %ITEM% of table %PARENT% +Standard check of column %ITEM% of table %PARENT% +Standard check of column %ITEM% of table %PARENT% +LowValue +HighValue +DefaultValue +Unit +Format +CharacterCase +CannotModify +ListOfValues + + +1E0A10B7-C095-48A3-84B3-C4CE6F699616 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2E09ED73-C74B-4EE1-994B-0AB8C64A1189 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +0117D1E5-3396-4335-B222-C7A6C29548AE +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +54F3965F-89FE-475F-BD77-16F5AEFE7CDD +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_CRUL +PDM +Client check expression of column %ITEM% of table %PARENT% +Client check expression of column %ITEM% of table %PARENT% +Client check expression of column %ITEM% of table %PARENT% + + +936C3710-56B3-4E0B-8362-8801FFE96B71 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +AFA7C3A8-2A02-435C-911C-C24057224F5A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +F7105EB1-D501-4747-9FB9-2B29874B7A6C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_SRUL +PDM +Server check expression of column %ITEM% of table %PARENT% +Server check expression of column %ITEM% of table %PARENT% +Server check expression of column %ITEM% of table %PARENT% + + +8D236EDF-7261-4DA9-BE63-E527C468AA2C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +453378D7-287F-484F-BAD6-DE8C719457E3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +5BD662F3-0984-42F0-B195-16C2CDCC9845 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_RULE_LIST +PDM +Business rule list for column %PARENT% +Business rule list for column %PARENT% +Business rule list for column %PARENT% +1 +-40 Name +-40 Code +-20 Type + + + +EC9E8888-9948-483E-BDA9-8FB564944BB3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4151A78F-AF20-4ADF-8358-38010CC4FDAA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +85C92542-323D-4AB8-896A-EAF13E13E1A7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +7A099BF5-64D8-4925-BA1A-B21A47A03EEC +1438826575 +wangzg +1438826575 +wangzg + + + + +8EA87290-8B72-4F00-A592-96B6BCF2DD87 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_DEPND_LIST +PDM +Dependent Object list of column %PARENT% +Dependent Object list of column %PARENT% +Dependent Object list of column %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +F46801EF-AA13-4E63-9DD2-26CC3E1282E6 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7C43B3A9-DC5C-46AE-8BD7-70E3A1850100 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +2FF2868F-6EB6-4687-BDBF-1E549FA08D25 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +1C0F59DA-4941-4FC0-88AA-C90AC5F480DD +1438826575 +wangzg +1438826575 +wangzg + + + + +08DA5304-9CA4-4B54-A597-345476CE67C4 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_COLN_EXA_LIST +PDM +Extended Attribute List of column %PARENT% +Extended Attribute List of column %PARENT% +Extended Attribute List of column %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +CBC7EABC-42C1-4966-88C7-DDCFCDFCB1D8 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0C7360D9-72D5-4258-8AAA-51FBE1794DA9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +A45A3027-4F02-47D5-9711-676A422CAFF0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +B42C3361-6896-48F6-BBC5-D8082BC6AB2C +1438826575 +wangzg +1438826575 +wangzg + + + + + + +5EB6CAE0-DF7A-4B8C-BF4E-850486F7F787 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +D6551078-0507-41F0-A444-2C6F2323C792 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_LIST +PDM +Key list of the table %PARENT% +Key list of the table %PARENT% +Key list of the table %PARENT% +1 +-40 Name +-40 Code +-20 Primary + + + +B208C3CB-304B-40FD-A029-74817BF7CE94 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +51B8B592-A3FC-4DB8-AC2F-E57703A55024 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +AF281C4B-08B8-4FE7-9DCD-D5C01CB91808 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +54E29E2A-0234-4A56-9950-BBD587CCAC85 +1438826575 +wangzg +1438826575 +wangzg + + + + +4683EC55-06DE-4E64-A286-97979C012011 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_GROUP +PDM +Key %ITEM% of table %PARENT% +Key %ITEM% of table %PARENT% +Key %ITEM% of table %PARENT% + + +D8FFCC21-A771-467E-8B26-30CA246019FF +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_CARD +PDM +Card of the key %ITEM% of the table %PARENT% +Card of the key %ITEM% of the table %PARENT% +Card of the key %ITEM% of the table %PARENT% +Name +Code +Table + + + +1F8FF595-B80B-4F56-ACC3-2959B14152DC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +F309924F-1463-4E89-9B74-37905F0D5119 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +F297192A-14B4-483B-871C-CDE7EFD50FC0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +5E329F86-FCEC-48BD-BA54-6641A56C9EDB +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_DESC +PDM +Description of key %ITEM% of table %PARENT% +Description of key %ITEM% of table %PARENT% +Description of key %ITEM% of table %PARENT% + + +8B2C46C0-1E1B-4AF9-9D1F-9B06C900E168 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +43D4DA1D-9A11-4601-B9AB-214890A7973F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +0446F4AA-F6E7-4264-8E82-A7E3CBC305C8 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_NOTE +PDM +Annotation of key %ITEM% of table %PARENT% +Annotation of key %ITEM% of table %PARENT% +Annotation of key %ITEM% of table %PARENT% + + +6A2589F5-1FC6-49C7-BB75-0A681147A6B0 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +16168E87-1771-4234-BF0C-E9ED315E65B4 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +AAC8A7A7-C55F-4F3E-B375-AF4E5D422195 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +F317BA43-2C18-4193-B33F-02AC720FA049 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +07ED383F-83AF-423E-B26E-BB3FA0B0B444 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +2A21A269-E429-4044-B1E4-651250673764 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_COLN_LIST +PDM +Column list of the key %PARENT% +Column list of the key %PARENT% +Column list of the key %PARENT% +1 +-40 Name +-40 Code + + + +7559F107-2000-472B-B281-B4C747CF63EB +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +F50D000B-9DDE-4D71-972E-948C98303DD7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C57D7616-E303-4CC7-AFB7-412E39CE9906 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +1CA5E044-04BC-4A29-99EE-9D7ED6B9724C +1438826575 +wangzg +1438826575 +wangzg + + + + +97D15AD1-BA49-411C-97D9-D6E2DAD4B93F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_DEPND_LIST +PDM +Dependent Object list of key %PARENT% +Dependent Object list of key %PARENT% +Dependent Object list of key %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +73D370D5-8C34-4760-88AF-4F86D487EAF3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +282E7C25-E921-4216-8A77-FE8870DDBEF5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +48B6E11C-174D-4A2F-89CB-4789DF2741E2 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +A8E4F7C5-C10F-4B3D-9D63-F1BBE01E8554 +1438826575 +wangzg +1438826575 +wangzg + + + + +3A9A98C6-B8C5-4C98-BAC1-E9A10115AD4B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_KEY_EXA_LIST +PDM +Extended Attribute List of key %PARENT% +Extended Attribute List of key %PARENT% +Extended Attribute List of key %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +7C7CF81F-137D-4BE9-B302-80F8CC777E0B +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +E62D767F-EAA4-481C-9473-0960CCD0D471 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +D3B2A07D-22D5-4172-A1A0-2317AEC989F0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +E33F94EC-B976-4C6B-AA29-E4B97BCC4D33 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +B8C903F1-E644-4E92-9822-AAD61C49257A +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +3D02C079-F819-4BEE-BD74-4FA5319B03CC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_LIST +PDM +Index list of the table %PARENT% +Index list of the table %PARENT% +Index list of the table %PARENT% +1 +-20 Name +-20 Code +-12 Unique +-12 Clustered +-12 Primary +-12 ForeignKey +-12 AlternateKey + + + +177EE406-8EEB-4E7C-BD8B-1EDE03B712D9 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +04A9ED93-A469-400E-874C-475D4588DBF5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +FCC3B898-D265-4F0C-BB7C-6341CDE88C73 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +04B9B8BD-B15E-4655-A18A-8B6510D180E0 +1438826575 +wangzg +1438826575 +wangzg + + + + +5E23D704-D104-495B-9EFE-C3EE310AECB4 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_GROUP +PDM +Index %ITEM% of table %PARENT% +Index %ITEM% of table %PARENT% +Index %ITEM% of table %PARENT% + + +AD245343-13A9-4DF7-9AEB-2212069C3A2E +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_CARD +PDM +Card of the index %ITEM% of the table %PARENT% +Card of the index %ITEM% of the table %PARENT% +Card of the index %ITEM% of the table %PARENT% +Name +Code +Unique +Clustered +Primary +ForeignKey +AlternateKey +Table + + + +F21A37B5-F131-4F89-A0FF-F17324AA22F2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +DB78756F-A98A-4D23-BFF5-83BF6F2FF3A2 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +7585D41F-3670-40D4-BD09-D00AE9700BDD +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +DE681DFB-ED3D-4E59-93D7-5068DF2EA4EE +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_DESC +PDM +Description of index %ITEM% of table %PARENT% +Description of index %ITEM% of table %PARENT% +Description of index %ITEM% of table %PARENT% + + +0DE7A1E7-B6BA-46C9-9B95-19BCB6DCA304 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +47C60FF3-4C60-487E-AA17-4001ECC6382D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +21F0DE81-8BAA-4940-94F2-443605B14668 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_NOTE +PDM +Annotation of index %ITEM% of table %PARENT% +Annotation of index %ITEM% of table %PARENT% +Annotation of index %ITEM% of table %PARENT% + + +73CCF8DA-2E05-4519-8C9F-AF95C1C9D3BD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B52FD760-DA57-45FB-A71B-D396699414DB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +8532EC32-666B-45FE-B0FF-C8FA4F0EF00F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +DD13C345-8E15-4F67-9AEC-E9CF7420E640 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2E9BAE80-3E84-49E0-A81C-975AC6B7846B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +2F277086-09BD-4E05-869C-95BA034A3006 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_COLN_LIST +PDM +Column list of the index %PARENT% +Column list of the index %PARENT% +Column list of the index %PARENT% +1 +-38 Name +-38 Code +-24 Ascending + + + +3064E1AB-EB96-437D-BAD9-13826CB7081C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +D7BD3D93-E8ED-4646-B46A-A55496FDBD7D +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +F52DB6A1-4446-4055-8695-E19C3F8957A5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +7848BF20-AA06-4268-B4F6-95CEA60620B0 +1438826575 +wangzg +1438826575 +wangzg + + + + +17BD6126-7B76-46FD-8D57-E0638FEC319D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_DEPND_LIST +PDM +Dependent Object list of index %PARENT% +Dependent Object list of index %PARENT% +Dependent Object list of index %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +8589BE56-8680-4FA0-ADCB-4670D6CFB15D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7F6E5C5F-CBEF-4E00-921A-51148ED5EFD0 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +182B13B3-1CD9-4A9E-BACF-C337C847D5CF +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +EAFB5D08-EE52-4786-A70C-6FA3A03AED59 +1438826575 +wangzg +1438826575 +wangzg + + + + +90D11559-1FB7-417B-805E-EE2105D2BD1F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_INDX_EXA_LIST +PDM +Extended Attribute List of index %PARENT% +Extended Attribute List of index %PARENT% +Extended Attribute List of index %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +F2C92C1D-C432-4EA2-9249-35A1B7A3A22D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A0C16920-70A7-4AE1-B103-23E786977AF4 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +14D98F96-3872-48C1-90F6-A1EE5CE3E770 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +2DF41157-B7EF-461A-AC6F-DAE9C8EA5CAF +1438826575 +wangzg +1438826575 +wangzg + + + + + + +C943F672-BFE5-4B14-95C6-1BED541323CB +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +F0DD4D96-619E-4BDF-8287-9A8960A3A81C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_LIST +PDM +Trigger list of the table %PARENT% +Trigger list of the table %PARENT% +Trigger list of the table %PARENT% +1 +-50 Name +-50 Code + + + +8130C57C-7D72-4606-BB0F-6079C97A042D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +54C2B576-DE00-42C2-8803-9DE9F6BEC837 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +AC57E7D6-E8AF-4894-BF22-7912C2BF6F41 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +3BB52835-831A-438A-93A8-B25FD20DF259 +1438826575 +wangzg +1438826575 +wangzg + + + + +8A087F5C-CBC7-45AA-AE83-D29B848919A1 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_GROUP +PDM +Trigger %ITEM% of table %PARENT% +Trigger %ITEM% of table %PARENT% +Trigger %ITEM% of table %PARENT% + + +701146CE-47F8-47EF-8072-8083498120BA +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_CARD +PDM +Card of the trigger %ITEM% of the table %PARENT% +Card of the trigger %ITEM% of the table %PARENT% +Card of the trigger %ITEM% of the table %PARENT% +Name +Code +Generated +Table +TriggerTemplate +UserDefinedSQL + + + +BCA51F5C-96DB-4B9F-8BA0-CB14EFCF34D2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C80C450A-9771-44D0-BBF3-54CA61BE8138 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +888971D4-61CC-4C40-B3E4-0CCBC6130DEA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +D890B85C-4BF9-4FE4-B60D-ABF760612BDF +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_DESC +PDM +Description of trigger %ITEM% of table %PARENT% +Description of trigger %ITEM% of table %PARENT% +Description of trigger %ITEM% of table %PARENT% + + +4F28E504-D71B-4A71-BC87-EF429B5652CB +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +533B9509-BB7F-41FA-8DA5-378DA61CEDB9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +B7D4E5F4-D80B-4C6C-9030-F1A018F22C71 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_NOTE +PDM +Annotation of trigger %ITEM% of table %PARENT% +Annotation of trigger %ITEM% of table %PARENT% +Annotation of trigger %ITEM% of table %PARENT% + + +C928B77A-2224-4AD8-A4A5-9EE92E9EA9DC +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9C6B6465-929B-40B9-922B-5325EAB752A2 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +7B91B4C3-FD5D-4A74-8DF8-EEEE6A872783 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +ED1BEEB3-858A-4A5E-8E86-6B441627CAC3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C199D0FE-6F39-49C7-A180-3362DF2C8ED9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +4DEAB74F-A35A-4A58-B4E6-9388AB4C1201 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_TRGR_EXA_LIST +PDM +Extended Attribute List of trigger %PARENT% +Extended Attribute List of trigger %PARENT% +Extended Attribute List of trigger %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +4DF1F164-EC13-4042-9FA6-C269127DDCE3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +4B01B6D9-9F77-4CAC-9D02-89D0303D1065 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +579C66E3-7497-4CC3-B3C2-DDFE5E747A54 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +932C530C-96EF-4665-9701-92010F57B564 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +BE951C5E-30F5-4923-8629-9FD0F4385A66 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +9D406AD7-507F-45F5-9EB0-8B0E8189BD82 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_LIST +PDM +Mapping list of the table %PARENT% +Mapping list of the table %PARENT% +Mapping list of the table %PARENT% +1 +-50 Name +-50 Code + + + +546EEFAB-0BDC-4076-B67B-21B615771DB5 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +80612629-B551-4BF7-BF9A-252CC8A12457 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C1F9ACD8-153E-48D5-B19E-F49B23538C91 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +5AC0B267-7633-468E-9DF3-54EFD1201096 +1438826575 +wangzg +1438826575 +wangzg + + + + +6A71369C-DE68-4475-9D1A-7F9810202268 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_GROUP +PDM +Mapping %ITEM% of table %PARENT% +Mapping %ITEM% of table %PARENT% +Mapping %ITEM% of table %PARENT% + + +341A993E-B393-46D1-9093-69677545DE69 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_CARD +PDM +Card of the mapping %ITEM% of the table %PARENT% +Card of the mapping %ITEM% of the table %PARENT% +Card of the mapping %ITEM% of the table %PARENT% +Name +Code + + + +BD2D70E8-3DC3-4797-AF92-9722FECEE836 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +6F3D01FE-C95E-4530-995D-D5565117F17F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +3DB04ABC-F481-461D-9F98-3FA360F58970 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +E3D40E98-ED5A-4D4C-A403-C25552522CB0 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_CRTR +PDM +Criteria of mapping %ITEM% of table %PARENT% +Criteria of mapping %ITEM% of table %PARENT% +Criteria of mapping %ITEM% of table %PARENT% + + +C184F9A6-2167-4FFF-A010-86BEDFD11AF1 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7E9F99DB-8473-4273-B169-6B9C302C8FE3 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +3E15B070-CF81-4154-80C3-86C13DD695C6 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_EXPR +PDM +Source expression of mapping %ITEM% of table %PARENT% +Source expression of mapping %ITEM% of table %PARENT% +Source expression of mapping %ITEM% of table %PARENT% + + +29597FE0-B8A5-4CC2-83EB-CB5E4474BF45 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +72FBE188-460C-44F3-86CD-BE1E7234E135 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +81BC1843-AF2E-4AD4-B4DB-1F95C39339CC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_SFEA_LIST +PDM +Column mapping list of %PARENT% +Column mapping list of %PARENT% +Column mapping list of %PARENT% +1 +-50 Column +-50 MappedTo + + + +E5C45D73-B0E8-48BD-912A-6BE296CD957A +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +BEDE95D8-722B-451F-8E68-723939D9E24A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +06F984F1-9539-4424-82E5-C35619C3F24E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +585F064A-AA7E-4BB1-9CFA-C3DA1D668528 +1438826575 +wangzg +1438826575 +wangzg + + + + +86B34BFA-E35D-4023-9E59-D42E02CAAD29 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_TABL_CMAP_SCRC_LIST +PDM +Table sources list of mapping %PARENT% +Table sources list of mapping %PARENT% +Table sources list of mapping %PARENT% +1 +-50 Name +-50 Code + + + +BD11B0AA-AEAA-4CD6-BEA4-8F7E923B79E3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +62BAC1EA-8043-4A01-8F63-6ED7523B5416 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +363CF67A-6BED-4CF2-823C-D8BA32446837 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +4B0EF0E9-82DD-40A7-8094-DCC339BEF933 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +8FB348CD-52DE-4D1C-AD15-93744461DFC8 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +AE7F99BC-D289-4795-8318-F3908320F4CD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +74E65177-8C80-4F5E-9050-1F9C6C1E01D5 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +D94CFB86-E22F-48F2-A7A5-DFCEFBA5429E +1438826575 +wangzg +1438826575 +wangzg +1 +PAGEBREAK +PDM + + + + +480F5F8F-4708-41D8-B413-BA485A8D4DF0 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +B9ACDA62-DBFB-436F-B8AC-531579057149 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +References + + +F99D134F-43E4-4180-A1EC-446E284B8995 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Model level references + + +0B143312-0B37-40CC-AF6E-12189932BCE0 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_TITLE +PDM +Reference %ITEM% +Reference %ITEM% +Reference %ITEM% + + +E1A06B6D-20E3-425C-B821-44D183EA7192 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_CARD +PDM +Card of the reference %ITEM% +Card of the reference %ITEM% +Card of the reference %ITEM% +Name +Code +ParentTable +ChildTable + + + +021389B9-EE64-48D3-910A-891698FD12A5 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2328383F-0BE7-4900-9D47-A0C3F9528574 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +166CFC9C-F08D-4150-862E-058CB4115760 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +C8571AC4-8332-4E10-B646-34D87279B07F +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_DESC +PDM +Description of reference %ITEM% +Description of reference %ITEM% +Description of reference %ITEM% + + +516B5AC2-2D53-43CE-AE1D-6204C2ACC83F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B3106FA9-9AEF-451C-A6B8-B1922E678036 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +EB6789C7-7230-404A-A8A6-13838DBD0E17 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_NOTE +PDM +Annotation of reference %ITEM% +Annotation of reference %ITEM% +Annotation of reference %ITEM% + + +0FB6CA1D-0AF2-4D79-82DD-3F52E95D7251 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +A768D632-07D1-4D5A-ACBB-67D727D312DC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +A0E76F69-568F-40C0-8644-C7C7814B16E3 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +F619BC2D-0B70-48F8-B26E-61BF402C7D3D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B6DC27FE-D842-45E1-A28A-DF5D01DCF846 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +CE99F407-5B6C-4B29-8576-81D597D3CA48 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_DIAG_LIST +PDM +List of diagrams containing reference %PARENT% +List of diagrams containing reference %PARENT% +List of diagrams containing reference %PARENT% +1 +-50 Name +-50 Code + + + +39181E5B-5AAA-4127-B623-42F725A9A5F7 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +1F57F393-EF5E-4DAE-96DF-5845295B9E47 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +BAEB6119-6255-4E9B-9FA1-8DD3A0B15312 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +1F7714E4-922B-450C-8247-3536262B9986 +1438826575 +wangzg +1438826575 +wangzg + + + + +C634C8F0-4354-41EC-8E25-0E1672BDD95B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_JOIN_LIST +PDM +Reference join list for reference %PARENT% +Reference join list for reference %PARENT% +Reference join list for reference %PARENT% +1 +-50 ParentTableColumn +-50 ChildTableColumn + + + +E718DA08-47EA-42DC-AF5A-4159C312C587 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +676CE227-5A36-430A-A04A-6F49CD51881B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +D8E102A7-17D0-4FA7-A7F5-9B5554E80E1E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +2A1D7C83-7AEF-4218-9997-9790366DE0D6 +1438826575 +wangzg +1438826575 +wangzg + + + + +1F5BF9EE-F23A-4EC0-B3A7-34152147D2C7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_RULE_LIST +PDM +Business rule list for reference %PARENT% +Business rule list for reference %PARENT% +Business rule list for reference %PARENT% +1 +40 Name +-40 Code +-20 Type + + + +4B17089D-E531-4ED5-986E-4A39ACF39F33 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +51752638-DFD2-4A19-976E-390086442EE2 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +5C783F9E-BB05-4999-970E-FE57EE07E6CD +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +109CCB76-D5F5-4AC5-8785-4A37652D921C +1438826575 +wangzg +1438826575 +wangzg + + + + +99605E69-8DC5-4A2E-B852-9A79DFD50430 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_DEPND_LIST +PDM +Dependent Object list of reference %PARENT% +Dependent Object list of reference %PARENT% +Dependent Object list of reference %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +C5BC92D8-D3DE-4CAD-AFD4-E66C0870944B +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +91F43D70-6A63-4628-B132-AE4FB7A23CE9 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C3313C5A-60EB-4A9E-8FD1-2DA232F77F1F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +6F754D40-CA8E-40CD-8578-8AB49C6F74C2 +1438826575 +wangzg +1438826575 +wangzg + + + + +61237585-245A-4ABD-A498-94AF3CE12408 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_EXA_LIST +PDM +Extended Attribute List of reference %PARENT% +Extended Attribute List of reference %PARENT% +Extended Attribute List of reference %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +6D84CCBD-3E02-423E-AA49-4B98C925A4C3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +3808EE16-D15C-4646-BB1A-8AB915537309 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +BCE59FE4-8D40-4D0D-8D30-67784F57CA23 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +583A2AA7-DCF3-4B00-A63C-1DE2DE625E81 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +BF6FA134-ED23-4C1F-86C9-1E442C048F84 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +974B6CE4-5442-4D60-833F-A73DEA5C02BB +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +F8D67F75-385F-4624-9D48-97550FA99932 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_PCKG_TITLE +PDM +Package %ITEM% +Package %ITEM% +References from Package %ITEM% +1 + + +50CCD50D-D594-4DC2-BDBB-D9CFB9D6601D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_TITLE +PDM +Reference %ITEM% +Reference %ITEM% +Reference %ITEM% + + +84DFA498-0B5E-4871-A217-4288FEFD8F5B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_CARD +PDM +Card of the reference %ITEM% +Card of the reference %ITEM% +Card of the reference %ITEM% +Name +Code +ParentTable +ChildTable + + + +09D1BECB-F2CE-483E-92D8-6C56F3E751DE +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +CC95B40C-0B66-448F-9A93-D9D9B9DD6353 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +E0F72378-FB1C-4DCC-912B-6B964E81B8BC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +EF824D5E-5640-4964-8E80-9CDD12EBE641 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_DESC +PDM +Description of reference %ITEM% +Description of reference %ITEM% +Description of reference %ITEM% + + +86507A4E-9D49-47F1-A81C-5879C967024A +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +C63DE12E-C0A6-4510-A0A7-BFC74862030A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +DB753673-C5EB-4B90-A3AA-FAF5341AA78A +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_NOTE +PDM +Annotation of reference %ITEM% +Annotation of reference %ITEM% +Annotation of reference %ITEM% + + +FCC35D5B-A9E2-4B94-A173-4CC14516139E +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +6E405052-4BA9-4400-8E14-7BE415405AEB +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +6CED4897-15E6-42D1-9AD3-E25B5EA72BBD +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +21F744E1-99EE-4778-A0F2-DD9A6B270698 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +46AFE362-B5F2-4CEE-99DA-D972A1884D42 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +654B894D-D92C-4B55-8CD9-D90263904A4B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_DIAG_LIST +PDM +List of diagrams containing reference %PARENT% +List of diagrams containing reference %PARENT% +List of diagrams containing reference %PARENT% +1 +-50 Name +-50 Code + + + +20FABC0E-8A03-4D32-81EC-C44A0B92B4CA +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +18F17F0F-7B4B-4599-B684-0B7A44C69421 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +779A0F8D-3FAE-4FD1-9AB1-BF28CAB568CD +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +5B03B318-CD90-4B5D-8939-68CBBC63F37E +1438826575 +wangzg +1438826575 +wangzg + + + + +E81048B0-4DA6-462C-A7FF-78BD0BBA6CE5 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_JOIN_LIST +PDM +Reference join list for reference %PARENT% +Reference join list for reference %PARENT% +Reference join list for reference %PARENT% +1 +-50 ParentTableColumn +-50 ChildTableColumn + + + +CEE07F7C-AFE7-4486-A94A-2FFEB05697E4 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9F446646-88AF-482A-A6C4-EC8A2FF8461E +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +6AC9AE02-3A17-4375-9F1A-4D342BF6F111 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +1D24D2A8-4981-4F43-9891-F325A1EF0A2F +1438826575 +wangzg +1438826575 +wangzg + + + + +370395BF-79F1-4B0D-BAF2-DFB500FE84CF +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_RULE_LIST +PDM +Business rule list for reference %PARENT% +Business rule list for reference %PARENT% +Business rule list for reference %PARENT% +1 +40 Name +-40 Code +-20 Type + + + +B1AAF28E-A95C-4BE2-9ED7-79842465CDAE +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +DD46197F-7D7C-493D-86EA-559707700BA6 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +06B849C0-0905-439B-BEC4-F546886CCB35 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +EFDD7E8D-997F-4453-BB68-DD2194DD747C +1438826575 +wangzg +1438826575 +wangzg + + + + +86D44A40-8F37-4FF4-8713-06CB4880438C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_DEPND_LIST +PDM +Dependent Object list of reference %PARENT% +Dependent Object list of reference %PARENT% +Dependent Object list of reference %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +49855054-C229-4E05-84B8-A1A15F981DC9 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B196A2F0-E7B1-4FF0-B383-DF3C2926C344 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +CE28EFC3-0FDB-46A4-B6C0-12313AD358BA +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +993870EC-2259-4889-B585-9374A1496C38 +1438826575 +wangzg +1438826575 +wangzg + + + + +B883E351-8890-4B57-8693-FB7DE4127E3B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_REFR_EXA_LIST +PDM +Extended Attribute List of reference %PARENT% +Extended Attribute List of reference %PARENT% +Extended Attribute List of reference %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +74B88D16-D888-436C-92FF-F59D41CF95E9 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +761D1EA6-FAB5-49DD-89FE-C342A59982D6 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +0E0BC3B5-AD8D-407A-891C-C0D3355C250C +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +DFF5E9C8-0278-4E4A-BD9C-61C6EF795588 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +690E5AA0-6621-4F24-A804-C5595216619F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +3C62EEAB-DCE7-48B8-A74B-9D1895C65738 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + +7C9BF92E-C89E-4803-9883-90355D877B13 +1438826575 +wangzg +1438826575 +wangzg +1 +PAGEBREAK +PDM + + + + +ECE42FAE-CF03-4128-B156-4EBCA0846D69 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +66FC4704-1286-46FD-8BD8-3950908E2815 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Views + + +899EA775-A62A-4594-A275-92620A8A3749 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +TITLE +PDM +Model level views + + +4E3C722B-ED11-438D-9256-3C8DD5546187 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_TITLE +PDM +View %ITEM% +View %ITEM% +View %ITEM% + + +8429A8F0-B914-4F68-9FDC-A2433CE7B393 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_CARD +PDM +Card of the view %ITEM% +Card of the view %ITEM% +Card of the view %ITEM% +Name +Code + + + +9B4101DB-DC75-4B2E-B541-3E11F25B90DD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +33F98558-E682-4CC8-816B-BBB9EAAC008A +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +6568A973-2761-44D3-8D22-B4AAB1DF8B21 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +C76B86C8-529A-4625-A1D2-862E917C225E +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_DESC +PDM +Description of view %ITEM% +Description of view %ITEM% +Description of view %ITEM% + + +98142A34-A1B0-4851-85AE-0F1C823DA11A +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +770FDE93-C2A4-458F-93DE-A18764F9AE04 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +D1487C5A-A96D-4F79-B21D-A1EBB33252FC +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_NOTE +PDM +Annotation of view %ITEM% +Annotation of view %ITEM% +Annotation of view %ITEM% + + +4EF6E501-0633-4028-8A3D-1EF2D204276D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +04CB73D9-DFB6-4DA7-B223-A303A1154BA1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +1A9709B9-7B97-4AB5-8E75-C7C6FABA8ED8 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_SQL +PDM +SQL Query of view %ITEM% +SQL Query of view %ITEM% +SQL Query of view %ITEM% + + +986322E9-B01F-46FF-A64B-180BB5CDBE7B +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +67B5C105-A253-4D7C-85F9-020D0DFCFAFC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +590318DF-8347-408A-BC4E-3C2F6C3DE035 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +C29F9891-E1AC-4F5B-BB16-13C90D75FAFD +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8F30966A-0EA1-48FD-9A97-7BDB6D0BBDC1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +C938CEC6-CE4D-4958-A847-FB91ADC96AA2 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_DIAG_LIST +PDM +List of diagrams containing view %PARENT% +List of diagrams containing view %PARENT% +List of diagrams containing view %PARENT% +1 +-50 Name +-50 Code + + + +7DC9D3E6-051F-4D09-A135-C290F66C002F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +06D1E8B6-D82C-4CC0-81C6-B102717FD008 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +A5C4396C-4522-4F89-9E32-69E81B030C90 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +CC94ACDC-3F89-488D-A0AE-C3068E0C7382 +1438826575 +wangzg +1438826575 +wangzg + + + + +DBF5F99A-01D1-4A0F-BB3A-5C8D23A5CC9B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_RULE_LIST +PDM +Business rule list for view %PARENT% +Business rule list for view %PARENT% +Business rule list for view %PARENT% +1 +-40 Name +-40 Code +-20 Type + + + +A72D8D1F-3494-4F70-9701-211E0F7A60B8 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +03E65CD3-7E5E-4927-B15B-40A4F0FAE293 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +6B291DC4-AC2E-435A-A618-543AF65890FC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +DDC75FD3-F2DE-4F55-935D-450AC2CB92D3 +1438826575 +wangzg +1438826575 +wangzg + + + + +59C657C8-E3A0-4470-9E9B-4A81D589D376 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_DEPND_LIST +PDM +Dependent Object list of view %PARENT% +Dependent Object list of view %PARENT% +Dependent Object list of view %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +EA18095B-A2AE-4961-926A-EDE9BB711CC8 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2E7346B7-3803-4618-92BD-EB80C02FC388 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +09311B6E-BFC9-4143-9F70-094B1A2C64C7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +6F111E78-D215-4870-ABBA-19D1E8991E75 +1438826575 +wangzg +1438826575 +wangzg + + + + +0C00FE9F-1057-45BE-8334-2B901AB0B9E3 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_EXA_LIST +PDM +Extended Attribute List of view %PARENT% +Extended Attribute List of view %PARENT% +Extended Attribute List of view %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +67226B95-F148-4617-9ECC-A86A347297D2 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +8B77A3CD-E750-42D1-ADC7-6A2DA961A3B7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +C4298BD3-CE7A-4FDC-AF0B-2E80CE0061F7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +59E06829-300D-4552-97EA-A0090EC7BDA1 +1438826575 +wangzg +1438826575 +wangzg + + + + +613882B2-5676-497A-BBD2-03A2FF1A04EE +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_USRDEPD_LIST +PDM +Extended Dependency list of view %PARENT% +Extended Dependency list of view %PARENT% +Extended Dependency list of view %PARENT% +1 +-33 LinkType +-33 LinkedObject +-33 LinkedObjectType + + + +DB6BC9FE-AD4B-4D00-AEBA-AB4A6302E223 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +D5A39070-F551-4B78-9BEF-1A67320C5F86 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +3DA85E13-465C-440B-BC17-65A2D400C10F +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +1B1BAC3B-E508-457E-8C68-76D0F7D22A56 +1438826575 +wangzg +1438826575 +wangzg + + + + + + +D8FFF583-976A-4617-9454-D77D78E5BF8F +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +B9005A8D-BB1D-4142-B878-BB8023CF9A44 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + +78ED27BE-EB41-4821-9DAA-6FA0ADFF86CB +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_PCKG_TITLE +PDM +Package %ITEM% +Package %ITEM% +Views from Package %ITEM% +1 + + +75D72D40-3D77-4562-8F93-0760369505AE +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_TITLE +PDM +View %ITEM% +View %ITEM% +View %ITEM% + + +6678E9FA-6F8C-4829-B89F-32DDA89EA68D +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_CARD +PDM +Card of the view %ITEM% +Card of the view %ITEM% +Card of the view %ITEM% +Name +Code + + + +3D45ECC9-31E9-4F2D-AC87-6D08D37C23FB +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +B6007C02-84F9-433E-AE6C-D88031D096E1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +3 +3 +15 +18 +2 +1 +18 + + +9898F350-0FE7-4DD3-824B-6809566ADCFC +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +2 +1 +18 + + + + +26955293-DAF5-40DC-9092-3E5169C6293C +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_DESC +PDM +Description of view %ITEM% +Description of view %ITEM% +Description of view %ITEM% + + +6B93B057-8DCB-4EF2-A8A6-C5383817BE68 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +35D5EFD8-9D93-42B7-B524-25276062FCA1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +096AFA99-82CC-4AFA-AB9D-BF0EC0249B3B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_NOTE +PDM +Annotation of view %ITEM% +Annotation of view %ITEM% +Annotation of view %ITEM% + + +36B501F7-8CF3-450A-A055-E3C84A1F0F3C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +2CF1A987-18BF-4809-B51B-7FDBA888E8D5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +0FF75F1B-04A6-412E-BFD5-24E8108DFD6E +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_SQL +PDM +SQL Query of view %ITEM% +SQL Query of view %ITEM% +SQL Query of view %ITEM% + + +5F485869-A3E7-429A-B806-AF9358870D29 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +879525FC-A27D-4DDB-BDC3-DF56E018FE67 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +F11D2657-C983-4D7E-962B-9005D9AE57C7 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_PREV +PDM +Code preview of %ITEM% +Code preview of %ITEM% +Code preview of %ITEM% + + +E5E27E60-56CE-48CD-97ED-54D26EB53137 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +9FF0BAE4-FE05-4350-B437-21EFEFD51182 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +0 + + + + +2D576AAF-195C-4F97-B6E8-F56E0B649A83 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_DIAG_LIST +PDM +List of diagrams containing view %PARENT% +List of diagrams containing view %PARENT% +List of diagrams containing view %PARENT% +1 +-50 Name +-50 Code + + + +DB1E19FF-72BB-414F-8756-16A6A8CF0D4D +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +0AFD6EAF-850B-4FD3-9D2F-170E9A0B2E77 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +6FD555C1-FD88-4A9E-A1A5-9408948FEF2B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +CA6FF100-7754-42A1-9399-3FF11AB81863 +1438826575 +wangzg +1438826575 +wangzg + + + + +5D5D0B44-2CE0-402C-A4FD-E2923BA85568 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_RULE_LIST +PDM +Business rule list for view %PARENT% +Business rule list for view %PARENT% +Business rule list for view %PARENT% +1 +-40 Name +-40 Code +-20 Type + + + +4457224F-68F4-4752-80AF-80DFCDEB16A3 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +E8B567AC-A14D-4218-833C-22B8CC37D191 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +FB0F98DD-A034-4AB2-B805-499581D85E9B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +6C662DE3-D406-4247-BEF9-3967728A7823 +1438826575 +wangzg +1438826575 +wangzg + + + + +9271DCDC-1D3A-4F7D-871F-D915DFF6426B +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_DEPND_LIST +PDM +Dependent Object list of view %PARENT% +Dependent Object list of view %PARENT% +Dependent Object list of view %PARENT% +1 +-40 Name +-40 Code +-20 ClassName + + + +CBF8701D-8736-4E56-A5D9-BFDF5B83725B +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +F9F15BDE-B9DD-4DEA-8CBA-D1638407F45B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +FFB7C34E-EFDA-4051-A9DB-965B8847ACD5 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +5E41D4F9-D13D-4123-B9D6-82D5DB270121 +1438826575 +wangzg +1438826575 +wangzg + + + + +51ACC7C2-7C15-42B8-8040-E6B7286FB8F5 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_EXA_LIST +PDM +Extended Attribute List of view %PARENT% +Extended Attribute List of view %PARENT% +Extended Attribute List of view %PARENT% +1 +-30 Name +-20 DataType +-20 Value +-30 TargetName + + + +FF18BBCA-DA40-4F3C-AFC3-4B23F9C7EC40 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +505E7737-E909-459C-8A4A-B85078C569F7 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +5A219499-EEEA-482E-983E-86DB390E54E1 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +F22D6EA9-5723-4CE3-B7F1-2665667B121E +1438826575 +wangzg +1438826575 +wangzg + + + + +FC3AA03B-6F1E-46B8-A65B-4A70F5271236 +1438826575 +wangzg +1438826575 +wangzg +1 +1 +PDM_VIEW_USRDEPD_LIST +PDM +Extended Dependency list of view %PARENT% +Extended Dependency list of view %PARENT% +Extended Dependency list of view %PARENT% +1 +-33 LinkType +-33 LinkedObject +-33 LinkedObjectType + + + +7C8829E0-6A35-49EA-BD09-931188B55303 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + +7816C05D-F935-45BC-893B-F5C38B005893 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +2 +1 +4 +15 +18 +1 +18 + + +3008542A-5307-41F8-A6E8-748AF9960E4B +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +15 +18 +1 +18 + + + + +D1AE4099-EF71-4482-96D1-D42B0FBF33DC +1438826575 +wangzg +1438826575 +wangzg + + + + + + +05DAA7F0-D834-43D6-8D47-74F2C1C632FF +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +0EE5B6DF-7651-48D1-9191-12E92A9B68F1 +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +353 +106 +0 + + + + + + +86E1FCE2-0B89-4D9D-872F-ED7A5B22F53C +1438826575 +wangzg +1438826575 +wangzg +Arial +10 +5 +1 +423 +106 +0 + + + + + + +63BB0783-70FF-40C5-972D-92B309133C22 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +8 + + +0C914B57-6C38-4327-8998-3DC8326665D2 +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + +F0663A5B-3127-4DC2-896D-97F999E4D192 +1438826575 +wangzg +1438826575 +wangzg +Times New Roman +10 +1 +2 + + +80C003A9-1292-48C8-830C-DA07ECA187AB +1438826575 +wangzg +1438826575 +wangzg +9549 +2 + + +6B802085-A403-43F3-B6B7-B51E0326B171 +1438826575 +wangzg +1438826575 +wangzg +19098 +3 + + + + + + + + + + + +23FAAB7C-2232-4115-A41B-73AD1E39439F +Simplified Chinese +ZH-CN +1438826575 +wangzg +1438826575 +wangzg + +F3A0BF0F-7536-11D5-A4D6-0008C79B4501 +585CBB37-C940-11D1-BD0D-00A02478ECC9 + + + + +D29EDF2E-3CE8-4205-A062-9F1DBFDBDD41 +物理结构 +物理结构 +1438826575 +wangzg +1441789773 +wangzg +file:///. +EE2423D6-A117-4A7F-ACB9-A639DA3EF182 +CDE44E21-9669-11D1-9914-006097355D9B + + + + +B7949C6E-7ADF-4322-A69D-30E10E5C35D8 +Report 2 +Report 2 +1438826595 +wangzg +1438826595 +wangzg +Administrator +%DATE% +LightBlue_Theme.css +Header_LightBlue.html +Footer_LightBlue.html +54 +18 +4 +Home_LightBlue.html +Light Blue +Standard +1 + + +E892E024-6F64-4D6C-9662-C45AD55D12AA +1438826595 +wangzg +1438826595 +wangzg +新宋体 +10 +1 +4 +423 +106 +15 +0 + + +1F5B6274-4CEE-4634-A0C5-9FEA38C0ADB5 +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +4 +0 + + + + +FA19E3AA-A169-4639-B7B8-1E812E3B7E20 +Section_1 +1438826595 +wangzg +1438826595 +wangzg +EE2423D6-A117-4A7F-ACB9-A639DA3EF182 +1 +TEMPLATE +PDM +%MODULE% %MODELNAME% +%APPNAME% %DATE% Page %PAGE% +((800,900), (1100,900)) +(21000, 29700) + + +3F0B0106-F196-4676-8DB8-8087F5C87E65 +1438826595 +wangzg +1438826595 +wangzg +1 +TBLCTS +PDM + + +18ABC3BC-9135-4994-B082-6F778407CBF7 +1438826595 +wangzg +1438826595 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +3A4057FE-4FA1-4B87-ADEC-89ED8BD38E98 +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +1 +0 + + +C890EC54-AFA8-4869-84A8-C92A546DC4DC +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +2E225515-F1F1-4590-863C-9797A6B46BDB +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +350 +1 +0 + + +A55F35E6-606D-43BB-8ED8-09508ECA111D +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +6AD325E0-4A7B-449F-916A-0D0A20FEF3AC +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +700 +1 +0 + + +E333FA4B-B103-4614-8730-0741E82E010B +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +555017E4-F54B-4C9E-9D6E-906983156BEE +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +1050 +1 +0 + + +15537DA4-373F-40FC-957E-1F394D640A69 +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +41F54F28-A8F0-47B2-B37B-FF9769FA4529 +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +1400 +1 +0 + + +C63215AC-2B0A-4A57-9044-DEC72990CDBB +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +C9DFEC0C-399E-46C5-AC14-562F4F2F518B +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +1750 +1 +0 + + +B547ED00-E025-470F-AC7C-F852D871D6E4 +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +D838A90F-46A5-44A7-980D-35F05064010F +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +2100 +1 +0 + + +FBFFD620-68DC-4F26-9C1E-85DC97F66F6C +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +144B4ABF-94A8-48EF-BFBA-7CDD2751D624 +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +2450 +1 +0 + + +2939A9EB-A1FF-49BE-873A-FBF828C27F69 +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +CB3767D7-0025-42E4-B193-DF72D13B9F68 +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +2800 +1 +0 + + +A6E2D87F-9775-442D-965A-0B8D1F2A0764 +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + + + +5DFB6306-A2FB-4EF9-977F-95A551B050B0 +1438826595 +wangzg +1438826595 +wangzg +1 +1 +TITLE +PDM +简介 + + +A327B220-F1CB-47BE-82FD-9FCAA15B3336 +1438826595 +wangzg +1438826595 +wangzg +1 +1 +TITLE +PDM +描述 +0 + + +3475680D-FF7C-4BD9-8EEB-8D37D1F7B1BE +1438826595 +wangzg +1438826595 +wangzg +1 +TEXT +PDM + + +0F21A00C-013D-4DD8-AE0A-FE5BCC315491 +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +0 + + + + + + +1A9B2CFC-94B0-46ED-A148-83BDDBEE6B5D +1438826595 +wangzg +1438826595 +wangzg +新宋体 +10 +5 +423 +106 +0 + + + + +8B485D89-3231-41B7-A65C-B50796F40E94 +1438826595 +wangzg +1438826595 +wangzg +1 +1 +PDM_MODEL_CARD +PDM +Card of model %ITEM% +Card of model %ITEM% +Card of model %ITEM% +Name +Code +DBMS +Comment +Database + + + +C0F32BAD-9B48-4A5A-9571-2B254F7674FF +1438826595 +wangzg +1438826595 +wangzg +新宋体 +10 +5 +353 +106 +2 +0 + + +C5CA124B-949C-4608-81D6-20533D55D184 +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +2 +1 +2 +1 + + +B0A06A10-33AD-44B7-B734-69D097E0765D +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +1 +2 +1 + + + + + + +07E5E0C7-2CD2-4C68-8908-BB035115E7C9 +1438826595 +wangzg +1438826595 +wangzg +新宋体 +10 +5 +423 +106 +0 + + + + +593F402B-12B3-4E57-8312-C0067A49C210 +1438826828 +wangzg +1438826828 +wangzg +1 +PAGEBREAK +PDM + + +810A0536-BFE3-4BBD-96FB-54AF838A250F +1438826828 +wangzg +1438826828 +wangzg +1 +1 +TITLE +PDM +完全模型描述 + + +24B32F17-221E-4B7E-84C3-C311D616A1D6 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_MODEL_DIAG_LIST +PDM +List of diagrams +List of diagrams +List of diagrams +1 +-50 Name +-50 Code + + + +06A08987-FE62-4E6B-B727-3696658A9868 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +281D5656-FB8F-4248-AD78-06323EAAED3B +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +1F54A24D-B2B3-4540-99A2-DFD0B440FD55 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +0E13743D-6556-40E8-B8A6-079F9517859E +1438826828 +wangzg +1438826828 +wangzg + + + + +56FE432E-7BBF-4DEB-9F26-2C2A8159C2C2 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_DIAG_TITLE +PDM +Diagram %ITEM% +Diagram %ITEM% +Diagram %ITEM% +AllDiagrams + + +9564959D-2F4D-4C57-BCFF-1EF29627D537 +1438826828 +wangzg +1438826828 +wangzg +1 +PDM_GRAPHIC +PDM +1 +1 +84 + + +32DB73C5-A3DE-4508-BA88-D03C36296D31 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +4 +0 + + + + +3E945A5E-C670-48BD-9848-8009C5B60AE8 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_DIAG_DESC +PDM +Description of the diagram %ITEM% +Description of the diagram %ITEM% +Description of the diagram %ITEM% + + +33AC4D58-EB80-444F-A2E2-22DDF1D538D2 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +E9896811-4DFC-4D24-8B3C-55F410E07FEF +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +7ED8F321-5C69-4BB6-AE15-988A4ED239AD +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_DIAG_NOTE +PDM +Annotation of the diagram %ITEM% +Annotation of the diagram %ITEM% +Annotation of the diagram %ITEM% + + +84419A19-4805-49B1-9BF9-C487B5EF941D +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +CC0CE3EA-3D00-4E9A-9384-46FFEE791FB4 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + + + +68902F38-C0D9-4550-B25B-A60017264AF1 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + + + +A7FF7D1D-6769-4C64-A46A-264364253E2B +1438826828 +wangzg +1438826828 +wangzg +1 +1 +TITLE +PDM +表格清单 + + +BDA0AC2B-F78F-49E6-BF40-2DE9D8150212 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_MODEL_TABL_LIST +PDM +List of tables +List of tables +List of tables +0 +Tables +1 +-50 Name +-50 Code + + + +F0988861-1725-4A95-9835-656C298BF173 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +3563E7FA-2DF0-40DC-9B9D-DFB8F627A00B +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +2E80E20C-A84E-43B5-9D49-BF1761753717 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +84FD7F8A-8496-4CFA-87E2-9A65D7C71144 +1438826828 +wangzg +1438826828 +wangzg + + + + +7399738E-48A6-4B21-8FED-F678CC4866AC +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_TITLE +PDM +Table %ITEM% +Table %ITEM% +Table %ITEM% +Tables +0 + + +A528CE1A-4EC1-47B1-AE87-77ACA0AFAA76 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_CARD +PDM +Card of table %ITEM% +Card of table %ITEM% +Card of table %ITEM% +Name +Code + + + +E50415DF-16FC-4056-A2B1-D56620E18BFE +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +2 +0 + + +2AD61B30-3127-4D6D-AABE-FEEE4B6E0B42 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +1 +2 +1 + + +909F4940-19E7-4031-B2DB-829C51787726 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +2 +1 + + + + +25A86E95-5C3F-44C8-A04F-14D3C967CABA +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_DESC +PDM +Description of the table %ITEM% +Description of the table %ITEM% +Description of the table %ITEM% + + +AE1A4FF2-4A75-429C-8498-BEA8F4D7ABA2 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +A7C7BD59-ECFD-49D3-B96C-9B0CF50505F2 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +C637438C-1819-46CD-8ED7-B3B60E0FED69 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_NOTE +PDM +Annotation of the table %ITEM% +Annotation of the table %ITEM% +Annotation of the table %ITEM% + + +A65007BE-AB9F-46DD-A6DB-399C843B2CD3 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +9009756B-F454-40F2-9185-E632D38A8279 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +E3BAFD6E-3914-4D8E-959C-0DD32C2DE002 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_HEAD +PDM +Begin script of the table %ITEM% +Begin script of the table %ITEM% +Begin script of the table %ITEM% + + +493DB7EE-A82A-41D2-9C97-BEB81ABEB229 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +5F03C025-12EB-4299-BED1-DE5456E622C9 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +B4BCBE41-8DC7-495E-8594-B06E3C18E30E +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_FOOT +PDM +End script of the table %ITEM% +End script of the table %ITEM% +End script of the table %ITEM% + + +B8DDE85D-A576-4B9E-A0BC-2CB98D608873 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +CAD224CE-F8DD-4BBA-BCAE-5B4FA86D6130 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +BAE3B346-14B1-4831-83CC-8FB0487D3C7B +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_CRUL +PDM +Client validation rule of the table %ITEM% +Client validation rule of the table %ITEM% +Client validation rule of the table %ITEM% + + +0ECBDB50-BAC1-4358-BC0A-8DF33B804D60 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +26C4C49B-2145-4B52-BCD0-4BF02F5637F4 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +B71D140C-43F0-4142-9C56-C3BEE34AD733 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_SRUL +PDM +Server validation rule of the table %ITEM% +Server validation rule of the table %ITEM% +Server validation rule of the table %ITEM% + + +F3C7A21B-4F45-4513-A8E0-53D2EC3FDB3F +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +91F9F4A6-B106-4E4D-8936-990267624527 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +01299C90-90AC-427B-A297-D3A273C9BFB4 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_OPTS +PDM +Options of the table %ITEM% +Options of the table %ITEM% +Options of the table %ITEM% + + +B74360D5-8FAA-44D8-BE18-CB382B86DED4 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +788D705B-7952-4B6F-A4FF-31343699DD02 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +92A47933-2FFF-42C8-9A1B-38EE93841371 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_CKCN +PDM +Check constraint name of the table %ITEM% +Check constraint name of the table %ITEM% +Check constraint name of the table %ITEM% + + +C43D933D-1BB1-4365-BAEC-F1AEBFC82C1D +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +CF30560B-8B83-4639-8BF3-C42671FE9DE7 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +F7013CF8-625E-45C9-AADC-AE3C14A7B2C2 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_RELDIAG_LIST +PDM +List of related diagrams of the table %PARENT% +List of related diagrams of the table %PARENT% +List of related diagrams of the table %PARENT% +1 +-50 Name +-50 Code + + + +16F709D3-2728-40AB-A8C6-DC8E62534A42 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +F895EBE7-AC1B-4EB6-88B5-5A8FA50F159D +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +C9155DA5-2948-41D9-B67D-222F334B03F0 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +86D3A56D-FF93-4FCE-8B21-C85C9E5D138A +1438826828 +wangzg +1438826828 +wangzg + + + + +D1F3279C-B834-410B-A5F6-F66C49E5B703 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_INREFR_LIST +PDM +List of incoming references of the table %PARENT% +List of incoming references of the table %PARENT% +List of incoming references of the table %PARENT% +1 +-16 Name +-16 Code +-16 ChildTable +-16 ForeignKeyColumnList +-16 ParentRole +-16 ChildRole + + + +32027F90-F904-4169-97CE-371FB0979C2A +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +B784C284-9C16-4C96-A2FF-C829E9BC460C +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +A68FBB0D-E4DE-423E-AF73-B4C217A26966 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +ED6481C5-E6EC-48BD-9D23-9FB3AA58245A +1438826828 +wangzg +1438826828 +wangzg + + + + +FFD56A82-6037-4F99-8CD7-24B8930AA16F +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_OUTREFR_LIST +PDM +List of outgoing references of the table %PARENT% +List of outgoing references of the table %PARENT% +List of outgoing references of the table %PARENT% +1 +-16 Name +-16 Code +-16 ParentTable +-16 ForeignKeyColumnList +-16 ParentRole +-16 ChildRole + + + +6297F7D2-0A83-486E-BFF7-BB7252D055B7 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +68A968BB-A6B3-494A-9912-97E1FDFB648A +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +E3AA91C3-D32C-4B57-AA48-B9919CB5CCF2 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +4CCC8DEA-50B5-4C60-A4A0-3A82F8F50B4F +1438826828 +wangzg +1438826828 +wangzg + + + + +BAF0A0EE-F567-4893-818A-CEA8F32EE034 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_ARTC_LIST +PDM +List of remote articles of the table %PARENT% +List of remote articles of the table %PARENT% +List of remote articles of the table %PARENT% +1 +-100 ShortDescription + + + +8D942741-AFC8-464F-87DB-4C120F6C067A +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +70790384-3061-4C1A-B95D-45531CD0504F +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +721A5E87-E62A-4C15-BA76-B4617B3EBE28 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +83B6AB90-DD9B-47BB-B266-F58E722741ED +1438826828 +wangzg +1438826828 +wangzg + + + + +ABBF2ECA-7DB9-4AA2-BF9B-ABEE167AF6E6 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_SRCARTC_LIST +PDM +List of source articles of the table %PARENT% +List of source articles of the table %PARENT% +List of source articles of the table %PARENT% +1 +-100 ShortDescription + + + +15180172-DA08-461B-919B-9F6B26320D22 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +EFEFB915-FDAA-4D17-9FFC-D3F3A9C27F89 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +AE39EE86-E51F-472A-B53F-F69697507A1F +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +320377B1-30C4-4DBF-8336-DACA000F44F6 +1438826828 +wangzg +1438826828 +wangzg + + + + +C124674F-E91C-40FF-8B7C-9B9941DA08EC +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_SRCSTEP_LIST +PDM +List of source steps of the table %PARENT% +List of source steps of the table %PARENT% +List of source steps of the table %PARENT% +1 +-100 ShortDescription + + + +6B239353-A136-44D2-887B-4FA5C09EEC3A +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +F18A8B24-C2F9-4A7B-B4D3-7B717DA40456 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +E24CFADF-A24E-4482-965C-02D02086E919 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +76090FFA-0E3B-4176-A074-3913DE6272E2 +1438826828 +wangzg +1438826828 +wangzg + + + + +71E5D074-3D96-446C-A399-6BD7AF3E7AE0 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_DSTSTEP_LIST +PDM +List of target steps of the table %PARENT% +List of target steps of the table %PARENT% +List of target steps of the table %PARENT% +1 +-100 ShortDescription + + + +8115E0E3-5E44-4DF3-922D-BC07DAD19216 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +D53D928D-C3D8-426F-99C2-472ABDD7DC4F +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +83D2B58D-9E3E-46A0-8773-9C7C9367C533 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +06F0D35D-3431-474E-B355-4500AD666239 +1438826828 +wangzg +1438826828 +wangzg + + + + +B21C4CE5-4C0A-405A-8F6C-A16385F7641F +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_DIAG_LIST +PDM +List of diagrams containing the table %PARENT% +List of diagrams containing the table %PARENT% +List of diagrams containing the table %PARENT% +1 +-50 Name +-50 Code + + + +2565D9A3-A562-4F99-B556-15CAAC7D9F92 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +BDB0D138-1E3F-40F2-B469-F47D1270F9EA +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +11826D7F-7584-427F-BE45-61953C1D7F87 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +5516E57A-BA5B-4BF1-861F-CAB3EA3F59A2 +1438826828 +wangzg +1438826828 +wangzg + + + + +C5BB6D71-49F9-4FA4-9696-66D5AF71D45D +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_COLN_LIST +PDM +List of columns of the table %PARENT% +List of columns of the table %PARENT% +List of columns of the table %PARENT% +Columns +1 +-50 Name +-50 Code + + + +CDA5DF28-7BCE-447A-9947-B67A0F57B06A +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +F971F9EC-BABE-44BD-9F2A-9A488D3F5545 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +ACBDE479-F317-478A-9014-C095D4CD5764 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +15512384-3C73-4013-89D5-8A4D2264CE54 +1438826828 +wangzg +1438826828 +wangzg + + + + +8152DE1F-0F19-4A14-9550-C39CF24C76F3 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_TABL_KEY_LIST +PDM +List of keys of the table %PARENT% +List of keys of the table %PARENT% +List of keys of the table %PARENT% +Keys +1 +-50 Name +-50 Code +20 Primary + + + +0B4CD484-4C50-4A73-BF18-72B43BE6E2AD +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +5E951F0E-E56D-4F7F-A945-DE2927B03820 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +BE2807D9-B5D8-4811-A769-4889E543C6EE +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +0396C61B-EF8D-4BF5-BFCB-E1D98EEAF04B +1438826828 +wangzg +1438826828 +wangzg + + + + + + +AB793540-0BA2-4304-AF99-780041157845 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + + + + + +515DE231-874F-4071-A220-5F57DF105C98 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +423 +106 +0 + + + + +09B20CAB-E271-4E55-9A12-CBB29C8DB029 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +TITLE +PDM +参考清单 + + +F56D65E9-E4C4-41C6-9833-3EA8D4915399 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_MODEL_REFR_LIST +PDM +List of references +List of references +List of references +0 +References +1 +-14 Name +-14 Code +-14 ParentTable +-14 ChildTable +-14 ForeignKeyColumnList +-14 ParentRole +-14 ChildRole + + + +2021D970-9DF9-447D-9C49-C147968133F3 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +3575A032-8F01-48CA-9FF0-ADC09AA144E0 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +3BE50C75-2986-4BA8-9B6A-695A3F046F6F +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +F714BD3C-3901-4AF5-9D03-41C05C29A992 +1438826828 +wangzg +1438826828 +wangzg + + + + +4965233D-FB0F-4259-A539-D4D34A39ED6F +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_REFR_TITLE +PDM +Reference %ITEM% +Reference %ITEM% +Reference %ITEM% +References +0 + + +68E1EBA3-26C7-4195-B301-8FB49FFF8EAA +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_REFR_CARD +PDM +Card of reference %ITEM% +Card of reference %ITEM% +Card of reference %ITEM% +Name +Code +ChildTable +ParentTable +ForeignKeyColumnList +ParentRole +ChildRole + + + +9D12016E-2353-4ABB-B23F-B54393C2D407 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +2 +0 + + +D5D76FA9-2BE8-4CC7-A901-5BE67DC8ACCB +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +1 +2 +1 + + +48C533AD-8036-412F-B83F-C980B06D75AF +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +2 +1 + + + + +403A4DDB-3007-4DCD-ACF5-687046FB0233 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_REFR_DESC +PDM +Description of the reference %ITEM% +Description of the reference %ITEM% +Description of the reference %ITEM% + + +16FC3393-FDF3-4E17-92CD-CE90A7EED928 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +17F1AF25-8B65-4164-93AC-279624CD20F7 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +3BB05217-186C-44AB-BB23-6F1E81E26D3C +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_REFR_NOTE +PDM +Annotation of the reference %ITEM% +Annotation of the reference %ITEM% +Annotation of the reference %ITEM% + + +EDA7D256-8FE2-4AC1-9888-25ED45E29DFA +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +8EF80592-9874-4223-BEF4-4829DE3C0756 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +0 + + + + +5D9080D2-7D9D-43C3-8AE3-357D0BB35073 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_REFR_RELDIAG_LIST +PDM +List of related diagrams of the reference %PARENT% +List of related diagrams of the reference %PARENT% +List of related diagrams of the reference %PARENT% +1 +-50 Name +-50 Code + + + +230D11C7-4435-4C66-8897-3936B477AD24 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +263A36E9-F57A-484F-9DD4-AC143C265232 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +BD13E38A-4C8A-498D-9D05-97520C73071A +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +69F1F82F-F68C-4C01-9FBA-7D1D8D9A0A43 +1438826828 +wangzg +1438826828 +wangzg + + + + +3BB5CF90-2D39-41BF-84E6-CA52604E4620 +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_REFR_DIAG_LIST +PDM +List of diagrams containing the reference %PARENT% +List of diagrams containing the reference %PARENT% +List of diagrams containing the reference %PARENT% +1 +-50 Name +-50 Code + + + +215BC95B-11B3-4B73-8E69-AB5D3DEEDBBE +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +5FFF4AF4-7382-413B-850D-037742E33B24 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +EF45359F-F5BB-4D30-B841-E4892558ADDC +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +4E4BFBEB-DAD2-4F31-8133-B32DCBAAAE75 +1438826828 +wangzg +1438826828 +wangzg + + + + +FB71305B-B04B-4DBE-8966-7635F399206C +1438826828 +wangzg +1438826828 +wangzg +1 +1 +PDM_REFR_JOIN_LIST +PDM +List of reference joins of the reference %PARENT% +List of reference joins of the reference %PARENT% +List of reference joins of the reference %PARENT% +Joins +1 +-33 DisplayName +-33 ParentTableColumn +-33 ChildTableColumn + + + +1450F4D9-204A-44EF-8274-D8344D501199 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + +5A89E8EC-F97D-482B-BA02-BDA0B6A0DA0F +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +D742F7FB-463D-469D-92A5-3D67EC831E30 +1438826828 +wangzg +1438826828 +wangzg +Microsoft Sans Serif +10 +1 +1 + + + + +A1681EA7-B22A-4DAD-8F27-4F747DD59E84 +1438826828 +wangzg +1438826828 +wangzg + + + + + + +573C1FB3-9AC7-40D6-9FD7-5C28D311C4D1 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +353 +106 +0 + + + + + + +1EF571D5-BF7A-411A-821B-D15FBB5301F6 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +423 +106 +0 + + + + + + +D3E78AC9-8DBC-4C73-BA6D-603E3E57E865 +1438826828 +wangzg +1438826828 +wangzg +新宋体 +10 +5 +423 +106 +0 + + + + + + +E6435D70-EE91-42BF-877A-5041D3D9441D +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +8 +0 + + +7B56A0B2-1A07-4138-BF83-8A3872657536 +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + +2A569234-8802-4EB3-994A-9A178CE8636D +1438826595 +wangzg +1438826595 +wangzg +Microsoft Sans Serif +10 +2 +0 + + +72EEC5B4-0028-4936-8F42-FC34C3ECEF4A +1438826595 +wangzg +1438826595 +wangzg +9550 +2 + + +54BDDFCD-26E9-46F0-859C-29955B61D0D3 +1438826595 +wangzg +1438826595 +wangzg +19100 +3 + + + + + + + + + + + +DA9F33F3-B3D5-41CA-938B-7DBF28BEB57C +Simplified Chinese +ZH-CN +1438826595 +wangzg +1438826595 +wangzg + +F3A0BF0F-7536-11D5-A4D6-0008C79B4501 +585CBB37-C940-11D1-BD0D-00A02478ECC9 + + + + +0A0B769E-5511-4EE7-A1F1-A9CFD97A686E +PhysicalDataModel_2 +PhysicalDataModel_2 +1438826595 +wangzg +1438826595 +wangzg +file:///. +EE2423D6-A117-4A7F-ACB9-A639DA3EF182 +CDE44E21-9669-11D1-9914-006097355D9B + + + + + + + + + +68CB4CEB-F22D-4812-92CC-D5804973C1A3 +b工区数据表 +B_PROJECT +1717662954 +wangzg +1717662960 +wangzg +b工区数据表 + + + +78CDED86-052D-4055-9EAE-71206BC0AF1A +工区名称 +ProjName +1717662954 +wangzg +1718271869 +wangzg +工区名称 +VARCHAR(64) +64 +1 + + +31D504A2-B985-44BF-89CE-E9AB1C0CC055 +数据存储类型 +DbType +1717662954 +wangzg +1718271869 +wangzg +数据存储类型 +VARCHAR(16) +16 + + +BE0CE915-5607-4630-8117-303BBDB3C7C4 +数据源 +DbUrl +1717662954 +wangzg +1718271869 +wangzg +数据源 +VARCHAR(255) +255 + + +43E2311E-8D54-401F-B6F2-E96988177F48 +数据版本号 +DbVer +1717662954 +wangzg +1718271869 +wangzg +数据版本号 +VARCHAR(64) +64 + + +19433A85-EB0F-4CC1-8DE5-E79FBF995991 +油田代码 +FieldCode +1717662954 +wangzg +1718271869 +wangzg +油田代码 +VARCHAR(32) +32 + + +4B27D129-51CA-4170-9140-47EAEE4D1260 +油田名称 +FieldName +1717662954 +wangzg +1718271869 +wangzg +油田名称 +VARCHAR(64) +64 + + +9B36C7DE-FD48-43B2-8D67-80E9499E06EB +工区描述 +ProjDesc +1717662954 +wangzg +1718271869 +wangzg +工区描述 +VARCHAR(255) +255 + + +13B81DDC-2095-41B2-B7F2-26A62F03C622 +创建人 +Creator +1717662954 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +55192BEF-FBC3-4B6B-A754-1588EF508AEB +创建时间 +CreatedTime +1717662954 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +513C52CB-1327-4B04-A59A-D751D903593C +修改人 +Modifier +1717662954 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +525D00F2-78F6-44B8-998C-1FC24BC4AC4B +修改时间 +ModifiedTime +1717662954 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +2352E98C-2589-44CD-B087-5ECCB3A0FF3F +备注 +Remark +1717662954 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +BD7080D4-245F-4009-B1BA-BD53244A7834 +扩展字段1 +Ext1 +1717662954 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +D8876F27-AB4E-4949-8322-A8DAB4CB5E71 +扩展字段2 +Ext2 +1717662954 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +A9FD1261-67BD-45C7-9791-7E53D008E4AE +扩展字段3 +Ext3 +1717662954 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +65772B63-65CD-48D3-8C50-1044910B81BB +扩展字段4 +Ext4 +1717662954 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +EB0EBCCF-7FC0-40A8-97D4-7566CEBCB667 +扩展字段5 +Ext5 +1717662954 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +04A7C187-7D87-4E47-9871-031D029DD25C +Key_1 +Key_1 +1717662954 +wangzg +1717662960 +wangzg + + + + + + + + + + +2B47C521-03B4-426E-BC17-100F4BA2F0F5 +b井基础信息表 +B_WELL +1717662954 +wangzg +1717662960 +wangzg +b井基础信息表 + + + +C41335BB-9190-446A-A1BB-295E3652F98F +油田代码 +FieldCode +1717662954 +wangzg +1718271869 +wangzg +油田代码 +VARCHAR(32) +32 + + +B19BF377-D42A-439E-824C-83213ED9D412 +油田名称 +FieldName +1717662954 +wangzg +1718271869 +wangzg +油田名称 +VARCHAR(64) +64 + + +A056F2BC-5075-43B2-BD92-C933BB56A484 +区块代码 +BlockCode +1717662954 +wangzg +1718271869 +wangzg +区块代码 +VARCHAR(32) +32 + + +3C51A620-CFF4-4B99-AEFF-824F7C89CE95 +区块名称 +BlockName +1717662954 +wangzg +1718271869 +wangzg +区块名称 +VARCHAR(64) +64 + + +33B5BB78-B090-495E-A3B0-1FFB39EC2748 +井号 +WellCode +1717662954 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 +1 + + +70D89429-8C36-4219-8E75-6D9DC1AE6DB8 +井名 +WellName +1717662954 +wangzg +1718271869 +wangzg +井名 +VARCHAR(64) +64 + + +E1283191-F34E-47E5-BD68-038C723CFD13 +井别 +WellType +1717662954 +wangzg +1718271869 +wangzg +井别 +VARCHAR(32) +32 + + +46C7F348-6D70-45A4-956A-A736294EC71F +井型 +WellClass +1717662954 +wangzg +1718271869 +wangzg +井型 +VARCHAR(32) +32 + + +70650858-FDA0-4610-B8B9-9ECD06559E78 +井径 +WellRadius +1717662954 +wangzg +1717662960 +wangzg +井径 +FLOAT + + +E0B5A491-5253-4922-99A2-F581A2812237 +井口坐标X +LocationX +1717662954 +wangzg +1717662960 +wangzg +井口坐标X +FLOAT + + +AE919077-0C73-47C5-9D3F-2071AE92AA4E +井口坐标Y +LocationY +1717662954 +wangzg +1717662960 +wangzg +井口坐标Y +FLOAT + + +7E558722-D9C6-4BAF-B8AE-E50F6BEC9F0F +创建人 +Creator +1717662954 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +EBDFFCAC-D609-400B-9083-1CB6D8E4DE13 +创建时间 +CreatedTime +1717662954 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +9C7FFCC5-EE10-416B-B758-FAF81B070496 +修改人 +Modifier +1717662954 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +4022D719-502A-459A-987D-0BB114131911 +修改时间 +ModifiedTime +1717662954 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +A6EF4DA5-4AAA-4E54-A1CF-CB587A4CDEDA +备注 +Remark +1717662954 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +7D494AA7-894D-4B69-8CEA-33FEB73B9299 +扩展字段1 +Ext1 +1717662954 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +6DDB9469-64F1-4A40-8E26-CC0959E789A1 +扩展字段2 +Ext2 +1717662954 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +A8FD648E-9A80-4440-8C55-0DCA337ED998 +扩展字段3 +Ext3 +1717662954 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +0D95BCA8-3DC4-4C11-8FAC-5E7CD7BE1F2E +扩展字段4 +Ext4 +1717662954 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +7BB1147C-C034-42A4-8A5F-FB1B6F3D8C2E +扩展字段5 +Ext5 +1717662954 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + +6A5DFCB6-A5EF-4061-9B08-F0451BC4AAE0 +扩展字段6 +Ext6 +1717662954 +wangzg +1718271869 +wangzg +扩展字段6 +VARCHAR(255) +255 + + +A9249A52-2A51-454E-B877-542F053C5BD3 +扩展字段7 +Ext7 +1717662954 +wangzg +1718271869 +wangzg +扩展字段7 +VARCHAR(128) +128 + + +F7BF5ABF-3AE5-4973-AF25-92E1A7D3669D +扩展字段8 +Ext8 +1717662954 +wangzg +1718271869 +wangzg +扩展字段8 +VARCHAR(64) +64 + + +F4DE5D73-43DD-4045-A22D-6AEE5014BAFA +扩展字段9 +Ext9 +1717662954 +wangzg +1718271869 +wangzg +扩展字段9 +VARCHAR(32) +32 + + +2774ECC1-48E1-47C4-ACA4-5168A93AADE4 +扩展字段10 +Ext10 +1717662954 +wangzg +1718271869 +wangzg +扩展字段10 +VARCHAR(16) +16 + + + + +7A364DBA-168E-4937-8023-679ABD7B2AD8 +Key_1 +Key_1 +1717662954 +wangzg +1717662960 +wangzg + + + + + + + + + + +3AEAA166-5B82-4BD6-8ABD-DAE08DB2AC3F +b地层数据表 +B_LAYER +1717662954 +wangzg +1717662960 +wangzg +b地层数据表 + + + +FA7EE3FE-83E8-464E-8AA6-43FF3CD639B0 +井号 +WellCode +1717662954 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 +1 + + +60D4D1A4-8C77-49C7-844B-358E2CB838B6 +层位 +LayerName +1717662954 +wangzg +1718271869 +wangzg +层位 +VARCHAR(32) +32 +1 + + +D767BD0B-28E3-4DCC-8CFA-A10287D4382E +顶界斜深 +TopMD +1717662954 +wangzg +1717662960 +wangzg +顶界斜深 +FLOAT + + +4A13DB62-56F4-43A8-A979-B793C4CC4D20 +底界斜深 +BottomMD +1717662954 +wangzg +1717662960 +wangzg +底界斜深 +FLOAT + + +3DED71C5-54B5-48FA-917D-F55F4C56209B +顶界垂深 +TopTVD +1717662954 +wangzg +1717662960 +wangzg +顶界垂深 +FLOAT + + +572B92FF-3BD1-462B-B6BC-44DD721E3E51 +底界垂深 +BottomTVD +1717662954 +wangzg +1717662960 +wangzg +底界垂深 +FLOAT + + +C8958FE0-462C-45E3-B28A-19133259D33F +斜厚 +ThicknessM +1717662954 +wangzg +1717662960 +wangzg +斜厚 +FLOAT + + +8D0694E4-C3FF-4827-9E45-F07E199954B1 +垂厚 +ThicknessTV +1717662954 +wangzg +1717662960 +wangzg +垂厚 +FLOAT + + +A7306D2D-F6FE-4452-B0B1-AF331F9238A2 +层位描述 +LayerDesc +1717662954 +wangzg +1718271869 +wangzg +层位描述 +VARCHAR(255) +255 + + +B87BE290-8698-4B1C-9B58-123F2B62E336 +备注 +Remark +1717662954 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +89F46DAA-C08F-4F22-B0ED-AA02963A55EF +扩展字段1 +Ext1 +1717662954 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +3D5885B6-E620-4F14-9A03-39BAD66217E4 +扩展字段2 +Ext2 +1717662954 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +F67E552C-3D33-4174-B0AA-5C670102C221 +扩展字段3 +Ext3 +1717662954 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +430A467A-F84E-4BA7-94C8-C41EC033150F +扩展字段4 +Ext4 +1717662954 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +25211353-3A4C-41FD-982F-F55751AFA00C +扩展字段5 +Ext5 +1717662954 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +BB8267AF-FF04-4CB0-A0E0-0F5F7D129E8D +Key_1 +Key_1 +1717662954 +wangzg +1717662960 +wangzg + + + + + + + + + + + +21923A04-8862-48C0-A740-54973C949C85 +p储层物性数据表 +P_DATA_RES +1717662955 +wangzg +1717662960 +wangzg +p储层物性数据表 + + + +F12BB5D9-EB41-4360-9897-47258A92093C +ID +ID +1717662955 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +EA67BAAB-DFF2-4D58-8127-6AD101AA8BB5 +井号 +WellCode +1717662955 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +2EFFB225-64D3-468A-8A49-E88EBD2637F5 +储层名称 +LayerName +1717662955 +wangzg +1718271869 +wangzg +储层名称 +VARCHAR(32) +32 + + +6019918F-0353-4913-B3CF-DAC53E94F6B4 +储层有效厚度 +EffThickness +1717662955 +wangzg +1717662960 +wangzg +储层有效厚度 +FLOAT + + +25614C6A-0413-4772-B824-3076978210CB +储层顶深 +ResTopDepth +1717662955 +wangzg +1717662960 +wangzg +储层顶深 +FLOAT + + +EA25942E-80B7-4F46-AFDA-F3E0E8DB720E +储层底深 +ResBottomDepth +1717662955 +wangzg +1717662960 +wangzg +储层底深 +FLOAT + + +E5594EDD-B197-4D61-A2F3-7B1E39393775 +孔隙度 +Por +1717662955 +wangzg +1717662960 +wangzg +孔隙度 +FLOAT + + +6BD15AD3-F32E-425C-A21E-E4603ABB6A5A +渗透率 +K +1717662955 +wangzg +1717662960 +wangzg +渗透率 +FLOAT + + +3E709BDD-2CE5-4D7E-B0B7-0DB78D78DF35 +地层压力 +FormationPress +1717662955 +wangzg +1717662960 +wangzg +地层压力 +FLOAT + + +56D2EF1F-4052-4181-A409-04542BFE63BD +地层温度 +FormationTemp +1717662955 +wangzg +1717662960 +wangzg +地层温度 +FLOAT + + +1275BE72-C24E-491E-8FDA-46FEC97C251C +综合压缩系数 +TotalCF +1717662955 +wangzg +1717662960 +wangzg +综合压缩系数 +FLOAT + + +A091B4A5-5AAA-4723-BA38-E46039EB2695 +备注 +Remark +1717662955 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +E5B04EAF-1052-43F3-8718-3EAF0D14670D +扩展字段1 +Ext1 +1717662955 +wangzg +1717662960 +wangzg +扩展字段1 +FLOAT + + +5AC39AA7-AF45-40E8-A9FC-B02EE9F98A0D +扩展字段2 +Ext2 +1717662955 +wangzg +1717662960 +wangzg +扩展字段2 +FLOAT + + +91B6E564-63A6-4487-9829-A638EE6B4FCC +扩展字段3 +Ext3 +1717662955 +wangzg +1717662960 +wangzg +扩展字段3 +FLOAT + + +2094429B-91B1-47FE-83C5-DC4FC6A487A5 +扩展字段4 +Ext4 +1717662955 +wangzg +1717662960 +wangzg +扩展字段4 +FLOAT + + +94E23398-F657-441F-82B8-876655B8A15D +扩展字段5 +Ext5 +1717662955 +wangzg +1717662960 +wangzg +扩展字段5 +FLOAT + + + + +F8E7D5C2-7F52-4201-A3F0-AE8D2FA7D19F +Key_1 +Key_1 +1717662955 +wangzg +1717662960 +wangzg + + + + + + + + + + +00C08B74-B6E0-48FE-BAAD-050A8A8113D0 +p流体物性数据表 +P_DATA_FLUID +1717662955 +wangzg +1717662960 +wangzg +p流体物性数据表 + + + +79E54AF3-77F6-465B-8236-019D39907989 +ID +ID +1717662955 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +E0FE4768-AF83-4A92-BD5C-E501A22E4458 +井号 +WellCode +1717662955 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +B57BF56A-38F9-4348-9324-3ECBF3EB5722 +溶解气油比 +GOR +1717662955 +wangzg +1717662960 +wangzg +溶解气油比 +FLOAT + + +0A13DF3F-4159-48BE-86CD-C63C143E9355 +地层原油压缩系数 +OilCF +1717662955 +wangzg +1717662960 +wangzg +地层原油压缩系数 +FLOAT + + +ED10538B-BC2F-4849-A6AC-7A855FECB147 +地层原油体积系数 +OilVF +1717662955 +wangzg +1717662960 +wangzg +地层原油体积系数 +FLOAT + + +B022E111-4D36-4359-854A-CDEF59F28B01 +地层原油粘度 +OilVisc +1717662955 +wangzg +1717662960 +wangzg +地层原油粘度 +FLOAT + + +A21A43DE-BCBC-4141-9FC7-CE0F16ACA989 +地层原油密度 +OilDens +1717662955 +wangzg +1717662960 +wangzg +地层原油密度 +FLOAT + + +8186AE46-C661-43A9-B019-96EBF69493C0 +气体偏差系数 +GasDeviF +1717662955 +wangzg +1717662960 +wangzg +气体偏差系数 +FLOAT + + +DFF5CEA3-09B0-4D1D-89F8-B18DD220B80D +地层天然气粘度 +GasVisc +1717662955 +wangzg +1717662960 +wangzg +地层天然气粘度 +FLOAT + + +7A6D1653-1CD0-4DB2-A9C4-D4D96982753F +地层天然气体积系数 +GasVF +1717662955 +wangzg +1717662960 +wangzg +地层天然气体积系数 +FLOAT + + +7E275D1B-C456-4AF6-BBDF-4AC897BEE052 +地层天然气密度 +GasDens +1717662955 +wangzg +1717662960 +wangzg +地层天然气密度 +FLOAT + + +980B55D6-1104-40D3-BCF5-2D9C4FA9C40C +地层水压缩系数 +WaterCF +1717662955 +wangzg +1717662960 +wangzg +地层水压缩系数 +FLOAT + + +C8326612-629C-407D-AD35-9438564C8032 +地层水体积系数 +WaterVF +1717662955 +wangzg +1717662960 +wangzg +地层水体积系数 +FLOAT + + +9C9A05E7-49E1-4EDF-ABBB-B76F9A35B615 +地层水粘度 +WaterVisc +1717662955 +wangzg +1717662960 +wangzg +地层水粘度 +FLOAT + + +92A6ED44-4B5A-41CB-986F-0126BF5CDB33 +地层水密度 +WaterDens +1717662955 +wangzg +1717662960 +wangzg +地层水密度 +FLOAT + + +FD4F9B6F-B298-4DAA-9520-E27A4AE97AC4 +备注 +Remark +1717662955 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +0D2CCA19-AEC0-4611-9B78-B415985FFDA3 +扩展字段1 +Ext1 +1717662955 +wangzg +1717662960 +wangzg +扩展字段1 +FLOAT + + +05E98979-7549-4C5D-9973-31D160D63F21 +扩展字段2 +Ext2 +1717662955 +wangzg +1717662960 +wangzg +扩展字段2 +FLOAT + + +BCCFEB91-561D-4A3F-8971-2A9364020543 +扩展字段3 +Ext3 +1717662955 +wangzg +1717662960 +wangzg +扩展字段3 +FLOAT + + +797DD269-78EE-4622-B80C-BF029C72A5C7 +扩展字段4 +Ext4 +1717662955 +wangzg +1717662960 +wangzg +扩展字段4 +FLOAT + + +DA6849B8-875D-423F-A7B1-F1ECE11C06D5 +扩展字段5 +Ext5 +1717662955 +wangzg +1717662960 +wangzg +扩展字段5 +FLOAT + + + + +B8914552-6700-4820-8134-8F1F8EFA9261 +Key_1 +Key_1 +1717662955 +wangzg +1717662960 +wangzg + + + + + + + + + + +5FCAD1DE-F8FE-4AA8-8353-8D45879E4C14 +p监测计量压力数据表 +P_DATA_GAUGE_P +1717662955 +wangzg +1717662960 +wangzg +p监测计量压力数据表 + + + +7E8B0422-24DD-4D9F-801F-D24D40E15066 +ID +ID +1717662955 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +E46F4D85-4A7A-494B-84BF-F9FCD80EE3FF +井号 +WellCode +1717662955 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +6A32C935-D7EE-4607-A30A-9CADFAC80A7A +时间格式 +TimeFormat +1717662955 +wangzg +1718271869 +wangzg +时间格式 +VARCHAR(32) +32 + + +814368D5-C14D-4716-8F5D-3306BE32A6E0 +时间 +GaugeTime +1717662955 +wangzg +1718271869 +wangzg +时间 +VARCHAR(32) +32 + + +ABEE8EB7-5930-448E-B337-AA5CB1CECA0F +压力数据 +GaugeData +1717662955 +wangzg +1718271869 +wangzg +压力数据 +LONG VARBINARY + + +3CA9897A-116E-403D-A0DB-901A2D3DB554 +计量计名称 +GaugeName +1717662955 +wangzg +1718271869 +wangzg +计量计名称 +VARCHAR(128) +128 + + +556868A9-67C6-4DE5-99F0-B920CA74AF5F +创建人 +Creator +1717662955 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +EDF204C1-68FE-48AA-A3E8-47265136AB74 +创建时间 +CreatedTime +1717662955 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +D4F773D3-08B4-4C96-A72F-0E215B9E3FF7 +修改人 +Modifier +1717662955 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +0ABF39E7-7D5F-4A3C-A2C9-4D991279D0BC +修改时间 +ModifiedTime +1717662955 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +71FA9ACA-3434-41E7-AD4C-66018067DD6D +备注 +Remark +1717662955 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +3D9447C3-1377-45FE-BFEA-3A0F9863C668 +扩展字段1 +Ext1 +1717662955 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +EEACB1EA-CBD8-4464-AC5C-89025F61E7B5 +扩展字段2 +Ext2 +1717662955 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +BF5048F1-3A1D-4401-AA85-653AB042316B +扩展字段3 +Ext3 +1717662955 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +3F9DBACB-F5FB-46C6-B1D4-06C8FDA38040 +扩展字段4 +Ext4 +1717662955 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +4B4B5995-4402-454C-9576-9DE770206861 +扩展字段5 +Ext5 +1717662955 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +CB56DA1B-6150-467A-A904-B5168D1FF998 +Key_1 +Key_1 +1717662955 +wangzg +1717662960 +wangzg + + + + + + + + + + +364B0B34-0B56-4A1B-9562-5C00D0CCA717 +p监测计量流量数据表 +P_DATA_GAUGE_F +1717662955 +wangzg +1717662960 +wangzg +p监测计量流量数据表 + + + +FB68BD07-A1DE-457D-8B8F-130D4E827DA0 +ID +ID +1717662955 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +E065CDE8-6CF3-4D67-BDCB-D6ACCAE4255F +井号 +WellCode +1717662955 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +589C254E-0F05-4E98-A7DF-5113316DFC7A +时间格式 +TimeFormat +1717662955 +wangzg +1718271869 +wangzg +时间格式 +VARCHAR(32) +32 + + +001403AA-C5ED-48F4-83FC-E2DA5B510406 +计量起始时间 +GaugeTime +1717662955 +wangzg +1718271869 +wangzg +计量起始时间 +VARCHAR(32) +32 + + +9EB5611A-9233-406C-B9BD-C72E71ADEE66 +计量数据 +GaugeData +1717662955 +wangzg +1718271869 +wangzg +计量数据 +LONG VARBINARY + + +A04E8688-6D2C-46D1-9DAC-E11E9968A993 +计量计名称 +GaugeName +1717662955 +wangzg +1718271869 +wangzg +计量计名称 +VARCHAR(128) +128 + + +CF59C163-543D-49DF-A780-0D708431ACDF +计量数据2 +GaugeDataEx2 +1717662955 +wangzg +1718271869 +wangzg +计量数据2 +LONG VARBINARY + + +EB16E976-0C04-44CD-9810-FC1786A6219A +计量数据3 +GaugeDataEx3 +1717662955 +wangzg +1718271869 +wangzg +计量数据3 +LONG VARBINARY + + +D921F6BF-4987-4D0C-9402-BEC5B5C7CFD6 +多相 +MultiPhase +1717662955 +wangzg +1717663000 +wangzg +多相 +INTEGER + + +24C7EECD-38E0-4A65-9A87-A8CB3E7F8E0B +阶梯类型 +StepType +1717662955 +wangzg +1718271869 +wangzg +阶梯类型 +VARCHAR(32) +32 + + +D24C4AB8-DADC-4990-99EA-61708BC3A0E3 +创建人 +Creator +1717662955 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +CFA90AFB-98B0-456E-B4B2-819B9787A450 +创建时间 +CreatedTime +1717662955 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +59B8040F-8295-424C-8C08-4AD0C297F2A7 +修改人 +Modifier +1717662955 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +37742924-4E6B-4166-A9A4-ED7822CF8DDF +修改时间 +ModifiedTime +1717662955 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +A3EDB736-FDC1-4807-AEEE-43D1FDA77CAD +备注 +Remark +1717662955 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +2DF6D32A-2DDA-4D7B-8662-A38FCE6832C7 +扩展字段1 +Ext1 +1717662955 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +731F754D-66C8-453B-9848-8871A527417F +扩展字段2 +Ext2 +1717662955 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +CC4C7C21-0C96-41AD-B1B9-BF4095A8B727 +扩展字段3 +Ext3 +1717662955 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +8FBA1C90-8D95-4BD1-A835-AC7B955018D7 +扩展字段4 +Ext4 +1717662955 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +183EB7E0-00CB-415E-B788-3F231C016F96 +扩展字段5 +Ext5 +1717662955 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +C46B54EA-4340-48A3-937C-361309DFCF06 +Key_1 +Key_1 +1717662955 +wangzg +1717662960 +wangzg + + + + + + + + + + +FD281FF9-73BA-4A04-A1D4-A754898DD676 +p监测计量温度数据表 +P_DATA_GAUGE_T +1717662955 +wangzg +1717662960 +wangzg +p监测计量温度数据表 + + + +2F820B8E-33F8-49B6-AE28-44BC0A38C60C +ID +ID +1717662955 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +BAA0B64A-CF6A-4CB4-90F3-8396644120B3 +井号 +WellCode +1717662955 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +A84A43BE-55F9-417B-93C9-D3B071E54C3C +时间格式 +TimeFormat +1717662955 +wangzg +1718271869 +wangzg +时间格式 +VARCHAR(32) +32 + + +6155A8C7-D17B-4AA2-AAAD-25CF0FEB7C07 +计量起始时间 +GaugeTime +1717662955 +wangzg +1718271869 +wangzg +计量起始时间 +VARCHAR(32) +32 + + +F43631EB-AF63-4F12-89BF-EA98C1327B41 +计量数据 +GaugeData +1717662955 +wangzg +1718271869 +wangzg +计量数据 +LONG VARBINARY + + +38BA1C27-EFEA-4A65-8BFB-D71C261CEBAE +计量计名称 +GaugeName +1717662955 +wangzg +1718271869 +wangzg +计量计名称 +VARCHAR(128) +128 + + +A25CB40C-47F6-42A5-9A8B-02938784AF21 +创建人 +Creator +1717662955 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +000AB819-378E-4887-8284-AE079C305808 +创建时间 +CreatedTime +1717662955 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +AA7E3FEB-D372-4353-B70E-B8AD54A48E02 +修改人 +Modifier +1717662955 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +6516C35C-DBAC-49C9-9BAC-64105FE41EC4 +修改时间 +ModifiedTime +1717662956 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +13CDE6E6-857B-4BE5-AD8C-768F23C9FF23 +备注 +Remark +1717662956 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +2046D816-0E35-460D-A854-493C75B02D93 +扩展字段1 +Ext1 +1717662956 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +0D834F3C-EE00-4883-8387-A446AF516C17 +扩展字段2 +Ext2 +1717662956 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +4F97EC8E-DB05-4C8F-958D-BCCC5E7279A7 +扩展字段3 +Ext3 +1717662956 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +B7352644-2657-43F5-A169-CA7E7E03AA07 +扩展字段4 +Ext4 +1717662956 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +C52DD79C-A8F4-4938-8C57-D7526784B9CF +扩展字段5 +Ext5 +1717662956 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +E41952E5-BF37-45B4-A7B0-69A0CDA984BE +Key_1 +Key_1 +1717662955 +wangzg +1717662960 +wangzg + + + + + + + + + + +60C94611-4BDF-4D51-A1A4-973631F8EB18 +p天然气气体组分数据表 +P_DATA_GAS +1717662956 +wangzg +1717662960 +wangzg +p天然气气体组分数据表 + + + +1A59C7F1-A307-4D01-B56A-D07A120BC3F6 +ID +ID +1717662956 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +C19A3D02-F8F5-4138-A0FC-87EC64CB8D46 +井号 +WellCode +1717662956 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +289A1547-7BA2-460A-8DE2-157CB117C79D +甲烷 +C1 +1717662956 +wangzg +1717662960 +wangzg +甲烷 +FLOAT + + +D399E0A4-B9E8-4170-B0D4-D2DAA9C80A74 +乙烷 +C2 +1717662956 +wangzg +1717662960 +wangzg +乙烷 +FLOAT + + +006E52B4-7A2B-4D58-8A3B-5CEB5E49FB92 +丙烷 +C3 +1717662956 +wangzg +1717662960 +wangzg +丙烷 +FLOAT + + +48F68170-57CC-4D28-BC03-8DF586EF89EF +异丁烷 +iC4 +1717662956 +wangzg +1717662960 +wangzg +异丁烷 +FLOAT + + +F85F3D42-078B-49E6-8AB4-9252933D3B05 +正丁烷 +nC4 +1717662956 +wangzg +1717662960 +wangzg +正丁烷 +FLOAT + + +AFB75EB1-8362-4B10-BCBD-B0047C2B6E46 +异戊烷 +iC5 +1717662956 +wangzg +1717662960 +wangzg +异戊烷 +FLOAT + + +02C47A90-C125-4263-B66A-EE95B5D76600 +气体组分nC5 +nC5 +1717662956 +wangzg +1717662960 +wangzg +气体组分nC5 +FLOAT + + +990DF449-EF57-434B-9E99-9FFBAA65FD48 +气体组分C6 +C6 +1717662956 +wangzg +1717662960 +wangzg +气体组分C6 +FLOAT + + +54AE4A8C-9056-4769-9D4D-FD7903356750 +气体组分C7 +C7 +1717662956 +wangzg +1717662960 +wangzg +气体组分C7 +FLOAT + + +67A12C78-5A14-49CC-941A-190AD5A9CD13 +二氧化碳 +CO2 +1717662956 +wangzg +1717662960 +wangzg +二氧化碳 +FLOAT + + +018D39EE-5246-4ACF-8A44-0B7A05D09083 +氮气 +N2 +1717662956 +wangzg +1717662960 +wangzg +氮气 +FLOAT + + +78D37F2E-5D28-4ECA-BDDC-67D60F67CA3B +硫化氢 +H2S +1717662956 +wangzg +1717662960 +wangzg +硫化氢 +FLOAT + + +4352E839-367B-494F-88CB-B96BD7286D6A +烃露点温度 +TempHc +1717662956 +wangzg +1717662960 +wangzg +烃露点温度 +FLOAT + + +5A040EF9-BA4A-4D25-9B3C-73CFE2E5D4BF +密度 +Dens +1717662956 +wangzg +1717662960 +wangzg +密度 +FLOAT + + +ACF29B8A-C9A3-4D61-9450-F35078906EE4 +相对密度 +RelativeDens +1717662956 +wangzg +1717662960 +wangzg +相对密度 +FLOAT + + +99525E83-DED3-4560-B77E-E91BD9D39E9C +备注 +Remark +1717662956 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +49FF3480-E9DB-4812-93E5-AE373220DFF9 +扩展字段1 +Ext1 +1717662956 +wangzg +1717662960 +wangzg +扩展字段1 +FLOAT + + +9431E80F-FA7A-47F8-BCE1-131CBC6694A0 +扩展字段2 +Ext2 +1717662956 +wangzg +1717662960 +wangzg +扩展字段2 +FLOAT + + +83468DA6-DA3C-47B1-B9F1-4FB310BDEB31 +扩展字段3 +Ext3 +1717662956 +wangzg +1717662960 +wangzg +扩展字段3 +FLOAT + + +6E0B8660-D8CE-4C1C-B10D-F3CFA8D6F450 +扩展字段4 +Ext4 +1717662956 +wangzg +1717662960 +wangzg +扩展字段4 +FLOAT + + +2C3197EE-7E57-4158-95D0-1D4984DD1532 +扩展字段5 +Ext5 +1717662956 +wangzg +1717662960 +wangzg +扩展字段5 +FLOAT + + + + +10C7E370-DD1B-4E84-B74E-9D98F88A5C2E +Key_1 +Key_1 +1717662956 +wangzg +1717662960 +wangzg + + + + + + + + + + +D095034B-33D7-40FE-BCA9-275CE45EFE9C +p其它数据表 +P_DATA_OTHER +1717662956 +wangzg +1717662960 +wangzg +p其它数据表 + + + +2610DE4D-CEB9-41B9-BEA2-6EB3497AFA66 +ID +ID +1717662956 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +D526295C-D8BD-48C0-A21E-42A89B6218B0 +井号 +WellCode +1717662956 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +3DAE0B8E-DE4D-4A62-9423-BC297210C56F +时间格式 +TestDate +1717662956 +wangzg +1718271869 +wangzg +时间格式 +VARCHAR(32) +32 + + +DFEEC09B-20F8-4118-8C3D-532E638CB95A +其它井数据 +WellOtherData +1717662956 +wangzg +1718271869 +wangzg +其它井数据 +LONG VARBINARY + + +CA1F7AFC-184A-446E-81EA-E7965FC65D25 +其它区块数据 +BlockOtherData +1717662956 +wangzg +1718271869 +wangzg +其它区块数据 +LONG VARBINARY + + +AA822995-45C4-4C5D-9E46-A0EF2A25D70B +备注 +Remark +1717662956 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +4B68C43C-3085-4A18-A073-25C01F773418 +扩展字段1 +Ext1 +1717662956 +wangzg +1718271869 +wangzg +扩展字段1 +LONG VARBINARY + + +A144B5E9-1075-4622-A949-0F69B10542AB +扩展字段2 +Ext2 +1717662956 +wangzg +1718271869 +wangzg +扩展字段2 +LONG VARBINARY + + +F221BDA4-21EB-4FF7-8748-4F004517B92B +扩展字段3 +Ext3 +1717662956 +wangzg +1718271869 +wangzg +扩展字段3 +LONG VARBINARY + + +24928E2B-50AA-46E9-A514-FBEB0841462A +扩展字段4 +Ext4 +1717662956 +wangzg +1718271869 +wangzg +扩展字段4 +LONG VARBINARY + + +E2BC1DDF-F3F3-4C5C-8E88-87292D0EF995 +扩展字段5 +Ext5 +1717662956 +wangzg +1718271869 +wangzg +扩展字段5 +LONG VARBINARY + + + + +9A9A0A1E-A170-4FC1-86E5-C2BCB65EDF8D +Key_1 +Key_1 +1717662956 +wangzg +1717662960 +wangzg + + + + + + + + + + +7303BEA8-EBB9-4175-9B4F-518B45153530 +J试井作业基础信息表 +J_JOB_INFO +1717662956 +wangzg +1717662960 +wangzg +J试井作业基础信息表 + + + +0B28F69B-F2FA-4C1D-9B4E-AA1965BEDC98 +作业ID +JobID +1717662956 +wangzg +1718271869 +wangzg +作业ID +VARCHAR(32) +32 +1 + + +263645A0-A523-4970-ABEF-9B31E73CF315 +井号 +WellCode +1717662956 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +3CBD87CF-44F1-4142-B0A7-0FEEFDA000AD +作业名称 +JobTitle +1717662956 +wangzg +1718271869 +wangzg +作业名称 +VARCHAR(32) +32 + + +B128E10E-AEA5-46D8-A9C9-33E69838B3CE +作业类型 +JobType +1717662956 +wangzg +1718271869 +wangzg +作业类型 +VARCHAR(32) +32 + + +C82ADD9C-CE9C-4E9F-8D0F-DE241EAE50B8 +作业描述 +JobDesc +1717662956 +wangzg +1718271869 +wangzg +作业描述 +VARCHAR(255) +255 + + +D7E457AD-3279-4883-9E89-E376A9781048 +创建人 +Creator +1717662956 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +542BEEF7-F60B-48CB-9928-2C06EBFF863A +创建时间 +CreatedTime +1717662956 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +43CB1749-81AF-46AF-9316-D8EE5712BD6E +修改人 +Modifier +1717662956 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +ED89553D-6316-4E02-B7C3-802B16F8C2C5 +修改时间 +ModifiedTime +1717662956 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +A6C8EAFD-0274-4502-ACF9-03EA084791FC +备注 +Remark +1717662956 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +2615E933-32A4-47FA-9743-A23C34CB158D +扩展字段1 +Ext1 +1717662956 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +62744949-B59F-4DCD-9FED-7B3432F6D0D3 +扩展字段2 +Ext2 +1717662956 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +04B7CB44-7057-4511-8884-DBD9BADC9A68 +扩展字段3 +Ext3 +1717662956 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +9FFAB760-4839-44C7-911C-6FCECFDADB92 +扩展字段4 +Ext4 +1717662956 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +56040580-EEEB-4EA6-A9FC-4B44CF667C6B +扩展字段5 +Ext5 +1717662956 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +BD3717AC-9219-4013-B060-2DEA3BF5481A +Key_1 +Key_1 +1717662956 +wangzg +1717662960 +wangzg + + + + + + + + + + +031C3071-4866-4C8F-B564-851118C3884F +J试井作业配置表 +J_JOB_RUN +1717662956 +wangzg +1717662960 +wangzg +J试井作业配置表 + + + +AC1A821E-12A2-4B17-A616-5075FBB3586C +作业ID +JobID +1717662956 +wangzg +1718271869 +wangzg +作业ID +VARCHAR(32) +32 +1 + + +EB308946-9DFC-4E11-9F70-0B5E2211D220 +基础数据 +DataBasic +1717662956 +wangzg +1718271869 +wangzg +基础数据 +LONG VARBINARY + + +9D0D734D-4552-465A-9BB9-93A4F04B35C9 +流体数据 +DataFluid +1717662956 +wangzg +1718271869 +wangzg +流体数据 +LONG VARBINARY + + +8D469D49-C96E-4C07-ABB1-0AB3933A10E3 +气体数据 +DataGasConst +1717662956 +wangzg +1718271869 +wangzg +气体数据 +LONG VARBINARY + + +9EB7168B-EB2C-4DF3-9C58-B25431A98F16 +备注 +Remark +1717662956 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +E1DAB0A7-495D-492D-9213-E9EE3FD18E27 +扩展字段1 +Ext1 +1717662956 +wangzg +1718271869 +wangzg +扩展字段1 +LONG VARBINARY + + +D6EF6AF0-DC0D-419A-8155-35B606415253 +扩展字段2 +Ext2 +1717662956 +wangzg +1718271869 +wangzg +扩展字段2 +LONG VARBINARY + + +5A3850FE-072F-4067-B369-3685CD0D2E7D +扩展字段3 +Ext3 +1717662956 +wangzg +1718271869 +wangzg +扩展字段3 +LONG VARBINARY + + +05B94DAC-8867-4781-90F7-89D523E2AD6A +扩展字段4 +Ext4 +1717662956 +wangzg +1718271869 +wangzg +扩展字段4 +LONG VARBINARY + + +5129EC22-3722-4D19-937B-CFDE05E4CAE8 +扩展字段5 +Ext5 +1717662956 +wangzg +1718271869 +wangzg +扩展字段5 +LONG VARBINARY + + + + +551FE6B1-7E12-45ED-AB13-F36CA8AE66F6 +Key_1 +Key_1 +1717662956 +wangzg +1717662960 +wangzg + + + + + + + + + + +782C6F9D-1D74-4011-B8B1-3FAD812B4FE7 +V试井PVT基础信息 +V_PVT_INFO +1717662956 +wangzg +1717662960 +wangzg +V试井PVT基础信息 + + + +B41DB497-F533-46F0-B74A-9473FB844267 +PVT标识 +PvtID +1717662956 +wangzg +1718271869 +wangzg +PVT标识 +VARCHAR(32) +32 +1 + + +EE9FC3C5-DC3B-427F-B784-1B460F4B050B +PVT名称 +PvtName +1717662956 +wangzg +1718271869 +wangzg +PVT名称 +VARCHAR(64) +64 + + +8CFEFA6D-40C6-4DFA-9959-E15D209054E8 +作业ID +JobID +1717662956 +wangzg +1718271869 +wangzg +作业ID +VARCHAR(32) +32 + + +A6213D0C-BBE0-47FC-96BB-10E54817E428 +主选项信息 +MainOption +1717662956 +wangzg +1718271869 +wangzg +主选项信息 +LONG VARBINARY + + +D60DB891-9058-4226-B24C-CAE8E67DB579 +油子选项信息 +SubOptionO +1717662956 +wangzg +1718271869 +wangzg +油子选项信息 +LONG VARBINARY + + +911B1F14-B264-4C02-A2D5-092AE776646A +气子选项信息 +SubOptionG +1717662956 +wangzg +1718271869 +wangzg +气子选项信息 +LONG VARBINARY + + +8DBCCE7F-51CB-4859-818A-9AD96C68D7AD +水子选项信息 +SubOptionW +1717662956 +wangzg +1718271869 +wangzg +水子选项信息 +LONG VARBINARY + + +1A8C769E-CB98-4E98-A0AA-B638F4B6570A +创建人 +Creator +1717662956 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +6D02228C-7AD5-4663-AB93-FD0FE026BACD +创建时间 +CreatedTime +1717662956 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +4FCA06B9-ACD6-4D3B-B9CB-F04F84A66DD6 +修改人 +Modifier +1717662956 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +D1393B10-0489-467C-9379-A52841AADFDA +修改时间 +ModifiedTime +1717662956 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +E9EB282E-C8A7-4CE2-86C4-0C2F1D11AB19 +备注 +Remark +1717662956 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +AC880A1A-56C7-4343-AB61-AAB4AAABCF77 +扩展字段1 +Ext1 +1717662956 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +C97C58FC-7F0F-4528-8959-EFC636FEED9D +扩展字段2 +Ext2 +1717662956 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +2B0026E7-51EE-4BFD-B250-77D4F7A299F0 +扩展字段3 +Ext3 +1717662956 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +2336AE45-2CD6-4058-9C2C-5DF4EF7A86B7 +扩展字段4 +Ext4 +1717662956 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +EA3CE891-0F0D-494F-87B1-875674A211F5 +扩展字段5 +Ext5 +1717662956 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +6F809115-FA45-4E01-87B2-C5728CB3F1F8 +Key_1 +Key_1 +1717662956 +wangzg +1717662960 +wangzg + + + + + + + + + + +3760EDD3-EE27-4AFB-ADF2-9F9F900F4C7A +V试井PVT参数数据 +V_PVT_DATA +1717662956 +wangzg +1717662960 +wangzg +V试井PVT参数数据 + + + +FB3E46B1-C96C-4D0B-9F2B-9D8D6F17FAD9 +PVT参数标识 +PprID +1717662957 +wangzg +1718271869 +wangzg +PVT参数标识 +VARCHAR(32) +32 +1 + + +F99ED2C1-888F-430E-98B6-75C27EF9CC4F +PVT参数名称 +PprName +1717662957 +wangzg +1718271869 +wangzg +PVT参数名称 +VARCHAR(64) +64 + + +AC5C6F60-5DB9-430C-B550-10AFBBC7BAA5 +PVT标识 +PvtID +1717662957 +wangzg +1718271869 +wangzg +PVT标识 +VARCHAR(32) +32 + + +014CC2F1-34B6-4F66-8DC9-CCEACD74E2C9 +选用方法 +MethodName +1717662957 +wangzg +1718271869 +wangzg +选用方法 +VARCHAR(64) +64 + + +944D99CC-0FE5-4CC3-96FF-F5B62AE49E6D +x轴数值 +FixedPosX +1717662957 +wangzg +1717662960 +wangzg +x轴数值 +FLOAT + + +02281B9B-794B-4AA5-AE85-14E9DA060A77 +y轴数值 +FixedPosY +1717662957 +wangzg +1717662960 +wangzg +y轴数值 +FLOAT + + +4E0CB360-FD34-440F-BDF6-0F448C73EB6D +中间过程数据 +ProcData +1717662957 +wangzg +1718271869 +wangzg +中间过程数据 +LONG VARBINARY + + +6C9ABDB8-4C41-4887-B012-DFE228EC54DC +备注 +Remark +1717662957 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +9D6DA4A3-8BA3-4D22-9FC8-90594D4190AC +扩展字段1 +Ext1 +1717662957 +wangzg +1718271869 +wangzg +扩展字段1 +LONG VARBINARY + + +61060863-27F1-447B-9E0D-99D07208114E +扩展字段2 +Ext2 +1717662957 +wangzg +1718271869 +wangzg +扩展字段2 +LONG VARBINARY + + +B0DA23F6-2AC7-40AB-B4E4-0B14D7EEEADB +扩展字段3 +Ext3 +1717662957 +wangzg +1718271869 +wangzg +扩展字段3 +LONG VARBINARY + + +87D6D937-5E86-469D-97A1-36755C79AE16 +扩展字段4 +Ext4 +1717662957 +wangzg +1718271869 +wangzg +扩展字段4 +LONG VARBINARY + + +4B6582DA-C190-4D15-9325-113209B8825F +扩展字段5 +Ext5 +1717662957 +wangzg +1718271869 +wangzg +扩展字段5 +LONG VARBINARY + + + + +A79B3F10-B4AF-4D88-B3E6-4115A3779F9F +Key_1 +Key_1 +1717662957 +wangzg +1717662960 +wangzg + + + + + + + + + + +A72430B4-D088-41C0-B7A8-94BFFACDFC1A +R试井成果信息表 +R_JOB_UTILS +1717662957 +wangzg +1717662960 +wangzg +R试井成果信息表 + + + +9C31CA20-C2B5-4958-992D-D7D5D6C0C7C6 +成果ID +RstUtilID +1717662957 +wangzg +1718271869 +wangzg +成果ID +VARCHAR(32) +32 +1 + + +3B506E7B-5DCE-41ED-AFAF-AD6D18D09DD0 +成果标签 +RstUtilTag +1717662957 +wangzg +1718271869 +wangzg +成果标签 +VARCHAR(64) +64 + + +533AB013-73A8-42ED-95FB-5EFB124AFDC4 +作业ID +JobID +1717662957 +wangzg +1718271869 +wangzg +作业ID +VARCHAR(32) +32 + + +A0995A34-C6EF-4C6A-83FB-B47C273CFB58 +井号 +WellCode +1717662957 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 + + +9EEECC22-A48F-4AC2-87BB-76A2D782CE01 +模型类型 +ModelSeries +1717662957 +wangzg +1718271869 +wangzg +模型类型 +VARCHAR(64) +64 + + +135F41F8-432E-4911-BD73-B45381CA78BA +创建人 +Creator +1717662957 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +258E1A6D-8B97-4D76-BD44-A0B60BAF62B9 +创建时间 +CreatedTime +1717662957 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +99F8E550-8C7C-4046-AD7E-353D9B4BEE7E +修改人 +Modifier +1717662957 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +FB904339-DBE4-42B6-A9CC-A77E958F79FF +修改时间 +ModifiedTime +1717662957 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +7EFA427D-3B88-408B-A443-D064F360DD47 +备注 +Remark +1717662957 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +BD1379C5-1F6F-4F48-B557-225334C3DA60 +扩展字段1 +Ext1 +1717662957 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +5BF26543-7DD0-42DD-808E-E402D6284E98 +扩展字段2 +Ext2 +1717662957 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +972D29A7-5DEE-4471-8925-94E3430C38EF +扩展字段3 +Ext3 +1717662957 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +DA2D695D-72BD-43E6-B329-4EFE907CB7CE +扩展字段4 +Ext4 +1717662957 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +625B085B-E315-49ED-8B29-9D396B3897A9 +扩展字段5 +Ext5 +1717662957 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +A1712AFB-44F6-40DB-8616-F6519C15ACA6 +Key_1 +Key_1 +1717662957 +wangzg +1717662960 +wangzg + + + + + + + + + + +10AC4845-7DCF-465A-9358-344A175D2044 +R试井作业纯结果数据表 +R_JOB_PUREDATA +1717662957 +wangzg +1717662960 +wangzg +R试井作业纯结果数据表 + + + +812C2DA8-6937-4B7C-AEE8-B2FBAE8D72BE +成果ID +RstUtilID +1717662957 +wangzg +1718271869 +wangzg +成果ID +VARCHAR(32) +32 +1 + + +7D3E0780-A22B-4A79-A6F5-4D5827CB6B65 +原始曲线 +CurveRaws +1717662957 +wangzg +1718271869 +wangzg +原始曲线 +LONG VARBINARY + + +AF6FB803-2E26-4F03-8517-FF8F138429CE +拟合曲线 +CurveFits +1717662957 +wangzg +1718271869 +wangzg +拟合曲线 +LONG VARBINARY + + +3659C489-69AE-4AE6-97D2-7D4A138A6304 +模型结果 +ModelInfos +1717662957 +wangzg +1718271869 +wangzg +模型结果 +LONG VARBINARY + + +3A0CACE4-5741-4530-A892-CDFDD5DA6219 +拟合参数结果 +ParameterInfos +1717662957 +wangzg +1718271869 +wangzg +拟合参数结果 +LONG VARBINARY + + +C3C2A9E8-C19A-4ABF-B30C-75AB4C799B2A +备注 +Remark +1717662957 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +B2C88665-75F8-409A-9238-3780C78FBD0D +扩展字段1 +Ext1 +1717662957 +wangzg +1718271869 +wangzg +扩展字段1 +LONG VARBINARY + + +E389F19B-02EB-43AB-AC60-621AB5DD3128 +扩展字段2 +Ext2 +1717662957 +wangzg +1718271869 +wangzg +扩展字段2 +LONG VARBINARY + + +1E557A00-4C14-461B-9D2A-5C01DEC6E12A +扩展字段3 +Ext3 +1717662957 +wangzg +1718271869 +wangzg +扩展字段3 +LONG VARBINARY + + +C493DD56-DAD8-4714-A260-A2A8EB7A44B7 +扩展字段4 +Ext4 +1717662957 +wangzg +1718271869 +wangzg +扩展字段4 +LONG VARBINARY + + +EAB85354-66B1-401E-AA51-AC5029A2B4AF +扩展字段5 +Ext5 +1717662957 +wangzg +1718271869 +wangzg +扩展字段5 +LONG VARBINARY + + + + +2FE0E5CB-9F60-4BC8-96D3-E34E41D05CDE +Key_1 +Key_1 +1717662957 +wangzg +1717662960 +wangzg + + + + + + + + + + +71B18362-DB05-4800-874C-78D2F6050509 +R试井成果视窗数据表 +R_JOB_WND +1717662957 +wangzg +1717662960 +wangzg +R试井成果视窗数据表 + + + +CEB6C9ED-44BC-469E-8EB0-7602F814EE18 +成果ID +RstID +1717662957 +wangzg +1718271869 +wangzg +成果ID +VARCHAR(32) +32 +1 + + +969B755F-DC63-4D29-AAED-5C4950BC058E +索引 +WndIndex +1717662957 +wangzg +1718271869 +wangzg +索引 +VARCHAR(8) +8 + + +AA2AAC1A-C3F7-46F4-8E89-96A124E81C4C +窗体ID +WndID +1717662957 +wangzg +1718271869 +wangzg +窗体ID +VARCHAR(8) +8 + + +6FD957D0-DDAD-4088-B84A-10D672E167F0 +窗体名称 +WndTag +1717662957 +wangzg +1718271869 +wangzg +窗体名称 +VARCHAR(64) +64 + + +16A8A467-E5B1-491D-A3E7-E72A2C0FD938 +RstUtilsID +RstUtilID +1717662957 +wangzg +1718271869 +wangzg +RstUtilsID +VARCHAR(32) +32 + + +C34A59EF-37E9-4106-B121-537C0B223192 +JobRun +DataJobRun +1717662957 +wangzg +1718271869 +wangzg +JobRun +LONG VARBINARY + + +EA90B454-9405-428E-BD38-9DAACA321857 +流动段 +DataSegInfo +1717662957 +wangzg +1718271869 +wangzg +流动段 +LONG VARBINARY + + +44740032-695F-473A-8F43-9CA2FB88742C +数据体 +DataInfo +1717662957 +wangzg +1718271869 +wangzg +数据体 +LONG VARBINARY + + +D49DB56A-CD49-4731-A654-AD4484058D67 +数据体1 +DataInfo1 +1717662957 +wangzg +1718271869 +wangzg +数据体1 +LONG VARBINARY + + +97CB5288-44AC-4779-90A6-3050FEFC5FCF +数据体2 +DataInfo2 +1717662957 +wangzg +1718271869 +wangzg +数据体2 +LONG VARBINARY + + +C06176D0-3944-4EB0-8F9D-2D3400C4AD92 +数据体3 +DataInfo3 +1717662957 +wangzg +1718271869 +wangzg +数据体3 +LONG VARBINARY + + +719FA8C1-AB97-4F00-92F9-F2FEB04C1E1A +数据体4 +DataInfo4 +1717662957 +wangzg +1718271869 +wangzg +数据体4 +LONG VARBINARY + + +651602F3-F067-4D14-9954-B67DC3592430 +数据体5 +DataInfo5 +1717662957 +wangzg +1718271869 +wangzg +数据体5 +LONG VARBINARY + + +27E26912-3F96-4D8D-8A02-2222AD1E7B73 +数据体6 +DataInfo6 +1717662957 +wangzg +1718271869 +wangzg +数据体6 +LONG VARBINARY + + +805F90BE-563B-44DE-9710-4B2948D5EB0B +数据体7 +DataInfo7 +1717662957 +wangzg +1718271869 +wangzg +数据体7 +LONG VARBINARY + + +18CAC8C1-38EC-4469-896E-493545C626D4 +数据体8 +DataInfo8 +1717662957 +wangzg +1718271869 +wangzg +数据体8 +LONG VARBINARY + + +8EE0CB08-E9F6-4F49-866A-CBE4BA73EFD7 +数据体9 +DataInfo9 +1717662957 +wangzg +1718271869 +wangzg +数据体9 +LONG VARBINARY + + +37F2D12B-A6DC-436C-98EE-317650F53053 +备注 +Remark +1717662957 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +2FD757DC-596E-4805-8098-A160DA0E5DBB +扩展字段1 +Ext1 +1717662957 +wangzg +1718271869 +wangzg +扩展字段1 +LONG VARBINARY + + +89BBAC6E-15D8-4C74-A8B5-48FB2016A171 +扩展字段2 +Ext2 +1717662957 +wangzg +1718271869 +wangzg +扩展字段2 +LONG VARBINARY + + +17D62F85-F57A-4CE9-BA3C-952BB47E44B1 +扩展字段3 +Ext3 +1717662957 +wangzg +1718271869 +wangzg +扩展字段3 +LONG VARBINARY + + +4710C733-257C-4A49-A944-A0CB4002595D +扩展字段4 +Ext4 +1717662957 +wangzg +1718271869 +wangzg +扩展字段4 +LONG VARBINARY + + +35C0BDBC-C10C-4FDA-BE95-75138D1CA8C3 +扩展字段5 +Ext5 +1717662957 +wangzg +1718271869 +wangzg +扩展字段5 +LONG VARBINARY + + + + +23ECD745-B287-4833-959D-0593434E2089 +Key_1 +Key_1 +1717662957 +wangzg +1717662960 +wangzg + + + + + + + + + + +B27B803A-2E40-410E-81C4-0EA318AE0073 +R试井成果基础数据表 +R_JOB_RUN +1717662957 +wangzg +1717662960 +wangzg +R试井成果基础数据表 + + + +1FD50136-6211-454D-AA47-E112621E0AD9 +成果ID +RstID +1717662957 +wangzg +1718271869 +wangzg +成果ID +VARCHAR(32) +32 +1 + + +FD699223-D4B4-4117-99A0-A786E4179325 +基础数据 +DataBasic +1717662957 +wangzg +1718271869 +wangzg +基础数据 +LONG VARBINARY + + +83426ABD-216A-4004-870E-2A3F455B469F +流体数据 +DataFluid +1717662957 +wangzg +1718271869 +wangzg +流体数据 +LONG VARBINARY + + +314671F7-ED33-4C30-8411-6C21C49403B6 +气体数据 +DataGasConst +1717662957 +wangzg +1718271869 +wangzg +气体数据 +LONG VARBINARY + + +02C57800-45C0-42CB-85D9-62C5CEC63026 +备注 +Remark +1717662957 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +A75F381B-0493-4EE2-A7A5-87F23F600B19 +扩展字段1 +Ext1 +1717662957 +wangzg +1718271869 +wangzg +扩展字段1 +LONG VARBINARY + + +428B0E63-4984-41F7-97A7-887E3DFA295E +扩展字段2 +Ext2 +1717662957 +wangzg +1718271869 +wangzg +扩展字段2 +LONG VARBINARY + + +2BFEF79A-C85C-4CC0-8DE4-B720F0229682 +扩展字段3 +Ext3 +1717662957 +wangzg +1718271869 +wangzg +扩展字段3 +LONG VARBINARY + + +186B1802-DB1F-4A05-8BD6-792F9B76ED10 +扩展字段4 +Ext4 +1717662957 +wangzg +1718271869 +wangzg +扩展字段4 +LONG VARBINARY + + +72266D3D-DDB8-4675-A725-5527B4B482BF +扩展字段5 +Ext5 +1717662957 +wangzg +1718271869 +wangzg +扩展字段5 +LONG VARBINARY + + + + +D3F99B8C-F774-4608-87B5-02FBAA916253 +Key_1 +Key_1 +1717662957 +wangzg +1717662960 +wangzg + + + + + + + + + + +E4139601-AC99-4D9A-9845-61B7D1F91B17 +R试井成果流动段信息表 +R_JOB_SEG +1717662957 +wangzg +1717662960 +wangzg +R试井成果流动段信息表 + + + +5B0573A4-3489-4A8C-9704-3AFEC6D0E509 +成果ID +RstID +1717662957 +wangzg +1718271869 +wangzg +成果ID +VARCHAR(32) +32 +1 + + +573E81CA-0167-4245-9124-6EB48BCD5F22 +流动段名称 +SegName +1717662957 +wangzg +1718271869 +wangzg +流动段名称 +VARCHAR(32) +32 + + +EBD96C02-FDC5-434A-87DB-548BD43D6420 +流动段类型 +SegType +1717662957 +wangzg +1717663000 +wangzg +流动段类型 +INTEGER + + +FF596DDD-CF16-4BCA-B125-F15E88F2D914 +气体数据 +FlowRatePrev +1717662957 +wangzg +1717662960 +wangzg +气体数据 +FLOAT + + +2D9EEFE4-0772-4810-95C4-220F8590FBB8 +压力左值 +PresValueL +1717662957 +wangzg +1717662960 +wangzg +压力左值 +FLOAT + + +0FF4B553-4FDC-42BC-AFF5-C22C9A438726 +压力右值 +PresValueR +1717662957 +wangzg +1717662960 +wangzg +压力右值 +FLOAT + + +3ADFC0D3-F06A-407B-9F8E-A4639CDE48E6 +时间左值 +TimeL +1717662957 +wangzg +1717662960 +wangzg +时间左值 +FLOAT + + +967DD95E-746E-462C-9BD2-8580B875DDB4 +时间右值 +TimeR +1717662957 +wangzg +1717662960 +wangzg +时间右值 +FLOAT + + +F3D2EA47-B075-4715-B06B-7CEC8019C799 +备注 +Remark +1717662957 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +E2F474B4-3092-44AF-A1F1-3227DEA340EC +扩展字段1 +Ext1 +1717662957 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +F32DFFDE-3A84-4D9A-85A8-88110F8275B5 +扩展字段2 +Ext2 +1717662957 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +9A3DF76B-3B86-415B-9BA0-A70B1EBC6126 +扩展字段3 +Ext3 +1717662957 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +70582616-D838-4BAE-82ED-CBDBF45D57E2 +扩展字段4 +Ext4 +1717662958 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +B4EF16CC-EE83-4690-B616-214B95C210A5 +扩展字段5 +Ext5 +1717662958 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +FB3902B9-A199-434A-B039-843BE6AB6D6E +Key_1 +Key_1 +1717662957 +wangzg +1717662960 +wangzg + + + + + + + + + + +4F5EBEF4-41C2-420F-94EA-A8570FF168EF +c示意图配置表 +C_MODEL_SKETCH +1717662958 +wangzg +1717662960 +wangzg +c示意图配置表 + + + +201DD71D-E14D-4F67-8C78-1D6EE60B5B1C +序号 +MstID +1717662958 +wangzg +1718271869 +wangzg +序号 +VARCHAR(32) +32 +1 + + +31F2F203-AC98-4F63-844B-172AF17C6860 +模型类 +ModelSeries +1717662958 +wangzg +1718271869 +wangzg +模型类 +VARCHAR(16) +16 + + +4630BB26-E56A-4694-87BD-A27F63D67285 +井储 +WBS +1717662958 +wangzg +1718271869 +wangzg +井储 +VARCHAR(32) +32 + + +0F97130D-A7FC-4775-B699-3F919634B136 +井型 +WEL +1717662958 +wangzg +1718271869 +wangzg +井型 +VARCHAR(32) +32 + + +63EFB3B4-D887-4F8E-A9E4-9AFB954CA030 +油藏 +RES +1717662958 +wangzg +1718271869 +wangzg +油藏 +VARCHAR(32) +32 + + +636E855A-7BB7-4EC6-B49E-279228B9457F +边界 +BDY +1717662958 +wangzg +1718271869 +wangzg +边界 +VARCHAR(16) +16 + + +49017CC0-85F2-4AA3-A2DF-A2A1F651DEEA +其它约束 +Others +1717662958 +wangzg +1718271869 +wangzg +其它约束 +VARCHAR(64) +64 + + +3068137C-7647-47D4-AC7F-4F8A5E835517 +示意图 +Sketch +1717662958 +wangzg +1718271869 +wangzg +示意图 +LONG VARBINARY + + +DB699A2B-90A1-4640-AE8B-7F0D49A14F87 +创建人 +Creator +1717662958 +wangzg +1718271869 +wangzg +创建人 +VARCHAR(32) +32 + + +DDB67B42-7F53-460B-A6A9-D6B62F338EFE +创建时间 +CreatedTime +1717662958 +wangzg +1718271869 +wangzg +创建时间 +VARCHAR(32) +32 + + +C9B9DC30-5F19-435D-82D7-805FB7CA1719 +修改人 +Modifier +1717662958 +wangzg +1718271869 +wangzg +修改人 +VARCHAR(32) +32 + + +1DDDFDD1-C389-4507-A151-70F6E548524D +修改时间 +ModifiedTime +1717662958 +wangzg +1718271869 +wangzg +修改时间 +VARCHAR(32) +32 + + +0916594B-60FF-4397-AACB-BFA1572A80E1 +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +30A61701-9574-4AEF-A279-EAFD0267539C +扩展字段1 +Ext1 +1717662958 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +A0DBDBE1-98DF-4B61-AF41-54C27093AC65 +扩展字段2 +Ext2 +1717662958 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +41C3E237-CCBA-4A38-A498-E6BC5917C530 +扩展字段3 +Ext3 +1717662958 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +F9B95F33-51B4-425C-9546-06D037CEF5A5 +扩展字段4 +Ext4 +1717662958 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +DC82987C-A4B1-4CBD-B5B0-397AE92F9BAB +扩展字段5 +Ext5 +1717662958 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + + + +0032B371-8E01-4142-91F1-BE00790CFBD4 +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +39A4E41B-684C-4C2B-9111-8C062A08073F +u用户信息表 +U_USER_INFO +1717662958 +wangzg +1717662960 +wangzg +u用户信息表 + + + +21AD653A-6851-40EC-83A9-C61775B0BDF2 +员工工号 +ID +1717662958 +wangzg +1718271869 +wangzg +员工工号 +VARCHAR(32) +32 +1 + + +0C2FB89D-7D4C-4E76-9C23-D2052B19CB7A +姓名 +Name +1717662958 +wangzg +1718271869 +wangzg +姓名 +VARCHAR(32) +32 + + +574A51E9-7604-4FDC-BC0D-0D83E98F2392 +性别 +Gender +1717662958 +wangzg +1718271869 +wangzg +性别 +VARCHAR(8) +8 + + +6DBF8789-8CF4-4DF6-B5C8-D899CC2CB934 +出生年月 +BirthYM +1717662958 +wangzg +1718271869 +wangzg +出生年月 +VARCHAR(16) +16 + + +E6841787-8A72-4B75-A37C-778778CF2700 +职位 +Position +1717662958 +wangzg +1718271869 +wangzg +职位 +VARCHAR(16) +16 + + +AC30FE4C-F301-4FE7-9968-20395B153ADC +部门 +Department +1717662958 +wangzg +1718271869 +wangzg +部门 +VARCHAR(32) +32 + + +5401F2EE-24D0-4A4B-87FE-7806FD44F61A +电话 +Telephone +1717662958 +wangzg +1718271869 +wangzg +电话 +VARCHAR(16) +16 + + +CB60D0A1-6B3A-467D-B50E-D86B169B857C +手机 +Mobile +1717662958 +wangzg +1718271869 +wangzg +手机 +VARCHAR(16) +16 + + +551B3354-F1E5-41BB-9A91-29C8DF318ABE +即时通 +ChartID +1717662958 +wangzg +1718271869 +wangzg +即时通 +VARCHAR(16) +16 + + +8553B271-C7A7-478F-AB27-B3ABF5FDD8D8 +邮箱 +Email +1717662958 +wangzg +1718271869 +wangzg +邮箱 +VARCHAR(64) +64 + + +38FED53D-4499-47E6-AE3E-82263F5E0A26 +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +F1394050-2535-4340-B14E-B94174852E04 +扩展字段1 +Ext1 +1717662958 +wangzg +1718271869 +wangzg +扩展字段1 +VARCHAR(255) +255 + + +B70C0FC6-D435-4371-A80A-16F6D6E23FBF +扩展字段2 +Ext2 +1717662958 +wangzg +1718271869 +wangzg +扩展字段2 +VARCHAR(128) +128 + + +FF0E62C6-88A9-4B28-85B1-64FE11D38296 +扩展字段3 +Ext3 +1717662958 +wangzg +1718271869 +wangzg +扩展字段3 +VARCHAR(64) +64 + + +78F966A4-E5A3-4F3C-BDAD-5B20392F6B9F +扩展字段4 +Ext4 +1717662958 +wangzg +1718271869 +wangzg +扩展字段4 +VARCHAR(32) +32 + + +2AC35CF6-5E39-41E3-A232-7840B3B6855C +扩展字段5 +Ext5 +1717662958 +wangzg +1718271869 +wangzg +扩展字段5 +VARCHAR(16) +16 + + +E357190F-C0CF-49B8-8DA7-EA18F653506A +扩展字段6 +Ext6 +1717662958 +wangzg +1718271869 +wangzg +扩展字段6 +VARCHAR(255) +255 + + +F1F138FE-4BC7-4678-905B-8793DA1FA1F9 +扩展字段7 +Ext7 +1717662958 +wangzg +1718271869 +wangzg +扩展字段7 +VARCHAR(128) +128 + + +01EBC01C-FA81-435E-BF2F-BA58C1629C94 +扩展字段8 +Ext8 +1717662958 +wangzg +1718271869 +wangzg +扩展字段8 +VARCHAR(64) +64 + + +10D177B9-D0E2-4308-BB6C-9C4F8443811E +扩展字段9 +Ext9 +1717662958 +wangzg +1718271869 +wangzg +扩展字段9 +VARCHAR(32) +32 + + +DF572296-6755-42D5-A309-225A53BA67B9 +扩展字段10 +Ext10 +1717662958 +wangzg +1718271869 +wangzg +扩展字段10 +VARCHAR(16) +16 + + + + +8BA578CF-601B-4EB5-B44C-6EB4BAF97BAE +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +9DD0D16C-B9F7-47E1-A114-15517BEDC9E9 +u角色信息表 +U_ROLE_INFO +1717662958 +wangzg +1717662960 +wangzg +u角色信息表 + + + +58E0E6A4-D369-4AA5-885C-01D6511A1018 +角色ID +ID +1717662958 +wangzg +1718271869 +wangzg +角色ID +VARCHAR(32) +32 +1 + + +4A859E39-F8FA-442E-9897-9793254ADDF3 +角色名称 +Name +1717662958 +wangzg +1718271869 +wangzg +角色名称 +VARCHAR(32) +32 + + +20A074DC-8253-48EA-B1C7-519B9639C739 +描述 +Desc +1717662958 +wangzg +1718271869 +wangzg +描述 +VARCHAR(128) +128 + + +72B88D2F-B1DA-4DCB-9DAD-5E21B7BE83C2 +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + + + +6D35FBB1-D9DE-45E6-8B52-54D167A4B6F4 +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +FC2CD7A5-EA71-43A6-AE87-F60E7B975F67 +u权限信息表 +U_RIGHT_INFO +1717662958 +wangzg +1717662960 +wangzg +u权限信息表 + + + +D2FE3C8B-70F3-4A97-9FC5-425DAC1038EB +权限ID +ID +1717662958 +wangzg +1718271869 +wangzg +权限ID +VARCHAR(32) +32 +1 + + +D3C8F45D-CA6E-424B-8773-4235CC4D9475 +权限名称 +Name +1717662958 +wangzg +1718271869 +wangzg +权限名称 +VARCHAR(32) +32 + + +2C6608D4-201A-4066-B7BB-2A038EAEC2D3 +对应功能描述 +Desc +1717662958 +wangzg +1718271869 +wangzg +对应功能描述 +VARCHAR(128) +128 + + +33079942-655E-432E-8B09-8BC4B003978D +对应功能模块 +Module +1717662958 +wangzg +1718271869 +wangzg +对应功能模块 +VARCHAR(64) +64 + + +5A7383EF-1329-45E3-AB9C-67D5A9D198DC +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + + + +DCF88C37-ECEE-4232-8BF8-309A74F180EB +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +AD77A46D-55F1-4793-BBCF-AC91D1FF9021 +u用户角色表 +U_USER_ROLE_INFO +1717662958 +wangzg +1717662960 +wangzg +u用户角色表 + + + +38DA2221-2E00-4C7A-BB06-D29640AA8296 +ID +ID +1717662958 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +E2E968DF-BCD5-497C-92A6-55D7E7050260 +用户ID +UserID +1717662958 +wangzg +1718271869 +wangzg +用户ID +VARCHAR(32) +32 + + +ECF94DE5-A3AF-494E-B5B0-53724F9F6B55 +角色ID +RoleID +1717662958 +wangzg +1718271869 +wangzg +角色ID +VARCHAR(32) +32 + + +975DEA17-FFFC-4690-92D3-B3E4A4F43AFD +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + + + +E89D3FBC-44F6-4F3B-A7AD-CB7FD06C50AB +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +5FD892F2-FF1C-40B8-B394-C6D393A78AD5 +u角色权限表 +U_ROLE_RIGHT_INFO +1717662958 +wangzg +1717662960 +wangzg +u角色权限表 + + + +E123B002-F106-4AA3-BE19-CC8D84F58F6B +ID +ID +1717662958 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +DC521579-ABD0-4468-9E5F-C63A4E8A1F06 +角色ID +RoleID +1717662958 +wangzg +1718271869 +wangzg +角色ID +VARCHAR(32) +32 + + +B2391271-01EE-4611-B9C0-BEEF59F4CD0E +权限ID +RightID +1717662958 +wangzg +1718271869 +wangzg +权限ID +VARCHAR(32) +32 + + +DCFDAF55-F5FA-44CA-9F13-7A1A028BFE73 +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + + + +7FACCA8E-844D-43E4-8C6E-7272B9A1032C +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +D20DD4C3-3B71-410A-A512-4E6347310623 +u用户组信息表 +U_GROUP_INFO +1717662958 +wangzg +1717662960 +wangzg +u用户组信息表 + + + +589CBF23-5F1F-44FC-9F80-9107EDE2D99E +用户组ID +ID +1717662958 +wangzg +1718271869 +wangzg +用户组ID +VARCHAR(32) +32 +1 + + +C34CA224-3426-49B0-A2C5-B046081E2C8B +用户组名称 +Name +1717662958 +wangzg +1718271869 +wangzg +用户组名称 +VARCHAR(32) +32 + + +3167EB20-098D-4838-AC37-43B64853BCD4 +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + + + +38D0FBDC-ACD5-4831-B841-6E5670A5A646 +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +36475847-8462-4277-93A4-FFAFD19E97B7 +u用户与用户组关系表 +U_USER_GROUP_INFO +1717662958 +wangzg +1717662960 +wangzg +u用户与用户组关系表 + + + +35B1D3EC-1CC5-4DB0-B2E4-1CCBC484DD26 +ID +ID +1717662958 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +CB6AA16B-769E-4F68-968E-BDA9CBB0A370 +用户ID +UserID +1717662958 +wangzg +1718271869 +wangzg +用户ID +VARCHAR(32) +32 + + +44E6EDC2-2578-40C9-9919-EE9BB62112A6 +用户组ID +GroupID +1717662958 +wangzg +1718271869 +wangzg +用户组ID +VARCHAR(32) +32 + + +F95ECC48-75DC-4234-8E4C-A7366C2B3D8D +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + + + +A83588F1-A8D3-4803-A312-7B61AB0714D0 +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +C1334B5C-F700-4B90-8C15-E4999C444266 +u用户组角色表 +U_GROUP_ROLE_INFO +1717662958 +wangzg +1717662960 +wangzg +u用户组角色表 + + + +53F62188-9FDB-4AD6-9CAF-EC34A03B2650 +ID +ID +1717662958 +wangzg +1718271869 +wangzg +ID +VARCHAR(32) +32 +1 + + +DA7D20E3-A5BA-46F9-A741-9A33DBF8FC33 +用户组ID +GroupID +1717662958 +wangzg +1718271869 +wangzg +用户组ID +VARCHAR(32) +32 + + +94AF8E29-C30C-4B25-A1FD-83F336A9BD94 +角色ID +RoleID +1717662958 +wangzg +1718271869 +wangzg +角色ID +VARCHAR(32) +32 + + +66D8EA74-BD82-4643-8096-7C9711913F37 +备注 +Remark +1717662958 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + + + +D7371788-BF83-4349-BDCA-849E876F85EE +Key_1 +Key_1 +1717662958 +wangzg +1717662960 +wangzg + + + + + + + + + + +FF3ACD6C-31AB-46FA-B641-4A178AB832F2 +b气体组分 +B_GASCONST +1718271790 +wangzg +1718271796 +wangzg +b气体组分 + + + +45C19E72-C55D-4EA6-B535-52E651D72A54 +Related Clusters +Related Clusters +1718271822 +wangzg +1718271822 +wangzg + + +94A61E72-A138-49DF-8597-E5AB2DA7BADC +Related Columns +Related Columns +1718271822 +wangzg +1718271822 +wangzg + + + + +C83F7129-3287-48C8-988A-F7FBDE2FCDE1 +井号 +WellCode +1718271790 +wangzg +1718271869 +wangzg +井号 +VARCHAR(32) +32 +1 + + +0EEAC3BE-9D2A-43F4-9D46-76C4E1B0A7B6 +甲烷 +C1 +1718271790 +wangzg +1718271796 +wangzg +甲烷 +FLOAT + + +79C26725-C888-4A79-A335-E875D45FF403 +乙烷 +C2 +1718271790 +wangzg +1718271796 +wangzg +乙烷 +FLOAT + + +B6A22F68-0D99-41AD-AC9B-6F15C0209455 +丙烷 +C3 +1718271790 +wangzg +1718271796 +wangzg +丙烷 +FLOAT + + +F69BEA38-E999-4889-B217-852915AA525A +异丁烷 +iC4 +1718271790 +wangzg +1718271796 +wangzg +异丁烷 +FLOAT + + +9D7C4E73-BF1C-41E7-B8C6-B9B32DD2EC22 +正丁烷 +nC4 +1718271790 +wangzg +1718271796 +wangzg +正丁烷 +FLOAT + + +C65AB1BA-AFD9-4C30-8C20-8C155FF35DA3 +异戊烷 +iC5 +1718271790 +wangzg +1718271796 +wangzg +异戊烷 +FLOAT + + +D4105AEB-ADEF-41B2-87AD-00164F5D2F1B +正戊烷 +nC5 +1718271790 +wangzg +1718271796 +wangzg +正戊烷 +FLOAT + + +0101818B-3492-4DAF-A9C7-724895F7A5AD +己烷 +C6 +1718271790 +wangzg +1718271796 +wangzg +己烷 +FLOAT + + +C834BDB3-F5DC-4995-AE22-0C32DEDE8C65 +庚烷 +C7 +1718271790 +wangzg +1718271796 +wangzg +庚烷 +FLOAT + + +6686B0AE-849A-425C-9AA8-74529C7F2885 +辛烷 +C8 +1718271790 +wangzg +1718271796 +wangzg +辛烷 +FLOAT + + +A19564A7-28C8-4457-9B2C-75EAD0C6CFAB +壬烷 +C9 +1718271790 +wangzg +1718271796 +wangzg +壬烷 +FLOAT + + +435F1AD1-8CE7-4838-B783-0A86A71C6EC9 +葵烷 +C10 +1718271790 +wangzg +1718271796 +wangzg +葵烷 +FLOAT + + +E29D958F-8F5C-46FD-82EF-7DF9D4502999 +十一烷+ +C11+ +1718271790 +wangzg +1718271796 +wangzg +十一烷+ +FLOAT + + +E03F2F70-EF3F-4461-84EC-CACEAB92B417 +二氧化碳 +CO2 +1718271790 +wangzg +1718271796 +wangzg +二氧化碳 +FLOAT + + +57037810-23C9-401D-BB65-1A62B91155B1 +氮气 +N2 +1718271790 +wangzg +1718271796 +wangzg +氮气 +FLOAT + + +4BFF72FE-2031-4D4A-BA42-B174C883E220 +硫化氢 +H2S +1718271791 +wangzg +1718271796 +wangzg +硫化氢 +FLOAT + + +957620DD-8F39-4D33-A7B8-26743C5DB952 +其它 +Others +1718271791 +wangzg +1718271796 +wangzg +其它 +FLOAT + + +ADE81199-F3BA-4187-950F-E42D8138CAF4 +备注 +Remark +1718271791 +wangzg +1718271869 +wangzg +备注 +VARCHAR(255) +255 + + +AEF5F2A8-78BA-4C3A-885B-3A4C588C16FB +扩展字段1 +Ext1 +1718271791 +wangzg +1718271796 +wangzg +扩展字段1 +FLOAT + + +F2A8018E-3B8C-4263-B280-F10DFB9008A0 +扩展字段2 +Ext2 +1718271791 +wangzg +1718271796 +wangzg +扩展字段2 +FLOAT + + +DFD47E04-668D-4BBC-8DC8-C8E09269312F +扩展字段3 +Ext3 +1718271791 +wangzg +1718271796 +wangzg +扩展字段3 +FLOAT + + +B27992D2-DBE0-4E36-9D14-FE9EE213F102 +扩展字段4 +Ext4 +1718271791 +wangzg +1718271796 +wangzg +扩展字段4 +FLOAT + + +D08695B3-9473-46E2-A6EC-2E62CB1FF179 +扩展字段5 +Ext5 +1718271791 +wangzg +1718271796 +wangzg +扩展字段5 +FLOAT + + + + +07C828F4-C00D-4CD9-9BA6-8E2AE1CB1B8A +Key_1 +Key_1 +1718271790 +wangzg +1718271796 +wangzg + + + + + + + + + + + + +D8FEA807-E5C4-4C7A-B1C6-1B710E144DFE +PUBLIC +PUBLIC +1389407057 +Administrator +1444805817 +wangzg + + + + +F2B0CBDD-FBC9-49C6-81B0-D45CBA2EC846 +Simplified Chinese +ZH-CN +1438826575 +wangzg +1438826595 +wangzg +file:///%_RTPLANG%/Chinese.xrl +F3A0BF0F-7536-11D5-A4D6-0008C79B4501 +585CBB37-C940-11D1-BD0D-00A02478ECC9 + + + + + + +4228B3B0-72E9-43A9-B761-69CDFBF8D8B6 +ODBC 3.0 +ODBC 3 +1718271869 +wangzg +1718271869 +wangzg +file:///%_DBMS%/odbc3.xdb +A8334AA1-B463-4BAB-9885-05DC861515BE +4BA9F647-DAB1-11D1-9944-006097355D9B + + + + + + + + + + \ No newline at end of file diff --git a/Bin/Doc/iWTAI_DataStructure.vbs b/Bin/Doc/iWTAI_DataStructure.vbs new file mode 100644 index 0000000..fa600bc --- /dev/null +++ b/Bin/Doc/iWTAI_DataStructure.vbs @@ -0,0 +1,110 @@ + +'****************************************************************************** +'* File: excel2pdm.vbs +'* Purpose: excelƵı뵽pdmļ +'* Category: +'* Version: 1.0 +'* time : 2014-6-11 +'* Ϊϲexcelݿƣøó뵽pdm +'* óΨһûܺõĴҪֹ޸ġ +'*óο˵Ĵ룬ǿԽsheetеıһε롣 +'* +'* еıƶһexcelһsheetУÿмһУ嶼бͷ˵£ +'* ǰһDZͱ˵ֱACСʽֱӿexcelоͿԿոƱ +'****************************************************************************** +' Excel ʽ +'icontract_master_t ļͷ +' ǿ ע +'contract_m_id NUMBER N +'****************************************************************************** +Option Explicit + +Dim mdl ' the current model +Set mdl = ActiveModel +If (mdl Is Nothing) Then + MsgBox "There is no Active Model" +End If + +Dim HaveExcel +Dim RQ +RQ = vbYes 'MsgBox("Is Excel Installed on your machine ?", vbYesNo + vbInformation, "Confirmation") +If RQ = vbYes Then + HaveExcel = True + ' Open & Create Excel Document + Dim x1 ' + Set x1 = CreateObject("Excel.Application") + + x1.Workbooks.Open "E:\Run\mWTAI\Bin\Doc\iWTAI_DataStructure.xlsx" + x1.Workbooks(1).Worksheets("Table").Activate 'ָҪ򿪵sheet +Else + HaveExcel = False +End If + +a x1, mdl + +sub a(x1, mdl) + +dim rwIndex +dim tableName +dim colname +dim table +dim col +dim count +dim abc + +on error Resume Next +'-------------------------------- +'Ƕȡexcelӱʵ +'-------------------------------- +For rwIndex = 2 To 457 'ָҪExcelб ڵ2DZͷӵ1пʼƶ + With x1.Workbooks(1).Worksheets("Table")'Ҫѭsheet + If .Cells(rwIndex,1).Value <> "" And .Cells(rwIndex,3).Value <> "" And .Cells(rwIndex,4).Value = "Table" Then + set table = mdl.Tables.CreateNew 'һʵ + table.Code = .Cells(rwIndex,3).Value'excelȡñƺͱ + table.Name = .Cells(rwIndex,1).Value' + table.Comment = .Cells(rwIndex,1).Value 'ָ˵ + count = count + 1 + + 'MsgBox .Cells(rwIndex,1).Value + .Cells(rwIndex,3).Value + .Cells(rwIndex,4).Value, vbOK + vbInformation, "" + + + Continue + End If + + If .Cells(rwIndex,2).Value = "" Or .Cells(rwIndex,3).Value = "" Or (.Cells(rwIndex,1).Value = "" And .Cells(rwIndex,2).Value = "")Then + + continue + Else + set col =table.Columns.CreateNew 'һ/ֶ + col.Name = .Cells(rwIndex, 2).Value 'ָname + col.Code = .Cells(rwIndex, 3).Value 'ָcode + col.DataType = .Cells(rwIndex, 4).Value 'ָ + If.Cells(rwIndex, 5).Value <> "" Then'ָ + col.Primary =true + End If + If.Cells(rwIndex, 8).Value = "Y" Then'ָǷɿ true Ϊɿ + + col.Mandatory =true + End If + col.Comment = .Cells(rwIndex, 2).Value 'ָ˵ + + + + + 'col.Length =.Cells(rwIndex, 4).Value 'ֶָγ + + 'col.Precision =.Cells(rwIndex, 5).Value 'ֶָγ + + + + + + End If + + End With +Next + + MsgBox "ݱṹ " + CStr(count), vbOK + vbInformation, "" + +Exit Sub +End sub diff --git a/Bin/Doc/iWTAI_DataStructure.xlsx b/Bin/Doc/iWTAI_DataStructure.xlsx new file mode 100644 index 0000000..a35a23f Binary files /dev/null and b/Bin/Doc/iWTAI_DataStructure.xlsx differ diff --git a/Bin/Doc/~$MPA问题记录及梳理.xlsx b/Bin/Doc/~$MPA问题记录及梳理.xlsx new file mode 100644 index 0000000..a381e9a Binary files /dev/null and b/Bin/Doc/~$MPA问题记录及梳理.xlsx differ diff --git a/Bin/Doc/~$试井功能框架.mmap.~$lock b/Bin/Doc/~$试井功能框架.mmap.~$lock new file mode 100644 index 0000000..85e9f24 --- /dev/null +++ b/Bin/Doc/~$试井功能框架.mmap.~$lock @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Bin/Doc/~$试井架构及实施.mmap.~$lock b/Bin/Doc/~$试井架构及实施.mmap.~$lock new file mode 100644 index 0000000..85e9f24 --- /dev/null +++ b/Bin/Doc/~$试井架构及实施.mmap.~$lock @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Bin/Res/Icon/About.png b/Bin/Res/Icon/About.png new file mode 100644 index 0000000..32ff8c4 Binary files /dev/null and b/Bin/Res/Icon/About.png differ diff --git a/Bin/Res/Icon/Access.png b/Bin/Res/Icon/Access.png new file mode 100644 index 0000000..daeb1ad Binary files /dev/null and b/Bin/Res/Icon/Access.png differ diff --git a/Bin/Res/Icon/AccessEx.png b/Bin/Res/Icon/AccessEx.png new file mode 100644 index 0000000..fffea85 Binary files /dev/null and b/Bin/Res/Icon/AccessEx.png differ diff --git a/Bin/Res/Icon/Add.png b/Bin/Res/Icon/Add.png new file mode 100644 index 0000000..67a21b9 Binary files /dev/null and b/Bin/Res/Icon/Add.png differ diff --git a/Bin/Res/Icon/AddPoint.png b/Bin/Res/Icon/AddPoint.png new file mode 100644 index 0000000..2577ff9 Binary files /dev/null and b/Bin/Res/Icon/AddPoint.png differ diff --git a/Bin/Res/Icon/All.png b/Bin/Res/Icon/All.png new file mode 100644 index 0000000..0a7fd2e Binary files /dev/null and b/Bin/Res/Icon/All.png differ diff --git a/Bin/Res/Icon/AllSeg.png b/Bin/Res/Icon/AllSeg.png new file mode 100644 index 0000000..d2a05f4 Binary files /dev/null and b/Bin/Res/Icon/AllSeg.png differ diff --git a/Bin/Res/Icon/AnalDistri.png b/Bin/Res/Icon/AnalDistri.png new file mode 100644 index 0000000..184f7b1 Binary files /dev/null and b/Bin/Res/Icon/AnalDistri.png differ diff --git a/Bin/Res/Icon/AnalPreCon.png b/Bin/Res/Icon/AnalPreCon.png new file mode 100644 index 0000000..85c4860 Binary files /dev/null and b/Bin/Res/Icon/AnalPreCon.png differ diff --git a/Bin/Res/Icon/AnalWndM.png b/Bin/Res/Icon/AnalWndM.png new file mode 100644 index 0000000..e80e6b4 Binary files /dev/null and b/Bin/Res/Icon/AnalWndM.png differ diff --git a/Bin/Res/Icon/Analysis.png b/Bin/Res/Icon/Analysis.png new file mode 100644 index 0000000..11aa2c0 Binary files /dev/null and b/Bin/Res/Icon/Analysis.png differ diff --git a/Bin/Res/Icon/AppHome128.png b/Bin/Res/Icon/AppHome128.png new file mode 100644 index 0000000..3761c17 Binary files /dev/null and b/Bin/Res/Icon/AppHome128.png differ diff --git a/Bin/Res/Icon/AppHome64.png b/Bin/Res/Icon/AppHome64.png new file mode 100644 index 0000000..7b5b5eb Binary files /dev/null and b/Bin/Res/Icon/AppHome64.png differ diff --git a/Bin/Res/Icon/Apply.png b/Bin/Res/Icon/Apply.png new file mode 100644 index 0000000..40eb891 Binary files /dev/null and b/Bin/Res/Icon/Apply.png differ diff --git a/Bin/Res/Icon/Arrow.png b/Bin/Res/Icon/Arrow.png new file mode 100644 index 0000000..0a2e295 Binary files /dev/null and b/Bin/Res/Icon/Arrow.png differ diff --git a/Bin/Res/Icon/AssisAnal.png b/Bin/Res/Icon/AssisAnal.png new file mode 100644 index 0000000..cf1acaa Binary files /dev/null and b/Bin/Res/Icon/AssisAnal.png differ diff --git a/Bin/Res/Icon/AutoFit.png b/Bin/Res/Icon/AutoFit.png new file mode 100644 index 0000000..56a91d3 Binary files /dev/null and b/Bin/Res/Icon/AutoFit.png differ diff --git a/Bin/Res/Icon/BackVisible.png b/Bin/Res/Icon/BackVisible.png new file mode 100644 index 0000000..36059be Binary files /dev/null and b/Bin/Res/Icon/BackVisible.png differ diff --git a/Bin/Res/Icon/BaseInfo.png b/Bin/Res/Icon/BaseInfo.png new file mode 100644 index 0000000..a5c228b Binary files /dev/null and b/Bin/Res/Icon/BaseInfo.png differ diff --git a/Bin/Res/Icon/BasicData.png b/Bin/Res/Icon/BasicData.png new file mode 100644 index 0000000..72838db Binary files /dev/null and b/Bin/Res/Icon/BasicData.png differ diff --git a/Bin/Res/Icon/BdyDetails.png b/Bin/Res/Icon/BdyDetails.png new file mode 100644 index 0000000..1965ea9 Binary files /dev/null and b/Bin/Res/Icon/BdyDetails.png differ diff --git a/Bin/Res/Icon/BiPointVisible.png b/Bin/Res/Icon/BiPointVisible.png new file mode 100644 index 0000000..b3d286b Binary files /dev/null and b/Bin/Res/Icon/BiPointVisible.png differ diff --git a/Bin/Res/Icon/BilinearFlow.png b/Bin/Res/Icon/BilinearFlow.png new file mode 100644 index 0000000..97edb37 Binary files /dev/null and b/Bin/Res/Icon/BilinearFlow.png differ diff --git a/Bin/Res/Icon/BlackWhite.png b/Bin/Res/Icon/BlackWhite.png new file mode 100644 index 0000000..05b9f8e Binary files /dev/null and b/Bin/Res/Icon/BlackWhite.png differ diff --git a/Bin/Res/Icon/Block.png b/Bin/Res/Icon/Block.png new file mode 100644 index 0000000..59094bc Binary files /dev/null and b/Bin/Res/Icon/Block.png differ diff --git a/Bin/Res/Icon/Bsf.png b/Bin/Res/Icon/Bsf.png new file mode 100644 index 0000000..1fa42f4 Binary files /dev/null and b/Bin/Res/Icon/Bsf.png differ diff --git a/Bin/Res/Icon/CalGrid.png b/Bin/Res/Icon/CalGrid.png new file mode 100644 index 0000000..8fb5936 Binary files /dev/null and b/Bin/Res/Icon/CalGrid.png differ diff --git a/Bin/Res/Icon/Cancel.png b/Bin/Res/Icon/Cancel.png new file mode 100644 index 0000000..be00e0f Binary files /dev/null and b/Bin/Res/Icon/Cancel.png differ diff --git a/Bin/Res/Icon/CbxBtn.png b/Bin/Res/Icon/CbxBtn.png new file mode 100644 index 0000000..adb8af6 Binary files /dev/null and b/Bin/Res/Icon/CbxBtn.png differ diff --git a/Bin/Res/Icon/CbxBtn_4k.png b/Bin/Res/Icon/CbxBtn_4k.png new file mode 100644 index 0000000..227e9fa Binary files /dev/null and b/Bin/Res/Icon/CbxBtn_4k.png differ diff --git a/Bin/Res/Icon/Close.png b/Bin/Res/Icon/Close.png new file mode 100644 index 0000000..8c2df45 Binary files /dev/null and b/Bin/Res/Icon/Close.png differ diff --git a/Bin/Res/Icon/CloseAllwindow.png b/Bin/Res/Icon/CloseAllwindow.png new file mode 100644 index 0000000..bb56063 Binary files /dev/null and b/Bin/Res/Icon/CloseAllwindow.png differ diff --git a/Bin/Res/Icon/CloseProj.png b/Bin/Res/Icon/CloseProj.png new file mode 100644 index 0000000..c07d9a3 Binary files /dev/null and b/Bin/Res/Icon/CloseProj.png differ diff --git a/Bin/Res/Icon/Collapse.png b/Bin/Res/Icon/Collapse.png new file mode 100644 index 0000000..13f8ba8 Binary files /dev/null and b/Bin/Res/Icon/Collapse.png differ diff --git a/Bin/Res/Icon/Continue.png b/Bin/Res/Icon/Continue.png new file mode 100644 index 0000000..547fcc7 Binary files /dev/null and b/Bin/Res/Icon/Continue.png differ diff --git a/Bin/Res/Icon/Copy.png b/Bin/Res/Icon/Copy.png new file mode 100644 index 0000000..ff3f5ea Binary files /dev/null and b/Bin/Res/Icon/Copy.png differ diff --git a/Bin/Res/Icon/Crossline.png b/Bin/Res/Icon/Crossline.png new file mode 100644 index 0000000..a9a2392 Binary files /dev/null and b/Bin/Res/Icon/Crossline.png differ diff --git a/Bin/Res/Icon/Cut.png b/Bin/Res/Icon/Cut.png new file mode 100644 index 0000000..bd7638a Binary files /dev/null and b/Bin/Res/Icon/Cut.png differ diff --git a/Bin/Res/Icon/DataTable.png b/Bin/Res/Icon/DataTable.png new file mode 100644 index 0000000..978b0d8 Binary files /dev/null and b/Bin/Res/Icon/DataTable.png differ diff --git a/Bin/Res/Icon/Database.png b/Bin/Res/Icon/Database.png new file mode 100644 index 0000000..4ddfbbc Binary files /dev/null and b/Bin/Res/Icon/Database.png differ diff --git a/Bin/Res/Icon/DefaultSet.png b/Bin/Res/Icon/DefaultSet.png new file mode 100644 index 0000000..ce90287 Binary files /dev/null and b/Bin/Res/Icon/DefaultSet.png differ diff --git a/Bin/Res/Icon/Del.png b/Bin/Res/Icon/Del.png new file mode 100644 index 0000000..446d50a Binary files /dev/null and b/Bin/Res/Icon/Del.png differ diff --git a/Bin/Res/Icon/Deploy.png b/Bin/Res/Icon/Deploy.png new file mode 100644 index 0000000..6836317 Binary files /dev/null and b/Bin/Res/Icon/Deploy.png differ diff --git a/Bin/Res/Icon/Down.png b/Bin/Res/Icon/Down.png new file mode 100644 index 0000000..d592182 Binary files /dev/null and b/Bin/Res/Icon/Down.png differ diff --git a/Bin/Res/Icon/DragPF.png b/Bin/Res/Icon/DragPF.png new file mode 100644 index 0000000..74594d9 Binary files /dev/null and b/Bin/Res/Icon/DragPF.png differ diff --git a/Bin/Res/Icon/Edit.png b/Bin/Res/Icon/Edit.png new file mode 100644 index 0000000..cb9548d Binary files /dev/null and b/Bin/Res/Icon/Edit.png differ diff --git a/Bin/Res/Icon/EquLayout.png b/Bin/Res/Icon/EquLayout.png new file mode 100644 index 0000000..74b7297 Binary files /dev/null and b/Bin/Res/Icon/EquLayout.png differ diff --git a/Bin/Res/Icon/EraseRect.png b/Bin/Res/Icon/EraseRect.png new file mode 100644 index 0000000..a29ec65 Binary files /dev/null and b/Bin/Res/Icon/EraseRect.png differ diff --git a/Bin/Res/Icon/Eraser.png b/Bin/Res/Icon/Eraser.png new file mode 100644 index 0000000..e6e460d Binary files /dev/null and b/Bin/Res/Icon/Eraser.png differ diff --git a/Bin/Res/Icon/Excel.png b/Bin/Res/Icon/Excel.png new file mode 100644 index 0000000..232ff59 Binary files /dev/null and b/Bin/Res/Icon/Excel.png differ diff --git a/Bin/Res/Icon/ExcelEx.png b/Bin/Res/Icon/ExcelEx.png new file mode 100644 index 0000000..a2ad44d Binary files /dev/null and b/Bin/Res/Icon/ExcelEx.png differ diff --git a/Bin/Res/Icon/ExcludeRect.png b/Bin/Res/Icon/ExcludeRect.png new file mode 100644 index 0000000..2acef55 Binary files /dev/null and b/Bin/Res/Icon/ExcludeRect.png differ diff --git a/Bin/Res/Icon/Exit.png b/Bin/Res/Icon/Exit.png new file mode 100644 index 0000000..be00e0f Binary files /dev/null and b/Bin/Res/Icon/Exit.png differ diff --git a/Bin/Res/Icon/Expand.png b/Bin/Res/Icon/Expand.png new file mode 100644 index 0000000..df4d1ec Binary files /dev/null and b/Bin/Res/Icon/Expand.png differ diff --git a/Bin/Res/Icon/Export.png b/Bin/Res/Icon/Export.png new file mode 100644 index 0000000..12037fa Binary files /dev/null and b/Bin/Res/Icon/Export.png differ diff --git a/Bin/Res/Icon/ExportExcel.png b/Bin/Res/Icon/ExportExcel.png new file mode 100644 index 0000000..aaaeb5d Binary files /dev/null and b/Bin/Res/Icon/ExportExcel.png differ diff --git a/Bin/Res/Icon/Extract.png b/Bin/Res/Icon/Extract.png new file mode 100644 index 0000000..6de65c9 Binary files /dev/null and b/Bin/Res/Icon/Extract.png differ diff --git a/Bin/Res/Icon/FA_NotDefine.png b/Bin/Res/Icon/FA_NotDefine.png new file mode 100644 index 0000000..e16e12f Binary files /dev/null and b/Bin/Res/Icon/FA_NotDefine.png differ diff --git a/Bin/Res/Icon/First.png b/Bin/Res/Icon/First.png new file mode 100644 index 0000000..1cd7332 Binary files /dev/null and b/Bin/Res/Icon/First.png differ diff --git a/Bin/Res/Icon/FitModel.png b/Bin/Res/Icon/FitModel.png new file mode 100644 index 0000000..519d811 Binary files /dev/null and b/Bin/Res/Icon/FitModel.png differ diff --git a/Bin/Res/Icon/FlowPeriod.png b/Bin/Res/Icon/FlowPeriod.png new file mode 100644 index 0000000..a0a7852 Binary files /dev/null and b/Bin/Res/Icon/FlowPeriod.png differ diff --git a/Bin/Res/Icon/FlowToS.png b/Bin/Res/Icon/FlowToS.png new file mode 100644 index 0000000..ffb631b Binary files /dev/null and b/Bin/Res/Icon/FlowToS.png differ diff --git a/Bin/Res/Icon/FluidProperty.png b/Bin/Res/Icon/FluidProperty.png new file mode 100644 index 0000000..7277b7c Binary files /dev/null and b/Bin/Res/Icon/FluidProperty.png differ diff --git a/Bin/Res/Icon/Fold.png b/Bin/Res/Icon/Fold.png new file mode 100644 index 0000000..7ef8cc8 Binary files /dev/null and b/Bin/Res/Icon/Fold.png differ diff --git a/Bin/Res/Icon/GasWell.png b/Bin/Res/Icon/GasWell.png new file mode 100644 index 0000000..59094bc Binary files /dev/null and b/Bin/Res/Icon/GasWell.png differ diff --git a/Bin/Res/Icon/Grids.png b/Bin/Res/Icon/Grids.png new file mode 100644 index 0000000..8fb5936 Binary files /dev/null and b/Bin/Res/Icon/Grids.png differ diff --git a/Bin/Res/Icon/Help.png b/Bin/Res/Icon/Help.png new file mode 100644 index 0000000..ba6f263 Binary files /dev/null and b/Bin/Res/Icon/Help.png differ diff --git a/Bin/Res/Icon/IPRAnal.png b/Bin/Res/Icon/IPRAnal.png new file mode 100644 index 0000000..898f820 Binary files /dev/null and b/Bin/Res/Icon/IPRAnal.png differ diff --git a/Bin/Res/Icon/ImportExcel.png b/Bin/Res/Icon/ImportExcel.png new file mode 100644 index 0000000..28fe4c7 Binary files /dev/null and b/Bin/Res/Icon/ImportExcel.png differ diff --git a/Bin/Res/Icon/InDatabase.png b/Bin/Res/Icon/InDatabase.png new file mode 100644 index 0000000..3e674fa Binary files /dev/null and b/Bin/Res/Icon/InDatabase.png differ diff --git a/Bin/Res/Icon/InputBasic.png b/Bin/Res/Icon/InputBasic.png new file mode 100644 index 0000000..76632b0 Binary files /dev/null and b/Bin/Res/Icon/InputBasic.png differ diff --git a/Bin/Res/Icon/InputFluid.png b/Bin/Res/Icon/InputFluid.png new file mode 100644 index 0000000..47e7dd0 Binary files /dev/null and b/Bin/Res/Icon/InputFluid.png differ diff --git a/Bin/Res/Icon/InputGasConst.png b/Bin/Res/Icon/InputGasConst.png new file mode 100644 index 0000000..97332de Binary files /dev/null and b/Bin/Res/Icon/InputGasConst.png differ diff --git a/Bin/Res/Icon/InputPF.png b/Bin/Res/Icon/InputPF.png new file mode 100644 index 0000000..5fa4786 Binary files /dev/null and b/Bin/Res/Icon/InputPF.png differ diff --git a/Bin/Res/Icon/InsertCurve.png b/Bin/Res/Icon/InsertCurve.png new file mode 100644 index 0000000..c7b1933 Binary files /dev/null and b/Bin/Res/Icon/InsertCurve.png differ diff --git a/Bin/Res/Icon/InsertHoriBand.png b/Bin/Res/Icon/InsertHoriBand.png new file mode 100644 index 0000000..78af747 Binary files /dev/null and b/Bin/Res/Icon/InsertHoriBand.png differ diff --git a/Bin/Res/Icon/InsertLine.png b/Bin/Res/Icon/InsertLine.png new file mode 100644 index 0000000..ac13d22 Binary files /dev/null and b/Bin/Res/Icon/InsertLine.png differ diff --git a/Bin/Res/Icon/InsertPic.png b/Bin/Res/Icon/InsertPic.png new file mode 100644 index 0000000..3297c7d Binary files /dev/null and b/Bin/Res/Icon/InsertPic.png differ diff --git a/Bin/Res/Icon/InsertPoint.png b/Bin/Res/Icon/InsertPoint.png new file mode 100644 index 0000000..861c8fb Binary files /dev/null and b/Bin/Res/Icon/InsertPoint.png differ diff --git a/Bin/Res/Icon/InsertPolygon.png b/Bin/Res/Icon/InsertPolygon.png new file mode 100644 index 0000000..ad55576 Binary files /dev/null and b/Bin/Res/Icon/InsertPolygon.png differ diff --git a/Bin/Res/Icon/InsertRect.png b/Bin/Res/Icon/InsertRect.png new file mode 100644 index 0000000..62063fd Binary files /dev/null and b/Bin/Res/Icon/InsertRect.png differ diff --git a/Bin/Res/Icon/InsertText.png b/Bin/Res/Icon/InsertText.png new file mode 100644 index 0000000..0d09e9e Binary files /dev/null and b/Bin/Res/Icon/InsertText.png differ diff --git a/Bin/Res/Icon/InsertVerBand.png b/Bin/Res/Icon/InsertVerBand.png new file mode 100644 index 0000000..1113ed0 Binary files /dev/null and b/Bin/Res/Icon/InsertVerBand.png differ diff --git a/Bin/Res/Icon/JobEdit.png b/Bin/Res/Icon/JobEdit.png new file mode 100644 index 0000000..f14ab1e Binary files /dev/null and b/Bin/Res/Icon/JobEdit.png differ diff --git a/Bin/Res/Icon/JobNew.png b/Bin/Res/Icon/JobNew.png new file mode 100644 index 0000000..eb22d5b Binary files /dev/null and b/Bin/Res/Icon/JobNew.png differ diff --git a/Bin/Res/Icon/Last.png b/Bin/Res/Icon/Last.png new file mode 100644 index 0000000..52aee8d Binary files /dev/null and b/Bin/Res/Icon/Last.png differ diff --git a/Bin/Res/Icon/LayerData.png b/Bin/Res/Icon/LayerData.png new file mode 100644 index 0000000..1965ea9 Binary files /dev/null and b/Bin/Res/Icon/LayerData.png differ diff --git a/Bin/Res/Icon/LicenseManager.png b/Bin/Res/Icon/LicenseManager.png new file mode 100644 index 0000000..46cc8ac Binary files /dev/null and b/Bin/Res/Icon/LicenseManager.png differ diff --git a/Bin/Res/Icon/LineParallel.png b/Bin/Res/Icon/LineParallel.png new file mode 100644 index 0000000..e0acbe8 Binary files /dev/null and b/Bin/Res/Icon/LineParallel.png differ diff --git a/Bin/Res/Icon/LinearFlow.png b/Bin/Res/Icon/LinearFlow.png new file mode 100644 index 0000000..76fe77e Binary files /dev/null and b/Bin/Res/Icon/LinearFlow.png differ diff --git a/Bin/Res/Icon/Load.png b/Bin/Res/Icon/Load.png new file mode 100644 index 0000000..71650fd Binary files /dev/null and b/Bin/Res/Icon/Load.png differ diff --git a/Bin/Res/Icon/LoadGraph.png b/Bin/Res/Icon/LoadGraph.png new file mode 100644 index 0000000..c85c12e Binary files /dev/null and b/Bin/Res/Icon/LoadGraph.png differ diff --git a/Bin/Res/Icon/LoadJobs.png b/Bin/Res/Icon/LoadJobs.png new file mode 100644 index 0000000..2970324 Binary files /dev/null and b/Bin/Res/Icon/LoadJobs.png differ diff --git a/Bin/Res/Icon/LoadPvt.png b/Bin/Res/Icon/LoadPvt.png new file mode 100644 index 0000000..71650fd Binary files /dev/null and b/Bin/Res/Icon/LoadPvt.png differ diff --git a/Bin/Res/Icon/LogView.png b/Bin/Res/Icon/LogView.png new file mode 100644 index 0000000..93a56e0 Binary files /dev/null and b/Bin/Res/Icon/LogView.png differ diff --git a/Bin/Res/Icon/LogWindow.png b/Bin/Res/Icon/LogWindow.png new file mode 100644 index 0000000..c1f3eda Binary files /dev/null and b/Bin/Res/Icon/LogWindow.png differ diff --git a/Bin/Res/Icon/Login.png b/Bin/Res/Icon/Login.png new file mode 100644 index 0000000..dc55301 Binary files /dev/null and b/Bin/Res/Icon/Login.png differ diff --git a/Bin/Res/Icon/Logs.png b/Bin/Res/Icon/Logs.png new file mode 100644 index 0000000..b2e62ca Binary files /dev/null and b/Bin/Res/Icon/Logs.png differ diff --git a/Bin/Res/Icon/MPA.ico b/Bin/Res/Icon/MPA.ico new file mode 100644 index 0000000..e75dfec Binary files /dev/null and b/Bin/Res/Icon/MPA.ico differ diff --git a/Bin/Res/Icon/MPA.png b/Bin/Res/Icon/MPA.png new file mode 100644 index 0000000..f051675 Binary files /dev/null and b/Bin/Res/Icon/MPA.png differ diff --git a/Bin/Res/Icon/MPA16.png b/Bin/Res/Icon/MPA16.png new file mode 100644 index 0000000..6f88c84 Binary files /dev/null and b/Bin/Res/Icon/MPA16.png differ diff --git a/Bin/Res/Icon/Map2D.png b/Bin/Res/Icon/Map2D.png new file mode 100644 index 0000000..d095d42 Binary files /dev/null and b/Bin/Res/Icon/Map2D.png differ diff --git a/Bin/Res/Icon/MiniFrAnalFA.png b/Bin/Res/Icon/MiniFrAnalFA.png new file mode 100644 index 0000000..898f820 Binary files /dev/null and b/Bin/Res/Icon/MiniFrAnalFA.png differ diff --git a/Bin/Res/Icon/MinusPoint.png b/Bin/Res/Icon/MinusPoint.png new file mode 100644 index 0000000..47f862c Binary files /dev/null and b/Bin/Res/Icon/MinusPoint.png differ diff --git a/Bin/Res/Icon/MixViscosity.png b/Bin/Res/Icon/MixViscosity.png new file mode 100644 index 0000000..c70637c Binary files /dev/null and b/Bin/Res/Icon/MixViscosity.png differ diff --git a/Bin/Res/Icon/ModelHW.png b/Bin/Res/Icon/ModelHW.png new file mode 100644 index 0000000..7703b6b Binary files /dev/null and b/Bin/Res/Icon/ModelHW.png differ diff --git a/Bin/Res/Icon/ModelIPR.png b/Bin/Res/Icon/ModelIPR.png new file mode 100644 index 0000000..898f820 Binary files /dev/null and b/Bin/Res/Icon/ModelIPR.png differ diff --git a/Bin/Res/Icon/ModelLP.png b/Bin/Res/Icon/ModelLP.png new file mode 100644 index 0000000..bf7d732 Binary files /dev/null and b/Bin/Res/Icon/ModelLP.png differ diff --git a/Bin/Res/Icon/ModelPF.png b/Bin/Res/Icon/ModelPF.png new file mode 100644 index 0000000..f1b73f0 Binary files /dev/null and b/Bin/Res/Icon/ModelPF.png differ diff --git a/Bin/Res/Icon/ModelRecommend.png b/Bin/Res/Icon/ModelRecommend.png new file mode 100644 index 0000000..3cc89d1 Binary files /dev/null and b/Bin/Res/Icon/ModelRecommend.png differ diff --git a/Bin/Res/Icon/ModelSR.png b/Bin/Res/Icon/ModelSR.png new file mode 100644 index 0000000..3b7687d Binary files /dev/null and b/Bin/Res/Icon/ModelSR.png differ diff --git a/Bin/Res/Icon/ModelScan.png b/Bin/Res/Icon/ModelScan.png new file mode 100644 index 0000000..7c6e7be Binary files /dev/null and b/Bin/Res/Icon/ModelScan.png differ diff --git a/Bin/Res/Icon/ModelSelect.png b/Bin/Res/Icon/ModelSelect.png new file mode 100644 index 0000000..92fe864 Binary files /dev/null and b/Bin/Res/Icon/ModelSelect.png differ diff --git a/Bin/Res/Icon/Move.png b/Bin/Res/Icon/Move.png new file mode 100644 index 0000000..8670ce3 Binary files /dev/null and b/Bin/Res/Icon/Move.png differ diff --git a/Bin/Res/Icon/MultiLayer.png b/Bin/Res/Icon/MultiLayer.png new file mode 100644 index 0000000..1965ea9 Binary files /dev/null and b/Bin/Res/Icon/MultiLayer.png differ diff --git a/Bin/Res/Icon/MultiSelect.png b/Bin/Res/Icon/MultiSelect.png new file mode 100644 index 0000000..d67b539 Binary files /dev/null and b/Bin/Res/Icon/MultiSelect.png differ diff --git a/Bin/Res/Icon/New.png b/Bin/Res/Icon/New.png new file mode 100644 index 0000000..039fbe4 Binary files /dev/null and b/Bin/Res/Icon/New.png differ diff --git a/Bin/Res/Icon/NewProj.png b/Bin/Res/Icon/NewProj.png new file mode 100644 index 0000000..7370e8d Binary files /dev/null and b/Bin/Res/Icon/NewProj.png differ diff --git a/Bin/Res/Icon/Next.png b/Bin/Res/Icon/Next.png new file mode 100644 index 0000000..47d15c3 Binary files /dev/null and b/Bin/Res/Icon/Next.png differ diff --git a/Bin/Res/Icon/NextOne.png b/Bin/Res/Icon/NextOne.png new file mode 100644 index 0000000..d1e05a8 Binary files /dev/null and b/Bin/Res/Icon/NextOne.png differ diff --git a/Bin/Res/Icon/NmDemo.png b/Bin/Res/Icon/NmDemo.png new file mode 100644 index 0000000..c85c12e Binary files /dev/null and b/Bin/Res/Icon/NmDemo.png differ diff --git a/Bin/Res/Icon/NodeParent.png b/Bin/Res/Icon/NodeParent.png new file mode 100644 index 0000000..a5c228b Binary files /dev/null and b/Bin/Res/Icon/NodeParent.png differ diff --git a/Bin/Res/Icon/NodeSub.png b/Bin/Res/Icon/NodeSub.png new file mode 100644 index 0000000..e80e6b4 Binary files /dev/null and b/Bin/Res/Icon/NodeSub.png differ diff --git a/Bin/Res/Icon/OK.png b/Bin/Res/Icon/OK.png new file mode 100644 index 0000000..264accd Binary files /dev/null and b/Bin/Res/Icon/OK.png differ diff --git a/Bin/Res/Icon/OilWell.png b/Bin/Res/Icon/OilWell.png new file mode 100644 index 0000000..59094bc Binary files /dev/null and b/Bin/Res/Icon/OilWell.png differ diff --git a/Bin/Res/Icon/Open.png b/Bin/Res/Icon/Open.png new file mode 100644 index 0000000..93f530f Binary files /dev/null and b/Bin/Res/Icon/Open.png differ diff --git a/Bin/Res/Icon/OpenDir.png b/Bin/Res/Icon/OpenDir.png new file mode 100644 index 0000000..dba395f Binary files /dev/null and b/Bin/Res/Icon/OpenDir.png differ diff --git a/Bin/Res/Icon/OpenProj.png b/Bin/Res/Icon/OpenProj.png new file mode 100644 index 0000000..9e05f4a Binary files /dev/null and b/Bin/Res/Icon/OpenProj.png differ diff --git a/Bin/Res/Icon/OtherTool.png b/Bin/Res/Icon/OtherTool.png new file mode 100644 index 0000000..1f6d125 Binary files /dev/null and b/Bin/Res/Icon/OtherTool.png differ diff --git a/Bin/Res/Icon/PF.png b/Bin/Res/Icon/PF.png new file mode 100644 index 0000000..56c80cd Binary files /dev/null and b/Bin/Res/Icon/PF.png differ diff --git a/Bin/Res/Icon/PVT.png b/Bin/Res/Icon/PVT.png new file mode 100644 index 0000000..898f820 Binary files /dev/null and b/Bin/Res/Icon/PVT.png differ diff --git a/Bin/Res/Icon/Paste.png b/Bin/Res/Icon/Paste.png new file mode 100644 index 0000000..1d55269 Binary files /dev/null and b/Bin/Res/Icon/Paste.png differ diff --git a/Bin/Res/Icon/Pause.png b/Bin/Res/Icon/Pause.png new file mode 100644 index 0000000..0634ed5 Binary files /dev/null and b/Bin/Res/Icon/Pause.png differ diff --git a/Bin/Res/Icon/PhaseGas.png b/Bin/Res/Icon/PhaseGas.png new file mode 100644 index 0000000..a36c85c Binary files /dev/null and b/Bin/Res/Icon/PhaseGas.png differ diff --git a/Bin/Res/Icon/PhaseOil.png b/Bin/Res/Icon/PhaseOil.png new file mode 100644 index 0000000..df8375d Binary files /dev/null and b/Bin/Res/Icon/PhaseOil.png differ diff --git a/Bin/Res/Icon/PhaseWater.png b/Bin/Res/Icon/PhaseWater.png new file mode 100644 index 0000000..deb36d0 Binary files /dev/null and b/Bin/Res/Icon/PhaseWater.png differ diff --git a/Bin/Res/Icon/PlateFit.png b/Bin/Res/Icon/PlateFit.png new file mode 100644 index 0000000..768c22c Binary files /dev/null and b/Bin/Res/Icon/PlateFit.png differ diff --git a/Bin/Res/Icon/PrePrint.png b/Bin/Res/Icon/PrePrint.png new file mode 100644 index 0000000..68062f1 Binary files /dev/null and b/Bin/Res/Icon/PrePrint.png differ diff --git a/Bin/Res/Icon/PrepareGrid.png b/Bin/Res/Icon/PrepareGrid.png new file mode 100644 index 0000000..8fb5936 Binary files /dev/null and b/Bin/Res/Icon/PrepareGrid.png differ diff --git a/Bin/Res/Icon/PressureAnalysis.png b/Bin/Res/Icon/PressureAnalysis.png new file mode 100644 index 0000000..2c72e11 Binary files /dev/null and b/Bin/Res/Icon/PressureAnalysis.png differ diff --git a/Bin/Res/Icon/PressureData.png b/Bin/Res/Icon/PressureData.png new file mode 100644 index 0000000..003999a Binary files /dev/null and b/Bin/Res/Icon/PressureData.png differ diff --git a/Bin/Res/Icon/Prev.png b/Bin/Res/Icon/Prev.png new file mode 100644 index 0000000..e53aef7 Binary files /dev/null and b/Bin/Res/Icon/Prev.png differ diff --git a/Bin/Res/Icon/PreviewByCur.png b/Bin/Res/Icon/PreviewByCur.png new file mode 100644 index 0000000..18d942e Binary files /dev/null and b/Bin/Res/Icon/PreviewByCur.png differ diff --git a/Bin/Res/Icon/PreviousOne.png b/Bin/Res/Icon/PreviousOne.png new file mode 100644 index 0000000..00d3409 Binary files /dev/null and b/Bin/Res/Icon/PreviousOne.png differ diff --git a/Bin/Res/Icon/Print.png b/Bin/Res/Icon/Print.png new file mode 100644 index 0000000..22c2bf9 Binary files /dev/null and b/Bin/Res/Icon/Print.png differ diff --git a/Bin/Res/Icon/PrintSet.png b/Bin/Res/Icon/PrintSet.png new file mode 100644 index 0000000..7950c79 Binary files /dev/null and b/Bin/Res/Icon/PrintSet.png differ diff --git a/Bin/Res/Icon/ProjInfo.png b/Bin/Res/Icon/ProjInfo.png new file mode 100644 index 0000000..81f97f3 Binary files /dev/null and b/Bin/Res/Icon/ProjInfo.png differ diff --git a/Bin/Res/Icon/ProjTree.png b/Bin/Res/Icon/ProjTree.png new file mode 100644 index 0000000..071e966 Binary files /dev/null and b/Bin/Res/Icon/ProjTree.png differ diff --git a/Bin/Res/Icon/Property.png b/Bin/Res/Icon/Property.png new file mode 100644 index 0000000..15c7021 Binary files /dev/null and b/Bin/Res/Icon/Property.png differ diff --git a/Bin/Res/Icon/PropertyWindow.png b/Bin/Res/Icon/PropertyWindow.png new file mode 100644 index 0000000..e0a3d1a Binary files /dev/null and b/Bin/Res/Icon/PropertyWindow.png differ diff --git a/Bin/Res/Icon/PsedoP.png b/Bin/Res/Icon/PsedoP.png new file mode 100644 index 0000000..fce7dc2 Binary files /dev/null and b/Bin/Res/Icon/PsedoP.png differ diff --git a/Bin/Res/Icon/PsedoP3.png b/Bin/Res/Icon/PsedoP3.png new file mode 100644 index 0000000..fa56dc1 Binary files /dev/null and b/Bin/Res/Icon/PsedoP3.png differ diff --git a/Bin/Res/Icon/PsedoPC.png b/Bin/Res/Icon/PsedoPC.png new file mode 100644 index 0000000..fa56dc1 Binary files /dev/null and b/Bin/Res/Icon/PsedoPC.png differ diff --git a/Bin/Res/Icon/PvtBasicOption.png b/Bin/Res/Icon/PvtBasicOption.png new file mode 100644 index 0000000..7153a42 Binary files /dev/null and b/Bin/Res/Icon/PvtBasicOption.png differ diff --git a/Bin/Res/Icon/QuickMatch.png b/Bin/Res/Icon/QuickMatch.png new file mode 100644 index 0000000..358ca47 Binary files /dev/null and b/Bin/Res/Icon/QuickMatch.png differ diff --git a/Bin/Res/Icon/Quit.png b/Bin/Res/Icon/Quit.png new file mode 100644 index 0000000..1cab283 Binary files /dev/null and b/Bin/Res/Icon/Quit.png differ diff --git a/Bin/Res/Icon/RadialFlow.png b/Bin/Res/Icon/RadialFlow.png new file mode 100644 index 0000000..1acbd22 Binary files /dev/null and b/Bin/Res/Icon/RadialFlow.png differ diff --git a/Bin/Res/Icon/RateAnalysis.png b/Bin/Res/Icon/RateAnalysis.png new file mode 100644 index 0000000..7f4278e Binary files /dev/null and b/Bin/Res/Icon/RateAnalysis.png differ diff --git a/Bin/Res/Icon/RateData.png b/Bin/Res/Icon/RateData.png new file mode 100644 index 0000000..ffb631b Binary files /dev/null and b/Bin/Res/Icon/RateData.png differ diff --git a/Bin/Res/Icon/RatePoint.png b/Bin/Res/Icon/RatePoint.png new file mode 100644 index 0000000..7632aed Binary files /dev/null and b/Bin/Res/Icon/RatePoint.png differ diff --git a/Bin/Res/Icon/RecentOpen.png b/Bin/Res/Icon/RecentOpen.png new file mode 100644 index 0000000..4d7fe1b Binary files /dev/null and b/Bin/Res/Icon/RecentOpen.png differ diff --git a/Bin/Res/Icon/Redo.png b/Bin/Res/Icon/Redo.png new file mode 100644 index 0000000..bf0c97b Binary files /dev/null and b/Bin/Res/Icon/Redo.png differ diff --git a/Bin/Res/Icon/Refresh.png b/Bin/Res/Icon/Refresh.png new file mode 100644 index 0000000..30d2320 Binary files /dev/null and b/Bin/Res/Icon/Refresh.png differ diff --git a/Bin/Res/Icon/RegionSelect.png b/Bin/Res/Icon/RegionSelect.png new file mode 100644 index 0000000..770f2a0 Binary files /dev/null and b/Bin/Res/Icon/RegionSelect.png differ diff --git a/Bin/Res/Icon/Register.png b/Bin/Res/Icon/Register.png new file mode 100644 index 0000000..2054e62 Binary files /dev/null and b/Bin/Res/Icon/Register.png differ diff --git a/Bin/Res/Icon/Remove.png b/Bin/Res/Icon/Remove.png new file mode 100644 index 0000000..0695297 Binary files /dev/null and b/Bin/Res/Icon/Remove.png differ diff --git a/Bin/Res/Icon/Rename.png b/Bin/Res/Icon/Rename.png new file mode 100644 index 0000000..ef87f30 Binary files /dev/null and b/Bin/Res/Icon/Rename.png differ diff --git a/Bin/Res/Icon/ResData.png b/Bin/Res/Icon/ResData.png new file mode 100644 index 0000000..60fa542 Binary files /dev/null and b/Bin/Res/Icon/ResData.png differ diff --git a/Bin/Res/Icon/RunEx.png b/Bin/Res/Icon/RunEx.png new file mode 100644 index 0000000..d7f4afb Binary files /dev/null and b/Bin/Res/Icon/RunEx.png differ diff --git a/Bin/Res/Icon/RunOther.png b/Bin/Res/Icon/RunOther.png new file mode 100644 index 0000000..0efa6c2 Binary files /dev/null and b/Bin/Res/Icon/RunOther.png differ diff --git a/Bin/Res/Icon/SaveAsImage.png b/Bin/Res/Icon/SaveAsImage.png new file mode 100644 index 0000000..31186c0 Binary files /dev/null and b/Bin/Res/Icon/SaveAsImage.png differ diff --git a/Bin/Res/Icon/SaveAsModelSketch.png b/Bin/Res/Icon/SaveAsModelSketch.png new file mode 100644 index 0000000..31186c0 Binary files /dev/null and b/Bin/Res/Icon/SaveAsModelSketch.png differ diff --git a/Bin/Res/Icon/SaveAsTempl.png b/Bin/Res/Icon/SaveAsTempl.png new file mode 100644 index 0000000..3efa789 Binary files /dev/null and b/Bin/Res/Icon/SaveAsTempl.png differ diff --git a/Bin/Res/Icon/SaveGraph.png b/Bin/Res/Icon/SaveGraph.png new file mode 100644 index 0000000..3e674fa Binary files /dev/null and b/Bin/Res/Icon/SaveGraph.png differ diff --git a/Bin/Res/Icon/SaveImg.png b/Bin/Res/Icon/SaveImg.png new file mode 100644 index 0000000..35cbf50 Binary files /dev/null and b/Bin/Res/Icon/SaveImg.png differ diff --git a/Bin/Res/Icon/SaveJobs.png b/Bin/Res/Icon/SaveJobs.png new file mode 100644 index 0000000..21faf4d Binary files /dev/null and b/Bin/Res/Icon/SaveJobs.png differ diff --git a/Bin/Res/Icon/SaveJobsAll.png b/Bin/Res/Icon/SaveJobsAll.png new file mode 100644 index 0000000..21faf4d Binary files /dev/null and b/Bin/Res/Icon/SaveJobsAll.png differ diff --git a/Bin/Res/Icon/SaveJobsCur.png b/Bin/Res/Icon/SaveJobsCur.png new file mode 100644 index 0000000..21faf4d Binary files /dev/null and b/Bin/Res/Icon/SaveJobsCur.png differ diff --git a/Bin/Res/Icon/SaveProj.png b/Bin/Res/Icon/SaveProj.png new file mode 100644 index 0000000..f5f41d2 Binary files /dev/null and b/Bin/Res/Icon/SaveProj.png differ diff --git a/Bin/Res/Icon/SavePvt.png b/Bin/Res/Icon/SavePvt.png new file mode 100644 index 0000000..21faf4d Binary files /dev/null and b/Bin/Res/Icon/SavePvt.png differ diff --git a/Bin/Res/Icon/SaveTemplate.png b/Bin/Res/Icon/SaveTemplate.png new file mode 100644 index 0000000..b13494d Binary files /dev/null and b/Bin/Res/Icon/SaveTemplate.png differ diff --git a/Bin/Res/Icon/Saveas.png b/Bin/Res/Icon/Saveas.png new file mode 100644 index 0000000..8af1967 Binary files /dev/null and b/Bin/Res/Icon/Saveas.png differ diff --git a/Bin/Res/Icon/Search.png b/Bin/Res/Icon/Search.png new file mode 100644 index 0000000..2218f66 Binary files /dev/null and b/Bin/Res/Icon/Search.png differ diff --git a/Bin/Res/Icon/ShowModel.png b/Bin/Res/Icon/ShowModel.png new file mode 100644 index 0000000..07a8467 Binary files /dev/null and b/Bin/Res/Icon/ShowModel.png differ diff --git a/Bin/Res/Icon/ShowModelCharts.png b/Bin/Res/Icon/ShowModelCharts.png new file mode 100644 index 0000000..9c2257a Binary files /dev/null and b/Bin/Res/Icon/ShowModelCharts.png differ diff --git a/Bin/Res/Icon/ShowModelSketch.png b/Bin/Res/Icon/ShowModelSketch.png new file mode 100644 index 0000000..0b32a67 Binary files /dev/null and b/Bin/Res/Icon/ShowModelSketch.png differ diff --git a/Bin/Res/Icon/ShowValue.png b/Bin/Res/Icon/ShowValue.png new file mode 100644 index 0000000..c3e9b89 Binary files /dev/null and b/Bin/Res/Icon/ShowValue.png differ diff --git a/Bin/Res/Icon/SphericalFlow.png b/Bin/Res/Icon/SphericalFlow.png new file mode 100644 index 0000000..d2d09ff Binary files /dev/null and b/Bin/Res/Icon/SphericalFlow.png differ diff --git a/Bin/Res/Icon/StackedMdi.png b/Bin/Res/Icon/StackedMdi.png new file mode 100644 index 0000000..fafb7e1 Binary files /dev/null and b/Bin/Res/Icon/StackedMdi.png differ diff --git a/Bin/Res/Icon/StackedProject.png b/Bin/Res/Icon/StackedProject.png new file mode 100644 index 0000000..8479f49 Binary files /dev/null and b/Bin/Res/Icon/StackedProject.png differ diff --git a/Bin/Res/Icon/StepDown.png b/Bin/Res/Icon/StepDown.png new file mode 100644 index 0000000..21faf4d Binary files /dev/null and b/Bin/Res/Icon/StepDown.png differ diff --git a/Bin/Res/Icon/StepUp.png b/Bin/Res/Icon/StepUp.png new file mode 100644 index 0000000..2970324 Binary files /dev/null and b/Bin/Res/Icon/StepUp.png differ diff --git a/Bin/Res/Icon/SubMatch.png b/Bin/Res/Icon/SubMatch.png new file mode 100644 index 0000000..c060903 Binary files /dev/null and b/Bin/Res/Icon/SubMatch.png differ diff --git a/Bin/Res/Icon/SumPara.png b/Bin/Res/Icon/SumPara.png new file mode 100644 index 0000000..76e8eac Binary files /dev/null and b/Bin/Res/Icon/SumPara.png differ diff --git a/Bin/Res/Icon/SysTools.png b/Bin/Res/Icon/SysTools.png new file mode 100644 index 0000000..a4509ac Binary files /dev/null and b/Bin/Res/Icon/SysTools.png differ diff --git a/Bin/Res/Icon/TestDesign.png b/Bin/Res/Icon/TestDesign.png new file mode 100644 index 0000000..2154d06 Binary files /dev/null and b/Bin/Res/Icon/TestDesign.png differ diff --git a/Bin/Res/Icon/Time.png b/Bin/Res/Icon/Time.png new file mode 100644 index 0000000..b53ed14 Binary files /dev/null and b/Bin/Res/Icon/Time.png differ diff --git a/Bin/Res/Icon/Titlebar_Close.png b/Bin/Res/Icon/Titlebar_Close.png new file mode 100644 index 0000000..37a8aff Binary files /dev/null and b/Bin/Res/Icon/Titlebar_Close.png differ diff --git a/Bin/Res/Icon/Titlebar_Max.png b/Bin/Res/Icon/Titlebar_Max.png new file mode 100644 index 0000000..95bff70 Binary files /dev/null and b/Bin/Res/Icon/Titlebar_Max.png differ diff --git a/Bin/Res/Icon/Titlebar_Min.png b/Bin/Res/Icon/Titlebar_Min.png new file mode 100644 index 0000000..070f5c2 Binary files /dev/null and b/Bin/Res/Icon/Titlebar_Min.png differ diff --git a/Bin/Res/Icon/Titlebar_Normal.png b/Bin/Res/Icon/Titlebar_Normal.png new file mode 100644 index 0000000..bf40b7a Binary files /dev/null and b/Bin/Res/Icon/Titlebar_Normal.png differ diff --git a/Bin/Res/Icon/TotalSeg.png b/Bin/Res/Icon/TotalSeg.png new file mode 100644 index 0000000..cb6a2fa Binary files /dev/null and b/Bin/Res/Icon/TotalSeg.png differ diff --git a/Bin/Res/Icon/TreeCollapse.png b/Bin/Res/Icon/TreeCollapse.png new file mode 100644 index 0000000..b476417 Binary files /dev/null and b/Bin/Res/Icon/TreeCollapse.png differ diff --git a/Bin/Res/Icon/TreeExpand.png b/Bin/Res/Icon/TreeExpand.png new file mode 100644 index 0000000..fd3e6af Binary files /dev/null and b/Bin/Res/Icon/TreeExpand.png differ diff --git a/Bin/Res/Icon/TreeTabMain.png b/Bin/Res/Icon/TreeTabMain.png new file mode 100644 index 0000000..afa06f2 Binary files /dev/null and b/Bin/Res/Icon/TreeTabMain.png differ diff --git a/Bin/Res/Icon/TreeTabOther.png b/Bin/Res/Icon/TreeTabOther.png new file mode 100644 index 0000000..7e0b070 Binary files /dev/null and b/Bin/Res/Icon/TreeTabOther.png differ diff --git a/Bin/Res/Icon/TyCurveMatch.png b/Bin/Res/Icon/TyCurveMatch.png new file mode 100644 index 0000000..3120e42 Binary files /dev/null and b/Bin/Res/Icon/TyCurveMatch.png differ diff --git a/Bin/Res/Icon/UIConfig.png b/Bin/Res/Icon/UIConfig.png new file mode 100644 index 0000000..ff4939f Binary files /dev/null and b/Bin/Res/Icon/UIConfig.png differ diff --git a/Bin/Res/Icon/URRS/BaseInfo.png b/Bin/Res/Icon/URRS/BaseInfo.png new file mode 100644 index 0000000..a5c228b Binary files /dev/null and b/Bin/Res/Icon/URRS/BaseInfo.png differ diff --git a/Bin/Res/Icon/URRS/NewGroup.png b/Bin/Res/Icon/URRS/NewGroup.png new file mode 100644 index 0000000..3579108 Binary files /dev/null and b/Bin/Res/Icon/URRS/NewGroup.png differ diff --git a/Bin/Res/Icon/URRS/NewUser.png b/Bin/Res/Icon/URRS/NewUser.png new file mode 100644 index 0000000..65ffa6b Binary files /dev/null and b/Bin/Res/Icon/URRS/NewUser.png differ diff --git a/Bin/Res/Icon/URRS/URRS.png b/Bin/Res/Icon/URRS/URRS.png new file mode 100644 index 0000000..46cc8ac Binary files /dev/null and b/Bin/Res/Icon/URRS/URRS.png differ diff --git a/Bin/Res/Icon/URRS/UrrsClose.png b/Bin/Res/Icon/URRS/UrrsClose.png new file mode 100644 index 0000000..b9fcd70 Binary files /dev/null and b/Bin/Res/Icon/URRS/UrrsClose.png differ diff --git a/Bin/Res/Icon/URRS/UrrsDel.png b/Bin/Res/Icon/URRS/UrrsDel.png new file mode 100644 index 0000000..9cd4018 Binary files /dev/null and b/Bin/Res/Icon/URRS/UrrsDel.png differ diff --git a/Bin/Res/Icon/URRS/UrrsHelp.png b/Bin/Res/Icon/URRS/UrrsHelp.png new file mode 100644 index 0000000..d847b50 Binary files /dev/null and b/Bin/Res/Icon/URRS/UrrsHelp.png differ diff --git a/Bin/Res/Icon/URRS/UrrsLogs.png b/Bin/Res/Icon/URRS/UrrsLogs.png new file mode 100644 index 0000000..99ad805 Binary files /dev/null and b/Bin/Res/Icon/URRS/UrrsLogs.png differ diff --git a/Bin/Res/Icon/URRS/UrrsRefresh.png b/Bin/Res/Icon/URRS/UrrsRefresh.png new file mode 100644 index 0000000..4c972bb Binary files /dev/null and b/Bin/Res/Icon/URRS/UrrsRefresh.png differ diff --git a/Bin/Res/Icon/URRS/UrrsSave.png b/Bin/Res/Icon/URRS/UrrsSave.png new file mode 100644 index 0000000..5ebea88 Binary files /dev/null and b/Bin/Res/Icon/URRS/UrrsSave.png differ diff --git a/Bin/Res/Icon/URRS/UrrsTable.png b/Bin/Res/Icon/URRS/UrrsTable.png new file mode 100644 index 0000000..e80e6b4 Binary files /dev/null and b/Bin/Res/Icon/URRS/UrrsTable.png differ diff --git a/Bin/Res/Icon/Undo.png b/Bin/Res/Icon/Undo.png new file mode 100644 index 0000000..9423e91 Binary files /dev/null and b/Bin/Res/Icon/Undo.png differ diff --git a/Bin/Res/Icon/UnitSlope.png b/Bin/Res/Icon/UnitSlope.png new file mode 100644 index 0000000..fbd22c6 Binary files /dev/null and b/Bin/Res/Icon/UnitSlope.png differ diff --git a/Bin/Res/Icon/Units.png b/Bin/Res/Icon/Units.png new file mode 100644 index 0000000..8af28d0 Binary files /dev/null and b/Bin/Res/Icon/Units.png differ diff --git a/Bin/Res/Icon/Up.png b/Bin/Res/Icon/Up.png new file mode 100644 index 0000000..ac9df28 Binary files /dev/null and b/Bin/Res/Icon/Up.png differ diff --git a/Bin/Res/Icon/UpdateLists.ico b/Bin/Res/Icon/UpdateLists.ico new file mode 100644 index 0000000..fafec66 Binary files /dev/null and b/Bin/Res/Icon/UpdateLists.ico differ diff --git a/Bin/Res/Icon/UserManul.png b/Bin/Res/Icon/UserManul.png new file mode 100644 index 0000000..ba6f263 Binary files /dev/null and b/Bin/Res/Icon/UserManul.png differ diff --git a/Bin/Res/Icon/VisibleModels.png b/Bin/Res/Icon/VisibleModels.png new file mode 100644 index 0000000..6b11386 Binary files /dev/null and b/Bin/Res/Icon/VisibleModels.png differ diff --git a/Bin/Res/Icon/VisibleParameters.png b/Bin/Res/Icon/VisibleParameters.png new file mode 100644 index 0000000..b6fe643 Binary files /dev/null and b/Bin/Res/Icon/VisibleParameters.png differ diff --git a/Bin/Res/Icon/WTAI.png b/Bin/Res/Icon/WTAI.png new file mode 100644 index 0000000..ef7e599 Binary files /dev/null and b/Bin/Res/Icon/WTAI.png differ diff --git a/Bin/Res/Icon/WTAIProj - 副本.png b/Bin/Res/Icon/WTAIProj - 副本.png new file mode 100644 index 0000000..c85c12e Binary files /dev/null and b/Bin/Res/Icon/WTAIProj - 副本.png differ diff --git a/Bin/Res/Icon/WTAIProj.png b/Bin/Res/Icon/WTAIProj.png new file mode 100644 index 0000000..ac19f40 Binary files /dev/null and b/Bin/Res/Icon/WTAIProj.png differ diff --git a/Bin/Res/Icon/WTAIProj_Sel.png b/Bin/Res/Icon/WTAIProj_Sel.png new file mode 100644 index 0000000..274662c Binary files /dev/null and b/Bin/Res/Icon/WTAIProj_Sel.png differ diff --git a/Bin/Res/Icon/WaterWell.png b/Bin/Res/Icon/WaterWell.png new file mode 100644 index 0000000..59094bc Binary files /dev/null and b/Bin/Res/Icon/WaterWell.png differ diff --git a/Bin/Res/Icon/WellNew.png b/Bin/Res/Icon/WellNew.png new file mode 100644 index 0000000..98e0daf Binary files /dev/null and b/Bin/Res/Icon/WellNew.png differ diff --git a/Bin/Res/Icon/WellOil.png b/Bin/Res/Icon/WellOil.png new file mode 100644 index 0000000..df8375d Binary files /dev/null and b/Bin/Res/Icon/WellOil.png differ diff --git a/Bin/Res/Icon/WindowLayoutC.png b/Bin/Res/Icon/WindowLayoutC.png new file mode 100644 index 0000000..85de670 Binary files /dev/null and b/Bin/Res/Icon/WindowLayoutC.png differ diff --git a/Bin/Res/Icon/WindowLayoutH.png b/Bin/Res/Icon/WindowLayoutH.png new file mode 100644 index 0000000..a4e6a23 Binary files /dev/null and b/Bin/Res/Icon/WindowLayoutH.png differ diff --git a/Bin/Res/Icon/WindowLayoutT.png b/Bin/Res/Icon/WindowLayoutT.png new file mode 100644 index 0000000..c0bb1ba Binary files /dev/null and b/Bin/Res/Icon/WindowLayoutT.png differ diff --git a/Bin/Res/Icon/WindowLayoutV.png b/Bin/Res/Icon/WindowLayoutV.png new file mode 100644 index 0000000..bb9156f Binary files /dev/null and b/Bin/Res/Icon/WindowLayoutV.png differ diff --git a/Bin/Res/Icon/Word16.png b/Bin/Res/Icon/Word16.png new file mode 100644 index 0000000..4d733dd Binary files /dev/null and b/Bin/Res/Icon/Word16.png differ diff --git a/Bin/Res/Icon/Word24.png b/Bin/Res/Icon/Word24.png new file mode 100644 index 0000000..78e6bd1 Binary files /dev/null and b/Bin/Res/Icon/Word24.png differ diff --git a/Bin/Res/Icon/ZoomIn.png b/Bin/Res/Icon/ZoomIn.png new file mode 100644 index 0000000..a46dcc8 Binary files /dev/null and b/Bin/Res/Icon/ZoomIn.png differ diff --git a/Bin/Res/Icon/ZoomInH.png b/Bin/Res/Icon/ZoomInH.png new file mode 100644 index 0000000..9d6d40c Binary files /dev/null and b/Bin/Res/Icon/ZoomInH.png differ diff --git a/Bin/Res/Icon/ZoomInV.png b/Bin/Res/Icon/ZoomInV.png new file mode 100644 index 0000000..db672f7 Binary files /dev/null and b/Bin/Res/Icon/ZoomInV.png differ diff --git a/Bin/Res/Icon/ZoomOut.png b/Bin/Res/Icon/ZoomOut.png new file mode 100644 index 0000000..53bf6ea Binary files /dev/null and b/Bin/Res/Icon/ZoomOut.png differ diff --git a/Bin/Res/Icon/ZoomRectIn.png b/Bin/Res/Icon/ZoomRectIn.png new file mode 100644 index 0000000..a6118e5 Binary files /dev/null and b/Bin/Res/Icon/ZoomRectIn.png differ diff --git a/Bin/Res/Icon/ZoomReset.png b/Bin/Res/Icon/ZoomReset.png new file mode 100644 index 0000000..f928b76 Binary files /dev/null and b/Bin/Res/Icon/ZoomReset.png differ diff --git a/Bin/Res/Icon/ZoomSelfAdaptation.png b/Bin/Res/Icon/ZoomSelfAdaptation.png new file mode 100644 index 0000000..0456b7d Binary files /dev/null and b/Bin/Res/Icon/ZoomSelfAdaptation.png differ diff --git a/Bin/Res/Icon/add_bottom.png b/Bin/Res/Icon/add_bottom.png new file mode 100644 index 0000000..11c409a Binary files /dev/null and b/Bin/Res/Icon/add_bottom.png differ diff --git a/Bin/Res/Icon/add_left.png b/Bin/Res/Icon/add_left.png new file mode 100644 index 0000000..82f383f Binary files /dev/null and b/Bin/Res/Icon/add_left.png differ diff --git a/Bin/Res/Icon/add_right.png b/Bin/Res/Icon/add_right.png new file mode 100644 index 0000000..5943567 Binary files /dev/null and b/Bin/Res/Icon/add_right.png differ diff --git a/Bin/Res/Icon/add_top.png b/Bin/Res/Icon/add_top.png new file mode 100644 index 0000000..ae2ec33 Binary files /dev/null and b/Bin/Res/Icon/add_top.png differ diff --git a/Bin/Res/Icon/checkBox_checked.png b/Bin/Res/Icon/checkBox_checked.png new file mode 100644 index 0000000..72f7d32 Binary files /dev/null and b/Bin/Res/Icon/checkBox_checked.png differ diff --git a/Bin/Res/Icon/checkBox_checked_4k.png b/Bin/Res/Icon/checkBox_checked_4k.png new file mode 100644 index 0000000..329a97f Binary files /dev/null and b/Bin/Res/Icon/checkBox_checked_4k.png differ diff --git a/Bin/Res/Icon/checkBox_unchecked.png b/Bin/Res/Icon/checkBox_unchecked.png new file mode 100644 index 0000000..a713742 Binary files /dev/null and b/Bin/Res/Icon/checkBox_unchecked.png differ diff --git a/Bin/Res/Icon/checkBox_unchecked_4k.png b/Bin/Res/Icon/checkBox_unchecked_4k.png new file mode 100644 index 0000000..5c01afa Binary files /dev/null and b/Bin/Res/Icon/checkBox_unchecked_4k.png differ diff --git a/Bin/Res/Icon/checkbox_checked_disable.png b/Bin/Res/Icon/checkbox_checked_disable.png new file mode 100644 index 0000000..bad88de Binary files /dev/null and b/Bin/Res/Icon/checkbox_checked_disable.png differ diff --git a/Bin/Res/Icon/checkbox_parcial.png b/Bin/Res/Icon/checkbox_parcial.png new file mode 100644 index 0000000..b4e5c90 Binary files /dev/null and b/Bin/Res/Icon/checkbox_parcial.png differ diff --git a/Bin/Res/Icon/checkbox_parcial_disable.png b/Bin/Res/Icon/checkbox_parcial_disable.png new file mode 100644 index 0000000..37cfe0b Binary files /dev/null and b/Bin/Res/Icon/checkbox_parcial_disable.png differ diff --git a/Bin/Res/Icon/checkbox_unchecked_disable.png b/Bin/Res/Icon/checkbox_unchecked_disable.png new file mode 100644 index 0000000..5223e84 Binary files /dev/null and b/Bin/Res/Icon/checkbox_unchecked_disable.png differ diff --git a/Bin/Res/Icon/dataPersons.png b/Bin/Res/Icon/dataPersons.png new file mode 100644 index 0000000..2760f29 Binary files /dev/null and b/Bin/Res/Icon/dataPersons.png differ diff --git a/Bin/Res/Icon/dataPersons.png.png b/Bin/Res/Icon/dataPersons.png.png new file mode 100644 index 0000000..45342f2 Binary files /dev/null and b/Bin/Res/Icon/dataPersons.png.png differ diff --git a/Bin/Res/Icon/downall.png b/Bin/Res/Icon/downall.png new file mode 100644 index 0000000..29d1d44 Binary files /dev/null and b/Bin/Res/Icon/downall.png differ diff --git a/Bin/Res/Icon/editProj.png b/Bin/Res/Icon/editProj.png new file mode 100644 index 0000000..210330c Binary files /dev/null and b/Bin/Res/Icon/editProj.png differ diff --git a/Bin/Res/Icon/iWTS.png b/Bin/Res/Icon/iWTS.png new file mode 100644 index 0000000..0dd1b9d Binary files /dev/null and b/Bin/Res/Icon/iWTS.png differ diff --git a/Bin/Res/Icon/item-normal.png b/Bin/Res/Icon/item-normal.png new file mode 100644 index 0000000..8c1443b Binary files /dev/null and b/Bin/Res/Icon/item-normal.png differ diff --git a/Bin/Res/Icon/item-selected.png b/Bin/Res/Icon/item-selected.png new file mode 100644 index 0000000..3b7687d Binary files /dev/null and b/Bin/Res/Icon/item-selected.png differ diff --git a/Bin/Res/Icon/jBase.png b/Bin/Res/Icon/jBase.png new file mode 100644 index 0000000..e553b6f Binary files /dev/null and b/Bin/Res/Icon/jBase.png differ diff --git a/Bin/Res/Icon/jData.png b/Bin/Res/Icon/jData.png new file mode 100644 index 0000000..e80e6b4 Binary files /dev/null and b/Bin/Res/Icon/jData.png differ diff --git a/Bin/Res/Icon/jReport.png b/Bin/Res/Icon/jReport.png new file mode 100644 index 0000000..978b0d8 Binary files /dev/null and b/Bin/Res/Icon/jReport.png differ diff --git a/Bin/Res/Icon/jResult.png b/Bin/Res/Icon/jResult.png new file mode 100644 index 0000000..4e7c7fd Binary files /dev/null and b/Bin/Res/Icon/jResult.png differ diff --git a/Bin/Res/Icon/lock_add.png b/Bin/Res/Icon/lock_add.png new file mode 100644 index 0000000..5085b63 Binary files /dev/null and b/Bin/Res/Icon/lock_add.png differ diff --git a/Bin/Res/Icon/lock_delete.png b/Bin/Res/Icon/lock_delete.png new file mode 100644 index 0000000..f009933 Binary files /dev/null and b/Bin/Res/Icon/lock_delete.png differ diff --git a/Bin/Res/Icon/match.png b/Bin/Res/Icon/match.png new file mode 100644 index 0000000..2577ff9 Binary files /dev/null and b/Bin/Res/Icon/match.png differ diff --git a/Bin/Res/Icon/memberS.png b/Bin/Res/Icon/memberS.png new file mode 100644 index 0000000..29589b8 Binary files /dev/null and b/Bin/Res/Icon/memberS.png differ diff --git a/Bin/Res/Icon/radio_checked.png b/Bin/Res/Icon/radio_checked.png new file mode 100644 index 0000000..ae531f7 Binary files /dev/null and b/Bin/Res/Icon/radio_checked.png differ diff --git a/Bin/Res/Icon/radio_checked_4k.png b/Bin/Res/Icon/radio_checked_4k.png new file mode 100644 index 0000000..fdac148 Binary files /dev/null and b/Bin/Res/Icon/radio_checked_4k.png differ diff --git a/Bin/Res/Icon/radio_unchecked.png b/Bin/Res/Icon/radio_unchecked.png new file mode 100644 index 0000000..495c1f2 Binary files /dev/null and b/Bin/Res/Icon/radio_unchecked.png differ diff --git a/Bin/Res/Icon/radio_unchecked_4k.png b/Bin/Res/Icon/radio_unchecked_4k.png new file mode 100644 index 0000000..3bbcf65 Binary files /dev/null and b/Bin/Res/Icon/radio_unchecked_4k.png differ diff --git a/Bin/Res/Icon/radiobutton_checked.png b/Bin/Res/Icon/radiobutton_checked.png new file mode 100644 index 0000000..f98e6c3 Binary files /dev/null and b/Bin/Res/Icon/radiobutton_checked.png differ diff --git a/Bin/Res/Icon/radiobutton_checked_disable.png b/Bin/Res/Icon/radiobutton_checked_disable.png new file mode 100644 index 0000000..dedc3b4 Binary files /dev/null and b/Bin/Res/Icon/radiobutton_checked_disable.png differ diff --git a/Bin/Res/Icon/radiobutton_unchecked.png b/Bin/Res/Icon/radiobutton_unchecked.png new file mode 100644 index 0000000..5369132 Binary files /dev/null and b/Bin/Res/Icon/radiobutton_unchecked.png differ diff --git a/Bin/Res/Icon/radiobutton_unchecked_disable.png b/Bin/Res/Icon/radiobutton_unchecked_disable.png new file mode 100644 index 0000000..67c61f2 Binary files /dev/null and b/Bin/Res/Icon/radiobutton_unchecked_disable.png differ diff --git a/Bin/Res/Icon/reportConfig.ico b/Bin/Res/Icon/reportConfig.ico new file mode 100644 index 0000000..c1a913f Binary files /dev/null and b/Bin/Res/Icon/reportConfig.ico differ diff --git a/Bin/Res/Icon/save.png b/Bin/Res/Icon/save.png new file mode 100644 index 0000000..f7ad391 Binary files /dev/null and b/Bin/Res/Icon/save.png differ diff --git a/Bin/Res/Icon/slider-handle.png b/Bin/Res/Icon/slider-handle.png new file mode 100644 index 0000000..22e008e Binary files /dev/null and b/Bin/Res/Icon/slider-handle.png differ diff --git a/Bin/Res/Icon/slider-handle_4k.png b/Bin/Res/Icon/slider-handle_4k.png new file mode 100644 index 0000000..4062b96 Binary files /dev/null and b/Bin/Res/Icon/slider-handle_4k.png differ diff --git a/Bin/Res/Icon/tAllData.png b/Bin/Res/Icon/tAllData.png new file mode 100644 index 0000000..c7445ba Binary files /dev/null and b/Bin/Res/Icon/tAllData.png differ diff --git a/Bin/Res/Icon/tBase.png b/Bin/Res/Icon/tBase.png new file mode 100644 index 0000000..59094bc Binary files /dev/null and b/Bin/Res/Icon/tBase.png differ diff --git a/Bin/Res/Icon/tFluid.png b/Bin/Res/Icon/tFluid.png new file mode 100644 index 0000000..bf6b2fc Binary files /dev/null and b/Bin/Res/Icon/tFluid.png differ diff --git a/Bin/Res/Icon/tJob.png b/Bin/Res/Icon/tJob.png new file mode 100644 index 0000000..88a4faf Binary files /dev/null and b/Bin/Res/Icon/tJob.png differ diff --git a/Bin/Res/Icon/tLayer.png b/Bin/Res/Icon/tLayer.png new file mode 100644 index 0000000..b625981 Binary files /dev/null and b/Bin/Res/Icon/tLayer.png differ diff --git a/Bin/Res/Icon/tPressure.png b/Bin/Res/Icon/tPressure.png new file mode 100644 index 0000000..5c9a483 Binary files /dev/null and b/Bin/Res/Icon/tPressure.png differ diff --git a/Bin/Res/Icon/tRes.png b/Bin/Res/Icon/tRes.png new file mode 100644 index 0000000..fafb7e1 Binary files /dev/null and b/Bin/Res/Icon/tRes.png differ diff --git a/Bin/Res/Icon/tWell.png b/Bin/Res/Icon/tWell.png new file mode 100644 index 0000000..59094bc Binary files /dev/null and b/Bin/Res/Icon/tWell.png differ diff --git a/Bin/Res/Icon/tWellData.png b/Bin/Res/Icon/tWellData.png new file mode 100644 index 0000000..459b30d Binary files /dev/null and b/Bin/Res/Icon/tWellData.png differ diff --git a/Bin/Res/Icon/tree-collapse.png b/Bin/Res/Icon/tree-collapse.png new file mode 100644 index 0000000..df4d1ec Binary files /dev/null and b/Bin/Res/Icon/tree-collapse.png differ diff --git a/Bin/Res/Icon/tree-expand.png b/Bin/Res/Icon/tree-expand.png new file mode 100644 index 0000000..13f8ba8 Binary files /dev/null and b/Bin/Res/Icon/tree-expand.png differ diff --git a/Bin/Res/Icon/upall.png b/Bin/Res/Icon/upall.png new file mode 100644 index 0000000..e437312 Binary files /dev/null and b/Bin/Res/Icon/upall.png differ diff --git a/Bin/Res/Image/CrossCursor.png b/Bin/Res/Image/CrossCursor.png new file mode 100644 index 0000000..26ef318 Binary files /dev/null and b/Bin/Res/Image/CrossCursor.png differ diff --git a/Bin/Res/Image1/CrossCursor.png b/Bin/Res/Image1/CrossCursor.png new file mode 100644 index 0000000..26ef318 Binary files /dev/null and b/Bin/Res/Image1/CrossCursor.png differ diff --git a/Bin/Res/Image1/Models/Theory_Curve1.png b/Bin/Res/Image1/Models/Theory_Curve1.png new file mode 100644 index 0000000..a3598c6 Binary files /dev/null and b/Bin/Res/Image1/Models/Theory_Curve1.png differ diff --git a/Bin/Res/Image1/Models/Theory_Curve2.png b/Bin/Res/Image1/Models/Theory_Curve2.png new file mode 100644 index 0000000..2b53a96 Binary files /dev/null and b/Bin/Res/Image1/Models/Theory_Curve2.png differ diff --git a/Bin/Res/Image1/Models/WBS_None.png b/Bin/Res/Image1/Models/WBS_None.png new file mode 100644 index 0000000..3cb1bb1 Binary files /dev/null and b/Bin/Res/Image1/Models/WBS_None.png differ diff --git a/Bin/Res/Image1/Models/WBS_TSET.png b/Bin/Res/Image1/Models/WBS_TSET.png new file mode 100644 index 0000000..6faff67 Binary files /dev/null and b/Bin/Res/Image1/Models/WBS_TSET.png differ diff --git a/Bin/Res/Image1/Urrs_Header.png b/Bin/Res/Image1/Urrs_Header.png new file mode 100644 index 0000000..55ee550 Binary files /dev/null and b/Bin/Res/Image1/Urrs_Header.png differ diff --git a/Bin/Res/Image1/Urrs_Title.png b/Bin/Res/Image1/Urrs_Title.png new file mode 100644 index 0000000..7226f86 Binary files /dev/null and b/Bin/Res/Image1/Urrs_Title.png differ diff --git a/Bin/Res/Image1/WTAI_About.png b/Bin/Res/Image1/WTAI_About.png new file mode 100644 index 0000000..ba200a6 Binary files /dev/null and b/Bin/Res/Image1/WTAI_About.png differ diff --git a/Bin/Res/Image1/WTAI_Background.png b/Bin/Res/Image1/WTAI_Background.png new file mode 100644 index 0000000..c115d6f Binary files /dev/null and b/Bin/Res/Image1/WTAI_Background.png differ diff --git a/Bin/Res/Image1/WTAI_DataGrid.png b/Bin/Res/Image1/WTAI_DataGrid.png new file mode 100644 index 0000000..7332e39 Binary files /dev/null and b/Bin/Res/Image1/WTAI_DataGrid.png differ diff --git a/Bin/Res/Image1/WTAI_Header.png b/Bin/Res/Image1/WTAI_Header.png new file mode 100644 index 0000000..d61bd33 Binary files /dev/null and b/Bin/Res/Image1/WTAI_Header.png differ diff --git a/Bin/Res/Image1/WTAI_Left.png b/Bin/Res/Image1/WTAI_Left.png new file mode 100644 index 0000000..7332e39 Binary files /dev/null and b/Bin/Res/Image1/WTAI_Left.png differ diff --git a/Bin/Res/Image1/WTAI_LeftOption.png b/Bin/Res/Image1/WTAI_LeftOption.png new file mode 100644 index 0000000..d874e5e Binary files /dev/null and b/Bin/Res/Image1/WTAI_LeftOption.png differ diff --git a/Bin/Res/Image1/WTAI_Login.png b/Bin/Res/Image1/WTAI_Login.png new file mode 100644 index 0000000..b3a5e64 Binary files /dev/null and b/Bin/Res/Image1/WTAI_Login.png differ diff --git a/Bin/Res/Image1/WTAI_Logs.png b/Bin/Res/Image1/WTAI_Logs.png new file mode 100644 index 0000000..c115d6f Binary files /dev/null and b/Bin/Res/Image1/WTAI_Logs.png differ diff --git a/Bin/Res/Image1/WTAI_Main.png b/Bin/Res/Image1/WTAI_Main.png new file mode 100644 index 0000000..c115d6f Binary files /dev/null and b/Bin/Res/Image1/WTAI_Main.png differ diff --git a/Bin/Res/Image1/WTAI_Pty.png b/Bin/Res/Image1/WTAI_Pty.png new file mode 100644 index 0000000..c115d6f Binary files /dev/null and b/Bin/Res/Image1/WTAI_Pty.png differ diff --git a/Bin/Res/Splash/MPA.gif b/Bin/Res/Splash/MPA.gif new file mode 100644 index 0000000..d11a8f2 Binary files /dev/null and b/Bin/Res/Splash/MPA.gif differ diff --git a/Bin/Res/Splash/MPA.swf b/Bin/Res/Splash/MPA.swf new file mode 100644 index 0000000..33fc54f Binary files /dev/null and b/Bin/Res/Splash/MPA.swf differ diff --git a/Bin/Res/Splash/MPA_Flash_1.png b/Bin/Res/Splash/MPA_Flash_1.png new file mode 100644 index 0000000..c115d6f Binary files /dev/null and b/Bin/Res/Splash/MPA_Flash_1.png differ diff --git a/Bin/Res/Splash/MPA_Flash_2.png b/Bin/Res/Splash/MPA_Flash_2.png new file mode 100644 index 0000000..6faff67 Binary files /dev/null and b/Bin/Res/Splash/MPA_Flash_2.png differ diff --git a/Bin/Res/Splash/MPA_Flash_3.png b/Bin/Res/Splash/MPA_Flash_3.png new file mode 100644 index 0000000..10630f4 Binary files /dev/null and b/Bin/Res/Splash/MPA_Flash_3.png differ diff --git a/Bin/Res/Splash/MPA_Splash_Basic.png b/Bin/Res/Splash/MPA_Splash_Basic.png new file mode 100644 index 0000000..10630f4 Binary files /dev/null and b/Bin/Res/Splash/MPA_Splash_Basic.png differ diff --git a/Bin/Res/Splash/readme.txt b/Bin/Res/Splash/readme.txt new file mode 100644 index 0000000..7c9e7f8 --- /dev/null +++ b/Bin/Res/Splash/readme.txt @@ -0,0 +1,11 @@ +˵ + +· $\Bin\Res\Splash + +ļ˵ + +1MPA.gif ļ̶ GIFʽ +2MPA.swf ļ̶ Flash/Swfʽ +3MPA_Flash_1.pngMPA_Flash_2.pngȵͼƬѭģʽ + ļƲ̶̶ʽΪ*.pngʽ˳Ϊ ļ ˳ +4MPA_Splash_Basic.png ļ̶ QtԴQSplashScreenӽ ģʽ \ No newline at end of file diff --git a/Bin/TestOfWTAI/TestDemo3/4.dnd b/Bin/TestOfWTAI/TestDemo3/4.dnd new file mode 100644 index 0000000..c98eabb Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/4.dnd differ diff --git a/Bin/TestOfWTAI/TestDemo3/TestDemo3 - 副本.db b/Bin/TestOfWTAI/TestDemo3/TestDemo3 - 副本.db new file mode 100644 index 0000000..de89258 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/TestDemo3 - 副本.db differ diff --git a/Bin/TestOfWTAI/TestDemo3/TestDemo3.db b/Bin/TestOfWTAI/TestDemo3/TestDemo3.db new file mode 100644 index 0000000..6e49f62 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/TestDemo3.db differ diff --git a/Bin/TestOfWTAI/TestDemo3/TestDemo3.wtf b/Bin/TestOfWTAI/TestDemo3/TestDemo3.wtf new file mode 100644 index 0000000..00ed019 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/TestDemo3.wtf differ diff --git a/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfig.unt b/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfig.unt new file mode 100644 index 0000000..a46d162 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfig.unt differ diff --git a/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfig.xls b/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfig.xls new file mode 100644 index 0000000..797af7b Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfig.xls differ diff --git a/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfigDefault.unt b/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfigDefault.unt new file mode 100644 index 0000000..a46d162 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/Unit/UnitConfigDefault.unt differ diff --git a/Bin/TestOfWTAI/TestDemo3/Unit/UnitDataTemplate.xls b/Bin/TestOfWTAI/TestDemo3/Unit/UnitDataTemplate.xls new file mode 100644 index 0000000..f9b9a90 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/Unit/UnitDataTemplate.xls differ diff --git a/Bin/TestOfWTAI/TestDemo3/Unit/UnitDefault.dat b/Bin/TestOfWTAI/TestDemo3/Unit/UnitDefault.dat new file mode 100644 index 0000000..903a4ab --- /dev/null +++ b/Bin/TestOfWTAI/TestDemo3/Unit/UnitDefault.dat @@ -0,0 +1 @@ +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iY29tcHJlc3NpYmlsaXR5IiBOYW1lPSJjb21wcmVzc2liaWxpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSIxL01QYSIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9jbV4zIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibGIvZnReMyIgaz0iMC4wMTYwMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYi9nYWwoVVMpIiBrPSIwLjExOTgyNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYi9nYWwoVUspIiBrPSIwLjA5OTc2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImxiL2JibCIgaz0iMC4wMDI4NTMiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9jYyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnL2NmIiBrPSIzLjUzMTQ3ZS0wNSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnL2Z0XjMiIGs9IjMuNTMxNDdlLTA1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Imdlb3RoZXJtYWxncmFkaWVudCIgTmFtZT0iZ2VvdGhlcm1hbGdyYWRpZW50Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZGVnL20iIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9pbiIgaz0iMS44Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wOTkiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9taWxlIiBrPSIwLjAzNDQ4MjgiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRi9mdCIgaz0iMTgxLjgxOCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJsZW5ndGgiIE5hbWU9Imxlbmd0aCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImluIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im0iIGs9IjM5LjM3MDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY20iIGs9IjAuMzkzNzAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1tIiBrPSIwLjAzOTM3MDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia20iIGs9IjM5MzcwLjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQiIGs9IjEyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1pIiBrPSI2MzM0Ni41Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InlkIiBrPSIzNS45ODczIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im5taWxlIiBrPSI3MjkxMy40Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im5tIiBrPSIzLjkzNzAxZS0wOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJyYWQiIGs9IjcuODI4MzEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IiUiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icHUiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL21eMyIgaz0iMTAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InYvdiIgaz0iMTAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImZyYWN0aW9uIiBrPSIxMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVybWVhYmlsaXR5IiBOYW1lPSJwZXJtZWFiaWxpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJEIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1EIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjbV4tMiIgaz0iOS44MWUrMDciLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iVyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2dmLm0vcyIgaz0iOS44MDY2NSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjYWwvcyIgaz0iNC4xODY4Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhwIiBrPSI3MzUuNDk5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlBhIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Ik1QYSIgaz0iMWUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iS1BhIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJhciIgaz0iMTA1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlRvcnIiIGs9IjEzMy4zMjIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZHluL2NtXjIiIGs9IjAuMSIvPg0KICAgICAgICAgICAgPFVuaXQgVW5pdD0ibW1IZyIgaz0iMTMzLjMyMiIvPg0KICAgICAgICAgICAgPFVuaXQgVW5pdD0ibW1IMk8iIGs9IjkuODA2NjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icHNpIiBrPSI2ODk2LjU1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImF0bSIgaz0iMTAxMzI1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZi9jbV4yIiBrPSI5ODA3OS43Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByb2R1Y3Rpb24iIE5hbWU9InByb2R1Y3Rpb24iPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtXjMvZCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0Y2YvZCIgaz0iMC4wMjgzMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtXjMvYSIgaz0iMC4wMDI3NDAwNyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJiY2YvZCIgaz0iMC4wMjgzMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtbWNmL2QiIGs9IjI4MzIwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1jZi9kIiBrPSIyOC4zMiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJzdGIvZCIgaz0iMC4xNTkiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icHJvZGdhcyIgTmFtZT0icHJvZGdhcyI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9kIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IjEwXjQqbV4zL2QiIGs9IjEwMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InRjZi9kIiBrPSIwLjAyODMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9hIiBrPSIwLjAwMjc0MDA3Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJjZi9kIiBrPSIwLjAyODMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1tY2YvZCIgaz0iMjgzMjAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWNmL2QiIGs9IjI4LjMyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InN0Yi9kIiBrPSIwLjE1OSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJwcm9kb2lsIiBOYW1lPSJwcm9kb2lsIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2QiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idGNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2EiIGs9IjAuMDAyNzQwMDciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZi9kIiBrPSIyODMyMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtY2YvZCIgaz0iMjguMzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RiL2QiIGs9IjAuMTU5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByb2R3YXRlciIgTmFtZT0icHJvZHdhdGVyIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2QiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idGNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4zL2EiIGs9IjAuMDAyNzQwMDciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmNmL2QiIGs9IjAuMDI4MzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZi9kIiBrPSIyODMyMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtY2YvZCIgaz0iMjguMzIiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RiL2QiIGs9IjAuMTU5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnQVBJIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkFQSSIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ1cy9tIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InVzL2Z0IiBrPSIzLjI4MDg0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNxdWFyZSIgTmFtZT0ic3F1YXJlIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4yIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImttXjIiIGs9IjFlKzA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImluXjIiIGs9IjAuMDAwNjQ1MiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjbV4yIiBrPSIwLjAwMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYWNyZSIgaz0iNDA0NyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtaWxlXjIiIGs9IjIuNTg4ODhlKzA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImZ0XjIiIGs9IjAuMDkzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhhIiBrPSIxMDAwMCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ5ZF4yIiBrPSIwLjgzNjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icmFkMiIgaz0iMC4wMzk1MzY5Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InN0cmVuZ3RoIiBOYW1lPSJzdHJlbmd0aCI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Ik4iIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibGJmIiBrPSI0LjQ0NDQ0Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZiIgaz0iOS44MSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJkeW4iIGs9IjFlLTA1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlIiBOYW1lPSJ0ZW1wZXJhdHVyZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImRlZyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJLIiBrPSIxIiBiPSIyNzMuMTUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iRiIgaz0iMS44Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IuKEgyIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0aGVtYWwgcG93ZXIiIE5hbWU9InRoZW1hbCBwb3dlciI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkoiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY2FsIiBrPSI0LjE4NjgiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2dmLm0iIGs9IjkuODA2NjUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iQnR1IiBrPSIxMDU1LjA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtXLmgiIGs9IjMuNmUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQubGJmIiBrPSIxLjM1NTgyIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImhwLmgoVVMpIiBrPSIyLjY0Nzc5ZSswNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJIcC5oKFVLKSIgaz0iMi42ODQ1MmUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ia2cubSIgaz0iOS44MDAwOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJrY2FsIiBrPSI0MTg1Ljg1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IkJUVSIgaz0iMTA1NC44NSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0aW1lIiBOYW1lPSJ0aW1lIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idXMiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibXMiIGs9IjEwMDAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0icyIgaz0iMWUrMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWluIiBrPSI2ZSswNyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJociIgaz0iMy42ZSswOSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJEYXkiIGs9IjguNjRlKzEwIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im0vcyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtaWxlL2giIGs9IjAuNDQ3MDQiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnQvcyIgaz0iMC4zMDQ4Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtUGHCt3MiIGs9IjAuMDAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IlAiIGs9IjAuMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJjUCIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iYmYucy9mdF4yIiBrPSI0Ny44ODAzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImtnZi5zL21eMyIgaz0iOS44MDY2NSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHkgYWN0IiBOYW1lPSJ2aXNjb3NpdHkgYWN0Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibV4yL3MiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY21eMi9zIiBrPSIwLjAwMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnReMi9zIiBrPSIwLjA5MjkwMyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJTdCIgaz0iMC4wMDAxIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImNTdCIgaz0iMWUtMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1eMi9zIiBrPSIxZS0wNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2b2x0YWdlIiBOYW1lPSJ2b2x0YWdlIj4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibXYiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0idiIgaz0iMTAwMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2b2x1bWUiIE5hbWU9InZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJtbCIgaz0iMWUtMDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iTCIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iaW5eMyIgaz0iMS42MzllLTA1Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImNtXjMiIGs9IjFlLTA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MyIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJnYWwoVVMpIiBrPSIwLjAwMzc4NSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJiYmwiIGs9IjAuMTU5Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImJjZiIgaz0iMi44MzE3ZSswNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0Y2YiIGs9IjIuODMxN2UrMTAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibW1jZiIgaz0iMjgzMTciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWNmIiBrPSIyOC4zMTciLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZnReMyIgaz0iMC4wMjgzIi8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImdpIiBrPSIwLjAwMDExOCIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iY2MiIGs9IjFlLTA2Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImFjcmUuZnQiIGs9IjEyMzQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0id2VpZ2h0IiBOYW1lPSJ3ZWlnaHQiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJrZyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJ0b24iIGs9IjEwMDAiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibHRvbiIgaz0iMTAxNiIvPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSJsYiIgaz0iMC40NTQiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ib3oiIGs9IjAuMDI4MzUiLz4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ic3RvbiIgaz0iOTA3Ii8+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9ImciIGs9IjAuMDAxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQoNCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJUb0RvMSIgTmFtZT0iVG9EbzEiPg0KICAgICAgICAgICAgPFVuaXQgUmVtYXJrPSIgIiBVbml0PSIxL21eMy9kIiBrPSIxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9IlRvRG8yIiBOYW1lPSJUb0RvMiI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9IsKwIiBrPSIxIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9IlRvRG8zIiBOYW1lPSJUb0RvMyI+DQogICAgICAgICAgICA8VW5pdCBSZW1hcms9IiAiIFVuaXQ9Im1eMy9NUGEiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzQiIE5hbWU9IlRvRG80Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibUQvKG1QYcK3cykiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzUiIE5hbWU9IlRvRG81Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iTVBhL20iIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzYiIE5hbWU9IlRvRG82Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibUTCt20iIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzciIE5hbWU9IlRvRG83Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0iZy9tb2wiIGs9IjEiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzgiIE5hbWU9IlRvRG84Ij4NCiAgICAgICAgICAgIDxVbml0IFJlbWFyaz0iICIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/TestOfWTAI/TestDemo3/W0001-Oil/W0001-Oil.pre b/Bin/TestOfWTAI/TestDemo3/W0001-Oil/W0001-Oil.pre new file mode 100644 index 0000000..b326061 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/W0001-Oil/W0001-Oil.pre differ diff --git a/Bin/TestOfWTAI/TestDemo3/W0001/W0001.db b/Bin/TestOfWTAI/TestDemo3/W0001/W0001.db new file mode 100644 index 0000000..c703116 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/W0001/W0001.db differ diff --git a/Bin/TestOfWTAI/TestDemo3/李南区块-2/李南区块-2.db b/Bin/TestOfWTAI/TestDemo3/李南区块-2/李南区块-2.db new file mode 100644 index 0000000..dbd76e3 Binary files /dev/null and b/Bin/TestOfWTAI/TestDemo3/李南区块-2/李南区块-2.db differ diff --git a/Bin/XmlFiles/BtnCmds.xml b/Bin/XmlFiles/BtnCmds.xml new file mode 100644 index 0000000..6cd1753 --- /dev/null +++ b/Bin/XmlFiles/BtnCmds.xml @@ -0,0 +1,286 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bin/XmlFiles/MenuDefines_Ribbon.xml b/Bin/XmlFiles/MenuDefines_Ribbon.xml new file mode 100644 index 0000000..e72d27b --- /dev/null +++ b/Bin/XmlFiles/MenuDefines_Ribbon.xml @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bin/XmlFiles/ModelParaDefinesLP.xml b/Bin/XmlFiles/ModelParaDefinesLP.xml new file mode 100644 index 0000000..b54b825 --- /dev/null +++ b/Bin/XmlFiles/ModelParaDefinesLP.xml @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bin/XmlFiles/NmXmlDemo.xml b/Bin/XmlFiles/NmXmlDemo.xml new file mode 100644 index 0000000..c7ecfeb --- /dev/null +++ b/Bin/XmlFiles/NmXmlDemo.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bin/XmlFiles/TableStructs.xml b/Bin/XmlFiles/TableStructs.xml new file mode 100644 index 0000000..33a5495 --- /dev/null +++ b/Bin/XmlFiles/TableStructs.xml @@ -0,0 +1,466 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bin/XmlFiles/UnitDefault.xml b/Bin/XmlFiles/UnitDefault.xml new file mode 100644 index 0000000..4e5b2ef --- /dev/null +++ b/Bin/XmlFiles/UnitDefault.xml @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Include/iAlg/iAlgBase/iAlgBase_global.h b/Include/iAlg/iAlgBase/iAlgBase_global.h new file mode 100644 index 0000000..7be0dd6 --- /dev/null +++ b/Include/iAlg/iAlgBase/iAlgBase_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#if defined(I_ALGBASE_LIBRARY) +# define I_ALGBASE_EXPORT Q_DECL_EXPORT +#else +# define I_ALGBASE_EXPORT Q_DECL_IMPORT +#endif + + + + diff --git a/Include/iAlg/iAlgBase/zxAlgThread.h b/Include/iAlg/iAlgBase/zxAlgThread.h new file mode 100644 index 0000000..28d10f6 --- /dev/null +++ b/Include/iAlg/iAlgBase/zxAlgThread.h @@ -0,0 +1,49 @@ + +#pragma once + +#include +#include + +#include "iAlgBase_global.h" +#include "Defines.h" + +// 线程的封装(算法模型父类) +class I_ALGBASE_EXPORT zxAlgThread : + public QThread +{ + Q_OBJECT + +public: + + zxAlgThread(); + + // 进程状态 + enum ThreadState + { + TS_Reset = 0, //重置 + TS_Finished, //结束 + + TS_Running, //运行中 + TS_Suspending, //挂起 + TS_Quiting, //结束中 + + TS_ToPause, //暂停,外界传入的状态 + TS_ToContinue, //继续 + TS_ToQuit, //终止 + + TS_Unknown + }; + + // 状态设置 + ThreadState getState(); + void setState(ThreadState o); + + // 状态监测 + bool checkPausing(); + bool checkQuiting(); + +private: + + ThreadState m_oTs; + QMutex m_oMutex; +}; diff --git a/Include/iAlg/iAlgEnc/iAlgEnc_global.h b/Include/iAlg/iAlgEnc/iAlgEnc_global.h new file mode 100644 index 0000000..3b7927f --- /dev/null +++ b/Include/iAlg/iAlgEnc/iAlgEnc_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#if defined(I_ALGENC_LIBRARY) +# define I_ALGENC_EXPORT Q_DECL_EXPORT +#else +# define I_ALGENC_EXPORT Q_DECL_IMPORT +#endif + + + + diff --git a/Include/iAlg/iAlgEnc/zxAes.h b/Include/iAlg/iAlgEnc/zxAes.h new file mode 100644 index 0000000..d015283 --- /dev/null +++ b/Include/iAlg/iAlgEnc/zxAes.h @@ -0,0 +1,66 @@ +#pragma once + +#include +#include +#include +#include + +#include "iAlgEnc_global.h" + +typedef unsigned long DWORD; +typedef unsigned char UCHAR,*PUCHAR; +typedef void *PVOID,*LPVOID; +typedef unsigned char byte; +typedef DWORD *PDWORD,*LPDWORD; + +// AES算法实现 +class I_ALGENC_EXPORT zxAes +{ + +public: + + zxAes(int nKeySize, unsigned char* pKeyBytes); + ~zxAes(); + + // 入口函数 + void enc(unsigned char* input, unsigned char* output); + void dec(unsigned char* input, unsigned char* output); + +private: + + void initParas(int nKeySize, unsigned char* pKeyBytes);//设置初始参数 + void addRoundKey(int round); //轮密钥加 + void replaceSubBytes(); //S盒字节代换 + void replaceInvSubBytes(); //逆S盒字节代换 + void shiftRows(); //行移位 + void shiftInvRows(); + void mixColumns(); //列混淆 + void mixInvColumns(); + + // 内部转换函数 + unsigned char _runMultiBy01(unsigned char b); + unsigned char _runMultiBy02(unsigned char b); + unsigned char _runMultiBy03(unsigned char b); + unsigned char _runMultiBy09(unsigned char b); + unsigned char _runMultiBy0b(unsigned char b); + unsigned char _runMultiBy0d(unsigned char b); + unsigned char _runMultiBy0e(unsigned char b); + + void enpandKey(); //密钥扩展 + unsigned char* replaceSubWord(unsigned char* word); //密钥代换 + unsigned char* shiftWord(unsigned char* word); //密钥移位 + +private: + + unsigned char m_arrStates[4][4];//状态缓存 + int m_nSizeBlock; //块大小(32-bits) + int m_nSizeKey; //秘钥大小 + int m_nSizeRound; //轮大小 + + // 内部局部变量 + unsigned char* m_pArrKeys; + unsigned char* m_pArrChars; + unsigned char* m_pArrSBox; + unsigned char* m_pArrISBox; + unsigned char* m_pArrRcon; +}; diff --git a/Include/iAlg/iAlgEnc/zxEncryptAES.h b/Include/iAlg/iAlgEnc/zxEncryptAES.h new file mode 100644 index 0000000..0fce4ca --- /dev/null +++ b/Include/iAlg/iAlgEnc/zxEncryptAES.h @@ -0,0 +1,32 @@ +#pragma once + +#include "zxAes.h" + +// AES算法外调函数类 +class I_ALGENC_EXPORT zxEncryptAES +{ + +public: + + zxEncryptAES(); + ~zxEncryptAES(); + + /// @brief 加密解密部分 + bool encryptFile(QString sFileSrc, QString sFileDest); + bool encryptFile(QString sFileSrc, QByteArray& ba); + bool decryptFile(QString sFileSrc, QString sFileDest); + bool decryptFile(QString sFileSrc, QByteArray& ba); + +private: + + // 内部实现函数 + void InitPrivateKey(DWORD nKeySize, UCHAR *pKeyBytes); //AES 密钥初始化 + DWORD OnAesEncrypt(LPVOID bufferIns,DWORD nLen, LPVOID bufferOuts); //AES 加密数据 + DWORD OnAesUncrypt(LPVOID bufferIns,DWORD nLen, LPVOID bufferOuts); //AES 解密数据 + bool encDecBa(QByteArray& baInput, QByteArray& baOutput, bool bEncMode); + bool saveBa2File(QByteArray& ba, QString sFileDest); + +private: + + zxAes* m_pAes; +}; diff --git a/Include/iAlg/iAlgEnc/zxHashMD5.h b/Include/iAlg/iAlgEnc/zxHashMD5.h new file mode 100644 index 0000000..d3913d8 --- /dev/null +++ b/Include/iAlg/iAlgEnc/zxHashMD5.h @@ -0,0 +1,16 @@ +#pragma once + +#include "zxAes.h" + +// Hash MD5 算法 +class I_ALGENC_EXPORT zxHashMD5 +{ +public: + + zxHashMD5(); + ~zxHashMD5(); + +public: + + static QString hashStr(const QString& s); +}; diff --git a/Include/iAlg/iAlgMath/iAlgMath_global.h b/Include/iAlg/iAlgMath/iAlgMath_global.h new file mode 100644 index 0000000..7f61b28 --- /dev/null +++ b/Include/iAlg/iAlgMath/iAlgMath_global.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +#if defined(I_ALGMATH_LIBRARY) +# define I_ALGMATH_EXPORT Q_DECL_EXPORT +#else +# define I_ALGMATH_EXPORT Q_DECL_IMPORT +#endif + diff --git a/Include/iAlg/iAlgMath/zxAlgMatrix.h b/Include/iAlg/iAlgMath/zxAlgMatrix.h new file mode 100644 index 0000000..929f611 --- /dev/null +++ b/Include/iAlg/iAlgMath/zxAlgMatrix.h @@ -0,0 +1,125 @@ +#pragma once + +#include "Defines.h" +#include "iAlgMath_global.h" + +class zxAlgMatrixCol; + +// 矩阵 +// 注:本矩阵类有些特殊,包括两个部分,由于时间限制,未做统一整合,后续再进行处理件 +// 1.处理解释中用的矩阵操作,以本类为载体,类缓存模式,并且引用 zxAlgMatrixCol,对应 zxAlgMatrix.cpp 文件 +// 2.拟合回归算法中用到的矩阵相关,大都是static函数,以VecDouble为载体,对应 zxAlgMatrixEx.cpp 文件 +class I_ALGMATH_EXPORT zxAlgMatrix +{ + +public: + + zxAlgMatrix(); + zxAlgMatrix(int rows, int cols, double val = 0.0); + virtual ~zxAlgMatrix(); + + ///////////////////////////////////////////////////////// + // 1.处理解释中用的矩阵操作,以本类为载体,类缓存模式,并且引用 zxAlgMatrixCol,对应 zxAlgMatrix.cpp 文件 + +public: + + static zxAlgMatrix Zero(int nRow, int nCol); //初始化 + int rows() const; //获取行数 + int cols() const; //获取列数 + + void set(int row, int col, double value); //设置元素 + double get(int row, int col) const; //获取元素 + double operator()(int row, int col = 0) const;//访问元素 + double& operator()(int row, int col = 0); + + zxAlgMatrix operator= (zxAlgMatrix other); //赋值函数 + + zxAlgMatrix operator+ (zxAlgMatrix other); //矩阵相加 + zxAlgMatrix operator- (zxAlgMatrix other); //矩阵相减 + zxAlgMatrix operator* (zxAlgMatrix other); //矩阵相乘 + zxAlgMatrix operator/ (zxAlgMatrix& other);//矩阵相除 + zxAlgMatrixCol operator* (const zxAlgMatrixCol& vec); //矩阵与行列式相乘 + zxAlgMatrix operator-() ; //矩阵求负 + + zxAlgMatrix transpose(); //矩阵转置 + zxAlgMatrix inverse(); //矩阵求逆 + double determinant(); //行列式 + +protected: + + // 数据体 + VVecDouble m_vvecData; + + ///////////////////////////////////////////////////////// + // 2.拟合回归算法中用到的矩阵相关,大都是static函数,以VecDouble为载体,对应 zxAlgMatrixEx.cpp 文件 + +public: + + // 求矩阵行列式。 + static double matrixDet(VecDouble vMatrix, int nRow); + + // 矩阵乘法,矩阵*矩阵 + static bool plusMatrix(VecDouble& vResult, int &nResultRow, \ + VecDouble vLeft, int nLetfRow, \ + VecDouble vRight, int nRightRow); + + // 矩阵乘法,矩阵*数值 + static bool plusMatrix(VecDouble& vResult, double dFactor); + + // 将矩阵由一维形式转为二维形式 + static bool vec2VecRow2D(VecDouble vec, int nRow, \ + VVecDouble& vec2D); + + // 行*列 + static bool plusRow(double& dResult,VecDouble vRow, \ + VecDouble vCol); + + // 求矩阵伴随阵 + static bool adjoinMatrix(VecDouble& vMatrix, int nRow); + + // 求矩阵某一个元素的代数余子式 + static bool cofactor(double &dResult, VecDouble vMatrix, \ + int nRow, int i, int j); + + // 矩阵求逆 + static bool inverseMatrix(VecDouble& vMatrix, int nRow); + + // 矩阵转置 + static bool transposeMatrix(VecDouble& vMatrix, int& nRow); + + // 矩阵加法 + static bool AddMatrix(VecDouble& vResult, int &nResultRow, \ + VecDouble vLeft, int nLetfRow, \ + VecDouble vRight, int nRightRow); + // 矩阵减法 + static bool subMatrix(VecDouble& vResult, int& nResultRow, \ + VecDouble vLeft, int nLetfRow, \ + VecDouble vRight, int nRightRow); +}; + +// 列向量 +class I_ALGMATH_EXPORT zxAlgMatrixCol +{ +public: + + zxAlgMatrixCol(); + zxAlgMatrixCol(int nRow, int nCol = 1, double val = 0.0); + + static zxAlgMatrixCol Zero(int nRow, int nCol = 1); + int rows(); + + double operator()(int i, int j = 0) const; + double& operator()(int i, int j = 0); + + double& operator[](int i); + const double& operator[](int i) const; + + // 赋值函数 + zxAlgMatrixCol operator=( zxAlgMatrixCol other); + +protected: + + // 数据体 + VecDouble m_vecData; +}; + diff --git a/Include/iAlg/iAlgMath/zxAlgMatrixPsInvNew.h b/Include/iAlg/iAlgMath/zxAlgMatrixPsInvNew.h new file mode 100644 index 0000000..c1afd5c --- /dev/null +++ b/Include/iAlg/iAlgMath/zxAlgMatrixPsInvNew.h @@ -0,0 +1,44 @@ +#pragma once + +#include "Defines.h" +#include "iAlgMath_global.h" + +// α֮ⷽһȶдһ֤ +// ߣشѧ wangjr + +//޷ +//6*7ģƽԼ1.0 +//100*90ģƽԼ0.3 +//200*90ģƽԼΪ0.015 + +class I_ALGMATH_EXPORT zxAlgMatrixPsInvNew +{ +public: + + zxAlgMatrixPsInvNew(); + ~zxAlgMatrixPsInvNew(); + +#ifdef QT_DEBUG + void test(); +#endif + +public: + + // α + VVecDouble pseudoInverse(VVecDouble& A); + +private: + + // ת + void transpose(const VVecDouble& src, VVecDouble& dst); + + // ˷ result = A * B + void matrixMultiply(const VVecDouble& A, const VVecDouble& B, \ + VVecDouble& result); + + // 棨޷Ҽٶ棩 + bool matrixInverse(const VVecDouble& src, VVecDouble& dst); + + // ӡ + void printMatrix(const VVecDouble& matrix); +}; diff --git a/Include/iAlg/iAlgMath/zxAlgMatrixPsInvSVD.h b/Include/iAlg/iAlgMath/zxAlgMatrixPsInvSVD.h new file mode 100644 index 0000000..46bffcf --- /dev/null +++ b/Include/iAlg/iAlgMath/zxAlgMatrixPsInvSVD.h @@ -0,0 +1,46 @@ +#pragma once + +#include "Defines.h" +#include "iAlgMath_global.h" + +// α֮ⷽSVD㷨 ÷ֻΪοδ + +// SVD㷨ͨ漰ӵѧֵ +// ʵ˼JacobiSVD㷨ĿܣСľ +// ڴ˻ʵ־棨Ƿ⣩ +// ע⣬㷨ҪܶûнŻԴֵȶ⡣ +// ϴ󣬱಻һʡ + +class I_ALGMATH_EXPORT zxAlgMatrixPsInvSVD +{ +public: + + zxAlgMatrixPsInvSVD(); + ~zxAlgMatrixPsInvSVD(); + +#ifdef QT_DEBUG + void test(); +#endif + +public: + + // α + VVecDouble pseudoInverse(VVecDouble& A); + +private: + + // svg + bool svd(VVecDouble& A); + + // sqrt(a^2 + b^2) without under/overflow + double hypot(double a, double b); + +private: + + // + VVecDouble U; + VVecDouble V; + VecDouble s; + int m; + int n; +}; diff --git a/Include/iAlg/iAlgMath/zxAlgSVD.h b/Include/iAlg/iAlgMath/zxAlgSVD.h new file mode 100644 index 0000000..015a56e --- /dev/null +++ b/Include/iAlg/iAlgMath/zxAlgSVD.h @@ -0,0 +1,43 @@ +#pragma once + +#include "Defines.h" +#include "iAlgMath_global.h" + +// SVD㷨ͨ漰ӵѧֵ +// ʵ˼JacobiSVD㷨ĿܣСľ +// ڴ˻ʵ־棨Ƿ⣩ +// ע⣬㷨ҪܶûнŻԴֵȶ⡣ +// ϴ󣬱಻һʡ +class I_ALGMATH_EXPORT zxAlgSVD +{ +public: + + zxAlgSVD(); + ~zxAlgSVD(); + +#ifdef QT_DEBUG + void test(); +#endif + +public: + + // α + VVecDouble pseudoInverse(VVecDouble& A); + +private: + + // svg + bool svd(VVecDouble& A); + + // sqrt(a^2 + b^2) without under/overflow + double hypot(double a, double b); + +private: + + // + VVecDouble U; + VVecDouble V; + VecDouble s; + int m; + int n; +}; diff --git a/Include/iAlg/iAlgMath/zxBessel.h b/Include/iAlg/iAlgMath/zxBessel.h new file mode 100644 index 0000000..49d11d7 --- /dev/null +++ b/Include/iAlg/iAlgMath/zxBessel.h @@ -0,0 +1,106 @@ +#pragma once + +#include "math.h" +#include "zxHugeNum.h" + +// 贝塞尔函数 +class I_ALGMATH_EXPORT zxBessel +{ +public: + + zxBessel(); + ~zxBessel(); + +public: + + // 贝塞尔函数(基础函数部分) + bool besselI0(double x, double &b); + double getbesselI0(double x); + + bool besselI1(double x, double &b); + double getbesselI1(double x); + + bool besselK0(double x, double &b); + double getbesselK0(double x); + + bool besselK1(double x ,double &b); + double getbesselK1(double x); + + // 贝塞尔函数(组合模式) + // K1/I1 + bool besselK1I1(double x, double &b); + + // K0/I0 + bool besselK0I0(double x, double &b); + + // I0/I1 + bool besselI0I1(double x, double &b); + + // I0(x)/I1(y) + bool besselI0I1(double x, double y, double &b); + + // I0(x)/I0(y) + bool besselI0I0(double x, double y, double &b); + + // I1(x)/I1(y) + bool besselI1I1(double x, double y, double &b); + + // K1(x)/I1(y) + bool besselK1I1(double x, double y, double &b); + + // K1(x)/I0(y) + bool besselK1I0(double x, double y, double &b); + + // K0(x)/I0(y) + bool besselK0I0(double x, double y, double &b); + + // (I0(x)/I1(x))/(I0(y)/I1(y)) + bool besselI0I1I0I1(double x, double y, double &b); + + // (K0(x)/I0(x))/(K1(y)/I1(y)) + bool besselK0I0K1I1(double x, double y, double &b); + + // 大数模式 + zxHugeNum besselI(int which, double x); + zxHugeNum besselK(int which, double x); + +public: + + //////////////////////////////////////////////////////////////// + // 由于单个的超过数值范围,故一起在内部进行处理 + // 仅仅测试 + //double calDemoA(double d1, double d2); + //double calDemoB(double d1, double d2); + + zxHugeNum besselDivide(bool byK1, int which1, double x1, \ + bool byK2, int which2, double x2, \ + bool* pOk = NULL); + zxHugeNum besselMultiple(bool byK1, int which1, double x1, \ + bool byK2, int which2, double x2, \ + bool* pOk = NULL); + + protected: + zxHugeNum besselDivMul(bool bDivide, \ + bool byK1, int which1, double x1, \ + bool byK2, int which2, double x2, \ + bool* pOk = NULL); + + double _besselByY(double y, bool bK, int which, bool bLower); + + public: + + void setComMode(bool b) { m_bComMode = b; } + bool isComMode() { return m_bComMode; } + double getResultI() { return m_dIndex; } + double getResultM() { return m_dMultipler; } + +private: + + bool m_bComMode; //对于大数,采取复合模式 + double m_dIndex; //exp的次数 + double m_dMultipler; //乘数,合起来是 exp(m_dIndex) * m_dMultipler; + + //////////////////////////////////////////////////////////////// + +}; + diff --git a/Include/iAlg/iAlgMath/zxGmyBase.h b/Include/iAlg/iAlgMath/zxGmyBase.h new file mode 100644 index 0000000..813bf9b --- /dev/null +++ b/Include/iAlg/iAlgMath/zxGmyBase.h @@ -0,0 +1,117 @@ +#pragma once + +#include "Defines.h" + +#include "iAlgMath_global.h" + +class QPointF; +class QLineF; + +// 几何基础类 +class I_ALGMATH_EXPORT zxGmyBase +{ +public: + + zxGmyBase(); + virtual ~zxGmyBase(); + +public: + + // ccw > 0 + double triangle_area(double ax, double ay, double bx, double by, double cx, double cy); + + // ccw > 0, cw < 0, empty = 0 + double triangle_ccw(double ax, double ay, double bx, double by, double cx, double cy); + + // + double triangle_interpolate(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3,double x, double y); + + // out < 0, cocircular = 0, in > 0 + double in_circle(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy); + + // < 0 + // a +--- = 0 ----+ b + // > 0 + double orient2d(double ax, double ay, double bx, double by, double cx, double cy); + + // | d + // | + // a --+-- b + // | + // | c + bool is_segment_intersect(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy); + + // 角度 + float degToRad(float _deg); + float radToDeg(float _rad); + float kross(const QPointF& a, const QPointF& b); + float lengthSquared(const QPointF& a); + float pointSegmentDistanceSquared2D(const QPointF& q, const QPointF& p0, const QPointF& p1, float & t); + float pointLineDistanceSquared2D(const QPointF& q, const QPointF& p0, const QPointF& p1, float & t); + + // 距离(有待优化) + double dot(double ax, double ay, double bx, double by); + double distance_squared(double ax, double ay, double bx, double by); + double distance(double ax, double ay, double bx, double by); + float distance(float x0, float y0, float x1, float y1); + float distanceSquared(float x0, float y0, float x1, float y1); + float dot(const QPointF& a, const QPointF& b); + + int findIntersection(const QPointF& seg0_a, const QPointF& seg0_b, const QPointF& seg1_a, const QPointF& seg1_b, QPointF ip[2]); + int findIntersection(const QLineF & seg0, const QLineF & seg1, QPointF ip[2]); + + void cubic_bezier(float & _x, float & _y, float t, + float _x0, float _y0, float _x1, float _y1, + float _x2, float _y2, float _x3, float _y3); + + bool polygonContainsPoint(const QVector & poly, float x, float y); + bool polygonIsCcw(const QVector & poly); + float polygonArea(const QVector & poly); + void polygonSimplify(QVector & out, const QVector & in, float maxErrDistance2); + + int _findIntersection(float u0, float u1, float v0, float v1, float w[2]); + void simplifyPolygonRdp(QVector & out, const QPointF in[], int in_count, int ia, int ib, float maxErrDistance2); + + // 计算pt到直线line的垂足。返回值表示垂足是否在线段内部(含端点) + bool getPadel(const QPointF& pt, const QLineF& line, QPointF& ptPadel); + +public: + + /// @brief 计算直线距离 + static float calDistanceOf(QPointF pt1, QPointF pt2); + + /// @brief 计算点P(x,y)与X轴正方向的夹角, 夹角弧度 + static float calRadToAxisX(float x, float y); + + /// @brief 计算点P(x,y)与X轴正方向的夹角, 夹角° + static float calAngleToAxisX(float x, float y); + + /// @brief 点pt围绕点ptCenter旋转弧度fAngleR后的坐标,fAngleR 旋转弧度 or du,顺时针为正 + static QPointF rotatePt(QPointF pt, QPointF ptCenter, \ + float fAngleR, bool bRad = true); + + /// @brief 计算两点形成直线的倾斜角(0-180) + static float calSlopeOf(QPointF pt1, QPointF pt2); + + /// @brief 判断两条直线是否平行; + static bool isParallelLines(QLineF line1, QLineF line2); + + /// @brief 计算两条直线的距离(如果不平行,返回-1); + static float calDisOfLines(QLineF line1, QLineF line2); + + /// @brief 计算两条直线/线段的相交点坐标; + /// bOnlySegment:true 只考虑线段,false考虑直线,即线段延长线 + static bool calCrossOfLines(QPointF& ptCross, \ + QLineF line1, QLineF line2, \ + bool bOnlySegment = false); + + /// @brief 计算点到直线距离 + static float calDisOfPt2Line(QPointF pt, QLineF line); + static float calDisOfPt2Line(QPointF pt, \ + QPointF pt1, QPointF pt2); + + // y = kx + b + static double leastSquareMethodSlop(int cnt,const float x[],const float y[],double &b); + static double leastSquareMethodSlopEx(int cnt,const float x[],const float y[],double &b); + +}; diff --git a/Include/iAlg/iAlgMath/zxHugeNum.h b/Include/iAlg/iAlgMath/zxHugeNum.h new file mode 100644 index 0000000..e04a4a3 --- /dev/null +++ b/Include/iAlg/iAlgMath/zxHugeNum.h @@ -0,0 +1,45 @@ +#pragma once + +#include "iAlgMath_global.h" + +// 定义大数 +class I_ALGMATH_EXPORT zxHugeNum +{ +public: + + zxHugeNum(); + zxHugeNum(double dM, double dI = 0); + zxHugeNum(const zxHugeNum& other); + ~zxHugeNum(); + + bool operator == (const zxHugeNum &other) const; + bool operator != (const zxHugeNum &other) const; + + zxHugeNum operator = (const zxHugeNum& other); + zxHugeNum operator + (const zxHugeNum& other); + zxHugeNum operator - (const zxHugeNum& other); + zxHugeNum operator * (const zxHugeNum& other); + zxHugeNum operator / (const zxHugeNum& other); + + zxHugeNum operator + (const double& d); + zxHugeNum operator - (const double& d); + zxHugeNum operator * (const double& d); + zxHugeNum operator / (const double& d); + +public: + + double index() { return m_dIndex; } + double multipler() { return m_dMultipler; } + double total() { return m_dTotal; } + bool isZero(); + +private: + + void makesureTotal(); + +private: + + double m_dIndex; //exp的次数 + double m_dMultipler;//乘数 + double m_dTotal; //合起来是 exp(m_dIndex) * m_dMultipler; +}; diff --git a/Include/iAlg/iAlgMath/zxInterpolation.h b/Include/iAlg/iAlgMath/zxInterpolation.h new file mode 100644 index 0000000..93e07cc --- /dev/null +++ b/Include/iAlg/iAlgMath/zxInterpolation.h @@ -0,0 +1,38 @@ +#pragma once + +#include "Defines.h" + +#include "iAlgMath_global.h" + +// 插值方法,注:该方法源码来源于原先等值线插值 +// 具体参见:iPlotContour 类库20240419之前代码 +// 该类暂时未启用,如果需要联系wzg +class I_ALGMATH_EXPORT zxInterpolation +{ +public: + + zxInterpolation(); + virtual ~zxInterpolation(); + +public: + + // 普通插值 + static bool runByCommon(VVecDouble& vvecInters, int nRow, int nCol); + static bool _runColCommon(const VVecDouble& vvecSrcs, VVecDouble& vvecRs, \ + const int nRow, const int nCol, int &nRRCol); + static bool _runRowCommon(const VVecDouble& vvecSrcs, VVecDouble& vvecRs, \ + const int nRow, const int nCol, int &nRRow ); + + // 贝塞尔插值 + static bool runByBezier(VVecDouble& vvecSrcs, \ + VVecDouble& vvecInters, \ + int nRow, int nCol); + static bool _runColBezier(const VVecDouble& vvecSrcs, \ + VVecDouble& vvecRs, \ + int nSize); + static bool _runRowBezier(const VVecDouble& vvecSrcs, \ + VVecDouble& vvecRs, \ + int nSize); + static QVector _runBezier(const QVector& vecInputs, \ + const int nSizeRaw); +}; diff --git a/Include/iAlg/iAlgMath/zxLinearSys.h b/Include/iAlg/iAlgMath/zxLinearSys.h new file mode 100644 index 0000000..247310d --- /dev/null +++ b/Include/iAlg/iAlgMath/zxLinearSys.h @@ -0,0 +1,104 @@ +#pragma once + +template +static bool solve_linear_sys(T solution[], T* mat, int n, bool inplace); + +// Gaussian elimination, n*(n+1) martix, O(n^3) time. +// m is array of ptr to each row +template +static bool solve_linear_sys(T solution[], T* mat[], int n, bool inplace = false) +{ + if(!inplace) + { + int sz1 = sizeof(T) * (n+1); + int sz = sz1 * n; + T * mat1 = (T*) malloc(sz); + T * p = mat1; + for(int k=0; k pivot) + { + pivot = t; + r = i; + } + } + + if(pivot == 0) + { + return false; + } + + if(r != k) + { + T* p = mat[r]; + mat[r] = mat[k]; + mat[k] = p; + } + + // eliminate + pivot = mat[k][k]; + for(int i=k+1; i=0; k--) + { + T c = 0; + for(int j = k+1; j +static bool solve_linear_sys(T solution[], T* mat, int n, bool inplace = false) +{ + if(!inplace) + { + int sz = sizeof(T) * n * (n+1); + T * mat1 = (T*) malloc(sz); + memcpy(mat1, mat, sz); + mat = mat1; + } + T ** m = (T**)malloc(sizeof(T*) * n); + for(int i=0; i veca, QVector vecb, \ + QVector vecc, QVector vecd, \ + QVector &vecx); +}; + diff --git a/Include/iAlg/iAlgMath/zxMathBase.h b/Include/iAlg/iAlgMath/zxMathBase.h new file mode 100644 index 0000000..7f872e2 --- /dev/null +++ b/Include/iAlg/iAlgMath/zxMathBase.h @@ -0,0 +1,54 @@ +#pragma once + +#include "Defines.h" + +#include "iAlgMath_global.h" + +// 数学基础类 +class I_ALGMATH_EXPORT zxMathBase +{ +public: + + zxMathBase(); + virtual ~zxMathBase(); + +public: + + /// @brief 求i的阶乘 + static int factorial(int i); + + /// @brief 数据是否有效 + static bool isValidValue(float f); + template static bool isValidValue(T v) + { + T tTemp = v; + if (tTemp >= 0.0) + { + return true; + } + if (qAbs(tTemp - SYS_VALUE_INVALID) > SYS_VALUE_ZERO_PLUS && \ + qAbs(tTemp - SYS_VALUE_INVALID1) > SYS_VALUE_ZERO_PLUS && \ + qAbs(tTemp - SYS_VALUE_INVALID2) > SYS_VALUE_ZERO_PLUS) + { + return true; + } + return false; + } + + /// @brief 判断数据是否有限,非无穷大或无穷小 + static bool isLimitedValue(float f); + template static bool isLimitedValue(T v) + { + T tTemp = v; + if (tTemp == tTemp && \ + tTemp + 10.0 != tTemp) + { + return true; + } + return false; + } + + /// 查找幂 + static double findDevision(double dValue); + +}; diff --git a/Include/iAlg/iAlgMath/zxMatrix.h b/Include/iAlg/iAlgMath/zxMatrix.h new file mode 100644 index 0000000..f0cd05f --- /dev/null +++ b/Include/iAlg/iAlgMath/zxMatrix.h @@ -0,0 +1,80 @@ +#pragma once + +#include "Defines.h" +#include "iAlgMath_global.h" + +#ifdef _SCAN_OLD_CODE_ + +// 该类库矩阵定义暂未启用,仅供参考 + +// 列向量 +class I_ALGMATH_EXPORT zxMatrixCol +{ +public: + + zxMatrixCol(); + zxMatrixCol(int n, double val = 0.0); + + int rows(); + + double operator()(int i) const; + double& operator()(int i); + + double& operator[](int i); + const double& operator[](int i) const; + + // 赋值函数 + zxMatrixCol operator= ( zxMatrixCol other); + +protected: + // 数据体 + VecDouble m_vecData; +}; + +// 矩阵优化 +class I_ALGMATH_EXPORT zxMatrix +{ +public: + zxMatrix(); + zxMatrix(int rows, int cols, double val = 0.0); + + // 获取矩阵的行数 + int rows() const; + // 获取矩阵的列数 + int cols() const; + + // 设置矩阵元素值 + void set(int row, int col, double value); + // 获取矩阵元素值 + double get(int row, int col) const; + // 访问矩阵中的元素 + double operator()(int row, int col = 0) const; + double& operator()(int row, int col = 0); + + // 赋值函数 + zxMatrix operator= (zxMatrix other); + // 矩阵相加 + zxMatrix operator+ (zxMatrix other); + // 矩阵相减 + zxMatrix operator- ( zxMatrix other); + // 矩阵相乘 + zxMatrix operator* ( zxMatrix other); + // 举证求负 + zxMatrix operator- (); + // 矩阵与行列式相乘 + zxMatrixCol operator* (const zxMatrixCol& vec); + + // 矩阵转置 + zxMatrix transpose(); + // 矩阵求逆 + zxMatrix inverse(); + // 行列式 + double determinant(); + +protected: + + // 数据体 + VVecDouble m_vvecData; +}; +#endif + diff --git a/Include/iAlg/iAlgMath/zxNthRoot.h b/Include/iAlg/iAlgMath/zxNthRoot.h new file mode 100644 index 0000000..bd417ad --- /dev/null +++ b/Include/iAlg/iAlgMath/zxNthRoot.h @@ -0,0 +1,24 @@ +#pragma once + +#include "math.h" +#include "iAlgMath_global.h" + +//求x的n次方根 +class I_ALGMATH_EXPORT zxNthRoot +{ +public: + + zxNthRoot(); + ~zxNthRoot(); + +public: + + //求n次方根主函数 + static double nthroot(double x,double n); + + //决定n次方根的正负 + static int nthrootssign(double x); + + //是否超过范围 + static bool isFinite(double x); +}; diff --git a/Include/iAlg/iAlgRegress/iAlgRegress_global.h b/Include/iAlg/iAlgRegress/iAlgRegress_global.h new file mode 100644 index 0000000..8a4f963 --- /dev/null +++ b/Include/iAlg/iAlgRegress/iAlgRegress_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#if defined(I_ALGREGRESS_LIBRARY) +# define I_ALGREGRESS_EXPORT Q_DECL_EXPORT +#else +# define I_ALGREGRESS_EXPORT Q_DECL_IMPORT +#endif + + + + diff --git a/Include/iAlg/iAlgRegress/zxAlgRegress.h b/Include/iAlg/iAlgRegress/zxAlgRegress.h new file mode 100644 index 0000000..1e576a4 --- /dev/null +++ b/Include/iAlg/iAlgRegress/zxAlgRegress.h @@ -0,0 +1,97 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "iAlgRegress_global.h" +#include "zxAlgMatrix.h" + +// 拟合算法 +class I_ALGREGRESS_EXPORT zxAlgRegress +{ + +public: + zxAlgRegress(); + virtual ~zxAlgRegress(); + + // 组织表达式 + virtual QString getExpStr() = 0; + +public: + + // 过滤掉无效数据。 + virtual bool setFiltering() = 0; + virtual bool cal() = 0; + // 将参数约束、数据源等转换为线性回归方程可以处理的形式。 + virtual bool setTransformation() = 0; + // 将线性回归方程计算完成的参数反向变换成当前回归类型的参数。 + virtual bool setReciprocalTransformation() = 0; + // 根据回归线进行计算 + virtual double getValue(VecDouble& vMatrixX) = 0; + double getValue(double d) + { + VecDouble vMatrixX; + vMatrixX.push_back(d); + return getValue(vMatrixX); + } + +public: + + void setCoeff(QMap& mapCoeff); + void setRestrain(bool bRestrain); + void setSourceData(VVecDouble& vSourceData); + void setRestrainMatrix(VVecDouble& vRestrainMatrix); + void setRestrainType(uint nType); + void setRestrainPoint(VecDouble vRestrainPoint); + + QMap& getCoeff(); + bool isRestrain(); + VVecDouble getSourceData(); + VVecDouble getRestrainMatrix(); + double getDeterCoff(); + uint getValidDataNum(); + uint getDataNum(); + +protected: + + double m_dDeterCoff; // 决定系数R2 + bool m_bModeLimit; // 是否为约束回归 + uint m_nDataNum; // 数据个数 + uint m_nValidDataNum; // 有效数据个数 + + uint m_nTypeLimit;// 约束类型,0:定点;1:定参数;2:矩阵约束。 + + // 所有项的系数。map<参数编号, 对应项系数> + // 线性下 0:乘积项系数 1:常数项系数 + // 指数下 0:乘积项系数 1:指数项系数 + // 对数下 0:乘积项系数 1:常数项系数 + // 乘幂下 0:乘积项系数 1:指数项系数 + // 特殊回归模型的参数编号见具体的类。 + QMap m_mapCoeff; + + // 约束点。第一个为Y0,再依次为X10、X20、X30... + VecDouble m_vRestrainPoint; + + // 源数据。 + // 外部的vector的每一项,指的是一组观察变量。 + // 内部的每一个vector指的是每一组观察变量的每一个子项: Yi、Xi1、Xi2、Xi3...... + VVecDouble m_vSourceData; + + // 约束矩阵 + // 假定回归方程的待求参数向量为 C 。C的排序为:由低次向高次参数。 + // C受矩阵约束: AC = b 。 A的排序与C相同。 + // A 为 k * p 矩阵,并且秩为 k , C 为 p * 1 矩阵,b 为 k * 1 矩阵,即C、b为列向量。 + // 外部的vector的每一项,指的是一组约束条件,即约束方程组中的一个方程。 + // 内部的vector的每一项,指的是一组约束条件中的每一个参数。 + // 内部的vector的排序方式为 : bi 、Ai1、Ai2、Ai3...... + VVecDouble m_vRestrainMatrix; +}; + + + + diff --git a/Include/iAlg/iAlgRegress/zxAlgRegressExponential.h b/Include/iAlg/iAlgRegress/zxAlgRegressExponential.h new file mode 100644 index 0000000..6b03498 --- /dev/null +++ b/Include/iAlg/iAlgRegress/zxAlgRegressExponential.h @@ -0,0 +1,37 @@ +#pragma once + +#include "zxAlgRegress.h" +#include "zxAlgRegressLinear.h" + +//指数拟合 +class I_ALGREGRESS_EXPORT zxAlgRegressExponential : public zxAlgRegress +{ +public: + zxAlgRegressExponential(); + virtual ~zxAlgRegressExponential(); + + virtual double getValue(VecDouble& vMatrixX); + bool setFiltering(); + bool cal(); + bool setTransformation(); + bool setReciprocalTransformation(); + + // 组织表达式 + virtual QString getExpStr(); + +private: + double m_dPlusCoeff; //乘积项系数 + double m_dPowerCoeff; //指数项系数 + + double m_dPlusAssistCoeff; //乘积项辅助系数。用于处理系数为负数的情况。 + bool m_bAcceptNonLinearRestrain; //是否接受非线性约束。 + //如果外部指定指数回归的某一项系数,则为线性约束。 + //约束矩阵为 (3 , 0 , 1) 表示 m_dPlusCoeff = 3; + + // 在转换成线性回归时,约束方式可能发生改变,在当前条件为指定参数约束, + // 转换时可能变成约束矩阵约束。因此不采用当前计算类由CLinearRegressAlgo派生, + // 而记录CLinearRegressAlgo作为成员的方式。以免其它成员变量受到影响。 + zxAlgRegressLinear* m_pLinearRegress; +}; + + diff --git a/Include/iAlg/iAlgRegress/zxAlgRegressLinear.h b/Include/iAlg/iAlgRegress/zxAlgRegressLinear.h new file mode 100644 index 0000000..03d8107 --- /dev/null +++ b/Include/iAlg/iAlgRegress/zxAlgRegressLinear.h @@ -0,0 +1,32 @@ +#pragma once + +#include "zxAlgRegress.h" + +//线性回归 +class I_ALGREGRESS_EXPORT zxAlgRegressLinear :public zxAlgRegress +{ +public: + zxAlgRegressLinear(); + ~zxAlgRegressLinear(); + + virtual double getValue(VecDouble& vMatrixX); + bool setFiltering(); + bool SimpleCalcalute(); + bool cal(); + bool setTransformation(); + bool setReciprocalTransformation(); + // 组织表达式 + virtual QString getExpStr(); + + double getExpK(); + double getExpB(); + + // 慎用,在外部修改截距 (等时试井) + void changeExpB(double d) { m_dB = d; } + +private: + double m_dK; + double m_dB; +}; + + diff --git a/Include/iAlg/iAlgRegress/zxAlgRegressLog.h b/Include/iAlg/iAlgRegress/zxAlgRegressLog.h new file mode 100644 index 0000000..83b1a63 --- /dev/null +++ b/Include/iAlg/iAlgRegress/zxAlgRegressLog.h @@ -0,0 +1,35 @@ +#pragma once + +#include "zxAlgRegress.h" +#include "zxAlgRegressLinear.h" + +//对数拟合 +class I_ALGREGRESS_EXPORT zxAlgRegressLog : public zxAlgRegress +{ +public: + zxAlgRegressLog(void); + virtual ~zxAlgRegressLog(void); + + virtual double getValue(VecDouble& vMatrixX); + bool setFiltering(); + bool cal(); + bool setTransformation(); + bool setReciprocalTransformation(); + + // 组织表达式 + virtual QString getExpStr(); + +private: + double m_dK; //乘积项系数 + double m_dB; //指数项系数 + + double m_dPlusAssistCoeff; //乘积项辅助系数。用于处理系数为负数的情况。 + bool m_bAcceptNonLinearRestrain; //是否接受非线性约束。 + + // 在转换成线性回归时,约束方式可能发生改变,在当前条件为指定参数约束, + // 转换时可能变成约束矩阵约束。因此不采用当前计算类由CLinearRegressAlgo派生, + // 而记录CLinearRegressAlgo作为成员的方式。以免其它成员变量受到影响。 + zxAlgRegressLinear* m_pLinearRegress; +}; + + diff --git a/Include/iAlg/iAlgRegress/zxAlgRegressMultiLinear.h b/Include/iAlg/iAlgRegress/zxAlgRegressMultiLinear.h new file mode 100644 index 0000000..575e7de --- /dev/null +++ b/Include/iAlg/iAlgRegress/zxAlgRegressMultiLinear.h @@ -0,0 +1,33 @@ +#pragma once + +#include "zxAlgRegress.h" + +class I_ALGREGRESS_EXPORT zxAlgRegressMultiLinear :public zxAlgRegress +{ +public: + zxAlgRegressMultiLinear(void); + virtual ~zxAlgRegressMultiLinear(void); +public: + bool setFiltering(); + bool SimpleCalcalute(); + bool cal(); + bool setTransformation(); + bool setReciprocalTransformation(); + // vMatrixX 按从低次向高次排列。 + virtual double getValue(VecDouble& vMatrixX); + + // 组织表达式 + virtual QString getExpStr(); + +protected: + // 内部调用接口,与外部调用接口GetValue有区别。 + // 如Y = x0 + x1 + b; 外部调用接口输入参数为 (x0 , x1),内部调用接口输入参数为(1,x0,x1),需要三个参数。 + double insideGetValue(VecDouble vMatrixX); + +protected: + + VecDouble m_matrix_y; + VVecDouble m_matrix_x; +}; + + diff --git a/Include/iAlg/iAlgRegress/zxAlgRegressPoly.h b/Include/iAlg/iAlgRegress/zxAlgRegressPoly.h new file mode 100644 index 0000000..b0fefc5 --- /dev/null +++ b/Include/iAlg/iAlgRegress/zxAlgRegressPoly.h @@ -0,0 +1,31 @@ +#pragma once + +#include "zxAlgRegress.h" +#include "zxAlgRegressMultiLinear.h" + +//多项式拟合 +class I_ALGREGRESS_EXPORT zxAlgRegressPoly :public zxAlgRegress +{ +public: + zxAlgRegressPoly(void); + ~zxAlgRegressPoly(void); + + virtual double getValue(VecDouble& vMatrixX); + bool setFiltering(); + bool cal(); + bool setTransformation(); + bool setReciprocalTransformation(); + + // 组织表达式 + virtual QString getExpStr(); +public: + + void setDegree(uint nDegree); //多项式的阶次 + +private: + + uint m_nDegree; + zxAlgRegressMultiLinear* m_pLinearRegress; +}; + + diff --git a/Include/iAlg/iAlgRegress/zxAlgRegressPower.h b/Include/iAlg/iAlgRegress/zxAlgRegressPower.h new file mode 100644 index 0000000..d0e809d --- /dev/null +++ b/Include/iAlg/iAlgRegress/zxAlgRegressPower.h @@ -0,0 +1,37 @@ +#pragma once + +#include "zxAlgRegress.h" +#include "zxAlgRegressLinear.h" + +//乘幂拟合 +class I_ALGREGRESS_EXPORT zxAlgRegressPower : public zxAlgRegress +{ +public: + zxAlgRegressPower(void); + ~zxAlgRegressPower(void); + + + virtual double getValue(VecDouble& vMatrixX); + bool setFiltering(); + bool SimpleCalcalute(); + bool cal(); + bool setTransformation(); + bool setReciprocalTransformation(); + + // 组织表达式 + virtual QString getExpStr(); + +private: + double m_dPlusCoeff; //乘积项系数 + double m_dPowerCoeff; //指数项系数 + + double m_dPlusAssistCoeff; //乘积项辅助系数。用于处理系数为负数的情况。 + bool m_bAcceptNonLinearRestrain; //是否接受非线性约束。 + + // 在转换成线性回归时,约束方式可能发生改变,在当前条件为指定参数约束, + // 转换时可能变成约束矩阵约束。因此不采用当前计算类由CLinearRegressAlgo派生, + // 而记录CLinearRegressAlgo作为成员的方式。以免其它成员变量受到影响。 + zxAlgRegressLinear* m_pLinearRegress; +}; + + diff --git a/Include/iBase/Interface/IxDeserialized.h b/Include/iBase/Interface/IxDeserialized.h new file mode 100644 index 0000000..514d906 --- /dev/null +++ b/Include/iBase/Interface/IxDeserialized.h @@ -0,0 +1,14 @@ +#pragma once + +#include "IxInterface.h" + +class ZxSerializer; + +// 序列化结束之后的处理 +class IxDeserialized + : virtual public IxInterface +{ +public: + + virtual void onDeserialized() = 0; +}; diff --git a/Include/iBase/Interface/IxDynObj.h b/Include/iBase/Interface/IxDynObj.h new file mode 100644 index 0000000..9a7a9bb --- /dev/null +++ b/Include/iBase/Interface/IxDynObj.h @@ -0,0 +1,20 @@ +#pragma once + +#include "IxInterface.h" + +// 动态对象 +class IxDynObj + : virtual public IxInterface +{ +public: + + // 获取类名 + virtual const char* getClassName() const = 0; + + // 获取Tag + virtual const char* getTagName() const = 0; +}; + + + + diff --git a/Include/iBase/Interface/IxGraphViz.h b/Include/iBase/Interface/IxGraphViz.h new file mode 100644 index 0000000..5a2a272 --- /dev/null +++ b/Include/iBase/Interface/IxGraphViz.h @@ -0,0 +1,15 @@ +#pragma once + +#include "IxInterface.h" + +class ZxGraphViz; +/// 接口: 导出Graphviz图 +class IxGraphViz + : virtual public IxInterface +{ +public: + + // 导出 + virtual void exportGraphviz(ZxGraphViz * g, int ancestor, int descendant) = 0; +}; + diff --git a/Include/iBase/Interface/IxGridAlign.h b/Include/iBase/Interface/IxGridAlign.h new file mode 100644 index 0000000..9202bab --- /dev/null +++ b/Include/iBase/Interface/IxGridAlign.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include "IxInterface.h" + +// 网格对齐 +class IxGridAlign + : virtual public IxInterface +{ +public: + + // 计算对齐到网格后的坐标 + virtual QPointF calcSnapPos(const QPointF& pos) const = 0; + virtual bool isSnapEnabled() const = 0; +}; + + + + + + diff --git a/Include/iBase/Interface/IxInterface.h b/Include/iBase/Interface/IxInterface.h new file mode 100644 index 0000000..4ac3a77 --- /dev/null +++ b/Include/iBase/Interface/IxInterface.h @@ -0,0 +1,13 @@ +#pragma once + +// 接口基类 +class IxInterface +{ +protected: + + virtual ~IxInterface() {} +}; + + + + diff --git a/Include/iBase/Interface/IxPtyItem.h b/Include/iBase/Interface/IxPtyItem.h new file mode 100644 index 0000000..e916d73 --- /dev/null +++ b/Include/iBase/Interface/IxPtyItem.h @@ -0,0 +1,74 @@ +#pragma once + +#include +#include + +#include "IxInterface.h" + +class IxPtyPano; + +// 属性条目 +class IxPtyItem + : virtual public IxInterface +{ +public: + + enum ItemType + { + typeDefault, + typeEnum, + typeSymbol + }; + + // 属性编辑器 + virtual IxPtyPano* getPtyPano() const = 0; + + // 父条目 + virtual IxPtyItem* getParent() const = 0; + + // 是否分组 + virtual bool isGroup() const = 0; + + // 获取条目类型 + virtual ItemType getItemType() const = 0; + + // 设置条目类型 + virtual void setItemType(ItemType _type) = 0; + + // 设置取值范围 + virtual void setLimit(int nMin, int nMax) = 0; + virtual void setLimit(double fMin, double fMax) = 0; + + // 设置可选条目 + virtual void setOptions(const QStringList& listName, const QList& listValue) = 0; + virtual void setOptions(const QStringList& listName, const QStringList& listValue) = 0; + virtual void setOptions(const QStringList& listName, const QList& listValue) = 0; + + // 当前值 + virtual QVariant getValue() const = 0; + virtual void setValue(const QVariant& v, IxInterface* pSetBy = 0) = 0; + + // 可见 + virtual bool isVisible() const = 0; + virtual void setVisible(bool bVisible) = 0; + + // 只读 + virtual bool isReadOnly() const = 0; + virtual void setReadOnly(bool bReadOnly) = 0; + + // 展开 + virtual void setExpand(bool bExpand) = 0; + + // 激活条目 + virtual void activate() = 0; + + // 高度 + virtual void setHeight(int height) = 0; + virtual int getHeight() const = 0; + + inline IxPtyItem* findPropertyItem(const QString& key); +}; + + + + diff --git a/Include/iBase/Interface/IxPtyItemEditor.h b/Include/iBase/Interface/IxPtyItemEditor.h new file mode 100644 index 0000000..7317037 --- /dev/null +++ b/Include/iBase/Interface/IxPtyItemEditor.h @@ -0,0 +1,36 @@ +#pragma once + +#include + +#include "ZxDynamic.h" +#include "IxDynObj.h" + +class IxPtyItem; +class ZxXpfNode; + +// 单条属性编辑控件 +class IxPtyItemEditor + : virtual public IxDynObj +{ +public: + + // 绑定属性条目 + virtual void bindItem(IxPtyItem *) = 0; + + // 更新内容 + virtual void updateValue() = 0; + + // 更改配置 + virtual void setConfig(ZxXpfNode *) = 0; + + // 激活 + virtual void activate() = 0; + virtual void deactivate() = 0; + + // 重置控件 + virtual void resetEditor() = 0; + + // 双击 + virtual void onDoubleClicked(int n) = 0; +}; + diff --git a/Include/iBase/Interface/IxPtyPano.h b/Include/iBase/Interface/IxPtyPano.h new file mode 100644 index 0000000..16084a5 --- /dev/null +++ b/Include/iBase/Interface/IxPtyPano.h @@ -0,0 +1,70 @@ +#pragma once + +#include +#include +#include + +#include "IxInterface.h" +#include "IxPtySource.h" +#include "IxPtyItem.h" + +class ZxProperty; +class QString; +class IxPtySource; +class IxPtyItem; + +typedef std::function ZX_PROPERTY_CHANGED_CALLBACK; + +struct ZX_PROPERTY_CHANGED_CALLBACK_EX +{ + ZX_PROPERTY_CHANGED_CALLBACK callback; + QVariant oldValue; + IxPtySource* obj; +}; + +// 属性表接口 +class IxPtyPano + : virtual public IxInterface +{ +public: + + // 添加分组 + virtual IxPtyItem* addGroup(const QString& key, bool expand = true, bool visible = true) = 0; + + // 添加属性 + virtual IxPtyItem* add(ZX_PROPERTY_CHANGED_CALLBACK callback, const QString& key, const QVariant& var, IxPtyItem::ItemType type = IxPtyItem::typeDefault) = 0; + + // 填属性表 + virtual void beginSession(const QString& configName, IxInterface* pSessionOwner) = 0; + virtual void endSession() = 0; + + // 为指定对象填写属性表 + virtual void beginObject(IxPtySource* p) = 0; + virtual void endObject() = 0; + + // 获取指定条目 + virtual IxPtyItem* findPropertyItem(const QString& sKey) = 0; + + // 清空属性表 + virtual void clear(IxInterface* pSessionOwner = 0) = 0; +}; + +inline IxPtyItem* IxPtyItem::findPropertyItem(const QString& key) +{ return getPtyPano()->findPropertyItem(key); } + +// 可分别指定get/set的方法. +#define ZX_PROP(_key, _getProp, _setProp) \ + sheet->add( ([this](const QVariant& v){ this->_setProp(qvariant_cast_getProp())>(v));}) \ + , _key, QVariant::fromValue(this->_getProp())) + +// 可挂接只读属性. +#define ZX_PROP_R(_key, _getProp) \ + sheet->add( 0 , _key, QVariant::fromValue(this->_getProp()) ) + + +/// 可挂接只读属性. +/// ZX_PROP_NR("v", _value) +#define ZX_PROP_NR(_key, _value) \ + sheet->add(0, _key, QVariant::fromValue(this->_value)) + + diff --git a/Include/iBase/Interface/IxPtySource.h b/Include/iBase/Interface/IxPtySource.h new file mode 100644 index 0000000..ae4b68c --- /dev/null +++ b/Include/iBase/Interface/IxPtySource.h @@ -0,0 +1,21 @@ +#pragma once + +#include "IxInterface.h" + +class IxPtyPano; +class QString; +class QVariant; + +// 属性源 +class IxPtySource + : virtual public IxInterface +{ +public: + + // 填入属性表 + virtual void fillPtyPano(IxPtyPano* sheet) = 0; +}; + + + + diff --git a/Include/iBase/Interface/IxRedoUndo.h b/Include/iBase/Interface/IxRedoUndo.h new file mode 100644 index 0000000..8ab47fa --- /dev/null +++ b/Include/iBase/Interface/IxRedoUndo.h @@ -0,0 +1,18 @@ +#pragma once + +#include "IxInterface.h" + +class QUndoStack; + +// RedoUndo +class IxRedoUndo + : virtual public IxInterface +{ +public: + + virtual QUndoStack* getUndoStack() = 0; +}; + + + + diff --git a/Include/iBase/Interface/IxRenderItem.h b/Include/iBase/Interface/IxRenderItem.h new file mode 100644 index 0000000..c6ba5d2 --- /dev/null +++ b/Include/iBase/Interface/IxRenderItem.h @@ -0,0 +1,135 @@ +#pragma once + +#include +#include +#include + +#include "IxSerDes.h" +#include "ZxDynamic.h" + +class QMenu; +class ZxTool; +class ZxPaintParam; +class ZxSceneItem; + +// 2D图元 +class IxRenderItem + : virtual public IxDynObj + , virtual public IxSerDes +{ +public: + + enum Flags + { + // 无标志 + flagNone = 0, + + // 允许选择 + flagNoSelect = 0x00000001, + + // 锁定位置 + flagLockPos = 0x00000002, + + // 锁定尺寸 + flagLockSize = 0x00000004, + + // 内容只读(不递归) + flagReadOnly = 0x00000008, + + // 自动尺寸(Hint). + // 尺寸由子图元和内容决定, 在doLayout时自动改变. + flagAutoSize = 0x00000010, + + // 紧缩(Hint). + // 图元趋向于占较小空间, 通常和flagAutoSize配合使用 + flagShrink = 0x00000020, + + // 不可见 + flagHidden = 0x00000040, + + // 已经选中 + flagSelected = 0x00000080, + + // 不剪裁 + flagNoClip = 0x00000100, + + // 坐标偏移(偏移只对子孙图元有作用) + flagLocalCoord = 0x00000200, + + // 强制重新布局 + flagForceLayout = 0x00000400, + + // 可能需要重新布局(非强制) + flagNeedLayout = 0x00000800, + + // 可手动删除 + flagManualDelete = 0x00001000, + + // 静态策略, 不随着选中状态改变 (已经废弃, 请不要再用) + flagStaticPolicy = 0x00002000, + + // 平凡的策略, 不浮在最上层 + flagOrdinaryPolicy = 0x00004000, + + // (在添加到别的图元里时)不自动重新布局 + flagNoAutoLayout = 0x00008000, + + // 在绘图时不开启反走样 + flagNoAntiAlias = 0x00010000 + + }; + + // 指定父节点, 并加自动入父节点的子图元列表中 + virtual void setParent(IxRenderItem* pParent) = 0; + + // 获取图元的显示名 + virtual QString getTitle() const = 0; + + // 获取图元的图标 + virtual QIcon getIcon() const = 0; + + // 递归绘图, 含自身和子图元 + virtual void paint(QPainter* painter, const ZxPaintParam& param) = 0; + + // 克隆图元 + virtual IxRenderItem* clone() const = 0; + + // 获取图元基础边框(位置) + virtual QRectF getBounds() const = 0; + + // @endcode + virtual void setBounds(const QRectF& rect, bool bSendEvent = true) = 0; + + // 设置图元边框 + virtual void setBounds(float x, float y, float width, float height, bool bSendEvent = true) = 0; + + // 判断图元是否完全相等 + virtual bool isEqual(const IxRenderItem* pAnother) const = 0; + + // 辅助函数, 用以简化isEqual的实现 + template + static inline bool isSameTypeAndSameParent(const T_item* _this, const IxRenderItem* _p) + { + const T_item* p = dynamic_cast(_p); + + if (p == 0 + || typeid(*p) != typeid(const T_item) + || typeid(*_this) != typeid(const T_item) ) // 必须都是T_item类型, 派生类也不行 + { + return false; + } + + if (_this->getParent() != p->getParent()) // parent 不同不认为是同一个图元 + { + return false; + } + + return true; + } + +}; + + + + + diff --git a/Include/iBase/Interface/IxSerDes.h b/Include/iBase/Interface/IxSerDes.h new file mode 100644 index 0000000..dbef836 --- /dev/null +++ b/Include/iBase/Interface/IxSerDes.h @@ -0,0 +1,18 @@ +#pragma once + +#include "IxInterface.h" + +class ZxSerializer; + +// 序列化支持 +class IxSerDes + : virtual public IxInterface +{ +public: + + // 保存 + virtual void onSerialize(ZxSerializer * ser) = 0; + + // 加载 + virtual void onDeserialize(ZxSerializer * ser) = 0; +}; diff --git a/Include/iBase/Interface/IxSystem.h b/Include/iBase/Interface/IxSystem.h new file mode 100644 index 0000000..4ec3291 --- /dev/null +++ b/Include/iBase/Interface/IxSystem.h @@ -0,0 +1,46 @@ +#pragma once + +#include + +#include "IxInterface.h" + +class QSettings; +class QString; + +// ZxSystem对象接口 +class IxSystem + : virtual public IxInterface +{ +public: + + // 初始化 + virtual bool init() = 0; + + // 获取指定模块的QSettings对象 + virtual QSettings* getSettings(const QString& sModule, \ + bool bResetIfExists = false) = 0; + + // 获取软件版本 + virtual QString getAppVer() const = 0; + + // 动态加载图标 + virtual QIcon loadIcon(const QString& name, \ + int wh = -1) const = 0; + + // 加载css + virtual void loadCss(const QString& cssFile = "", \ + QApplication* pApp = NULL) const = 0; +}; + +// 权宜之计,没有更好的方式 +#ifndef I_BASE_EXPORT +# include +# if defined(I_BASE_LIBRARY) +# define I_BASE_EXPORT Q_DECL_EXPORT +# else +# define I_BASE_EXPORT Q_DECL_IMPORT +# endif +#endif + +// 整个System变量 +I_BASE_EXPORT IxSystem* getZxSystem(); diff --git a/Include/iBase/iAppBase/ZxSingleInstance.h b/Include/iBase/iAppBase/ZxSingleInstance.h new file mode 100644 index 0000000..718c4a1 --- /dev/null +++ b/Include/iBase/iAppBase/ZxSingleInstance.h @@ -0,0 +1,44 @@ +#pragma once + +#include +#include "iAppBase_global.h" + +class QString; +class QStringList; +class QLocalServer; +class QWidget; + +// 单例 +class I_APPBASE_EXPORT ZxSingleInstance : public QObject +{ + Q_OBJECT + +public: + + ZxSingleInstance(const QString& sServerName); + ~ZxSingleInstance(); + + // 检查前一个进程, 如果存在则把命令参数传过去. + bool redirect(int argc, char** argv); + + // 启动服务器 + bool startServer(); + +protected slots: + + // 处理命令行, 并返回相关的界面元素 + virtual QWidget* onCommand(const QStringList &args); + +private slots: + + void onNewConnection(); + +private: + + QString m_sServerName; + QLocalServer* m_pServer; +}; + + + + diff --git a/Include/iBase/iAppBase/ZxSystem.h b/Include/iBase/iAppBase/ZxSystem.h new file mode 100644 index 0000000..4b9be3d --- /dev/null +++ b/Include/iBase/iAppBase/ZxSystem.h @@ -0,0 +1,69 @@ +#pragma once + +#include +#include +#include "ZxDynamic.h" + +#include "iAppBase_global.h" + +QT_BEGIN_NAMESPACE +class QSettings; +class QTimer; +class QAction; +QT_END_NAMESPACE + +// 存放全局对象/路径等信息 +class I_APPBASE_EXPORT ZxSystem + : public QObject + , virtual public IxSystem + , virtual public IxDynObj +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSystem(); + ~ZxSystem(); + + // 初始化 + virtual bool init(); + + // 配置载体 + virtual QSettings* getSettings(const QString& sModule, \ + bool bResetIfExists = false); + + // 版本 + virtual QString getAppVer() const; + + // 图标加载(缓存) + virtual QIcon loadIcon(const QString& name, int wh = -1) const; + + // 加载css + virtual void loadCss(const QString& cssFile = "", \ + QApplication* pApp = NULL) const; + +private slots: + + void onAppDestroyed(); + +private: + + void onIdle(); + +private: + + // 配置载体 + QMap m_mapSettings; + + // 空闲处理 + QObject* m_pIdleEventFilter; + bool m_bInited; + + friend class ZxModuleInfo; + friend class ZxIdleEventFilter; +}; + + + + diff --git a/Include/iBase/iAppBase/iAppBase_global.h b/Include/iBase/iAppBase/iAppBase_global.h new file mode 100644 index 0000000..349b88a --- /dev/null +++ b/Include/iBase/iAppBase/iAppBase_global.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#if defined(I_APPBASE_LIBRARY) +# define I_APPBASE_EXPORT Q_DECL_EXPORT +#else +# define I_APPBASE_EXPORT Q_DECL_IMPORT +#endif + + + + + + diff --git a/Include/iBase/iBase/ZxDynamic.h b/Include/iBase/iBase/ZxDynamic.h new file mode 100644 index 0000000..c7e69ca --- /dev/null +++ b/Include/iBase/iBase/ZxDynamic.h @@ -0,0 +1,63 @@ +#pragma once + +#include "iBase_global.h" +#include + +class QLibrary; +class QString; +class QStringList; + +// 对象工厂方法 +typedef IxDynObj* (*ZX_OBJECT_CREATOR)(); + +// 内部辅助实现 +struct I_BASE_EXPORT __RegisterObjectCreatorEx +{ + __RegisterObjectCreatorEx(const char* _file, int _line, const char* _tagName, const char* _className, ZX_OBJECT_CREATOR _creator); +}; + +// 查找动态对象的工厂方法 +I_BASE_EXPORT ZX_OBJECT_CREATOR zxFindDynamicCreator(const char* _tagName); + +// 这是zxDynamicCreate的别名, 请不要在应用层直接使用. +I_BASE_EXPORT IxDynObj* _zxDynamicCreate(const char* _tagName); + +// 创建动态对象 +inline static IxDynObj* zxDynamicCreate(const char* _tagName) +{ + return _zxDynamicCreate(_tagName); +} + +// 创建动态对象, 并转换为指定类型 +template +inline static T zxDynamicCreate(const char* _tagName) +{ + IxDynObj * p = _zxDynamicCreate(_tagName); + T o = dynamic_cast(p); + if (p && !o) + { + Q_ASSERT_X(0, __FUNCTION__, "incompatible object type."); + delete p; + } + return o; +} + +// 声明动态创建 +# define ZX_DECLARE_DYNAMIC \ + public: \ + const char* getClassName() const; \ + const char* getTagName() const; \ + private: + +// 实现动态创建 +// ZX_DEFINE_DYNAMIC( MyClass, ZxMyClass ) +# define ZX_DEFINE_DYNAMIC(tagName, className) \ + extern "C" Q_DECL_EXPORT IxDynObj * _zx_dycreate_##tagName() {return new className();}\ + static struct __RegisterObjectCreatorEx _zx_dyregister_##tagName(__FILE__, __LINE__, #tagName, #className, &_zx_dycreate_##tagName);\ + const char* className::getClassName() const { return #className;}\ + const char* className::getTagName() const { return #tagName;} + +// 加载动态链接库(DLL) +//I_BASE_EXPORT QLibrary* zxLoadDll(const QString& baseName); + + diff --git a/Include/iBase/iBase/ZxGraphviz.h b/Include/iBase/iBase/ZxGraphviz.h new file mode 100644 index 0000000..96bcc46 --- /dev/null +++ b/Include/iBase/iBase/ZxGraphviz.h @@ -0,0 +1,115 @@ +#pragma once +#include +#include +#include +#include +#include + +class QTextStream; +class IxDynObj; + +// 导出Graphviz图形的工具,内部使用 +// http://www.graphviz.org +class I_BASE_EXPORT ZxGraphViz +{ +public: + + class Obj + { + public: + QString tooltip; + QString label; + QString color; + QString labelColor; + protected: + Obj(); + virtual ~Obj(); + int order; + virtual void _export(QTextStream & stream) = 0; + static bool compare(Obj * a, Obj * b); + friend class ZxGraphViz; + }; + + class Node : public Obj + { + public: + // box polygon ellipse circle + // point egg triangle plaintext + // diamond trapezium ellipse house + // pentagon hexagon septagon octagon + // doublecircle doubleoctagon tripleoctagon invtriangle + // invtrapezium invhouse Mdiamond Msquare + // Mcircle rect rectangle none + // note tab folder box3d + // component + QString shape; + const QString& getId() const; + private: + QString id; + int ancestor; + int descendant; + Node(); + ~Node(); + void _export(QTextStream & stream); + friend class ZxGraphViz; + }; + + class Edge : public Obj + { + public: + // "normal" "inv" + // "dot" "invdot" + // "odot" "invodot" + // "none" "tee" + // "empty" "invempty" + // "diamond" "odiamond" + // "ediamond" "crow" + // "box" "obox" + // "open" "halfopen" + // "vee" + QString arrowHead; // diamond ediamond vee + QString arrowTail; // + private: + Node* head; + Node* tail; + Edge(); + ~Edge(); + void _export(QTextStream & stream); + friend class ZxGraphViz; + }; + + ZxGraphViz(); + ~ZxGraphViz(); + //void save(const QString& sPath, bool bConvert = true, bool bShowConvertedInShell = true); + QString exportTempPicture(); + void exportTempToResPicture(); + + bool isAdded(IxGraphViz * p); + Node* getNode(IxGraphViz * p); + Node* addNode(IxGraphViz * p, int ancestor, int descendant); + Node* addWildNode(const QString& id); + Edge * addEdge(Node* head, Node* tail); + + // 理论上NULL只有一个, 会导致大量箭头汇集到这个NULL上. 所以我们的NULL是分开的, 和对象绑定. + Node* getNull(void * obj, quint64 id = 0); + + struct HT + { + Node* h; + Node* t; + bool operator==(const HT & r) const + { return h == r.h && t == r.t; } + bool operator<(const HT & r) const + { return h == r.h ? t < r.t : h < r.h; } + }; + + IxGraphViz * wrap(QObject* p); + +private: + void finish(); + bool finished; + Node* _node(const QString& id, bool &add); + QHash nodes; + QMap edges; + QHash qobjects; +}; diff --git a/Include/iBase/iBase/ZxPaintParam.h b/Include/iBase/iBase/ZxPaintParam.h new file mode 100644 index 0000000..81d6363 --- /dev/null +++ b/Include/iBase/iBase/ZxPaintParam.h @@ -0,0 +1,64 @@ +#pragma once + +#include +#include +#include +#include + +#include + +#include "iBase_global.h" + +class ZxRenderView; +class QPainter; +class ZxRenderItem; + +// 图件过滤器(函数) +typedef std::function ZxFilterFun; + +// 用过滤器来过滤图件 +static inline bool ZxMatchFilter(ZxFilterFun filter, const ZxRenderItem * p) +{ return filter ? (p ? filter(p) : false) : true; } + +// 绘图参数 +class I_BASE_EXPORT ZxPaintParam +{ +public: + + ZxPaintParam(ZxRenderView* pView, QPainter* painter); + + ZxRenderView* getView() const { return pView; } + +public: + + // 剪裁区域 + QRectF clipRect; + + // 不使用快照 + bool noSnapshot : 1; + + // 强制开启符号缓存速度优化(正常情况下只在窗口上开启) + bool forceSymbolCache : 1; + + // 控制点的(建议)尺寸 + float handleSize; + + // 绘制自身条件. 不满足条件的不画自身, 但不影响子图件的绘制 + ZxFilterFun selfFilter; + + // 绘制子图件的条件. 不满足条件的不画子图件, 但不影响自身的绘制 + ZxFilterFun childrenFilter; + + // 视图的缩放率 + float viewZoom; + + // 是否在导出pdf + bool exportingPdf; + + // 替换前景色 + QColor* overrideColor; + +private: + + ZxRenderView* pView; +}; diff --git a/Include/iBase/iBase/ZxPathIndexer.h b/Include/iBase/iBase/ZxPathIndexer.h new file mode 100644 index 0000000..93c7f09 --- /dev/null +++ b/Include/iBase/iBase/ZxPathIndexer.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include "iBase_global.h" + +class ZxPathIndexerImp; + +// 文件索引器 +class I_BASE_EXPORT ZxPathIndexer +{ +public: + + ZxPathIndexer(const QString& sFolder, \ + const QStringList& filters, \ + const QString& sPrefix = QString()); + ~ZxPathIndexer(); + + QString getPath(QString sBaseName) const; + QStringList getBaseNames(bool bLower = true) const; + +protected: + + ZxPathIndexerImp* imp; +}; + + + + diff --git a/Include/iBase/iBase/ZxSerializer.h b/Include/iBase/iBase/ZxSerializer.h new file mode 100644 index 0000000..83c1cd2 --- /dev/null +++ b/Include/iBase/iBase/ZxSerializer.h @@ -0,0 +1,383 @@ +#pragma once + +#include +#include +#include + +#include "ZxDynamic.h" +#include "ZxXpf.h" + +class ZxXpfNode; +class ZxXpfDoc; + +// 序列化器 +class I_BASE_EXPORT ZxSerializer +{ +public: + enum Flags + { + flagTemplate = 0x01, // 模版 + _reserve_1 = 0x02, + _reserve_2 = 0x04, + _reserve_3 = 0x08 + }; + + ZxSerializer(ZxXpfDoc* p, bool write); + + // 把对象加载序列化器中, 并返回对象的id + unsigned int addObject(IxDynObj* p); + + // 获取对象的id. + // 如果对象未被序列化, 则id是不确定的, 此函数将返回0 + unsigned int getObjectId(IxDynObj* p); + unsigned int getObjectIndex(IxDynObj* p); + + // 获取对象指针 + IxDynObj* getObjectById(unsigned int id); + IxDynObj* getObjectByIndex(unsigned int index); + + // 保存整棵树 + void save(const IxDynObj* root); + + // 返回整棵树 + IxDynObj* load(); + + // 获取当前Xpf节点指针 + ZxXpfNode* getXpfNode(); + + // 获取当前Xpf节点指针 + ZxXpfNode* node(); + + // 节点指针压栈进入指定子节点 + ZxXpfNode* push(const QString& sName); + + // 节点指针压栈进入指定节点 + ZxXpfNode* push(ZxXpfNode* pChildNode); + + // 节点指针压栈进入匿名节点 + ZxXpfNode* push(); + + // 节点指针弹栈退出到父节点 + ZxXpfNode* pop(); + + // 保存Variant的数据 + void setAttribute(const QString& key, const QVariant& v); + + // 以Variant的方式读取指定数据 + const QVariant& getAttribute(const QString& key); + + // 保存对象指针 + template + void write(QString key, T* p) + { + Q_ASSERT_X(p==0 || dynamic_cast(p) != 0, __FUNCTION__, "Pointer is not IxDynObj type. "); + Q_ASSERT(m_bWrite); + unsigned int id = addObject(p); + setAttribute(key, id); + } + + // 读取对象指针 + template + void read(QString key, T*& p) + { + Q_ASSERT(!m_bWrite); + unsigned int id = getAttribute(key).toUInt(); + delete p; + p = dynamic_cast(getObjectById(id)); + Q_ASSERT_X(p==0 || dynamic_cast(p) != 0, __FUNCTION__, "Pointer is not IxDynObj type. "); + } + + // 保存普通变量 + // @note 枚举变量请用 write() + template + void write(QString key, const T& v) + { + Q_ASSERT(m_bWrite); + setAttribute(key, QVariant::fromValue(v)); + } + + // 读取普通变量 + // @note 枚举变量请用 read() + template + void read(QString key, T& v) + { + Q_ASSERT(!m_bWrite); + const QVariant& v0 = getAttribute(key); + + if (v0.isValid()) //added 20171129 zx + v = v0.value(); + } + + // 把T1类型的变量转换为T0类型保存 + // @code + // ser->write(m_lineStyle) + // @endcode + template + void write(QString key, const T1& v) + { + Q_ASSERT(m_bWrite); + setAttribute(key, QVariant::fromValue((T0)v)); + } + + // 把变量作为T0类型读取, 再转换为T1返回 + // @code + // ser->read(m_lineStyle) + // @endcode + template + void read(QString key, T1& v) + { + Q_ASSERT(!m_bWrite); + const QVariant& v0 = getAttribute(key); + v = (T1)v0.value(); + } + + // 以二进制块(QByteArray)方式保存数组 + template + void writeBin(QString key, const QVector& vec) + { + QByteArray buf((const char*)vec.data(), vec.size()* sizeof(T)); + write(key, buf); + } + + // 以二进制块(QByteArray)方式读取数组 + template + void readBin(QString key, QVector& vec) + { + QByteArray buf; + read(key, buf); + Q_ASSERT(buf.size() % sizeof(T) == 0); + vec.resize(buf.size() / sizeof(T)); + memcpy(vec.data(), buf.data(), buf.size()); + } + + // 以二进制块(QByteArray)方式保存列表 + template + void writeBin(QString key, const QList& list) + { + const int count = list.size(); + const int bytes = count* sizeof(T); + QByteArray buf; + buf.resize(bytes); + T* p = (T*) buf.data(); + + for(auto it = list.begin(); it != list.end(); ++it, ++p) + { + *p = *it; + } + write(key, buf); + } + + // 以二进制块(QByteArray)方式读取列表 + template + void readBin(QString key, QList& list) + { + QByteArray buf; + read(key, buf); + Q_ASSERT(buf.size() % sizeof(T) == 0); + list.clear(); + const T* p0 = (const T*) buf.data(); + auto p1 = p0 + buf.size() / sizeof(T); + for(auto p = p0; p < p1; p++) + { + list.append(*p); + } + } + + // 保存对象指针数组 + template + void write(QString key, const QVector& vec) + { + Q_ASSERT(m_bWrite); + if (!vec.isEmpty()) + { + push(key); + int n = vec.count(); + for(int i=0; iaddUnnamedChild(id); + } + pop(); + } + } + + // 读取对象指针数组 + template + void read(QString key, QVector& vec) + { + Q_ASSERT(!m_bWrite); + vec.clear(); + ZxXpfNode* node = m_pNode->findChild(key, false); + if (node) + { + const QVector& nodes = node->getChildren(); + int n = nodes.count(); + vec.reserve(n); + for(int i=0; igetData().toUInt(); + T* p = dynamic_cast(getObjectById(id)); + vec.push_back(p); + } + } + } + + // 保存对象指针列表 + template + void write(QString key, const QList& vec) + { + Q_ASSERT(m_bWrite); + if (!vec.isEmpty()) + { + push(key); + int n = vec.count(); + for(int i=0; iaddUnnamedChild(id); + } + pop(); + } + } + + // 读取对象指针列表 + template + void read(QString key, QList& vec) + { + Q_ASSERT(!m_bWrite); + vec.clear(); + ZxXpfNode* node = m_pNode->findChild(key, false); + if (node) + { + const QVector& nodes = node->getChildren(); + int n = nodes.count(); + vec.reserve(n); + for(int i=0; igetData().toUInt(); + T* p = dynamic_cast(getObjectById(id)); + vec.push_back(p); + } + } + } + + // 保存普通非动态对象数组(例如QVector) + template + void write(QString key, const QVector& vec) + { + Q_ASSERT(m_bWrite); + if (!vec.isEmpty()) + { + push(key); + int n = vec.count(); + for(int i=0; isetData(vec[i]); + m_pNode->addChild(p); + } + pop(); + } + } + + // 读取普通非动态对象数组(例如QVector) + template + void read(QString key, QVector& vec) + { + Q_ASSERT(!m_bWrite); + vec.clear(); + ZxXpfNode* node = m_pNode->findChild(key, false); + if (node) + { + const QVector& nodes = node->getChildren(); + int n = nodes.count(); + vec.reserve(n); + for(int i=0; igetData().value() ); + } + } + } + + // 保存普通非动态对象列表(例如QList) + template + void write(QString key, const QList& vec) + { + Q_ASSERT(m_bWrite); + if (!vec.isEmpty()) + { + push(key); + int n = vec.count(); + for(int i=0; isetData(vec[i]); + m_pNode->addChild(p); + } + pop(); + } + } + + // 读取普通非动态对象列表(例如QList) + template + void read(QString key, QList& vec) + { + Q_ASSERT(!m_bWrite); + vec.clear(); + ZxXpfNode* node = m_pNode->findChild(key, false); + if (node) + { + const QVector& nodes = node->getChildren(); + int n = nodes.count(); + for(int i=0; igetData().value() ); + } + } + } + + // ------------------- + + // 是否模版模式 + bool isTemplate() const; + + // 设置模版模式 + void setTemplate(bool b); + + // Xpf格式版本号 + quint32 getXpfVer() const; + + // 文档类型 + QString getDocType() const; + void setDocType(const QString& sDocType); + + // 文档标识 + quint32 getDocFlags() const; + void setDocFlags(quint32 flags, bool bSet); + + // 应用层的文件版本号 + quint32 getDocVer() const; + void setDocVer(quint32 nVersion); + + // 8位数日期 + quint32 getDocDate() const; + void setDocDate(quint32 nDate); + + unsigned int objectIndexToId(unsigned int index) const; + unsigned int objectIdToIndex(unsigned int id) const; + bool isObjectId(unsigned int n) const; // NULL的id也返回true + bool isObjectIndex(unsigned int n) const; // 0 也返回true + +private: + + QHash m_hashObjIds; + QVector m_vecObjs; + + ZxXpfDoc* m_pDoc; + ZxXpfNode* m_pNode; + bool m_bWrite; +}; diff --git a/Include/iBase/iBase/ZxXpf.h b/Include/iBase/iBase/ZxXpf.h new file mode 100644 index 0000000..9f97ff2 --- /dev/null +++ b/Include/iBase/iBase/ZxXpf.h @@ -0,0 +1,4 @@ + +#pragma once + +#include "ZxXpfDoc.h" diff --git a/Include/iBase/iBase/ZxXpfDoc.h b/Include/iBase/iBase/ZxXpfDoc.h new file mode 100644 index 0000000..6ab5828 --- /dev/null +++ b/Include/iBase/iBase/ZxXpfDoc.h @@ -0,0 +1,71 @@ + +#pragma once + +#include "ZxXpfNode.h" + +class QFile; + +// XPF文件格式Doc根节点 +class I_BASE_EXPORT ZxXpfDoc : public ZxXpfNode +{ +public: + + ZxXpfDoc(const QString& sRootNodeName = QString()); + + // 加载 + bool load(const QString& path); + bool load(QFile& file); + bool load(QDataStream& stream); + + // 保存 + bool save(const QString& path); + bool save(QFile& file); + bool save(QDataStream& stream); + + // Xpf版本号 + quint32 getXpfVer() const; + + // 应用层的文件版本号. + quint32 getDocVer() const; + void setDocVer(quint32 nVersion); + + // 8位数日期 + quint32 getDocDate() const; + void setDocDate(quint32 nDate); + + // 文档类型 + QString getDocType() const; + void setDocType(const QString& sDocType); + + // 文档标识 + quint32 getDocFlags() const; + void setDocFlags(quint32 flags, bool bSet); + + // 加载 + bool loadTree(QDataStream& stream); + bool loadHeader(QDataStream& stream); + bool loadHeader_New(QDataStream& stream); + bool loadHeader_Old(QDataStream& stream); + + // 保存 + bool saveHeader(QDataStream& stream); + bool saveHeader_New(QDataStream& stream); + + // 每次序列化版本更改后,要修改本时间 + int getThisDate(); + +private: + + // 涉及的一些内部变量,序列化相关信息 + quint32 m_nXpfVer; + quint32 m_nDocVer; + quint32 m_nDocDate; + quint32 m_nDocFlags; + char m_sDocType[17]; + int m_nQtStreamVer; + char m_chCompressFlag; +}; + + + + diff --git a/Include/iBase/iBase/ZxXpfNode.h b/Include/iBase/iBase/ZxXpfNode.h new file mode 100644 index 0000000..a77cde7 --- /dev/null +++ b/Include/iBase/iBase/ZxXpfNode.h @@ -0,0 +1,89 @@ + +#pragma once + +#include "iBase_global.h" + +#include +#include + +class QDataStream; + +// XPF文件格式节点 +class I_BASE_EXPORT ZxXpfNode +{ +public: + ZxXpfNode(); + virtual ~ZxXpfNode(); + +public: + // 获取根节点 + ZxXpfNode* getRoot() const; + + // 获取父节点 + ZxXpfNode* getParent() const; + + // 获取节点名字 + const QString& getName() const; + + // 设置节点名字 + void setName(const QString& sName); + +#ifdef QT_DEBUG + // 把树结构以文本方式输出到Debug窗口,暂未启用 + void dump(int indent = 0); +#endif + + // 添加/插入子节点 + ZxXpfNode* addChild(ZxXpfNode* pNode); + ZxXpfNode* addChild(ZxXpfNode* pNode, int nPos); + ZxXpfNode* addChild(ZxXpfNode* pNode, ZxXpfNode* pInsertBefore); + ZxXpfNode* addChild(const QString& sName); + ZxXpfNode* addChild(const QString& sName, const QVariant& data); + + // 添加无名子节点, 并在子节点中存入数据. + ZxXpfNode* addUnnamedChild(const QVariant& data); + + // 查找指定名字的节点. + ZxXpfNode* findChild(const QString& sName, bool bCreateIfNotFound = false); + + // 当前节点的数据 + void setData(const QVariant& d); + const QVariant& getData() const; + + // 从树上移除节点. + void detach(); + + // 删除当前结点数据并删除所有子节点 + void clear(); + + // 获取/设定指定属性. + const QVariant& getAttribute(const QString& key); + QVariant getAttribute(const QString& key, const QVariant& defaultValue); + void setAttribute(const QString& key, const QVariant& v); + + // 克隆 + virtual ZxXpfNode* clone() const; + void makeIndex(ZxXpfNode* p); + + // 获取子节点 + const QVector& getChildren() const; + typedef QHash ChildrenMap; + ChildrenMap* getChildrenMap(); + void releaseMap(); + + // 存取/加载入口 + bool loadNode(QDataStream& stream); + bool saveNode(QDataStream& stream); + +protected: + + // 涉及的一些内部变量 + int m_nProperChildCount; + QString m_sName; + QVariant* m_pData; + ZxXpfNode* m_pParent; + ChildrenMap* m_pChildrenMap; + QVector m_vecChildren; + + friend class ZxXpfDoc; +}; diff --git a/Include/iBase/iBase/iBase_global.h b/Include/iBase/iBase/iBase_global.h new file mode 100644 index 0000000..4085aa3 --- /dev/null +++ b/Include/iBase/iBase/iBase_global.h @@ -0,0 +1,29 @@ +#pragma once + +// QT +#include +#include +#include +#include +#include +#include +#include + +#include + +// MACRO +#ifndef I_BASE_EXPORT +# if defined(I_BASE_LIBRARY) +# define I_BASE_EXPORT Q_DECL_EXPORT +# else +# define I_BASE_EXPORT Q_DECL_IMPORT +# endif +#endif + +/// Icon +I_BASE_EXPORT QIcon zxLoadIcon(const QString& name, int wh = -1); + +/// 该函数返回的函数并不是exe程序的名称,而是 +/// 在exe中设置的名称如:a.setApplicationName("WTAI"); +/// 比如 iWTAI_Navi.exe 程序,返回的 可能是WTAI +I_BASE_EXPORT QString zxGetAppID(); diff --git a/Include/iBase/iBase/zxCrashHandler.h b/Include/iBase/iBase/zxCrashHandler.h new file mode 100644 index 0000000..c75e2e5 --- /dev/null +++ b/Include/iBase/iBase/zxCrashHandler.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include "iBase_global.h" + +// 异常捕获 +class I_BASE_EXPORT zxCrashHandler : public QObject +{ + Q_OBJECT + +public: + + zxCrashHandler(); + ~zxCrashHandler(); + + static void registerHandler(); +}; diff --git a/Include/iBase/iDefines/Commands.h b/Include/iBase/iDefines/Commands.h new file mode 100644 index 0000000..5b55c6c --- /dev/null +++ b/Include/iBase/iDefines/Commands.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include + +//////////////////////////////////////////////////////// +// 通用的按钮 + +//////////////////////////////////////////////////////// diff --git a/Include/iBase/iDefines/Defines.h b/Include/iBase/iDefines/Defines.h new file mode 100644 index 0000000..3fa1c94 --- /dev/null +++ b/Include/iBase/iDefines/Defines.h @@ -0,0 +1,136 @@ + +#pragma once + +#include "qglobal.h" + +#if (QT_VERSION >= 0x050000) +#include +#define QStringCH QStringLiteral +#else +#include +#define QStringCH QString::fromLocal8Bit +#endif + +#include "Commands.h" +#include "Macros.h" +#include "Enums.h" + +/// @brief 数值定义 +#define SYS_VALUE_INVALID -999.f +#define SYS_VALUE_INVALID1 -999.25f +#define SYS_VALUE_INVALID2 -9999.f +#define SYS_VALUE_MAX 1e32f +#define SYS_VALUE_MIN -1e32f +#define SYS_VALUE_ZERO_PLUS 1e-32f +#define SYS_VALUE_NULL SYS_VALUE_INVALID +#define SYS_VALUE_PI 3.14159265358979 + +/// @brief 数组定义 +typedef QVector VecFloat; +typedef QVector< QVector > VVecFloat; +typedef QVector VecDouble; +typedef QVector< QVector > VVecDouble; +typedef QVector VecInt; +typedef QVector VecString; +typedef QVector< QVector > VVecString; +typedef QVector VecVariant; +typedef QVector > VVecVariant; +typedef QVector VecPointF; +#define VecDataObjects QVector +#define ZxDataObjectList QList + +/// @brief 统一目录 +#define s_Dir_Bin "Bin" +#define s_Dir_Config "Config" +#define s_Dir_Doc "Doc" +#define s_Dir_Release "Release" +#define s_Dir_Res "Res" +#define s_Dir_Temp "Temp" +#define s_Dir_Unit "Config/Unit" + +/// @brief 窗口视图大小 +#define s_Zoom_Tag_FitWindow QObject::tr("FitWindow") +#define s_Zoom_Tag_FitWidth QObject::tr("FitWidth") +#define s_Zoom_Tag_FitHeight QObject::tr("FitHeight") + +/// @brief 配置文件 +#define zxConfigIni zxAppID + "Config.ini" +#define zxLoginIni zxAppID + "Login.ini" +#define zxUnitFile "UnitDefault.xml" + +/// @brief 常量定义,比如配置环境应用 +#define s_Recent_Projects "recentProjects" +#define s_Recent_Dirs "recentDirectories" +#define s_Last_Project "lastProject" +#define s_Last_Dir "lastDir" +#define s_Last_Url "lastUrl" +#define s_Current_Project "currentProject" +#define s_Current_Project_Dir "currentProjectDir" +#define s_Current_WellCode "currentWellCode" +#define s_Current_WellName "currentWellName" +#define s_Project_Directory "projectDirectory" +#define s_Current_ModelSeries "CurModelSeries" + +// 井流体性质,油气水井 +#define s_Tag_Oil_EN "Oil" +#define s_Tag_Gas_EN "Gas" +#define s_Tag_Water_EN "Water" +#define s_Tag_Oil_CN QStringCH("油") +#define s_Tag_Gas_CN QStringCH("气") +#define s_Tag_Water_CN QStringCH("水") + +#define s_Axis_UnitX "hr" +#define s_Axis_UnitY_P "MPa" +#define s_Axis_UnitY_F "m^3/d" +#define s_Axis_UnitY_O "m^3/d" +#define s_Axis_UnitY_G "10^4*m^3/d" +#define s_Axis_UnitY_W "m^3/d" +#define s_Axis_UnitY_PGas "MPa^2/cp" + +// WTAI大的模型分类,导航中选定等,目前暂时保留,后续会逐步屏蔽 +#define s_Tag_LP_EN "LP" +#define s_Tag_HW_EN "HW" +#define s_Tag_PF_EN "PF" +#define s_Tag_SR_EN "SR" +#define s_Tag_LP_CN QObject::tr("Low permibility") +#define s_Tag_HW_CN QObject::tr("Horizational well") +#define s_Tag_PF_CN QObject::tr("Prod driven") +#define s_Tag_SR_CN QObject::tr("Special reservoirs") + +/// @brief 其它 +#define s_Zoom_Tag_FitWindow QObject::tr("FitWindow") +#define s_Zoom_Tag_FitWidth QObject::tr("FitWidth") +#define s_Zoom_Tag_FitHeight QObject::tr("FitHeight") + +#define s_Tag_InValid_Data "---" +#define s_Infinite_Max QStringCH("∞") +#define s_Infinite_Min QStringCH("-∞") + +// 保存时提示相关 +#define s_Save_Option "saveOption" +#define s_Save_Option_NotUse "NotUse" +#define s_Save_Option_Use "Use" +#define s_Save_Option_YesAll "YesAll" +#define s_Save_Option_NoAll "NoAll" + +#define s_Infinite_Max QStringCH("∞") +#define s_Infinite_Min QStringCH("-∞") + +// 配置来源,分别对应 SysCOnfig、工区下面,用户指定 +#define s_Config_From_Soft QObject::tr("Soft system used") +#define s_Config_From_Project QObject::tr("Current project used") +#define s_Config_From_User QObject::tr("Customed by user") + +// 线程管理 +#define s_Tag_Thread_Pause QObject::tr("Pause") +#define s_Tag_Thread_Continue QObject::tr("Continue") +#define s_Tag_Thread_Quit QObject::tr("Quit") + +#define s_DbType_SqlLite "QSQLITE" +#define s_DbType_Oracle "QOCI" +#define s_DbType_DM "QDM" +#define s_DbType_KB "QKB" + +#define s_Conn_DbStr "ConnDbBaseStr" +#define s_Conn_DbStrExt "ConnDbBaseStrExt" + diff --git a/Include/iBase/iDefines/Enums.h b/Include/iBase/iDefines/Enums.h new file mode 100644 index 0000000..60c4bdc --- /dev/null +++ b/Include/iBase/iDefines/Enums.h @@ -0,0 +1,265 @@ +#pragma once + +#include +#include + +// Check状态模式,默认为0 +enum ActionCheckMode +{ + ACM_Default = 0,// 0-点击之后无状态,只是单纯的Action,比如 加载压力文件 + ACM_Instant, // 1:点击之后无状态,但需要把其它Checked去除,并且回归初始状态,如 恢复撤销、放大、缩小、原始状态 + ACM_MouseDelay, // 2: 点击之后有状态,但需要把其它Checked去除,一旦操作完成后,回归初始状态,如 插入点、插入特征线等 + ACM_Continuing, // 3:持续的状态,比如 水平缩放/垂直缩放,Move,框选缩放等,点击后,保持Check状态,一直到二次点击或点击其它 + ACM_Switch, // 4: 开关类的按钮状态,比如显示十字线,按下为开、再次按下为关,不影响其它按钮状态 + ACM_Unknown // 5:其它(TODO) +}; + +// 打印页面 +enum PrintZoomMode +{ + PZM_Original, //原始大小 + PZM_FitWidth, //整宽 + PZM_FitPage //整页 +}; + +// 解释参数应用场合 +enum ParaUseMode +{ + PUM_Free = 0, // 0-适用所有,不需配置 + PUM_Fit, // 1:仅仅适用处理拟合 + PUM_Design, // 2:仅仅适用试井设计 + PUM_ShowBySwap, // 3:可以显示可以不显示,通过按钮控制 + PUM_ShowAndResult,// 4:显示,不参与拟合 显示到结果(界面显示,拟合不拟合,结果显示) + PUM_Hide, // 5:不显示,不参与拟合,不显示到结果中(如 混合黏度) + PUM_Show, // 6: 显示,不参与拟合,不显示到结果中(孔隙,厚度非job里面) + PUM_Result, // 7: 不显示,不参与拟合,显示到结果中(探测半径、分流率) + // 20210908 Added + PUM_MultiPhase, // 8: 对于多相显示,单相不显示的情况 + PUM_Unknown +}; + +// 子窗体布局模式 +enum WndLayoutMode +{ + WLM_Vert = 0, //竖直布局,按照从左往右,全部竖直摆放 + WLM_Hori, //水平布局,按照从上到下,全部水平摆放 + WLM_Cell, //网格化,均匀布局(类似平铺) + WLM_Cascade, //累叠式布局 + WLM_UNKNOW //不知道类型 +}; + +// iGuiConfig中各种窗体 +enum ConfigWxType +{ + CWT_Base = 0, //基础界面(左侧树、右侧StackedWidget) + CWT_Sys, //系统基础(语言、样式表、自动保存、三桶油标准等) + CWT_Unit, //单位管理 + CWT_PlotTemplate, //绘图模板管理 + CWT_DefaultValue, //默认值配置管理工具 + CWT_ModelParas, //模型参数管理 + CWT_PtyManager, //属性配置管理工具 + CWT_BtnCmds, //功能按钮管理 + CWT_Icons, //图标及背景图片管理 + CWT_Paths, //成果路径管理 + CWT_AlgoSetting, //算法配置 + CWT_XpfEdit, //XpfEdit + CWT_Help, //帮助及提示 + + CWT_Unknown +}; + +// 拟合类型 +enum DataFittingType +{ + EXP = 0,//0,指数 + LINE, //1 线性 + LOG, //2 对数 + POLY, //3 一元多次 + POW //4 乘幂 +}; + +// 坐标轴类型 +enum AxisType +{ + AXIS_Log = 0, //对数(float) + AXIS_Linear, //线性(float) + AXIS_Int, //整形 + AXIS_Date, //日期 + AXIS_Str, //字符串 + AXIS_Unknown +}; +#define AXIS_Float AXIS_Linear + +// 坐标轴在图形中的位置, +enum AxisPos +{ + AP_Left = 0,//左侧(y) + AP_Top, //上侧(x) + AP_Right, //右侧(y) + AP_Bottom, //下侧(x) + AP_Unknown +}; + +// 对于对象的HitTest模式 +enum ObjHitOption +{ + OHO_Point = 0,//击中了点,需要记录第几个点 + OHO_Bound, //击中了边,需要记录第几条边 + OHO_Inner, //击中了内部,如多边形内部、文本内部 + OHO_JustHit, //击中上面三者之一,但根据对象属性,只能选择不能移动 + OHO_None //未击中 +}; + +// 对于Rect对象的HitTest模式 +enum RectPos +{ + TOPLEFT = 0, + TOP, + TOPRIGHT, + RIGHT, + BOTTOMRIGHT, + BOTTOM, + BOTTOMLEFT, + LEFT, + INNER, + OUTER +}; + +// Object对象类型 +enum PlotObjectType +{ + POT_None = 0, // + + POT_Point, //点,虚拟点 + POT_Line, //线 + POT_LineSlr, //特征线 Special Line + POT_LineSpecial, //ZXF2024特殊特征线(斜率1和斜率0的两天线合并成一个) + POT_PointSlr, + POT_LineParallel,//平行线 + POT_Rect, //矩形 + POT_Polygon, //多边形 + POT_BandV, //竖直Band + POT_BandH, //水平Band + POT_Text, //文本 + POT_Image, //图片 + + POT_Curve, //曲线 + POT_CurvePressure,//压力曲线 + POT_CurveDiscrete,//离散曲线(散点) + POT_CurveFlow, //流量曲线 + + POT_Bar, //柱状图曲线 + POT_Pie, //饼图曲线 + + POT_Traj, //井轨迹 + POT_Layer, //地层线 + POT_Zone, //地层 + POT_Fault, //断层 + POT_FaultPt, //断层点 + POT_TurnPt, //旋转点 + + POT_SubLayer, //小层线 + POT_SubZone, //小层 + + POT_SquareLine, //方波曲线 + POT_SquareLayer, //地层线 + + + POT_Unknown +}; + +// 绘图视图操作模式 +enum PlotOperationMode +{ + opNone = 0, //None + + opZoomRectIn, //放大 + opZoomRectOut, //缩小 + opZoomRectInH, //水平放大 + opZoomRectOutH, //水平缩小 + opZoomRectInV, //竖直放大 + opZoomRectOutV, //竖直缩小 + + opMove, //移动 + + opSelectMulti, //通过框选对象 + + // 20170614 + opHitPoint, //鼠标选中点,然后把x方向的PF曲线上点标记出来 + opResetRect, //把Select、Erase、Exclude的点状态恢复到正常 + + opSelectPoint, //选择点 + opSelectRect, //通过框选选择点 + + opErasePoint, //擦除点,擦除就是删除 + opEraseRect, //通过框选后擦除点 + + opExcludePoint, //排除点,排除是不删除,但不参与回顾 + opExcludeRect, //通过框选后排除点 + + opInsertPoint, //增加点,虚拟点 + opInsertLine, //插入线 + opInsertLinkLine, //插入线 + + opInsertLineSlr, //插入特征线,这是试井专用,考虑不同的斜率,如1/2,0,-1/2等等 + opInsertLineParallel,//插入平行线,这是试井专用,两条线 + opInsertPointSlr, //插入特殊点 + + opInsertRect, //插入矩形 + opInsertPolygon, //插入多边形 + opInsertCurveFree, //插入随意曲线 + opInsertText, //插入文本 + opInsertImage, //插入图片 + opInsertBandV, //插入竖直Band + opInsertBandH, //插入水平Band + + //导向用 + opInsertLayer, //插入地层 + opInsertLayerPt, //插入地层旋转点 + opInsertFault, //插入断层 + + opSelectLayer, //选择地层 + opSelectLayerPt, //选择地层旋转点 + + opInsertSquareCurve, //插入层化编辑线 + opAddSquarePt, //添加层化编辑点 + opDelSquarePt, //删除层化编辑点 + + opInsertSquareLayer, //插入地层线 + + opUnknown +}; + +// 点选择的状态 +enum PointState +{ + psNormal = 0, //正常 + psErase, //擦除 + psExclude, //排除,不参与回归 + psSelected, //当前选中 + psInvalid, //不是有效点,如-999 + psErrorEqual, //错误的相等 + psErrorLess, //错误的(比前面时间小) + psUnkown // +}; +#define TableRowState PointState + +// 点模式的绘制形状 +enum ZxDotType +{ + DTS_NONE = 0, //0 + DTS_UpTriangle, + DTS_DownTriangle, + DTS_Circle, + DTS_Square, //4 + DTS_Diamond, + DTS_Cross, + DTS_Plus, + DTS_Star, + DTS_LeftTriangle, //9 + DTS_RightTriangle, + DTS_Rig, + DTS_TriangleWithLine, + DTS_CircleWithLine, + DTS_Arrow //14 +}; diff --git a/Include/iBase/iDefines/Macros.h b/Include/iBase/iDefines/Macros.h new file mode 100644 index 0000000..d1f5636 --- /dev/null +++ b/Include/iBase/iDefines/Macros.h @@ -0,0 +1,51 @@ +#pragma once + +#include +#include + +#define zxSystem (getZxSystem()) + +#define _isSame ZxBaseUtil::isSameStr +#define _isValid zxMathBase::isValidValue + +#define zxDbConn ZxDbSimple::getInstance()->getSimpleDb() +#define zxDbConnExt ZxDbSimple::getInstance()->getSimpleDbExt() +#define zxDbConnExtPtr ZxDbSimple::getInstance()->getSimpleDbExtPtr() +#define zxDbExtActivated ZxDbSimple::getInstance()->isDbExtActivated() + +#define zxLogRunD zxLogInstance::getInstance()->writeLogD +#define zxLogRunI zxLogInstance::getInstance()->writeLogI +#define zxLogRunF zxLogInstance::getInstance()->writeLogF +#define zxLogRunW zxLogInstance::getInstance()->writeLogW +#define zxLogOpen zxLogInstance::getInstance()->openLog +#define zxLogSave zxLogInstance::getInstance()->saveLog + +#define zxAppID zxLogInstance::getInstance()->getAppID() + +#define zxSetStatus zxSysUtils::getInstance()->setStatusText +#define zxGetWndSetting zxSysUtils::getInstance()->getWndSettings +#define zxParseCmds2ToolBar zxSysUtils::getInstance()->parseBtnCmd2ToolBar +#define zxParseCmdIDs2ToolBar zxSysUtils::getInstance()->parseBtnCmdID2ToolBar +#define zxGetCmdNameByID zxSysUtils::getInstance()->getCmdNameByID + +#define zxCurProject dynamic_cast(zxSysUtils::getCurProject()) +#define zxCurWell dynamic_cast(zxSysUtils::getCurWell()) + +#define xVecXmlTables zxSysUtils::getInstance()->m_vecXmlTables +#define xVecXmlAliasTables zxSysUtils::getInstance()->m_vecXmlAliasTables +#define xVecXmlCurveDict zxSysUtils::getInstance()->m_vecCurveDict + +#define xVecModelWbss zxSysUtils::getInstance()->m_vecModelWbss +#define xVecModelWels zxSysUtils::getInstance()->m_vecModelWels +#define xVecModelRess zxSysUtils::getInstance()->m_vecModelRess +#define xVecModelBdys zxSysUtils::getInstance()->m_vecModelBdys +#define xVecModelGroups zxSysUtils::getInstance()->m_vecModelGroups +#define xVecParaGroups zxSysUtils::getInstance()->m_vecParaGroups +#define xVecParaGroupSps zxSysUtils::getInstance()->m_vecParaGroupSps +#define xVecUnitGroups zxSysUtils::getInstance()->m_vecUnitGroups +#define xVecPvtParaItemGroups zxSysUtils::getInstance()->m_vecPvtParaItemGroups +#define xVecIprAlgItemGroups zxSysUtils::getInstance()->m_vecIprAlgItemGroups +#define xVecSpeciParam zxSysUtils::getInstance()->m_vecSpeciParam + +#define xVecCmdInfos zxSysUtils::getInstance()->m_vecCmdInfos +#define xVecBtnInfos zxSysUtils::getInstance()->m_vecBtnInfos diff --git a/Include/iBase/iLogs/iLogs_global.h b/Include/iBase/iLogs/iLogs_global.h new file mode 100644 index 0000000..3721c27 --- /dev/null +++ b/Include/iBase/iLogs/iLogs_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#if defined(I_LOGS_LIBRARY) +# define I_LOGSSHARED_EXPORT Q_DECL_EXPORT +#else +# define I_LOGSSHARED_EXPORT Q_DECL_IMPORT +#endif + + + + diff --git a/Include/iBase/iLogs/zxLogInstance.h b/Include/iBase/iLogs/zxLogInstance.h new file mode 100644 index 0000000..eed6be6 --- /dev/null +++ b/Include/iBase/iLogs/zxLogInstance.h @@ -0,0 +1,50 @@ +#pragma once + +#include +#include "Defines.h" +#include "iLogs_global.h" + +class I_LOGSSHARED_EXPORT zxLogInstance +{ +public: + // 获取对象,单例模式 + static zxLogInstance* getInstance(); + + // 关闭消耗 + static void release(); + + // 设置 + static void setLogEdit(QTextEdit* pTextEdit); + + // 写日志,分别对应 Debug Information Fatal Warning + void writeLogD(QString sLog); + void writeLogI(QString sLog); + void writeLogF(QString sLog); + void writeLogW(QString sLog); + void writeLog(const QString& msg); + + void openLog(); //打开日志 + void preSaveLog(); //当大于16M时,备份文件 + void saveLog(); //保存日志 + + // 该函数返回的函数并不是exe程序的名称,而是 + // 在exe中设置的名称如:a.setApplicationName("WTAI"); + // 比如 iWTAINavi.exe 程序,返回的 可能是WTAI + QString getAppID(); + +private: + + zxLogInstance(); + ~zxLogInstance(); + +private: + + static zxLogInstance* m_pLogInstance; + static QTextEdit* m_pLogEdit; + + QString m_sLogFile; +}; + + + + diff --git a/Include/iBase/iPlugin/ExcelEngine.h b/Include/iBase/iPlugin/ExcelEngine.h new file mode 100644 index 0000000..507eae8 --- /dev/null +++ b/Include/iBase/iPlugin/ExcelEngine.h @@ -0,0 +1,222 @@ +#pragma once + +#include "Defines.h" +#include "iPlugin_global.h" + +typedef unsigned int UINT; +class QAxObject; + +// 借用 enum RectPos 进行方向选择(四个) +#define XlsDirection RectPos + +// 基础Excel引擎 +class I_PLUGIN_EXPORT ExcelEngine : public QObject +{ + Q_OBJECT + +public: + + ExcelEngine(); + ~ExcelEngine(); + + /// @brief 开启Excel进程,这是通常最慢的一步 + bool runExcel(); + + /// @brief 获取excel的数据信息 + /// @note bAutoLoad是否自动加载首页信息 + virtual bool loadExcel(const QString& sFilePath, bool bAutoLoad = true); + + /// @brief 新建一个工作簿,方便后续另存 + virtual bool addWorkBook(QString sDefaultSheet = ""); + + /// @brief 激活sheet,不存在则创建,方便后续另存 + virtual bool activateWorkSheet(QString sSheetName, \ + bool bFirstIfNotExists = true, \ + bool bCreateIfNotExists = false); + + /// @brief 获取excel的Sheet页 + virtual bool getSheetNames(QStringList &listNames); + + /// @brief 设定操作的Sheet + /// @param nSheetIndex Sheet索引,从1开始 + /// @param sSheetName Sheet名称 + /// @note 以nSheetIndex为主,如果考虑sSheetName,此时需要把nSheetIndex=-1 + /// setDefaultSheet(-1, “sheet1”) + virtual bool setDefaultSheet(int nSheetIndex = 1, QString sSheetName = ""); + + /// @brief 获取excel的数据(组成的矩形网格),注:Excel的索引均是从1开始 + /// @param vvecData 获取到的数据 + /// @param nRowFrom Excel开始行,从1开始 + /// @param nColFrom Excel开始列,从1开始 + /// @param nRowTo Excel结束行,从1开始,默认为-1,nRowTo=最大行数 + /// @param nColTo Excel结束列,从1开始,默认为-1,nColTo=最大列数 + virtual bool getCellValues(VVecVariant& vvecData, \ + int nRowFrom = 1, int nColFrom = 1, \ + int nRowTo = -1, int nColTo = -1); + + /// @brief 设置excel的数据(组成的矩形网格),注:Excel的索引均是从1开始 + /// @param vvecData 需要填充设置的数据 + /// @param nRowFrom Excel开始行,从1开始 + /// @param nColFrom Excel开始列,从1开始 + /// @param bFormat 设置数据之后,是否重置表格样式 + virtual bool setCellValues(const VVecVariant& vvecData, \ + int nRowFrom = 1, int nColFrom = 1, \ + bool bFormat = false); + + /// @brief 设置excel某列的数据,注:Excel的索引均是从1开始 + /// @param vecData 需要填充设置的数据 + /// @param nCol Excel列,从1开始 + /// @param nRowFrom Excel开始行,从1开始,如果为1,则第一个为标题 + virtual bool setColValues(const VecVariant& vecData, \ + int nCol, int nRowFrom = 1); + + /// @brief 设置excel某列的数据,注:Excel的索引均是从1开始 + /// @param vecData 需要填充设置的数据 + /// @param nCol Excel列,从1开始 + /// @param nRowFrom Excel开始行,从1开始,如果为1,则第一个为标题 + /// @param sColTitle 列标题 + virtual bool setColValues(const VecDouble& vecData, \ + int nCol, int nRowFrom = 2, \ + QString sColTitle = ""); + + /// @brief 执行最后的excel保存动作 + virtual bool saveExcel(bool bAdjustLayout = true); + virtual bool saveAsExcel(QString sFile, bool bAdjustLayout = true); + + /// @brief bFinalMode为false时:暂时释放内存,非最终 + virtual bool release(bool bFinalMode = false); + + // 数据格式转换,注:为方便,llist内的QVariant依然为QList + bool llistToVVec(const QList& llist, VVecVariant& vvec); + bool vvecToLlist(QList& llist, const VVecVariant& vvec); + +protected: + + /// @brief 新建或打开WorkBook + virtual bool makesureWorkBook(QString sFile = ""); + + /// @brief 拼装格式,如 A1:E20,然后得到Range + virtual QAxObject* makesureRange(int nRowFrom, int nColFrom, \ + int nRowTo, int nColTo); + + /// @brief 读取所有sheet名称 + virtual bool makesureSheetNames(); + + /// @brief 获取excel的Sheet + virtual bool loadSheetStruct(int nIndex); + + /// @brief 设置range + virtual bool resetSheetRange(); + + /// @brief 设置excel的数据(组成的矩形网格),注:Excel的索引均是从1开始 + virtual bool setCellValues(const QList& llistData, \ + int nRowFrom, int nColFrom, \ + int nRowTo, int nColTo, \ + bool bFormat = false); + + + /// @brief 规范化网格范围,各数据索引从1开始 + virtual bool normalizeRange(int& nRowFrom, int& nColFrom, int& nRowTo, int& nColTo); + + /// @brief 在设置完毕数据后,对Range进行格式调整 + virtual bool formatRange(QAxObject*& pRange); + + // 算法来自微软官方网站 (http://support.microsoft.com/kb/833402) + // 列号转换 + QString colIndexToLetter(int nColIndex); + +private: + + void reset(bool fFinalMode); + +public: + + /// @brief 利用Cell进行列宽设置,单位:像素 + /// @note 1.输入d的范围为像素pix,输出返回的也是像素pix + /// 2.对于Excel的列宽,比较特殊,实际以字符长为主, + /// 需要进行字符宽度与像素宽度的转换,目前只是拼凑,有待精确计算 + /// 简单测试,char * 8 + 5 = pix + virtual void setCellWidth(QAxObject* pCell, double d); + virtual double getCellWidth(QAxObject* pCell); + + /// @brief 利用Cell进行高设置,单位:磅 + /// @note Excel行高设置、插入图片Size全部以磅为单位 + virtual void setCellHeight(QAxObject* pCell, double d); + virtual double getCellHeight(QAxObject* pCell); + + /// @brief 根据索引进行列宽设置,单位:像素 + /// @note 1.输入d的范围为像素pix,输出返回的也是像素pix + /// 2.对于Excel的列宽,比较特殊,实际以字符长为主, + /// 需要进行字符宽度与像素宽度的转换,目前只是拼凑,有待精确计算 + /// 简单测试,char * 8 + 5 = pix + virtual void setColWidth(int c, double d); + virtual double getColWidth(int c); + + /// @brief 根据索引进行行高设置,单位:磅 + /// @note Excel行高设置、插入图片Size全部以磅为单位 + virtual void setRowHeight(int r, double d); + virtual double getRowHeight(int r); + + /// @brief 设置备注,慎用,TODO未测试 + virtual void setCellComment(int r, int c, QString sComment); + virtual void setCellComment(QAxObject* pCell, QString sComment); + + /// @brief 合并,并且边界设置颜色(m_oBorderClr) + bool mergeRanges(int r1, int r2, int c1, int c2, bool bColorBorder = true); + + /// @brief 批量插入行或列,根据o来定 + bool insertRowOrCols(int nFrom, int nCount, XlsDirection o); + +public: + + void setTextClr(QColor clr); + void setBackgndClr(QColor clr); + void setBorderClr(QColor clr); + void setAlignFlag(int flag); + void setWrapText(bool b); + +protected: + + /// @brief 像素和磅的转换 + double getPoundFromPix(double d); + double getPixFromPound(double d); + + /// @brief 获取行/列对象 + /// @note 内部包括了两种获取方法(作用一样) + virtual QAxObject* getColumnAt(int c); + virtual QAxObject* getRowAt(int r); + + /// @brief 获取Cell对象 + virtual QAxObject* getCellAt(int r, int c); + +protected: + + // 具体的表格相关 + QString m_sFileName; + QAxObject* m_pExcel; + QAxObject* m_pWorkBooks; + QAxObject* m_pWorkBook; + QAxObject* m_pWorkSheets; + QAxObject* m_pWorkSheet; + QAxObject* m_pUsedRange; + + // 表格行列 + int m_nRowStart; + int m_nColStart; + int m_nRowCount; + int m_nColCount; + + int m_nLastSheetIndex; + QStringList m_listSheets; + + // 写入时的格式Format + QColor m_oTextClr; //文本颜色 + QColor m_oBackgndClr; //背景颜色 + QColor m_oBorderClr; //边框颜色 + int m_nAlignFlag; //对齐方式 + bool m_bWrapText; //自动换行 + + double m_dRatioPP; //像素/磅 的比值,通常1.3333 + //目前只是用于导出表格图片时设定高度/宽度时使用 +}; + diff --git a/Include/iBase/iPlugin/ExcelEngineEx.h b/Include/iBase/iPlugin/ExcelEngineEx.h new file mode 100644 index 0000000..7670f2f --- /dev/null +++ b/Include/iBase/iPlugin/ExcelEngineEx.h @@ -0,0 +1,84 @@ +#pragma once + +#include "ExcelEngine.h" + +// 扩展Excel引擎,支持导出图片,暂未涉及 +class I_PLUGIN_EXPORT ExcelEngineEx : public ExcelEngine +{ + Q_OBJECT + +public: + + ExcelEngineEx(); + ~ExcelEngineEx(); + + /// @brief 获取excel的数据信息 + /// @note bAutoLoad是否自动加载首页信息 + virtual bool loadExcel(const QString &sFilePath, bool bAutoLoad = true); + + /// @brief 获取excel的数据(组成的矩形网格),注:Excel的索引均是从1开始 + /// @param vvecData 获取到的数据 + /// @param nRowFrom Excel开始行,从1开始 + /// @param nColFrom Excel开始列,从1开始 + /// @param nRowTo Excel结束行,从1开始,默认为-1,nRowTo=最大行数 + /// @param nColTo Excel结束列,从1开始,默认为-1,nColTo=最大列数 + virtual bool getCellValues(VVecVariant& vvecData, \ + int nRowFrom = 1, int nColFrom = 1, int nRowTo = -1, int nColTo = -1); + + /// @brief 设置excel的数据(组成的矩形网格),注:Excel的索引均是从1开始 + /// @param vvecData 需要填充设置的数据 + /// @param nRowFrom Excel开始行,从1开始 + /// @param nColFrom Excel开始列,从1开始 + /// @param bFormat 设置数据之后,是否重置表格样式 + virtual bool setCellValues(const VVecVariant& vvecData, \ + int nRowFrom = 1, int nColFrom = 1, \ + bool bFormat = false); + + /// @brief 在设置完毕数据后,对Range进行格式调整 + virtual bool formatRange(QAxObject*& pRange); + + /// @brief 导出图片格式的内容 + /// @param vvecData 数据 + /// @param pVecTitles 标题(可以为空) + /// @param mapImgs 图片,行位置对应 + /// @param mapSizes 图片Size,行位置对应 + /// @param nRowFrom Excel开始行,从1开始 + /// @param nColFrom Excel开始列,从1开始 + /// @param fImgColWidth图片列 宽度 + /// @param nTemplIndex模板,0:魏氏、1:马氏 + /// @param sLog 日志 + virtual bool runBatchValues(VVecVariant vvecData, QStringList* pVecTitles, \ + QMap& mapImgs, QMap& mapSizes, \ + int nRowFrom, int nColFrom, \ + float fImgColWidth, \ + int nTemplIndex, \ + QString& sLog); + + + /// @brief 读取图片格式+文本格式的内容 + /// @param vvecData 数据 + /// @param mapImgs 图片,行位置对应 + /// @param mapSizes 图片Size,行位置对应 + /// @param nRowFrom Excel开始行,从1开始 + /// @param nColFrom Excel开始列,从1开始 + /// @param nTemplIndex模板,0:魏氏、1:马氏 + /// @param sLog 日志 + virtual bool getBatchValues(VVecVariant& vvecData, \ + QMap& mapImgs, QMap& mapSizes, \ + int nRowFrom, int nColFrom, \ + int nTemplIndex, \ + QString& sLog); +protected: + + /// @brief 解析图片Map的Value + virtual bool checkImgFile(QString& sImg); + + /// @brief 对Size进行调整,变为实际Excel大小 + virtual bool checkImgSizes(QMap& map, double dImgWidthMax); + + /// @brief 图片插入完成后,对图片列进行调整 + /// @note r1<=r2 c1<=c2 + virtual bool formatImgsBounds(int r1, int r2, int c1, int c2); + +}; + diff --git a/Include/iBase/iPlugin/ExcelUtils.h b/Include/iBase/iPlugin/ExcelUtils.h new file mode 100644 index 0000000..cab5fc4 --- /dev/null +++ b/Include/iBase/iPlugin/ExcelUtils.h @@ -0,0 +1,32 @@ +#pragma once + +#include "ExcelEngine.h" + +// 对Excel应用的再次封装 +class I_PLUGIN_EXPORT ExcelUtils +{ +public: + + ExcelUtils(); + ~ExcelUtils(); + +public: + /// @brief Excel数据加载至VVec + bool loadExcel(VVecVariant& vvecData, QStringList* pVecTitles, QString& sFile, QString& sLog, + int nRowFrom = 1, int nColFrom = 1, + int nSheetIndex = 1, QString sSheetName = ""); + + /// @brief VVec数据存至Excel + bool saveExcel(VVecVariant vvecData, QStringList* pVecTitles, QString& sFile, QString& sLog, + int nRowFrom = 1, int nColFrom = 1, + int nSheetIndex = 1, QString sSheetName = ""); + + /// @brief 检测(或复制)Excel文件 + bool checkExcelFile(QString sFile, QString& sLog); + +private: + + ExcelEngine* m_pExcelEngine; +}; + + diff --git a/Include/iBase/iPlugin/MdiAreaEx.h b/Include/iBase/iPlugin/MdiAreaEx.h new file mode 100644 index 0000000..c76ee72 --- /dev/null +++ b/Include/iBase/iPlugin/MdiAreaEx.h @@ -0,0 +1,61 @@ +#pragma once + +#include + +#include "Defines.h" +#include "iPlugin_global.h" + +// 主要重载其信号响应 +class I_PLUGIN_EXPORT MdiAreaEx : + public QMdiArea +{ + Q_OBJECT + +public: + MdiAreaEx(QWidget* parent = 0); + ~MdiAreaEx(); + + // 布局 + // bFilterMode二次布局时,如果bFilterMode为true则过滤掉Hide的窗体 + void layoutSubWnds(WndLayoutMode o, bool bFilterMode = false); + WndLayoutMode getLayoutMode(); + void relayoutSubWnds(); + + void setLastAutoSpan(bool b); + void setColCount(int n); + +private: + + // 布局实现 + void _layoutOne(QList listSubWnds); + void _layoutVert(QList listSubWnds); + void _layoutHori(QList listSubWnds); + void _layoutCell(QList listSubWnds); + void _layoutCascade(QList listSubWnds); + +protected: + + bool eventFilter(QObject *object, QEvent *event); + void childEvent(QChildEvent *childEvent); + void resizeEvent(QResizeEvent *resizeEvent); + void timerEvent(QTimerEvent *timerEvent); + void showEvent(QShowEvent *showEvent); + +signals: + + // Mdi大小发生了切换 + void sigMdiSizeChanged(); + + // 在布局前允许用户对窗体顺序进行调整 + void sigAdjustSubWnds(QList&); + + // nMode = 0: added 1:removed 2:polished +// void sigChildActioned(QObject* pChild, int nMode); + +protected: + + WndLayoutMode m_oMode; + bool m_bFilterMode; + bool m_bLastSpan; //最后一个是否对齐(如果不够的话),默认为true + int m_nColCount; //默认为2 +}; diff --git a/Include/iBase/iPlugin/MdiSubWindowEx.h b/Include/iBase/iPlugin/MdiSubWindowEx.h new file mode 100644 index 0000000..611526d --- /dev/null +++ b/Include/iBase/iPlugin/MdiSubWindowEx.h @@ -0,0 +1,126 @@ +#pragma once + +#include +#include "IxDynObj.h" +#include "iPlugin_global.h" +#include +#include +#include +#include +#include "iBase_global.h" +#include +#include + +class CustomStyle : public QProxyStyle +{ +public: + CustomStyle(QStyle *baseStyle = 0) : QProxyStyle(baseStyle) {} + + void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const + { + if(control == QStyle::CC_TitleBar) + { + const QStyleOptionTitleBar* styleOpt = qstyleoption_cast(option); + if (styleOpt != nullptr) + { + painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + + QRect rectMin = subControlRect(QStyle::CC_TitleBar, styleOpt, widget->isMinimized() ? QStyle::SC_TitleBarNormalButton : QStyle::SC_TitleBarMinButton, widget); + QRect rectMax = subControlRect(QStyle::CC_TitleBar, styleOpt, widget->isMaximized() ? QStyle::SC_TitleBarNormalButton : QStyle::SC_TitleBarMaxButton, widget); + QRect rectClose = subControlRect(QStyle::CC_TitleBar, styleOpt, QStyle::SC_TitleBarCloseButton, widget); + QBrush brush(styleOpt->state & State_Active ? QColor("#C0DCF2") : QColor("#DEF0FE")); + painter->fillRect(styleOpt->rect, brush); + QRect rect = styleOpt->rect; + //由于高度变化 + rectMin.setTop(0);rectMin.setHeight(rect.height()); + rectMax.setTop(0);rectMax.setHeight(rect.height()); + rectClose.setTop(0);rectClose.setHeight(rect.height()); + QSize IconSize = QSize(rect.height(), rect.height()); + + // 关闭按钮 + QPixmap pixIconClose = zxLoadIcon("Titlebar_Close").pixmap(IconSize); + drawButton(painter, rectClose, pixIconClose, IconSize); + + // 最大化按钮 + QPixmap pixIconMax = zxLoadIcon(widget->isMaximized() ? "Titlebar_Normal" : "Titlebar_Max").pixmap(IconSize); + drawButton(painter, rectMax, pixIconMax, IconSize); + + // 最小化按钮 + QPixmap pixIconMin = zxLoadIcon(widget->isMinimized() ? "Titlebar_Normal" : "Titlebar_Min").pixmap(IconSize); + drawButton(painter, rectMin, pixIconMin, IconSize); + float fSize = (float) IconSize.height() * 2 / 3; + // 图标和标题文本 + QRectF iconRect(rect.left() + 2, rect.top(), IconSize.height(), IconSize.height()); + QRectF rcIcon(iconRect.center().rx()-fSize/2, iconRect.center().ry() - fSize/2, fSize, fSize); + painter->drawPixmap(rcIcon.toRect(), styleOpt->icon.pixmap(QSize(16, 16))); + + QRectF rcTitle(rcIcon.right() + fSize, rect.top(), rectMin.left() - (rcIcon.right() + fSize), IconSize.height()); + painter->drawText(rcTitle, styleOpt->text, QTextOption(Qt::AlignLeft | Qt::AlignVCenter)); + + painter->restore(); + return; + } + } + else + { + QProxyStyle::drawComplexControl(control, option, painter, widget); + } + + } + void drawButton(QPainter *painter, const QRectF &buttonRect, const QPixmap &icon, const QSize size) const + { + //绘制位置计算取1/2 + float fSize = (float) size.height() * 1 / 2; + QRectF rcIcon(buttonRect.center().rx()-fSize/2, buttonRect.center().ry() - fSize/2, fSize, fSize); + painter->drawPixmap(rcIcon.toRect(), icon); + } +}; + +// 主要重载其信号响应 +class I_PLUGIN_EXPORT MdiSubWindowEx : + public QMdiSubWindow +{ + Q_OBJECT + +public: + MdiSubWindowEx(bool bNovelQss, QWidget* parent = 0); + ~MdiSubWindowEx(); + + void setBindingObj(IxDynObj* p); + IxDynObj* getBindingObj(); + +protected: + + bool eventFilter(QObject*, QEvent*); + + void showEvent(QShowEvent *event); + void hideEvent(QHideEvent* event); + void changeEvent(QEvent* event); + void closeEvent(QCloseEvent* event); + void resizeEvent(QResizeEvent* event); + void mouseDoubleClickEvent(QMouseEvent* event); + +signals: + + // b:返回的是,是否允许关闭 + void sigConformClosing(bool& b); + // 一旦关闭后,通知刷新状态 + void sigMdiClosed(); + +private: + + IxDynObj* m_pBindingObj; //这是绑定的Obj对象 +}; + +//Mdi中的子项 +class I_PLUGIN_EXPORT SubMdiSubWindowEx : + public MdiSubWindowEx +{ + Q_OBJECT + +public: + + SubMdiSubWindowEx(bool bNovelQss, QWidget* parent = 0); + ~SubMdiSubWindowEx(); +}; diff --git a/Include/iBase/iPlugin/MdiSubWindowEx.h.bak b/Include/iBase/iPlugin/MdiSubWindowEx.h.bak new file mode 100644 index 0000000..502200b --- /dev/null +++ b/Include/iBase/iPlugin/MdiSubWindowEx.h.bak @@ -0,0 +1,124 @@ +#pragma once + +#include +#include "IxDynObj.h" +#include "iPlugin_global.h" +#include +#include +#include +#include +#include "iBase_global.h" +#include +#include + +class CustomStyle : public QProxyStyle +{ +public: + CustomStyle(QStyle *baseStyle = 0) : QProxyStyle(baseStyle) {} + + void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const + { + if(control == QStyle::CC_TitleBar) + { + const QStyleOptionTitleBar* styleOpt = qstyleoption_cast(option); + if (styleOpt != nullptr) + { + painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + + QRect rectMin = subControlRect(QStyle::CC_TitleBar, styleOpt, widget->isMinimized() ? QStyle::SC_TitleBarNormalButton : QStyle::SC_TitleBarMinButton, widget); + QRect rectMax = subControlRect(QStyle::CC_TitleBar, styleOpt, widget->isMaximized() ? QStyle::SC_TitleBarNormalButton : QStyle::SC_TitleBarMaxButton, widget); + QRect rectClose = subControlRect(QStyle::CC_TitleBar, styleOpt, QStyle::SC_TitleBarCloseButton, widget); + + painter->setBrush(styleOpt->state & State_Active ? QColor("#C0DCF2") : QColor("#DEF0FE")); + painter->drawRect(styleOpt->rect); + QRect rect = styleOpt->rect; + //由于高度变化 + rectMin.setTop(0);rectMin.setHeight(rect.height()); + rectMax.setTop(0);rectMax.setHeight(rect.height()); + rectClose.setTop(0);rectClose.setHeight(rect.height()); + QSize IconSize = QSize(rect.height(), rect.height()); + + // 关闭按钮 + QPixmap pixIconClose = zxLoadIcon("Titlebar_Close").pixmap(IconSize); + drawButton(painter, rectClose, pixIconClose, IconSize); + + // 最大化按钮 + QPixmap pixIconMax = zxLoadIcon(widget->isMaximized() ? "Titlebar_Normal" : "Titlebar_Max").pixmap(IconSize); + drawButton(painter, rectMax, pixIconMax, IconSize); + + // 最小化按钮 + QPixmap pixIconMin = zxLoadIcon(widget->isMinimized() ? "Titlebar_Normal" : "Titlebar_Min").pixmap(IconSize); + drawButton(painter, rectMin, pixIconMin, IconSize); + float fSize = (float) IconSize.height() * 2 / 3; + // 图标和标题文本 + QRectF iconRect(rect.left() + 2, rect.top(), IconSize.height(), IconSize.height()); + QRectF rcIcon(iconRect.center().rx()-fSize/2, iconRect.center().ry() - fSize/2, fSize, fSize); + painter->drawPixmap(rcIcon.toRect(), styleOpt->icon.pixmap(QSize(16, 16))); + + QRectF rcTitle(rcIcon.right() + fSize, rect.top(), rectMin.left() - (rcIcon.right() + fSize), IconSize.height()); + painter->drawText(rcTitle, styleOpt->text, QTextOption(Qt::AlignLeft | Qt::AlignVCenter)); + + painter->restore(); + return; + } + } + else + { + QProxyStyle::drawComplexControl(control, option, painter, widget); + } + + } + void drawButton(QPainter *painter, const QRectF &buttonRect, const QPixmap &icon, const QSize size) const + { + //绘制位置计算取1/2 + float fSize = (float) size.height() * 1 / 2; + QRectF rcIcon(buttonRect.center().rx()-fSize/2, buttonRect.center().ry() - fSize/2, fSize, fSize); + painter->drawPixmap(rcIcon.toRect(), icon); + } +}; + +// 主要重载其信号响应 +class I_PLUGIN_EXPORT MdiSubWindowEx : + public QMdiSubWindow +{ + Q_OBJECT + +public: + MdiSubWindowEx(bool bNovelQss, QWidget* parent = 0); + ~MdiSubWindowEx(); + + void setBindingObj(IxDynObj* p); + IxDynObj* getBindingObj(); + +protected: + + bool eventFilter(QObject*, QEvent*); + + void showEvent(QShowEvent *event); + void hideEvent(QHideEvent* event); + void changeEvent(QEvent* event); + void closeEvent(QCloseEvent* event); + void resizeEvent(QResizeEvent* event); + void mouseDoubleClickEvent(QMouseEvent* event); + +signals: + // b:返回的是,是否允许关闭 + void sigConformClosing(bool& b); + // 一旦关闭后,通知刷新状态 + void sigMdiClosed(); + +private: + + IxDynObj* m_pBindingObj; //这是绑定的Obj对象 +}; +//Mdi中的子项 +class I_PLUGIN_EXPORT SubMdiSubWindowEx : + public MdiSubWindowEx +{ + Q_OBJECT + +public: + SubMdiSubWindowEx(bool bNovelQss, QWidget* parent = 0); + ~SubMdiSubWindowEx(); +}; diff --git a/Include/iBase/iPlugin/QDockWidgetEx.h b/Include/iBase/iPlugin/QDockWidgetEx.h new file mode 100644 index 0000000..bca35df --- /dev/null +++ b/Include/iBase/iPlugin/QDockWidgetEx.h @@ -0,0 +1,46 @@ +#pragma once +#include +#include +#include +#include + +#include "iPlugin_global.h" + +// DockWidget扩展 +class I_PLUGIN_EXPORT QDockWidgetEx : public QDockWidget +{ + Q_OBJECT + +public: + QDockWidgetEx(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); + QDockWidgetEx(QWidget *parent = 0, Qt::WindowFlags flags = 0); + + ~QDockWidgetEx(); + + bool IsWindowOpacity(void); + void WindowOpacity(bool bOpacity); + void changeTitle(bool bTopLevel); + +public slots: + + void slotFeaturesChanged(QDockWidget::DockWidgetFeatures features); + void slotTopLevelChanged(bool topLevel); + void slotAllowedAreasChanged(Qt::DockWidgetAreas allowedAreas); + void slotVisibilityChanged(bool visible); + void slotDockLocationChanged(Qt::DockWidgetArea area); + +protected: + + virtual void leaveEvent(QEvent * event); + virtual void enterEvent(QEvent * event); + virtual bool event(QEvent *event); + + void paintEvent(QPaintEvent *event); + + void init(); + +protected: + + bool m_bIsWindowOpacity; + QString m_sTitle; +}; diff --git a/Include/iBase/iPlugin/QHeaderComboBoxEx.h b/Include/iBase/iPlugin/QHeaderComboBoxEx.h new file mode 100644 index 0000000..1096627 --- /dev/null +++ b/Include/iBase/iPlugin/QHeaderComboBoxEx.h @@ -0,0 +1,32 @@ +#pragma once + +#include "QListViewEx.h" + +// 自定义Combobox 失去焦点是能够自动隐藏 +class I_PLUGIN_EXPORT QHeaderComboBoxEx :public QComboBox +{ + Q_OBJECT +public: + explicit QHeaderComboBoxEx(QWidget *parent = 0); + ~QHeaderComboBoxEx(); +public: + + // hidePopup 重写隐藏下拉列表 + void hidePopup(); + + // 所在列索引 + void setColumnIndex(int nIndex); + +protected: + + //重写失去焦点事件 + void focusOutEvent(QFocusEvent *e); + +signals: + // 选择改变 + void sigSelChanged(const int, const QStringList); + +private: + // 列索引 + int m_nCurIndex; +}; diff --git a/Include/iBase/iPlugin/QHeaderViewEx.h b/Include/iBase/iPlugin/QHeaderViewEx.h new file mode 100644 index 0000000..a489b2e --- /dev/null +++ b/Include/iBase/iPlugin/QHeaderViewEx.h @@ -0,0 +1,68 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +// 此处是为了响应在QTableWidget中的表头进行下拉选择(支持多选)而做的三个类。 +// 其中QHeaderViewEx是表头,点中其某一列时,创建QHeaderComboBoxEx,而QHeaderComboBoxEx +// 内部又设置了view为QListViewEx + +// 表头HeaderView +class I_PLUGIN_EXPORT QHeaderViewEx : public QHeaderView +{ + Q_OBJECT +public: + QHeaderViewEx(const QStringList& lstStrText, QWidget *parent = 0); + ~QHeaderViewEx(); + + // 设置表头下拉列表取值 + void setColumnItems(const QStringList& lstFields, const QStringList& lstAlls); + + // 设置Titles + void changeTitles(QStringList listTitles); + +public Q_SLOTS: + + // 选择改变时响应 + void slotSelChanged(const int, const QStringList); + + // 处理表头单元缩放事件 + void handleSectionResized(int index); + +signals: + void sigGetColumnItems(int index); + void sigSelChanged(const int, const QStringList); + +protected: + + // 重置表头combo控件大小 + void resizeItem(int index); + + // 删除comboBox控件 + void removeCombo(); + + // 处理鼠标单击消息 + void mouseReleaseEvent(QMouseEvent *e); + void mousePressEvent(QMouseEvent *e); + + // 重绘,此处有待完善,目前是没有版本,直接把父类搬过来了。 + void paintSection(QPainter* painter, const QRect &rect, int logicalIndex) const; + +private: + QStringList m_lstHeaderTexts; //标题 + QStringList m_lstComboxText; ///< 下拉列表中显示表头列表,当前选中的 + QStringList m_lstComboxTextAll;///< 下拉列表中显示表头列表,所有的 + QComboBox* m_pCbxSel; ///< 表头下拉列表控件 + int m_nCurIndex; ///< 被选中的表头单元ID +}; + + + diff --git a/Include/iBase/iPlugin/QListViewEx.h b/Include/iBase/iPlugin/QListViewEx.h new file mode 100644 index 0000000..631fe51 --- /dev/null +++ b/Include/iBase/iPlugin/QListViewEx.h @@ -0,0 +1,41 @@ +#pragma once +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +// 为了QCombobox下拉列表添加QCheckBox复选框创建QListViewEx +class I_PLUGIN_EXPORT QListViewEx : public QListWidget +{ + Q_OBJECT + +public: + QListViewEx(QWidget* parent, QStringList *listItems, QStringList *listItemAlls, QComboBox* pComboBox); + + //返回用户选择项的用户自定义数据 + bool getSelectItems(QStringList &data); + +private slots: + + // Check状态改变 + void slotCheckBoxChanged(int state); + +private: + + // 相关的变量,主要为控制 + QComboBox* m_pComboBox; + QStringList m_listItems; + QStringList m_listItemAlls; + QList m_listChecked; + QList m_listItemData; + QList m_listCheckBoxes; + bool m_bAllConsider; + bool m_bByAll; + QMap m_mapRawStates; +}; diff --git a/Include/iBase/iPlugin/QTextEditEx.h b/Include/iBase/iPlugin/QTextEditEx.h new file mode 100644 index 0000000..069c5c6 --- /dev/null +++ b/Include/iBase/iPlugin/QTextEditEx.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include "iPlugin_global.h" + +// 文本,MPA解释结果,使用 +class I_PLUGIN_EXPORT QTextEditEx : public QTextEdit +{ + Q_OBJECT + +public: + QTextEditEx(QWidget *parent = 0); + ~QTextEditEx(); + +signals: + + // 触发信号,以便用户对右键菜单进行调整 + void sigCustomMenu(QMenu* ); + +protected: + virtual void contextMenuEvent(QContextMenuEvent *e); +}; diff --git a/Include/iBase/iPlugin/TabWidgetEx.h b/Include/iBase/iPlugin/TabWidgetEx.h new file mode 100644 index 0000000..113b87d --- /dev/null +++ b/Include/iBase/iPlugin/TabWidgetEx.h @@ -0,0 +1,42 @@ +#pragma once + +#include + +#include "iPlugin_global.h" + +// TabWidgetEx该类实现TabWidget相关附加功能 +class I_PLUGIN_EXPORT TabWidgetEx : + public QTabWidget +{ + Q_OBJECT + +public: + TabWidgetEx(QWidget *parent = 0); + ~TabWidgetEx(); + + // Tab是否允许移动,默认不移动 + void setTabMovable(bool b); + bool isTabMovable(); + + // TabBar + void setTabBarHorW(int n); + int getTabBarHorW(); + +protected: +// virtual void mouseDoubleClickEvent(QMouseEvent *); + + // event分发 + virtual bool eventFilter(QObject *, QEvent *); + +signals: + + // 双击Item + void sigItemDoubleClicked(int n); + // 右击Item + void sigItemRightClicked(int n, QPoint pos); + +private: + QTabBar* m_pTabBar; + + bool m_bTabMovable; //TabItem允许移动 +}; diff --git a/Include/iBase/iPlugin/WordEngine.h b/Include/iBase/iPlugin/WordEngine.h new file mode 100644 index 0000000..852e365 --- /dev/null +++ b/Include/iBase/iPlugin/WordEngine.h @@ -0,0 +1,65 @@ +#pragma once + +#include +#include +#include + +#include "Defines.h" + +#include "iPlugin_global.h" + +// 该类实现word的导出,主要借助dot模板来实现 +class I_PLUGIN_EXPORT WordEngine : public QObject +{ + Q_OBJECT + +public: + + WordEngine(); + ~WordEngine(); + + // 加载Dot文件,如果为空,则新建一个 + bool open(QString sDotFile, bool bVisible = false); + + // 替换标签(文本) + bool replaceText(QString sTag, QString sText); + // 替换标签(图片) + bool replaceImg(QString sTag, QString sImgFile); + // 替换标签(表格) + // 如果listHeaders为空,则默认vvecData第一行为标题 + // 否则listHeaders为标题,vvecData全部为数据 + bool replaceTable(QString sTag, \ + VVecVariant& vvecData, \ + QStringList listHeaders = QStringList()); + + // 保存 + void saveAs(QString sFile); + +private: + + // 获取标签 + QAxObject* getBookmarkOf(QString sTag); + + // 表格相关操作 + QAxObject* insertTableOf(QString sTag, int r, int c); + bool setTableCellStr(QAxObject* pTable, int r, int c, QString s); + bool setTableCellTextBold(QAxObject* pTable, int r, int c, bool b); + QAxObject* getTableCell(QAxObject* pTable, int r, int c); + + // 释放内存 + void release(); + +private: + + // word about + QAxObject* m_pAxWord; + QAxObject* m_pAxDocs; + QAxObject* m_pAxDoc; + + // Assit infos + QString m_sFile; + bool m_bOpen; + bool m_bNewDoc; +}; + + diff --git a/Include/iBase/iPlugin/ZxComboBoxCbxRadio.h b/Include/iBase/iPlugin/ZxComboBoxCbxRadio.h new file mode 100644 index 0000000..5fd17f5 --- /dev/null +++ b/Include/iBase/iPlugin/ZxComboBoxCbxRadio.h @@ -0,0 +1,68 @@ +#pragma once + +#include + +#include "Defines.h" +#include "iPlugin_global.h" + +class ZxComboBoxCbxRadioWx; + +// 方案一: + +// 自定义Combobox,支持CheckBox、Radio双重选 +// 与 ZxComboBoxCbxRadioWx 一起实现该功能 + +class I_PLUGIN_EXPORT ZxComboBoxCbxRadio :public QComboBox +{ + Q_OBJECT + +public: + + explicit ZxComboBoxCbxRadio(QWidget* parent = 0); + ~ZxComboBoxCbxRadio(); + + void setInfos(QStringList& listAllItems, \ + QStringList listCbxs = QStringList(), \ + QString sRadio = ""); + + /// @brief 参数传递,确定默认值 + /// @param listAllItems 所有数据项 + /// @param vecIndexCbxs 复选项索引,默认为空 + /// @param indexRadio 单选项索引,默认为-1 + /// @note 如果indexRadio为-1,且vecIndexCbxs非空, + /// 则指定indexRadio为vecIndexCbxs第一个 + void setInfos(QStringList& listAllItems, \ + QVector vecIndexCbxs = VecInt(), \ + int indexRadio = -1); + +public: + + virtual void showPopup(); + virtual void hidePopup(); + +private: + + void makesureSubWx(); + +public slots: + + /// @brief 选择改变 + /// @param vecIndexCbxs 复选项索引,非空 + /// @param indexRadio 单选项索引,>= 0 + /// @note 如果不满足上述条件,则不触发 + void slotSelChanged(const VecInt vecIndexCbxs, \ + const int indexRadio); + +protected: + + //重写失去焦点事件 + void focusOutEvent(QFocusEvent *e); + +signals: + // 选择改变 + void sigSelChanged(const VecInt, const int); + +private: + + ZxComboBoxCbxRadioWx* m_pWxSub; +}; diff --git a/Include/iBase/iPlugin/ZxComboBoxCbxRadioWx.h b/Include/iBase/iPlugin/ZxComboBoxCbxRadioWx.h new file mode 100644 index 0000000..4fec398 --- /dev/null +++ b/Include/iBase/iPlugin/ZxComboBoxCbxRadioWx.h @@ -0,0 +1,70 @@ +#pragma once + +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "ZxUiBase.h" + +#include "iPlugin_global.h" + +class ZxSerializer; +class ZxTableModel; +class ZxTableView; + +// Table格式选项 +class I_PLUGIN_EXPORT ZxComboBoxCbxRadioWx : public ZxUiBase +{ + Q_OBJECT + +public: + + explicit ZxComboBoxCbxRadioWx(QWidget *parent = 0); + ~ZxComboBoxCbxRadioWx(); + +public: + + void setInfos(QStringList& listAllItems, VecInt vecIndexCbxs, int indexRadio); + + virtual void initUI(); + virtual void initSheets(); //Sheet + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + +signals: + // 选择改变 + void sigSelChanged(const VecInt, const int); + + +public slots: + + void slotCbxItemClicked(); + void slotRadioItemClicked(); + + void slotBtnOK(); + void slotBtnCancel(); + +private: + void initUI_Main(); + void initUI_Grids(); + void fillUI_Grids(); + void initUI_Btns(); + + void getCheckedCounts(VecInt& vec, int& n); + + bool apply(); + +public: + + QStringList m_listAllItems; //所有项 + VecInt m_vecIndexCbxs; //多选的项 + int m_nIndexRadio; //单选项 + +private: + + QVBoxLayout* m_pMainLayout; + QGridLayout* m_pGridLayout; + QButtonGroup* m_pRadioGroup; + QMap m_mapBtnPairs; +}; diff --git a/Include/iBase/iPlugin/ZxComboBoxDelegate.h b/Include/iBase/iPlugin/ZxComboBoxDelegate.h new file mode 100644 index 0000000..2d582a0 --- /dev/null +++ b/Include/iBase/iPlugin/ZxComboBoxDelegate.h @@ -0,0 +1,41 @@ +#pragma once + +#include +#include "iPlugin_global.h" + +// 通用数据编辑代理对象类 +class I_PLUGIN_EXPORT ZxComboBoxDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + + explicit ZxComboBoxDelegate(const QStringList& lstItemText, QObject* parent = 0); + virtual ~ZxComboBoxDelegate(); + +public: + + // 函数重载部分 + + void paint(QPainter* painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const; + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + void setEditorData(QWidget* editor, const QModelIndex &index) const; + void setModelData(QWidget* editor, QAbstractItemModel* model, + const QModelIndex &index) const; + void updateEditorGeometry(QWidget* editor, + const QStyleOptionViewItem &option, + const QModelIndex &index) const; + bool eventFilter(QObject* object, QEvent* event); + +signals: + void itemChanged(const QModelIndex& index, QString& strText) const; + + +private: + QStringList m_lstItemText; + +}; diff --git a/Include/iBase/iPlugin/ZxComboBoxFuzzy.h b/Include/iBase/iPlugin/ZxComboBoxFuzzy.h new file mode 100644 index 0000000..35e6a23 --- /dev/null +++ b/Include/iBase/iPlugin/ZxComboBoxFuzzy.h @@ -0,0 +1,87 @@ +#pragma once + +#include + +#include "Defines.h" +#include "iPlugin_global.h" + +// 方案二: + +// 自定义Combobox,支持CheckBox、Radio双重选 +// 作者:地大学生 wangjr + +class I_PLUGIN_EXPORT ZxComboBoxFuzzy : public QComboBox +{ + Q_OBJECT + +public: + + explicit ZxComboBoxFuzzy(QWidget* parent = 0); + ~ZxComboBoxFuzzy(); + + void setInfos(QStringList& listAllItems, \ + QStringList listCbxs = QStringList(), \ + QString sRadio = ""); + + /// @brief 参数传递,确定默认值 + /// @param listAllItems 所有数据项 + /// @param vecIndexCbxs 复选项索引,默认为空 + /// @param indexRadio 单选项索引,默认为-1 + /// @note 如果indexRadio为-1,且vecIndexCbxs非空, + /// 则指定indexRadio为vecIndexCbxs第一个 + void setInfos(const QStringList& listAllItems, \ + QVector vecIndexCbxs = VecInt(), \ + int indexRadio = -1); + +private: + + void init(); + void saveInitialState();// 保存初始状态 + void updateComboBoxDisplay(); + +signals: + + // 当选择变化时发射,传递复选框选中的索引和单选框的索引 + void sigSelChanged(const QVector& vecIndexCbx, int indexRadio); + +// void accepted(); +// void rejected(); + +private slots: + + void slotCheckBoxStateChanged(int state);// 复选框状态变化槽函数 + void slotRadioBtnToggled(bool checked);// 单选按钮状态变化槽函数 + void slotOkClicked();// 确认按钮点击槽函数 + void slotCancelClicked();// 取消按钮点击槽函数 + +protected: + + void showPopup(); + void hidePopup(); + +private: + + QListWidget* m_pListWx; // 列表小部件指针,用于显示列表项 + QFrame* m_pPopupFrame; // 弹出框架 + QPushButton* m_pOkBtn; // 确认按钮 + QPushButton* m_pCancelBtn; // 取消按钮 + + int m_nRadioIndex; // 单选按钮索引 + QVector m_vecCheckedIndices; // 复选框选中的索引 + QVector m_vecInitialCheckedIndices; // 初始状态时复选框选中的索引 + int m_nInitialRadioIndex; // 初始状态时单选按钮的索引 + QStringList m_listAllItems; // 所有选项内容 +}; + +//class MainWindow : public QMainWindow { +// Q_OBJECT + +//public: +// explicit MainWindow(QWidget* parent = 0); + +//private slots: +// void slotSelectionChanged(const QVector &vecIndexCbx, int indexRadio);//响应CustomComboBox的sigSelChanged信号 +// void slotAccepted();// 响应CustomComboBox的accepted信号 +// void slotRejected();//响应CustomComboBox的rejected信号 +//}; + diff --git a/Include/iBase/iPlugin/ZxDataEditorDelegate.h b/Include/iBase/iPlugin/ZxDataEditorDelegate.h new file mode 100644 index 0000000..4400d41 --- /dev/null +++ b/Include/iBase/iPlugin/ZxDataEditorDelegate.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include "iPlugin_global.h" + + // 通用数据编辑代理对象类 +class I_PLUGIN_EXPORT ZxDataEditorDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + explicit ZxDataEditorDelegate(QObject* parent = 0); + virtual ~ZxDataEditorDelegate(); + +public: + + // 函数重载部分 + + void paint(QPainter* painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const; + + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + void setEditorData(QWidget* editor, const QModelIndex &index) const; + + void setModelData(QWidget* editor, QAbstractItemModel* model, + const QModelIndex &index) const; + void updateEditorGeometry(QWidget* editor, + const QStyleOptionViewItem &option, + const QModelIndex &index) const; + + bool eventFilter(QObject* object, QEvent* event); + +signals: + +public slots: + +private: + mutable QWidget* m_editedWidget; +}; diff --git a/Include/iBase/iPlugin/ZxDockWidget.h b/Include/iBase/iPlugin/ZxDockWidget.h new file mode 100644 index 0000000..fb2d36d --- /dev/null +++ b/Include/iBase/iPlugin/ZxDockWidget.h @@ -0,0 +1,47 @@ +#pragma once + +#include +#include +#include +#include + +#include "iPlugin_global.h" + +// DockWidget扩展 +class I_PLUGIN_EXPORT ZxDockWidget : public QDockWidget +{ + Q_OBJECT + +public: + ZxDockWidget(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); + ZxDockWidget(QWidget *parent = 0, Qt::WindowFlags flags = 0); + + ~ZxDockWidget(); + + bool IsWindowOpacity(void); + void WindowOpacity(bool bOpacity); + void changeTitle(bool bTopLevel); + +public slots: + + void slotFeaturesChanged(QDockWidget::DockWidgetFeatures features); + void slotTopLevelChanged(bool topLevel); + void slotAllowedAreasChanged(Qt::DockWidgetAreas allowedAreas); + void slotVisibilityChanged(bool visible); + void slotDockLocationChanged(Qt::DockWidgetArea area); + +protected: + + virtual void leaveEvent(QEvent * event); + virtual void enterEvent(QEvent * event); + virtual bool event(QEvent *event); + + void paintEvent(QPaintEvent *event); + + void init(); + +protected: + + bool m_bIsWindowOpacity; + QString m_sTitle; +}; diff --git a/Include/iBase/iPlugin/ZxHeaderComboBoxEx.h b/Include/iBase/iPlugin/ZxHeaderComboBoxEx.h new file mode 100644 index 0000000..afe1a56 --- /dev/null +++ b/Include/iBase/iPlugin/ZxHeaderComboBoxEx.h @@ -0,0 +1,36 @@ +#pragma once + +#include "ZxListViewEx.h" + +// 自定义Combobox 失去焦点是能够自动隐藏 +class I_PLUGIN_EXPORT ZxHeaderComboBoxEx :public QComboBox +{ + Q_OBJECT +public: + explicit ZxHeaderComboBoxEx(QWidget *parent = 0); + ~ZxHeaderComboBoxEx(); +public: + + // hidePopup 重写隐藏下拉列表 + void hidePopup(); + + // 所在列索引 + void setColumnIndex(int nIndex); + +protected: + + //重写失去焦点事件 + void focusOutEvent(QFocusEvent *e); + +signals: + // 选择改变 + void sigSelChanged(const int, const QString); + +private: + // 列索引 + int m_nCurIndex; + + // 每次都发送两遍消息,奇怪 + int m_nLastSendIndex; + QString m_sLastSendText; +}; diff --git a/Include/iBase/iPlugin/ZxHeaderViewEx.h b/Include/iBase/iPlugin/ZxHeaderViewEx.h new file mode 100644 index 0000000..46508f9 --- /dev/null +++ b/Include/iBase/iPlugin/ZxHeaderViewEx.h @@ -0,0 +1,73 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +// 此处是为了响应在QTableWidget中的表头进行下拉选择(支持多选)而做的三个类。 +// 其中ZxHeaderViewEx是表头,点中其某一列时, +// 创建ZxHeaderComboBoxEx,而ZxHeaderComboBoxEx +// 内部又设置了view为ZxListViewEx +// 所以ZxHeaderViewEx、ZxHeaderComboBoxEx、ZxListViewEx为一组 +// 该组实现了表头的Radio选择(单选) +// 而原来的QHeaderViewEx、QHeaderComboBoxEx、QListViewEx为一组 +// 这一组实现了表头的Check选择(多选) + +// 表头HeaderView +class I_PLUGIN_EXPORT ZxHeaderViewEx : public QHeaderView +{ + Q_OBJECT +public: + ZxHeaderViewEx(const QStringList& lstStrText, QWidget *parent = 0); + ~ZxHeaderViewEx(); + + // 设置表头下拉列表取值 + void setColumnItems(const QString& sCurSel, const QStringList& lstAlls); + + // 设置Titles + void changeTitles(QStringList listTitles); + +public Q_SLOTS: + + // 选择改变时响应 + void slotSelChanged(const int, const QString); + + // 处理表头单元缩放事件 + void handleSectionResized(int index); + +signals: + void sigGetColumnItems(int index); + void sigSelChanged(const int, const QString); + +protected: + + // 重置表头combo控件大小 + void resizeItem(int index); + + // 删除comboBox控件 + void removeCombo(); + + // 处理鼠标单击消息 + void mouseReleaseEvent(QMouseEvent *e); + void mousePressEvent(QMouseEvent *e); + + // 重绘,此处有待完善,目前是没有版本,直接把父类搬过来了。 + void paintSection(QPainter* painter, const QRect &rect, int logicalIndex) const; + +private: + QStringList m_lstHeaderTexts; //标题 + QString m_sCurSel; //下拉列表中显示表头列表,当前选中的 + QStringList m_lstComboxTextAll; //下拉列表中显示表头列表,所有的 + QComboBox* m_pCbxSel; //表头下拉列表控件 + int m_nCurIndex; //被选中的表头单元ID +}; + + + diff --git a/Include/iBase/iPlugin/ZxListViewEx.h b/Include/iBase/iPlugin/ZxListViewEx.h new file mode 100644 index 0000000..40e01df --- /dev/null +++ b/Include/iBase/iPlugin/ZxListViewEx.h @@ -0,0 +1,34 @@ +#pragma once +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +// 为了QCombobox下拉列表添加QRadioButton复选框创建ZxListViewEx +class I_PLUGIN_EXPORT ZxListViewEx : public QListWidget +{ + Q_OBJECT + +public: + ZxListViewEx(QWidget* parent, const QString& sCurSel, QStringList *listItemAlls, QComboBox* pComboBox); + + //返回用户选择项的用户自定义数据 + QString getSelectItems(); + +private slots: + + // Radio状态改变 + void slotRadioChanged(bool); + +private: + + // 相关的变量,主要为控制 + QComboBox* m_pComboBox; + QList m_listRadioButtons; +}; diff --git a/Include/iBase/iPlugin/ZxMainWindow.h b/Include/iBase/iPlugin/ZxMainWindow.h new file mode 100644 index 0000000..09a4524 --- /dev/null +++ b/Include/iBase/iPlugin/ZxMainWindow.h @@ -0,0 +1,150 @@ +#pragma once + +#include + +#include "iPlugin_global.h" + +class iJobRun; +class iSubWnd; +class iSubWndBaseAF; +class ZxObjWmPoint; +class ZxTabWidget; +class ZxMdiSubWindow; +class iWxRunOptionIPR; +class iDockBaseWx; +class TreeWxMain; +class iWxDesign; + +// 为外部引用xMainWindow主窗体部分接口而单独封装 +// 原本想通过虚接口类实现,但由于QObject缘故,虚接口类 +// 不便实现信号槽机制,故只能封装该类进行实现 +class I_PLUGIN_EXPORT ZxMainWindow : public QMainWindow +{ +public: + + ZxMainWindow(QWidget* parent = 0); + ~ZxMainWindow(); + +public: + + /// @brief 检验是否具有正式授权 + /// @param bPromptLicenseDlg 在不具备授权的时候,是否弹出授权对话框 + virtual bool checkLicensed(bool bPromptLicenseDlg = false) = 0; + + /// @brief 返回当前所有JobRun的数组指针 + virtual QVector* getVecJoRunPtrs() = 0; + + /// @brief 返回iWxRunOptionIPR窗体指针,该函数接口为权宜之计,慎用,后续可能需要删除 + virtual iWxRunOptionIPR* getWxIprOptionPtr() = 0; + + // 左侧工区树 +// enum DockTreeMode +// { +// DTM_Da = 0, //数据 +// DTM_Jb = 1, //Jobs +// DTM_Rs = 2 //成果 +// }; + /// @brief 获取左侧DockWx指针 + /// @param n (in) 0:数据树 1:Jobs树 2:成果树 + /// @note 注1:由于宏定义及依赖关系问题,暂时用int而非enum枚举作为参数类型 + /// 注2:对于WTAI来讲,目前Dock其实均为子类型iDockWellExplorer + virtual iDockBaseWx* getLeftDockWx(int n) = 0; + + /// @brief 获取左侧树型控件指针 + /// @param n (in) 0:数据树 1:Jobs树 2:成果树 + /// @note 注1:由于宏定义及依赖关系问题,暂时用int而非enum枚举作为参数类型 + /// 注2:获取指针之后,可以根据需要各自转换为如下三种子类类型 + /// TreeWxMainDa* / TreeWxMainJb* / TreeWxMainRs* + virtual TreeWxMain* getLeftTreeWx(int n) = 0; + + + /// @brief 获取指定窗体Wnd对应的TabWx + /// @param p:某窗体 + virtual ZxTabWidget* getTabWxOfSubWnd(iSubWnd* p) = 0; + + /// @brief 获取当前Mdi对应的TabWx + /// @param p:某MdiSubWindow,如果p为空,则是当前激活的 + virtual ZxTabWidget* getTabWxOf(ZxMdiSubWindow* p = NULL) = 0; + + /// @brief 获取当前MdiChild + virtual ZxMdiSubWindow* getCurMdiChild() = 0; + + /// @brief 获取当前TabWidget + virtual ZxTabWidget* getCurTabWx() = 0; + + /// @brief 获取当前SubWnd + virtual iSubWnd* getCurSubWnd() = 0; + + /// @brief 其它方创建的DockWx,与主窗口显示Detach,通常在析构时 + virtual bool detachOuterDockWx(iDockBaseWx* pDockWx) = 0; + +public slots: + + /// @brief 主窗口创建一个新的窗体,由iWxRunOptionStd/iWxRunOptionIPR之后的窗体触发 + /// @param p (out)待创建的指针 + /// @note 举例:流动段选择确定之后,右键弹出,创建 下一个 流动段分析窗口 + virtual void slotCreateNextSubWnd(iSubWndBaseAF*& p) = 0; + + /// @brief 激活,由iWxRunOptionStd/iWxIprRunOptio之后的窗体触发 + /// @param p (in)待激活窗体 + virtual void slotActivateSubWnd(iSubWnd*& p) = 0; + + /// @brief 当压力流量数据更改时触发,主要是PF一旦保存之后 + /// 提供给其它相关的SubWnd一种刷新机制 + virtual void slotCacheDataCodePF(QString sCode) = 0; + + /// @brief 成果保存时,申请创建RstWnd, + /// @param (out) b:是否已经成功创建 + /// @note:①如果成功创建,则会同步生成RstUtils等成果必须内容 + /// ②如果成功创建,则会把创建结果设置给SubWnd(即信号触发者) + virtual void slotCreateRstWndForSubWnd(bool& b) = 0; + + /// @brief 在外部触发,关闭或者显示左侧工区数据树(全部,所有的Dock) + virtual void slotLeftTreeDocksVisible(bool bVisible) = 0; + + /// @brief 刷新Ribbon按钮状态 + virtual void slotFreshRnStates() = 0; + + /// @brief 获取井位图信息 + virtual void slotGetWmInfos(QVector&) = 0; + + /// @brief Lpr点收集了,右键响应 + virtual void slotLprPointPQ(QVector& vec) = 0; + + /// @brief 获取当前主窗口有多少窗口 + virtual void slotGetAllWnds(QMap& map, ZxTabWidget* pTabWx) = 0; + + /// @brief 刷新井相关 + virtual void slotFreshWellBasics() = 0; + + /// @brief SubWndData表格右键删除时,触发 + virtual void slotSwdDataDelObjs(QStringList& listKeys, QString& sTable, QString& sError) = 0; + + /// @brief 控制所在的MDI视图 + virtual void slotMdiChildShow(int) = 0; + + /// @brief 获取所有MDI + virtual void slotGetAllMdis(QVector&) = 0; + + /// @brief 在SubWnd中创建Dock并且显示至主窗体之中,该Dock由SubWnd进行管理 + /// @param pDockWx (in) Dock指针 + /// @param areaDefault(in) 默认布局区域 + virtual void slotAppendDock2Main(iDockBaseWx* pDockWx, \ + Qt::DockWidgetArea areaDefault = Qt::LeftDockWidgetArea) = 0; + +public slots: + + // 线程控制 + + /// @brief 在算法执行时显示隐藏进度条相关 + virtual void slotShowProgressAbout(bool bVisible) = 0; + + /// @brief 线程暂停 + virtual void slotThreadPause() = 0; + + /// @brief 线程结束 + virtual void slotThreadQuit() = 0; + +signals: + +}; diff --git a/Include/iBase/iPlugin/ZxMdiArea.h b/Include/iBase/iPlugin/ZxMdiArea.h new file mode 100644 index 0000000..13dee86 --- /dev/null +++ b/Include/iBase/iPlugin/ZxMdiArea.h @@ -0,0 +1,61 @@ +#pragma once + +#include + +#include "Defines.h" +#include "iPlugin_global.h" + +// 主要重载其信号响应 +class I_PLUGIN_EXPORT ZxMdiArea : + public QMdiArea +{ + Q_OBJECT + +public: + ZxMdiArea(QWidget* parent = 0); + ~ZxMdiArea(); + + // 布局 + // bFilterMode二次布局时,如果bFilterMode为true则过滤掉Hide的窗体 + void layoutSubWnds(WndLayoutMode o, bool bFilterMode = false); + WndLayoutMode getLayoutMode(); + void relayoutSubWnds(); + + void setLastAutoSpan(bool b); + void setColCount(int n); + +private: + + // 布局实现 + void _layoutOne(QList listSubWnds); + void _layoutVert(QList listSubWnds); + void _layoutHori(QList listSubWnds); + void _layoutCell(QList listSubWnds); + void _layoutCascade(QList listSubWnds); + +protected: + + bool eventFilter(QObject *object, QEvent *event); + void childEvent(QChildEvent *childEvent); + void resizeEvent(QResizeEvent *resizeEvent); + void timerEvent(QTimerEvent *timerEvent); + void showEvent(QShowEvent *showEvent); + +signals: + + // Mdi大小发生了切换 + void sigMdiSizeChanged(); + + // 在布局前允许用户对窗体顺序进行调整 + void sigAdjustSubWnds(QList&); + + // nMode = 0: added 1:removed 2:polished +// void sigChildActioned(QObject* pChild, int nMode); + +protected: + + WndLayoutMode m_oMode; + bool m_bFilterMode; + bool m_bLastSpan; //最后一个是否对齐(如果不够的话),默认为true + int m_nColCount; //默认为2 +}; diff --git a/Include/iBase/iPlugin/ZxMdiSubWindow.h b/Include/iBase/iPlugin/ZxMdiSubWindow.h new file mode 100644 index 0000000..ec13602 --- /dev/null +++ b/Include/iBase/iPlugin/ZxMdiSubWindow.h @@ -0,0 +1,48 @@ +#pragma once + +#include +#include +#include +#include + +#include "IxDynObj.h" +#include "iBase_global.h" +#include "iPlugin_global.h" + +// QMdiSubWindow进一步封装 +class I_PLUGIN_EXPORT ZxMdiSubWindow : + public QMdiSubWindow +{ + Q_OBJECT + +public: + + ZxMdiSubWindow(bool bNovelQss, QWidget* parent = 0); + ~ZxMdiSubWindow(); + + void setBindingObj(IxDynObj* p); + IxDynObj* getBindingObj(); + +protected: + + bool eventFilter(QObject*, QEvent*); + + void showEvent(QShowEvent *event); + void hideEvent(QHideEvent* event); + void changeEvent(QEvent* event); + void closeEvent(QCloseEvent* event); + void resizeEvent(QResizeEvent* event); + void mouseDoubleClickEvent(QMouseEvent* event); + +signals: + + // b:返回的是,是否允许关闭 + void sigConformClosing(bool& b); + + // 一旦关闭后,通知刷新状态 + void sigMdiClosed(); + +private: + + IxDynObj* m_pBindingObj; //这是绑定的Obj对象 +}; diff --git a/Include/iBase/iPlugin/ZxMdiSubWindowChild.h b/Include/iBase/iPlugin/ZxMdiSubWindowChild.h new file mode 100644 index 0000000..910b4f4 --- /dev/null +++ b/Include/iBase/iPlugin/ZxMdiSubWindowChild.h @@ -0,0 +1,15 @@ +#pragma once + +#include "ZxMdiSubWindow.h" + +//Mdi中的子项(通常用于处理解释结果四窗体) +class I_PLUGIN_EXPORT ZxMdiSubWindowChild : + public ZxMdiSubWindow +{ + Q_OBJECT + +public: + + ZxMdiSubWindowChild(bool bNovelQss, QWidget* parent = 0); + ~ZxMdiSubWindowChild(); +}; diff --git a/Include/iBase/iPlugin/ZxMdiSubWindowStyle.h b/Include/iBase/iPlugin/ZxMdiSubWindowStyle.h new file mode 100644 index 0000000..6173d9e --- /dev/null +++ b/Include/iBase/iPlugin/ZxMdiSubWindowStyle.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include + +#include "IxDynObj.h" +#include "iBase_global.h" +#include "iPlugin_global.h" + +// 为了定制标头而设定的Style +class I_PLUGIN_EXPORT ZxMdiSubWindowStyle : public QProxyStyle +{ +public: + + ZxMdiSubWindowStyle(QStyle* baseStyle = 0); + +public: + + virtual void drawComplexControl(ComplexControl control, \ + const QStyleOptionComplex* option, \ + QPainter* painter, \ + const QWidget* widget) const; + +protected: + + void drawButton(QPainter* painter, \ + const QRectF& buttonRect, \ + const QPixmap& icon, \ + const QSize size) const; + +}; diff --git a/Include/iBase/iPlugin/ZxTabWidget.h b/Include/iBase/iPlugin/ZxTabWidget.h new file mode 100644 index 0000000..459b736 --- /dev/null +++ b/Include/iBase/iPlugin/ZxTabWidget.h @@ -0,0 +1,42 @@ +#pragma once + +#include + +#include "iPlugin_global.h" + +// ZxTabWidget该类实现TabWidget相关附加功能 +class I_PLUGIN_EXPORT ZxTabWidget : + public QTabWidget +{ + Q_OBJECT + +public: + ZxTabWidget(QWidget *parent = 0); + ~ZxTabWidget(); + + // Tab是否允许移动,默认不移动 + void setTabMovable(bool b); + bool isTabMovable(); + + // TabBar + void setTabBarHorW(int n); + int getTabBarHorW(); + +protected: +// virtual void mouseDoubleClickEvent(QMouseEvent *); + + // event分发 + virtual bool eventFilter(QObject *, QEvent *); + +signals: + + // 双击Item + void sigItemDoubleClicked(int n); + // 右击Item + void sigItemRightClicked(int n, QPoint pos); + +private: + + QTabBar* m_pTabBar; + bool m_bTabMovable; //TabItem允许移动 +}; diff --git a/Include/iBase/iPlugin/ZxTableHeaderView.h b/Include/iBase/iPlugin/ZxTableHeaderView.h new file mode 100644 index 0000000..d4407df --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableHeaderView.h @@ -0,0 +1,87 @@ +#pragma once + +#include + +#include "iPlugin_global.h" + +// 此处是为了响应在ZxTableView中的表头进行下拉选择(支持多选/单选两种模式)而做的三个类。 +// 其中ZxTableHeaderView是表头,点中其某一列时,创建ZxTableHeaderViewCbx,而ZxTableHeaderViewCbx +// 内部又设置了view为ZxTableHeaderViewCbxView +// 所以ZxTableHeaderView、ZxTableHeaderViewCbx、ZxTableHeaderViewCbxView为一组 +// 该组实现了表头的Radio选择(单选)+ Check选择(多选) + +class ZxTableHeaderViewCbx; + +// 表头HeaderView +class I_PLUGIN_EXPORT ZxTableHeaderView : public QHeaderView +{ + Q_OBJECT + +public: + + ZxTableHeaderView(const QStringList& listItems, \ + bool bMultiSelMode, + QWidget* parent = 0); + ~ZxTableHeaderView(); + + // 设置表头下拉列表取值(两个接口,分别对应多选和单选) + void setColumnItems(const QStringList& listFields, \ + const QStringList& listAlls); + void setColumnItems(const QString& sCurSel, \ + const QStringList& listAlls); + + // 设置Titles + void changeTitles(QStringList listTitles); + +protected: + + // 处理鼠标单击消息 + void mousePressEvent(QMouseEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + + // 重置表头combo控件大小 + void resizeItem(int index); + + // 删除comboBox控件 + void removeCombo(); + + // 重绘,此处有待完善,目前是没有版本,直接把父类搬过来了。 + void paintSection(QPainter* painter, const QRect &rect, int logicalIndex) const; + +public Q_SLOTS: + + // 选择改变时响应 + void slotSelChanged(const int, const QStringList); + + // 选择改变时响应 + void slotSelChanged(const int, const QString); + + // 处理表头单元缩放事件 + void handleSectionResized(int index); + +signals: + + void sigGetColumnItems(int index); + void sigSelChanged(const int, const QStringList); + void sigSelChanged(const int, const QString); + +private: + + QStringList m_listTitles; //标题 + bool m_bMultiSelMode; //是否多选模式 + + ZxTableHeaderViewCbx* m_pCbxSel; //下拉控件 + + // 当前表头索引 + int m_nCurIndex; + + // 当前选择的项 + QStringList m_listCbxCheckedItems; //多选模式 + QString m_sRadioCheckedItem; //单选模式 + + // 所有项 + QStringList m_listAllItems; +}; + + + diff --git a/Include/iBase/iPlugin/ZxTableHeaderView.h.bak b/Include/iBase/iPlugin/ZxTableHeaderView.h.bak new file mode 100644 index 0000000..29ecf62 --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableHeaderView.h.bak @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +// 此处是为了响应在QTableWidget中的表头进行下拉选择(支持多选)而做的三个类。 +// 其中QHeaderViewEx是表头,点中其某一列时,创建QHeaderComboBoxEx,而QHeaderComboBoxEx +// 内部又设置了view为QListViewEx + +// 此处是为了响应在QTableWidget中的表头进行下拉选择(支持多选)而做的三个类。 +// 其中ZxHeaderViewEx是表头,点中其某一列时, +// 创建ZxHeaderComboBoxEx,而ZxHeaderComboBoxEx +// 内部又设置了view为ZxListViewEx +// 所以ZxHeaderViewEx、ZxHeaderComboBoxEx、ZxListViewEx为一组 +// 该组实现了表头的Radio选择(单选) +// 而原来的QHeaderViewEx、ZxTableHeaderViewCbx、QListViewEx为一组 +// 这一组实现了表头的Check选择(多选) + +// 表头HeaderView +class I_PLUGIN_EXPORT ZxTableHeaderView : public QHeaderView +{ + Q_OBJECT +public: + ZxTableHeaderView(const QStringList& lstStrText, QWidget *parent = 0); + ~ZxTableHeaderView(); + + // 设置表头下拉列表取值 + void setColumnItems(const QStringList& lstFields, const QStringList& lstAlls); + + // 设置Titles + void changeTitles(QStringList listTitles); + +public Q_SLOTS: + + // 选择改变时响应 + void slotSelChanged(const int, const QStringList); + + // 处理表头单元缩放事件 + void handleSectionResized(int index); + +signals: + void sigGetColumnItems(int index); + void sigSelChanged(const int, const QStringList); + +protected: + + // 重置表头combo控件大小 + void resizeItem(int index); + + // 删除comboBox控件 + void removeCombo(); + + // 处理鼠标单击消息 + void mouseReleaseEvent(QMouseEvent *e); + void mousePressEvent(QMouseEvent *e); + + // 重绘,此处有待完善,目前是没有版本,直接把父类搬过来了。 + void paintSection(QPainter* painter, const QRect &rect, int logicalIndex) const; + +private: + QStringList m_lstHeaderTexts; //标题 + QStringList m_lstComboxText; ///< 下拉列表中显示表头列表,当前选中的 + QStringList m_lstComboxTextAll;///< 下拉列表中显示表头列表,所有的 + QComboBox* m_pCbxSel; ///< 表头下拉列表控件 + int m_nCurIndex; ///< 被选中的表头单元ID +}; + + + diff --git a/Include/iBase/iPlugin/ZxTableHeaderViewCbx.h b/Include/iBase/iPlugin/ZxTableHeaderViewCbx.h new file mode 100644 index 0000000..cc5009b --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableHeaderViewCbx.h @@ -0,0 +1,49 @@ +#pragma once + +#include + +#include "iPlugin_global.h" + +// 自定义Combobox 失去焦点是能够自动隐藏 +class I_PLUGIN_EXPORT ZxTableHeaderViewCbx :public QComboBox +{ + Q_OBJECT + +public: + + explicit ZxTableHeaderViewCbx(bool bMultiSelMode, QWidget *parent = 0); + ~ZxTableHeaderViewCbx(); + +public: + + // hidePopup 重写隐藏下拉列表 + void hidePopup(); + + // 所在列索引 + void setColumnIndex(int nIndex); + +protected: + + // 重写失去焦点事件 + void focusOutEvent(QFocusEvent *e); + +signals: + + // 选择改变(多选) + void sigSelChanged(const int, const QStringList); + + // 选择改变(单选) + void sigSelChanged(const int, const QString); + +private: + + // 列索引 + int m_nCurIndex; + + // 是否多选模式 + bool m_bMultiSelMode; + + // 每次都发送两遍消息,奇怪 + int m_nLastSendIndex; + QString m_sLastSendText; +}; diff --git a/Include/iBase/iPlugin/ZxTableHeaderViewCbx.h.bak b/Include/iBase/iPlugin/ZxTableHeaderViewCbx.h.bak new file mode 100644 index 0000000..d049e67 --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableHeaderViewCbx.h.bak @@ -0,0 +1,32 @@ +#pragma once + +#include "ZxTableHeaderViewCbxView.h" + +// 自定义Combobox 失去焦点是能够自动隐藏 +class I_PLUGIN_EXPORT ZxTableHeaderViewCbx :public QComboBox +{ + Q_OBJECT +public: + explicit ZxTableHeaderViewCbx(QWidget *parent = 0); + ~ZxTableHeaderViewCbx(); +public: + + // hidePopup 重写隐藏下拉列表 + void hidePopup(); + + // 所在列索引 + void setColumnIndex(int nIndex); + +protected: + + //重写失去焦点事件 + void focusOutEvent(QFocusEvent *e); + +signals: + // 选择改变 + void sigSelChanged(const int, const QStringList); + +private: + // 列索引 + int m_nCurIndex; +}; diff --git a/Include/iBase/iPlugin/ZxTableHeaderViewCbxView.h b/Include/iBase/iPlugin/ZxTableHeaderViewCbxView.h new file mode 100644 index 0000000..4dfb064 --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableHeaderViewCbxView.h @@ -0,0 +1,43 @@ +#pragma once + +#include +#include +#include + +#include "iPlugin_global.h" + +// 为了QCombobox下拉列表添加QCheckBox复选框创建QListViewEx +class I_PLUGIN_EXPORT ZxTableHeaderViewCbxView : public QListWidget +{ + Q_OBJECT + +public: + + ZxTableHeaderViewCbxView(QWidget* parent, \ + QComboBox* pComboBox, \ + QStringList* listItemAlls); + + // 返回用户选择项的用户自定义数据(如果单选,只返回一项) + virtual bool getSelectItems(QStringList& listItems); + +protected: + + bool m_bMultiSelMode; //是否多选模式 + + // 相关的变量,主要为控制 + QComboBox* m_pComboBox; +// QStringList m_listItems; +// QList m_listChecked; +// QList m_listItemData; +// QList m_listCheckBoxes; +// bool m_bAllConsider; +// bool m_bByAll; + QMap m_mapRawStates; + + + +// QList m_listRadioButtons; + + bool m_bUnableSP; + +}; diff --git a/Include/iBase/iPlugin/ZxTableHeaderViewCbxViewM.h b/Include/iBase/iPlugin/ZxTableHeaderViewCbxViewM.h new file mode 100644 index 0000000..ce2d0ed --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableHeaderViewCbxViewM.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ZxTableHeaderViewCbxView.h" + +class I_PLUGIN_EXPORT ZxTableHeaderViewCbxViewM : public ZxTableHeaderViewCbxView +{ + Q_OBJECT + +public: + + ZxTableHeaderViewCbxViewM(QWidget* parent, \ + QComboBox* pComboBox, \ + QStringList* listItemAlls, \ + QStringList* listItemCheckeds); + + + // 返回用户选择项的用户自定义数据(如果单选,只返回一项) + virtual bool getSelectItems(QStringList& listItems); + +protected slots: + + void slotCheckBoxChanged(int state); + +protected: +}; diff --git a/Include/iBase/iPlugin/ZxTableHeaderViewCbxViewS.h b/Include/iBase/iPlugin/ZxTableHeaderViewCbxViewS.h new file mode 100644 index 0000000..d587b24 --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableHeaderViewCbxViewS.h @@ -0,0 +1,23 @@ +#pragma once + +#include "ZxTableHeaderViewCbxView.h" + +class I_PLUGIN_EXPORT ZxTableHeaderViewCbxViewS : public ZxTableHeaderViewCbxView +{ + Q_OBJECT + +public: + + ZxTableHeaderViewCbxViewS(QWidget* parent, \ + QComboBox* pComboBox, \ + QStringList* listItemAlls, \ + const QString& sCurSel); + + + // 返回用户选择项的用户自定义数据(如果单选,只返回一项) + virtual bool getSelectItems(QStringList& listItems); + +protected slots: + + void slotRadioChanged(bool b); +}; diff --git a/Include/iBase/iPlugin/ZxTableModel.h b/Include/iBase/iPlugin/ZxTableModel.h new file mode 100644 index 0000000..063850d --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableModel.h @@ -0,0 +1,244 @@ +#pragma once + +#include +#include +#include + +#include "Defines.h" +#include "iBase_global.h" +#include "iPlugin_global.h" +typedef bool(*LessThan)(const QPair&, const QPair&); + +// 通用数据表数据模型对象类 +class I_PLUGIN_EXPORT ZxTableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + + ZxTableModel(int nRows, int nColumns, \ + const QStringList& lstTitles, \ + QObject *parent = 0); + explicit ZxTableModel(QObject *parent = 0); + virtual ~ZxTableModel(); + +public: + + void initParas(); + + // 内部根据role获取对应的data(角色与权限) + QVariant data(const QModelIndex& index, \ + int role = Qt::DisplayRole) const; + QVariant dataRoleOfIndexValue(const QModelIndex& index) const; + QVariant dataRoleOfBkColor(const QModelIndex& index) const; + QVariant dataRoleOfForeColor(const QModelIndex& index) const; + QVariant dataRoleOfAlign(const QModelIndex& index) const; + QVariant dataRoleOfFont(const QModelIndex& index) const; + QVariant dataRoleOfToolTips(const QModelIndex& index) const; + QVariant dataRoleOfCheckState(const QModelIndex& index) const; + + bool setData(const QModelIndex& index, \ + const QVariant& value, \ + int role = Qt::EditRole); + void setData(const QModelIndex& indexFrom, \ + const VVecVariant& vecData/*, int nTimes = 1*/); + + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + bool setHeaderData( int section, Qt::Orientation orientation, + const QVariant & value, int role = Qt::EditRole ); + + // 返回指定索引编号的数值 + QVariant value(const QModelIndex &index) const; + // 返回指定单元格内的文本数值 + QString textValue(int row, int column) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + +public: + // 函数重载,自父类 + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + +public: + + // 标题相关转换 + void setTitles(const QStringList &lstTitles); + QStringList getTitles(); + void setTitle(int iColumn, const QString &sTitle); + QString getTitle(int iColumn) const; + QString title(int column) const; + int column(const QString &sTitle) const; + + // 数据传递 + QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex()) const; + void setData(const VVecVariant &vecsData); + void setData(const VVecFloat &vecData); + void setData(const VVecDouble &vecData); + + VVecVariant getData() const; + // 返回显示的数据,考虑了小数位数之类 + VVecVariant getShowData() const; + VVecVariant getValidData() const; + + void setRowData(int iRow, const VecVariant &vecData); + VecVariant getRowData(int iRow) const; + + VecVariant getColumnData(const QString &sTitle) const; + VecVariant getColumnData(int iColumn) const; + void setColumnData(int iColumn, const VecVariant &vecData); + + QVariant getCellData(int nRow, int nColumn) const; + void setCellData(int nRow, int nColumn, const QVariant &o); + bool setCellData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + + // 行 + bool canEditRows(); + bool insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() ); + bool removeRows ( int row, int count, const QModelIndex & parent = QModelIndex() ); + void changeListMems(VecInt& list, int nIndex, \ + int nCount, bool bInsert); + + // 列 + bool canEidtColumns(int iCol, int iCount); + bool insertColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ); + bool removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ); + void dealColCountChanged(int nIndex, int nCount, bool bInsert); + void changeColDigits(int nIndex, int nCount, bool bInsert); + void changeColTrimRights(int nIndex, int nCount, bool bInsert); + + // 删除指定数据 + void removeData(int iColumn = -1, int iRow = -1); + // 清除指定数据 + void clearData(int iColumn = -1, int iRow = -1); + + // 行列是否不可编辑 + void setRowReadonly(int n, bool bReadonly = true); + void setColReadonly(int n, bool bReadonly = true); + bool isRowReadonly(int n); + bool isColReadonly(int n); + + // 设为新插入行 + void setRowNew(int n, bool bNew); + bool isRowNew(int n); + + // 设置/解除列锁定 + void lockCol(int iCol); + void unlockCol(int iCol); + + // 小数位数 + void setDecimas(int n, bool bClearColDecimas = false); + int getDecimas(); + void setColDecima(int nCol,int n); + int getColDecima(int nCol); + + // 是否trim 0,对于小数型 + void setTrimRights(bool b, bool bClearColTrimRights = false); + bool getTrimRights(); + void setColTrimRight(int nCol,bool b); + bool getColTrimRight(int nCol, bool& b); + + // 设置标题行的颜色 + void setHeaderColor(int nColorRow ,int color); + + // 设置Cell的颜色,如果col=-1,整行,如果row=-1,整列 + // 内部:int n = row * 1024 * 32 + c; + void setCellColor(QColor clr, int row, int col = -1); + void clearCellColors(); + void setCellBackColor(QColor clr, int row, int col = -1); + void clearCellBackColors(); + + // Check Col设置 + void setCheckCol(int nCol); + int getCheckCol(); + + // 如果有CheckCol时,每一行的Check状态 + QMap* getMapRowCheckStates(); + void setRowCheckState(int r, int n); + int getRowCheckState(int r) const; + + // 每一行的状态 + QVector* getTableRowStatesPtr(); + void setTableRowState(int nIndex, TableRowState o); + TableRowState getTableRowState(int r); + void restoreRowStates(); + + // 数据Mask + QMap* getMapValueMasksPtr(); + bool getValueMask(float f, QVariant& o) const; + bool setValueMask(float f, QVariant o); + bool convertByMask(QVariant& v) const; + + // 设置数据修改标记 + void setModified(bool b = true); + bool isModified(void) const; + + void dealwithPaste(const QModelIndex &topLeft, \ + const QModelIndex &bottomRight); + +signals: + + void sigDataReset(); //每次调用setData时触发 + void modified(); + bool cellDataChanging(const QModelIndex& index, \ + const QVariant& oOld, \ + const QVariant& oNew, bool& bOK); + void dataPasted(const QModelIndex &topLeft, \ + const QModelIndex &bottomRight); + +protected: + + void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + static bool preThan(const QPair &l, + const QPair &r); + static bool proThan(const QPair &l, + const QPair &r); + +protected: + + // 行列数 + int m_nRowCount; + int m_nColCount; + + // 标题 + QStringList m_listTitles; + + // 数据 + VVecVariant m_vvecData; + + // 只读行列、锁定列 + VecInt m_listColsLocked; + VecInt m_listColsReadonly; + VecInt m_listRowsReadonly; + + // 新插入行号列表 + VecInt m_listRowsNew; + + // 小数位数 + int m_nDigit; //统一 + QMap m_mapColDigits;//特殊列 + + // 是否trim 0,对于小数型 + bool m_bTrimRight; + QMap m_mapColTrimRights;//特殊列 + + // 左/上Header颜色 + QMap m_mapHeaderColors; + + // 按照Cell设置属性 + // int n = row * 1024 * 32 + c; + QMap m_mapCellColors; + QMap m_mapCellBackColors; + + // 设定Check列,只允许一列 + int m_nCheckCol; + QMap m_mapRowCheckStates; + + // 每一行的状态,比如显示为红色 + QVector m_vecRowState; + + // 对于特殊标示的显示,比如-9999显示为---,-99999显示为空 + QMap m_mapValueMasks; + + // 修改标记 + bool m_bModified; +}; diff --git a/Include/iBase/iPlugin/ZxTableOption.h b/Include/iBase/iPlugin/ZxTableOption.h new file mode 100644 index 0000000..0aa1fdc --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableOption.h @@ -0,0 +1,69 @@ +#pragma once + +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "ZxUiBase.h" + +#include "iPlugin_global.h" + +class ZxSerializer; +class ZxTableModel; +class ZxTableView; + +// Table格式选项 +class I_PLUGIN_EXPORT ZxTableOption : public ZxUiBase +{ + Q_OBJECT + +public: + + explicit ZxTableOption(ZxTableView* pView, \ + QWidget *parent = 0); + ~ZxTableOption(); + +public: + + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public slots: + + void slotCbxAllModeClicked(); + + void slotBtnOK(); + void slotBtnCancel(); + +private: + + void initUI_Main(); + void initUI_Headers(); + void initUI_Grids(); + void initUI_Btns(); + void freshUI_Grids(); + void freshUI_CtrlsOf(int nCol, bool bStr, QSpinBox*& pSpin, QCheckBox*& pCbx); + void addColInfoRow(QGridLayout*& pLayout, QString sName, bool bStr); + void addColTitleRow(QGridLayout*& pLayout, QStringList list); + int getDefaultDigit(int nCol, bool bStr); + bool getDefaultTrim(int nCol, bool bStr); + + bool _apply(); + + void ensureSubs(); + +private: + + VecVariant m_vecDataRowOne; + + ZxTableView* m_pTableView; + ZxTableModel* m_pTableModel; + + QVBoxLayout* m_pMainLayout; + QGridLayout* m_pGridLayout; + + QCheckBox* m_pCbxTopUsed; + QCheckBox* m_pCbxTopAutoTrimmed; + QSpinBox* m_pSpinTopDigit; +}; diff --git a/Include/iBase/iPlugin/ZxTableView.h b/Include/iBase/iPlugin/ZxTableView.h new file mode 100644 index 0000000..a2482be --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableView.h @@ -0,0 +1,189 @@ +#pragma once + +#include +#include "Defines.h" +#include "iBase_global.h" +#include "iPlugin_global.h" + +class ZxTableModel; +class ZxComboBoxDelegate; + +/// @brief The ZxTableView class 通用数据表视图对象类 +class I_PLUGIN_EXPORT ZxTableView : public QTableView +{ + Q_OBJECT + +public: + + enum MenuMode + { + MTM_NONE = 0, //不显示右键 + MTM_Readonly, //只读,只弹出部分复制类的菜单 + MTM_Edit_Without_Row,//编辑,但不允许插入行 + MTM_Edit_Without_Col,//编辑,但不允许插入列 + MTM_Edit_Without_RC, //编辑,但不允许插入行列 + MTM_Edit, //全部编辑类的菜单 + MTM_Unknown + }; + + explicit ZxTableView(QWidget* parent = 0, \ + QAbstractItemModel* model = NULL); + virtual ~ZxTableView(); + + // initMenu + virtual void initContextMenu(); + + // 设置右键菜单模式 + virtual void setMenuMode(MenuMode oMenuMode); + + // 表格部分界面属性,Qt5必须的 部分 + virtual void fuzzyUiOfQt5(); + + // 这是根据分辨率统一进行调整表格宽度,慎用 + virtual void adjustColWidths(); + // 对于表格,考虑分辨率比较特殊,此处单独通过函数实现 + static int getResoSizeW(int n); + static int getResoSizeH(int n); + + // 返回当前视图中的模型对象 + ZxTableModel* getModel(void) const; + + // 获取选中的行范围 + bool getSelectedRowRange(int& min, int& max); + + // 为表格控件的nCol列添加combobox委托 + virtual void setComboxDelegateForColumn(const QString& sTitle, \ + const QStringList& lstItemText); + virtual void resetComboxDelegate(); + QVector* getVecDelegateCmbs(); + + //设置是否绘制多余网格ZXF20240703 + void setShowFreeGrid(bool bVisible); + +protected: + + //绘制纵向网格 + void drawVerGrid(); + + //绘制横向网格 + void drawHorGrid(); + + // 重载 + virtual void paintEvent(QPaintEvent* event); + virtual void dragEnterEvent(QDragEnterEvent* event); + virtual void dropEvent(QDropEvent* event); + virtual void keyPressEvent(QKeyEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual QModelIndex moveCursor(CursorAction cursorAction, \ + Qt::KeyboardModifiers modifiers); + virtual void selectionChanged(const QItemSelection &selected, \ + const QItemSelection &deselected); + virtual void scrollTo (const QModelIndex & index, \ + ScrollHint hint = EnsureVisible); + +public slots: + + void restoreRowStates(bool bClearSelection = false); + void updateCells(int r, int c = -1); + + // 右键 + virtual void showCustomContextMenu(const QPoint &pos); + + // 插入行列、删除行列 + virtual void slotInsertRowsAbove(); //批量插入行 + virtual void slotInsertRowsBelow(); + virtual void slotInsertRowAbove(); //单条插入行 + virtual void slotInsertRowBelow(); + virtual void slotInsertColumns(); //插入列 + virtual void slotRemoveRows(); //删除行 + virtual void slotRemoveColumns(); //删除列 + + // 基本编辑,针对选择单元格 + virtual void slotCopy(); + virtual void slotPaste(); + virtual void slotCut(); + virtual void slotClearData(); + + // 格式调整(比如小数位置、是否凑齐) + virtual void slotFormatColumns(); + + // 其它 + virtual void slotFreezeColumn(); + virtual void slotUnfreezeColumn(); + virtual void slotLockColumn(); + virtual void slotUnlockColumn(); + + // 保存 + virtual void slotSaveDatabase(); + virtual void slotExportData(); + + // 冻结时信号响应 + void slotUpdateSectionWidth(int logicalIndex,int, int newSize); + void slotUpdateSectionHeight(int logicalIndex, int, int newSize); + +protected: + + // 内部实现 + virtual void _insertRows(int nCount, bool bAbove); + virtual void _insertCols(int nCount); + virtual void _freezeCols(int l, int r); + virtual void _copyData(bool bClearCell = false); + + // 粘贴时将剪切板文本格式解析 + VVecVariant _parseGridStrs(const QString& strText, \ + QChar spliter = '\t'); + + // 删除行或列后重新计算新的选择区域 + virtual QModelIndexList getNewSelRange(QModelIndex topLeft, \ + QModelIndex botRight, \ + int nCount, \ + Qt::Orientation orientation = Qt::Horizontal); + + // 冻结相关 + void initFreezeView(int left,int right); + void freshFreezeView(int left, int right); + +signals: + + // 选择区域改变 + void sigSelectionChanged(); + + // 增减行、增减列、剪切、粘贴、清空 等情况下触发 + void sigViewRangeChanged(QModelIndexList indexOldSelList, \ + QModelIndexList indexNewSelList, \ + QModelIndex oldCurIndex); + void sigColInserted(int nFrom, int nCount); + void sigColRemoved(int nFrom, int nCount); + + // 删除行,通过此信号通知调用方删除数据库数据 + // 如果sError非常证明未删除成功 + void sigRemovingRows(int nRowFrom, int nRowTo, QString& sError); + + // 这是增加新的自定义菜单项。 + void sigMenuItemRequested(QMenu* pMenu, int r, int c); + + // 触发信号,由用户进行入库处理 + void sigSaveDatabase(); + + // 这是允许外界对粘贴板内容进行解析,解析为二维表格数据 + void sigParseContents(const QString& s, VVecVariant& vvec); + +protected: + + // 右键 + MenuMode m_oMenuMode; + QMenu* m_pContextMenu; + + // 冻结 + int m_nFreezeColL; + int m_nFreezeColR; + QTableView* m_pFreezeView; + + // 托管 + QMap m_mapDelegateCols; + QVector m_vecDelegateCmbs; + + //是否显示网格 + bool m_bShowFreeGrid; +}; diff --git a/Include/iBase/iPlugin/ZxTableViewEx.h b/Include/iBase/iPlugin/ZxTableViewEx.h new file mode 100644 index 0000000..1807961 --- /dev/null +++ b/Include/iBase/iPlugin/ZxTableViewEx.h @@ -0,0 +1,54 @@ +#pragma once + +#include "Defines.h" +#include "ZxTableView.h" + +class ZxTableHeaderView; + +// 本类主要实现表头可以筛选的表格 +class I_PLUGIN_EXPORT ZxTableViewEx : public ZxTableView +{ + Q_OBJECT + +public: + + explicit ZxTableViewEx(bool bMultiSel = true, \ + QWidget* parent = 0, \ + QAbstractItemModel* model = NULL); + virtual ~ZxTableViewEx(); + +//private: + void initHeaderView(QStringList list, \ + ZxTableModel* pModel = NULL); + /// @brief 取得某列不重复的数据,并且转换为QString + /// @param nCol 列索引 + /// @param bOnlyCurShow 是否仅仅获取表格当前显示内容(考虑筛选后) + QStringList getColDistinct(int nCol, bool bOnlyCurShow = true); + + VVecVariant getCurFilterData(int nIndex); + +public slots: + + // 表头的响应 + void slotOnGetColumnItems(int index); + void slotSelChanged(const int index, const QStringList list); + + void slotRawDataChanged(); + +signals: + + void sigGetFilterData(VVecVariant& vvec, \ + const int index, \ + const QStringList list); + +protected: + + bool m_bMultiSel; //true:多选,CheckBox + VVecVariant m_vvecDataAll; //这是当前表格的所有数据,只有当最顶层的筛选条件改变时才会更新 + QMap m_mapAllFields; + QMap m_mapFilterFields; + ZxTableHeaderView* m_pHeaderView; //false:单选,Radio + + bool m_bEnableSP; + +}; diff --git a/Include/iBase/iPlugin/ZxTextEdit.h b/Include/iBase/iPlugin/ZxTextEdit.h new file mode 100644 index 0000000..5fa3b05 --- /dev/null +++ b/Include/iBase/iPlugin/ZxTextEdit.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include "iPlugin_global.h" + +// 文本,解释结果,使用 +class I_PLUGIN_EXPORT ZxTextEdit : public QTextEdit +{ + Q_OBJECT + +public: + ZxTextEdit(QWidget *parent = 0); + ~ZxTextEdit(); + +signals: + + // 触发信号,以便用户对右键菜单进行调整 + void sigCustomMenu(QMenu* ); + +protected: + virtual void contextMenuEvent(QContextMenuEvent *e); +}; diff --git a/Include/iBase/iPlugin/ZxUiBase.h b/Include/iBase/iPlugin/ZxUiBase.h new file mode 100644 index 0000000..8c4a236 --- /dev/null +++ b/Include/iBase/iPlugin/ZxUiBase.h @@ -0,0 +1,121 @@ +#pragma once + +#include +#include +#include "IxSerDes.h" +#include "iPlugin_global.h" + +/// @brief 基础窗体类,实现 如下功能 +/// (1) 序列化接口 +/// (2) 存储Map +/// (3) 背景图片及样式设置 +/// @note 关于序列化对话框或Widget的说明 +/// (a)派生自ZxUiBase类 +/// (b)通过bindSubCtrl绑定子控件 ==或者== +/// (c)通过重载onSerialize/onDeserialize两函数 + +class ZxSerializer; +class I_PLUGIN_EXPORT ZxUiBase : public QDialog, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + explicit ZxUiBase(QWidget *parent = 0); + ~ZxUiBase(); + +public: + + // 初始化 + virtual void initUI(); + virtual void initSheets(); //Sheet + + // 根据分辨率对窗体大小进行适当调整,只有在InitUI之后调用才会有效 + virtual void resizeUI(); + + /// @brief 绑定子控件 + /// @param p:子控件 + /// @note Key,系统自动管理,确保不重复 + virtual void bindSubCtrl(QWidget* p); + /// @brief 绑定子控件 + /// @param p:子控件 + /// @param sKey:Key,为确保Key不重复,Key可能被改变 + /// @note + virtual void bindSubCtrl(QWidget* p, QString& sKey); + /// @brief 获取指定子控件 + /// @param sKey:Key,请调用者自己确定本Key不重复 + /// @note 该函数慎用 + virtual QWidget* getSubCtrl(QString sKey); + + // 返回 + virtual QMap *getMapCtrls(); + virtual QMap *getMapOthers(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void copyFrom(ZxUiBase* p); + virtual void copyOneSubCtrol(QWidget*& pFrom, QWidget*& pTo); + + // 把Layout载体转换为ScrollArea + virtual QLayout* buildAsScrollLayout(QLayout* pLayout, QString sTag = QString()); + + // 清空Layout内容 + bool clearLayoutOf(QWidget* pWidget); + bool clearLayout(QLayout* pLayout); + bool hideLayout(QLayout* pLayout); + +public: + + // 特殊的Esc设置 + void setIgnoreEsc(bool b); + bool getIgnoreEsc(); + +signals: + + // 在关闭的消息函数中触发 + void sigConfirmClosing(bool& bClosable); + +protected: + + // 内部读写函数 + virtual bool _writeCtrl(ZxSerializer* ser, QWidget* p, QString& sTag); + virtual bool _readCtrl(ZxSerializer* ser, QWidget*& p, QString& sTag); + +protected slots: + + virtual void slotIsUnableSP(bool& b); + +protected: + + // paint + virtual void paintEvent(QPaintEvent *); + // 窗体关闭的情形 + virtual void closeEvent(QCloseEvent *); + + // [20211213湛江专家测试反馈],压力流量视图,按esc键会退出 + // 原因:父类 ZxUiBase 派生自QDiaglog的缘故 + // 原先只在iGuiPlotPF进行处理,20240723移至本类 + virtual void keyPressEvent(QKeyEvent* e); + +protected: + + // 这是对子控件的统一管理,为了序列化 + QMap m_mapCtrls; + + // 对于部分特定参数的保存 + QMap m_mapOthers; + + // 在序列化过程中,不能触发信号 + bool m_bUnableSP; + + // [20211213湛江专家测试反馈],压力流量视图,按esc键会退出 + // 原因:父类 ZxUiBase 派生自QDiaglog的缘故 + // 原先只在iGuiPlotPF进行处理,20240723移至本类 + bool m_bIgnoreEsc; + + // 是否启用新的样式表,ZXF202407 + bool m_bNovelQss; +}; diff --git a/Include/iBase/iPlugin/iPlugin_global.h b/Include/iBase/iPlugin/iPlugin_global.h new file mode 100644 index 0000000..33663f0 --- /dev/null +++ b/Include/iBase/iPlugin/iPlugin_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#if defined(I_PLUGIN_LIBRARY) +# define I_PLUGIN_EXPORT Q_DECL_EXPORT +#else +# define I_PLUGIN_EXPORT Q_DECL_IMPORT +#endif + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxBrushEdit.h b/Include/iBase/iProperty/PtyItems/ZxBrushEdit.h new file mode 100644 index 0000000..686b985 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxBrushEdit.h @@ -0,0 +1,58 @@ +#pragma once + +#include +#include +#include "iProperty_global.h" + +class ZxBrushStyleComboBox; +class QPaintEvent; +class QMouseEvent; +class ZxColorPicker; + +/// 画刷编辑控件 +class I_PROPERTY_EXPORT ZxBrushEdit : public QWidget +{ + Q_OBJECT + +public: + + explicit ZxBrushEdit(QWidget *parent = 0); + + void setBrush( const QBrush& brush ); + QBrush getBrush(); + +signals: + + void signalBrushStyleChanged(int); + void signalBrushColorChanged(QColor); + +protected slots: + + void onStyleClicked(int); + void onColorChanged(const QColor&); + +protected: + + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void resizeEvent(QResizeEvent *); + +protected: + + void showBrushStyleWidget(const QRect &rcStyle); + void hideBrushStyleWidget(); + void getConponentRect( QRect& rcStyle, QRect& rcColor ); + ZxBrushStyleComboBox* getBrushStyleComboBox(); + ZxColorPicker* getColorPicker(); + +protected: + + int m_colorWidth;//颜色部分的宽度 + QBrush m_brush; + ZxBrushStyleComboBox* m_brushStyle; + ZxColorPicker* m_colorPicker; +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxBrushStyleComboBox.h b/Include/iBase/iProperty/PtyItems/ZxBrushStyleComboBox.h new file mode 100644 index 0000000..30f3aab --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxBrushStyleComboBox.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +#include "iProperty_global.h" + +class I_PROPERTY_EXPORT ZxBrushStyleComboBox : public QComboBox +{ +public: + + ZxBrushStyleComboBox(QWidget* parent = 0); + + void paintEvent(QPaintEvent* event); +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxColorGradientDialog.h b/Include/iBase/iProperty/PtyItems/ZxColorGradientDialog.h new file mode 100644 index 0000000..4303837 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxColorGradientDialog.h @@ -0,0 +1,338 @@ +#pragma once + +#include "iProperty_global.h" +#include +#include +#include +#include +#include "ZxSerializer.h" +// 颜色等级管理 +class I_PROPERTY_EXPORT ZxColorLevel +{ + +public: + + enum ClrFileMode + { + CFM_RGB = 0, + CFM_RGBA = 1 + }; + + ZxColorLevel(); + + bool operator == (const ZxColorLevel& others); + bool operator != (const ZxColorLevel& others); + + bool readFile(); // 读取clr文件 + + bool saveFile(const ClrFileMode mode = CFM_RGBA); // 保存Clr文件 , CFM_RGB 默认四列不带透明度 + + void setAlpha(int a); // 设定透明度 + + int alpha(); // 透明度 + + void setValRange(ZxInterval inv); // 设定真实值范围, 初始化默认0.0 - 100.0 + + ZxInterval valRange(); // 返回真实颜色 + + void insertRealColor(const double val, const QColor color); // 根据真实值设定颜色, 越过真实值范围将替换两端颜色 + + void insertRulerColor(const float mark, const QColor color); // 根据标尺位置设定颜色, 小于0或大于100为两端颜色 + + inline QColor valColor(const double val); // 根据真实值返回颜色 + + inline QColor markColor(const float mark); // 根据标尺值(0.0 - 100.0)返回颜色 + + QMap colorRuler(); // 返回标准(0.0 - 100.0)色标 + + QVector colorRuler(const int colorNumber); // 返回 等距色标单元 色标 + + QVector rgbRuler(const int colorNumber); // 返回 等距色标单元 色标 + + QMap rgbMapValRuler(const int levelCount); // 返回控制点位置极其色值, levelCount为级 + + bool setColorRuler(QVector& rulers); // 根据 等距色标单元 初始化标尺 + + void inverse(); + + void clear(); + + void onSerialize(ZxSerializer *ser); + + void onDeserialize(ZxSerializer *ser); + + + + +private: + + void init(); + + inline QColor interpolationColor(const QColor c1, const QColor c2, + const double v1, const double v2, + const double val); + + ZxInterval m_ValRange; + QMap m_mapColor; + int m_alpha; + double m_cvtRat; + +}; + + +// 调色板单元 +class ColorBoardItem +{ +public: + QPolygon m_Polygon; + QColor m_Color; +}; + + +// 调色板 +class ZxSeisColorBoard:public QWidget +{ + Q_OBJECT +public: + ZxSeisColorBoard(); + void setActive(bool b); + +protected: + + void paintEvent(QPaintEvent *e); + void mousePressEvent(QMouseEvent *e); + +signals: + + void onColorSelect(QColor color); + +public slots: + void sltColorChoiced(QColor color); + +private: + + void initColorBoard(); + + QVector > m_vvecColorItems; + bool m_bcanSelect; + ColorBoardItem* m_curColorItem; + +}; + + +class ZxSeisColorItem +{ +public: + ZxSeisColorItem(); + ZxSeisColorItem(double fValue,QColor crColor); + ZxSeisColorItem(const ZxSeisColorItem &colorItem); + + double getValue() const; + void setValue(double fValue); + + QColor getColor() const ; + void setColor(QColor crColor); +private: + double m_fValue; + QColor m_crColor; + + +}; + + + +class ZxSeisColorPeg: public ZxSeisColorItem +{ + +public: + ZxSeisColorPeg(); + ZxSeisColorPeg(double fValue,QColor crColor,const QPoint pos); + + enum PegType + { + PT_NOMAL = 0, + PT_START = 1, + PT_END = 2 + + }; + + + void setType(ZxSeisColorPeg::PegType type); + + ZxSeisColorPeg::PegType type(); + + void setSelected(bool bSelected); + void setPos(QPoint pos); + bool isPtInRect(const QPoint &point); + bool isSelected() const; + + void Draw(QPainter* painter); + void Move(const int pos, double fValue); + QPoint getPos(); +private: + PegType m_oWelType; //true:表示当前的PEG是起点或终点,不能移动 + bool m_bSelected; //表示当前的PEG被选择 + QPoint m_pos; // 箭头位置 + + +}; + +class ZxSeisColorWidget : public QWidget +{ + Q_OBJECT +public: + explicit ZxSeisColorWidget(QWidget *parent = 0); + void setAlpha(int a); + int alpha(); +signals: + void sendSelectedState(bool isSeleted); + void sendSeletedColor(double value,QColor color); + + void colorConfigChanged(); + void colorMaxAmpChanged(); + void colorMinAmpChanged(); + + void onPegOperated(); + +public slots: + +protected: + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); + void mouseMoveEvent(QMouseEvent *mouseEvent); + void mousePressEvent(QMouseEvent *mouseEvent); + void mouseDoubleClickEvent(QMouseEvent *mouseEvent); + void mouseReleaseEvent(QMouseEvent *mouseEvent); + + +private: + QRect m_rect; + int m_fMaxValue; + int m_fMinValue; + bool m_bSelected; + bool m_bSetValue; + + int m_nAlpha; + + qreal m_realMaxValue; + qreal m_realMinValue; + QVector m_vecColorPeg; + +private: + + void checkValue(int index, int &value); + bool hitTest(const QPoint &point); + QColor getColorByValue(int val); + void sort(); + int interpolate(int crColor1, int crColor2, double fCurValue,double fValue1,double fValue2); +public: + + void addPeg(int value, QColor color); + void deleteSelectedPeg(); + void changeValueOfSelectedPeg(double fValue); + void changeColorOfSelectedPeg(QColor color); + void setMaxAndMinValue(double maxV,double minV); + void setRealMaxAndMinValue(double realMaxV,double realMinV); + void flipColor(); + + qreal maxValue(); + qreal minValue(); + QVector& getConfigItems(); + void setConfigItems(QVector configItem); + QVector getConfigs(); + void afterLoad();//当从外部导入后 + void paint(); + void setConfig(QMap &mapColor); + +}; + + + + +namespace Ui { +class ZxColorGradientDialog; +} + +// 颜色阶梯配置对话框 +class I_PROPERTY_EXPORT ZxColorGradientDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ZxColorGradientDialog(QWidget *parent = 0); + ~ZxColorGradientDialog(); + + void setMaxAndMinAmpValue(double maxAmp,double minAmp); + QVector getConfigs(); + QMap getMapColorConfig(); + void setConfig(QMap &mapColor); + + + + // 临时提供平面图的接口 + void setColorLevel(ZxColorLevel colorLevel); + ZxColorLevel getColorLevel(); + +protected: + + void resizeEvent(QResizeEvent *); + void keyPressEvent(QKeyEvent *keyEvent); + +private slots: + void changeColor(); + void deleteColor(); + void changeColorValue(QString strValue); + void setSelectedUIState(bool isEnable); + void setSelectedColor(double fValue,QColor color); + void changePegColor(QColor color); + void flipColor(); + void loadConfig(); + void saveConfig(); + void setDefault(); + void sltNextColorBar(); + void sltPreviousColorBar(); + void sltUndo(); + void sltRedo(); + +signals: + void colorConfigChanged(QVector, QMap); + void colorMaxAmpChanged(qreal); + void colorMinAmpChanged(qreal); + +public slots: + void updateColorConfig(); + void updateColorMaxAmpValue(); + void updateColorMinAmpValue(); + void sltRecordColorState(); + void sltAlphaChanged(int val); + +private: + + inline double fileToView(double filepos); + inline double viewToFile(double View); + void readClrFile(QString fileName); + +private: + Ui::ZxColorGradientDialog *ui; + ZxSeisColorWidget *m_pColorWidget; + ZxSeisColorBoard *m_pColorBoard; + QColor m_addColor; + qreal m_rMinAmpValue; + qreal m_rMaxAmpValue; + QStringList m_lstColorFiles; + int m_nCurColorFileIndex; + + QVector > m_vecClrOptRec; + int m_nCurColorRecIndex; + + + ZxColorLevel m_ColorLevel; + + +}; + + + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxColorPicker.h b/Include/iBase/iProperty/PtyItems/ZxColorPicker.h new file mode 100644 index 0000000..f8ff6b2 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxColorPicker.h @@ -0,0 +1,72 @@ +#pragma once + +#include +#include +#include "iProperty_global.h" + +class ZxColorPopup; + +/// 颜色选择器, 类似于组合框的风格 +class I_PROPERTY_EXPORT ZxColorPicker : public QWidget +{ + Q_OBJECT + +public: + + explicit ZxColorPicker(QWidget* parent = 0); + + /// 设置当前颜色 + void setColor(const QColor & c); + + /// 获取当前颜色 + QColor getColor() const; + + /// 设置是否允许选择透明色, 即QColor(0,0,0,0) + void setHasTransButton(bool b); + + /// 获取是否允许选择透明色 + bool hasTransButton() const; + +signals: + + /// 选定的颜色发生改变 + void colorChanged(const QColor &); + void clicked(); + +protected slots: + + virtual void onColorChanged(const QColor & c); + virtual void onColorPreview(const QColor & c); + +public: + + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + +protected: + + virtual void resizeEvent(QResizeEvent *); + virtual void leaveEvent(QEvent *); + virtual void enterEvent(QEvent *); + + void showPopup(); + void hidePopup(); + + ZxColorPopup * m_pPopup; + bool isPopupVisible() const; + QColor getDisplayColor() const; + +protected: + + QColor m_previewColor; // 下拉框可见时以这个颜色为准 + QColor m_currentColor; // 下拉框不可见时以这个颜色为准 + bool m_bHasTransButton; + bool m_bHover; + bool m_bShowPopup;//是否显示下拉窗口。用来保证第一次点击时,显示下拉窗口,再次点击则隐藏,再次点击则又显示,... + //QPixmap m_pixTrans; +}; + + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxColorPopup.h b/Include/iBase/iProperty/PtyItems/ZxColorPopup.h new file mode 100644 index 0000000..107addc --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxColorPopup.h @@ -0,0 +1,71 @@ +#pragma once +#include +#include +#include +#include "iProperty_global.h" + +class QPainter; + +/// 颜色弹出框 +class I_PROPERTY_EXPORT ZxColorPopup : public QFrame +{ + Q_OBJECT +public: + explicit ZxColorPopup(QWidget* parent); + + /// 点到界外或取消按钮时退回的颜色 + void setFallbackColor(const QColor & c); + + /// 设置是否允许选择透明色, 即QColor(0,0,0,0) + void setHasTransButton(bool b); + + /// 获取是否允许选择透明色 + bool hasTransButton() const; + + /// 移动到合适的位置, 防止超出屏幕 + void moveToProperPlace(const QPoint& ownerPosGlobal, const QSize & ownerSize); + + /// 是否刚被隐藏. + bool isJustHide() const; + +signals: + + /// 选定的颜色发生改变 + void colorChanged(const QColor &); + + /// 鼠标悬停在颜色格里, 需要预览 + void colorPreview(const QColor &); + +protected: + + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void leaveEvent(QEvent *); + virtual void enterEvent(QEvent *); + virtual void hideEvent(QHideEvent *); + + void paintCell(QPainter & painter, int r, int c, bool hover); + void paintCell(QPainter & painter, int idx, bool hover); + + void setHover(int index); + void updateCell(int index); + void saveCustomColor(const QColor & cr); + +protected: + + QColor m_currentColor; + QColor m_fallbackColor; + bool m_bHasTransButton; + + int m_nHover; + clock_t m_lastHideTime; + + QPixmap m_pixTrans; +}; + + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxDotEdit.h b/Include/iBase/iProperty/PtyItems/ZxDotEdit.h new file mode 100644 index 0000000..147693e --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxDotEdit.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include "QLineEdit" +#include "ZxDotStyleComboBox.h" +#include "ZxColorPicker.h" +#include "iProperty_global.h" +#include "ZxDrawHelper.h" +#include "ZxDot.h" + +class ZxDot; + +// ZxDotEdit Widget +class I_PROPERTY_EXPORT ZxDotEdit : public QWidget +{ + Q_OBJECT + +public: + + explicit ZxDotEdit(QWidget* parent = 0); + + // 载体 + void setDot(const ZxDot& o); + ZxDot getDot(); + +signals: + + // 四种信号 + void signalDotStyleChanged(int); + void signalDotColorChanged(QColor); + void signalDotRadiusChanged(float); + void signalDotFillingChanged(bool); + +protected slots: + + // Changed,Filling在内部处理 + void onDotStyleChangedEx(int); + void onRadiusChanged(); + void onDotColorChangedEx(const QColor&); + +protected: + + virtual void paintEvent(QPaintEvent* ); + virtual void mousePressEvent(QMouseEvent* ); + virtual void mouseMoveEvent(QMouseEvent* ); + virtual void resizeEvent(QResizeEvent* ); + +protected: + + // 控件的显示与隐藏 + void showStyleWidget(const QRect &rcLine); + void showRadiusWidget(const QRect &rcWidth); + void hideStyleWidget(); + void hideRadiusWidget(); + + // 四种的Layout + void layoutRects(); + + // 子控件,Filling在内部处理 + ZxDotStyleComboBox* getStyleComboBox(); + QLineEdit* getRadiusEdit(); + ZxColorPicker* getColorPicker(); + +protected: + + ZxDot m_oDot; //数据载体 + + // 控件 + ZxDotStyleComboBox* m_pCbxType; + QLineEdit* m_pTbxRadius; + ZxColorPicker* m_colorPicker; + + // 位置,四个Rect: Style radius filling color + QVector m_vecRects; +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxDotStyleComboBox.h b/Include/iBase/iProperty/PtyItems/ZxDotStyleComboBox.h new file mode 100644 index 0000000..27a09ed --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxDotStyleComboBox.h @@ -0,0 +1,27 @@ +#pragma once + +#include + +#include "ZxDot.h" +#include "iProperty_global.h" + +class DotTypeDelegate; +class I_PROPERTY_EXPORT ZxDotStyleComboBox : public QComboBox +{ + Q_OBJECT + +public: + ZxDotStyleComboBox(QWidget* parent = 0); + void setCurDot(ZxDot o); + + void paintEvent(QPaintEvent* event); + +protected: + + DotTypeDelegate* m_pDekegate; + ZxDot m_oDot; +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxDoubleSpinEdit.h b/Include/iBase/iProperty/PtyItems/ZxDoubleSpinEdit.h new file mode 100644 index 0000000..e7faba4 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxDoubleSpinEdit.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include "iProperty_global.h" + +class I_PROPERTY_EXPORT ZxDoubleSpinEdit + : public QDoubleSpinBox +{ + Q_OBJECT + +public: + + ZxDoubleSpinEdit(QWidget *parent = 0); + +protected: + + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent * e); + virtual void mousePressEvent(QMouseEvent * e); + + void setAutoSelectAll(bool bAuto); + bool isAutoSelectAll() const; + +private: + + bool eventFilter(QObject *o, QEvent *e); + +private: + + bool m_bClickFocusIn : 1; + bool m_bAutoSelectAll : 1; +}; + + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxFontEdit.h b/Include/iBase/iProperty/PtyItems/ZxFontEdit.h new file mode 100644 index 0000000..13bfb6d --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxFontEdit.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include +#include "iProperty_global.h" + +class QComboBox; +class QPaintEvent; +class QMouseEvent; +class QResizeEvent; +class QEvent; + +class I_PROPERTY_EXPORT ZxFontEdit : public QWidget +{ + Q_OBJECT + +public: + + enum Part + { + partFamily, + partSize, + partBoth, + partItalic, + _partMax + }; + + explicit ZxFontEdit(QWidget *parent = 0); + + void setFont( const QFont& font ); + QFont getFont(); + +signals: + + void signalFontFamilyChanged(QString); + void signalFontSizeChanged(QString); + void signalFontBoldChanged(bool); + void signalFontItalicChanged(bool); + +protected slots: + + void onFamilyChanged(const QString& s); + void onSizeChanged(const QString& s); + +protected: + + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void leaveEvent(QEvent *); + +protected: + + QRect getPartRect(Part part) const; + int getPartIndex(const QPoint& pt); + void showFamilyWidget(); + void hideFamilyWidget(); + void showSizeWidget(); + void hideSizeWidget(); +// void emitValueChanged(); + +protected: + + QFont m_font; + + int m_x[_partMax]; + int m_w[_partMax]; + + QComboBox* m_comboFamily; + QComboBox* m_comboSize; + + int m_hoverPart; +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxGradient.h b/Include/iBase/iProperty/PtyItems/ZxGradient.h new file mode 100644 index 0000000..291f9ea --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxGradient.h @@ -0,0 +1,75 @@ +#pragma once + +#include +#include +#include "iProperty_global.h" + +class I_PROPERTY_EXPORT ZxGradient +{ +public: + + class ZxColorItem + { + + public: + + ZxColorItem(int i = -1, QColor color = QColor()) + { + index = i; + c = color; + } + + bool operator<(const ZxColorItem& ci)const + { + return index < ci.index; + } + + bool operator==(const ZxColorItem& ci)const + { + return index == ci.index; + } + + public: + + int index; + QColor c; + + }; + + enum ColorCount + { + CC_16 = 16, + CC_32 = 32, + CC_64 = 64, + CC_128 = 128, + CC_256 = 256 + }; + + enum InterpolationMethod + { + IM_LINEAR + + }; + +public: + + ZxGradient(); + + QString toString(); + void fromString( const QString& str ); + +public: + + static QColor getColor(int index, const ZxGradient& colorGradient); + static QPixmap getColorGradientPixmap(const QRect& r, bool vertical, const ZxGradient& colorGradient); + +public: + + ColorCount m_eColorCount; + InterpolationMethod m_eMethod; + QVector m_vecColorItems; +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxGradientDialog.h b/Include/iBase/iProperty/PtyItems/ZxGradientDialog.h new file mode 100644 index 0000000..f28b0cb --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxGradientDialog.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include "ZxGradient.h" +#include "iProperty_global.h" + +namespace Ui { +class ZxGradientDialog; +} + +class I_PROPERTY_EXPORT ZxGradientDialog : public QDialog +{ + Q_OBJECT + +public: + + explicit ZxGradientDialog(QWidget *parent = 0); + ~ZxGradientDialog(); + + void setColorGradient( const ZxGradient& colorGradient ); + ZxGradient getColorGradient(); + +public slots: + + void slotChangeColor(); + void slotDeletePicker(); + void slotIndexChanged(int); + void slotRefresh(); + void slotColorCountChanged(int); + void slotInterpolationChanged(int); + void slotOk(); + void slotCancel(); + +private: + + Ui::ZxGradientDialog *ui; +}; + diff --git a/Include/iBase/iProperty/PtyItems/ZxIntSpinEdit.h b/Include/iBase/iProperty/PtyItems/ZxIntSpinEdit.h new file mode 100644 index 0000000..0b968b7 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxIntSpinEdit.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include "iProperty_global.h" + +class I_PROPERTY_EXPORT ZxIntSpinEdit + : public QSpinBox +{ + Q_OBJECT + +public: + + ZxIntSpinEdit(QWidget *parent = 0); + +protected: + + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent * e); + virtual void mousePressEvent(QMouseEvent * e); + + void setAutoSelectAll(bool bAuto); + bool isAutoSelectAll() const; + +private: + + bool eventFilter(QObject *o, QEvent *e); + +private: + + bool m_bClickFocusIn : 1; + bool m_bAutoSelectAll : 1; +}; + + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxInterval.h b/Include/iBase/iProperty/PtyItems/ZxInterval.h new file mode 100644 index 0000000..a4dd725 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxInterval.h @@ -0,0 +1,227 @@ +#pragma once + +#include + +#define zxIsEqual(x, y, eps) ((x - y) < (eps) && (x - y) > (-eps)) + +template +class ZxInterval +{ +public: + + inline ZxInterval(); + inline ZxInterval(const T &start, const T &stop); + inline virtual ~ZxInterval(); + + inline ZxInterval &operator=(const ZxInterval&); + inline virtual ZxInterval* clone() const; + + inline bool isUdf() const; + inline void set(const T &start, const T &stop); + inline bool isEqual(const ZxInterval &i, const T &eps) const; + + inline bool operator==(const ZxInterval&) const; + inline bool operator!=(const ZxInterval&) const; + inline ZxInterval operator+(const ZxInterval&) const; + inline ZxInterval &operator+=(const ZxInterval&); + + template inline const ZxInterval &setFrom(const ZxInterval&); + + inline T width(bool allowrev = true) const; + inline virtual T center() const; + inline void shift(const T &len); + inline void widen(const T &len, bool allowrev = true); + inline virtual void scale(const T&); + + inline T atIndex(int, const T &step) const; + template inline int getIndex(const X&, const T &step) const; + template inline float getfIndex(const X&, const T &step) const; + template inline int nearestIndex(const X &x, const T &step) const; + + template inline void limitTo(const ZxInterval &i) + { start = i.limitValue(start); stop = i.limitValue(stop); } + + template inline X limitValue(const X&) const; + + template inline bool overlaps(const ZxInterval&, bool allrev = true) const; + template inline bool includes(const X&, bool allowrev = true) const; + template inline float pos(X val, bool limit = true, bool allowrev = true) const; + /*!< returns a value between 0 and 1 if val is + between start and stop. */ + inline void include(const T&, bool allowrev = true); + inline void include(const ZxInterval&, bool allowrev = true); + + inline virtual void sort(bool asc = true); + + T start; + T stop; + + inline bool isRev() const; + inline virtual bool hasStep() const; +}; + +template +inline ZxInterval &ZxInterval::operator=(const ZxInterval &intv) +{ start = intv.start; stop = intv.stop; return *this; } + +template template +inline int ZxInterval::nearestIndex(const X &x, const T &step) const +{ + int nr = getIndex(x, step); + const T atindex = atIndex(nr, step); + const float reldiff = (float)(x-atindex)/step; + + if (reldiff>=0.5) return nr+1; + else if (reldiff<=-0.5) return nr-1; + return nr; +} + +template inline ZxInterval::ZxInterval() +{ start = 0; stop = 0; } + +template inline ZxInterval::ZxInterval(const T &t1, const T &t2) +{ start = t1; stop = t2; } + +template inline ZxInterval::~ZxInterval() {} + +template +inline bool ZxInterval::isUdf() const +{ return zxIsUdf(start) || zxIsUdf(stop); } + +template +inline ZxInterval* ZxInterval::clone() const +{ return new ZxInterval(*this); } + +template +inline void ZxInterval::set(const T &t1, const T &t2) +{ start = t1; stop = t2; } + +template +inline bool ZxInterval::isEqual(const ZxInterval &i, const T &eps) const +{ return zxIsEqual(start, i.start, eps) && zxIsEqual(stop, i.stop, eps); } + +template +inline bool ZxInterval::operator==(const ZxInterval &i) const +{ return start == i.start && stop == i.stop; } + +template +inline bool ZxInterval::operator!=(const ZxInterval &i) const +{ return ! (i == *this); } + +template +inline ZxInterval ZxInterval::operator+(const ZxInterval &i) const +{ return ZxInterval(start+i.start, stop+i.stop); } + +template +inline ZxInterval &ZxInterval::operator+=(const ZxInterval &i) +{ start += i.start; stop += i.stop; return *this; } + +template template +inline const ZxInterval &ZxInterval::setFrom(const ZxInterval &i) +{ + start = (T) i.start; + stop = (T) i.stop; + return *this; +} + +template +inline T ZxInterval::width(bool allowrev) const +{ return allowrev && isRev()? start - stop : stop - start; } + +template +inline T ZxInterval::center() const +{ return (start+stop)/2; } + +template +inline void ZxInterval::shift(const T &len) +{ start += len; stop += len; } + +template +inline void ZxInterval::widen(const T &len, bool allowrev) +{ + if (allowrev && isRev()) + { start += len; stop -= len; } + else + { start -= len; stop += len; } +} + +template +inline void ZxInterval::scale(const T &factor) +{ start *= factor; stop *= factor; } + +template template +inline bool ZxInterval::includes(const X &t, bool allowrev) const +{ + return allowrev && isRev() + ? t >= stop && start >= t + : t >= start && stop >= t; +} + +template template +inline float ZxInterval::pos(X val, bool limit, bool allowrev) const +{ + float res = allowrev && isRev() + ? (val-stop)/(start-stop) + : (val-start)/(stop-start); + if (limit) + { + if (res<0) res = 0; + else if (res>1) res = 1; + } + return res; +} + +template template +inline bool ZxInterval::overlaps(const ZxInterval &t, bool allowrev) const +{ + return includes(t.start, allowrev) || includes(t.stop, allowrev) || + t.includes(start, allowrev) || t.includes(stop, allowrev); +} + +template +inline void ZxInterval::include(const T &i, bool allowrev) +{ + if (allowrev && isRev()) + { if (stop>i) stop=i; if (starti) start=i; if (stop +inline void ZxInterval::include(const ZxInterval &i, bool allowrev) +{ include(i.start, allowrev); include(i.stop, allowrev); } + +template +inline T ZxInterval::atIndex(int idx, const T &step) const +{ return start + step * idx; } + +template template +inline int ZxInterval::getIndex(const X &t, const T &step) const +{ return (int)((t - start) / step); } + +template template +inline float ZxInterval::getfIndex(const X &t, const T &step) const +{ return (((float)t - start) / step); } + +template template +inline X ZxInterval::limitValue(const X &t) const +{ + const bool isrev = isRev(); + if ((!isrev&&t>stop) || (isrev&&tstart)) return start; + return t; +} + +template +inline void ZxInterval::sort(bool asc) +{ + if ((asc && stop inline bool ZxInterval::hasStep() const +{ return false; } + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxLineEdit.h b/Include/iBase/iProperty/PtyItems/ZxLineEdit.h new file mode 100644 index 0000000..cc956a4 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxLineEdit.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include "iProperty_global.h" + +class I_PROPERTY_EXPORT ZxLineEdit + : public QLineEdit +{ + Q_OBJECT + +public: + + ZxLineEdit(QWidget *parent = 0); + +protected: + + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent * e); + virtual void mousePressEvent(QMouseEvent * e); + + void setAutoSelectAll(bool bAuto); + bool isAutoSelectAll() const; + +private: + + bool m_bClickFocusIn : 1; + bool m_bAutoSelectAll : 1; +}; + + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxLineStyleComboBox.h b/Include/iBase/iProperty/PtyItems/ZxLineStyleComboBox.h new file mode 100644 index 0000000..7d4e7dd --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxLineStyleComboBox.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include "iProperty_global.h" + +class I_PROPERTY_EXPORT ZxLineStyleComboBox : public QComboBox +{ +public: + + ZxLineStyleComboBox( QWidget* parent = 0 ); + + void paintEvent( QPaintEvent* event ); +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxPenEdit.h b/Include/iBase/iProperty/PtyItems/ZxPenEdit.h new file mode 100644 index 0000000..5e2fb84 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxPenEdit.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include "iProperty_global.h" + +class ZxLineStyleComboBox; +class QLineEdit; +class QMouseEvent; +class QPaintEvent; +class QResizeEvent; +class ZxColorPicker; + +// ZxPenEdit +class I_PROPERTY_EXPORT ZxPenEdit : public QWidget +{ + Q_OBJECT + +public: + + explicit ZxPenEdit(QWidget *parent = 0); + + void setPen( const QPen& pen ); + QPen getPen(); + +signals: + + void signalPenStyleChanged(int); + void signalPenColorChanged(QColor); + void signalPenWidthChanged(qreal); + +protected slots: + void onStyleChanged(int); + void onRadiusChanged(); + void onColorChanged(const QColor&); + +protected: + + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void resizeEvent(QResizeEvent *); + +protected: + + void showLineStyleWidget(const QRect &rcLine); + void showLineWidthWidget(const QRect &rcWidth); + void hideLineStyleWidget(); + void hideLineWidthWidget(); + void getConponentRect( QRect& rcLine, QRect& rcWidth, QRect& rcColor ); + + ZxLineStyleComboBox* getLineStyleComboBox(); + QLineEdit* getLineWidthEdit(); + ZxColorPicker* getColorPicker(); + + //线宽的单位 + enum LineWidthUnit + { + Millimeter, //毫米 + Millimeter_div_10 //0.1毫米 + }; + +protected: + + LineWidthUnit m_lineWidthUnit; + int m_widthWidth;//线宽编辑控件的宽度 + int m_colorWidth;//颜色部分的宽度 + + QPen m_pen; + + ZxLineStyleComboBox* m_lineStyle; + QLineEdit* m_lineWidth; + ZxColorPicker* m_colorPicker; +}; + + + + diff --git a/Include/iBase/iProperty/PtyItems/ZxSymbolListPicker.h b/Include/iBase/iProperty/PtyItems/ZxSymbolListPicker.h new file mode 100644 index 0000000..b6a51fe --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxSymbolListPicker.h @@ -0,0 +1,63 @@ +#pragma once + +#include +#include + +class ZxSymbolPopup; +class QLineEdit; + +class ZxSymbolListPicker : public QWidget +{ + Q_OBJECT + +public: + + explicit ZxSymbolListPicker(QWidget* parent = 0); + +protected slots: + + void slotSymbolSelectionChanged(QString); + void slotOpenSymbolSelectionDialog(); + void slotSymbolNameChanged(); + +public: + + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + +protected: + + virtual void resizeEvent(QResizeEvent *); + virtual void leaveEvent(QEvent *); + virtual void enterEvent(QEvent *); + + void showPopup(); + void hidePopup(); + void setCategory( const QString& category ); + void setInputCategory( const QString& category ); + void setSelectedSymbolCode( const QString& code ); + QLineEdit* getSymbolNameEdit(); + void hideSynbolNameWidget(); + void showSynbolNameWidget( const QRect& rcName ); + void getConponentRect( QRect& rcSymbol, QRect& rcName, QRect& rcButton ); + + bool isPopupVisible() const; + int getNameWidth(); + QString getCodeByName(const QString &name); + +protected: + + ZxSymbolPopup * m_pPopup; + + bool m_bHover; + bool m_bShowPopup;//是否显示下拉窗口。用来保证第一次点击时,显示下拉窗口,再次点击则隐藏,再次点击则又显示,... + QString m_categoryConfigged; ///<配置文件中配置的类别 + QString m_categoryInput; ///<从图形对象传过来的符号的类别 + QString m_symbolCode; ///< 符号的代码 + + QLineEdit* m_lineEditSynbolName; + int m_symbolNameWidth; + QPushButton m_button; + int m_buttonWidth; +}; + diff --git a/Include/iBase/iProperty/PtyItems/ZxSymbolPaint.h b/Include/iBase/iProperty/PtyItems/ZxSymbolPaint.h new file mode 100644 index 0000000..28a2909 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxSymbolPaint.h @@ -0,0 +1,63 @@ +#pragma once +#include +#include +#include "iProperty_global.h" + +enum ZxPointSymbolType +{ + PST_NONE = 0, + PST_CROSS_1, + PST_CROSS_2, + PST_CROSS_3, + PST_CROSS_4, + + PST_CIRCLE_1, + PST_CIRCLE_2, + PST_CIRCLE_3, + + PST_TRIANGLE_1, + PST_TRIANGLE_2, + PST_TRIANGLE_3, + PST_TRIANGLE_4, + + PST_RECT_1, + PST_RECT_2, + PST_RECT_3 + + //... + +}; + +class QPainter; +class I_PROPERTY_EXPORT ZxSymbolPaint +{ +public: + + ZxSymbolPaint(); + + static int ZxSymbolCount(); + static void draw(QPainter* painter, const QPointF &midpos, const int symbolType, const float size , const QColor &color); + +private: + + static void drawCross1(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawCross2(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawCross3(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawCross4(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + + static void drawCircle1(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawCircle2(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawCircle3(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + + static void drawTriangle1(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawTriangle2(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawTriangle3(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawTriangle4(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + + static void drawRect1(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawRect2(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + static void drawRect3(QPainter* painter, const QPointF &midpos, const float size, const QColor &color); + +}; + + diff --git a/Include/iBase/iProperty/PtyItems/ZxSymbolPicker.h b/Include/iBase/iProperty/PtyItems/ZxSymbolPicker.h new file mode 100644 index 0000000..bbaeb9e --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxSymbolPicker.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include "iProperty_global.h" + + +class ZxSymbolPullList; + +class I_PROPERTY_EXPORT ZxSymbolPicker : public QWidget +{ + Q_OBJECT + +public: + + explicit ZxSymbolPicker(QWidget* parent = 0); + + void setSymbol(int symbolNo); + int getSymbol(); + +protected slots: + + void sltSymbolChanged(int symbolNo); + +protected: + + virtual void onSymbolChanged(int symbolNo); + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *e); + virtual void resizeEvent(QResizeEvent *); + +protected: + + int m_symbolNo; + ZxSymbolPullList *m_pSymbolMenu; + +}; diff --git a/Include/iBase/iProperty/PtyItems/ZxSymbolPullList.h b/Include/iBase/iProperty/PtyItems/ZxSymbolPullList.h new file mode 100644 index 0000000..2d9bf67 --- /dev/null +++ b/Include/iBase/iProperty/PtyItems/ZxSymbolPullList.h @@ -0,0 +1,53 @@ +#pragma once + +#include +#include "iProperty_global.h" + +class QPainter; + +namespace Ui { +class I_PROPERTY_EXPORT ZxSymbolPullList; +} + + +class ZxSymbolPullList : public QFrame +{ + Q_OBJECT + +public: + + explicit ZxSymbolPullList(QWidget *parent = 0); + ~ZxSymbolPullList(); + + int symbolNo(); + void moveToProperPlace(const QPoint& ownerPosGlobal, const QSize & ownerSize); + +signals: + + void symbolChanged(int); + +public slots: + + void sltScrollBarChanged(int); + +protected: + + virtual void paintEvent(QPaintEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + +private: + + void drawCellSymbols(); + void drawCellSelectedFlag(); + int findCurrentCell(QPoint pos); + +private: + + Ui::ZxSymbolPullList *ui; + + int curSymbolIndex; + int startSerialNumber; +}; + + diff --git a/Include/iBase/iProperty/ZxPtyAttributeFile.h b/Include/iBase/iProperty/ZxPtyAttributeFile.h new file mode 100644 index 0000000..1aca4e9 --- /dev/null +++ b/Include/iBase/iProperty/ZxPtyAttributeFile.h @@ -0,0 +1,80 @@ +#include +#include + +#include "iProperty_global.h" + +class ZxXpfDoc; +class ZxXpfNode; +class QDomElement; +class ZxPtyFileManager; + +/// 属性配置文件 +class I_PROPERTY_EXPORT ZxPtyAttributeFile +{ + ZxPtyAttributeFile(ZxPtyFileManager* pManager); + ~ZxPtyAttributeFile(); + +public: + + // 常规参数 + ZxXpfDoc* getXpfDoc() const; + const QString& getName() const; + const QString& getPath() const; + + // 检索 + ZxXpfNode* getItemConfig(const QString& key, bool bConsiderParent = true); + + // 排序 + int getItemOrder(const QString& key) const; + + // 临时,TODO,不一定准确 + // 为了配置方便,对于英文版暂时用了Name来做Label,所以需要判断当前是否 非英文版 + bool isLangCn(); + +private: + + // 正式应用(新版) + bool load_new(const QString& sPath, const QString& sName); + bool parsePtyNodes(QDomElement& e, QString sPrev); + +#ifdef _SCAN_OLD_CODE_ + + bool load(const QString& sPath, const QString& sName); + + // 排序 + QStringList getAllItemConfigKeys(bool bAlphabetical = false); + QStringList getAllItemConfigKeysAlphabetical(); + QStringList getAllItemConfigKeysDisplayOrder(); + + // 废弃 + void loadOrder(); + void saveOrder(); + void mergeOrder(QStringList & dst, const QStringList & src); + ZxPtyAttributeFile* getBase() const; + void setItemOrder(const QString& key, int order); + void clearOrder(); + void orderSyncWithBase(bool includeDerived = false); +#endif + + bool save(); + +private: + + ZxPtyFileManager* m_pManager; + ZxPtyAttributeFile* m_pBase; + ZxXpfDoc* m_pDoc; + + QString m_sPath; + QString m_sName; + + mutable QHash m_hashOrders; + mutable int m_nNextItemOrder; + + friend class ZxPtyPano; + friend class ZxPtyFileManager; +}; + + + + + diff --git a/Include/iBase/iProperty/ZxPtyCommand.h b/Include/iBase/iProperty/ZxPtyCommand.h new file mode 100644 index 0000000..a80bbe0 --- /dev/null +++ b/Include/iBase/iProperty/ZxPtyCommand.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include "IxPtyPano.h" +#include "iProperty_global.h" + +class QVariant; + +// 命令: 更改属性命令 +// 内部使用类 +class I_PROPERTY_EXPORT ZxPtyCommand : public QUndoCommand +{ +public: + + ZxPtyCommand(int nSessionId, \ + const QList& callbacks, \ + const QString& skey, \ + const QVariant& varNew, \ + QUndoCommand* parent = 0); + + virtual void redo(); + virtual void undo(); + + virtual int id() const; + virtual bool mergeWith(const QUndoCommand* command); + +private: + + int m_nSessionId; + QList m_callbacks; + QString m_sKey; + QVariant m_varNew; +}; + + + + diff --git a/Include/iBase/iProperty/ZxPtyDock.h b/Include/iBase/iProperty/ZxPtyDock.h new file mode 100644 index 0000000..6583f08 --- /dev/null +++ b/Include/iBase/iProperty/ZxPtyDock.h @@ -0,0 +1,130 @@ +#pragma once + +#include +#include +#include +#include + +#include "ZxDynamic.h" +#include "ZxPtyItem.h" +#include "ZxBaseUtil.h" +#include "zxLogInstance.h" +#include "iProperty_global.h" + +class QTextEdit; + +// 属性载体 +class I_PROPERTY_EXPORT ZxPtyDock : public QDockWidget + , virtual public IxPtyPano + , virtual public IxDynObj +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + + public: + + ZxPtyDock(bool bShowBtns = false); + +public: + + // 添加组 + virtual IxPtyItem* addGroup(const QString& key, \ + bool expand = true, \ + bool visible = true); + + // 添加项 + virtual IxPtyItem* add(ZX_PROPERTY_CHANGED_CALLBACK callback, \ + const QString& key, \ + const QVariant& var, \ + IxPtyItem::ItemType type = IxPtyItem::typeDefault); + + // 入口 + virtual void beginSession(const QString& configName, \ + IxInterface* pSessionOwner); + virtual void endSession(); + + // 具体对象 + virtual void beginObject(IxPtySource* p); + virtual void endObject(); + + // 检索 + virtual IxPtyItem* findPropertyItem(const QString& sKey); + + virtual void clear(IxInterface* pSessionOwner = 0); + + // 封装,仅仅为外界调用方便 + void loadTemplOfCurItem(); + void saveTemplOfCurItem(); + +signals: + + void sigItemPropertyTempl(IxPtySource*, bool b, bool bSelf); + +protected slots: + + void onHelpMessage(const QString& help); + void changeEvent(QEvent* e); + + void slotSaveTempl_Self(); + void slotSaveTempl_All(); + +private: + + void initUI(); + +protected: + + IxPtyPano* m_pSheet; + QTextEdit* m_pHelpBox; + + bool m_bShowBtns; //是否显示Btns + + // 是否启用新的样式表,ZXF202407 + bool m_bNovelQss; +}; + +/// @brief 该类主要目的就是为了属性页的透明显示 +class I_PROPERTY_EXPORT QWidgetTemp : public QDialog +{ + Q_OBJECT + +public: + explicit QWidgetTemp(bool bNovelQss, QWidget *parent = 0) + : QDialog(parent) + { + // + //m_bNovelQss = bNovelQss; + //ZXF202407 + setAutoFillBackground(true); + if (bNovelQss) + { + setStyleSheet("background : #EAF7FF;" + "border: 0px;" + "border-color:#88b3ee;" + "border-style: solid;"); + return; + } + QString sName = QString("Image/%1_Pty.png").arg(zxAppID); + QString sImg = ZxBaseUtil::getDirOf(s_Dir_Res) + sName; + QString s = QString("QWidgetTemp {border-image: url(%1);}").arg(sImg); + setStyleSheet(s); + } + +protected: + + // paint + virtual void paintEvent(QPaintEvent *paint) + { + QStyleOption opt; + opt.init(this); + QPainter p(this); + style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); + } +protected: + //bool m_bNovelQss; +}; + + + + + diff --git a/Include/iBase/iProperty/ZxPtyDock.h.bak b/Include/iBase/iProperty/ZxPtyDock.h.bak new file mode 100644 index 0000000..ca19109 --- /dev/null +++ b/Include/iBase/iProperty/ZxPtyDock.h.bak @@ -0,0 +1,115 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "ZxPtyItem.h" +#include "iProperty_global.h" +#include "ZxBaseUtil.h" +#include "zxLogInstance.h" + +class QTextEdit; + +class I_PROPERTY_EXPORT ZxPtyDock : public QDockWidget + , virtual public IxPtyPano + , virtual public IxDynObj +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + explicit ZxPtyDock(bool bShowBtns = false); + +public: + + virtual IxPtyItem* addGroup(const QString& key, + bool expand = true, + bool visible = true); + virtual IxPtyItem* add(ZX_PROPERTY_CHANGED_CALLBACK callback, + const QString& key, + const QVariant& var, + IxPtyItem::ItemType type = IxPtyItem::typeDefault); + + virtual void beginSession(const QString& configName, + IxInterface* pSessionOwner); + virtual void endSession(); + + virtual void beginObject(IxPtySource* p); + virtual void endObject(); + + virtual IxPtyItem* findPropertyItem(const QString& sKey); + + virtual void clear(IxInterface* pSessionOwner = 0); + + // 封装,仅仅为外界调用方便 + void loadTemplOfCurItem(); + void saveTemplOfCurItem(); + +signals: + void sigItemPropertyTempl(IxPtySource*, bool b, bool bSelf); + +protected slots: + + void onHelpMessage(const QString& help); + void changeEvent(QEvent* e); + + //void slotLoadTempl(); + void slotSaveTempl_Self(); + void slotSaveTempl_All(); + +private: + + void initUI(); + +protected: + + IxPtyPano* m_pSheet; + QTextEdit* m_pHelpBox; + + bool m_bShowBtns; //是否显示Btns + + // 是否启用新的样式表,ZXF202407 + bool m_bNovelQss; +}; + +/// @brief 该类主要目的就是为了属性页的透明显示 +class I_PROPERTY_EXPORT QWidgetTemp : public QDialog +{ + Q_OBJECT + +public: + explicit QWidgetTemp(bool bNovelQss, QWidget *parent = 0) + : QDialog(parent) + { + // + if (bNovelQss) + { + return; + } + setAutoFillBackground(true); + + QString sName = QString("Image/%1_Pty.png").arg(zxAppID); + QString sImg = ZxBaseUtil::getDirOf(s_Dir_Res) + sName; + QString s = QString("QWidgetTemp {border-image: url(%1);}").arg(sImg); + setStyleSheet(s); + } + +protected: + + // paint + virtual void paintEvent(QPaintEvent *) + { + QStyleOption opt; + opt.init(this); + QPainter p(this); + style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); + } +}; + + + + + diff --git a/Include/iBase/iProperty/ZxPtyFileManager.h b/Include/iBase/iProperty/ZxPtyFileManager.h new file mode 100644 index 0000000..c9205f7 --- /dev/null +++ b/Include/iBase/iProperty/ZxPtyFileManager.h @@ -0,0 +1,52 @@ +#include +#include +#include +#include "iProperty_global.h" + +class ZxPathIndexer; +class ZxPtyAttributeFile; + +// 属性配置文件管理载体 +class I_PROPERTY_EXPORT ZxPtyFileManager + : public QObject +{ + Q_OBJECT + +public: + + /// @brief 单例模式 + static ZxPtyFileManager* getInstance(); + + ZxPtyFileManager(); + ~ZxPtyFileManager(); + + /// @brief 获取指定的属性表配置 + ZxPtyAttributeFile* getAttributeFile(const QString& sTag, \ + QString sFile = "", \ + bool bForceReload = false); + + ZxPtyAttributeFile* getEmptyConfig(); + + // 加载+保存 + void reload(); + bool save(); + +signals: + + void preReload(); + void reloaded(); + +private: + + void preparePathIndexer(); + +private: + + QMap m_mapPtyFiles; + ZxPathIndexer* m_pPathIndexer; + ZxPtyAttributeFile* m_pEmptyConfig; +}; + + + + diff --git a/Include/iBase/iProperty/ZxPtyItem.h b/Include/iBase/iProperty/ZxPtyItem.h new file mode 100644 index 0000000..f595671 --- /dev/null +++ b/Include/iBase/iProperty/ZxPtyItem.h @@ -0,0 +1,128 @@ +#pragma once + +#include +#include + +#include "IxPtyPano.h" +#include "iProperty_global.h" + +class ZxXpfNode; +class ZxPtyPano; +class ZxPtyAttributeFile; +class IxPtyItemEditor; + +/// @internal +/// 属性表条目. +class I_PROPERTY_EXPORT ZxPtyItem + : virtual public IxPtyItem +{ +public: + + ZxPtyItem(ZxPtyPano* pSheet); + ~ZxPtyItem(); + +public: + + virtual IxPtyPano* getPtyPano() const; + virtual IxPtyItem* getParent() const; + + virtual bool isGroup() const; + + virtual ItemType getItemType() const; + virtual void setItemType(ItemType _type); + + virtual void setLimit(int nMin, int nMax); + virtual void setLimit(double fMin, double fMax); + virtual void setOptions(const QStringList& listName, const QList& listValue); + virtual void setOptions(const QStringList& listName, const QStringList& listValue); + virtual void setOptions(const QStringList& listName, const QList& listValue); + + virtual QVariant getValue() const; + virtual void setValue(const QVariant& v, IxInterface* pSetBy = 0); + + virtual bool isVisible() const; + virtual void setVisible(bool bVisible); + + virtual bool isReadOnly() const; + virtual void setReadOnly(bool bReadOnly); + + virtual void setExpand(bool bExpand); + + virtual void activate(); + + virtual void setHeight(int height); + virtual int getHeight() const; + + int getRowBottom() const; + int getRowHeight() const; + + static bool displayOrder(const ZxPtyItem* a, const ZxPtyItem* b); + static bool alphabetical(const ZxPtyItem* a, const ZxPtyItem* b); + + //void applyConfig(ZxXpfNode* p); + IxPtyItemEditor* tryCreateEditor(const QString& widgetTag); + void setConfig(ZxXpfNode* p, bool isInit); + void loadInitConfig(); + + ZxPtyAttributeFile* getAttributeFile() const; + QWidget* getOwnerWidget(); + QWidget* getItemWidget(); + QString getLabel(); + + void onValueChanged(const QVariant& v); + + int getVisibleRows(); + bool isHideByCollapse(); + bool isVirtualVisible(); + + int getParamsCount() const; + QString getParam(int index) const; + + const QString& getKey() const; + QString getFullKey() const; + + QString getParentConfigName(ZxXpfNode* config) const; + + QString macrosExpanded(const QString& s) const; + + void onDoubleCliked(int n); + +public: + + int realIndex; //实际的行号 + int virtualIndex; //显示在第几行, 有条目展开/折叠时, 这个值可能会变 + int order; //显示顺序 + + int offset; //当前显示位置, Y坐标 + int cellHeight; //当前条目的高度 + int indent; //缩进 + + bool expanded; + bool hidden; //配置里配的, 是否隐藏 + bool active; + bool readonly; + + IxPtyItemEditor* editor; //用来编辑/显示当前条目的控件 + ZxPtyPano* sheet; //所属的属性表 + //ZxXpfNode* config; //当前条目的配置, 从配置文件里获取. 可以为空 + QString label; //显示的标签 + bool hasMacros; + QStringList params; //key is at front, ie params[0] + QString help; + QVariant value; //当前值 + + QList handlers; //回调, 往对象回传新值 + + ZxPtyItem* parent; //父条目 + QVector children; //子条目 + + + // 其它常量 + int m_nCELL_HEIGHT; + int m_nCELL_SPACING; +}; + + + + + diff --git a/Include/iBase/iProperty/ZxPtyPano.h b/Include/iBase/iProperty/ZxPtyPano.h new file mode 100644 index 0000000..06a9956 --- /dev/null +++ b/Include/iBase/iProperty/ZxPtyPano.h @@ -0,0 +1,188 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "ZxDynamic.h" +#include "ZxPtyItem.h" +#include "iProperty_global.h" + +class ZxPtyFileManager; +class ZxPtyAttributeFile; +class ZxXpfNode; + +class I_PROPERTY_EXPORT ZxPtyPano + : public QAbstractScrollArea + , virtual public IxPtyPano + , virtual public IxDynObj +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + explicit ZxPtyPano(); + ~ZxPtyPano(); + + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent* e); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void resizeEvent(QResizeEvent *); + + virtual IxPtyItem* addGroup(const QString& key, bool expand = true, bool visible = true); + virtual IxPtyItem* add(ZX_PROPERTY_CHANGED_CALLBACK callback, const QString& key, const QVariant& var, IxPtyItem::ItemType type = IxPtyItem::typeDefault); + + virtual void beginSession(const QString& configName, IxInterface* pSessionOwner); + virtual void endSession(); + + virtual void beginObject(IxPtySource* p); + virtual void endObject(); + + virtual IxPtyItem* findPropertyItem(const QString& sKey); + + virtual void clear(IxInterface* pSessionOwner); + + // 获取当前配置文件. 这个文件是根据上层应用模块设置的配置名来加载的, 每次填表都会更新. + ZxPtyAttributeFile* getAttributeFile(); + + IxPtySource* getCurObject() { return m_pObject; } + +signals: + + void helpMessage(const QString& help); + +protected slots: + void onConfigReloaded(); + +private: + + void paintGrid(QPainter& painter); + void paintHeader(QPainter& painter); + void paintGroups(QPainter& painter); + void paintItems(QPainter& painter); + void onActiveItemChanged(ZxPtyItem* item); + + enum HitTestPart + { + htNone, + htExpander, + htLeftCol, + htRightCol, + htSplit + }; + + class HitTestResult + { + public: + int row; + HitTestPart part; + bool isValid() const; + int col(); + }; + +private: + + void updateLayout(); + void doLayout(); + + ZxPtyItem* getOrCreate(const QString& key, const QVariant& initVar, bool* bJustCreated); + + ZxXpfNode* getItemConfig(const QString& key); +// ZxXpfNode* getParentItemConfig(ZxXpfNode* pItemConfig); + + int indentWidth() const; + + int getAndIncObjectSn(); + + QRect getLeftRect(int virtualRow); + QRect getRightRect(int virtualRow); + + HitTestResult hitTest(int x, int y); + + void expand(ZxPtyItem* p); + void collapse(ZxPtyItem* p); + + void activateItem(ZxPtyItem* p); + void clearItems(); + + int getVerticalScrollPos() const; + void scrollContentsBy(int dx, int dy); + + int right() const; + void updateItem(ZxPtyItem* item); // 刷新重绘 + + void saveXSplit(); + void loadXSplit(); + + void normalizeXSplit(); + IxPtyItemEditor* createEditor(const QString& name); + + void releaseEditor(IxPtyItemEditor* p); + +private: + + bool m_bNeedLayout; + + QVector m_vecRealRows; + QVector m_vecVirtualRows; + + QHash m_map; + ZxPtyFileManager* m_pConfigManager; + mutable ZxPtyAttributeFile* m_pAttribueFile; + mutable QString m_sConfig; + + int m_nSessionId; + IxInterface* m_pSessionOwner; + + IxPtySource* m_pObject; + int m_nObjectCount; + IxPtyItem* m_pCurrentItem; + + QHash m_objectSn; + bool m_bInitializingSession; + + int m_xSplit; + QPixmap m_pixExpand; + QPixmap m_pixCollapse; + friend class ZxPtyItem; + QColor m_groupBackColor[3]; + QColor m_groupFrontColor[3]; + QColor m_frameBackColor; + double m_dNextItemOrder; + bool m_bClearEntered; + +// static QSet _setAllPtyPanos; + QList itemsToBeDeleted; + bool m_bHitSplit; + // 控件池, 避免反复创建/删除, 否则Debug版会比较卡 + typedef QVector ItemEditorVector; + QHash m_editorPool; + + int m_nROW_HEIGHT; + int m_nINDENT_WIDTH; + int m_nINDENT_ICON_WIDTH; + int m_nINDENT_ICON_MARGIN_H; + int m_nINDENT_ICON_MARGIN_V; + int m_nLEFT_PADDING; + int m_nRIGHT_PADDING; + int m_nBOTTOM_PADDING; + int m_nCELL_PADDING_V; + int m_nCELL_PADDING_H; + int m_nCELL_SPACING; + + friend class ZxPtyFileManager; +}; + + + + + + + diff --git a/Include/iBase/iProperty/ZxXpfHelper.h b/Include/iBase/iProperty/ZxXpfHelper.h new file mode 100644 index 0000000..f176d7a --- /dev/null +++ b/Include/iBase/iProperty/ZxXpfHelper.h @@ -0,0 +1,18 @@ +#pragma once + +#include "iProperty_global.h" +#include "ZxXpf.h" + +// Xpf文件格式Helper +class I_PROPERTY_EXPORT ZxXpfHelper +{ +public: + static bool getMinMax(ZxXpfNode* node, int& nMin, int& nMax, \ + int nDefaultMin = 0xFFFFFFFF, int nDefaultMax = 0x7FFFFFFF); + static bool getMinMax(ZxXpfNode* node, double& fMin, double& fMax, \ + double fDefaultMin = -1e100, double fDefaultMax = 1e100); +}; + + + + diff --git a/Include/iBase/iProperty/iProperty_global.h b/Include/iBase/iProperty/iProperty_global.h new file mode 100644 index 0000000..6acedc2 --- /dev/null +++ b/Include/iBase/iProperty/iProperty_global.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +#if defined(I_PROPERTY_LIBRARY) +# define I_PROPERTY_EXPORT Q_DECL_EXPORT +#else +# define I_PROPERTY_EXPORT Q_DECL_IMPORT +#endif + + + + + diff --git a/Include/iBase/iUnit/iUnitControl.h b/Include/iBase/iUnit/iUnitControl.h new file mode 100644 index 0000000..7211a83 --- /dev/null +++ b/Include/iBase/iUnit/iUnitControl.h @@ -0,0 +1,48 @@ +#pragma once + +#include +#include "iUnit_global.h" + +class iUnitGroup; +class QHBoxLayout; +class QLineEdit; +class QComboBox; +class QLabel; + +// 专门封装的单位显示组件,目前用的地方不多 +class I_UNITSHARED_EXPORT iUnitControl : public QWidget +{ + Q_OBJECT + +public: + + // 创建时需输入一个单位信息,即iUnitGroup类的一个对象 + iUnitControl(iUnitGroup* pUnitGroup); + ~iUnitControl(); + + void initUI(); + +private: + + void initUnitCbx(); + + float getValue(); //获得当前单位制下的数值 + void setValue(float value); //修改当前单位制下的数值 + bool setCurrentUnit(QString sUnit); //修改当前单位 + bool setCurrentUnit(int nUnitIndex); //修改当前单位 + +private slots: + + void slotTextChanged(QString s); //手动改参数对应的槽函数 + void slotCbxIndexChanged(int index); //单位改变对应的槽 + +private: + + QLabel* m_pItemTag; + QLineEdit* m_pItemEdit; + QComboBox* m_pCbxUnits; + iUnitGroup* m_pUnitGroup; + + float m_fRawValue; //记录输入的数值,用于转换 + QString m_sRawUnit; +}; diff --git a/Include/iBase/iUnit/iUnitGroup.h b/Include/iBase/iUnit/iUnitGroup.h new file mode 100644 index 0000000..d9f4a09 --- /dev/null +++ b/Include/iBase/iUnit/iUnitGroup.h @@ -0,0 +1,54 @@ +#pragma once + +#include +#include "iUnitItem.h" + +// 单位组 +class I_UNITSHARED_EXPORT iUnitGroup : public QObject +{ + Q_OBJECT + +public: + + explicit iUnitGroup(QWidget *parent = 0); + ~iUnitGroup(); + +public: + + // 解析 + void parseInfo(const QDomElement& e); //解析xml + void writeInfo(QDomElement& e,QDomDocument &doc); //写入xml + void copyFrom(iUnitGroup* p); + + // 数据转换 + bool convert(QString sUnitSrc, float fValueSrc, + QString sUnitDest, float& fValueDest, int &nDigit); + bool convert(QString sUnitSrc, VecFloat vecValueSrc, + QString sUnitDest, VecFloat& vecValueDest, int &nDigit); + + // 查找是否还有某个单位 + int indexOf(QString sUnit); + + // 获取某个单位对象体 + iUnitItem* getUnitItem(QString sUnit); + + // 获取所有的单位名称 + QStringList getAllUnitNames(); + + // 获取该单位组的基准单位 + QString getUnitBase(); + + void clear(); + +public: + + QString m_sID; //ID + QString m_sName; //名称 + QString m_sType; //类型 + QString m_sIcon; //图标 + QString m_sTips; //备注说明 + + vecUnitItemPtr m_vecUnitItems; +}; + +typedef QVector vecUnitGroupPtr; diff --git a/Include/iBase/iUnit/iUnitItem.h b/Include/iBase/iUnit/iUnitItem.h new file mode 100644 index 0000000..0cd2c5d --- /dev/null +++ b/Include/iBase/iUnit/iUnitItem.h @@ -0,0 +1,38 @@ +#pragma once + +#include + +#include "Defines.h" +#include "iUnit_global.h" + +// 单位项 +class I_UNITSHARED_EXPORT iUnitItem : public QObject +{ + Q_OBJECT + +public: + + iUnitItem(); + ~iUnitItem(); + void copyFrom(iUnitItem* p); + + // Method + void parseInfo(const QDomElement& e); //解析xml + void writeInfo(QDomElement& e); //写入xml + +public: + + // 基础信息 + QString m_sID; //ID + QString m_sName; //名称,其实就是 单位 为了统一,用了Name而不是Unit +// QString m_sUnit; //名称 + QString m_sIcon; //图标 + QString m_sTips; //Tips + + float m_fK; //系数 + float m_fB; + + // 该单位显示的小数位数 + int m_nDigit; +}; +typedef QVector vecUnitItemPtr; diff --git a/Include/iBase/iUnit/iUnit_global.h b/Include/iBase/iUnit/iUnit_global.h new file mode 100644 index 0000000..dac4492 --- /dev/null +++ b/Include/iBase/iUnit/iUnit_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#if defined(I_UNIT_LIBRARY) +# define I_UNITSHARED_EXPORT Q_DECL_EXPORT +#else +# define I_UNITSHARED_EXPORT Q_DECL_IMPORT +#endif + + + + diff --git a/Include/iBase/iUtils/IniFileTool.h b/Include/iBase/iUtils/IniFileTool.h new file mode 100644 index 0000000..28de249 --- /dev/null +++ b/Include/iBase/iUtils/IniFileTool.h @@ -0,0 +1,44 @@ +#pragma once + +#include "LlUtils_global.h" +#include "Defines.h" + +/// @brief Ini文件解析类的封装 +class I_UTILSSHARED_EXPORT IniFileTool +{ +public: + + // 如果sIni不是全路径,则默认从Config/[Module]下面查找 + // 如下三种模式均可 + // E:\Run\mWTAI\Bin\Config\WTAI\WTAIConfig.ini + // WTAIConfig.ini + // WTAIConfig + IniFileTool(QString sIni, bool bRead = true); + ~IniFileTool(); + + // 直取String + QString getValue(QString sKey); + + // 直取StringList + QStringList getValueList(QString sKey); + + // 如果bParseFromStr=true + // 先以Sring取,然后parse,类似{}{}{}格式的ini + QStringList getValueList(QString sKey, bool bParseFromStr); + + // 设置数值 + void setValue(QString sKey, QVariant o); + + // 这是QSetting的本身的函数 + QStringList allKeys() const; + QStringList childKeys() const; + QStringList childGroups() const; + + // 对于其它的可以直接通过QSetting处理 + QSettings* getSettings(); + +private: + + QSettings* m_pSettings; + bool m_bRead; //读写标识,目前基本都是读 +}; diff --git a/Include/iBase/iUtils/LlUtils_global.h b/Include/iBase/iUtils/LlUtils_global.h new file mode 100644 index 0000000..3714d7f --- /dev/null +++ b/Include/iBase/iUtils/LlUtils_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#if defined(I_UTILS_LIBRARY) +# define I_UTILSSHARED_EXPORT Q_DECL_EXPORT +#else +# define I_UTILSSHARED_EXPORT Q_DECL_IMPORT +#endif + + + + diff --git a/Include/iBase/iUtils/ZxBaHelper.h b/Include/iBase/iUtils/ZxBaHelper.h new file mode 100644 index 0000000..09ccf29 --- /dev/null +++ b/Include/iBase/iUtils/ZxBaHelper.h @@ -0,0 +1,108 @@ +#pragma once + +#include "Defines.h" +#include "LlUtils_global.h" + +// QByteArray转换专用类 +// 其实该类的很多函数可以以模版template函数 +// 来实现,但是通常template函数需要放.h文件中 +// 故未采用。 +class I_UTILSSHARED_EXPORT ZxBaHelper +{ +public: + + ZxBaHelper(); + +public: + + /// @brief Vec与QByteArray相互转换 + static bool convertVec2Ba(VecVariant& vec, QByteArray& ba); + static bool convertBa2Vec(VecVariant& vec, QByteArray& ba); + static bool convertVec2Ba(VecDouble& vec, QByteArray& ba); + static bool convertBa2Vec(VecDouble& vec, QByteArray& ba); + static bool convertVec2Ba(VecFloat& vec, QByteArray& ba); + static bool convertBa2Vec(VecFloat& vec, QByteArray& ba); + + /// @brief VVec与QByteArray的转换 + static bool convertVVec2Ba(VVecVariant& vvec, \ + QByteArray& ba); + + /// @brief QByteArray与VVec的转换 + static bool convertBa2VVec(VVecVariant& vvec, \ + QByteArray& ba); + + + /// @brief VVec与QByteArray的转换 + static bool convertVVec2Ba(VVecDouble& vvec, \ + QByteArray& ba); + + /// @brief QByteArray与VVec的转换 + static bool convertBa2VVec(VVecDouble& vvec, \ + QByteArray& ba); + + + + /// @brief VecX、VecY与QByteArray的转换 + static bool convertVecXY2Ba(VecFloat& vecX, \ + VecFloat& vecY, \ + QByteArray& ba); + + /// @brief QByteArray与VecX、VecY的转换 + static bool convertBa2VecXY(VecFloat& vecX, \ + VecFloat& vecY, \ + QByteArray& ba); + + /// @brief vvecXY 类似 vecXY << vecX << vecY + static bool convertBa2VVecXY(VVecFloat& vvecXY, \ + QByteArray& ba); + + /// @brief 把多个ba一起转换为VVec,主要用于多相情况 + /// @param vecBAs,流量数据体的,ba,三个,油气水(每个都内含x/y) + /// @param vvec结果 + /// @param bVertical,如果为true,则 vvec[0]为时间,vvec[1]油,vvec[2]为气,vvec[3]为水 + /// 如果为false,则vvec[0]为 时间/油/气/水,其它均类似 + static bool convertVecBa2VVecF(QVector& vecBAs, \ + VVecFloat& vvec, bool bVertical = true); + + /// @brief 把多个ba一起转换为VVec,主要用于多相情况 + /// @param vecBAs,流量数据体的,ba,三个,油气水(每个都内含x/y) + /// @param vvec结果 + /// @param bVertical,如果为true,则 vvec[0]为时间,vvec[1]油,vvec[2]为气,vvec[3]为水 + /// 如果为false,则vvec[0]为 时间/油/气/水,其它均类似 + static bool convertVecBa2VVecV(QVector& vecBAs, \ + VVecVariant& vvec, bool bVertical = false); + + + /// @brief QVector + // 已经废弃 + static bool convertBa2VecPoints(QVector& vec, \ + QByteArray& ba); + + /// @brief vvecData的每一个元素 (x,y) + static bool convertBa2VVecData(VVecVariant& vvecData, \ + QByteArray& ba); + + /// TODO 20231231 Old + // 已经废弃 + static bool convertVVecData2BaEx(VVecVariant& vvecData, QByteArray& ba); + // 已经废弃 + static bool convertBa2VVecDataEx(VVecVariant& vvecData, QByteArray& ba); + + /// TODO 20231231 Old + // 已经废弃 + static bool convertBa2VecData(VecFloat& vecData, QByteArray& ba); + // 已经废弃 + static bool convertVecData2Ba(VecFloat& vecData, QByteArray& ba); + + // ByteArray Image + static bool imgToBa(QImage& img, QByteArray& ba); + static bool baToImg(QImage& img, QByteArray& ba); + + // ByteArray map + static bool mapToBa(QByteArray& ba, QMap& map); + static bool baToMap(QByteArray& ba, QMap& map); + static bool mapToBa(QByteArray& ba, QMap& map); + static bool baToMap(QByteArray& ba, QMap& map); + static bool mapToBa(QByteArray& ba, QMap& map); + static bool baToMap(QByteArray& ba, QMap& map); +}; diff --git a/Include/iBase/iUtils/ZxBaseUtil.h b/Include/iBase/iUtils/ZxBaseUtil.h new file mode 100644 index 0000000..2330df2 --- /dev/null +++ b/Include/iBase/iUtils/ZxBaseUtil.h @@ -0,0 +1,207 @@ +#pragma once + +#include "Defines.h" +#include "iBase_global.h" +#include "LlUtils_global.h" + +/// @brief 该类是一些公有函数库的实现,比较杂 +/// @note 通常一些不知道应放在何处的代码可以仍在该类中实现 +/// 该类请不要添加成员变量或非静态的方法 +class I_UTILSSHARED_EXPORT ZxBaseUtil +{ +public: + + ZxBaseUtil(); + + // 获取当前APP文件所在的路径 ..\Bin\Release + static QString getAppDir(); + + // 获得当前DLl文件所在的路径 ..\Bin\Release + static QString getDllDir(QString strDll); + + /// @brief 获取相应的组合路径 + /// @param sCategory 对应 defines.h中 s_Dir_Config 之类 + /// @param sSubDir 对应 defines.h中 s_SubDir_AlgoConfig 之类 + /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 + static QString getDirOf(QString sCategory, QString sSubDir = "", QString sTag = "",QString sDll = ""); + + /// @brief 获取当前项目下的相应的组合路径 + /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 + static QString getCurProjectDirOf(QString sTag = ""); + + /// @brief 创建(如果不存在)路径 + /// @note 作用包括如下: + /// (1)、创建 sDir 目录,如果未创建 + /// (2)、\\替换为/,并且确保路径以 / 结尾 + /// (3)、去除 ../ 之类的路径(规范) + static bool makeSureDir(QString& sDir); + + /// @brief 拷贝文件夹 + /// @param fromDir : 源目录 + /// @param toDir : 目标目录 + /// @param bCoverIfFileExists : ture:同名时覆盖 false:同名时返回false,终止拷贝 + /// @note 返回: ture拷贝成功 false:拷贝未完成 + static bool copyDir(const QDir& fromDir, const QDir& toDir, bool bCoverIfFileExists = true); + + // 把QStringList或QVector转换为QString,为了打印方便 + //static QString convert2Str(QStringList vecStr, QString seprator = " "); + //static QString convert2Str(QVector vecStr, QString seprator = " "); + + /// @brief 获取当前打开的工区,对框架接口的封装 + //static void setCurrentProject(ZxProjectData* project); + + /// @brief 上次打开项目, + static void setLastProject(const QString& sProjectName); + static QString getLastProject(); + + /// @brief 当前打开的项目 test log + static void setCurrentProjectName(const QString& sProjectName); + static QString getCurrentProjectName(); + + /// @brief 当前打开的项目的路径 ../Bin\Test_Data\test log/ + static void setCurProjectDir(const QString& sProjectDir); + static QString getCurProjectDir(); + + /// @brief 获取当前工区下某口井的相应的组合路径 + /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 + static QString getWellDirOf(QString sWellName, QString sTag = "", QString sTagChild = ""); + + /// @brief 获取当前工区下当前井的相应的组合路径 + /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 + static QString getCurWellDirOf(QString sTag = ""); + + /// @brief 设置当前井 + static void setCurrentWellName(const QString& s); + static QString getCurrentWellName(); + static void setCurrentWellCode(const QString& s); + static QString getCurrentWellCode(); + + /// @brief 上次打开路径 + static void setLastDir(const QString& sDir); + static QString getLastDir(); + + /// @brief 自定义信息 + static void setCustomValue(QString sKey, const QString& s); + static QString getCustomValue(QString sKeu); + static void setCustomValueEx(QString sKey, const QStringList& list); + static QStringList getCustomValueEx(QString sKey); + + /// @brief 获取当前系统日期 + static QString getSysDate(); + + /// @brief 获取当前系统时间 + static QString getSysDateTime(bool bNormalFormat = false); + + /// @brief 获取当前系统登录用户 + static QString getSysUserName(); + + /// @brief 对项目或项目所在的上一级目录进行个性化设定 + /// @param sDir 路径 + /// @param bTop 是否项目路径的上一级目录,仅仅为了换个图标而已,也可以修改该参数直接传过来路径 + /// bTop仅仅当 sIcon 为空时有效,这次测井软件固定两个图标中的一个 + /// @param sIcon 图标路径,绝对路径 + /// @note 只有windows平台有效 + static bool customProjectFolder(QString sDir, bool bTop = false, QString sIcon = ""); + + /// @brief 针对Qt暂未找到trimRight之类的接口 + /// @note 后续可能封闭该接口 + static bool trimStrRight(QString& s); + + /// @brief 求取坐标轴的刻度显示 + /// @param fMin 左值,通常为最小值 + /// @param fMax 右值,通常为最大值 + /// @param bAxisX 是否X轴 + /// @param bLinear 是否线性 + /// @param bExpand 是否流量自动扩展一个tick + /// @param pVecScales结果存储位置 + /// @note 1:通常 fMin < fMax; 对于fMin > fMax 的情况也做了相应处理(返回结果也是倒着) + static bool calAxisScales(float& fMin, + float& fMax, + bool bAxisX, + bool bLinear = true, + bool bExpand = false, + QVector* pVecScales = NULL); + + /// @brief 随机颜色提取 + static QColor getCustomColor(int nIndex); + + /// @brief 循环迭代删除文件夹 + static bool removeDir(const QString &sDir); + + /// @brief 把文件夹的最后一级重命名 + static bool renameDir(const QString& sDir, const QString& sNewLast); + + /// @brief 循环迭代拷贝文件夹 + static bool copyDir(const QString& sFrom, const QString& sTo); + + /// @brief 判断字符串是否一致,不考虑大小写 + static bool isSameStr(QString s1, QString s2); + + /// @brief 判断字符串是否包括中文字符 + static bool strContainsChs(QString s); + + /// @brief 对字符串进行排序,如果包括中文,则以汉语拼音进行 + static bool sortStrList(QStringList& list, bool bAscMode = true); + + /// @brief 打开文件夹,调用API接口 + static void openFolder(QString sDir); + + /// @brief 获取下一个可以用的标题,默认加_1,_2,_3 + /// @param nFixedLen取值如下 + /// -1,则加_1,_2,_3 + /// 0-1,则加1,2,3,...,10 + /// 2+,则加01,02,03,...,10或001,002... + static QString getNextOneName(QStringList& listOlds, \ + QString& sBase, \ + int nFixedLen = -1); + + // 对于Cross,改为自定义,因为系统的太大,不美观 + static void customerCrossCusor(QCursor &o); + + // 获取字符串表示的float的小数位数 + // ”1.230"返回3,”100“返回0 + static int getStrDigit(QString s); + + /// @brief 根据小数位数,获取其字符串 + /// @param f:数值 + /// @param nDigit:小数位数 > 0 + /// @param bAutoAdjust:是否自动调整 + /// @param bAutoTrimmed:自动截取末尾0 + /// @note 如果bAutoAdjust=1,f=0.0001,nDigit=3则返回“0.0001” + static QString getValidStr(float f, \ + int nDigit, \ + bool bAutoTrimmed = true, \ + bool bAutoAdjust = true); + + /// @brief 根据小数位数,获取其字符串 + /// @param v:数值 + /// @param nDigit:小数位数 > 0 + /// @param bAutoAdjust:是否自动调整 + /// @param bAutoTrimmed:自动截取末尾0 + /// @note 如果bAutoAdjust=1,f=0.0001,nDigit=3则返回“0.0001” + static QString getValidStrEx(QVariant v, \ + int nDigit, \ + bool bAutoTrimmed = true, \ + bool bAutoAdjust = true); + + // 启动Help + static bool startHelp(QString sChm = ""); + + /// @brief 开启一个一个进程 + /// @param sApp 进程名,exe名 + /// @param sCmdLine 命令行 + /// @param sWorkDir 工作目录 + static bool startProcess(QString sApp, \ + QString sCmdLine, \ + QString sWorkDir = ""); + + // 判断字符串可否作为路径或者文件明,注:只是判断能否作为文件名或路径名,而不作存在性判断 + static bool isValidFileName(const QString s); + static bool isValidFilePath(const QString s); + + /// @brief 获取屏幕Dpi + /// @param bX X方向或Y方向 + /// @param bPhysicalDpi 物理Dpi还是逻辑Dpi + static int getDpi(bool bX = true, bool bPhysicalDpi = true); + +}; diff --git a/Include/iBase/iUtils/ZxDot.h b/Include/iBase/iUtils/ZxDot.h new file mode 100644 index 0000000..c604e1e --- /dev/null +++ b/Include/iBase/iUtils/ZxDot.h @@ -0,0 +1,127 @@ +#pragma once + +#include + +#include "Defines.h" +#include "ZxDynamic.h" +#include "IxSerDes.h" +#include "ZxSerializer.h" +#include "iBase_global.h" + +#include "LlUtils_global.h" + +// 该类ZxDot是实现绘制点的工具类,主要提供了一种 +// QVariant的自定义元数据的参照 +class I_UTILSSHARED_EXPORT ZxDot + : virtual public IxDynObj + , virtual public IxSerDes +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDot(); + ZxDot(ZxDotType o, \ + QColor clr = QColor(0, 0, 0), \ + float r = 1.f, \ + bool bFill = false); + ~ZxDot(); + +#ifdef QT_DEBUG + // 专门测试函数,元数据,自定义 + void testMetaTypeUsage(); +#endif + +public: + + // operator abouts + + ZxDot &operator = (const ZxDot &o); + bool operator == (const ZxDot &o) const; + bool operator != (const ZxDot &o) const + { + return !(operator == (o)); + } + operator QVariant() const + { + return QVariant::fromValue(*this); + } + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + // 参数 set/get + + ZxDotType style() const; + void setStyle(ZxDotType); + + QColor color() const; + void setColor(const QColor &clr); + + float radius() const; + void setRadius(const float& f); + + bool isFilling() const; + void setFilling(const bool& b); + +protected: + + ZxDotType m_oType; //类型 + QColor m_clr; //颜色 + float m_fRadius; //半径 + bool m_bFilling; //是否填充 +}; + +Q_DECLARE_METATYPE(ZxDot) //宏定义 + +// QDebug << 重载 +inline QDebug operator<< (QDebug debug, const ZxDot& o) +{ + debug.nospace() << "ZxDot(" + << (int)(o.style()) << "," + << o.color() << "," + << o.radius() << "," + << o.isFilling() << ")"; + return debug.space(); +} + +// 序列化必须,DataStream +inline QDataStream& operator<< (QDataStream& out, const ZxDot& o) +{ + qRegisterMetaTypeStreamOperators("ZxDot"); + + out << (int)(o.style()); + out << o.color(); + out << o.radius(); + out << o.isFilling(); + return out; +} + +// 序列化必须,DataStream +inline QDataStream& operator>> (QDataStream& in, ZxDot& o) +{ + qRegisterMetaTypeStreamOperators("ZxDot"); + + int n = 0; + in >> n; + o.setStyle((ZxDotType)n); + + QColor clr(0, 0, 0); + in >> clr; + o.setColor(clr); + + float r = 0.f; + in >> r; + o.setRadius(r); + + bool b = false; + in >> b; + o.setFilling(b); + + return in; +} diff --git a/Include/iBase/iUtils/ZxDrawHelper.h b/Include/iBase/iUtils/ZxDrawHelper.h new file mode 100644 index 0000000..62a8f01 --- /dev/null +++ b/Include/iBase/iUtils/ZxDrawHelper.h @@ -0,0 +1,94 @@ +#pragma once + +#include +#include +#include "ZxDot.h" +#include + +/// 一些简单而通用的图元绘制 +class I_UTILSSHARED_EXPORT ZxDrawHelper +{ +public: + + ZxDrawHelper(); + ~ZxDrawHelper(); + + // 返回DRAWING_TYPE的类型描述 + static QStringList getDotStyleDescs(); + + /// 绘制焦点 + static void drawFocus(QPainter* painter,QRectF rect); + + /// 绘制点 + static void drawPoint(QPainter* painter,QPointF point[],int cnt,int nDotStyle,float fRadius,bool isFill,QColor clr); + static void drawPoint(QPainter* painter, QPointF point[], int cnt, ZxDot o); + + /// 绘制点 + static void drawPoint(QPainter* painter,QPointF point,int nDotStyle,float fRadius,bool isFill,QColor clr); + static void drawPoint(QPainter* painter, QPointF point, ZxDot o); + + /// 绘制圆 + static void drawCircle(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制正方形 + static void drawSquare(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制上三角 + static void drawUpTriangle(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制下三角 + static void drawDownTriangle(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制左三角 + static void drawLeftTriangle(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制右三角 + static void drawRightTriangle(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制菱形 + static void drawDiamond(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制叉 + static void drawCross(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制十字架 + static void drawPlus(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制六角星 + static void drawStar(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制梯形塔台 + static void drawRig(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr); + + /// 绘制带线的三角形 + static void drawTriangleWithLine(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr,float fAngle = 0); + + /// 绘制带线的圆 + static void drawCricleWithLine(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr,float fAngle = 0); + + /// 绘制箭头 + static void drawArrow(QPainter* painter,QPointF point,float fRadius,bool isFill,QColor clr,float fAngle = 0); + + /// 求两条线段的夹角 + static float straightAngle(QPointF ptLine1Start,QPointF ptLine1End,QPointF ptLine2Start,QPointF ptLine2End); + + /// 绘制文本 + static void drawText(QPainter* painter, const QRectF& rt, \ + int flags, const QString& s, bool bTrimStr = true); + static void drawText(QPainter* painter, const QPointF& pt, \ + const QString& s, bool bTrimStr = true); //该函数用的很少,不建议使用 + + /////////////////////////////////////////////////// + // TODO 如下几个函数可以考虑放入zxAlgMath类库之中,目前为了减少类库依赖,暂时放在此处 + /// 点是否在附近 + static bool isPointNearPoint(QPointF point1,QPointF point2,float nMinDist=1.f); + /// 点是否在直线附近 + static bool isPointNearLine(QPointF pt1,QPointF pt2,QPointF pt3,float nMinDist=1.f); + static double pointToLineDis(QPointF pt1,QPointF pt2,QPointF pt3); + /////////////////////////////////////////////////// + +}; + + + + diff --git a/Include/iBase/iUtils/ZxImgHelper.h b/Include/iBase/iUtils/ZxImgHelper.h new file mode 100644 index 0000000..7c97acb --- /dev/null +++ b/Include/iBase/iUtils/ZxImgHelper.h @@ -0,0 +1,32 @@ +#pragma once + +#include "Defines.h" +#include "LlUtils_global.h" + +union rgbEx +{ + uint rgba; + uchar bits[4]; +}; + +/// @brief Image相关 +class I_UTILSSHARED_EXPORT ZxImgHelper +{ +public: + + ZxImgHelper(); + ~ZxImgHelper(); + + // 加载图片文件至oImg(支持大图) + static bool loadImg(QImage& oImg, QString sFile); + + // 旋转(倾斜度校正) + // 顺时针旋转的角度,不需弧度转换, fAngle:0-360 + static bool rotateImg(QImage& oImg, \ + float fAngle, \ + bool bAdjustBkClr = true); + + // 更改因为旋转而导致的背景颜色(黑色) + static bool changeRotBkClr(QImage& oImg); + +}; diff --git a/Include/iBase/iUtils/ZxResolutionHelper.h b/Include/iBase/iUtils/ZxResolutionHelper.h new file mode 100644 index 0000000..fe99c0e --- /dev/null +++ b/Include/iBase/iUtils/ZxResolutionHelper.h @@ -0,0 +1,98 @@ +#pragma once + +#include "LlUtils_global.h" +#include "Defines.h" + +// 本类的目的主要是实现分辨率适配相关的内容 +// 主要为了速度 +class I_UTILSSHARED_EXPORT ZxResolutionHelper +{ +public: + + // 获取对象,单例模式 + static ZxResolutionHelper* getInstance(); + + // 关闭消耗 + static void release(); + + // 根据屏幕分辨率对大小进行调整 + // 为了代码速度以及保密需要,不再启用模版,模版版本可以参见20240920之前版本// +// template T adjustSize(T v, bool bHori = true, QWidget* pWx = NULL) + int adjustSizeW(int v, QWidget* pWx = NULL); + int adjustSizeH(int v, QWidget* pWx = NULL); + double adjustSizeW(double v, QWidget* pWx = NULL); + double adjustSizeH(double v, QWidget* pWx = NULL); + + // 获取实际分辨率 + int getResoRealW(); + int getResoRealH(); + + // 获取基准分辨率(内部ini设定的分辨率,通常很少调用该函数) + int getResoBaseW(); + int getResoBaseH(); + + // 当前软件运行的屏幕分辨率与基准分辨率的比值 + double getResoRatioW(); + double getResoRatioH(); + + enum Icon_Size_Mode + { + ISM_Small = 0, //小 + ISM_Mid, + ISM_Large, + ISM_Super, + ISM_Auto //其实就是ISM_Mid + }; + + // 根据当前屏幕分辨率,获取图标适合的大小,通常是16,24,32等 + int getProperIconSize(Icon_Size_Mode ism = ISM_Mid); + +private: + + ZxResolutionHelper(); + ~ZxResolutionHelper(); + +private: + + // 显示器相关 + void makesureRatioWH(int nIndex); + int getScrnIndexOf(QWidget* pWx); + void makesureIconSizes(); + + // 根据屏幕分辨率对大小进行调整 + // 为了代码速度以及保密需要,不再启用模版,模版版本可以参见20240920之前版本// + int adjustSize(int v, bool bHori = true, QWidget* pWx = NULL); + double adjustSize(double v, bool bHori = true, QWidget* pWx = NULL); + +private: + + static ZxResolutionHelper* spResoHelper; + + // 软件研发时,研发人员默认参照的显示,权宜之计 + int m_nBaseW; + int m_nBaseH; + + // 实际的 + int m_nRealW; + int m_nRealH; + + // 当前软件运行的屏幕分辨率与基准分辨率的比值 + double m_dRatioW; + double m_dRatioH; + + // 当前屏幕分辨率下,图标比较合适的大小,只是为了方便 + VecInt m_vecIconSizes; + + // 选用的屏幕索引,对于多显示器模式 + int m_nScrnIndex; + + // 临时,暂未启用 + bool m_bVerified; + + // Error + QString m_sError; +}; + +#define _resoHelper ZxResolutionHelper::getInstance() +#define _resoSizeW ZxResolutionHelper::getInstance()->adjustSizeW +#define _resoSizeH ZxResolutionHelper::getInstance()->adjustSizeH diff --git a/Include/iBase/iUtils/ZxScaleHelper.h b/Include/iBase/iUtils/ZxScaleHelper.h new file mode 100644 index 0000000..d28eccf --- /dev/null +++ b/Include/iBase/iUtils/ZxScaleHelper.h @@ -0,0 +1,54 @@ +#pragma once + +#include "Defines.h" +#include "LlUtils_global.h" + +/// @brief 坐标轴刻度的计算 +class I_UTILSSHARED_EXPORT ZxScaleHelper +{ +public: + + ZxScaleHelper(); + ~ZxScaleHelper(); + + /// @brief 求取坐标轴的刻度显示 + /// @param fMin 左值,通常为最小值 + /// @param fMax 右值,通常为最大值 + /// @param bAxisX 是否X轴 + /// @param bLinear 是否线性 + /// @param bExpand 是否流量自动扩展一个tick + /// @param pVecScales结果存储位置 + /// @note 1:通常 fMin < fMax; 对于fMin > fMax 的情况也做了相应处理(返回结果也是倒着) + bool calAxisScales(float& fMin, float& fMax, \ + bool bAxisX, \ + bool bLinear = true, \ + bool bExpand = false, \ + QVector* pVecScales = NULL); + + +private: + + // 内部接口(目前刻度计算函数,还有待较大完善空间) + bool checkReverse(); + bool checkSameValue(); + bool checkLogicalZero(); + void adjustIncrease(float& f, float& fMin); + bool calScaleByLinear(); + bool calScaleByLogical(); + void finalAdjustP(); + +private: + + // 计算过程中涉及到的一些中间变量 + float m_fMax; + float m_fMin; + float m_fMinRaw; + float m_fMaxRaw; + bool m_bAxisX; + bool m_bLinear; + bool m_bNeedTurn; + bool m_bExpand; + + float m_fTickIncrease; + QVector* m_pVecTicks; +}; diff --git a/Include/iBase/iUtils/ZxSupSubHelper.h b/Include/iBase/iUtils/ZxSupSubHelper.h new file mode 100644 index 0000000..fc9928e --- /dev/null +++ b/Include/iBase/iUtils/ZxSupSubHelper.h @@ -0,0 +1,67 @@ +#pragma once + +#include "LlUtils_global.h" +#include "Defines.h" + +// 关于上标下标的说明 +// 主要是单位上标下标,后续可以考虑数值,比如 1e-10d等 +// 处理方式: +// (1) 直接在绘图中进行处理,比如坐标轴的刻度(对数坐标里面) +// (2) 改为html代码,增加sub或sup布局方式,QLabel与QTextEdit有些许区别 +// (3) 利用UnitCode编码来进行,通常针对数字来进行,个别情况下对字母,注意:需要查表 +// 目前整体采用第(3)种方式来进行 +class I_UTILSSHARED_EXPORT ZxSupSubHelper +{ +public: + + ZxSupSubHelper(); + ~ZxSupSubHelper(); + + // 对于富文本转换,显示为QLabel和QTextBox是有些区别的,故此处区分一下 +// enum RichHtmlMode +// { +// RHM_Label = 0, // 0-QLabel直接调用 +// RHM_TextEdit, // 1:QTextEdit直接调用 +// RHM_Unknown // 其它(TODO) +// }; + + /// @brief 检测是否含有需要富文本转换的内容,如果有,则转换 + /// @param src 源文本,如 m^3/m^3 + /// @param dest 编码结果文本,比如^转为上标 + /// @param tag 判断表示,通常是^ 后续支持e + /// @param super 变为上标还是下标,默认上标 + /// @param sslen sub/sup 长度,如果为-1则自动按照数字来取,否则,按sslen取 + /// @return true:是,且正确转换,false:其他 + static bool checkRichText(QString src, QString& dest, \ + QString tag = "^", bool super = true, \ + int sslen = -1); + + /// @brief 把转换后的上下标字符串,再次进行调整,以能够以html的样式显示在QLabel中 + /// @param src 源文本,如 m³/d + /// @param dest 目标文本,如 m3/d + /// @param super 变为上标还是下标,默认上标 + /// @return true:是,且正确转换,false:其他 + /// @note 权宜之计的说明,后续有时间再进行优化完善—— + // 即:上述上标模式转换,大多数情况下没有问题,但是对于QLabel的显示出了问题,无法正常显示。 + // 比如插入流量点对话框中,"10^4m^3/d",m^3可以正确显示,但是^4无法正确显示 + // 经测试,应该是转换的码,不支持。(1,2,3,转为的0x00..,而其它转为的是0x20..) + // 但是为了保持整体接口的统一(所有地方都能适用),所以针对QLabel,增加如下接口,以便把转换后的 + // 上下标字符串,能够以html的样式显示在QLabel中。 + // m³/d 变为:m3/d + static bool convertRichText4Label(QString src, QString& dest, \ + bool super = true); + +private: + + // 内部编码查找函数 + static QString _getRichCodesOfStrs(QString s, bool super); + static QString _getRichCodeOfChar(QChar ch, bool super); + static QString _getCharOfPossibleRichCode(QChar ch, bool super); + + // 目前暂时支持14种字符上下标,后续根据需要可以进行扩展 + // ss_ 标识:SupSub + static const int ss_size = 14; + static const int ss_chars[14]; + static const int ss_digitsSup[14]; + static const int ss_digitsSub[14]; +}; diff --git a/Include/iBase/iXmlBase/iXmlBase_global.h b/Include/iBase/iXmlBase/iXmlBase_global.h new file mode 100644 index 0000000..e7bf905 --- /dev/null +++ b/Include/iBase/iXmlBase/iXmlBase_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(I_XML_BASE_LIBRARY) +# define I_XML_BASE_EXPORT Q_DECL_EXPORT +#else +# define I_XML_BASE_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iBase/iXmlBase/iXmlItemBase.h b/Include/iBase/iXmlBase/iXmlItemBase.h new file mode 100644 index 0000000..3a7a68f --- /dev/null +++ b/Include/iBase/iXmlBase/iXmlItemBase.h @@ -0,0 +1,99 @@ +#pragma once + +#include +#include "Defines.h" + +#include "IxSerDes.h" +#include "iXmlBase_global.h" + +class QDomNode; +class QDomElement; +class QDomDocument; +class ZxSerializer; + +// 单一节点 +class I_XML_BASE_EXPORT iXmlItemBase : public QObject, \ + virtual public IxSerDes +{ + Q_OBJECT + +public: + + iXmlItemBase(); + ~iXmlItemBase(); + +protected: + + // 初始化Tag + virtual void initXmlTags(); + +public: + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 备份恢复 + virtual bool saveBk(); + virtual bool restoreBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 写入xml + virtual void writeInfo(QDomElement& e, QDomDocument &doc); + + // 初始化孩子节点,对于组(父级)需要实现该函数 + virtual iXmlItemBase* createChild(); + + // 节点层级关系 + virtual void appenChild(iXmlItemBase* p); + iXmlItemBase* getChildAt(int n); + int getChildrenCount(); + QStringList childrenNames(); + int childIndex(QString sName); + void setParent(iXmlItemBase* p); + iXmlItemBase* getParent(); + + // clear + virtual void clear(); + +protected: + + //主要检查是否数据 + void checkStrToDigit(QString s, double& f); + void checkStrToDigit(QString s, int& n); + +public: + + QString m_sID; //ID + QString m_sName; //字段 + QString m_sAlias; //别名 + QString m_sTips; //说明/备注 + + QString m_sWhatThis;//辅助信息,可以是任意信息 + +protected: + + // XML标签,需与成员变量严格对应 + QStringList m_listTags; + + // XML标签对应的数据,需与成员变量严格对应 + QStringList m_listValues; + + // 备份:XML标签对应的数据,需与成员变量严格对应 + QStringList m_listValuesBk; + + // 对于父子关系的处理 + QVector m_vecChildren; + iXmlItemBase* m_pParent; + + // 临时,固定 + QString m_sChildTag; //写入XML时,孩子节点标签 +}; + +typedef QVector vecXmlItemsPtr; diff --git a/Include/iBase/iXmlBase/iXmlUtilBase.h b/Include/iBase/iXmlBase/iXmlUtilBase.h new file mode 100644 index 0000000..61fa71c --- /dev/null +++ b/Include/iBase/iXmlBase/iXmlUtilBase.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include +#include "iXmlBase_global.h" + +// xml文件解析基类 +class I_XML_BASE_EXPORT iXmlUtilBase +{ +public: + + /// @brief 解密并解析xml文件 + /// @param (out) doc 明文xml载体 + /// @param (in) sFile文件路径 + /// @param (in) bAdvanceMode,高级模式 自动进行加密解密处理,如果为false,则直接xml文件 + /// @note 关于sFile路径说明, + /// 格式可以是xml也可以是dat格式,当 bAutoEncMode = true 时, + /// 后台会自动换为dat格式,逻辑如下 + /// 路径为 $/Bin/Config/WTAI/BtnCmds.xml + /// 如果不存在,则从$/Bin/Config/Common中查找BtnCmds.dat + /// 即:模块本身如果配置,则走模块本身,否则走通用 + static bool openAndLoadXml(QDomDocument& doc, \ + QString& sFile, \ + bool bAdvanceMode = true); + + /// @brief 把Xml按照规范的属性顺序进行重新组织(该函数只在属性提取时调用,其它暂无调用) + /// @param (in) sFileSrc,源xml文件 + /// @param (in) sFileDest,目标xml文件 + /// @param (in) listOrderedAttributes,按照哪些属性进行排序 + /// @param (in) backUpMode,是否备份原先 + /// @note Qt Xml写起来方便(而且可以灵活遍历),但不支持属性顺序 + /// QtXmlWriter支持顺序,但写的时候只能流模式 + /// 故采用本函数进行一次转换 + static bool reOrderXml(QString sFileSrc, QString sFileDest, \ + QStringList listOrderedAttributes, \ + bool backUpMode = true); + +protected: + + /// @note 关于sDat路径说明,后台会自动换为dat格式 + /// 路径为 $/Bin/Config/WTAI/BtnCmds.dat + /// 如果不存在,则从$/Bin/Config/Common中查找BtnCmds.dat + /// 即:模块本身如果配置,则走模块本身,否则走通用 + static bool verifyDatFilePath(QString& sDat); + +private: + + // 内部排序转换函数(reOrderXml中进行调用) + static void orderXmlNode(const QDomNode* pNode, \ + QXmlStreamWriter& writer, \ + QStringList& listOrderedAttributes); + static void orderXmlAttribute(const QDomElement* pNode, \ + QXmlStreamWriter& writer, \ + QStringList& listOrderedAttributes); + + +}; diff --git a/Include/iData/iDataEngine/ZxDbSimple.h b/Include/iData/iDataEngine/ZxDbSimple.h new file mode 100644 index 0000000..f0044e7 --- /dev/null +++ b/Include/iData/iDataEngine/ZxDbSimple.h @@ -0,0 +1,57 @@ +#pragma once + +#include "Defines.h" +#include "iDataEngine_global.h" + +#include +#include +#include +#include + +class I_DATAENGINE_EXPORT ZxDbSimple +{ +public: + + // 获取对象,单例模式 + static ZxDbSimple* getInstance(); + + // 关闭 + static void closeDb(); + + // 设置路径,如果_s_ini非空,则从ini文件获取 + static void setURL(QString _s_url, + QString _s_ini = "", + bool bForceReopen = false); + + // 获得数据库连接 + virtual QSqlDatabase getSimpleDb(); + virtual QSqlDatabase* getSimpleDbPtr(); + + // 针对湛江模式,启用一口井一个db文件模式 + bool isDbExtActivated(); + void setDbUrlExt(QString url, + bool bForceReopen = false); + virtual QSqlDatabase getSimpleDbExt(); + virtual QSqlDatabase* getSimpleDbExtPtr(); + + // 封装数据库链接操作 + void connTransaction(QString connectionStr = ""); + void connCommit(QString connectionStr = ""); + void connRollback(QString connectionStr = ""); + +public: + + ZxDbSimple(); + ~ZxDbSimple(); + +protected: + + static ZxDbSimple* spZxDbSimple; + static QString sUrl; + static QString sIni; + QSqlDatabase m_db; + + // 针对湛江模式,启用一口井一个db文件模式 + QString sUrlExt; + QSqlDatabase m_dbExt; +}; diff --git a/Include/iData/iDataEngine/iDataEngine_global.h b/Include/iData/iDataEngine/iDataEngine_global.h new file mode 100644 index 0000000..03bdf76 --- /dev/null +++ b/Include/iData/iDataEngine/iDataEngine_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(I_DATAENGINE_LIBRARY) +# define I_DATAENGINE_EXPORT Q_DECL_EXPORT +#else +# define I_DATAENGINE_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iData/iDataEngine/iSqlEngine.h b/Include/iData/iDataEngine/iSqlEngine.h new file mode 100644 index 0000000..ed78c46 --- /dev/null +++ b/Include/iData/iDataEngine/iSqlEngine.h @@ -0,0 +1,89 @@ +#pragma once + +#include "Defines.h" +#include "iDataEngine_global.h" + +class QSqlDatabase; + +/// 该类实现基础的数据增删改功能 +/// 对于数据链接QSqlDatabase,本类不负责开启 +class I_DATAENGINE_EXPORT iSqlEngine +{ +public: + + /// @brief 构造函数,非静态类 + /// @param pSqlDb,数据载体,如果为空,则自动 + /// 从ZxDbSimple中获取 + /// @note 默认pSqlDb是打开的状态,而且不负责关闭 + iSqlEngine(QString sConnStr = "", QSqlDatabase* pSqlDb = NULL); + ~iSqlEngine(); + + /// @brief 执行失败时,返回错误信息 + QString getLastError(); + +public: + + /// @brief 单纯执行SQL,如删除 + bool execSqlOnly(QString sSql); + + /// @brief 查询数据 + /// @param sSql + /// @param vvecData,数据载体 + /// @param bTopOnly,是否仅仅返回一条记录 + /// @param pListFieldNames,Rec.FieldName + /// @note 返回true并不代表vvecData一定有数据 + bool queryData(QString sSql, VVecVariant& vvecData, \ + bool bTopOnly = false, QStringList* pListFieldNames = NULL); + + /// @brief 批量保存模式,需要统一删除原来的重复数据 + /// @param sTable针对表名 + /// @param vvecData结果 + /// @param mapKeyFields主键字段位置+名称 + bool saveData(QString sTable, VVecVariant& vvecData, \ + QMap mapKeyFields); + +// /// @brief 单条记录保存模式 +// bool saveDataToDb(QString& sTable, \ +// QStringList& listFieldKeys, \ +// QMap& mapFieldValues); + +// /// @brief 插入单条记录 +// bool insertSql(QString& sTable, \ +// QMap& mapFieldValues); + +// /// @brief 更新单条记录 +// bool updateSql(QString& sTable, \ +// QStringList& listFieldKeys, \ +// QMap& mapFieldValues); + +// /// @brief 删除 +// bool deleteSql(QString& sTable, QMap& mapFieldValues); + +// /// @brief 检查关键字段在某个表中是否存在 +// bool isRecordExists(QString& sTable, \ +// QStringList& listFieldKeys, \ +// QMap& mapFieldValues); + +private: + + /// @brief 批量删除模式 + /// @param sTable针对表名 + /// @param vvecData结果 + /// @param mapKeyFields主键字段位置+名称 + bool deleteIfExists(QString sTable, VVecVariant& vvecData, \ + QMap mapKeyFields); + + // 内部匹配对 + QString verifyValue(QString sField, QString sValue); + QString makeFieldPair(QString sField, QString sValue); + +private: + + QSqlDatabase* m_pSqlDb; + QString m_sConnStr; + QString m_sError; +}; + + + + diff --git a/Include/iData/iDataPool/ZxDataObject.h b/Include/iData/iDataPool/ZxDataObject.h new file mode 100644 index 0000000..b62ec27 --- /dev/null +++ b/Include/iData/iDataPool/ZxDataObject.h @@ -0,0 +1,203 @@ +#pragma once + +#include +#include "Defines.h" +#include "IxSerDes.h" +#include "IxDynObj.h" +#include "iDataPool_global.h" + +class iXmlTable; + +// 数据模型对象类的抽象基类 +class I_DATAPOOL_EXPORT ZxDataObject + : public QObject + , virtual public IxDynObj + , virtual public IxSerDes +{ + Q_OBJECT + +public: + + ZxDataObject(ZxDataObject* pParent); + ZxDataObject(const ZxDataObject& other); + virtual ~ZxDataObject(); + + // 接口,子类必须实现 + virtual ZxDataObject* clone() = 0; + virtual QString type() const = 0; + + // 操作符 + virtual ZxDataObject& operator = (const ZxDataObject& other); + virtual bool operator == (const ZxDataObject& other) const; + virtual bool operator != (const ZxDataObject& other) const; + +public: + + // 加载保存 + virtual bool load(); + virtual void ensureLoaded() const; + virtual bool save(); + + // 该函数是加载子类对象,仅仅加载code之类的关键信息 + // 比如在建立树时,创建该节点。 + virtual bool createChildren(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded = false) const; + + // 获取新建的默认ID + virtual QString getDefaultCode(ZxDataObject* pParent/* = NULL*/); + // 由于原先函数总是出这样那样的问题,故增加一种新的方式 + // 直接读取表格中Key字段进行判断 + virtual QString getDefaultCodeEx(); + virtual bool getCurObjTags(QStringList& list); + + //检查名字不能重复(名字字段) + virtual bool checkUniqueObjName(QString sFiledName, QString sName); + + // TODO 20231231 Old + virtual bool isParentType(const QString &type) const; + virtual bool isChildType(const QString &type) const; + virtual bool isAncestorType(const QString &type) const; + virtual bool isDescendantType(const QString &type) const; + virtual QStringList getParameterNames(void) const; + virtual VecInt getDataTypes(void) const; + +public: + + // 对象编码 + virtual void setCode(const QString& sCode); + virtual QString getCode(void) const; + + // 名称 + virtual void setName(const QString& sName); + virtual QString getName(void) const; + + // 是否load + virtual void setLoaded(bool b); + virtual bool isLoaded(void) const; + + // 修改状态 + virtual void setModified(bool bModified = true); + virtual bool isModified(void) const; + + // 可见 + virtual void setVisible(bool b); + virtual bool isVisible(void) const; + +public: + + //父对象 + virtual void setParent(ZxDataObject* pParent); + virtual ZxDataObject* getParent(void) const; + virtual ZxDataObject* getRoot(void) const; //顶级祖先 + + // 子对象相关操作 + virtual qint32 getChildrenCount(const QString& type = "") const; + virtual qint32 indexOfChild(ZxDataObject* pObject) const; + virtual ZxDataObject* getChild(QString sType, QString sCode); + virtual ZxDataObject* getChild(qint32 index) const; + virtual qint32 appendChildren(const ZxDataObjectList &lstGmObjects); + virtual bool appendChild(ZxDataObject* pObject); + virtual bool insertChild(ZxDataObject* pObject, int nPos); + virtual void removeChild(qint32 index, bool bDeleteLater = false); + virtual void removeChild(ZxDataObject* pObject, bool bDeleteLater = false); + virtual void clearChildren(const QString& type = "", + bool bDeleteLater = true); + virtual void removeChildren(const ZxDataObjectList &lstGmObjects, \ + bool bDeleteLater = true); + virtual ZxDataObject* findChild(QString type, const QString& code); + + // 查找相关子对象 + ZxDataObject* getPreviousChild(ZxDataObject* pObject) const; + ZxDataObject* getNextChild(ZxDataObject* pObject) const; + + // 子对象批量操作 + virtual ZxDataObjectList getChildren(QString sType = "", \ + QStringList listCodes = QStringList()) const; + + // 子对象可见 + virtual void setHasVisibleChildren(bool b); + virtual bool hasVisibleChildren(void) const; + virtual ZxDataObjectList getVisibleChildren() const; + + // 把父子层级关系全部放入数据,以方便应用 + static ZxDataObjectList parseObjsToVec(ZxDataObjectList& vecOlds); + +public: + + // 数据库相关 + virtual void checkXmlTable(); // 根据type选定XmlTable结构体 + virtual QString getTableName(); // 表名 + virtual QString getTableNameBy(QString sType); + QStringList getKeyFields(); //主键 + virtual QString getSqlR(); //Load时的SQL + virtual QString getSqlW(); + virtual QStringList getKeyValues(); //筛选时获得主键的值。 + + // 名称重命名,存入数据库 + virtual bool renameInDb(QString sNewName, QString sOldName); + // 删除该Code的数据库内容 + virtual bool deleteInDb(); + + // 对附属关联的数据大字段ID的统一微调 + virtual void adjustDataID(QString& sDataID); + + // 加载数据 + virtual bool loadData(VVecVariant& vvec, \ + QString &sLog, \ + bool bTopOneOnly = true); + virtual bool loadData(QString& sSql, \ + VVecVariant& vvec, \ + QString &sLog, \ + bool bTopOneOnly = true); + // 保存 + virtual bool saveData(VVecVariant& vvec, QString& sLog); + +protected: + + // 加载数据 + /// @brief 加载数据的实现函数 + /// @param bWellDbPreferred 是否优先从单井db文件里面获取,20220616,目前只被pvt中间过程数据调用 + bool _load(QString& sSql, VVecVariant& vvec, \ + QString& sLog, bool bTopOneOnly = true, \ + bool bWellDbPreferred = false); //加载数据 + +public: + + // 解析与组织 + virtual bool parseData(VecVariant vec); + virtual bool sumUpData(VecVariant& vec); + + // 暂时保留 + // 确定对象是否有效 + virtual bool isValid() const; + + // m_bUnableSP + virtual bool isUnableSP(); + virtual void setUnableSP(bool b); + + QStringList getTableFieldNames(bool bEn); + +protected: + + QString m_sCode; //对象标识\序号\编号\编码 + QString m_sName; //对象名称, 包括分组\分类\名称 + + bool m_bModified; //对象数据修改标记 + bool m_bLoaded; //数据及索引是否已经加载 + bool m_bHasVisibleChildren; //在m_bLoaded为FALSE时, 标记是否有子节点 + bool m_bVisible; //是否在数据树上显示 + + ZxDataObject* m_pParent; //对象的父对象指针 + ZxDataObjectList m_vecChildren; //对象的子对象列表 + + iXmlTable* m_pTableDefine; //xml中的配置 + + bool m_bUnableSP; //临时变量不参与序列化 + QString m_sCth; //临时变量不参与序列化 +}; diff --git a/Include/iData/iDataPool/ZxDataPool.h b/Include/iData/iDataPool/ZxDataPool.h new file mode 100644 index 0000000..07622ad --- /dev/null +++ b/Include/iData/iDataPool/ZxDataPool.h @@ -0,0 +1,33 @@ +#pragma once + +#include "Defines.h" +#include "iDataPool_global.h" + +class ZxDataObject; + +// 数据模型池(对象/组件/模块管理) +// 该类为单例,后续可以逐步添加 +class I_DATAPOOL_EXPORT ZxDataPool +{ +public: + + // 单例模式 + static ZxDataPool* getInstance(); + // 关闭 + static void release(); + + // 对象模型函数 + void appendObj(ZxDataObject* p); //添加进入池 + bool isObjExists(ZxDataObject* p); //是否存在 + +public: + + ZxDataPool(); + ~ZxDataPool(); + +protected: + + static ZxDataPool* _dataPoolInstance; + + VecDataObjects m_vecObjs; +}; diff --git a/Include/iData/iDataPool/iDataIoUtils.h b/Include/iData/iDataPool/iDataIoUtils.h new file mode 100644 index 0000000..c42f8c5 --- /dev/null +++ b/Include/iData/iDataPool/iDataIoUtils.h @@ -0,0 +1,25 @@ +#pragma once + +#include "Defines.h" +#include "iSqlEngine.h" +#include "iDataPool_global.h" + +class I_DATAPOOL_EXPORT iDataIoUtils : public iSqlEngine +{ +public: + + /// @note pSqlDb为空,则自动从ZxDbSimple中获取 + iDataIoUtils(QString sConnStr = "", QSqlDatabase* pSqlDb = NULL); + ~iDataIoUtils(); + +public: + + /// @brief 批量保存模式,需要统一删除原来的重复数据 + /// @param sTable针对表名 + /// @param vvecData结果 + virtual bool saveDataEx(QString sTable, VVecVariant& vvecData); +}; + + + + diff --git a/Include/iData/iDataPool/iDataPool_global.h b/Include/iData/iDataPool/iDataPool_global.h new file mode 100644 index 0000000..16e188d --- /dev/null +++ b/Include/iData/iDataPool/iDataPool_global.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#if defined(I_DATAPOOL_LIBRARY) +# define I_DATAPOOL_EXPORT Q_DECL_EXPORT +#else +# define I_DATAPOOL_EXPORT Q_DECL_IMPORT +#endif diff --git a/Include/iData/iFileEngine/iFileEngine.h b/Include/iData/iFileEngine/iFileEngine.h new file mode 100644 index 0000000..7092e17 --- /dev/null +++ b/Include/iData/iFileEngine/iFileEngine.h @@ -0,0 +1,104 @@ +#pragma once + +#include +#include "Defines.h" + +#include "iFileEngine_global.h" + + +// 文件类型 +enum FileEngineType +{ + FET_Text = 0, //文本 + FET_Dat, //Dat + FET_Excel, //Excel + FET_Ini, //Ini + FET_SQLite, //Sqlite + FET_Clipboard, //Clipboard + FET_Unknown //Unknown +}; + +// FileEngine +class I_FILE_ENGINE_EXPORT iFileEngine +{ +public: + iFileEngine(); + ~iFileEngine(); + +public: + + // 加载接口 + virtual bool load(VVecVariant& vvecData, QString sFile); + + // 设置头包含多少行数据 + void setDataRowCountPreviewed(int n); + + // 顶部文件说明信息 + QString getHeaders(); + + // 顶部单位和标题 + QStringList getTitles(); + QStringList getUnits(); + + // 错误信息 + QString getLastError(); + + // 是否采用编码转换 + void setCodecUsingMode(bool bUse); + +protected: + + // 初始化参数 + virtual void init(); + + // 解析文件头 + virtual bool tryParse(QString sFile); + + // 利用倒回两行,try查找标题单位 + virtual bool tryParseTitleUnit(QString s); + +protected: + + QString m_sError; //存错误信息 + QString m_sHeaders; //顶部文件说明信息 + QStringList m_listTitles; //顶部单位和标题 + QStringList m_listUnits; + + int m_nLineIndexValue; //数据起始行 + int m_nLineIndexTitle; + int m_nLineIndexUnit; + + int m_nDataRowCountPreviewed;//头包含多少行数据,默认为2,外界可传入 + int m_nDataLineTryMax; //在try时数据多少条即可认为是数据,默认为3 + + // 是否采用编码转换 + bool m_bUsingCodecMode; +}; + +// iFileEngineUtils +class I_FILE_ENGINE_EXPORT iFileEngineUtils +{ +public: + + // 统一加载接口 + // 如果不传入 oType 则根据文件后缀,自动识别 + static bool load(VVecVariant& vvecData, + QString& sHeaders, + QString sFile, + FileEngineType oType = FET_Unknown, + QString sExt = "",//如sheetName + QString* szError = NULL); + + // 统一加载接口 + // 如果不传入 oType 则根据文件后缀,自动识别 + static bool loadEx(VVecVariant& vvecData, + QString& sHeaders, + QStringList& listTitles, + QStringList& listUnits, + QString sFile, + FileEngineType oType = FET_Unknown, + QString sExt = "",//如sheetName + bool bUseCodec = true, //启用Codec转换 + QString* szError = NULL); + +}; diff --git a/Include/iData/iFileEngine/iFileEngineDat.h b/Include/iData/iFileEngine/iFileEngineDat.h new file mode 100644 index 0000000..f68528f --- /dev/null +++ b/Include/iData/iFileEngine/iFileEngineDat.h @@ -0,0 +1,32 @@ +#pragma once + +#include "Defines.h" +#include "iFileEngine.h" +#include "iFileEngine_global.h" + +// Dat等文本型格式文件加载解析引擎 +class I_FILE_ENGINE_EXPORT iFileEngineDat : public iFileEngine +{ +public: + + iFileEngineDat(); + ~iFileEngineDat(); + +public: + + virtual bool load(VVecVariant& vvecData, QString sFile); + + +protected: + + // 解析文件头 + virtual bool tryParse(QString sFile); + // 利用倒回两行,try查找标题单位 + // + virtual bool tryParseTitleUnit(QString s1); + virtual bool tryParseTitle(QString s1); + + // 判断改行是否全是数字 + bool isDigitLine(const QByteArray &ba); + bool isDigitLine(const QString& sLine); +}; diff --git a/Include/iData/iFileEngine/iFileEngineExcel.h b/Include/iData/iFileEngine/iFileEngineExcel.h new file mode 100644 index 0000000..3990f21 --- /dev/null +++ b/Include/iData/iFileEngine/iFileEngineExcel.h @@ -0,0 +1,25 @@ +#pragma once + +#include "Defines.h" +#include "iFileEngine.h" +#include "iFileEngine_global.h" + +// Excel格式文件加载解析引擎 +class I_FILE_ENGINE_EXPORT iFileEngineExcel : public iFileEngine +{ +public: + iFileEngineExcel(); + ~iFileEngineExcel(); + +public: + + void setSheet(QString sSheet); + + virtual bool load(VVecVariant& vvecData, QString sFile); + static bool getAllSheets(QString sFile, QStringList& list); + +protected: + + QString m_sSheet; + +}; diff --git a/Include/iData/iFileEngine/iFileEngine_global.h b/Include/iData/iFileEngine/iFileEngine_global.h new file mode 100644 index 0000000..f9c4022 --- /dev/null +++ b/Include/iData/iFileEngine/iFileEngine_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(I_FILE_ENGINE_LIBRARY) +# define I_FILE_ENGINE_EXPORT Q_DECL_EXPORT +#else +# define I_FILE_ENGINE_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iData/iSysUtils/iParameterUtils.h b/Include/iData/iSysUtils/iParameterUtils.h new file mode 100644 index 0000000..64990e6 --- /dev/null +++ b/Include/iData/iSysUtils/iParameterUtils.h @@ -0,0 +1,19 @@ +#pragma once + +#include "iSysUtils_global.h" + +class iParameter; +class iUnitGroup; + +/// @brief 参数描述的公用调用类 +/// @note 该类只是一个中介,内部调用的zxSysUtil内部的缓存变量 +class I_SYSUTILS_EXPORT iParameterUtils +{ +public: + + // sPara 参数名称,可以是 英文也可以是中文,软件会自动判断 + static iParameter* getPara(QString sPara); + + static bool getParaValue(QString sPara, float& f); + +}; diff --git a/Include/iData/iSysUtils/iSysUtils_global.h b/Include/iData/iSysUtils/iSysUtils_global.h new file mode 100644 index 0000000..70c4c96 --- /dev/null +++ b/Include/iData/iSysUtils/iSysUtils_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(I_SYSUTILS_LIBRARY) +# define I_SYSUTILS_EXPORT Q_DECL_EXPORT +#else +# define I_SYSUTILS_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iData/iSysUtils/iUnitHelper.h b/Include/iData/iSysUtils/iUnitHelper.h new file mode 100644 index 0000000..3031a5a --- /dev/null +++ b/Include/iData/iSysUtils/iUnitHelper.h @@ -0,0 +1,17 @@ +#pragma once + +#include "iSysUtils_global.h" + +class iUnitItem; +class iUnitGroup; + +class I_SYSUTILS_EXPORT iUnitHelper +{ +public: + + // 获取某个单位所在单位组,如果pUnitDigit非空,则返回小数位数 + static iUnitGroup* getUnitGroupByUnit(QString sUnit, int* pUnitDigit = NULL); + + // 获取某个单位对应的对象体 + static iUnitItem* getUnitItemByUnit(QString sUnit); +}; diff --git a/Include/iData/iSysUtils/zxSysUtils.h b/Include/iData/iSysUtils/zxSysUtils.h new file mode 100644 index 0000000..4247741 --- /dev/null +++ b/Include/iData/iSysUtils/zxSysUtils.h @@ -0,0 +1,133 @@ +#pragma once + +#include "Defines.h" + +#include "iXmlTable.h" +#include "iXmlAlias.h" +#include "iModelInfoBase.h" +#include "iModelDescGroup.h" +#include "iParameterGroup.h" +#include "iParameterGroupSp.h" +#include "iPvtParaItemGroup.h" +#include "iIprAlgItemGroup.h" +#include "iUnitGroup.h" + +#include "IxDynObj.h" + +#include "iXmlBtn.h" +#include "iXmlCmds.h" +#include "iSpeciParam.h" + +#include "iSysUtils_global.h" +#include "iXmlCurveDictConfig.h" + +class I_SYSUTILS_EXPORT zxSysUtils +{ +public: + + // 获取对象,单例模式 + static zxSysUtils* getInstance(); + + // 关闭消耗 + static void release(); + + // 状态栏相关 + static void setStatusLabel(QLabel* pStatusLabel); + void setStatusText(QString sText, int nLevel = 0); + + // 当前井、项目、作业 + static void setCurProject(IxDynObj* p); + static IxDynObj* getCurProject(); + static void setCurWell(IxDynObj* p); + static IxDynObj* getCurWell(); + static void setCurJobRun(QObject* p); + static QObject* getCurJobRun(); + + // 对Setting进行统一管理,保存窗口状态用 + QSettings* getWndSettings(QString& sWndKey, bool bResetIfExists = false); + + // 加载TableStruct + bool loadTableStructs(QString sFile); + + // 加载Models + bool loadModelInfos(QString sFile /*= ""*/); + + // 加载Parameters + bool loadParaDefines(QString sFile /*= ""*/, QString sFileEx = ""); + + // 加载PvtMethod + bool loadPvtParaItems(QString sFile /*= ""*/); + bool loadIprAlgItems(QString sFile /*= ""*/); + + // 特殊参数 + bool loadSpeciParamInfos(QString sFile /*= ""*/); + + // 加载BtnCmds + bool loadBtnCmdInfos(QString sFile /*= ""*/); + bool parseBtnCmd2ToolBar(QToolBar* p, QString sType, int nOption = -1, int wh = -1); + bool parseBtnCmdID2ToolBar(QToolBar* p, QStringList listIDs, int wh); + QString getCmdNameByID(QString sCmdID); + + // 加载Unit + bool loadUnitInfos(QString sFile /*= ""*/); + + // 曲线字典 + bool loadCurveDictionaryInfos(QString sFile /*= ""*/); + + // 字段别名 + bool loadAliasTablesInfos(QString sFile /*= ""*/); + + + /// @brief 对于单位控件的修改 + /// @param sPara可以英文、可以中文,查找英文优先 + /// @param pTbxValue默认值填写上,不能为空 + /// @param pCbxUnit单位下拉,可以为空 + void loadAndFillWithDefault(QString sPara, + QLineEdit* pTbxValue, + QComboBox* pCbxUnit, + float& fDefaultValue, + QString& sCurUnit); + + // 获取参数单位,为了一点点性能,可以英文、可以中文,查找英文优先 + QString getUnitOfPara(QString sPara); + +private: + + zxSysUtils(); + ~zxSysUtils(); + +private: + + static zxSysUtils* m_pSysInstance; + static QLabel* m_pStatusLabel; + static IxDynObj* m_pCurWell; + static IxDynObj* m_pCurProject; + static QObject* m_pCurJobRun; + +public: + + // 各种参数缓存,一旦成功加载,即可作为全局变量进行使用 + + vecXmlTablesPtr m_vecXmlTables; + vecXmlAliasTablesPtr m_vecXmlAliasTables; + vecXmlCurveItemsPtr m_vecCurveDict; + + vecModelInfoBasesPtr m_vecModelWbss; + vecModelInfoBasesPtr m_vecModelWels; + vecModelInfoBasesPtr m_vecModelRess; + vecModelInfoBasesPtr m_vecModelBdys; + vecModelDescGroupsPtr m_vecModelGroups; + + vecXmlCmdGroupsPtr m_vecCmdInfos; + vecXmlBtnsPtr m_vecBtnInfos; + + vecParameterGroupsPtr m_vecParaGroups; + vecParameterGroupSpsPtr m_vecParaGroupSps; + vecPvtParaItemGroupsPtr m_vecPvtParaItemGroups; + + vecIprAlgItemGroupsPtr m_vecIprAlgItemGroups; + vecUnitGroupPtr m_vecUnitGroups; + vecParamPtr m_vecSpeciParam; + + QMap m_mapParaUnits; +}; diff --git a/Include/iData/iXmlManager/Models/iIprAlgItem.h b/Include/iData/iXmlManager/Models/iIprAlgItem.h new file mode 100644 index 0000000..606924f --- /dev/null +++ b/Include/iData/iXmlManager/Models/iIprAlgItem.h @@ -0,0 +1,47 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief +class I_XMLMANAGER_EXPORT iIprAlgItem : public iModelInfoBase +{ +public: + + iIprAlgItem(); + ~iIprAlgItem(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + +protected: + virtual void initXmlTags(); + +public: + + QString m_sExpr; //显示在界面上的表达式 --> + QString m_sFluidType; //算法油气水类型,默认:G,可以不填写,填写OGW代表对油气水 --> + bool m_bResultBoth; //结果呈现,默认:左右两图,如果是一图,填写0 --> + bool m_bSubRadioVisible; //是否显示 Radio,默认显示,如果不显示,填写1 --> + + QStringList m_listLegends; //区域经验,子图例 + double m_dMaxX; //x范围,因为y是根据x计算的,所以不设置y + double m_dMinX; + bool m_bLinearX; //线性坐标 + bool m_bLinearY; //线性坐标 + + QString m_sNameX; + QString m_sUnitX; + QString m_sNameY; + QString m_sUnitY; + + float m_fK;//对于一点法而言 + float m_fB; + + QStringList m_listSrcTableCols; +}; + +typedef QVector vecIprAlgItemsPtr; diff --git a/Include/iData/iXmlManager/Models/iIprAlgItemGroup.h b/Include/iData/iXmlManager/Models/iIprAlgItemGroup.h new file mode 100644 index 0000000..a0bf8fa --- /dev/null +++ b/Include/iData/iXmlManager/Models/iIprAlgItemGroup.h @@ -0,0 +1,31 @@ +#pragma once + +#include "iIprAlgItem.h" + +/// @brief PVT所用组合 +class I_XMLMANAGER_EXPORT iIprAlgItemGroup : public iModelInfoBase +{ +public: + + iIprAlgItemGroup(); + ~iIprAlgItemGroup(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + +protected: + virtual void initXmlTags(); + +public: + vecIprAlgItemsPtr m_vecIprAlgItems; + + QStringList m_listSrcTableCols; +}; + +typedef QVector vecIprAlgItemGroupsPtr; diff --git a/Include/iData/iXmlManager/Models/iModelDesc.h b/Include/iData/iXmlManager/Models/iModelDesc.h new file mode 100644 index 0000000..6d51846 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelDesc.h @@ -0,0 +1,52 @@ +#pragma once + +#include "iModelInfoBase.h" + +class iModelInfoWbs; +class iModelInfoWel; +class iModelInfoRes; +class iModelInfoBdy; + +/// @brief 模型描述,每一行的内容 +class I_XMLMANAGER_EXPORT iModelDesc : public iModelInfoBase +{ + Q_OBJECT + +public: + + iModelDesc(QObject* parent = 0); + ~iModelDesc(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 追加公共 + void appendCommons(QString sInputs, QString sOutputs); + QStringList changeStrList(QStringList listOld, QString sNew); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + + virtual void initXmlTags(); + +public: + + QStringList m_listInputs; //输入 + QStringList m_listOutputs; //输出 + + QString m_sSerie; + QString m_sWel; //井型 + QString m_sRes; //油藏模型 + + // 对应指针 +// iModelInfoWbs* m_pWbs; //暂时不用 + iModelInfoWel* m_pWel; + iModelInfoRes* m_pRes; +// iModelInfoBdy* m_pBdy; //暂时不用 +}; + +typedef QVector vecModelDescsPtr; diff --git a/Include/iData/iXmlManager/Models/iModelDescGroup.h b/Include/iData/iXmlManager/Models/iModelDescGroup.h new file mode 100644 index 0000000..9f2e5b4 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelDescGroup.h @@ -0,0 +1,35 @@ +#pragma once + +#include "iModelDesc.h" + +/// @brief 模型描述组合 +class I_XMLMANAGER_EXPORT iModelDescGroup : public iModelInfoBase +{ + Q_OBJECT + +public: + + iModelDescGroup(QObject* parent = 0); + ~iModelDescGroup(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + + virtual void initXmlTags(); + +public: + + vecModelDescsPtr m_vecModelDescs; + QString m_sSerie; +}; + +typedef QVector vecModelDescGroupsPtr; diff --git a/Include/iData/iXmlManager/Models/iModelInfoBase.h b/Include/iData/iXmlManager/Models/iModelInfoBase.h new file mode 100644 index 0000000..da9499d --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelInfoBase.h @@ -0,0 +1,65 @@ +#pragma once + +#include "Defines.h" +#include "iXmlBaseItem.h" + +/// @brief 模型信息基础 +class I_XMLMANAGER_EXPORT iModelInfoBase : public iXmlBaseItem +{ + Q_OBJECT + +public: + + iModelInfoBase(QObject* parent = 0); + ~iModelInfoBase(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 备份恢复 + virtual bool saveBk(); + virtual bool restoreBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Super其实就是Parent,只是QObject本身有了Parent接口 + // 没有直接用QObject的parent接口原因是,其child接口不太友好,不方便应用 + //virtual iModelInfoBase* getSuper(); + //virtual void setSuper(iModelInfoBase* p); + +protected: + + virtual void initXmlTags(); + +public: + + QString m_sAlias; //中文名称 + QString m_sIcon; //图标 + QString m_sFig; //图片 + QString m_sTips; //备注 + + // 20171120添加 + // m_listTags << "NotFitted" << "UseMode" << "ExtInfos"; + bool m_bNotFitted; //不参与拟合,界面上灰色显示 + ParaUseMode m_oUseMode;// 应用场合:ParaUseMode + QStringList m_listExtInfos;//下拉内容 + // 如: "封闭;气顶" "封闭;底水" + // 请注意 半角;分割 + + // 目前仅仅针对聚合物有效, + // 即聚合物中增加了 常规模型 的油藏类型 + // 即 常规模型 对于 聚合物来讲,属于Brother + bool m_bBrother; + + // 与其它参数的关系验证,如 Alias="二区半径" ValidateStr="GT:R1" + QString m_sValidateStr; + + // 20240814增加层级支持,临时,不涉及序列化 + //QVector m_vecChildren; + //iModelInfoBase* m_pParent; +}; + +typedef QVector vecModelInfoBasesPtr; diff --git a/Include/iData/iXmlManager/Models/iModelInfoBdy.h b/Include/iData/iXmlManager/Models/iModelInfoBdy.h new file mode 100644 index 0000000..c91826e --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelInfoBdy.h @@ -0,0 +1,29 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief BDY边界 +class I_XMLMANAGER_EXPORT iModelInfoBdy : public iModelInfoBase +{ + Q_OBJECT + +public: + + iModelInfoBdy(); + ~iModelInfoBdy(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + QStringList m_listParas; //边界参数 + +}; diff --git a/Include/iData/iXmlManager/Models/iModelInfoRes.h b/Include/iData/iXmlManager/Models/iModelInfoRes.h new file mode 100644 index 0000000..a0ed5a9 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelInfoRes.h @@ -0,0 +1,33 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief RES油藏 +class I_XMLMANAGER_EXPORT iModelInfoRes : public iModelInfoBase +{ + Q_OBJECT + +public: + + iModelInfoRes(QObject* parent = 0); + ~iModelInfoRes(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + + //QString m_sWaste; //测试 + +}; diff --git a/Include/iData/iXmlManager/Models/iModelInfoWbs.h b/Include/iData/iXmlManager/Models/iModelInfoWbs.h new file mode 100644 index 0000000..f114f5f --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelInfoWbs.h @@ -0,0 +1,28 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief WBS井储 +class I_XMLMANAGER_EXPORT iModelInfoWbs : public iModelInfoBase +{ +public: + + iModelInfoWbs(); + ~iModelInfoWbs(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + // QString m_sWaste; //测试 + + QStringList m_listParas; //井储参数 +}; diff --git a/Include/iData/iXmlManager/Models/iModelInfoWbs.h.autosave b/Include/iData/iXmlManager/Models/iModelInfoWbs.h.autosave new file mode 100644 index 0000000..f114f5f --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelInfoWbs.h.autosave @@ -0,0 +1,28 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief WBS井储 +class I_XMLMANAGER_EXPORT iModelInfoWbs : public iModelInfoBase +{ +public: + + iModelInfoWbs(); + ~iModelInfoWbs(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + // QString m_sWaste; //测试 + + QStringList m_listParas; //井储参数 +}; diff --git a/Include/iData/iXmlManager/Models/iModelInfoWel.h b/Include/iData/iXmlManager/Models/iModelInfoWel.h new file mode 100644 index 0000000..80f3bf6 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iModelInfoWel.h @@ -0,0 +1,32 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief WEL井型 +class I_XMLMANAGER_EXPORT iModelInfoWel : public iModelInfoBase +{ +public: + + iModelInfoWel(QObject* parent = 0); + ~iModelInfoWel(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + //QString m_sWaste; //测试 + + // WellMap中涉及的每种井型的基础参数 + QStringList m_listBaseParas; +}; diff --git a/Include/iData/iXmlManager/Models/iParameter.h b/Include/iData/iXmlManager/Models/iParameter.h new file mode 100644 index 0000000..cd564b0 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameter.h @@ -0,0 +1,115 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief 参数所属类型区分,默认为2(Float) +enum ParaInfoType +{ + PIT_Str = 0, //0:字符串(文本) Text属性 + PIT_Int, //1:整形 + PIT_Float, //2:Float数值 + PIT_Img, //3:图像 Text属性 存放路径 + PIT_Ba, //4:二进制 TODO + PIT_DateTime, //5:时间类型 "Text"存放时间 + PIT_Cbx, //6:下拉Cmb 具有"ItemOptions"属性 + PIT_Seg, //7:Seg流动段模式 具有"SubItems"属性 + PIT_SegEx, //8:Seg流动段模式,扩展模式 具有"SubItems"属性, + // 并且以More按钮形式弹出可视化窗口 + PIT_CbxClasp, //9:双下拉(扣型+公母),派生自 PIT_Cbx, + // 具有"ItemOptions"+"ItemOptionExs"属性 + + PIT_UNKNOWN +}; + +/// @brief 增加新的边界类型 +enum BdyInfoType +{ + BDY_Normal = 0, //0:常规边界参数,包括数值、以及类型(封闭、定压、无限大) + BDY_PureType, //1:单纯的类型,底水、等,无数字 + BDY_Not, //2:并非边界 + BDY_UNKNOWN +}; + +/// @brief 参数描述 +class I_XMLMANAGER_EXPORT iParameter : public iModelInfoBase +{ +public: + + iParameter(); + ~iParameter(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + virtual void writeInfo(QDomElement& e, QDomDocument &doc); + + // 判断是否sPara + // sPara 参数名称,可以是 英文也可以是中文,软件会自动判断 + virtual bool isParaOf(QString sPara); + + // 备份恢复 + virtual bool saveBk(); + virtual bool restoreBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 默认值显示 + virtual QString getDefaultShow(); + +protected: + + virtual void initXmlTags(); + +public: + + // xml解析的数据项 + QString m_sName; //英文名称(简称) + QString m_sDesc; //英文描述 + QString m_sUnit; //单位 + float m_fDefault; //默认值 + float m_fMax; //最大值 + float m_fMin; //最小值 + int m_nDigit; //小数位数,如果为0,则为整数 + + // 参数所属类型区分,默认为(Float) + ParaInfoType m_oParaType; + + // 增加新的边界类型,默认为(BDY_Not) + BdyInfoType m_oBdyType; + + // 非xml解析 + QString m_sAliasP; //父一级类别(别称),从外界传入 + float m_fValue; //当前值,在对话框中调用时应用 + + // 只读20180409 + bool m_bReadonly; +}; + +typedef QVector vecParametersPtr; + + +/// @brief 参数描述,特殊的扩展,此处仅仅是为了在构造时初始化成员变量 +class I_XMLMANAGER_EXPORT iParameterSp : public iParameter +{ +public: + + iParameterSp(); + ~iParameterSp(); + + virtual void parseInfo(const QDomElement& e); + + void adjustPara(iParameter* p); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private: + + QString m_sSubItems; + QString m_sSubItemsBk;//备份 +}; diff --git a/Include/iData/iXmlManager/Models/iParameterBa.h b/Include/iData/iXmlManager/Models/iParameterBa.h new file mode 100644 index 0000000..57cbd96 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterBa.h @@ -0,0 +1,33 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,ByteArray +class I_XMLMANAGER_EXPORT iParameterBa : public iParameter +{ +public: + + iParameterBa(); + ~iParameterBa(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 备份恢复 + virtual bool saveBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + +// QString m_sText; +}; diff --git a/Include/iData/iXmlManager/Models/iParameterCbx.h b/Include/iData/iXmlManager/Models/iParameterCbx.h new file mode 100644 index 0000000..e531509 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterCbx.h @@ -0,0 +1,43 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,下拉列表类 +/// @note "ItemOptions"填写具体选项,m_fDefault代表当前值 +class I_XMLMANAGER_EXPORT iParameterCbx : public iParameter +{ +public: + + iParameterCbx(); + ~iParameterCbx(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 备份恢复 + virtual bool saveBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 当前选中 + int getCurIndex(); + QString getCurText(); + + // 默认值显示 + virtual QString getDefaultShow(); + +protected: + + virtual void initXmlTags(); + +public: + + // xml解析的数据项,下拉选项 + QStringList m_listOptions; +}; diff --git a/Include/iData/iXmlManager/Models/iParameterCbxClasp.h b/Include/iData/iXmlManager/Models/iParameterCbxClasp.h new file mode 100644 index 0000000..4f1af2a --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterCbxClasp.h @@ -0,0 +1,48 @@ +#pragma once + +#include "iParameterCbx.h" + +/// @brief 双下拉(扣型+公母),派生自 PIT_Cbx, +/// @note "ItemOptions"填写具体选项,m_fDefault代表当前值 +/// 具有"ItemOptions"+"ItemOptionExs"属性 +class I_XMLMANAGER_EXPORT iParameterCbxClasp : public iParameterCbx +{ +public: + + iParameterCbxClasp(); + ~iParameterCbxClasp(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 备份恢复 + virtual bool saveBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 当前选中 + int getCurIndex(); + QString getCurText(); + + // 默认值显示 + virtual QString getDefaultShow(); + + // 组织与解析Clasp + static bool sumClasp(QString& s, QString sType, QString sBP); + static bool parseClasp(QString s, QString& sType, QString& sBP); + +protected: + + virtual void initXmlTags(); + +public: + + // xml解析的数据项,下拉选项,双扣 + QStringList m_listOptionExs; +}; diff --git a/Include/iData/iXmlManager/Models/iParameterDateTime.h b/Include/iData/iXmlManager/Models/iParameterDateTime.h new file mode 100644 index 0000000..f00fc98 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterDateTime.h @@ -0,0 +1,37 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,DateTime +class I_XMLMANAGER_EXPORT iParameterDateTime : public iParameter +{ +public: + + iParameterDateTime(); + ~iParameterDateTime(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 备份恢复 + virtual bool saveBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 默认值显示 + virtual QString getDefaultShow(); + +protected: + virtual void initXmlTags(); + +public: + + QDateTime m_dt; + QString m_sFormat; +}; diff --git a/Include/iData/iXmlManager/Models/iParameterFloat.h b/Include/iData/iXmlManager/Models/iParameterFloat.h new file mode 100644 index 0000000..f6a744e --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterFloat.h @@ -0,0 +1,16 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,Float类型 +class I_XMLMANAGER_EXPORT iParameterFloat : public iParameter +{ +public: + + iParameterFloat(); + ~iParameterFloat(); + +protected: + + virtual void initXmlTags(); +}; diff --git a/Include/iData/iXmlManager/Models/iParameterGroup.h b/Include/iData/iXmlManager/Models/iParameterGroup.h new file mode 100644 index 0000000..e33b8e9 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterGroup.h @@ -0,0 +1,36 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述组合 +class I_XMLMANAGER_EXPORT iParameterGroup : public iModelInfoBase +{ +public: + + iParameterGroup(); + ~iParameterGroup(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + + virtual void initXmlTags(); + + virtual ParaInfoType parseParaType(QDomNode& node); + +public: + vecParametersPtr m_vecParameters; + +}; +typedef QVector vecParameterGroupsPtr; diff --git a/Include/iData/iXmlManager/Models/iParameterGroupSp.h b/Include/iData/iXmlManager/Models/iParameterGroupSp.h new file mode 100644 index 0000000..eea18c2 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterGroupSp.h @@ -0,0 +1,44 @@ +#pragma once + +#include "iParameter.h" +#include "iParameterGroup.h" + +/// @brief 参数描述组合,对于参数跟着模型的特殊处理 +class I_XMLMANAGER_EXPORT iParameterGroupSp : public iParameterGroup +{ +public: + + iParameterGroupSp(); + ~iParameterGroupSp(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + bool isGroupOf(QString sSeries, QString sWbs, QString sWel, QString sRes); + bool isMemberOk(QString sMem, QString sValue); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + + + // xml解析的数据项 + QString m_sSerie; //序列 + QString m_sWbs; //井储,支持多个,以;分割 + QString m_sWel; //井型,支持多个,以;分割 + QString m_sRes; //油藏类型,支持多个,以;分割 + QString m_sBdy; //边界类型,支持多个,以;分割 + +// vecParametersPtr m_vecParameters; + +}; +typedef QVector vecParameterGroupSpsPtr; diff --git a/Include/iData/iXmlManager/Models/iParameterImg.h b/Include/iData/iXmlManager/Models/iParameterImg.h new file mode 100644 index 0000000..f858972 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterImg.h @@ -0,0 +1,33 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,图片,文件 +class I_XMLMANAGER_EXPORT iParameterImg : public iParameter +{ +public: + + iParameterImg(); + ~iParameterImg(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 备份恢复 + virtual bool saveBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + + QString m_sText; +}; diff --git a/Include/iData/iXmlManager/Models/iParameterInt.h b/Include/iData/iXmlManager/Models/iParameterInt.h new file mode 100644 index 0000000..73fcaf4 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterInt.h @@ -0,0 +1,16 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,Int类型 +class I_XMLMANAGER_EXPORT iParameterInt : public iParameter +{ +public: + + iParameterInt(); + ~iParameterInt(); + +protected: + + virtual void initXmlTags(); +}; diff --git a/Include/iData/iXmlManager/Models/iParameterSeg.h b/Include/iData/iXmlManager/Models/iParameterSeg.h new file mode 100644 index 0000000..188e650 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterSeg.h @@ -0,0 +1,42 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,整数型的参数,如流动段数 +class I_XMLMANAGER_EXPORT iParameterSeg : public iParameter +{ +public: + + iParameterSeg(); + ~iParameterSeg(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 绑定 + void bindSubItems(vecParametersPtr* pVec); + + // 备份恢复 + virtual bool saveBk(); + virtual bool restoreBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + virtual void initXmlTags(); + +public: + + // xml解析的数据项,填写项的英文Name + QStringList m_listSubItemNames; //控制的项,如产液段数 控制 三项:产液段位置;产液段长度;产液段产量 + QStringList m_listSubItemAliass;//别称 + //QMap m_mapSubParas; //控制的项对应的基础参数,个数与m_listSubTags对应 + + QStringList m_listSubItemNamesBk; //m_listSubItemNames的备份 +}; diff --git a/Include/iData/iXmlManager/Models/iParameterSegEx.h b/Include/iData/iXmlManager/Models/iParameterSegEx.h new file mode 100644 index 0000000..7f5201f --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterSegEx.h @@ -0,0 +1,39 @@ +#pragma once + +#include "iParameterSeg.h" + +/// @brief 参数描述,整数型的参数,如流动段数,扩展,按钮 +class I_XMLMANAGER_EXPORT iParameterSegEx : public iParameterSeg +{ +public: + + iParameterSegEx(); + ~iParameterSegEx(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 备份恢复 + virtual bool saveBk(); + virtual bool restoreBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: +// virtual void initXmlTags(); + +public: + +// // xml解析的数据项,填写项的英文Name +// QStringList m_listSubItemNames; //控制的项,如产液段数 控制 三项:产液段位置;产液段长度;产液段产量 +// QStringList m_listSubItemAliass;//别称 +// //QMap m_mapSubParas; //控制的项对应的基础参数,个数与m_listSubTags对应 + +// QStringList m_listSubItemNamesBk; //m_listSubItemNames的备份 +}; diff --git a/Include/iData/iXmlManager/Models/iParameterStr.h b/Include/iData/iXmlManager/Models/iParameterStr.h new file mode 100644 index 0000000..89c7bfe --- /dev/null +++ b/Include/iData/iXmlManager/Models/iParameterStr.h @@ -0,0 +1,36 @@ +#pragma once + +#include "iParameter.h" + +/// @brief 参数描述,字符串 +class I_XMLMANAGER_EXPORT iParameterStr : public iParameter +{ +public: + + iParameterStr(); + ~iParameterStr(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + + // 备份恢复 + virtual bool saveBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 默认值显示 + virtual QString getDefaultShow(); + +protected: + virtual void initXmlTags(); + +public: + + QString m_sText; +}; diff --git a/Include/iData/iXmlManager/Models/iPvtParaItem.h b/Include/iData/iXmlManager/Models/iPvtParaItem.h new file mode 100644 index 0000000..c614118 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iPvtParaItem.h @@ -0,0 +1,32 @@ +#pragma once + +#include "iModelInfoBase.h" + +/// @brief PVT所用 +class I_XMLMANAGER_EXPORT iPvtParaItem : public iModelInfoBase +{ +public: + + iPvtParaItem(); + ~iPvtParaItem(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + +protected: + virtual void initXmlTags(); + +public: + + // xml解析的数据项 + QStringList m_listMethods; //方法列表 + QStringList m_listMembers; //基本参数列表 + QStringList m_listBrothers; //关联类列表 + +}; + +typedef QVector vecPvtParaItemsPtr; diff --git a/Include/iData/iXmlManager/Models/iPvtParaItemGroup.h b/Include/iData/iXmlManager/Models/iPvtParaItemGroup.h new file mode 100644 index 0000000..261e47b --- /dev/null +++ b/Include/iData/iXmlManager/Models/iPvtParaItemGroup.h @@ -0,0 +1,32 @@ +#pragma once + +#include "iPvtParaItem.h" + +/// @brief PVT所用组合 +class I_XMLMANAGER_EXPORT iPvtParaItemGroup : public iModelInfoBase +{ +public: + + iPvtParaItemGroup(); + ~iPvtParaItemGroup(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 写入xml + void writeInfo(QDomElement& e,QDomDocument &doc); + +protected: + virtual void initXmlTags(); + +public: + vecPvtParaItemsPtr m_vecPvtParaItems; + + // xml解析的数据项 + QStringList m_listInputs; //输入参数列表 +}; + +typedef QVector vecPvtParaItemGroupsPtr; diff --git a/Include/iData/iXmlManager/Models/iSpeciParam.h b/Include/iData/iXmlManager/Models/iSpeciParam.h new file mode 100644 index 0000000..2c6db85 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iSpeciParam.h @@ -0,0 +1,126 @@ +#pragma once + +#include "iXmlManager_global.h" +#include "iXmlUtilBase.h" +#include +#include +#include +/// @brief 特征线特征点所用 + +//基本参数元 +class I_XMLMANAGER_EXPORT iItemParam +{ +public: + iItemParam(); + ~iItemParam(); + + // 解析xml节点到List + void parseInfo(const QDomElement& e); +public: + QString sName; + QString sAlias; + QStringList listFunName; + QStringList listFunRemark; + QStringList listPt; + QString sIcon; + QString sUnit; + +}; +typedef QVector vecItemParamPtr; + +//公共参数 +class I_XMLMANAGER_EXPORT iCommonParam +{ +public: + iCommonParam(); + ~iCommonParam(); + + // 解析xml节点到List + void parseInfo(const QDomElement& e); +public: + vecItemParamPtr vecItemPtr; +}; +typedef QVector vecCommonParamPtr; + + +//井储参数 +class I_XMLMANAGER_EXPORT iWbsParam +{ +public: + iWbsParam(); + ~iWbsParam(); + // 解析xml节点到List + void parseInfo(const QDomElement& e); +public: + QString sName; + QStringList listWbs; + vecItemParamPtr vecItemPtr; +}; +typedef QVector vecWbsParamPtr; + +//井型参数 +class I_XMLMANAGER_EXPORT iWelParam +{ +public: + iWelParam(); + ~iWelParam(); + // 解析xml节点到List + void parseInfo(const QDomElement& e); +public: + QString sName; + QStringList listWel; + vecItemParamPtr vecItemPtr; +}; +typedef QVector vecWelParamPtr; + +//油藏参数 +class I_XMLMANAGER_EXPORT iResParam +{ +public: + iResParam(); + ~iResParam(); + // 解析xml节点到List + void parseInfo(const QDomElement& e); +public: + QString sName; + QStringList listRes; + vecItemParamPtr vecItemPtr; +}; +typedef QVector vecResParamPtr; + +//边界参数 +class I_XMLMANAGER_EXPORT iBdyParam +{ +public: + iBdyParam(); + ~iBdyParam(); + // 解析xml节点到List + void parseInfo(const QDomElement& e); +public: + QString sName; + QStringList listBdy; + vecItemParamPtr vecItemPtr; +}; +typedef QVector vecBdyParamPtr; + + +// +class I_XMLMANAGER_EXPORT iSpeciParam +{ +public: + iSpeciParam(); + ~iSpeciParam(); + // 解析xml节点到List + void parseInfo(const QDomElement& e); +public: + + QString sName; + QString sAlias; + QString sTips; + iCommonParam *pCommomParam;//公共 + vecWbsParamPtr vecWbs; //井储 + vecWelParamPtr vecWel; //井型 + vecResParamPtr vecRes; //油藏 + vecBdyParamPtr vecBdy; //边界 +}; +typedef QVector vecParamPtr; diff --git a/Include/iData/iXmlManager/Models/iXmlAlias.h b/Include/iData/iXmlManager/Models/iXmlAlias.h new file mode 100644 index 0000000..5fdd097 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iXmlAlias.h @@ -0,0 +1,50 @@ +#pragma once + +#include "iXmlBaseItem.h" + +/// @brief 别名信息 +class I_XMLMANAGER_EXPORT iXmlAlias : public iXmlBaseItem +{ +public: + + iXmlAlias(QObject* parent = 0); + ~iXmlAlias(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + +protected: + virtual void initXmlTags(); + +public: + QStringList m_listAlias;//所有的别名 +}; + +typedef QVector veciXmlAliasPtr; + +class I_XMLMANAGER_EXPORT iXmlAliasTable : public iXmlBaseItem +{ +public: + iXmlAliasTable(QObject* parent = 0); + ~iXmlAliasTable(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + void clear(); + +protected: + virtual void initXmlTags(); + +public: + QString m_sAlias; //中文名称 + + veciXmlAliasPtr m_vecXmlAlias; +}; + +typedef QVector vecXmlAliasTablesPtr; diff --git a/Include/iData/iXmlManager/Models/iXmlBaseItem.h b/Include/iData/iXmlManager/Models/iXmlBaseItem.h new file mode 100644 index 0000000..e206642 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iXmlBaseItem.h @@ -0,0 +1,59 @@ +#pragma once + +#include +#include + +#include "IxSerDes.h" +#include "ZxXpf.h" +#include "ZxSerializer.h" + +#include "iXmlManager_global.h" + +/// @brief XML基础行信息 +class I_XMLMANAGER_EXPORT iXmlBaseItem : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + iXmlBaseItem(QObject* parent = 0); + ~iXmlBaseItem(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 备份恢复 + virtual bool saveBk(); + virtual bool restoreBk(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + + virtual void initXmlTags(); + + //主要检查是否数据 + void checkStrToDigit(QString s, double& f); + void checkStrToDigit(QString s, int& n); + +public: + + QString m_sID; //ID + QString m_sName; //字段 + +protected: + // XML标签,需与成员变量严格对应 + QStringList m_listTags; + // XML标签对应的数据,需与成员变量严格对应 + QStringList m_listValues; + + // 备份:XML标签对应的数据,需与成员变量严格对应 + QStringList m_listValuesBk; +}; +typedef QVector vecXmlBaseItemsPtr; diff --git a/Include/iData/iXmlManager/Models/iXmlBtn.h b/Include/iData/iXmlManager/Models/iXmlBtn.h new file mode 100644 index 0000000..2a3c925 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iXmlBtn.h @@ -0,0 +1,30 @@ +#pragma once + +#include "Defines.h" +#include "iXmlBaseItem.h" + +/// @brief Btn信息 +class I_XMLMANAGER_EXPORT iXmlBtn : public iXmlBaseItem +{ +public: + + iXmlBtn(QObject* parent = 0); + ~iXmlBtn(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + +protected: + virtual void initXmlTags(); + +public: + + QString m_sText; //中文名称 + QString m_sIcon; //图标 + QString m_sTips; //Tips + + ActionCheckMode m_oAcm; //状态 + +}; +typedef QVector vecXmlBtnsPtr; diff --git a/Include/iData/iXmlManager/Models/iXmlCmds.h b/Include/iData/iXmlManager/Models/iXmlCmds.h new file mode 100644 index 0000000..f3bd410 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iXmlCmds.h @@ -0,0 +1,59 @@ +#pragma once + +#include "iXmlBaseItem.h" +#include "iXmlBtn.h" + +// @brief Cmd信息 +class I_XMLMANAGER_EXPORT iXmlCmdItem : public iXmlBaseItem +{ +public: + + iXmlCmdItem(QObject* parent = 0); + ~iXmlCmdItem(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + void clear(); + +protected: + virtual void initXmlTags(); + +public: + + QStringList m_listIDs; //ID + + vecXmlBtnsPtr m_vecXmlBtnItems; +}; +typedef QVector vecXmlCmdItemsPtr; + + +// @brief Cmd组合信息 +class I_XMLMANAGER_EXPORT iXmlCmdGroup : public iXmlBaseItem +{ +public: + + iXmlCmdGroup(QObject* parent = 0); + ~iXmlCmdGroup(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + void clear(); + +protected: + virtual void initXmlTags(); + +public: + + QString m_sType; // + + vecXmlCmdItemsPtr m_vecXmlCmdItems; +}; +typedef QVector vecXmlCmdGroupsPtr; + diff --git a/Include/iData/iXmlManager/Models/iXmlCurveDictConfig.h b/Include/iData/iXmlManager/Models/iXmlCurveDictConfig.h new file mode 100644 index 0000000..0ce573e --- /dev/null +++ b/Include/iData/iXmlManager/Models/iXmlCurveDictConfig.h @@ -0,0 +1,204 @@ +#pragma once + +#include "iXmlBaseItem.h" +#include "iXmlBtn.h" +#include "Enums.h" + +/** + * 曲线越界的处理方式 + */ +enum ExceedShowStyle +{ + ESS_None = 0, + ESS_Exceed, ///< 越界 + ESS_NoExceed, ///< 不越界 + ESS_SecondRatio ///< 第二比例 +}; + + +/** + * 刻度类型 + */ +enum ScaleType +{ + ST_None = 0, + ST_Linear, ///< 线性 + ST_Logrithmic, ///< 对数 + ST_Inclination ///< 倾角 +}; + + +/** + * 曲线显示风格 + */ +enum CurveStyle +{ + CS_None = 0, + CS_Curve, ///< 曲线 + CS_PreLadder, ///< 前阶梯 + CS_PostLadder, ///< 后阶梯 + CS_Pillar, ///< 杆状图 + CS_Dot, ///< 散点 + CS_DotCurve, ///< 散点曲线 + CS_PillarCurve ///< 杆状曲线 +}; + +// @brief 测井曲线绘图配置信息 +class I_XMLMANAGER_EXPORT iXmlLogConfig : public iXmlBaseItem +{ +public: + + iXmlLogConfig(QObject* parent = 0); + ~iXmlLogConfig(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + void clear(); + //十进制颜色转换 + QColor transColor(int n); + +protected: + virtual void initXmlTags(); + +public: + double m_dLeftScale; //左刻度 + double m_dRightScale; //右刻度 + ScaleType m_scaleType; //刻度类型 + Qt::PenStyle m_eStyle; //线型 + double m_dWidth; //线宽 + QColor m_clrLine; //线色 + int m_nclr; //仅仅做判断用 + ExceedShowStyle m_exceedShowStyle; //越界显示方式 +}; +typedef QVector vecXmlLogConfigsPtr; + +// @brief 交会图配置信息 +class I_XMLMANAGER_EXPORT iXmlCorssConfig : public iXmlBaseItem +{ +public: + + iXmlCorssConfig(QObject* parent = 0); + ~iXmlCorssConfig(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + void clear(); + +protected: + virtual void initXmlTags(); + +public: + + double m_dLeftScale ; + double m_dRightScale; + double m_dMainSpace; + double m_dSubSpace; +}; +typedef QVector vecXmlCorssConfigsPtr; + +// @brief 柱状图配置信息 +class I_XMLMANAGER_EXPORT iXmlHistoConfig : public iXmlCorssConfig +{ +public: + + iXmlHistoConfig(); + ~iXmlHistoConfig(); +}; +typedef QVector vecXmlHistoConfigsPtr; + +// @brief Curve字典信息 +class I_XMLMANAGER_EXPORT iXmlCurveItem : public iXmlBaseItem +{ +public: + + iXmlCurveItem(QObject* parent = 0); + ~iXmlCurveItem(); + + iXmlCurveItem* getParenItem(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + virtual void parseInfo(const QDomElement& e); + + void clear(); + + //别名 + QString getAlias(); + //显示名称 + QString getShowName(); + //图标 + QString getIcon(); + //类型 + CurveStyle getCurveStyle(); + //单位 + QString getUnit(); + //最大值 + double getMax(); + //最小值 + double getMin(); + //备注 + QString getRemark(); + + //测井图 + //左刻度 + double getLogLeftScale(); + //右刻度 + double getLogRightScale(); + //刻度类型 + ScaleType getLogScaleType(); + //线型 + Qt::PenStyle getLineStyle(); + //线宽 + double getLineWidth(); + //线色 + QColor getLineClr(); + //越界显示方式 + ExceedShowStyle getExceedShowStyle(); + + //交会图 + //左刻度 + double getCrossLeftScale(); + //右刻度 + double getCrossRightScale(); + //大格 + double getCrossMainSpace(); + //小格 + double getCrossSubSpace(); + + //柱状图 + //左刻度 + double getHistoLeftScale(); + //右刻度 + double getHistoRightScale(); + //大格 + double getHistoMainSpace(); + //小格 + double getHistoSubSpace(); + +protected: + virtual void initXmlTags(); + +public: + // QString m_sCode; + QString m_sAlias; //别称,中文 + QString m_sShowName; //显示名称 + QString m_sIcon; //图标 + CurveStyle m_curveStyle; //类型 + QString m_sUnit; //单位 + double m_dMax; //最大值 + double m_dMin; //最小值 + QString m_sRemark; //备注 + + iXmlLogConfig* m_pLogConfig; //测井绘图配置 + iXmlCorssConfig* m_pCorssConfig; //交会绘图配置 + iXmlHistoConfig* m_pHistoConfig; //柱状绘图配置 +}; +typedef QVector vecXmlCurveItemsPtr; + + diff --git a/Include/iData/iXmlManager/Models/iXmlField.h b/Include/iData/iXmlManager/Models/iXmlField.h new file mode 100644 index 0000000..7037655 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iXmlField.h @@ -0,0 +1,47 @@ +#pragma once + +#include "iXmlBaseItem.h" + +/// @brief 字段类型 +enum FieldInfoType +{ + FIT_String = 0, //字符串(文本) + FIT_Int, //整形(含枚举) + FIT_Float, //Float数值 + FIT_Image, //图像 + FIT_Binary, //二进制 + FIT_DateTime, //日期类型,2017022增加日期类型 数值为5 + + FIT_UNKNOWN +}; + +/// @brief 字段信息 +class I_XMLMANAGER_EXPORT iXmlField : public iXmlBaseItem +{ +public: + + iXmlField(QObject* parent = 0); + ~iXmlField(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + +protected: + virtual void initXmlTags(); + +public: + + QString m_sAlias; //中文名称 + bool m_bKey; //是否关键字 + QString m_sUnit; //单位 + FieldInfoType m_oDataType; //类型 + float m_fMax; //对于数值型有效,最大值,默认值为100 + float m_fMin; //对于数值型有效,最小值,默认为0 + int m_nDigit; //小数位数,默认为3 + + bool m_bVisible; //20180314是否显示在界面上 + + QString m_sOthers;//其它辅助信息,扩展用//20190306 +}; +typedef QVector vecXmlFieldsPtr; diff --git a/Include/iData/iXmlManager/Models/iXmlTable.h b/Include/iData/iXmlManager/Models/iXmlTable.h new file mode 100644 index 0000000..ba046c1 --- /dev/null +++ b/Include/iData/iXmlManager/Models/iXmlTable.h @@ -0,0 +1,33 @@ +#pragma once + +#include "iXmlField.h" +#include "iXmlBaseItem.h" + +class I_XMLMANAGER_EXPORT iXmlTable : public iXmlBaseItem +{ +public: + iXmlTable(QObject* parent = 0); + ~iXmlTable(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + + // 获取关键字段(索引+Name) + bool getKeyFields(QMap& mapKeyFields); + + void clear(); + +protected: + virtual void initXmlTags(); + +public: + QString m_sAlias; //中文名称 + + vecXmlFieldsPtr m_vecXmlFields; +}; + +typedef QVector vecXmlTablesPtr; diff --git a/Include/iData/iXmlManager/iXmlManager_global.h b/Include/iData/iXmlManager/iXmlManager_global.h new file mode 100644 index 0000000..731d3e0 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlManager_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(I_XMLMANAGER_LIBRARY) +# define I_XMLMANAGER_EXPORT Q_DECL_EXPORT +#else +# define I_XMLMANAGER_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iData/iXmlManager/iXmlUtilBtnCmds.h b/Include/iData/iXmlManager/iXmlUtilBtnCmds.h new file mode 100644 index 0000000..10ca260 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilBtnCmds.h @@ -0,0 +1,30 @@ +#pragma once + +#include "iXmlUtilBase.h" +#include "iXmlCmds.h" + +class I_XMLMANAGER_EXPORT iXmlUtilBtnCmds : public iXmlUtilBase +{ +public: + + /// @brief 加载命令参数信息 + /// @param pVecBtnCmds命令参数 + /// @param pVecBtns基础btn + /// @param sFile:Xml对应文件 + static bool loadStructs(vecXmlCmdGroupsPtr* pVecBtnCmds, + vecXmlBtnsPtr* pVecBtns, + QString sFile); + +private: + + // 加载 + static bool parseInfos(QDomElement& root, QString sKey, + vecXmlCmdGroupsPtr* pVec); + static bool parseInfoExs(QDomElement& root, QString sKey, + vecXmlBtnsPtr* pVec); + + // 关联信息 + static bool bindCmdInfos(vecXmlCmdGroupsPtr* pVecBtnCmds, + vecXmlBtnsPtr* pVecBtns); + +}; diff --git a/Include/iData/iXmlManager/iXmlUtilCurveDictConfig.h b/Include/iData/iXmlManager/iXmlUtilCurveDictConfig.h new file mode 100644 index 0000000..5b36436 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilCurveDictConfig.h @@ -0,0 +1,28 @@ +#pragma once + +#include "iXmlUtilBase.h" +#include "iXmlCurveDictConfig.h" + +class I_XMLMANAGER_EXPORT iXmlUtilCurveDictConfig : public iXmlUtilBase +{ +public: + + /// @brief 加载曲线字典 + /// @param pVecXmlTables结果载体 + /// @param sFile:Xml对应文件,如果为空,则自动指向 CurveDictionary.xml + /// @param sTableSpecial如果非空,则仅仅提取指定表结构 + static bool loadStructs(vecXmlCurveItemsPtr* pVecCurveItems, + QString sFile, + QString sCurveSpecial = ""); + static bool createChildByID(vecXmlCurveItemsPtr* pVecCurveItems); + + static iXmlCurveItem* getItemParentByID(vecXmlCurveItemsPtr* pVecCurveItems, QString sID); + + /// @brief 修改特定曲线字典信息 + /// @param sCurve + /// @param p 待修改的字段新的信息 + /// @param sFile:Xml对应文件,如果为空,则自动指向 CurveDictionary.xml +// static bool modifyCurveItems(QString sCurve, +// iXmlCurveItem* p, +// QString sFile); +}; diff --git a/Include/iData/iXmlManager/iXmlUtilFieldAlias.h b/Include/iData/iXmlManager/iXmlUtilFieldAlias.h new file mode 100644 index 0000000..c74675d --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilFieldAlias.h @@ -0,0 +1,27 @@ +#pragma once + +#include "iXmlUtilBase.h" +#include "iXmlAlias.h" + + +// 数据库结构 +class I_XMLMANAGER_EXPORT iXmlUtilFieldAlias : public iXmlUtilBase +{ +public: + + /// @brief 加载数据库结构载体 + /// @param pVecXmlTables结果载体 + /// @param sFile:Xml对应文件,如果为空,则自动指向 FieldAlias.xml + /// @param sTableSpecial如果非空,则仅仅提取指定表结构 + static bool loadStructs(vecXmlAliasTablesPtr* pVecXmlTables, + QString sFile, + QString sTableSpecial = ""); + +// /// @brief 修改特定表的特定字段信息 +// /// @param sTable特定表名 +// /// @param p 待修改的字段新的信息 +// /// @param sFile:Xml对应文件,如果为空,则自动指向 TableStructs.xml +// static bool modifyTableStructs(QString sTable, +// iXmlField* p, +// QString sFile); +}; diff --git a/Include/iData/iXmlManager/iXmlUtilIpr.h b/Include/iData/iXmlManager/iXmlUtilIpr.h new file mode 100644 index 0000000..04b55f1 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilIpr.h @@ -0,0 +1,14 @@ +#pragma once + +#include "iIprAlgItemGroup.h" +#include "iXmlUtilBase.h" + +// IPR相关定义 +class I_XMLMANAGER_EXPORT iXmlUtilIpr : public iXmlUtilBase +{ +public: + + static bool loadStructs(vecIprAlgItemGroupsPtr *pVec, + QString sFile); + +}; diff --git a/Include/iData/iXmlManager/iXmlUtilModels.h b/Include/iData/iXmlManager/iXmlUtilModels.h new file mode 100644 index 0000000..d233d74 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilModels.h @@ -0,0 +1,42 @@ +#pragma once + +#include "iXmlTable.h" +#include "iModelInfoBase.h" +#include "iModelDescGroup.h" +#include "iParameterGroup.h" +#include "iXmlUtilBase.h" + +// 加载模型结构体 +class I_XMLMANAGER_EXPORT iXmlUtilModels : public iXmlUtilBase +{ +public: + + /// @brief 加载模型结构体 + /// @param pVecWbs...各种不同的模型结构体。 + /// 如果不想解析某一参数,直接传入NULL即可 + /// @param sFile:Xml对应文件 + static bool loadStructs(vecModelInfoBasesPtr* pVecWbs, + vecModelInfoBasesPtr* pVecWel, + vecModelInfoBasesPtr* pVecRes, + vecModelInfoBasesPtr* pVecBdy, + vecModelDescGroupsPtr*& pVecGroups, + QString sFile); + +private: + + // 加载 + static bool parseInfos(QDomElement& root, QString sKey, \ + vecModelInfoBasesPtr* pVec, int nOption); + static bool parseInfoExs(QDomElement& root, QString sKey, \ + vecModelDescGroupsPtr* pVec); + static bool parseInfoParas(QDomElement& root, QString sKey, \ + QMap& mapParas); + + // 关联Group中Desc的信息 + static bool bindModelInfos(vecModelDescGroupsPtr* pVecGroups, + vecModelInfoBasesPtr* pVecWbs, + vecModelInfoBasesPtr* pVecWel, + vecModelInfoBasesPtr* pVecRes, + vecModelInfoBasesPtr* pVecBdy); + +}; diff --git a/Include/iData/iXmlManager/iXmlUtilParameter.h b/Include/iData/iXmlManager/iXmlUtilParameter.h new file mode 100644 index 0000000..d2f117b --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilParameter.h @@ -0,0 +1,29 @@ +#pragma once + +#include "iParameterGroup.h" +#include "iParameterGroupSp.h" +#include "iXmlUtilBase.h" + +// 加载参数结构体 +class I_XMLMANAGER_EXPORT iXmlUtilParameter : public iXmlUtilBase +{ +public: + + /// @brief 加载参数结构体 + /// @param pVecGroups参数结构体 + /// @param sFile:Xml对应文件 + static bool loadStructs(vecParameterGroupsPtr *pVec, + QString sFile); + static bool loadStructsEx(vecParameterGroupSpsPtr *pVec, + QString sFile); + + + /// @brief 保存参数结构体 + /// @param pVecGroups参数结构体 + /// @param sFile:Xml对应文件 + static bool saveParameters(vecParameterGroupsPtr *pVec, + QString sFile); + + + +}; diff --git a/Include/iData/iXmlManager/iXmlUtilPvt.h b/Include/iData/iXmlManager/iXmlUtilPvt.h new file mode 100644 index 0000000..7e83767 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilPvt.h @@ -0,0 +1,17 @@ +#pragma once + +#include "iPvtParaItemGroup.h" +#include "iXmlUtilBase.h" + +// 加载PVT +class I_XMLMANAGER_EXPORT iXmlUtilPvt : public iXmlUtilBase +{ +public: + + /// @brief 加载PVT计算相关内容参数结构体 + /// @param pVec参数结构体 + /// @param sFile:Xml对应文件 + static bool loadStructs(vecPvtParaItemGroupsPtr *pVec, + QString sFile); + +}; diff --git a/Include/iData/iXmlManager/iXmlUtilSpeciParam.h b/Include/iData/iXmlManager/iXmlUtilSpeciParam.h new file mode 100644 index 0000000..9f56aea --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilSpeciParam.h @@ -0,0 +1,22 @@ +#pragma once + +#include "iXmlTable.h" +#include "iModelInfoBase.h" +#include "iModelDescGroup.h" +#include "iParameterGroup.h" +#include "iPvtParaItemGroup.h" +#include "iSpeciParam.h" +#include "iXmlUtilBase.h" + +// 特征线 +class I_XMLMANAGER_EXPORT iXmlUtilSpeciParam : public iXmlUtilBase +{ +public: + /// @brief 加载特征线参数信息 + /// @param pVecWbs...各种不同的模型结构体。 + /// 如果不想解析某一参数,直接传入NULL即可 + /// @param sFile:Xml对应文件 + static bool loadStructs(vecParamPtr* ecPtr, QString sFile); + + +}; diff --git a/Include/iData/iXmlManager/iXmlUtilTableStruct.h b/Include/iData/iXmlManager/iXmlUtilTableStruct.h new file mode 100644 index 0000000..bd7f610 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilTableStruct.h @@ -0,0 +1,26 @@ +#pragma once + +#include "iXmlUtilBase.h" +#include "iXmlTable.h" + +// 数据库表格结构 +class I_XMLMANAGER_EXPORT iXmlUtilTableStruct : public iXmlUtilBase +{ +public: + + /// @brief 加载数据库结构载体 + /// @param pVecXmlTables结果载体 + /// @param sFile:Xml对应文件,如果为空,则自动指向 TableStructs.xml + /// @param sTableSpecial如果非空,则仅仅提取指定表结构 + static bool loadStructs(vecXmlTablesPtr* pVecXmlTables, + QString sFile, + QString sTableSpecial = ""); + + /// @brief 修改特定表的特定字段信息 + /// @param sTable特定表名 + /// @param p 待修改的字段新的信息 + /// @param sFile:Xml对应文件,如果为空,则自动指向 TableStructs.xml + static bool modifyTableStructs(QString sTable, + iXmlField* p, + QString sFile); +}; diff --git a/Include/iData/iXmlManager/iXmlUtilUnit.h b/Include/iData/iXmlManager/iXmlUtilUnit.h new file mode 100644 index 0000000..cc04616 --- /dev/null +++ b/Include/iData/iXmlManager/iXmlUtilUnit.h @@ -0,0 +1,32 @@ +#pragma once + +#include "iXmlUtilBase.h" +#include "iUnitItem.h" +#include "iUnitGroup.h" +#include "iXmlManager_global.h" + +// 单位制管理 +class I_XMLMANAGER_EXPORT iXmlUtilUnit : public iXmlUtilBase +{ +public: + + // 加载xml + static bool loadStructs(vecUnitGroupPtr& vecUnitGroups, QString sFile = ""); + +// //填写xml +// static bool modifyUnitXml(vecUnitGroupPtr& vecUnitGroups, QString sFile = ""); + + //新建xml + static bool newUnitXml(vecUnitGroupPtr& vecUnitGroups, QString sFile = ""); + + //删除单位配置信息 + static void deleteUnitGroup(vecUnitGroupPtr& vecUnitGroup); + + //复制单位配置信息 + static void copyUnitGroup(vecUnitGroupPtr& vecUnitGroupOriginal, vecUnitGroupPtr& vecUnitGroupNew); + +}; + + + + diff --git a/Include/iGui/iGuiBase/iDlgBase.h b/Include/iGui/iGuiBase/iDlgBase.h new file mode 100644 index 0000000..70698db --- /dev/null +++ b/Include/iGui/iGuiBase/iDlgBase.h @@ -0,0 +1,53 @@ +#pragma once + +#include "ZxUiBase.h" + +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "iGuiBase_global.h" + +class iParameter; +class iParaItemCtrl; +class ZxSerializer; + +/// @brief 基础窗体ZxUiBase之上的再次封装 +class X_GUI_BASE_EXPORT iDlgBase : public ZxUiBase +{ + Q_OBJECT + +public: + + explicit iDlgBase(QWidget *parent = 0); + ~iDlgBase(); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 权宜之计 + // 在pCtrl InitUI之前允许部分调整,如参数跟着模型走的调整 + virtual void adjustParaInfos(iParameter* pParameter); + + // 响应ParaCtrl数据的改变 + virtual void slotParaCtrlValueChanged(QString sPara, QVariant o); + + // 从当前井获取该参数的数值 + virtual bool getValueFromCurWell(QString sPara, QVariant& o); + +protected: + + // 单位切换 + float convertValueByUnit(float f, + QString sUnitSrc, + QString sUnitDest); + +protected: + + // 窗体关闭的情形 + virtual void closeEvent(QCloseEvent *); + +protected: + +}; diff --git a/Include/iGui/iGuiBase/iDlgBaseEx.h b/Include/iGui/iGuiBase/iDlgBaseEx.h new file mode 100644 index 0000000..58bfdbb --- /dev/null +++ b/Include/iGui/iGuiBase/iDlgBaseEx.h @@ -0,0 +1,77 @@ +#pragma once + +#include "iDlgBase.h" + +/// @brief 基础窗体类,实现 如下功能 +/// (1) 在右下或者左上绘制按钮,实现一些简单的折叠功能 +class X_GUI_BASE_EXPORT iDlgBaseEx : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iDlgBaseEx(QWidget *parent = 0); + ~iDlgBaseEx(); + + // 是否启用 + void setUseMode(bool b); + bool isUseMode(); + + // 设置Btn的位置(针对全局) + void setBtnPos(RectPos o); + + // 按钮范围 + QRect getBtnRect(); + + // 按钮图标 + // 可以为全路径,或者图标名称(不带后缀) + // 如果sIcon2非空,则轮换 + void setBtnIcons(QString sIcon1, QString sIcon2 = ""); + +protected: + + virtual void paintEvent(QPaintEvent *e); + virtual void paintBtn(QPainter *pPainter, bool bHovering); + + virtual void resizeEvent(QResizeEvent *e); + virtual void mouseMoveEvent(QMouseEvent *mouseEvent); + virtual void mousePressEvent(QMouseEvent *mouseEvent); + virtual void leaveEvent(QEvent *e); + +protected: + + void calBtnRect(); + + // 虚拟按钮的响应 + // 如果返回true,则不再触发信号,否则触发 + virtual bool runByVirtualBtn(); + +signals: + + void sigRunByBtn(bool bShowFirstIcon); + + void sigShowParam(bool IsShow); + +private slots: + +// void slotWxImageInit(); +// void slotIsAddBt(bool IsAdd); + +protected: + + // 是否启用 + bool m_bUseMode; + + // 鼠标Hover,内部使用变量 + bool m_bHover; + + // 矩形框大小 + QRect m_rtBtn; + + // 图标 + QString m_sIcon1; + QString m_sIcon2; + + // 位置信息 + RectPos m_oPos; +}; diff --git a/Include/iGui/iGuiBase/iGuiBase_global.h b/Include/iGui/iGuiBase/iGuiBase_global.h new file mode 100644 index 0000000..8ed81b5 --- /dev/null +++ b/Include/iGui/iGuiBase/iGuiBase_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(X_GUI_BASE_LIBRARY) +# define X_GUI_BASE_EXPORT Q_DECL_EXPORT +#else +# define X_GUI_BASE_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iGui/iGuiBase/iParaItemCtrl.h b/Include/iGui/iGuiBase/iParaItemCtrl.h new file mode 100644 index 0000000..2073c2b --- /dev/null +++ b/Include/iGui/iGuiBase/iParaItemCtrl.h @@ -0,0 +1,141 @@ +#pragma once + +#include + +#include "Defines.h" + +#include "iGuiBase_global.h" + +class iUnitGroup; +class QHBoxLayout; +class QLineEdit; +class QComboBox; +class QLabel; +class iParameter; + +class X_GUI_BASE_EXPORT iParaItemCtrl : public QWidget +{ + Q_OBJECT + +public: + + /// @brief 参数系列,自动从后台获取相关信息 + /// @param sPara 参数名称,可以是 英文也可以是中文,软件会自动判断 + /// @param pParameter 参数对应的对象体,如果为空,软件会自动判断 + /// @param sUnit,当前选取的单位,如果为空,则默认从后台获取 + /// @param oValue,当前的数值,如果不传入,则取空 + iParaItemCtrl(QString sPara, + QVariant oValue = QVariant(), + QString sUnit = "", + iParameter* pParameter = NULL); + ~iParaItemCtrl(); + + void initUI(); + + // 20240530 为了布局方便,增加新的方式。 + // 把相关的子项直接存入外部传入的Layout(通常是GridLayout)之中 + // 该函数接口慎用 + void initUI2Layout(QGridLayout* pGridLayout, int nRowIndex); + + // 一旦启用该方式,原先的setVisible要改为setChildVisible + void setChildVisible(bool bVisible); + + +public: + + // 获取数据 + QString getPara(); + QString getCurTag(); + double getCurValue(); //当前界面显示 + QString getCurShowValue(); //当前界面显示 + QString getCurUnit(); + bool setCurValue(double f); //当前界面显示 + bool setCurUnit(QString s); + double getBaseValue(); //基于标准单位的数据(比例为1) + QString getBaseUnit(); + + int getCbxValue(); + + // 属性 + void setUnitEnable(bool bEnable); + void setUnitEditable(bool bEditable); + void setValueEditable(bool bEditable); + void setShowScale(bool b); + + void setStrenchable(bool bStrench); + void setStrenchRatios(QVector& vec); + void setSpacing(int n); + void setMarginLR(int left, int right); + + // 子控件 + QWidget* getItemEdit(); + QWidget* getCbxUnits(); + QWidget* getLblUnits(); + QWidget* getCbxItem(); + // Parameter + iParameter* getParameter(); + + // 重新调整单位 + // NewLand 工区创建的老的Job中流体界面 + // 总是没有单位,暂时没有找到原因,只得特殊处理 + void resetUnits(); + + // 设置比例 + void adjustStrench(); + + // 输入检测 + bool isInputOk(); + +signals: + void sigUnableSP(bool&); + void sigValueChanged(QString sPara, QVariant o); + +private: + + // 单位 + void fillUnitWx(); + + // 对于文本框的范围及颜色管理 + void checkAndClr(); + + // 数据范围 + QString getScaleStr(); + + QVector getStrenchRatios(); + +private slots: + + void slotTextChanged(QString s); + void slotCbxIndexChanged(int index); + void slotTextStrChanged(); + +private: + QLabel* m_pItemTag; //标签 + //QWidget* m_pItemEdit; + QLineEdit* m_pItemEdit; //编辑框 + QComboBox* m_pCbxItemEdit; + QComboBox* m_pCbxUnits; //单位下拉 + QLabel* m_pLblUnits; //单位显示 + QLabel* m_pLblScale; //范围 + + QComboBox* m_pCbxItemType;//边界类型/或其它类型的下拉 + + QString m_sPara; //参数名称,可以是 英文也可以是中文,软件会自动判断 + double m_fRawValue; //原始值 + QString m_sRawUnit; //原始单位 + int m_nDigit; //小数位数 + + iUnitGroup* m_pUnitGroup;//载体 + iParameter* m_pParameter; + + bool m_bUnitEnable; //单位是否只读 + bool m_bUnitEditable; //单位是否可以下拉切换 + bool m_bValueEditable; //数值是否可以人工修改 + bool m_bShowScale; //是否显示范围 + + int m_nSpacing; //组件之间的间隔 + int m_nMarginL; //整体的左侧偏移(边界) + int m_nMarginR; //整体的右侧偏移(边界) + bool m_bStrench; //是否启用Strench(如果为false,则不启用) + QVector m_vecStreches;//如果启用strench采用的数值 +}; diff --git a/Include/iGui/iGuiConfig/TreeWx/TreeItemConfig.h b/Include/iGui/iGuiConfig/TreeWx/TreeItemConfig.h new file mode 100644 index 0000000..8b29dce --- /dev/null +++ b/Include/iGui/iGuiConfig/TreeWx/TreeItemConfig.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include "Defines.h" +#include "iGuiConfig_global.h" + +class X_GUI_CONFIG_EXPORT TreeItemConfig : public QTreeWidgetItem +{ +public: + + TreeItemConfig(QTreeWidget* parent = 0); + ~TreeItemConfig(); + +public slots: + + void setCwt(ConfigWxType o); + ConfigWxType getCwt(); + +public: + ConfigWxType m_oCwt; +}; diff --git a/Include/iGui/iGuiConfig/TreeWx/TreeWxConfig.h b/Include/iGui/iGuiConfig/TreeWx/TreeWxConfig.h new file mode 100644 index 0000000..d4373f8 --- /dev/null +++ b/Include/iGui/iGuiConfig/TreeWx/TreeWxConfig.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include "Defines.h" +#include "iGuiConfig_global.h" + +class TreeItemConfig; +class X_GUI_CONFIG_EXPORT TreeWxConfig : public QTreeWidget +{ + Q_OBJECT + +public: + + TreeWxConfig(QWidget* parent = 0); + ~TreeWxConfig(); + + virtual void refresh(); + +protected: + + // 填充 + virtual void fillTree(); + +Q_SIGNALS: + +public slots: + + void slotCurItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous); + + // 从主窗体选择 + void slotCurrentWxChanged(ConfigWxType&); + +protected: + + // Tags + QStringList m_listTags; +}; diff --git a/Include/iGui/iGuiConfig/iGuiConfig_global.h b/Include/iGui/iGuiConfig/iGuiConfig_global.h new file mode 100644 index 0000000..a77d195 --- /dev/null +++ b/Include/iGui/iGuiConfig/iGuiConfig_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(X_GUI_CONFIG_LIBRARY) +# define X_GUI_CONFIG_EXPORT Q_DECL_EXPORT +#else +# define X_GUI_CONFIG_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iGui/iGuiConfig/iWxConfigAlgoSetting.h b/Include/iGui/iGuiConfig/iWxConfigAlgoSetting.h new file mode 100644 index 0000000..6e84286 --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigAlgoSetting.h @@ -0,0 +1,28 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +class X_GUI_CONFIG_EXPORT iWxConfigAlgoSetting : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigAlgoSetting(QWidget *parent = 0); + ~iWxConfigAlgoSetting(); + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + +private: + +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigBtnCmds.h b/Include/iGui/iGuiConfig/iWxConfigBtnCmds.h new file mode 100644 index 0000000..8e3d481 --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigBtnCmds.h @@ -0,0 +1,70 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" +class iXmlBtn; +class X_GUI_CONFIG_EXPORT iWxConfigBtnCmds : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigBtnCmds(QWidget *parent = 0); + ~iWxConfigBtnCmds(); + + // 初始化 + virtual void initUI(); + QHBoxLayout* initUI_Desc(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + // Radio Changed + void slotRadioChanged(); + + // 右键菜单 + void slotTableWxShowContextMenu(const QPoint &pos); + void slotTableWxCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn); + +#ifdef QT_DEBUG + // 难以置信的是,用了setCellWidget后,QTableWidget的signal无法使用 TODO + void slotTableCellClicked(int r, int c); + void slotGbxClicked(); + void slotTableWxItemPressed(QTableWidgetItem*); +#endif + + // 菜单响应 + void slotRefresh(); + +private: + + QString getCurType(); + + void initAndAllocBtns(); + QString getTypeByID(QString sID); + void allocOneBtn(QString sType, iXmlBtn* pBtn); + + void fillItemGrids(QString sSeries); + QWidget* getCellWx(iXmlBtn *pBtn); + QString getTooltip(int r, int c); + +private: + + // 内部变量,Table + QTableWidget* m_pTableWx; + QLabel* m_pLblDesc; + QMenu* m_pMenu; + + // + int m_nColMax; + + // Radio + QVector m_vecRadios; + + // Btn载体 + QMap > m_mapBtns; +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigDefaultValue.h b/Include/iGui/iGuiConfig/iWxConfigDefaultValue.h new file mode 100644 index 0000000..4527667 --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigDefaultValue.h @@ -0,0 +1,28 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +class X_GUI_CONFIG_EXPORT iWxConfigDefaultValue : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigDefaultValue(QWidget *parent = 0); + ~iWxConfigDefaultValue(); + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + +private: + +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigIcons.h b/Include/iGui/iGuiConfig/iWxConfigIcons.h new file mode 100644 index 0000000..21b663f --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigIcons.h @@ -0,0 +1,56 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +class X_GUI_CONFIG_EXPORT iWxConfigIcons : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigIcons(QWidget *parent = 0); + ~iWxConfigIcons(); + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + // Radio Changed + void slotSeriesChanged(); + + // 右键菜单 + void slotShowContextMenu(const QPoint &pos); + + // 菜单响应 + void slotIconDel(); + void slotIconAdd(); + void slotBrowseFolder(); + void slotBrowseFolderEx(); + void slotRefresh(); + +private: + // 内部实现函数 + void listFiles(); + void appendFile(QString sSeries, QString s); + void fillFileGrids(QString sSeries); + QWidget* getCellWx(QString s); + QString getTooltip(int r, int c); + QString getCurSeries(); + +private: + + // 内部变量,Table + QTableWidget* m_pTableWx; + QMenu* m_pMenu; + QVector m_vecRadios; + + QString m_sDir; + QMap m_mapFiles; +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigModelParas.h b/Include/iGui/iGuiConfig/iWxConfigModelParas.h new file mode 100644 index 0000000..82410e7 --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigModelParas.h @@ -0,0 +1,58 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iParameterGroup.h" +#include "iGuiConfig_global.h" + +class iWxTreeBase; +class X_GUI_CONFIG_EXPORT iWxConfigModelParas : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigModelParas(QWidget *parent = 0); + ~iWxConfigModelParas(); + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void slotLoad(); + virtual void slotSave(); + + // 单个保存 + virtual void saveCurrentByAction(QString s); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + + void slotModelSeriesChanged(QString s); + +private: + + // 下拉选项 + void fillModelSeries(QComboBox* p); + + // 根据当前选项获取文件 + QString getCurConfigFile(bool bOpenMode = true, QString sObjName = ""); + + // 树 + QTreeWidgetItem* appendSubItem(iParameter* p1, + QTreeWidgetItem* pParent); + // 树型控件的单位项 + void fillCbxUnit(QComboBox* p, QString sUnit); + // 从树收集当前数据 + void collectData(vecParameterGroupsPtr& vecParaGroups); + + +private: + + iWxTreeBase* m_pTreeWx; + QComboBox* m_pCbxModelSeries; + +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigPaths.h b/Include/iGui/iGuiConfig/iWxConfigPaths.h new file mode 100644 index 0000000..0c0be74 --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigPaths.h @@ -0,0 +1,28 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +class X_GUI_CONFIG_EXPORT iWxConfigPaths : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigPaths(QWidget *parent = 0); + ~iWxConfigPaths(); + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + +private: + +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigPlotTemplate.h b/Include/iGui/iGuiConfig/iWxConfigPlotTemplate.h new file mode 100644 index 0000000..179879c --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigPlotTemplate.h @@ -0,0 +1,49 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +class iPlotCurveWxT; +class ZxPtyDock; +class ZxRenderItem; +class IxPtySource; +class X_GUI_CONFIG_EXPORT iWxConfigPlotTemplate : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigPlotTemplate(QWidget *parent = 0); + ~iWxConfigPlotTemplate(); + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + + + // 把 + virtual void slotLoad(); + virtual void slotSave(); + void slotOpenFolder(); + + void slotGraphItemPoliciesInstalled(ZxRenderItem*); + void slotItemPropertyTempl(IxPtySource* p, bool b, bool bSelf); + +private: + + // 初始化 + void initPlotWx(); + void initPtyWx(); + void drawRandomCharts(); + +private: + iPlotCurveWxT* m_pWxPlot; + ZxPtyDock* m_pDockPty; +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigSys.h b/Include/iGui/iGuiConfig/iWxConfigSys.h new file mode 100644 index 0000000..683041b --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigSys.h @@ -0,0 +1,36 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +namespace Ui { +class iWxConfigSys; +} + +class X_GUI_CONFIG_EXPORT iWxConfigSys : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigSys(QWidget *parent = 0); + ~iWxConfigSys(); + + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private slots: + + void on_cbxSplashOpen_clicked(); + +private: + void saveUIs(); + void loadUIs(); + +private: + Ui::iWxConfigSys *ui; +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigUnit.h b/Include/iGui/iGuiConfig/iWxConfigUnit.h new file mode 100644 index 0000000..8d3bbd8 --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigUnit.h @@ -0,0 +1,63 @@ +#pragma once +#include "iUnitGroup.h" +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +class ZxTableModel; +class ZxTableView; +class X_GUI_CONFIG_EXPORT iWxConfigUnit : public iWxConfigBase +{ + Q_OBJECT + +public: + explicit iWxConfigUnit(QWidget *parent = 0); + ~iWxConfigUnit(); + + // 初始化 + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 单个保存 + virtual void saveCurrentByAction(QString s); + + // 执行 + virtual bool runActionBy(QString sName); + +private slots: + + // 来源切换 + void slotUnitSourcesChanged(QString s); + + // 把 + virtual void slotLoad(); + virtual void slotSave(); + virtual void slotLoadFromExcel(); + virtual void slotCheckCurXml(); + +private: + // 初始化 + QWidget* initUI_Table(); + void fillUnitSources(); +// void refreshTable(); + void fillTable(VVecVariant& vvec); + + // 数据转换 + void convertData2VVec(vecUnitGroupPtr& vvecGroupX, + VVecVariant& vvecData); + void convertDataFromVVec(vecUnitGroupPtr& vvecGroupX, + VVecVariant& vvecData); + + // 加载的Excel处理前面两行的内容,去掉或不去掉 + void dealwithFirstRows(VVecVariant &vvec); + +private: + + ZxTableView* m_pTableView; + ZxTableModel* m_pTableModel; + + QComboBox* m_pCbxUnitSources; + +}; diff --git a/Include/iGui/iGuiConfig/iWxConfigWizard.h b/Include/iGui/iGuiConfig/iWxConfigWizard.h new file mode 100644 index 0000000..8a84659 --- /dev/null +++ b/Include/iGui/iGuiConfig/iWxConfigWizard.h @@ -0,0 +1,94 @@ +#pragma once + +#include "iWxConfigBase.h" +#include "iGuiConfig_global.h" + +class TreeWxConfig; +class X_GUI_CONFIG_EXPORT iWxConfigWizard : public iWxConfigBase +{ + Q_OBJECT + +public: + + explicit iWxConfigWizard(QWidget *parent = 0); + ~iWxConfigWizard(); + + // 初始化 + virtual void initUI(); + // 清空 + void clearWx(); + +signals: + void sigCurrentWxChanged(ConfigWxType&); + +private: + + // 初始化 + void initBase(); + void initBase_MainLayout(); + void initBase_TreeWx(); + QVBoxLayout* initBase_ConfigWxs(); + QHBoxLayout* initBase_ToolBars(); + + void refreshOthers(); + // 子窗体 + void initSubWxs(); + void dealSubWxs_Special(); + + // 刷新 + void freshCommonBtns(iWxConfigBase* pWx); + void freshOwnBtns(iWxConfigBase* pWx); + void freshTitle(iWxConfigBase* pWx); + void freshTreeSelNode(iWxConfigBase* pWx); + +protected: + + virtual void paintEvent(QPaintEvent *); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private slots: + + // 左侧树双击 + virtual void slotTreeItemChanged(QTreeWidgetItem*, int); + + void slotSubWxChanged(int); + + // 把Wizard中所有项进行保存或者恢复 + void slotSaveAll(); + void slotSaveActionTriggered(); + + // 按钮 + void on_btnBack_clicked(); + void on_btnNext_clicked(); + void on_btnHelp_clicked(); + + // 属性编辑与XPF编辑工具的交互 + void slotOpenWithXpfTool(QString s); + +private: + + QHBoxLayout* m_pMainLayout; + + // 子窗体,本类不负责创建维护 + QVector m_vecSubWxs; + + // TreeCtrl + TreeWxConfig* m_pTreeWx; + // 子窗体容器 + QStackedWidget* m_pStackedWidget; + // Tags + QLabel* m_pLblTitle; + + // Btn + QPushButton* m_pBtnBack; + QPushButton* m_pBtnNext; + QPushButton* m_pBtnSave; + + // Menu + QMenu* m_pSaveBtnMenu; + + // PropEdit与XpfEdit的索引 + int m_nIndexProp; + int m_nIndexXpf; +}; diff --git a/Include/iGui/iGuiConfigBase/iGuiConfigBase_global.h b/Include/iGui/iGuiConfigBase/iGuiConfigBase_global.h new file mode 100644 index 0000000..5ce830d --- /dev/null +++ b/Include/iGui/iGuiConfigBase/iGuiConfigBase_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(X_GUI_CONFIGBASE_LIBRARY) +# define X_GUI_CONFIGBASE_EXPORT Q_DECL_EXPORT +#else +# define X_GUI_CONFIGBASE_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iGui/iGuiConfigBase/iWxConfigBase.h b/Include/iGui/iGuiConfigBase/iWxConfigBase.h new file mode 100644 index 0000000..dc81b65 --- /dev/null +++ b/Include/iGui/iGuiConfigBase/iWxConfigBase.h @@ -0,0 +1,110 @@ +#pragma once + +#include "iDlgBase.h" +#include "iGuiConfigBase_global.h" + +class iParaItemCtrl; +//class ZxDataWell; +class X_GUI_CONFIGBASE_EXPORT iWxConfigBase : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iWxConfigBase(QWidget *parent = 0); + ~iWxConfigBase(); + +public: + + // 显示模式 + void setCwt(ConfigWxType o); + ConfigWxType getCwt(); + + + // 初始化 + virtual void initUI(); + //virtual void setDataWell(ZxDataWell* p); + + virtual QMap* getMapParaCtrls(); + + virtual void saveCurrentByAction(QString s); + + QStringList getSaveOptions(); + + virtual bool isUILoaded(); + virtual void loadUI(); + +public slots: + + virtual void slotBtnTriggered(); + + // 把 + virtual void slotLoad(); + virtual void slotSave(); + virtual void slotRefresh(); + + +public: + + // 初始化 + virtual void initUI_Btns(QHBoxLayout*& pLayoutH); + // 执行 + virtual bool runActionBy(QString sName); + + // 建立某参数的Layout,考虑单位控件 + virtual iParaItemCtrl* createParaCtrl(QString sPara, + bool bUnitEditable = true, + bool bShowScale = true, + bool bStrench = true, + VecInt* pVecStrenchRatios = NULL, + int nSpacing = 4, + int nMarginL = 20, + int nMarginR = 20); + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, float f); + virtual bool getParaValue(QString sPara, float& f); + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + +signals: + // 当参数改变时触发,通知后续窗体 + void signalParasChanged(QMap& map); + +public slots: + // 当前面窗体参数改变时,本窗体响应 + virtual void slotParasObtained(QMap& map); + + // 响应ParaCtrl数据的改变 + void slotParaCtrlValueChanged(QString sPara, QVariant o); + + +protected: + virtual void paintEvent(QPaintEvent *); + +protected: + + // 类型 + ConfigWxType m_oCwt; + + // 单个保存时的下拉选项 + QStringList m_listSaveOptions; + + // 对于单位类的控件进行管理 + QMap m_mapParaCtrls; + + // 当前井 + //ZxDataWell* m_pDataWell; + + // Buttons + QStringList m_listBtnNames; + QStringList m_listBtnTexts; + QStringList m_listBtnIcons; + QStringList m_listBtnTips; + + // 临时 + bool m_bLoaded; +}; diff --git a/Include/iGui/iGuiConfigBase/iWxTreeBase.h b/Include/iGui/iGuiConfigBase/iWxTreeBase.h new file mode 100644 index 0000000..d5fe877 --- /dev/null +++ b/Include/iGui/iGuiConfigBase/iWxTreeBase.h @@ -0,0 +1,71 @@ +#pragma once + +#include +#include "iGuiConfigBase_global.h" + +class X_GUI_CONFIGBASE_EXPORT iWxTreeBase : public QTreeWidget +{ + Q_OBJECT + +public: + + iWxTreeBase(QWidget* parent = 0); + ~iWxTreeBase(); + + virtual void refresh(); + +protected: + + // 填充 + virtual void fillTree(); + + // 公共Action初始化 + void initCommonActions(); + + // 右键菜单功能总调用 + virtual void initContextMenu(QMenu* pMenu); + + // 空节点通用 + virtual void initContextMenuCommonAll(QMenu* pMenu); + + // 节点通用 + virtual void initContextMenuCommonNode(QMenu* pMenu); + + // 右键的部分功能重载实现 + virtual bool showOrEditNode(QTreeWidgetItem* pItem); + virtual bool delCurrentNodes(QList& listItems); + virtual bool renameCurrentNode(QString sNew); + virtual void doubleClickItem(QTreeWidgetItem* pItem); + +Q_SIGNALS: + + +public slots: + + // 具体响应函数 + virtual void slotShowContextMenu(const QPoint &pos); + virtual void slotItemDoubleClicked(QTreeWidgetItem*, int); + + virtual void slotDelNodes(); + virtual void slotEditNode(); + virtual void slotRenameNode(); + virtual void slotItemNodeNameChanged(); //节点名称改变的槽 + + virtual void slotExpandNode(); + virtual void slotExpandNodeAll(); + virtual void slotCollapseNode(); + virtual void slotCollapseNodeAll(); + + virtual void slotRefresh(); + +protected: + + QMenu* m_pMenu; + QTreeWidgetItem* m_pItemSel; + QTreeWidgetItem* m_pRenameItem; + + // 公共的Action项 + QAction* m_pActionRename; + QAction* m_pActionEdit; + QAction* m_pActionDel; +}; diff --git a/Include/iGui/iGuiGridPty/QComboBoxEx.h b/Include/iGui/iGuiGridPty/QComboBoxEx.h new file mode 100644 index 0000000..380c991 --- /dev/null +++ b/Include/iGui/iGuiGridPty/QComboBoxEx.h @@ -0,0 +1,31 @@ +#pragma once + +#include "iDlgBase.h" +#include "iGuiGridPty_global.h" + +// 这是内部嵌套用的QComboBox +class X_GUI_GRIDPTY_EXPORT QComboBoxEx : public QComboBox +{ + Q_OBJECT + +public: + QComboBoxEx(QWidget *parent = 0); + ~QComboBoxEx(); + + void setActive(bool b); + bool isActive(); + +signals: + + void sigActivated(bool); + +protected: + + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + virtual void showPopup(); + +private: + + bool m_bActive; +}; diff --git a/Include/iGui/iGuiGridPty/QDateTimeEditEx.h b/Include/iGui/iGuiGridPty/QDateTimeEditEx.h new file mode 100644 index 0000000..e13ca2b --- /dev/null +++ b/Include/iGui/iGuiGridPty/QDateTimeEditEx.h @@ -0,0 +1,30 @@ +#pragma once + +#include "iDlgBase.h" +#include "iGuiGridPty_global.h" + +// 这是内部嵌套用的QDateTimeEdit +class X_GUI_GRIDPTY_EXPORT QDateTimeEditEx : public QDateTimeEdit +{ + Q_OBJECT + +public: + QDateTimeEditEx(QWidget *parent = 0); + ~QDateTimeEditEx(); + + void setActive(bool b); + bool isActive(); + +signals: + + void sigActivated(bool); + +protected: + + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + +private: + + bool m_bActive; +}; diff --git a/Include/iGui/iGuiGridPty/QLineEditEx.h b/Include/iGui/iGuiGridPty/QLineEditEx.h new file mode 100644 index 0000000..ba493f6 --- /dev/null +++ b/Include/iGui/iGuiGridPty/QLineEditEx.h @@ -0,0 +1,30 @@ +#pragma once + +#include "iDlgBase.h" +#include "iGuiGridPty_global.h" + +// 这是内部嵌套用的LineEdit +class X_GUI_GRIDPTY_EXPORT QLineEditEx : public QLineEdit +{ + Q_OBJECT + +public: + QLineEditEx(QWidget *parent = 0); + ~QLineEditEx(); + + void setActive(bool b); + bool isActive(); + +signals: + + void sigActivated(bool); + +protected: + + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + +private: + + bool m_bActive; +}; diff --git a/Include/iGui/iGuiGridPty/iBdyInfo.h b/Include/iGui/iGuiGridPty/iBdyInfo.h new file mode 100644 index 0000000..af6aa1b --- /dev/null +++ b/Include/iGui/iGuiGridPty/iBdyInfo.h @@ -0,0 +1,22 @@ +#pragma once + +#include "iGuiGridPty_global.h" + +// 该类只是为了方便进行边界相关信息的处理 +// 进行边界类型信息的扩展而新增 +class X_GUI_GRIDPTY_EXPORT iBdyInfo +{ +public: + + iBdyInfo(); + +public: + + QString m_sName; //对应的英文标识,如:x1,ne,se等 + QString m_sAlias; //对应的中文标识,如:边界距离1,上边界等 + + double m_dValue; //距离 + QString m_sType; //类型,封闭 tr("CloseB")、定压 tr("FixP"),后续可以扩充为其他 + + bool m_bValid; //是否有效 +}; diff --git a/Include/iGui/iGuiGridPty/iGridLineGroup.h b/Include/iGui/iGuiGridPty/iGridLineGroup.h new file mode 100644 index 0000000..e24fc50 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridLineGroup.h @@ -0,0 +1,58 @@ +#pragma once + +#include "iGridLineItem.h" + +// 列表区分组(应用于模型选择) +class X_GUI_GRIDPTY_EXPORT iGridLineGroup : public iGridLineItem +{ + Q_OBJECT + +public: + + explicit iGridLineGroup(iGridLineItem* pParent = NULL); + ~iGridLineGroup(); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); + + virtual void paintGroup(QPainter* pPainter, int nCountVisible); + virtual void paintItem(QPainter* pPainter); + virtual bool isPaintNeeded(); + + virtual void _paintItemIcon(QPainter* pPainter); + virtual void _paintItemTag(QPainter* pPainter, QString s); + +public: + + // 位置相关Bounds + virtual void setBounds(QRectF& rt); //全局 + virtual QRectF getIconBound(); //Icon的Bound + virtual QRectF getLeftBounds(); //左 + virtual float getItemHeight(); //当前节点高度,包括孩子 + + int getChildVisibleCount(); //可见的孩子数目 + virtual iGridLineItem* getActiveItem(); //当前节点及孩子中的Active节点 + +public: + + virtual bool hitTest(QPoint pt, GridTickPos& ht, \ + iGridLineItem*& pItem); + virtual bool hitTest_SelfOnly(QPoint pt, GridTickPos& ht, \ + iGridLineItem*& pItem); + +protected: + + // 其它常量 + float m_fIconWidth; + float m_fIconMarginH; + float m_fIconMarginV; + + // Group模式的背景色 + QColor m_groupBackColor[3]; + + // 图标 + QPixmap m_oPixCollapse; + QPixmap m_oPixExpand; +}; diff --git a/Include/iGui/iGuiGridPty/iGridLineItem.h b/Include/iGui/iGuiGridPty/iGridLineItem.h new file mode 100644 index 0000000..3a26351 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridLineItem.h @@ -0,0 +1,145 @@ +#pragma once + +#include "iDlgBase.h" +#include "iResultInfo.h" +#include "iGuiGridPty_global.h" + +class iModelInfoBase; + +// 列表区每一项Item的基类(应用于模型选择) +class X_GUI_GRIDPTY_EXPORT iGridLineItem : public QObject +{ + Q_OBJECT + +public: + + explicit iGridLineItem(iGridLineItem* pParent = NULL); + ~iGridLineItem(); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 父子关系处理 + virtual void setDlgBase(QWidget* p);//父窗体、位置控制 + iGridLineItem* getParent(); //父 + bool isParentCollapsed(); //父级节点是否折叠 + int appendChild(iGridLineItem* p); //添加孩子 + int getChildCount(); //孩子数目 + iGridLineItem* getChildAt(int n); //获取 + void removeAllChilds(); //Clear + bool getAllItems(QVector& vec);//不考虑层级 + int getItemLevel(); //获取层次级别 + virtual iGridLineItem* getActiveItem(); //当前节点及孩子中的Active节点 + +public: + + // 位置相关Bounds + virtual void setBounds(QRectF& rt); //全局 + virtual QRectF getBounds(); // + virtual QRectF getLeftBounds(); //左 + virtual float getItemHeight(); //当前节点高度 + +public: + + // 绘图 + virtual void paint(QPainter* pPainter); + +protected: + virtual bool isPaintNeeded(); + virtual void paintItem(QPainter* pPainter); + virtual void _paintItemTag(QPainter* pPainter, QString s); + +public: + + bool isExpanded(); + virtual void setExpanded(bool b); + bool isVisible(); + virtual void setVisible(bool b); + bool isActive(); + virtual void setActive(bool b); + bool isReadonly(); + virtual void setReadonly(bool b); + virtual void onItemDoubleCliked(GridTickPos o); + +public: + + // HitTest + virtual bool hitTest(QPoint pt, GridTickPos& ht, \ + iGridLineItem*& pItem); + virtual bool hitTest_SelfOnly(QPoint pt, GridTickPos& ht, \ + iGridLineItem*& pItem); + +signals: + + void sigUnableSP(bool&); + void sigValueChanged(QString sPara, QVariant o); + + void sigActiveItem(iGridLineItem*); + // 获取其它参数当前的数值 + void sigGetValueOf(QString sPara, QVariant& o, bool& bOk); + +protected slots: + + // QLineEdit 类型的数据change响应 + virtual void slotItemNeedActivate(bool); + +public: + + // 设置各个参数 + + iModelInfoBase* getDataObj(); //参数体 + virtual void setDataObj(iModelInfoBase* p); + + QString getTag(); //左侧标识 + virtual void setTagInner(QString sTag); + QString getTagInner(); + virtual void setTagOuter(QString sTag); //允许外界直接传递,进行更改 + QString getTagOuter(); + QString getTips(); + + QString getName(); //Name + QString getNameInner(); + virtual void setNameInner(QString s); + + // 最后的结果输出 + virtual QString getInfoLeft(); + +protected: + + virtual bool isUnableSP(); + +protected: + + // 对应的参数 + iModelInfoBase* m_pDataObj; + QString m_sNameInner; //这是内部的Name,包括流动段相关的1,2,3 + QString m_sTagInner; + QString m_sTagOuter; + + // 父子关系 + QWidget* m_pDlgBase; //承载的Wx + iGridLineItem* m_pParent; //父级节点 + QVector m_vecChildren; //孩子节点 + + // 状态 + bool m_bVisible; + bool m_bActive; + bool m_bExpanded; + + // 20181228与参数载体的readonly不是一回事 + // 允许外界动态修改 + bool m_bReadonly; + + // 位置信息 + QRectF m_rtBounds; + float m_fSplitPos; + +public: + + // 其它常量 + float m_fRowHeight; + float m_fSplitPading; +}; diff --git a/Include/iGui/iGuiGridPty/iGridLineUtils.h b/Include/iGui/iGuiGridPty/iGridLineUtils.h new file mode 100644 index 0000000..8bf50ae --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridLineUtils.h @@ -0,0 +1,132 @@ +#pragma once + +#include "iDlgBase.h" +#include "iResultInfo.h" + +class iModelInfoBase; +class iGridLineItem; + +// 列表区统一处理的Utils(应用于模型选择) +class X_GUI_GRIDPTY_EXPORT iGridLineUtils : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iGridLineUtils(QWidget *parent = 0); + ~iGridLineUtils(); + +public: + + // 初始化 + virtual void initUI(); + + // 对外暴露接口 + void setLineItems(QVector& vec, \ + QWidget* pWxDlg); + bool buildLineUtils(QVector vecDataObjs, \ + QWidget* pWxDlg); + iGridLineItem* buildLineItemOf(iModelInfoBase* pDataObj, \ + iGridLineItem* pParent); + + // 边界相关 + void setBounds(QRectF& rt); + float getUtilHeight(); + + void connectSignalsOf(iGridLineItem* p); + + void bkAllItems(); + QStringList getAllTags(); //不考虑层级 + + void resetLayout(); //重置 + + // 根据名字获取 + iGridLineItem* getItemByPara(QString sPara); + + // 根据名字取数据 + QVariant getItemValueByPara(QString sPara); + + // 清空 + void clearAllItems(); + + // 对Items进行检测,正确输入 + bool checkItems(); + + // 刷新 + void updateItem(iGridLineItem* p); + +private: + + // 搭建过程 + QStringList getParaTypes(QStringList listParas); + iGridLineItem* createAndAddItem(iGridLineItem* pParent, \ + iModelInfoBase* pDataObj, \ + bool bGroup); + void insertItem(int nIndex, iGridLineItem* pItem); + + // 把所有Item从上到下(不考虑层级记录下来) + bool getAllItems(QVector& vec); //不考虑层级 + + // 范围及布局 + void updateLayout(); + void doLayout(); + +protected: + + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent * e); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + + virtual void resizeEvent(QResizeEvent *); + +protected: + + virtual void paintEvent(QPaintEvent*); + void paintGrid(QPainter* pPainter); + +public slots: + + void slotActivateItem(iGridLineItem* p); + void onActiveItemChanged(iGridLineItem* p); + +signals: + + void sigHelpMsg(QString& s); + +protected: + + // 节点操作及属性更改 + GridTickPos hitTest(QPoint pt); + + void expand(iGridLineItem* p); + void collapse(iGridLineItem* p); + + iGridLineItem* getLastActive(); + +public: + + // 组织数据 + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private: + + // 窗体载体 + QWidget* m_pWxDlg; + + // 子项 + QVector m_vecLineItems; + QVector m_vecAllItems;// 从上到下不考虑层级,所有 + iGridLineItem* m_pItemSel; + + // 位置及布局 + QRectF m_rtBounds; + bool m_bNeedLayout; + + // Header + bool m_bHeaderVisible; + + float m_fRowHeight; +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowGroup.h b/Include/iGui/iGuiGridPty/iGridRowGroup.h new file mode 100644 index 0000000..4f2fa28 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowGroup.h @@ -0,0 +1,22 @@ +#pragma once + +#include "iGridRowItem.h" + +// 对于分组,再次进行封装,20240918 wangzg +// 主要是为了后续扩展,比如对于边界的特殊处理 +class X_GUI_GRIDPTY_EXPORT iGridRowGroup : public iGridRowItem +{ + Q_OBJECT + +public: + + explicit iGridRowGroup(iGridRowItem* pParent = NULL); + ~iGridRowGroup(); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); + +protected: +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowGroupBdy.h b/Include/iGui/iGuiGridPty/iGridRowGroupBdy.h new file mode 100644 index 0000000..1cc9821 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowGroupBdy.h @@ -0,0 +1,65 @@ +#pragma once + +#include "iGridRowGroup.h" + +class iBdyInfo; + +// 边界分组的特殊处理 +class X_GUI_GRIDPTY_EXPORT iGridRowGroupBdy : public iGridRowGroup +{ + Q_OBJECT + +public: + + explicit iGridRowGroupBdy(iGridRowItem* pParent = NULL); + ~iGridRowGroupBdy(); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 控件 + virtual void initEditor(); + virtual void setDlgBase(QWidget* p); + virtual void configEditor(); + virtual void initOtherEditors(); + + // 范围 + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + +signals: + + /// @brief 触发边界信息改变,比如修改平行边界,由上下改为左右 + /// @param pItem: (in) 当前的GroupItem,其实即是本类iGridRowGroupBdy + /// @param vvec: (in & out) 边界信息数据 + /// @param bModified: (out) 是否正确触发且vvec发生改变 + void sigBdyDetails(iGridRowItem* pItem, \ + QVector< iBdyInfo* >& vvec, \ + bool& bModified); + +public slots: + + virtual void slotBdyDetails(); + +public: + + // 绘图 + virtual void paint(QPainter* pPainter); + +protected: +// virtual void paintGroup(QPainter* pPainter, int nCountVisible); +// virtual void paintItem(QPainter* pPainter); +// virtual void _paintItemTag(QPainter* pPainter, QString s); + virtual void _paintItemValue(QPainter* pPainter); +// virtual void _paintItemIcon(QPainter* pPainter); +// virtual void _paintItemGrid(QPainter* pPainter); + +private: + +protected: + + QPushButton* m_pBtn; +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItem.h b/Include/iGui/iGuiGridPty/iGridRowItem.h new file mode 100644 index 0000000..2ee0368 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItem.h @@ -0,0 +1,234 @@ +#pragma once + +#include "iDlgBase.h" +#include "iResultInfo.h" +#include "iGuiGridPty_global.h" + +class iUnitGroup; + +// 参数区每一项Item的基类 +class X_GUI_GRIDPTY_EXPORT iGridRowItem : public QObject +{ + Q_OBJECT + +public: + + explicit iGridRowItem(iGridRowItem* pParent = NULL); + ~iGridRowItem(); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 父子关系处理 + virtual void setDlgBase(QWidget* p);//父窗体、位置控制 + iGridRowItem* getParent(); //父 + bool isParentCollapsed(); //父级节点是否折叠 + int appendChild(iGridRowItem* p); //添加孩子 + int getChildCount(); //孩子数目 + int getChildVisibleCount(); //可见的孩子数目 + iGridRowItem* getChildAt(int n); //获取 + void removeAllChilds(); //Clear + bool getAllItems(QVector& vec);//不考虑层级 + int getItemLevel(); //获取层次级别 + iGridRowItem* getActiveItem(); //当前节点及孩子中的Active节点 + +public: + + // 管理子控件 + virtual void initEditor(); + virtual void initOtherEditors(); + virtual void hideEditors(); + virtual void configEditor(); + virtual QString getEditorCss(bool bValid); + virtual QWidget* getMainEditor(); + + // 位置相关Bounds + virtual void setBounds(QRectF& rt); //全局 + virtual QRectF getBounds(); // + virtual QRectF getLeftBounds(); //左 + virtual QRectF getRightBounds_Main();//右 + virtual QRectF getIconBound(); //Icon的Bound + virtual void setSplitPos(float f); //中间分隔 + virtual float getItemHeight(); //当前节点高度,包括孩子 + +public: + + // 绘图 + virtual void paint(QPainter* pPainter); + +protected: + virtual void paintGroup(QPainter* pPainter, int nCountVisible); + virtual void paintItem(QPainter* pPainter); + virtual void _paintItemTag(QPainter* pPainter, QString s); + virtual void _paintItemValue(QPainter* pPainter); + virtual void _paintItemIcon(QPainter* pPainter); + virtual void _paintItemGrid(QPainter* pPainter); + +public: + + // 属性set/get + bool isShowAsResult(); + virtual void setShowAsResult(bool b); + bool isExpanded(); + virtual void setExpanded(bool b); + bool isVisible(); + virtual void setVisible(bool b); + bool isActive(); + virtual void setActive(bool b); + bool isReadonly(); + virtual void setReadonly(bool b); + virtual void onItemDoubleCliked(GridTickPos o); + +public: + + // HitTest + virtual bool hitTest(QPoint pt, GridTickPos& ht, \ + iGridRowItem*& pItem); + virtual bool hitTest_SelfOnly(QPoint pt, GridTickPos& ht, \ + iGridRowItem*& pItem); + +signals: + + void sigUnableSP(bool&); + void sigValueChanged(QString sPara, QVariant o); + /// @brief 触发参数改变,允许外界进行更改 + /// @param o1: 主要数据,m_oRawValue + /// @param o2: 辅助数据,如Cbx的下拉填充内容QStringList + void sigValuePrevChanged(QVariant& o1, QVariant& o2); + void sigActiveItem(iGridRowItem*); + // 获取其它参数当前的数值 + void sigGetValueOf(QString sPara, QVariant& o, bool& bOk); + + // 是否启用正则验证,比如,直角边界,第一个边界要大于井长/2,只有点源才支持 + void sigOuterValidate(QString sPara, QVariant o, bool& bValid, bool& bSet); + +protected slots: + + // QLineEdit 类型的数据change响应 + virtual void slotItemValueChanged(QString s); + virtual void slotItemNeedActivate(bool); + +public: + + // 设置各个参数 + + iParameter* getParameter(); //参数体 + virtual void setParameter(iParameter* p); + + QString getTag(); //左侧标识 + virtual void setTagInner(QString sTag); + QString getTagInner(); + virtual void setTagOuter(QString sTag); //允许外界直接传递,进行更改 + QString getTagOuter(); + QString getTagEx(); //左侧标识,增加一级处理 + QString getTips(); + + QString getName(); //Name + QString getNameInner(); + virtual void setNameInner(QString s); + + // 该基类默认按float进行实现 + virtual bool setCurValue(QVariant o);//现值 + virtual QVariant getCurValue(); + virtual QString getShowValue(); //非激活时显示在右侧的文本 + + // 原值,请在setParameter之前调用 + virtual void setRawValue(QVariant o); + QVariant getRawValue(); + + // 数据范围 + virtual QString getParaScales(); + + // 对于Editor的范围及颜色管理 + virtual void checkAndClr(); + // 获取范围 + virtual bool getMaxMin(float& fMax, float& fMin); + + // 最后的结果输出 + virtual QString getInfoLeft(); + virtual QVariant getInfoRight(); + virtual QString getInfoUnit(); + virtual bool isInputOk(); + virtual bool isValidateOk(float f);//正则验证是否正确 + + // 20240704 新增接口 + // 主要是设计类似流动段这类复合Item的序列化相关 + virtual bool checkAndSetParaValue(QString sPara, QVariant o); + virtual bool checkAndGetParaValue(QString sPara, QVariant& o); + // 返回所有参数,Key为英文ID + virtual bool checkAndGetSubParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + virtual bool checkAndGetSubParaUnits(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + virtual bool checkAndOrgaSubResults(QVector& vec, QString sType); + + +protected: + + // 对于只读等属性的管理 + virtual void openItemPty(); //赋值前打开 + virtual void restoreItemPty();//赋值后恢复 + + virtual bool isUnableSP(); + virtual void activateItemChanged(QVariant o); + +protected: + + // 对应的参数 + iParameter* m_pParameter; + QString m_sNameInner; //这是内部的Name,包括流动段相关的1,2,3 + QString m_sTagInner; + QString m_sTagOuter; + + QVariant m_oRawValue; //原始值 + QString m_sRawUnit; //原始单位 + int m_nDigit; //小数位数 + + iUnitGroup* m_pUnitGroup;//载体 + + // 父子关系 + QWidget* m_pDlgBase; //承载的Wx + iGridRowItem* m_pParent; //父级节点 + QVector m_vecChildren; //孩子节点 + + // 内嵌组件 + QWidget* m_pEditor; + QVector m_vecEditors; + + // 状态 + bool m_bVisible; + bool m_bActive; + bool m_bExpanded; + + // 20181228与参数载体的readonly不是一回事 + // 允许外界动态修改 + bool m_bReadonly; + + // 位置信息 + QRectF m_rtBounds; + float m_fSplitPos; + + // Group模式的背景色 + QColor m_groupBackColor[3]; + + // 图标 + QPixmap m_oPixCollapse; + QPixmap m_oPixExpand; + + // 导出时是否显示,对于组默认不显示,但流动段特殊 + bool m_bShowAsResult; + +public: + + // 其它常量 + float m_fIconWidth; + float m_fIconMarginH; + float m_fIconMarginV; + float m_fRowHeight; + float m_fSplitPading; +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemBa.h b/Include/iGui/iGuiGridPty/iGridRowItemBa.h new file mode 100644 index 0000000..9c021a3 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemBa.h @@ -0,0 +1,20 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// ByteArray +class X_GUI_GRIDPTY_EXPORT iGridRowItemBa : \ + public iGridRowItemUnt +{ + Q_OBJECT + +public: + explicit iGridRowItemBa(iGridRowItem* pParent = NULL); + ~iGridRowItemBa(); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); + +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemBdy.h b/Include/iGui/iGuiGridPty/iGridRowItemBdy.h new file mode 100644 index 0000000..df16129 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemBdy.h @@ -0,0 +1,39 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// 边界 +class X_GUI_GRIDPTY_EXPORT iGridRowItemBdy : + public iGridRowItemUnt +{ + Q_OBJECT + +public: + + explicit iGridRowItemBdy(iGridRowItem* pParent = NULL); + ~iGridRowItemBdy(); + + // 初始化子控件 + void initEditor(); + + // 设置父窗体、为了Editor位置控制 + void setDlgBase(QWidget* p); + +public: + + // 范围 + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + virtual QRectF getRightBounds_Bdy(); + virtual QRectF getRightBounds_Unt(); + + // 结果 + virtual QVariant getInfoRight(); + virtual QString getInfoUnit(); + virtual QString getShowValue(); //非激活时显示在右侧的文本 + int getInfoBdy(); + +private: + + QComboBox* m_pCbxTypes; +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemCbx.h b/Include/iGui/iGuiGridPty/iGridRowItemCbx.h new file mode 100644 index 0000000..ae18b04 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemCbx.h @@ -0,0 +1,59 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// 下拉框 +class X_GUI_GRIDPTY_EXPORT iGridRowItemCbx : + public iGridRowItemUnt +{ + Q_OBJECT + +public: + explicit iGridRowItemCbx(iGridRowItem* pParent = NULL); + ~iGridRowItemCbx(); + + virtual void setParameter(iParameter* p); + + // 初始化子控件 + virtual void initEditor(); + virtual void configEditor(); + + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + + // 外界传递 + virtual bool setCurValue(QVariant o); + virtual QVariant getCurValue(); + virtual QString getShowValue(); + + // 数据范围 + virtual QString getParaScales(); + + // 双击 + virtual void onItemDoubleCliked(GridTickPos o); + + // 其它 + virtual void setActive(bool b); + +public slots: + + // 改变 + virtual void slotCbxCurItemChanged(int); + + //void slotGetCbxLists(QStringList& list, int& nCur, bool& b); + + +protected: + + // 填充 + virtual void fillCbxItems(); + + // 结果 + virtual QVariant getInfoRight(); + virtual QString getInfoUnit(); + +protected: + + QComboBox* m_pCbxTypes; + bool m_bEnableSP; //临时变量 +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemCbxClasp.h b/Include/iGui/iGuiGridPty/iGridRowItemCbxClasp.h new file mode 100644 index 0000000..ea2c17c --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemCbxClasp.h @@ -0,0 +1,77 @@ +#pragma once + +#include "iGridRowItemCbx.h" + +// 双下拉(扣型+公母) +class X_GUI_GRIDPTY_EXPORT iGridRowItemCbxClasp : + public iGridRowItemCbx +{ + Q_OBJECT + +public: + explicit iGridRowItemCbxClasp(iGridRowItem* pParent = NULL); + ~iGridRowItemCbxClasp(); + + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + + virtual void setParameter(iParameter* p); + + // 初始化子控件 + virtual void initEditor(); + virtual void configEditor(); + virtual void setDlgBase(QWidget* p); + + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + QRectF getRightBounds_BP();//公母 + QRectF getRightBounds_Btn();//按钮 + + // 外界传递 + virtual bool setCurValue(QVariant o); + virtual QVariant getCurValue(); + virtual QString getShowValue(); //非激活时显示在右侧的文本 + + // 隐藏公母 + void setVisibleBP(bool b); + + // 数据范围 + virtual QString getParaScales(); + + // 双击 + virtual void onItemDoubleCliked(GridTickPos o); + + // 其它 + virtual void setActive(bool b); + +public slots: + + // 改变 + //void slotCbxCurItemChanged(int); + //void slotGetCbxLists(QStringList& list, int& nCur, bool& b); + + void slotChangeType(); + +signals: + + void sigGetNewType(QString sPara, QString& sType, bool& b); + +protected: + + // 填充 + void fillCbxItems(); + void setCurrentTextOf(QComboBox* pCbx, QString s); + + // 结果 + virtual QVariant getInfoRight(); + virtual QString getInfoUnit(); + +private: + + QComboBox* m_pCbxTypeExs; + QPushButton* m_pBtn; + bool m_bVisibleBP; //公母是否显示,在软件中动态修改 +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemDateTime.h b/Include/iGui/iGuiGridPty/iGridRowItemDateTime.h new file mode 100644 index 0000000..794eb92 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemDateTime.h @@ -0,0 +1,49 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// 时间+日期 +class X_GUI_GRIDPTY_EXPORT iGridRowItemDateTime : \ + public iGridRowItemUnt +{ + Q_OBJECT + +public: + explicit iGridRowItemDateTime(iGridRowItem* pParent = NULL); + ~iGridRowItemDateTime(); + + // 初始化 + virtual void setParameter(iParameter* p); + virtual void initEditor(); + virtual void configEditor(); + virtual QString getEditorCss(bool bValid); + + // 数据范围 + QString getParaScales(); + + // 该基类默认按float进行实现 + virtual bool setCurValue(QVariant o);//现值 + virtual QVariant getCurValue(); + virtual QString getShowValue(); + + // 范围 + virtual void setBounds(QRectF& rt); + virtual QRectF getRightBounds_Main();//右 + + // 其它 + virtual void setActive(bool b); + +public slots: + + void slotDateTimeChanged(QDateTime dt); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); + +protected: + + QTimeEdit* m_pTime; + +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemFloat.h b/Include/iGui/iGuiGridPty/iGridRowItemFloat.h new file mode 100644 index 0000000..6c22423 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemFloat.h @@ -0,0 +1,19 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// Float +class X_GUI_GRIDPTY_EXPORT iGridRowItemFloat : \ + public iGridRowItemUnt +{ + Q_OBJECT + +public: + explicit iGridRowItemFloat(iGridRowItem* pParent = NULL); + ~iGridRowItemFloat(); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemImg.h b/Include/iGui/iGuiGridPty/iGridRowItemImg.h new file mode 100644 index 0000000..52827dd --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemImg.h @@ -0,0 +1,62 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// Img +class X_GUI_GRIDPTY_EXPORT iGridRowItemImg : \ + public iGridRowItemUnt +{ + Q_OBJECT + +public: + explicit iGridRowItemImg(iGridRowItem* pParent = NULL); + ~iGridRowItemImg(); + + // 初始化 + virtual void setDlgBase(QWidget* p); + virtual void setParameter(iParameter* p); + virtual void initEditor(); + virtual void configEditor(); + virtual QString getEditorCss(bool bValid); + + // Image处理 + bool dealwithImg(QVariant& o); + bool parseFromFile(QString s, QImage& img, QByteArray& ba); + + // 数据范围 + QString getParaScales(); + + // 该基类默认按float进行实现 + virtual bool setCurValue(QVariant o);//现值 + virtual QVariant getCurValue(); + + // 范围 + virtual void setBounds(QRectF& rt); + virtual QRectF getRightBounds_Main();//右 + virtual QRectF getRightBounds_Unt(); + + // 双击 + virtual void onItemDoubleCliked(GridTickPos o); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); + virtual void _paintItemValue(QPainter* pPainter); + + // ByteArray Image + static bool imgToBa(QImage& img, QByteArray& ba); + static bool baToImg(QImage& img, QByteArray& ba); + +public slots: + + void slotImgBrowse(); + +protected: + + // 借助QLabel显示图片 + //m_oRawValue为QByteArray + QImage m_oImg; //其实只是为了方便 + + QPushButton* m_pBtn; +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemInt.h b/Include/iGui/iGuiGridPty/iGridRowItemInt.h new file mode 100644 index 0000000..ae6fbdb --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemInt.h @@ -0,0 +1,19 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// Int +class X_GUI_GRIDPTY_EXPORT iGridRowItemInt : \ + public iGridRowItemUnt +{ + Q_OBJECT + +public: + explicit iGridRowItemInt(iGridRowItem* pParent = NULL); + ~iGridRowItemInt(); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemSeg.h b/Include/iGui/iGuiGridPty/iGridRowItemSeg.h new file mode 100644 index 0000000..215e44b --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemSeg.h @@ -0,0 +1,66 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// 流动段数、产液段数 +class iParameterSeg; +class X_GUI_GRIDPTY_EXPORT iGridRowItemSeg : + public iGridRowItemUnt +{ + Q_OBJECT + +public: + + explicit iGridRowItemSeg(iGridRowItem* pParent = NULL); + ~iGridRowItemSeg(); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 控件 + virtual void initEditor(); + virtual void configEditor(); + virtual void initOtherEditors(); + + // 范围 + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + + // 关联绑定的Item,长度 + virtual void setLenAll(float f); + virtual void setBrotherItem(iGridRowItem* p); + // 刷新 + // n:段数 + virtual void freshSubChild(int n, bool bBySegCount); + + // 对于Editor的范围及颜色管理 + virtual void checkAndClr(); + virtual QString getEditorCss(bool bValid); + virtual bool isInputOk(); + + // 外界传递 + virtual bool setCurValue(QVariant o); + virtual QVariant getCurValue(); + +public slots: + + virtual void slotSegCountChanged(int n); + virtual void slotItemLenthChanged(QString, QVariant); + +protected: + + // 对于需要调整的,计算其默认的位置 + virtual VecFloat calDefaultPoss(int n, float fLenAll); + + // 结果 + virtual QVariant getInfoRight(); + virtual QString getInfoUnit(); + +protected: + + iGridRowItem* m_pBrotherItem; //关联的长度Item + float m_fLenAll; +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemSegEx.h b/Include/iGui/iGuiGridPty/iGridRowItemSegEx.h new file mode 100644 index 0000000..8ab2237 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemSegEx.h @@ -0,0 +1,105 @@ +#pragma once + +#include "iGridRowItemSeg.h" + +// 流动段数、产液段数 +// 注:界面上显示所有子项,为各自的合计,比如裂缝总长度 +class iParameterSegEx; +class X_GUI_GRIDPTY_EXPORT iGridRowItemSegEx : + public iGridRowItemSeg +{ + Q_OBJECT + +public: + + explicit iGridRowItemSegEx(iGridRowItem* pParent = NULL); + ~iGridRowItemSegEx(); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 控件 + virtual void initEditor(); + virtual void setDlgBase(QWidget* p); + virtual void configEditor(); + virtual void initOtherEditors(); + + // 范围 + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + + // 关联绑定的Item,长度 + virtual void setLenAll(float f); + virtual void setBrotherItem(iGridRowItem* p); + + // 刷新 + // n:段数 + virtual void freshSubChild(int n, bool bBySegCount); + void recacheParas(int n, iParameterSegEx* p, bool bBySegCount); + void resetSubItems(int n, iParameterSegEx* p); + void freshChildsWithSums(bool bByLen); //当前参数 + QMap sumCurParas(); + + // 对于Editor的范围及颜色管理 + virtual void checkAndClr(); + virtual QString getEditorCss(bool bValid); + virtual bool isInputOk(); + + // 外界传递 + virtual bool setCurValue(QVariant o); + virtual QVariant getCurValue(); + + // 数据范围,可以在扩展tips信息 + virtual QString getParaScales(); + + // 20240704 新增接口 + // 主要是设计类似流动段这类复合Item的序列化相关 + virtual bool checkAndSetParaValue(QString sPara, QVariant o); + virtual bool checkAndGetParaValue(QString sPara, QVariant& o); + // 返回所有参数,Key为英文ID + virtual bool checkAndGetSubParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + virtual bool checkAndGetSubParaUnits(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + virtual bool checkAndOrgaSubResults(QVector& vec, QString sType); + +signals: + + /// @brief 触发子参数列表改变,比如调用水平井段数编辑功能,目前只限于 iGridRowItemSegEx 类型的信号传递 + /// @param sSegName: (in) 基准参数,为英文标识,如流动段数:"Nq" + /// @param vvec: (in & out) 子参数数据,注意:key为英文,如"NqX","NqL","NqQ"之类,与xml配置文件严格对应 + /// @param dWellLen: (in) 水平井长度 + /// @param bModified: (out) 是否正确触发且vvec发生改变 + void sigSegMore(const QString sSegName, \ + QVector< QMap >& vvec, \ + const double dWellLen, \ + bool& bModified); + +public slots: + + virtual void slotSegCountChanged(int n); + virtual void slotItemLenthChanged(QString, QVariant); + + virtual void slotSegMore(); + +private: + + // 对于需要调整的,计算其默认的位置 + virtual VecFloat calDefaultPoss(int n, float fLenAll); + + // 结果 + virtual QVariant getInfoRight(); + virtual QString getInfoUnit(); + +protected: + + QPushButton* m_pBtn; + + QVector< QMap > m_vvecSubParas; + +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemStr.h b/Include/iGui/iGuiGridPty/iGridRowItemStr.h new file mode 100644 index 0000000..2ee2332 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemStr.h @@ -0,0 +1,53 @@ +#pragma once + +#include "iGridRowItemUnt.h" + +// 字符串 +class X_GUI_GRIDPTY_EXPORT iGridRowItemStr : \ + public iGridRowItemUnt +{ + Q_OBJECT + +public: + explicit iGridRowItemStr(iGridRowItem* pParent = NULL); + ~iGridRowItemStr(); + + // 设置 + virtual void setParameter(iParameter* p); + + // 控件 +// virtual void initEditor(); + virtual void configEditor(); + + // 对于Editor的范围及颜色管理 +// virtual void checkAndClr(); +// QString getEditorCss(bool bValid); + virtual bool isInputOk(); + virtual bool isValidateOk(float f);//正则验证是否正确 + virtual void slotItemValueChanged(QString s); + + // 数据范围 + virtual QString getParaScales(); + + // 该基类默认按float进行实现 + virtual bool setCurValue(QVariant o);//现值 + virtual QVariant getCurValue(); + + // 范围 + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + virtual QRectF getRightBounds_Unt(); + + // 结果 + virtual QVariant getInfoRight(); + virtual void setInfoRight(QVariant& o); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); + +protected: + + QString m_sText; //文本串 +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowItemUnt.h b/Include/iGui/iGuiGridPty/iGridRowItemUnt.h new file mode 100644 index 0000000..97d52d5 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowItemUnt.h @@ -0,0 +1,28 @@ +#pragma once + +#include "iGridRowItem.h" + +// 对于有单位的生成,目前默认所有的均有单位,为了对齐 +class X_GUI_GRIDPTY_EXPORT iGridRowItemUnt : public iGridRowItem +{ + Q_OBJECT + +public: + explicit iGridRowItemUnt(iGridRowItem* pParent = NULL); + ~iGridRowItemUnt(); + + // 范围 + virtual void setBounds(QRectF& rt);//全局 + virtual QRectF getRightBounds_Main();//右 + virtual QRectF getRightBounds_Unt(); + +protected: + + // 绘图 + virtual void paint(QPainter* pPainter); + void _paintItemUnit(QPainter* pPainter, QString s); + +protected: + + QString m_sUnit; +}; diff --git a/Include/iGui/iGuiGridPty/iGridRowUtils.h b/Include/iGui/iGuiGridPty/iGridRowUtils.h new file mode 100644 index 0000000..dba085b --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGridRowUtils.h @@ -0,0 +1,215 @@ +#pragma once + +#include "iDlgBase.h" +#include "iResultInfo.h" +#include "iGridRowItemUnt.h" + +class iBdyInfo; + +// 参数区统一处理的Utils +class X_GUI_GRIDPTY_EXPORT iGridRowUtils : public iDlgBase//QAbstractScrollArea +{ + Q_OBJECT + +public: + + explicit iGridRowUtils(); + ~iGridRowUtils(); + +public: + + // 初始化 + virtual void initUI(); + + // 对外暴露接口 + bool buildRowUtils(QStringList listParas, \ + QStringList& listParaTags, \ + bool bDnMode, \ + QWidget* pWxDlg); + void setParaItems(QVector& vec, \ + bool bDnMode, \ + QWidget* pWxDlg); + void setBounds(QRectF& rt); + float getUtilHeight(); + void connectSignalsOf(iGridRowItem* p); + void bkAllItems(); + QStringList getAllTags(); //不考虑层级 + void resetLayout(); //流动段增减后重置 + // 根据名字获取 + iGridRowItem* getItemByPara(QString sPara); + // 根据名字取数据 + QVariant getItemValueByPara(QString sPara); + + // 查询并处理 UseMdoe == 3 的参数,初始不显示 + void dealwithHide(bool bHideMode, bool& bItemChanged); + + // 查询并处理 多相/单相切换 的参数,初始不显示 + void deawithMpMode(bool bMultiPhase, bool& bItemChanged); + + void dealwithItemOfs(ParaUseMode o, bool bHideMode, bool& bItemChanged); + + // 清空 + void clearAllItems(); + + // Header + void setHeaderVisible(bool b); + bool isHeaderVisible(); + + // 对Items进行检测,正确输入 + bool checkItems(); + + // 刷新 + void updateItem(iGridRowItem* p); + +private: + + // 搭建过程 + QStringList getParaTypes(QStringList listParas); + bool createAndAddItem(iGridRowItem* pParent, \ + iParameter* p, QString sPara); + iGridRowItem* createWithSegOlds(iGridRowItem* pParent, \ + iParameter* p, QString sPara);//兼容原先,没有配置ParaType + void insertItem(int nIndex, iGridRowItem* pItem); + + + // 这是一些特殊处理,就是创建完成所有Item后,相关的关联 + // 如 产液段与有效长度 + void bindItems(); + + // 把所有Item从上到下(不考虑层级记录下来) + bool getAllItems(QVector& vec); //不考虑层级 + + + // 范围及布局 + void setSplitPos(float f); + void updateLayout(); + void doLayout(); + + +protected: + + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent * e); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + + virtual void resizeEvent(QResizeEvent *); + +protected: + + virtual void paintEvent(QPaintEvent *); + + void paintGrid(QPainter* pPainter); + void paintHeader(QPainter* pPainter); + +public slots: + + void slotActivateItem(iGridRowItem* p); + void onActiveItemChanged(iGridRowItem* p); + void slotValuePrevChanged(QVariant& o1, QVariant& o2); + + void slotGetValueOf(QString sPara, QVariant& o, bool& bOk); + +signals: + + void sigHelpMsg(QString& s); + // TODO not use + // void sigAppendOtherItems(QVector& vec); + /// @brief 触发参数改变,允许外界进行更改 + /// @param sName: 参数名称 + /// @param o1: 主要数据,m_oRawValue + /// @param o2: 辅助数据,如Cbx的下拉填充内容QStringList + /// @param bSet:是否已经正确设置 + void sigItemPrevChanged(QString sName, \ + QVariant& o1, QVariant& o2, \ + bool& bSet); + + // 是否启用正则验证,比如,直角边界,第一个边界要大于井长/2,只有点源才支持 + void sigOuterValidate(QString sPara, QVariant o, bool& bValid, bool& bSet); + + + /// @brief 触发子参数列表改变,比如调用水平井段数编辑功能,目前只限于 iGridRowItemSegEx 类型的信号传递 + /// @param sSegName: (in) 基准参数,为英文标识,如流动段数:"Nq" + /// @param vvec: (in & out) 子参数数据,注意:key为英文,如"NqX","NqL","NqQ"之类,与xml配置文件严格对应 + /// @param dWellLen: (in) 水平井长度 + /// @param bModified: (out) 是否正确触发且vvec发生改变 + void sigSegMore(const QString sSegName, \ + QVector< QMap >& vvec, \ + const double dWellLen, \ + bool& bModified); + + /// @brief 触发边界信息改变,比如修改平行边界,由上下改为左右 + /// @param pItem: (in) 当前的GroupItem,其实即是本类iGridRowGroupBdy + /// @param vvec: (in & out) 边界信息数据 + /// @param bModified: (out) 是否正确触发且vvec发生改变 + void sigBdyDetails(iGridRowItem* pItem, \ + QVector< iBdyInfo* >& vvec, \ + bool& bModified); + +protected: + + // 节点操作及属性更改 + GridTickPos hitTest(QPoint pt); + + void expand(iGridRowItem* p); + void collapse(iGridRowItem* p); + + iGridRowItem* getLastActive(); + + // 位置记录 + int getPreferedSplitX(); + void saveSplitX(); + void loadSplitX(); + +public: + + // 组织数据 + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 组织结果数据,注:vec不进行clear,由调用方自行clear + virtual bool organizeResults(QVector& vec, QString sType); + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, QVariant o); + virtual bool getParaValue(QString sPara, QVariant& o); + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + virtual bool getAllParaUnits(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + // 返回所有的跟模型相关的边界参数的类型,封闭或定压 + // 封闭:0 + // 定压:1 + bool getBdyInfos(QMap& map); + +private: + + // 窗体载体 + QWidget* m_pWxDlg; + + // 子项 + QVector m_vecParaItems; + QVector m_vecAllItems;// 从上到下不考虑层级,所有 + iGridRowItem* m_pItemSel; + + // 位置及布局 + QRectF m_rtBounds; + bool m_bNeedLayout; + + // 分割线 + bool m_bHitSplit; + float m_fSplitPos; + + // Header + bool m_bHeaderVisible; + + float m_fRowHeight; + + bool m_bUnableSP; +}; diff --git a/Include/iGui/iGuiGridPty/iGuiGridPty_global.h b/Include/iGui/iGuiGridPty/iGuiGridPty_global.h new file mode 100644 index 0000000..c21b5d2 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iGuiGridPty_global.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#if defined(X_GUI_GRIDPTY_LIBRARY) +# define X_GUI_GRIDPTY_EXPORT Q_DECL_EXPORT +#else +# define X_GUI_GRIDPTY_EXPORT Q_DECL_IMPORT +#endif + +// 为了复用,暂时放在此处,后续根据需要调整 +// 鼠标HitTest的位置信息 +enum GridTickPos +{ + GTP_None = 0, //None + GTP_Expander, + GTP_LeftCol, + GTP_RightCol, + GTP_Split +}; + + diff --git a/Include/iGui/iGuiGridPty/iResultInfo.h b/Include/iGui/iGuiGridPty/iResultInfo.h new file mode 100644 index 0000000..a0e1da6 --- /dev/null +++ b/Include/iGui/iGuiGridPty/iResultInfo.h @@ -0,0 +1,25 @@ +#pragma once + +#include "iGuiGridPty_global.h" + +// 该类是为了把属性参数显示在处理解释结果页面之中 +class X_GUI_GRIDPTY_EXPORT iResultInfo +{ +public: + + iResultInfo(); + +public: + + QString m_sName; //名称 + QVariant m_oValue; //数值 + QString m_sUnit; //单位 + + QString m_sType; //从属类型,分类 + + bool m_bValid; //是否有效 + bool m_bVisible; //是否可见 + + + QString m_sImg; //对应的Image文件 +}; diff --git a/Include/iGui/iGuiNavi/iBaseNavi.h b/Include/iGui/iGuiNavi/iBaseNavi.h new file mode 100644 index 0000000..f0d8982 --- /dev/null +++ b/Include/iGui/iGuiNavi/iBaseNavi.h @@ -0,0 +1,60 @@ +#pragma once + +#include "iDlgBase.h" + +#include "iGuiNavi_global.h" + +class X_GUI_NAVI_EXPORT iBaseNavi : public iDlgBase +{ + Q_OBJECT + +public: + explicit iBaseNavi(QString sCur, \ + bool bNeedOpenProj, \ + QWidget *parent = 0); + ~iBaseNavi(); + + // 初始化 + virtual void initUI(); + + // 返回结果 + QString getModelOption(); + QString getProjDir(); + bool isRequireProjOpened(int& nIndex, \ + QString& sUrl); + +private slots: + // 选中某项 + void slotModelItemClicked(); + // 启用同步打开项目 + void slotCbxChecked(); + // 项目下拉changed + void slotPrjCmxChanged(int n); + +protected: + + // 布局序列化 + void initUI_Tags(); + void initUI_Buttons(); + void initUI_Projs(); + void addOneHorLine(); + void addOneSpacer(int n = -1); + + // 项目下拉 + void fillProj(QComboBox* p); + QString getCurProj(); + + // 重载为了背景 + virtual void paintEvent(QPaintEvent *); + +private: + QVBoxLayout* m_pMainLayout; + QCheckBox* m_pCbxProj; + QComboBox* m_pCmxProj; + + QMap m_mapNames; + + QString m_sOption; + QString m_sProjDir; + bool m_bNeedOpenProj; +}; diff --git a/Include/iGui/iGuiNavi/iGuiNavi_global.h b/Include/iGui/iGuiNavi/iGuiNavi_global.h new file mode 100644 index 0000000..c9e35e8 --- /dev/null +++ b/Include/iGui/iGuiNavi/iGuiNavi_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(X_GUI_NAVI_LIBRARY) +# define X_GUI_NAVI_EXPORT Q_DECL_EXPORT +#else +# define X_GUI_NAVI_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iGui/iGuiRibbon/iGuiRibbon_global.h b/Include/iGui/iGuiRibbon/iGuiRibbon_global.h new file mode 100644 index 0000000..97286d1 --- /dev/null +++ b/Include/iGui/iGuiRibbon/iGuiRibbon_global.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#if defined(I_GUI_RIBBON_LIBRARY) +# define I_GUI_RIBBON_EXPORT Q_DECL_EXPORT +#else +# define I_GUI_RIBBON_EXPORT Q_DECL_IMPORT +#endif diff --git a/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlCmd.h b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlCmd.h new file mode 100644 index 0000000..7a6e8a8 --- /dev/null +++ b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlCmd.h @@ -0,0 +1,61 @@ +#pragma once + +#include "Defines.h" +#include "ZxBaseUtil.h" + +#include "iXmlBaseItem.h" +#include "iGuiRibbon_global.h" + +// Ribbon上展示的控件类型 +enum RibbonCtrlType +{ + RCT_Button = 0, //0——默认Button + RCT_ButtonWithMenu, //1——带下拉菜单Button + RCT_ComboBox, //2——ComboBox + RCT_CheckBox, //3——CheckBo + RCT_Radio, //4——RadioButton + RCT_Text, //5——Text + RCT_Label, //6——Label + RCT_ListWx, //7——ListWidget + RCT_LineEdit, //8——LineEdit + RCT_Unknown +}; + +// Cmd +class I_GUI_RIBBON_EXPORT iRibbonXmlCmd : public iXmlBaseItem +{ +public: + + iRibbonXmlCmd(QObject* parent = 0); + ~iRibbonXmlCmd(); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index + // 并且返回下一个index + virtual int allocateInfo(int nIndex); + +protected: + + virtual void initXmlTags(); + +public: + +// QString m_sID; //ID +// QString m_sName; //名称 + RibbonCtrlType m_oType; + bool m_bIconOnly; + + QString m_sAlias; //别名 + QString m_sIcon; //图标 + QString m_sShortKey;//快捷键 + QRect m_rtBound; //Bounds + QString m_sExtInfo;//扩展信息,如操作对象的表名,下拉选项等 + QString m_sExtNames;//扩展信息对应的Name,如下拉button对应的Name + QString m_sTips; //Tips + + QString m_sMdiType; + + bool m_bVisible; +}; + +typedef QVector vecRibbonCmdPtr; diff --git a/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlGroup.h b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlGroup.h new file mode 100644 index 0000000..0c0a9d6 --- /dev/null +++ b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlGroup.h @@ -0,0 +1,32 @@ +#pragma once + +#include "iRibbonXmlCmd.h" + +// Cmd group +class I_GUI_RIBBON_EXPORT iRibbonXmlGroup : public iXmlBaseItem +{ +public: + + iRibbonXmlGroup(QObject* parent = 0); + ~iRibbonXmlGroup(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + +protected: + + virtual void initXmlTags(); + +public: + +// QString m_sID; //ID +// QString m_sName; //名称 + QString m_sAlias; //别名 + + vecRibbonCmdPtr m_vecChildren; +}; + +typedef QVector vecRibbonGroupPtr; diff --git a/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlTab.h b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlTab.h new file mode 100644 index 0000000..d8208ab --- /dev/null +++ b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlTab.h @@ -0,0 +1,35 @@ +#pragma once + +#include "iRibbonXmlGroup.h" + +// Tab contains multiple cmd groups +class I_GUI_RIBBON_EXPORT iRibbonXmlTab : public iXmlBaseItem +{ +public: + + iRibbonXmlTab(QObject* parent = 0); + ~iRibbonXmlTab(); + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + +protected: + + virtual void initXmlTags(); + +public: + +// QString m_sID; //ID +// QString m_sName; //名称 + QString m_sAlias; //别名 + bool m_bVisible; //是否可见 + bool m_bFileMode; //是否文件Menu模式,1 or 0 + QString m_sTips; //Tips + + vecRibbonGroupPtr m_vecChildren; +}; + +typedef QVector vecRibbonTabPtr; diff --git a/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlUtils.h b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlUtils.h new file mode 100644 index 0000000..f2543c8 --- /dev/null +++ b/Include/iGui/iGuiRibbon/iRibbonXml/iRibbonXmlUtils.h @@ -0,0 +1,15 @@ +#pragma once + +#include "iXmlUtilBase.h" +#include "iRibbonXmlTab.h" +#include "iGuiRibbon_global.h" + +// parser +class I_GUI_RIBBON_EXPORT iRibbonXmlUtils : public iXmlUtilBase +{ +public: + + // 加载xml + static bool loadStruct(vecRibbonTabPtr& vecChildNodes, + QString sFile); +}; diff --git a/Include/iGui/iGuiRibbon/iWxMenuItem.h b/Include/iGui/iGuiRibbon/iWxMenuItem.h new file mode 100644 index 0000000..1eb3bcf --- /dev/null +++ b/Include/iGui/iGuiRibbon/iWxMenuItem.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include "iGuiRibbon_global.h" + +// 具体的某个功能菜单项 +class I_GUI_RIBBON_EXPORT iWxMenuItem : + public QWidget +{ + Q_OBJECT + +public: + iWxMenuItem(QString sIcon, QString sText, QWidget *parent = 0); + ~iWxMenuItem(); + +protected: + virtual void paintEvent(QPaintEvent* e); + +private: +}; diff --git a/Include/iGui/iGuiRibbon/iWxRibbon.h b/Include/iGui/iGuiRibbon/iWxRibbon.h new file mode 100644 index 0000000..3cda7c5 --- /dev/null +++ b/Include/iGui/iGuiRibbon/iWxRibbon.h @@ -0,0 +1,183 @@ +#pragma once + +#include "iDlgBaseEx.h" +#include "iRibbonXmlTab.h" +#include "iGuiRibbon_global.h" + +namespace Ui { +class iWxRibbon; +} + +class QMenu; + +class I_GUI_RIBBON_EXPORT iWxRibbon : public iDlgBaseEx +{ + Q_OBJECT + +public: + explicit iWxRibbon(QWidget *parent = 0); + ~iWxRibbon(); + + void initUI(); + + // 类Wps文件模式定制 + void setWpsLike(bool b); + + // 返回部分指针变量 + vecRibbonTabPtr* getRibbonStruts(); + QVector* getSubCtrls(); + QVector* getMenuActions(); + + // 根据辅助信息返回cmd + iRibbonXmlCmd* getCmdByExtInfo(QString sExtInfo); + + // 根据ID返回cmd + iRibbonXmlCmd* getCmdByID(QString sID); + + //ZXF202409得到按钮(为了更新按钮的子项例如窗口个数管理) + QWidget* getSubCtrl(QString sID); + + //更新按钮(主要是子项) + bool refreshSubCtrl(QString sID, QStringList listSubWnds, QVector vecShows); + + // 最近打开 + bool refreshRecentProjects(QString& sPath); //最近打开 + bool fillUIOfRecentProjects(); //更新最近打开菜单项 + bool removeFromRecentProjects(QString sUrl); + +protected: + + // paint + virtual void paintEvent(QPaintEvent *); + +private slots: + + void on_tabWxMain_tabCloseRequested(int index); + void on_tabWxMain_currentChanged(int index); + void on_tabWxMain_customContextMenuRequested(const QPoint &pos); + + void slotTabItemDoubleClicked(int n); + void slotGroupActivated(int n); + + void slotBtnClicked(); //Btn + void slotMenuItemClicked(); //文件菜单Item + void slotListCtrlIndexChanged(int); //Combox ListWx + void slotCheckCtrlClicked(bool); //CheckBox, RadioBox + + + void slotFileClicked(); //File + + void slotOpentRecent(); + +signals: + + /// @title File按钮信号触发 + void sigRibbonFileActivated(); + + /// @title Ribbon信号触发 + /// @param pCtrl触发的子控件 + /// @param pInfo关联的Ribbon配置信息(来自xml) + void sigRibbonActioned(QWidget* pCtrl, + iRibbonXmlCmd* pInfo, + QVariant o); + + /// @title Ribbon文件菜单信号触发 + /// @param sID菜单ID + /// @param sName菜单名称 + void sigRibbonFileMenuClicked(QString sID, QString sName); + + /// @title 触发信号由外界处理最近文档 + void sigFileRecentActivated(QString sUrl); + + /// @title Ribbon信号触发 + /// @param pCtrl触发的子控件 + /// @param pInfo关联的Ribbon配置信息(来自xml) + /// @param listValues显示部分 + /// @param listIDs + void sigRibbonGetListValues(QWidget* pCtrl, + iRibbonXmlCmd* pInfo, + QStringList& listValues, + QStringList& listIDs, + int& nCurSel); + void sigRibbonListWxCurChanged(QWidget* pCtrl, + iRibbonXmlCmd* pInfo, + int nCurSel); + void sigRibbonCheckWxClicked(QWidget* pCtrl, + iRibbonXmlCmd* pInfo, + bool bSelect); + + // 某一Group被激活 + void sigRibbonGroupActivated(iRibbonXmlGroup* pGroup); + + // 20190425 + // 允许外界对FileMenu进行调整 + // 触发此信号时,pMenu已经填入xml中配置的菜单项 + void sigAdjustFileMenu(QMenu*& pMenu); + +private: + + // load Xml And Ini + void loadIniInfos(); + void loadXmlStructs(); + + // 初始化 + void initUI_TabWx(); + void initUI_Menu(QMenu*& pMenu); + QWidget* createTabBy(iRibbonXmlTab* pTab); + QWidget* createGroupBy(iRibbonXmlGroup* pGroup); + QWidget* createCmdBy(iRibbonXmlCmd* pCmd); + QWidget* createCmdBy_Btn(iRibbonXmlCmd* pCmd); + QWidget* createCmdBy_Combo(iRibbonXmlCmd* pCmd); + QWidget* createCmdBy_Check(iRibbonXmlCmd* pCmd); + QWidget* createCmdBy_Radio(iRibbonXmlCmd* pCmd); + QWidget* createCmdBy_Text(iRibbonXmlCmd* pCmd); + QWidget* createCmdBy_Label(iRibbonXmlCmd* pCmd); + QWidget* createCmdBy_ListWx(iRibbonXmlCmd* pCmd); + + //新增加边界框 + QWidget* createCmdBy_LineEdit(iRibbonXmlCmd* pCmd); + + bool dealwithCmdSubBy(iRibbonXmlCmd* pCmd, QToolButton*& pBtn); + + // 切换正常模式和简缩模式 + void swapTabMode(); // + + // 绘制Logo + void drawAppInfo(QPainter* painter); + + // 获取当前Tab页中的所有Group的宽度 + int getCurTabValidWidth(); + + // 虚拟按钮的响应 + // 如果返回true,则不再触发信号,否则触发 + virtual bool runByVirtualBtn(); + +private: + + Ui::iWxRibbon *ui; + + // 简缩模式相关 + bool m_bSimple; + int m_nLastSel; + + // 类Wps文件模式定制 + bool m_bWpsLike; + + // 配置化结构体 + vecRibbonTabPtr m_vecTabXmls; + + // 模块相关,从ini中读取出来 + QString m_sIcon; + QString m_sAppDescCH; + QString m_sAppDescEN; + + // 所有的控件 + QVector m_vecSubCtrls; + QVector m_vecMenuActions; + + // 最近打开项目 + enum { MaxRecentProjects = 5 }; + QAction* m_oRecentProjectActs[MaxRecentProjects]; + QStringList m_listRencentProjects; + QMenu* m_pMenuRecent; +}; diff --git a/Include/iGui/iGuiSplash/iGuiSplash_global.h b/Include/iGui/iGuiSplash/iGuiSplash_global.h new file mode 100644 index 0000000..697b8f2 --- /dev/null +++ b/Include/iGui/iGuiSplash/iGuiSplash_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(I_GUI_SPLASH_LIBRARY) +# define I_GUI_SPLASH_EXPORT Q_DECL_EXPORT +#else +# define I_GUI_SPLASH_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/iGui/iGuiSplash/iSplashObj.h b/Include/iGui/iGuiSplash/iSplashObj.h new file mode 100644 index 0000000..3534e9c --- /dev/null +++ b/Include/iGui/iGuiSplash/iSplashObj.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include "iGuiSplash_global.h" + +class I_GUI_SPLASH_EXPORT iSplashObj +{ +// Q_OBJECT + +public: + +public: + explicit iSplashObj(); + ~iSplashObj(); + + // 设置闪屏时长,单位ms毫秒 + void setTimeSpan(int ms); + + // 设置文件 + void setSplashFiles(QStringList list); + + // 开启或关闭 + virtual void start(); + virtual void finish(); +// virtual void setBounds(); + virtual void dealAppEvents(); + +protected: + + // 设置闪屏时长,单位ms毫秒 + // 默认2000 + int m_nTimeSpan; + + // 设置文件,可以一个或多个 + QStringList m_listFiles; +}; diff --git a/Include/iGui/iGuiSplash/iSplashObjGif.h b/Include/iGui/iGuiSplash/iSplashObjGif.h new file mode 100644 index 0000000..34e3170 --- /dev/null +++ b/Include/iGui/iGuiSplash/iSplashObjGif.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include "iSplashObj.h" + +class I_GUI_SPLASH_EXPORT iSplashObjGif : public QLabel, public iSplashObj +{ + Q_OBJECT + +public: + explicit iSplashObjGif (); + ~iSplashObjGif (); + + // 开启或关闭 + virtual void start(); + virtual void finish(); + +protected: + // 居中显示 + void changeBound(QRect rt); + +private: + +}; diff --git a/Include/iGui/iGuiSplash/iSplashObjImgLoop.h b/Include/iGui/iGuiSplash/iSplashObjImgLoop.h new file mode 100644 index 0000000..e05a4cd --- /dev/null +++ b/Include/iGui/iGuiSplash/iSplashObjImgLoop.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include + +#include "iSplashObj.h" + +namespace Ui { +class iSplashObjImgLoop; +} + +class I_GUI_SPLASH_EXPORT iSplashObjImgLoop : public QDialog, public iSplashObj +{ + Q_OBJECT + +public: + /// @param nMax:图片数目 + /// @param sImg:第一幅显示的图片 + explicit iSplashObjImgLoop(int nMax, QString sImg, \ + QWidget *parent = 0); + ~iSplashObjImgLoop(); + + // 开启或关闭 + virtual void start(); + virtual void finish(); + +protected: + + // 初始化(内部) + void initRadios(int n); + void initTimer(); + + // 刷新 + void freshByIndex(int n); + void freshCurImg(QString sImg); + void freshCurRadio(int n); + + virtual void paintEvent(QPaintEvent *e); + +private slots: + + // 计时器响应 + void slotFreshNext(); + +private: + + Ui::iSplashObjImgLoop *ui; + QButtonGroup* m_pBtnGroup; + + // 设置图片 + int m_nCurrentIndex; + + // 计时器 + QTimer* m_pTimer; +}; diff --git a/Include/iGui/iGuiSplash/iSplashObjScreenEx.h b/Include/iGui/iGuiSplash/iSplashObjScreenEx.h new file mode 100644 index 0000000..6bfc617 --- /dev/null +++ b/Include/iGui/iGuiSplash/iSplashObjScreenEx.h @@ -0,0 +1,41 @@ +#pragma once + +#include +#include +#include +#include +#include "iSplashObj.h" + +class I_GUI_SPLASH_EXPORT iSplashObjScreenEx: public QSplashScreen, public iSplashObj +{ + Q_OBJECT + +public: + + iSplashObjScreenEx(QPixmap& pixmap); + ~iSplashObjScreenEx(); + + // 开启或关闭 + virtual void start(); + virtual void finish(); + +private: + + // 产生随机数 + void generateRandoms(); + +private slots: + // + void slotUpdateProgress(); + +private: + + int m_nImgHeight; + int m_nImgWidth; + QList m_listRandoms; //随机数 + int m_nLoopMax; //最大 + + QProgressBar* m_pProgressBar; + + QTimer* m_pTimer; +}; diff --git a/Include/iGui/iGuiSplash/iSplashObjSwf.h b/Include/iGui/iGuiSplash/iSplashObjSwf.h new file mode 100644 index 0000000..7982312 --- /dev/null +++ b/Include/iGui/iGuiSplash/iSplashObjSwf.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include "iSplashObj.h" + +class I_GUI_SPLASH_EXPORT iSplashObjSwf : public QAxWidget, public iSplashObj +{ + //Q_OBJECT// Must deleted + +public: + explicit iSplashObjSwf(); + ~iSplashObjSwf(); + + // 开启或关闭 + virtual void start(); + virtual void finish(); + +protected: + +private: + +}; diff --git a/Include/iGui/iGuiSplash/iSplashUtil.h b/Include/iGui/iGuiSplash/iSplashUtil.h new file mode 100644 index 0000000..0d86848 --- /dev/null +++ b/Include/iGui/iGuiSplash/iSplashUtil.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include "iGuiSplash_global.h" + +class iSplashObj; +class QSettings; +class I_GUI_SPLASH_EXPORT iSplashUtil : public QObject +{ + Q_OBJECT + +public: + + // 闪屏模式 + enum SplashMethod + { + SM_Basic = 0, //基于Qt自带QSplashScreen增加进度条 + SM_LoopImgs, //多幅图片循环播放 + + SM_Swf, //Flash模式,运行swf文件 + SM_Gif, //Gif模式,运行gif文件 + + SM_Unknown + }; + +public: + explicit iSplashUtil(SplashMethod o); + ~iSplashUtil(); + + // 设置闪屏时长,单位ms毫秒 + void setTimeSpan(int ms); + + // 设置文件 + void setSplashFiles(QStringList list); + + // 开启或关闭 + void start(); + void finish(); + +protected: + +private: + + SplashMethod m_oSm; + + // 设置闪屏时长,单位ms毫秒 + // 默认2000 + int m_nTimeSpan; + + // 设置文件,可以一个或多个 + QStringList m_listFiles; + + // 闪屏载体 + iSplashObj* m_pObj; +}; + +#define spMethod iSplashUtil::SplashMethod + + +// 闪屏相关函数定义 +class I_GUI_SPLASH_EXPORT iSplashHelper +{ +public: + explicit iSplashHelper(); + ~iSplashHelper(); + + QStringList getSplashFiles(spMethod o); + bool checkSplash(spMethod& o, int& ms); + +private: + + bool isSpalshOpen(); //New method + void setSplashOpen(bool bOpen); + QSettings* getSplashSettings(QString& sKey); +}; + diff --git a/Include/iPlot/iPlotBase/Commands/ZxAddCommand.h b/Include/iPlot/iPlotBase/Commands/ZxAddCommand.h new file mode 100644 index 0000000..a4670a7 --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxAddCommand.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include +#include "iPlotBase_global.h" + +class ZxRenderItem; + +/// 命令: 添加一个图元 +class I_PLOTBASE_EXPORT ZxAddCommand : public QUndoCommand +{ +public: + + ZxAddCommand(ZxRenderItem* pParent, ZxRenderItem* pItem, \ + int nIndex = -1, bool bNeedLayout = true, \ + QUndoCommand *parent = 0); + ~ZxAddCommand(); + + virtual void redo(); + virtual void undo(); + +private: + + ZxRenderItem* m_pParent; + ZxRenderItem* m_pItem; + + int m_nIndex; + bool m_bAdded : 1; + bool m_bNeedLayout : 1; +}; + +/// 命令: 添加多个图元 +class I_PLOTBASE_EXPORT ZxAddCommandMulti : public QUndoCommand +{ +public: + + ZxAddCommandMulti(ZxRenderItem* pParent, \ + const QList& items, \ + bool bNeedLayout = true, \ + QUndoCommand *parent = 0); + ~ZxAddCommandMulti(); + + virtual void redo(); + virtual void undo(); + +private: + + ZxRenderItem* m_pParent; + QList m_items; + + bool m_bAdded : 1; + bool m_bNeedLayout : 1; +}; + +/// 命令: 替换一个图元 +class I_PLOTBASE_EXPORT ZxCmdReplace : public QUndoCommand +{ +public: + + ZxCmdReplace(ZxRenderItem* pParent, ZxRenderItem* pItem, \ + int nIndex, bool bNeedLayout = true, \ + QUndoCommand *parent = 0); + ~ZxCmdReplace(); + + virtual void redo(); + virtual void undo(); + +private: + + ZxRenderItem* m_pParent; + ZxRenderItem* m_pItem; + + int m_nIndex; + bool m_bNeedLayout : 1; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxDeleteCommand.h b/Include/iPlot/iPlotBase/Commands/ZxDeleteCommand.h new file mode 100644 index 0000000..0cc790a --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxDeleteCommand.h @@ -0,0 +1,35 @@ +#pragma once + +#include +#include "iPlotBase_global.h" + +class ZxRenderItem; + +/// 命令: 删除一个图元 +class I_PLOTBASE_EXPORT ZxDeleteCommand : public QUndoCommand +{ +public: + + ZxDeleteCommand(ZxRenderItem* pItem, \ + bool bKeepPlace = false, \ + bool bNeedLayout = true, \ + QUndoCommand *parent = 0); + ~ZxDeleteCommand(); + + virtual void redo(); + virtual void undo(); + +private: + + ZxRenderItem* m_pParent; + ZxRenderItem* m_pItem; + + int m_nIndex; + bool m_bKeepPlace : 1; + bool m_bDeleted : 1; + bool m_bNeedLayout : 1; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxDeletePolicy.h b/Include/iPlot/iPlotBase/Commands/ZxDeletePolicy.h new file mode 100644 index 0000000..bf40c18 --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxDeletePolicy.h @@ -0,0 +1,33 @@ +#pragma once + +class QUndoCommand; +#include "ZxPolicy.h" + +/// 策略:删除图件 +class I_PLOTBASE_EXPORT ZxDeletePolicy : public ZxPolicy +{ + Q_OBJECT + +public: + + ZxDeletePolicy(); + +public slots: + + /// 菜单和键盘都挂接到此slot, 它负责调用onConfirm()和onDeleteItem(). 一般无需重载 + virtual void slotDeleteItem(); + +protected: + + /// 生成命令、压栈, 并清除policy防止再次进入. 重载此函数可做特殊处理 + virtual void onDeleteItem(); + + /// 键盘处理, 默认只响应DEL键, 一般无需重载. + virtual void onKeyPress(QKeyEvent* event); + +}; + + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxGraphCommand.h b/Include/iPlot/iPlotBase/Commands/ZxGraphCommand.h new file mode 100644 index 0000000..fc8e653 --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxGraphCommand.h @@ -0,0 +1,5 @@ +#error ZxRenderCommand is obsoleted, use QUndoCommand instead. + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxHandlePolicy.h b/Include/iPlot/iPlotBase/Commands/ZxHandlePolicy.h new file mode 100644 index 0000000..e18bdde --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxHandlePolicy.h @@ -0,0 +1,69 @@ +#pragma once + +#include "ZxPolicy.h" +class IxGridAlign; + +/// 策略:图件控制点 +/// 通常是在图件激活时, 显示一些控制点和辅助线, 拖动控制点可调节图件形状. +class I_PLOTBASE_EXPORT ZxHandlePolicy : public ZxPolicy +{ +public: + ZxHandlePolicy(); + + /// 获取指定位置的控制点id. + /// 即鼠标为于pt处, 调用这个函数可判断鼠标下面是哪个控制点. + /// @param pt 指定位置. + /// @param fHandleSize 控制点的参考尺寸, 随着视图的缩放变化. + /// @return 控制点id, 0表示pt不在控制点上 + virtual int getHandleId(const QPointF& pt, float fHandleSize); + + /// 开始移动控制点 + virtual void onBeginMove(int handle, const QPointF& pt); + + /// 控制点移动 + virtual void onMove(int handle, const QPointF& pt); + + /// 停止移动控制点 + virtual void onEndMove(int handle, const QPointF& pt); + + /// 左键在控制点处按下 + virtual void onLeftDown(int handle, const QPointF& pt); + + // 左键在控制点处抬起 + virtual void onLeftUp(int handle, const QPointF& pt); + + /// 左键单击控制点 + virtual void onLeftClick(int handle, const QPointF& pt); + + /// 左键双击控制点 + virtual void onLeftDoubleClick(int handle, const QPointF& pt); + + /// 获取控制点的光标形状 + virtual QCursor getCursor(int handle); + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + + /// 刷新编辑区域, 包括整个图件的区域、控制点和辅助线 + virtual void update(); + + /// 返回Policy的边框 + virtual QRectF getBounds() const; + + QPointF calcSnapPos(const QPointF& pt) const; + +protected: +// virtual void onAddToEdit(); + +// virtual void onRemoveFromEdit(); + + friend class ZxEdit; + + int m_nActiveHandle; + + IxGridAlign* getSnapGrid() const; +}; + + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxMoveCommand.h b/Include/iPlot/iPlotBase/Commands/ZxMoveCommand.h new file mode 100644 index 0000000..11d0298 --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxMoveCommand.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include +#include "iPlotBase_global.h" + +class ZxRenderItem; + +/// 命令: 移动一个图元 +class I_PLOTBASE_EXPORT ZxMoveCommand : public QUndoCommand +{ +public: + ZxMoveCommand(ZxRenderItem* pItem, \ + const QPointF& pt, QUndoCommand *parent = 0); + + virtual void redo(); + virtual void undo(); + +private: + + ZxRenderItem* m_pItem; + QPointF m_ptPos; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxPolicy.h b/Include/iPlot/iPlotBase/Commands/ZxPolicy.h new file mode 100644 index 0000000..f70c49f --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxPolicy.h @@ -0,0 +1,121 @@ +#pragma once + +#include +#include +#include "ZxPaintParam.h" + +#include "ZxEdit.h" +#include "IxInterface.h" +#include "iPlotBase_global.h" + +class QPainter; +class ZxRenderItem; +class ZxRenderView; +class ZxSimpleTool; +class ZxSceneItem; +class ZxTool; +class QUndoCommand; +class ZxSelection; + +/// 策略基类 +class I_PLOTBASE_EXPORT ZxPolicy + : public QObject + , virtual public IxInterface +{ + Q_OBJECT + +public: + + ZxPolicy(); + + /// 获取所属的图件 + virtual ZxRenderItem* getItem() const; + + template T getItem() const + { + T p = dynamic_cast(getItem()); + Q_ASSERT(p); + return p; + } + + /// 获取所属的Edit + virtual ZxEdit* getEdit() const; + + /// 获取所属的Scene + virtual ZxSceneItem* getScene() const; + + /// 获取当前工具 + virtual ZxTool* getCurrentTool() const; + + /// 获取当前视图 + virtual ZxRenderView* getCurrentToolView() const; + + /// 刷新 + /// @note 相当于 getItem()->update() + virtual void update(); + + /// 尝试把工具压到当前工具栈中 + /// @note 弹栈用 pTool->detach() + /// @param pTool 要压栈的工具 + /// @return 成功放回true, 失败返回false. + bool pushTool(ZxSimpleTool* pTool); + + /// 工具弹栈 + void popTool(ZxSimpleTool* pTool); + + /// 键按下 + virtual void onKeyPress(QKeyEvent* event); + + /// 键抬起 + virtual void onKeyRelease(QKeyEvent* event); + + /// 运行一个命令. 相当于getScene()->pushCommand() + virtual bool pushCommand(QUndoCommand* cmd); + + /// 相当于getScene()->getSelection() + virtual ZxSelection getSelection(); + + /// 设置静态模式. + /// @note 静态模式是指在图元被取消选择时不自动删除policy. + void setStatic(bool bStatic); + + /// 是否静态模式 + bool isStatic() const; + +protected: + + /// 激活 + virtual void onActivate(); + virtual void onDeactivate(); + + /// Edit关联 + virtual void onAddToEdit(); + virtual void onRemoveFromEdit(); + + /// 准备菜单 + virtual void onPrepareContextMenu(QMenu* pMenu, const QPointF& pos); + + /// Move+Resize + virtual void onItemMove(const QPointF& ptOld, const QPointF& ptNew); + virtual void onItemResize(const QSizeF& szOld, const QSizeF& szNew); + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +private: + + void setEdit(ZxEdit* p); + +private: + + ZxRenderItem* m_pItem; + bool m_bStatic : 1; + + friend class ZxEdit; +}; + + + + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxResizeCommand.h b/Include/iPlot/iPlotBase/Commands/ZxResizeCommand.h new file mode 100644 index 0000000..ec7eb2a --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxResizeCommand.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include "iPlotBase_global.h" + +class ZxRenderItem; + +/// 命令: 更改图件尺寸(位置) +class I_PLOTBASE_EXPORT ZxResizeCommand : public QUndoCommand +{ +public: + + ZxResizeCommand(ZxRenderItem* pItem, \ + const QRectF& rect, \ + QUndoCommand *parent = 0); + virtual void redo(); + + virtual void undo(); + +private: + + ZxRenderItem* m_pItem; + QRectF m_rect; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Commands/ZxResizePolicy.h b/Include/iPlot/iPlotBase/Commands/ZxResizePolicy.h new file mode 100644 index 0000000..ea3170f --- /dev/null +++ b/Include/iPlot/iPlotBase/Commands/ZxResizePolicy.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include +#include "ZxPaintParam.h" + +class ZxRenderItem; + +/// 经典的8控制点矩形编辑器. +class I_PLOTBASE_EXPORT ZxResizePolicy : public ZxHandlePolicy +{ + +public: + + ZxResizePolicy(); + +protected: + + virtual int getHandleId(const QPointF& pt, float fHandleSize); + virtual void onBeginMove(int handle, const QPointF& pt); + virtual void onMove(int handle, const QPointF& pt); + virtual void onEndMove(int handle, const QPointF& pt); + virtual void onLeftUp(int handle, const QPointF& pt); + virtual QCursor getCursor(int handle); + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + virtual QRectF getBounds() const; + + void calcHandlePoints(const QRectF& rect); + +private: + + QRectF m_rectOrig; + QRectF m_rectCurrent; + bool m_bMoving; + QPointF m_handlePoints[9]; +}; + + + + + diff --git a/Include/iPlot/iPlotBase/Helper/ZxAxisHelper.h b/Include/iPlot/iPlotBase/Helper/ZxAxisHelper.h new file mode 100644 index 0000000..7f6d139 --- /dev/null +++ b/Include/iPlot/iPlotBase/Helper/ZxAxisHelper.h @@ -0,0 +1,108 @@ +#pragma once + +#include +#include "Defines.h" +#include "iPlotBase_global.h" + +class ZxSubAxisBase; +class QPainter; + +// 该类是ZxSubAxisBase的分发处理 +class I_PLOTBASE_EXPORT ZxAxisHelper : public QObject +{ + Q_OBJECT + +public: + + static const float g_Sub_ScaleTick_Len; + static const float g_Main_ScaleTick_Len; + +public: + + explicit ZxAxisHelper(ZxSubAxisBase* p); + ~ZxAxisHelper(); + + // 统一调用接口 + virtual void getPreferedSize(QPainter* painter, \ + float& w, float& h);//预估大小 + virtual void drawAxis(QPainter* painter); //绘制坐标 + virtual void drawGrids(QPainter* painter, QRectF& rtInner);//Plot网格线 + virtual QRectF getAxisRect(); //最大外范围 + + // 获取类型 + AxisType getAxisType(); + +protected: + + // 预估大小 + virtual void getPreferedTitleSize(QPainter* painter, \ + float& w, float& h);//预估大小 + virtual void getPreferedTickSize(QPainter* painter, \ + float& w, float& h);//预估大小 + virtual QRectF getPreferedTickSumRect(QPainter* painter); + virtual void adjustPreferedSize(float& w, float& h); + + // 取得待显示的刻度文本标识 + virtual QMap getTickInfos(); + + // 绘制函数 + virtual void drawBaseLine(QPainter* painter, QRectF& rt); + virtual void drawTickAndTags(QPainter* painter, QRectF& rt); + virtual void drawTitle(QPainter* painter, QRectF& rt); + + virtual void drawFocus(QPainter* painter, QRectF& rt); + + virtual void drawOneTickLine(QPainter* painter, float fPos, bool bMainInterval); + virtual void drawOneTickTag(QPainter* painter, float fPos, QString s); + + virtual void drawOneGridLine(QPainter* painter, float fPos, QRectF& rtInner); + + + // 获取绘制的位置信息 + virtual void locateOneTickTag(QPainter* painter, float fPos, QString s, \ + QRectF& rt, int& flag); + virtual void locateTitle(QPainter* painter, QString s, \ + QRectF& rt, int& flag); + virtual void metricStr(QPainter* painter, QString s, float& w, float& h); + +protected: + + // 范围判断 + bool isMidIn(float f, float f1, float f2); + + // 从坐标轴获取参数 + void bindParas(); + + // 是否可以显示 + virtual bool canTickShow(QRectF rt); + + // 裁剪区 + virtual void clipBounds(QPainter* painter, QRectF& rt); + + // 合并Rect + void uniteTickBound(QRectF rt); + + // 旋转式绘制 + void rotateText(QPainter* painter, QRectF& rt, \ + int flag, QString s, float fAngle); + +public slots: + +protected: + + // 载体及载体类型 + ZxSubAxisBase* m_pAxis; + AxisType m_oAxisType; + + // x or y and out or inner + bool m_bAxisX; + bool m_bScaleOut; + + // 范围 + QRectF m_rtBound; //whole + QRectF m_rtTickSum; //所有刻度文字的范围合集 + QRectF m_rtTickLastVisible; + QRectF m_rtTitle; + + friend class ZxSubAxisBase; +}; diff --git a/Include/iPlot/iPlotBase/Helper/ZxAxisHelperDate.h b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperDate.h new file mode 100644 index 0000000..a1881d3 --- /dev/null +++ b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperDate.h @@ -0,0 +1,88 @@ +#pragma once + +#include "ZxAxisHelper.h" + +// 日期类 +class I_PLOTBASE_EXPORT ZxAxisHelperDate : public ZxAxisHelper +{ + Q_OBJECT + +public: + + enum TimeTextFormat //刻度文本显示样式 + { + TTF_Relative_TIU = 0, //相对时间,多少分或多少秒等等 + TTF_Relative_Normal, //相对时间,1'35.24'',时分秒模式 + + TTF_Absolute_Time //绝对时间,格式由format来定 + + }; + +public: + + explicit ZxAxisHelperDate(ZxSubAxisBase* p); + ~ZxAxisHelperDate(); + +protected: + + virtual QRectF getAxisRect(); //最大外范围 + + // 裁剪区 + virtual void clipBounds(QPainter* painter, QRectF& rt); + + // 绘制函数 + virtual void drawTickAndTags(QPainter* painter, QRectF& rt); + virtual void drawOneTickTag(QPainter* painter, float fPos, QString s); + + // 取得待显示的刻度文本标识 + virtual QMap getTickInfos(); + + // 预估大小 + virtual QRectF getPreferedTickSumRect(QPainter* painter); + virtual void adjustPreferedSize(float& w, float& h); + + // 获取绘制的位置信息 + virtual void locateOneTickTag(QPainter* painter, float fPos, QString s, \ + QRectF& rt, int& flag); + virtual void metricStr(QPainter* painter, QString s, float& w, float& h); + + // s1:time, s2:date + QString sumFromDateTime(QString s1, QString s2); + void parseToDateTime(QString s, QString& s1, QString& s2); + + // 是否可以显示 + virtual bool canTickShow(QRectF rt); + +public: + + // 刻度标识 + QString getLabelStr(double d); + + // 内部调整 + float adjustScaleAndTicks(float& fMin, float& fMax, \ + QVector* pVecTicks = NULL, \ + bool bConsiderRectZoom = false); + + // 基准时间设置 + void setBaseDt(QDateTime& dt); + QDateTime getBaseDt(); + + // 时间设置 + void setTtf(TimeTextFormat o); + TimeTextFormat getTtf(); + void setTtfFormat(QString s); + QString getTtfFormat(); + void setTtfUnit(QString s); + QString getTtfUnit(); + QString getTimeBaseUnit(); + +public slots: + +protected: + + // 起始时间,对应数据深度0 + QDateTime m_dtBase; + TimeTextFormat m_oTtf; + QString m_sTtfUnit; //对于相对时间,是单位 + QString m_sTtfFormat; //对于绝对时间,是format +}; diff --git a/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloat.h b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloat.h new file mode 100644 index 0000000..90c2a83 --- /dev/null +++ b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloat.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ZxAxisHelper.h" + +// float类 +class I_PLOTBASE_EXPORT ZxAxisHelperFloat : public ZxAxisHelper +{ + Q_OBJECT + +public: + explicit ZxAxisHelperFloat(ZxSubAxisBase* p); + ~ZxAxisHelperFloat(); + +protected: + +public slots: + +protected: +}; diff --git a/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloatLinear.h b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloatLinear.h new file mode 100644 index 0000000..16585b4 --- /dev/null +++ b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloatLinear.h @@ -0,0 +1,22 @@ +#pragma once + +#include "ZxAxisHelperFloat.h" + +// 线性类 +class I_PLOTBASE_EXPORT ZxAxisHelperFloatLinear : public ZxAxisHelperFloat +{ + Q_OBJECT + +public: + explicit ZxAxisHelperFloatLinear(ZxSubAxisBase* p); + ~ZxAxisHelperFloatLinear(); + +protected: + + // 绘制函数 + virtual void drawTickAndTags(QPainter* painter, QRectF& rt); + +public slots: + +protected: +}; diff --git a/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloatLog.h b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloatLog.h new file mode 100644 index 0000000..1673e42 --- /dev/null +++ b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperFloatLog.h @@ -0,0 +1,59 @@ +#pragma once + +#include "ZxAxisHelperFloat.h" + +// 对数类 +class I_PLOTBASE_EXPORT ZxAxisHelperFloatLog : public ZxAxisHelperFloat +{ + Q_OBJECT + +public: + + static const int g_logScaleCount = 8; + static const float g_logScaleRatios[g_logScaleCount]; + +public: + explicit ZxAxisHelperFloatLog(ZxSubAxisBase* p); + ~ZxAxisHelperFloatLog(); + +protected: + + // Plot网格线 + virtual void drawGrids(QPainter* painter, QRectF& rtInner); + // 绘制函数 + virtual void drawTickAndTags(QPainter* painter, QRectF& rt); + virtual void drawOneTickTag(QPainter* painter, float fPos, QString s); + + // 取得待显示的刻度文本标识 + virtual QMap getTickInfos(); + + // 预估大小 + virtual QRectF getPreferedTickSumRect(QPainter* painter); + virtual void adjustPreferedSize(float& w, float& h); + +private: + + // 幂指数方式显示,10的多少次幂 + void drawOneTickTagEx(QPainter* painter, float fPos, QString s); + + // 获取绘制的位置信息 + virtual void locateOneTickTag(QPainter* painter, float fPos, QString s, \ + QRectF& rt, int& flag); + // 获取绘制的位置信息(Base) + void locateOneTickBaseTag(QPainter* painter, float fPos, \ + QString s, \ + QRectF& rtBase, \ + int& flag); + // 获取绘制的位置信息(Index) + void locateOneTickIndexTag(QPainter* painter, float fPos, \ + QString s, \ + QRectF& rtBase, QRectF& rtIndex, \ + int& flag); + // 进一步调整 + void adjustTickLocation(QPainter* painter, \ + QRectF& rtBase, QRectF& rtIndex); + +public slots: + +protected: +}; diff --git a/Include/iPlot/iPlotBase/Helper/ZxAxisHelperInt.h b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperInt.h new file mode 100644 index 0000000..7473a3d --- /dev/null +++ b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperInt.h @@ -0,0 +1,22 @@ +#pragma once + +#include "ZxAxisHelper.h" + +// 整形类 +class I_PLOTBASE_EXPORT ZxAxisHelperInt : public ZxAxisHelper +{ + Q_OBJECT + +public: + explicit ZxAxisHelperInt(ZxSubAxisBase* p); + ~ZxAxisHelperInt(); + +protected: + + // 绘制函数 + virtual void drawTickAndTags(QPainter* painter, QRectF& rt); + +public slots: + +protected: +}; diff --git a/Include/iPlot/iPlotBase/Helper/ZxAxisHelperStr.h b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperStr.h new file mode 100644 index 0000000..318a806 --- /dev/null +++ b/Include/iPlot/iPlotBase/Helper/ZxAxisHelperStr.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ZxAxisHelper.h" + +// 字符串类 +class I_PLOTBASE_EXPORT ZxAxisHelperStr : public ZxAxisHelper +{ + Q_OBJECT + +public: + explicit ZxAxisHelperStr(ZxSubAxisBase* p); + ~ZxAxisHelperStr(); + +protected: + + // 绘制函数 + virtual void drawTickAndTags(QPainter* painter, QRectF& rt); + + // 取得待显示的刻度文本标识 + virtual QMap getTickInfos(); + +public slots: + +protected: +}; diff --git a/Include/iPlot/iPlotBase/Tools/ZxArrowTool.h b/Include/iPlot/iPlotBase/Tools/ZxArrowTool.h new file mode 100644 index 0000000..a6b1724 --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxArrowTool.h @@ -0,0 +1,20 @@ +#pragma once + +#include "ZxCompoundTool.h" + +//class ZxSimpleTool; + +/// 箭头工具. +/// 含单选, 多选, 框选, 编辑, 移动, 右键菜单等 +class I_PLOTBASE_EXPORT ZxArrowTool : public ZxCompoundTool +{ + Q_OBJECT + +public: + + ZxArrowTool(); +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxCompoundTool.h b/Include/iPlot/iPlotBase/Tools/ZxCompoundTool.h new file mode 100644 index 0000000..bf5007c --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxCompoundTool.h @@ -0,0 +1,70 @@ +#pragma once + +#include "ZxSimpleTool.h" + +/// 组合图形工具 +class I_PLOTBASE_EXPORT ZxCompoundTool : public ZxTool +{ + Q_OBJECT + +public: + + ZxCompoundTool(); + ~ZxCompoundTool(); + +public: + + /// 在前面插入子工具 + void prepend(ZxSimpleTool* pTool); + + /// 在指定位置插入子工具 + void insert(int pos, ZxSimpleTool* pTool); + + /// 在后面追加子工具 + void append(ZxSimpleTool* pTool); + + /// 移除子工具 + void remove(ZxSimpleTool* pTool); + + virtual ZxSimpleTool* getLastActivateTool(); + +protected: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onRightDown(const QPointF& pt); + virtual bool onRightUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onLeftDoubleClick(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual void onKeyPress(QKeyEvent* event); + virtual void onKeyRelease(QKeyEvent* event); + + virtual void onSelectionChanged(ZxSelection& selection); + + /// 绘制工具的拖曳线/拖曳框等临时的辅助元素 + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + /// 在工具被激活时调用 + virtual void onActivated(); + + /// 在工具被取消激活时调用 + virtual void onDeactivated(); + +protected: + + void _callOnActivated(); + void _callOnDeactivated(); + +protected: + + QVector m_vecSubTools; + QVector m_vecDownTools; + +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxContextMenuTool.h b/Include/iPlot/iPlotBase/Tools/ZxContextMenuTool.h new file mode 100644 index 0000000..b657cd8 --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxContextMenuTool.h @@ -0,0 +1,32 @@ +#pragma once + +#include + +// 右键菜单工具 +class I_PLOTBASE_EXPORT ZxContextMenuTool : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxContextMenuTool(); + ~ZxContextMenuTool(); + +protected: + + bool onRightDown(const QPointF& pt); + bool onRightUp(const QPointF& pt); + +private slots: + + void customEvent(QEvent *); + +private: + + QPoint m_ptPopup; + QMenu* m_pMenu; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxDragScrollTool.h b/Include/iPlot/iPlotBase/Tools/ZxDragScrollTool.h new file mode 100644 index 0000000..87c397c --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxDragScrollTool.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +/// 区域缩放和滚轮缩放 +class I_PLOTBASE_EXPORT ZxDragScrollTool : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxDragScrollTool(); + +protected: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + +protected: + + QPointF m_origScroll; + QPointF m_ptDownView; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxHandleTool.h b/Include/iPlot/iPlotBase/Tools/ZxHandleTool.h new file mode 100644 index 0000000..173db0d --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxHandleTool.h @@ -0,0 +1,46 @@ +#pragma once + +#include +#include + +class QPointF; +class ZxRenderItem; + +/// 控制点编辑工具 +class I_PLOTBASE_EXPORT ZxHandleTool : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxHandleTool(); + +protected: + + bool onLeftDown(const QPointF& pt); + bool onLeftUp(const QPointF& pt); + bool onMouseMove(const QPointF& pt); + bool onLeftDoubleClick(const QPointF& pt); + + virtual void onSelectionChanged(ZxSelection& selection); + + virtual void onActivated(); + virtual void onDeactivated(); + + ZxHandleRef findHandle(ZxSceneItem* pScene, const QPointF& pt, float fHandleSize); + +protected slots: + + void onItemDetached(ZxRenderItem* p); + +private: + + bool m_bMoving; + + ZxHandleRef m_handleMove; + ZxHandleRef m_handleHover; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxMoveTool.h b/Include/iPlot/iPlotBase/Tools/ZxMoveTool.h new file mode 100644 index 0000000..7fb8e35 --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxMoveTool.h @@ -0,0 +1,34 @@ +#pragma once + +#include +class IxGridAlign; + +/// 移动工具 +class I_PLOTBASE_EXPORT ZxMoveTool : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxMoveTool(); + +protected: + + bool onLeftUp(const QPointF& pt); + bool onMouseMove(const QPointF& pt); + void onPaint(QPainter* painter, const ZxPaintParam& param); + + QPointF caclSnapPos(QPointF pt, ZxRenderItem* item); + +protected: + + bool m_bMoving; + QPointF m_ptOutlinePos; + QPointF m_ptMouseItemOffset; + ZxSelectionOutline m_outline; + IxGridAlign* m_pSnapGrid; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxScrollTool.h b/Include/iPlot/iPlotBase/Tools/ZxScrollTool.h new file mode 100644 index 0000000..bd55be7 --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxScrollTool.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ZxCompoundTool.h" +class ZxSimpleTool; + +/// 手形工具 +/// 含手形滚动, 缩放等 +class I_PLOTBASE_EXPORT ZxScrollTool : public ZxCompoundTool +{ + Q_OBJECT + +public: + + ZxScrollTool(); +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxSelectTool.h b/Include/iPlot/iPlotBase/Tools/ZxSelectTool.h new file mode 100644 index 0000000..a7fca0f --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxSelectTool.h @@ -0,0 +1,42 @@ +#pragma once + +#include + +class QPointF; +class ZxRenderItem; + +/// 选择工具 (注: 只有选择功能, 没有移动或右键菜单等额外功能) +/// @see ZxArrowTool +class I_PLOTBASE_EXPORT ZxSelectTool : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxSelectTool(ZxFilterFun filter = 0, \ + bool bLeftSelect = true, \ + bool bRightSelect = true); + //ZxSelectTool(const ZxSelectTool & c); + //virtual ZxSelectTool * clone() const; + +protected: + + bool onLeftDown(const QPointF& pt); + bool onLeftUp(const QPointF& pt); + bool onRightDown(const QPointF& pt); + // bool onRightUp(const QPointF& pt); + bool onLeftDoubleClick(const QPointF& pt); + + virtual bool selectGraphItem(const QPointF& pt); + +protected: + + bool m_bLeftSelect; + bool m_bRightSelect; + + ZxFilterFun m_funcFilter; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxSimpleTool.h b/Include/iPlot/iPlotBase/Tools/ZxSimpleTool.h new file mode 100644 index 0000000..e184b8c --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxSimpleTool.h @@ -0,0 +1,53 @@ +#pragma once + +#include "ZxTool.h" + +class ZxCompoundTool; + +/// 简单图形工具 +class I_PLOTBASE_EXPORT ZxSimpleTool : public ZxTool +{ + Q_OBJECT + +public: + + ZxSimpleTool(); + +public: + + /// 获取所属的复合工具 + ZxCompoundTool* getCompoundTool(); + //virtual ZxSimpleTool* clone() const = 0; + + /// 从所属的复合工具中移除 + virtual void detach(); + + /// 根据上下管件关联时,选上面的bottom问题而处理 + virtual bool rehitTest(const QPointF& pt); + +protected: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onRightDown(const QPointF& pt); + virtual bool onRightUp(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onLeftDoubleClick(const QPointF& pt); + +private: + + void _callOnActivated(); + void _callOnDeactivated(); + +public: + + // 目前暂无好的方法,处理光标 + bool m_bHitTestMoving; + + friend class ZxCompoundTool; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxTool.h b/Include/iPlot/iPlotBase/Tools/ZxTool.h new file mode 100644 index 0000000..3f44045 --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxTool.h @@ -0,0 +1,214 @@ +#pragma once + +#include +#include "IxInterface.h" +#include "ZxRenderView.h" + +class QPointF; +class ZxRenderView; +class ZxToolPrivate; +class ZxCompoundTool; + +/// 图形工具 +class I_PLOTBASE_EXPORT ZxTool : public QObject + , virtual public IxInterface +{ + Q_OBJECT + +public: + + ZxTool(); + ~ZxTool(); + +public: + + ZxTool* getRootTool() const; + ZxRenderView* getView() const; + ZxSceneItem* getScene() const; + ZxToolState* getState() const; + + ZxSelection getSelection() const; + +public: + + // 最后活动的工具 + virtual ZxTool* getLastActivateTool(); + + // 键是否按下 + bool isLeftDown(); + bool isRightDown(); + + // 鼠标左键或右键按下时的控制键状态 + Qt::KeyboardModifiers getDownModifiers() const; + + // 鼠标当前控制键状态 + Qt::KeyboardModifiers getCurrentModifiers() const; + + // 鼠标左键或右键按下的位置 + const QPointF& getDownPos(); + + // 鼠标当前位置 + const QPointF& getCurrentPos(); + + // 鼠标前一个位置 + const QPointF& getPreviousPos(); + + // 鼠标左键或右键按下后到最后一次移动之间拖出来的矩形区域 + QRectF getTrackRect(); + + // 在鼠标按下和抬起之间没有移动, 是一个点击操作. + bool isClick(); + + // 激活项 + ZxRenderItem* getActiveItem(); + void setActiveItem(ZxRenderItem* p); + + // 引用次数 + int addRef(); + int release(); + + // 刷新视图(视图坐标系) + virtual void updateViewport(); + virtual void updateViewport(const QRectF& rect); + virtual void updateViewport(float x, float y, float width, float height); + + // 刷新场景(场景坐标系) + virtual void updateScene(); + virtual void updateScene(const QRectF& rect); + virtual void updateScene(float x, float y, float width, float height); + +protected: + + // 鼠标左键按下前后处理(通常是一些状态处理) + virtual void beforeLeftDown(const QPointF& pt); + virtual void afterLeftUp(const QPointF& pt); + + /// 左键按下 + /// @param pt 位置 + /// @return 已处理返回true, 未处理返回false + virtual bool onLeftDown(const QPointF& pt) = 0; + + /// 左键抬起 + /// @param pt 位置 + /// @return 已处理返回true, 未处理返回false + virtual bool onLeftUp(const QPointF& pt) = 0; + + /// 右键按下 + /// @param pt 位置 + /// @return 已处理返回true, 未处理返回false + virtual bool onRightDown(const QPointF& pt) = 0; + + /// 右键抬起 + /// @param pt 位置 + /// @return 已处理返回true, 未处理返回false + virtual bool onRightUp(const QPointF& pt) = 0; + + /// 滚轮滚动 + /// @param pt 位置 + /// @param delta 滚动行数 + /// @return 已处理返回true, 未处理返回false + virtual bool onMouseWheel(const QPointF& pt, int delta) = 0; + + /// 鼠标移动 + /// @param pt 位置 + /// @return 已处理返回true, 未处理返回false + virtual bool onMouseMove(const QPointF& pt) = 0; + + /// 左键双击 + /// @param pt 位置 + /// @return 已处理返回true, 未处理返回false + virtual bool onLeftDoubleClick(const QPointF& pt) = 0; + + /// 键按下 + virtual void onKeyPress(QKeyEvent* event); + + /// 键抬起 + virtual void onKeyRelease(QKeyEvent* event); + + /// 绘制工具的拖曳线/拖曳框等临时的辅助元素 + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + + /// 使最后移动的区域无效 + virtual void updateLastMoveArea(bool trackOnly); + + /// 工具名称 + virtual QString getText() const; + virtual void setText(const QString& s); + + /// 工具图标 + virtual void setIcon(const QIcon& icon); + virtual void setIcon(const QString& iconName); + virtual QIcon getIcon() const; + + /// 工具提示 + virtual QString getToolTip() const; + virtual void setToolTip(const QString& s); + +public: + + /// enabled. + virtual void setEnabled(bool b); + virtual bool isEnabled() const; + + /// active. + virtual bool isActive() const; + + /// tracking + virtual void setMouseTracking(bool b); + virtual bool isMouseTracking() const; + + // + virtual QPointF calcSnapPos(const QPointF& pt) const; + +public slots: + + /// 激活 + virtual void activate(); + virtual void deactivate(); + +protected: + + /// 工具激活 + virtual void onActivated(); + virtual void onDeactivated(); + + /// 选择状态改变 + virtual void onSelectionChanged(ZxSelection& selection); + +protected: + + void _setCurrentView(ZxRenderView* p); + void _attachView(ZxRenderView* p); + void _detachView(ZxRenderView* p); + virtual void _callOnActivated() = 0; + virtual void _callOnDeactivated() = 0; + + // 右键模拟 + void _simRightDown(const QPointF& pt); + + ZxToolPrivate* _getPrivate() const; + +protected: + + ZxToolPrivate* _private; + ZxCompoundTool* m_pParent; + ZxRenderView* m_pView; // 一定有效 + static ZxRenderView* _currentView; // 可能为空 + + QString m_sText; + QString m_sTooltip; + + mutable QIcon m_icon; + int m_nRefCount; + bool m_bEnabled : 1; + bool m_bMouseTracking : 1; + bool m_bProperRelease : 1; + + friend class ZxRenderView; + friend class ZxCompoundTool; + friend class ZxSimpleTool; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxToolPrivate.h b/Include/iPlot/iPlotBase/Tools/ZxToolPrivate.h new file mode 100644 index 0000000..27cf7e7 --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxToolPrivate.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +class ZxRenderView; + +/// @internal +class ZxToolPrivate +{ +public: + QSet views; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxToolState.h b/Include/iPlot/iPlotBase/Tools/ZxToolState.h new file mode 100644 index 0000000..89f67bd --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxToolState.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include +#include "iPlotBase_global.h" + +class ZxTool; +class ZxRenderItem; + +/// @internal +class ZxToolState +{ +public: + + ZxToolState(); + + /// 最后活动工具 + ZxTool* getLastActivateTool(); + void setLastActivateTool(ZxTool* p); + + /// 键是否按下 + bool isLeftDown() const; + bool isRightDown() const; + + /// 鼠标左键或右键按下的位置 + const QPointF& getDownPos() const; + void setDownPos(const QPointF& pt); + + /// 鼠标左键或右键按下时的控制键状态 + Qt::KeyboardModifiers getDownModifiers() const; + void setDownModifiers(const Qt::KeyboardModifiers & flags); + + /// 鼠标当前控制键状态 + Qt::KeyboardModifiers getCurrentModifiers() const; + void setCurrentModifiers(const Qt::KeyboardModifiers & flags); + + /// 鼠标当前位置 + const QPointF& getCurrentPos() const; + void setCurrentPos(const QPointF& pt); + + /// 鼠标前一个位置 + const QPointF& getPreviousPos(); + + /// 鼠标左键或右键按下后到最后一次移动之间拖出来的矩形区域 + QRectF getTrackRect() const; + + /// 是否点击. 即按下后原地抬起. + bool isClick() const; + + /// 清除所有信息 + void clear(); + + /// 选中图件 + ZxRenderItem* getActiveItem() const; + void setActiveItem(ZxRenderItem* p); + +protected: + + ZxTool* m_pLastActiveTool; + ZxRenderItem* m_pActiveItem; + + QPointF m_ptDown; + QPointF m_ptCurrent; + QPointF m_ptPrevious; + + float m_fMaxOffset; + + bool m_bLeftDown; + bool m_bRightDown; + + Qt::KeyboardModifiers m_nDownModifiers; + Qt::KeyboardModifiers m_nCurrentModifiers; + + friend class ZxRenderView; +}; + + + + diff --git a/Include/iPlot/iPlotBase/Tools/ZxZoomTool.h b/Include/iPlot/iPlotBase/Tools/ZxZoomTool.h new file mode 100644 index 0000000..6054069 --- /dev/null +++ b/Include/iPlot/iPlotBase/Tools/ZxZoomTool.h @@ -0,0 +1,33 @@ +#pragma once + +#include + +class ZxRenderItem; + +/// 区域缩放和滚轮缩放 +class I_PLOTBASE_EXPORT ZxZoomTool : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxZoomTool(); + ZxZoomTool(const ZxZoomTool& c); + +protected: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + bool m_bTracking; + QRectF m_rtTracker; +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxDirection.h b/Include/iPlot/iPlotBase/ZxDirection.h new file mode 100644 index 0000000..4a14d14 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxDirection.h @@ -0,0 +1,66 @@ +#pragma once + +namespace Zx +{ + /// 九个方位, 位置或朝向 + enum Direction + { + /// 中 = 未指定方向 + Center = 0, + + /// 未指定方向 = 中 + None = Center, + + /// 西 = 左 + West = 1, + + /// 左 = 西 + Left = West, + + /// 东 = 右 + East = 2, + + /// 右 = 东 + Right = East, + + /// 北 = 上 + North = 3, + + /// 上 = 北 + Top = North, + + /// 南 = 下 + South = 4, + + /// 下 = 南 + Bottom = South, + + /// 西北 = 左上 + NorthWest = 5, + + /// 左上 = 西北 + TopLeft = NorthWest, + + /// 东北 = 右上 + NorthEast = 6, + + /// 右上 = 东北 + TopRight = NorthEast, + + /// 西南 = 左下 + SouthWest = 7, + + /// 左下 = 西南 + BottomLeft = SouthWest, + + /// 东南 = 右下 + SouthEast = 8, + + /// 右下 = 东南 + BottomRight = SouthEast + }; +} + + + + diff --git a/Include/iPlot/iPlotBase/ZxEdit.h b/Include/iPlot/iPlotBase/ZxEdit.h new file mode 100644 index 0000000..e8da141 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxEdit.h @@ -0,0 +1,152 @@ +#pragma once + +#include +#include +#include "IxInterface.h" +#include "iPlotBase_global.h" + +class QPainter; +class ZxPaintParam; +class ZxRenderItem; +class ZxHandlePolicy; +class ZxPolicy; +class ZxTool; +class ZxRenderView; +class QMenu; +class QPointF; +class QSizeF; +class QKeyEvent; + +class I_PLOTBASE_EXPORT ZxEdit + : virtual public IxInterface +{ + +private: + ZxEdit(ZxRenderItem* pItem); + ~ZxEdit(); + +public: + + void updatePolicyHandles(); + + /// 绘制工具的拖曳线/拖曳框等临时的辅助元素 + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + + /// 获取所属的GraphItem + ZxRenderItem* getItem() const; + + /// 获取父Item的Edit + ZxEdit* getParentEdit() const; + + /// 获取当前工具 + ZxTool* getCurrentTool() const; + + /// 获取当前视图 + ZxRenderView* getCurrentToolView() const; + + /// 添加Policy(两个接口基本一致) + ZxPolicy* add(ZxPolicy* p, bool bAsStatic = false); + ZxPolicy* addPolicy(ZxPolicy* p, bool bAsStatic = false); + + /// 移除policy(两个接口基本一致) + ZxPolicy* remove(ZxPolicy* p); + ZxPolicy* removePolicy(ZxPolicy* p); + //void deletePolicy(ZxPolicy* p); + + /// 清除全部Policy + /// @param bClearAll true时清除全部policy, false时只清除动态的policy + void clear(bool bClearAll = false); + + /// 判断是否有policy + bool empty() const; + + /// 判断是否有动态Policy + /// @note 此方法速度较慢 + bool containsDynamicPolicy() const; + + /// 判断是否有静态Policy + /// @note 此方法速度较慢 + bool containsStaticPolicy() const; + + /// 判断是否包含指定policy + bool containsPolicy(ZxPolicy* p) const; + + //////////////////////////////////////////// + /// 内部使用的遍历器 + class I_PLOTBASE_EXPORT const_iterator + { + const ZxEdit* m_pEdit; + int n; + const_iterator(const ZxEdit* pEdit, int n); + + public: + + ZxPolicy* operator*(); + + bool operator!=( const const_iterator& ) const; + bool operator==( const const_iterator& ) const; + const_iterator& operator++(); + + friend class ZxEdit; + }; + + const_iterator begin() const; + const_iterator end() const; + + /// 内部使用的遍历器 + class I_PLOTBASE_EXPORT const_reverse_iterator + { + const ZxEdit* m_pEdit; + int n; + const_reverse_iterator(const ZxEdit* pEdit, int n); + + public: + + ZxPolicy* operator*(); + + bool operator!=( const const_reverse_iterator& ) const; + bool operator==( const const_reverse_iterator& ) const; + const_reverse_iterator& operator++(); + + friend class ZxEdit; + }; + + const_reverse_iterator rbegin() const; + const_reverse_iterator rend() const; + + //////////////////////////////////////////// + + ZxHandlePolicy* getHandlePolicy() const; + void setHandlePolicy(ZxHandlePolicy* p, bool bAsStatic = false); + + /// HandlePolicy的数量 + int getHandlePoliciesCount() const; + + virtual void onPrepareContextMenu(QMenu* pMenu, const QPointF& pos); + + virtual void onItemMove(const QPointF& ptOld, const QPointF& ptNew); + + virtual void onItemResize(const QSizeF & szOld, const QSizeF & szNew); + + /// 键 + virtual void onKeyPress(QKeyEvent* event); + virtual void onKeyRelease(QKeyEvent* event); + + /// 刷新所有policy + virtual void update(); + + virtual QRectF getBounds() const; + +private: + + ZxRenderItem* m_pItem; + QVector m_vecPolicies; + int m_nHandlePoliciesCount; + + friend class ZxRenderItem; +}; + + + + + diff --git a/Include/iPlot/iPlotBase/ZxHandleRef.h b/Include/iPlot/iPlotBase/ZxHandleRef.h new file mode 100644 index 0000000..78bb439 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxHandleRef.h @@ -0,0 +1,39 @@ +#pragma once + +#include "iPlotBase_global.h" +#include + +class ZxRenderItem; +class ZxHandlePolicy; + +/// 控制点的引用 +class I_PLOTBASE_EXPORT ZxHandleRef +{ +public: + + ZxHandleRef(); + ZxHandleRef(ZxHandlePolicy* p, int nHandleId); + ZxHandleRef(const ZxHandleRef& c); + + bool operator==(const ZxHandleRef& c) const; + bool operator!=(const ZxHandleRef& c) const; + + bool isValid() const; + void clear(); + + ZxRenderItem* item() const; + ZxHandlePolicy* policy() const; + int id() const; + QCursor cursor() const; + +private: + + ZxRenderItem* _item; + ZxHandlePolicy* _policy; + int _id; +}; + + + + + diff --git a/Include/iPlot/iPlotBase/ZxLayerItem.h b/Include/iPlot/iPlotBase/ZxLayerItem.h new file mode 100644 index 0000000..bc4d9b5 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxLayerItem.h @@ -0,0 +1,27 @@ +#pragma once + +#include "ZxRenderItem.h" + +/// 2D通用图层 +class I_PLOTBASE_EXPORT ZxLayerItem + : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxLayerItem(); + + void paintBack(QPainter* painter, const ZxPaintParam& param); + + virtual QIcon getIcon() const; + + virtual bool isActive() const; + virtual void setActive(bool); + +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxLayout.h b/Include/iPlot/iPlotBase/ZxLayout.h new file mode 100644 index 0000000..0e711b2 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxLayout.h @@ -0,0 +1,74 @@ +#pragma once + +#include +#include +#include "ZxDynamic.h" +#include "IxSerDes.h" +#include "iPlotBase_global.h" + +class ZxRenderItem; + +/// 布局器 +/// @note 简单起见, 我们暂不支持嵌套布局 +class I_PLOTBASE_EXPORT ZxLayout + : virtual public IxDynObj + , virtual public IxSerDes +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxLayout(); + ZxLayout(const ZxLayout & c); + + virtual void clear(); + virtual ZxLayout* clone() const; + +protected: + + /// 布局 + virtual void onLayout(); + + /// 应用自动尺寸 + /// @return true表示已处理, false表示交回给Item来处理. + virtual bool onApplyAutoSize(); + + /// 获取建议尺寸 + virtual QSizeF getSizeHint() const; + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual ZxRenderItem* getOwner() const; + virtual void setOwner(ZxRenderItem* p); + + virtual void onChildItemAdded(ZxRenderItem* pItem); + virtual void onChildItemRemoved(ZxRenderItem* pItem); + + ZxRenderItem* m_pOwner; + friend class ZxRenderItem; +}; + +/// 层叠布局. +/// 各子图元都拉伸成同样尺寸, 一个叠一个地放在一起. +/// @note 注意和 ZxStackLayer 相区别 +class I_PLOTBASE_EXPORT ZxLayerLayout + : public ZxLayout +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxLayerLayout(); + ZxLayerLayout(const ZxLayerLayout& c); + virtual ZxLayerLayout* clone() const; + +protected: + + virtual void onLayout(); + virtual QSizeF getSizeHint() const; +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxRenderAlign.h b/Include/iPlot/iPlotBase/ZxRenderAlign.h new file mode 100644 index 0000000..75b019a --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxRenderAlign.h @@ -0,0 +1,35 @@ +#pragma once + +/// 对齐方式 +namespace Zx +{ + enum ChartObjAlign + { + /// 左对齐 + alignLeft, + /// 右对齐 + alignRight, + /// 上对齐 + alignTop, + /// 下对齐 + alignBottom, + /// 水平居中 + alignHCenter, + /// 垂直居中 + alignVCenter, + /// 水平等间隔 + alignAverageHSpace, + /// 垂直等间隔 + alignAverageVSpace, + /// 等宽 + alignSameWidth, + /// 等高 + alignSameHeight, + /// 等尺寸 + alignSameSize + }; +} + + + + diff --git a/Include/iPlot/iPlotBase/ZxRenderItem.h b/Include/iPlot/iPlotBase/ZxRenderItem.h new file mode 100644 index 0000000..eff2a13 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxRenderItem.h @@ -0,0 +1,749 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "ZxPaintParam.h" +#include "ZxRenderItemIterator.h" +#include "ZxHandleRef.h" + +#include "iPlotBase_global.h" + +class ZxRenderView; +class ZxSceneItem; +class ZxPaintParam; +//class QPainter; +class _ZxRenderChildIndex; +class ZxHandlePolicy; +class ZxEdit; +class ZxRenderItem; +class QSizeF; +class QPointF; +class ZxLayout; +class QFile; +class QDataStream; +class QAction; +class IxPtyItem; +class QMimeData; + +class ZxSceneItem; +class QMenu; +class ZxTool; + +/// 图元的根类 +class I_PLOTBASE_EXPORT ZxRenderItem + : public QObject + , virtual public IxRenderItem + , virtual public IxPtySource +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxRenderItem(); + virtual ~ZxRenderItem(); + + void init(); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + // 这是从外界调用的统一封装,模板 + // bLoad 加载 or 保存 + // bSelf 是否仅仅某类名称的,比如 TheorySource + void dealwithTempl(bool bLoad, bool bSelf); + virtual QString getTemplPath(bool bSelf); + + bool loadTempl(QString s = ""); //模板的处理 + bool saveTempl(QString s); + + /// 指定父节点, 并加自动入父节点的子图元列表中 + virtual void setParent(IxRenderItem* pParent); + + /// 重新实现 QObject::setParent() + virtual void setParentObject(QObject* pParent); + + /// 获取父节点的指针. 对于根结点, 这个函数返回NULL. + ZxRenderItem* getParent() const; + + /// 获取根结点 + ZxRenderItem* getRootItem() const; + + /// 获取所在的场景 + ZxSceneItem* getScene() const; + + /// 获取当前工具 + ZxTool* getCurrentTool() const; + + /// 获取当前视图 + ZxRenderView* getCurrentToolView() const; + + /// 获取图元的显示名 + virtual QString getTitle() const; + + /// 获取图元的图标 + virtual QIcon getIcon() const; + + /// 递归绘图, 含自身和子图元 + virtual void paint(QPainter* painter, const ZxPaintParam& param); + + /// 绘制背景(位于子图元下方), 如无特殊情况, 普通内容应在此绘制 + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + + /// 绘制前景(位于子图元上方) + virtual void paintFront(QPainter* painter, const ZxPaintParam& param); + + /// 画子图元(一般不需要重写) + virtual void paintChildren(QPainter* painter, const ZxPaintParam& param); + + /// 绘制Edit和Policy + /// @note 此方法是独立的, 和绘制图元完全是不同的系统 + virtual void paintEdit(QPainter* painter, const ZxPaintParam& param); + + /// 获取子图元列表 + const QVector& getChildren() const; + + /// 子图元数量, 等同于 size() + int count() const; + + /// 子图元数量, 等同于 count() + int size() const; + + /// 子图元数量是否为0, 等同于 empty() + bool isEmpty() const; + + /// 子图元数量是否为0, 等同于 isEmpty() + bool empty() const; + + /// 在指定位置插入子图元, 并自动把子图元的parent指向当前图元. + /// index 为 0 时插到前面, index为-1或等于size()时追加到最后. + void insert(int index, ZxRenderItem* pItem); + + /// 替换子图元. + /// @param index 替换的位置 + /// @param pItem 用来替换旧图元的新图元 + /// @param bDelete 是否删除旧图元 + /// @return bDelete为FALSE时返回旧图元, 否则返回NULL + ZxRenderItem* replace(int index, ZxRenderItem* pItem, bool bDelete); + + /// 追加子图元 + void append(ZxRenderItem* p); + + /// 移除指定的子图元(不销毁) + void remove(ZxRenderItem* p); + + /// 返回指定位置的子图元 + ZxRenderItem* at(int i) const; + + /// 返回指定子图元的位置索引, 如果没找到则返回-1. 对于空指针, 此方法总是返回-1. + int indexOf(const ZxRenderItem* p) const; + + /// 从图元树上移除 + ZxRenderItem* detach(); + + /// 删除所有子节点 + virtual void clear(); + + // 在手动操作时, 判断此图元是否能容纳指定的子图元. + // 例如在曲线道里, 就可以对曲线以外的类型返回false. + //virtual bool canManualAdd(const ZxRenderItem* p) const; + + /// 获取图元基础边框(位置) + virtual QRectF getBounds() const; + + /// 获取图元的扩展边框. 默认是基础边框+外檐 + QRectF getExtendedBounds() const; + + /// 获取图元的外檐尺寸 + virtual float getEavesSize() const; + + /// 获取子图元坐标系下的边框(位置), 类似于Windows的Client Rect + QRectF getBoundsChildCoord() const; + + /// 获取场景坐标系下的图元基础边框(位置) + QRectF getBoundsSceneCoord() const; + + /// 获取场景坐标系下的图元扩展边框(位置) + QRectF getExtendedBoundsSceneCoord() const; + + /// 获取图元x坐标, short for getX() + float x() const; + + /// 获取图元y坐标, short for getY() + float y() const; + + /// 获取图元左上角坐标, short for getPos() + QPointF pos() const; + + /// 获取图元宽度, short for getWidth() + float width() const; + + /// 获取图元高度, short for getHeight() + float height() const; + + /// 获取图元x坐标 + float getX() const; + + /// 获取图元y坐标 + float getY() const; + + /// 获取图元左上角坐标 + QPointF getPos() const; + + /// 获取图元宽度 + float getWidth() const; + + /// 获取图元高度 + float getHeight() const; + + /// 设置图元边框 + /// @param rect 边框 + /// @param bSendEvent 是否发出 resize 和 move 事件, 默认为true. + /// @see onMove onResize + /// @note 普通情况都应该发事件, 但有一类逻辑问题可以用不发事件来解决, 见代码: + /// @code + /// void ZxPolyItem::setPoints(const QPolygonF & val) + /// { + /// m_points = val; + /// setBounds(m_points.boundingRect(), false); + /// } + /// + /// void ZxPolyItem::onMove(const QPointF& ptOld, const QPointF& ptNew) + /// { + /// m_points.translate(ptNew - ptOld); + /// } + /// @endcode + virtual void setBounds(const QRectF& rect, bool bSendEvent = true); + + /// 设置图元边框 + /// @see setBounds(const QRectF &, bool) + virtual void setBounds(float x, float y, float width, float height, bool bSendEvent = true); + + /// 移动图元 + /// @param x X坐标 + /// @param y Y坐标 + /// @note 此方法会发出move事件, 如果不想发出事件, 请用 setBounds 方法 + /// @see onMove + void move(float x, float y); + + /// 移动图元 + /// @param pos 坐标 + /// @note 此方法会发出move事件, 如果不想发出事件, 请用 setBounds 方法 + /// @see onMove + void move(const QPointF& pos); + + /// 改变图元尺寸 + /// @param width 宽度 + /// @param height 高度 + /// @note 此方法会发出resize事件, 如果不想发出事件, 请用 setBounds 方法. + /// @see onResize + void resize(float width, float height); + + /// 改变图元尺寸 + /// @param sz 尺寸 + /// @note 此方法会发出resize事件, 如果不想发出事件, 请用 setBounds 方法. + /// @see onResize + void resize(const QSizeF & sz); + + + /// 移动图元 + /// @param x X坐标 + /// @note 此方法会发出move事件, 如果不想发出事件, 请用 setBounds 方法 + /// @see onMove + void setX(float x); + + /// 移动图元 + /// @param y Y坐标 + /// @note 此方法会发出move事件, 如果不想发出事件, 请用 setBounds 方法 + /// @see onMove + void setY(float y); + + /// 改变图元宽度 + /// @param width 宽度 + /// @note 此方法会发出resize事件, 如果不想发出事件, 请用 setBounds 方法. + /// @see onResize + void setWidth(float width); + + /// 改变图元高度 + /// @param height 高度 + /// @note 此方法会发出resize事件, 如果不想发出事件, 请用 setBounds 方法. + /// @see onResize + void setHeight(float height); + + // 位置改变 + virtual void onMove(const QPointF& ptOld, const QPointF& ptNew); + + // 尺寸改变 + virtual void onResize(const QSizeF & szOld, const QSizeF & szNew); + + /// 查找指定位置处的控制点 + ZxHandleRef findHandle(const QPointF& pos, float fHandleSize, bool bSelectedOnly); + + /// 查找指定位置处的控制点 + ZxHandleRef findHandle(float x, float y, float fHandleSize, bool bSelectedOnly); + + /// 查找指定位置处的单个图元 + /// @param pos 查找的坐标 + /// @param bRecursive true表示查找所有子孙节点, false表示只查找直接子节点. 默认为true. + /// @param filter 查找条件, 这是一个过滤函数. 默认为NULL, 匹配所有图元. + /// @return 第一个匹配的图元 + ZxRenderItem* findItem(const QPointF& pos, ZxFilterFun filter = NULL, bool bRecursive = true); + + /// 查找指定位置处的单个图元 + /// @param x 查找的X坐标 + /// @param y 查找的Y坐标 + /// @param bRecursive true表示查找所有子孙节点, false表示只查找直接子节点. 默认为true. + /// @param filter 查找条件, 这是一个过滤函数. 默认为NULL, 匹配所有图元. + /// @return 第一个匹配的图元 + virtual ZxRenderItem* findItem(float x, float y, ZxFilterFun filter = NULL, bool bRecursive = true); + + /// 查找指定位置处的多个图元 + /// @param pos 查找的坐标 + /// @param bRecursive true表示查找所有子孙节点, false表示只查找直接子节点. 默认为true. + /// @param filter 查找条件, 这是一个过滤函数. 默认为NULL, 匹配所有图元. + /// @return 所有匹配的图元 + QList findItems(const QPointF& pos, ZxFilterFun filter = NULL, bool bRecursive = true); + + + /// 查找指定位置处的多个图元 + /// @param x 查找的X坐标 + /// @param y 查找的Y坐标 + /// @param bRecursive true表示查找所有子孙节点, false表示只查找直接子节点. 默认为true. + /// @param filter 查找条件, 这是一个过滤函数. 默认为NULL, 匹配所有图元. + /// @return 所有匹配的图元 + virtual QList findItems(float x, float y, ZxFilterFun filter = NULL, bool bRecursive = true); + + /// 查找指定类型的子(孙)图元 + template + T findChildItem(bool recursive = true) + { + int n = this->count(); + for (int i = n - 1; i >= 0; i--) + { + ZxRenderItem* c = at(i); + T p = 0; + if (recursive) + { + p = c->findChildItem(true); + } + if (p == 0) + { + p = dynamic_cast(c); + } + if (p) + { + return p; + } + } + + return 0; + } + + + /// 检测指定点处是否位于图元内部 + virtual bool isItemBody(float x, float y); + + /// 图元标志集 + Flags getFlags() const; + void setFlags(Flags flags); + + /// 是否选中 + bool isSelected() const; + + virtual bool isEqual(const IxRenderItem* pAnother) const; + + /// 设置选中标志 + void setSelected(bool b); + +public: + + /// 选中状态改变 + virtual void onSelectedChanged(); + + /// 选择本图元 + /// @note 此方法不但设置图元选中状态, 而且把图元加入场景的选中列表中. + /// @see setSelected(bool) + virtual void select(bool bClearOldSelect = true); + + /// 取消选择本图元. + /// @note 此方法不但取消图元选中状态, 而且从场景的选中列表中删除图元. + /// @see setSelected(bool) + virtual void deselect(bool bRecursive = false); + + /// 是否可见 + bool isVisible() const; + void setVisible(bool b); + + /// 可见状态改变 + virtual void onVisibleChanged(); + + /// 显示, 相当于setVisible(true) + void show(); + + /// 隐藏, 相当于setVisible(false) + void hide(); + + /// 是否隐藏, 等于 !isVisible() + bool isHidden() const; + + /// 是否可选 + bool isSelectable() const; + void setSelectable(bool b); + + /// 可选状态改变 + virtual void onSelectableChanged(); + + /// 是否锁定位置 + bool isLockPos() const; + void setLockPos(bool b); + + /// 锁定位置状态改变 + virtual void onLockPosChanged(); + + /// 是否锁定尺寸 + bool isLockSize() const; + void setLockSize(bool b); + + /// 锁定尺寸状态改变 + virtual void onLockSizeChanged(); + + /// 是否只读 + bool isReadOnly() const; + void setReadOnly(bool b); + + /// 只读状态改变 + virtual void onReadOnlyChanged(); + + /// 是否剪裁 + bool isClipping() const; + void setClipping(bool b); + + /// 剪裁状态改变 + virtual void onClippingChanged(); + + /// 是否偏移坐标 + bool hasLocalCoord() const; + void setLocalCoord(bool b); + + /// 偏移坐标状态改变 + virtual void onLocalCoordChanged(); + + /// 获取坐标系所属的图元. + /// @return 往祖先结点找, 返回最近一个hasLocalCoord()的图元. 没找到则返回图元树的根结点. + virtual ZxRenderItem* getCoordItem() const; + + /// 是否自动尺寸 + bool isAutoSize() const; + void setAutoSize(bool b); + + /// 自动尺寸标志改变 + virtual void onAutoSizeChanged(); + + /// 是否自动布局 + bool isAutoLayout() const; + void setAutoLayout(bool b); + + /// 自动布局标志改变 + virtual void onAutoLayoutChanged(); + + /// 绘图时是否反走样 + bool isAntiAlias() const; + void setAntiAlias(bool b); + + /// 反走样标志改变 + virtual void onAntiAliasChanged(); + + + /// 是否紧缩 + bool isShrink() const; + void setShrink(bool b); + + /// 紧缩标志改变 + virtual void onShrinkChanged(); + + /// 是否需要重新布局 + bool needLayout() const; + + /// 是否强制重新布局 + bool isForceLayout() const; + + /// 刷新布局 + void updateLayout(bool bForce = false); + + /// 可否手动删除 + bool canManualDelete() const; + void setManualDelete(bool b = true); + + /// 是否静态Policy + bool isStaticPolicy() const; + void setStaticPolicy(bool b); + + /// 是否平凡Policy + bool isOrdinaryPolicy() const; + void setOrdinaryPolicy(bool b); + + /// 实际上是否锁定位置 + bool isActuallyLockPos() const; + bool isActuallyLockSize() const; + + /// 刷新 + /// @note 刷新图元所占的区域, 包括附着在图元上的Policy等所占的区域 + virtual void update(); + + /// 刷新指定区域(图元的当前坐标系) + virtual void update(const QRectF& rect); + + + /// 准备右键菜单 + virtual void onPrepareContextMenu(QMenu * pMenu, const QPointF& pos); + + /// 从本图元坐标系转到子图元坐标系 + QPointF mapToChild(const QPointF& pos) const; + /// 从子图元坐标系转到本图元坐标系 + QPointF mapFromChild(const QPointF& pos) const; + /// 从本图元坐标系转到子图元坐标系 + QRectF mapToChild(const QRectF& rect) const; + /// 从子图元坐标系转到本图元坐标系 + QRectF mapFromChild(const QRectF& rect) const; + + + /// 从其他图元坐标系转到本图元坐标系 + QPointF mapFrom(ZxRenderItem* item, const QPointF& pt) const; + + /// 从本图元坐标系转到其他图元坐标系 + QPointF mapTo(ZxRenderItem* item, const QPointF& pt) const; + + /// 从本图元坐标系转到文档坐标系 + QPointF mapToScene(const QPointF& pos) const; + + /// 从文档图元坐标系转到本坐标系 + QPointF mapFromScene(const QPointF& pos) const; + + /// 从本图元坐标系转到文档坐标系 + QRectF mapToScene(const QRectF& rect) const; + + /// 从文档图元坐标系转到本坐标系 + QRectF mapFromScene(const QRectF& rect) const; + + /// 填属性表 + virtual void fillPtyPano(IxPtyPano* sheet); + + /// 获取标志集的字符串, 用来显示和调试 + virtual QString getFlagsString() const; + + /// 是否有祖先图元被选中 + /// @note 在某些操作中, 选中某个图元时相当于把整棵子树全选中了. 这个函数提了供一种快速检测这种状态的方法. + virtual bool isAncestorSelected() const; + + /// 判断本图元是否指定图元的祖先 + /// @note 这的祖先指图元树上的关系, 不是类的继承关系. 任何图元都不是它自己的祖先 + bool isAncestorOf(const ZxRenderItem* p) const; + + /// 判断本图元是否指定图元的子孙 + /// @note 这的子孙指图元树的上的关系, 不是类的继承关系. 任何图元都不是它自己的子孙 + bool isDescendantOf(const ZxRenderItem* p) const; + + // 左键双击 + virtual void onLeftDoubleClick(const QPointF& pt); + + // 左键单击 + virtual void onLeftClick(const QPointF& pt); + + // parent指针被改变 + /// @note 不是parent的内容被改变 + virtual void onParentChanged(); + + /// 不变性(完整性)验证. 这个函数里有一堆ASSERT, 验证图元未损坏. + /// @note ZxSceneItem 要求子图元必须是几个特定图层, 在ZxSceneItem::invariant() 中就可以加上这些验证. + /// @note 此为契约编程的概念, C++无法自动调用此方法, 但底层会在paint等使用频繁使用的函数里调用. 必要时模块层也可以显示调用. + virtual void invariant() const; + + /// 加载文件 + template + static T load(const QString& filePath) + { + ZxRenderItem* p = load(filePath); + T p1 = dynamic_cast(p); + if (p1 == 0 && p != 0) + { + Q_ASSERT(false); + delete p; + } + return p1; + } + + /// 加载 + static ZxRenderItem* load(const QString& filePath); + static ZxRenderItem* load(QFile& file); + static ZxRenderItem* load(QDataStream& stream); + + /// 保存 + virtual bool save(const QString& filePath) const; + virtual bool save(QFile& file) const; + virtual bool save(QDataStream& stream) const; + + /// 克隆图元 + /// @note 此函数自动使用序列化来克隆图元, 一般情况下无需重写. + virtual IxRenderItem* clone() const; + + /// 克隆图元 + /// @note 此函数自动使用序列化来克隆图元, 一般情况下无需重写. + template + T clone() const + { + ZxRenderItem* p = this->clone(); + T ret = dynamic_cast(p); + if (ret == 0) + { + delete p; + } + return ret; + } + + /// 图元导出为图片文件 + /// @param fileName 文件路径. + /// @param format 图片格式, 支持Qt所支持的格式和"SVG". + /// @param quality 暂未使用, 请设为-1 + /// @return 导出成功返回true, 失败返回false. + virtual bool exportImage(const QString& fileName, const char * format = 0, int quality = -1) const; + + /// 获取图元树迭代器 + virtual ZxRenderItemIterator getRenderTree(); + + /// 设置布局器 + virtual void setLayout(ZxLayout* p); + + /// 查找多个图元的最近公共祖先节点 + static ZxRenderItem* findCommonAncestor(const QList & items); + + /// 获取当前活动的属性表条目. + /// @note 用户在属性表里修改属性后, 通常会有一个回调, 例如调用对象的setXXXX()函数. + /// 在这些回调函数里, 我们就可以用getPropertyItem(bool)来获取当前所修改的属性表条目. + /// @param bOnlyWhenIsFirst 是否仅在当前图元是第一个图元时才返回. + /// @return 当前活动的(用户正在修改的)属性条目. 如果当前没有活动条目, 此函数返回NULL. + /// @see findPropertyItem(const QString &, bool) + static IxPtyItem * getPropertyItem(bool bOnlyWhenIsFirst = true); + + /// 从当前活动的属性表里查找指定条目. + /// @note 用户在属性表里修改属性后, 通常会有一个回调, 例如调用对象的setXXXX()函数. + /// 在这些回调函数里, findPropertyItem()来查找当前所修改的属性表中的指定条目. + /// @param key 指定条目的名称(路径), 如 "井头.井名.字体" + /// @param bOnlyWhenIsFirst 是否仅在当前图元是第一个图元时才返回. + /// @return 找到的条目, 当前没有活动条目或者查找失败时返回NULL. + /// @see getPropertyItem(bool) + static IxPtyItem * findPropertyItem(const QString& key, bool bOnlyWhenIsFirst = true); + +protected: + + /// 布局操作, 可重写, 默认操作是使用布局器布局. + /// \li 无论needLayout()的值是什么, 都要做布局. + /// \li 布局完了以后一定要setNeedLaout(false) + /// \li 此方法内要递归调用子图元的 doLayout() + virtual void onLayout(); + +public: + + /// 在需要布局的时候调用 onLayout() 重新布局 + void doLayout(); + + /// 获取属性窗口 + virtual IxPtyPano* getPtyPano(bool tryOuter = true) const; + + /// 获取图元的编辑器 + /// @param bCreate 是否创建 + /// @return 图元的编辑器, bCreate为true时保证返回可用的编辑器, 否则可能为NULL. + /// @note 每个图元都关联着一个编辑器 + /// @see emitSigInstallPolicies() sigInstallPolicies() onInstallPolicies() + virtual ZxEdit* getEdit(bool bCreate = true) const; + + // short for getEdit()->getHandlePolicy() + ZxHandlePolicy* getHandlePolicy() const; + + /// The recommended size for the widget. + /// If the value is an invalid size, no size is recommended. + /// The default implementation of sizeHint() returns an invalid size if there is no layout for this item, and returns the layout's preferred size otherwise. + virtual QSizeF getSizeHint() const; + + /// 调用 onInstallPolicies(), 然后发出信号 sigInstallPolicies() + void emitSigInstallPolicies(); + + /// (内部使用) + /// \internal + ZxRenderItem* getClippedBy(); + + static void saveMulti(QDataStream& stream, const QList & list); + static QList loadMulti(QDataStream& stream); + + +public slots: + +protected: + + /// 在此函数内安装编辑策略 + virtual void onInstallPolicies(); + + virtual bool needPaintSelf(QPainter* painter, const ZxPaintParam& param) const; + virtual bool needPaintDescendants(QPainter* painter, const ZxPaintParam& param) const; + + virtual void onApplyAutoSize(); + + virtual void onChildItemAdded(ZxRenderItem* p); + + virtual void onChildItemRemoved(ZxRenderItem* p); + +private: + + void checkNeedLayoutFlagConsistency(); + bool _findItems(QList & list, float x, float y, \ + ZxFilterFun filter, bool bRecursive); + void _insert(int index, ZxRenderItem* p); + void _setNeedLayout(bool bNeed); + void _setForceLayout(bool bForce); + _ZxRenderChildIndex* get_item_index_map(); + +private: + + // QList内部用的是指针数组, 我们直接用指针数据效率可能更高 + QVector m_vecChildren; + + // 父节点 + ZxRenderItem* m_pParent; + + // 外接矩形 + QRectF m_rectBounds; + + // 标志集 + Flags m_nFlags; + + // 当前的编辑器, 如内嵌文本输入框 + mutable ZxEdit* m_pEdit; + + // 布局器 + ZxLayout* m_pLayout; + + // 子图元位置索引, 加快indexOf等操作 + _ZxRenderChildIndex * m_pChildIndex; + + bool m_bInDoLayout : 1; // for debug + bool m_bHasOldOnLayout : 1; // for debug + bool m_bInPainting : 1; // for debug + + friend class ZxRenderView; + friend class ZxSceneItem; + friend class ZxSelectionPrivate; + friend class ZxLayout; +}; + +I_PLOTBASE_EXPORT QString zxSplitTagName(const QString& s); diff --git a/Include/iPlot/iPlotBase/ZxRenderItemIterator.h b/Include/iPlot/iPlotBase/ZxRenderItemIterator.h new file mode 100644 index 0000000..e8955cd --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxRenderItemIterator.h @@ -0,0 +1,49 @@ +#pragma once + +#include +#include "iPlotBase_global.h" + +class ZxRenderItem; + +/// 图件树的迭代器 +class I_PLOTBASE_EXPORT ZxRenderItemIterator +{ +public: + + ZxRenderItemIterator(ZxRenderItem* pRootItem); + ZxRenderItemIterator(const ZxRenderItemIterator& c); + const ZxRenderItemIterator& operator=(const ZxRenderItemIterator& c); + +public: + + // 先根遍历 + class I_PLOTBASE_EXPORT const_iterator + { + QStack stack; + const_iterator(ZxRenderItem* p); + + public: + + const_iterator(const const_iterator& c); + + ZxRenderItem* operator*(); + bool operator!=( const const_iterator& ) const; + bool operator==( const const_iterator& ) const; + const_iterator& operator++(); + const const_iterator& operator=(const const_iterator& c); + + friend class ZxRenderItemIterator; + }; + + const_iterator begin() const; + const_iterator end() const; + +private: + + ZxRenderItem* m_pRootItem; +}; + + + + + diff --git a/Include/iPlot/iPlotBase/ZxRenderSelection.h b/Include/iPlot/iPlotBase/ZxRenderSelection.h new file mode 100644 index 0000000..024c6f3 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxRenderSelection.h @@ -0,0 +1,115 @@ +#pragma once + +#include +#include +#include +#include +#include + +class ZxRenderItem; +class ZxSceneItem; +class QTimer; +class QTime; + +/// 当前选择的图件列表. +/// 已经为大数据量及频繁选择做了优化. +class I_PLOTBASE_EXPORT ZxRenderSelection : public QObject +{ + Q_OBJECT + struct Node + { + ZxRenderItem * item; + Node * prev; + Node * next; + }; + + static Node * alloc(); + + bool m_bChanged; + Node * head; + Node * tail; + QHash dict; + + void listAdd(Node * n); + void listRemove(Node * n); + + void doAdd(ZxRenderItem * w, bool force); + void doRemove(Node * n); + + void setChanged(); + + QTime * m_pLazyChangedTime; + QTimer * m_pTimer; +public: + ZxRenderSelection(ZxSceneItem * pScene); + ZxSceneItem * getScene(); + + /// 选择 + void add(ZxRenderItem * p, bool force = false); + /// 取消选择 + void remove(ZxRenderItem * p); + /// 反选 + void invert(ZxRenderItem * p, bool force = false); + + void clear(); + + ZxRenderItem * first() const; + ZxRenderItem * last() const; + + QList toList(); + + class I_PLOTBASE_EXPORT const_iterator + { + Node * p; + const_iterator(Node * p); + public: + ZxRenderItem * operator*(); + bool operator!=( const const_iterator& ) const; + bool operator==( const const_iterator& ) const; + const_iterator& operator++(); + friend class ZxRenderSelection; + }; + + const_iterator begin() const; + const_iterator end() const; + + bool empty() const; + bool isEmpty() const; + bool isSingle() const; + int count() const; + + QRectF getBounds(); + + bool hasSameParent() const; + + void move(float dx, float dy); + +signals: + + /// 个别图件被加进列表 + void sigItemAdded(ZxRenderItem * p); + + /// 个别图件被从列表移除 + void sigItemRemoved(ZxRenderItem * p); + + /// 选中列表被改变(即时) + void sigSelectionChanged(); + + /// 选中列表被改变(非即时) + void sigSelectionChangedLazy(); + + +protected: + friend class ZxRenderView; + // ZxRenderSelection(); + // ~ZxRenderSelection(); +protected slots: + virtual void onTimer(); +private: + ZxSceneItem * m_pScene; + ZxRenderSelection(const ZxRenderSelection & c); +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxRenderView.h b/Include/iPlot/iPlotBase/ZxRenderView.h new file mode 100644 index 0000000..bac9425 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxRenderView.h @@ -0,0 +1,553 @@ +#pragma once + +#include +#include +#include +#include + +#include "ZxRenderItem.h" +#include "ZxSceneItem.h" +#include "ZxRenderItemIterator.h" +#include "IxRedoUndo.h" +#include "iPlotBase_global.h" + +class QActionGroup; +class QUndoCommand; +class ZxToolState; +class ZxTool; +class QMenu; +class QComboBox; +class QPixmap; +class QPushButton; +class QPrinter; + +class ZxSelectionOutline +{ +public: + QPixmap pixmap; + int xc; + int yc; +}; + +// 图形视图(图元显示和操作) +class I_PLOTBASE_EXPORT ZxRenderView + : public QAbstractScrollArea + , virtual public IxDynObj + , virtual public IxRedoUndo +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxRenderView(QWidget* parent = 0); + virtual ~ZxRenderView(); + + enum ZoomMode + { + eZoomFree, + eZoomFitWidth, + eZoomFitHeight, + eZoomFitWindow + }; + +public: + + // 强制显示隐藏滚动条 + void forceShowScrollBar(bool bHori, bool bVisible); + + // 获取图元树迭代器 + ZxRenderItemIterator getRenderTree() const; + + // 堆栈相关 + virtual QUndoStack* getUndoStack(); + virtual void pushCommand(QUndoCommand* cmd); + + // 场景 + virtual void setScene(ZxSceneItem* p, bool bOwnScene = false); + virtual ZxSceneItem* getScene() const; + + // 获取当前工具正在操作视图 + static ZxRenderView* getCurrentToolView(); + + // 获取(建议的)控制点尺寸 + float getHandleSize(); // mm + + // 获取(建议的)控制点尺寸, 并转到文档坐标(随着缩放率变化) + float getHandleSizeSceneCoord(); // mm + + // 快照模式开关,快照模式下重绘速度快, 但只在显示区域发生变化时才刷新快照. + virtual void setSnapshotMode(bool b); + virtual bool isSnapshotMode() const; + QPixmap getSnapshot(); //获取快照 + virtual void repaintSnapshot();//立即刷新快照, 在非快照模式下无效果. + virtual void updateSnapshot();//刷新快照, 但不是立即刷新, 在非快照模式下无效果. + + // 是否显示纸张页面及边框 + void setPaperMode(bool b); + +public: + + // 准备右键菜单 + virtual void onPrepareContextMenu(QMenu* pMenu, const QPointF& pos); + + // 获取选择区域的轮廓(实际上可能是详图, 不一定就是线框轮廓) + virtual ZxSelectionOutline getSelectionOutline(int nMouseX, int nMouseY, \ + const QColor overlapColor = QColor(0, 127, 255, 63), \ + ZxFilterFun filter = 0); + + // 从本视图坐标系转到文档坐标系 + QPointF mapToScene(const QPointF& pos) const; + QRectF mapToScene(const QRectF& rect) const; + QSizeF mapToScene(const QSizeF & sz) const; + + // 从文档坐标系转到本视图坐标系 + QPointF mapFromScene(const QPointF& pos) const; + QRectF mapFromScene(const QRectF& rect) const; + QSizeF mapFromScene(const QSizeF & sz) const; + + // 从本视图坐标系转到全局坐标系 + QPointF mapToGlobal(const QPointF& pos) const; + QPoint mapToGlobal(const QPoint& pos) const; + + // 从全局坐标系转到本视图坐标系 + QPointF mapFromGlobal(const QPointF& pos) const; + QPoint mapFromGlobal(const QPoint& pos) const; + + // 缩放模式 + virtual void setZoomMode(ZoomMode mode, bool reLayout = true); + ZoomMode getZoomMode() const; + + // 获取缩放倍数 + float getZoomRatioX() const; + float getZoomRatioY() const; + float getZoomRatio() const; + + // 获取缩放模式或百分比, 以便用来显示给用户. + QString getZoomString() const; + + // 缩放到指定区域 + virtual void zoomTo(const QRectF& rectSceneCoord); + + // 把场景的某点对应到视图的某点 + virtual void scrollScenePosToViewPos(const QPointF& ptScene, const QPointF& ptView); + + // 把场景的某点显示到视图中心 + virtual void scrollScenePosToViewCenter(const QPointF& ptScene); + + // 把矩形变为和视图一样的长宽比例 + virtual QRectF adjustRectFitViewAspect(const QRectF& rect); + + // 获取屏幕DPI + static int getDpiX(); + static int getDpiY(); + + // 获取屏幕每毫米的像素数 + static float getPpmmX(); + static float getPpmmY(); + + // 还原鼠标光标. + // 一般是箭头, 但也可能是其它, 所以不能用 setCursor(Qt::ArrowCursor); + virtual void restoreCursor(); + +signals: + + // 信号: 有图元被移出图件树 + void sigItemDetached(ZxRenderItem* pItem); + + // 信号:双击 + void sigLeftDoubleClick(const QPointF& pt); + + // 信号:为了PF同步新增的信号 + void sigZoomedX(float r, bool reLayout); + void sigZoomedY(float r, bool reLayout); + void sigMouseWheel(const QPointF& pt, int delta); + void sigZoomStrChanged(const QString& s, bool reLayout = true); + + // 信号:缩放 + void sigZoomedIn(); + void sigZoomedOut(); + void sigZoomedRaw(); + +public slots: + + // 设置缩放倍数(例如2.5倍) + virtual void setZoomRatioX(float r, bool reLayout); + virtual void setZoomRatioY(float r, bool reLayout); + virtual void slotMouseWheel(const QPointF& pt, int delta); + + // 设置缩放模式或百分比. + // @param s 输入"120"或"120%"均表示放大到1.2倍 + // @param reLayout 是否立即重新布局 + virtual void slotZoomStrChanged(const QString& s, bool reLayout); + + // 放大/缩小/初始 + virtual void zoomIn(); + virtual void zoomOut(); + virtual void zoomRaw(); + virtual void zoomInOnly(); + virtual void zoomOutOnly(); + + // 处理保存 + virtual void slotSaveAsImg(); + + // 处理打印动作 + virtual void slotPrint(); + virtual void slotPrintPreview(); + virtual void print(QPrinter *printer); + virtual void printPreview(QPrinter *printer); + + // 相当于 viewport()->update(...) + virtual void updateViewport(); + + // 相当于 viewport()->update(...) + virtual void slotUpdateViewport(const QRect&); + + // 相当于 viewport()->repaint(...) + virtual void repaintViewport(); + +private: + + void notifyItemDetached(ZxRenderItem* pItem); + +protected slots: + + virtual void slotZoomEditingFinished(); + virtual void slotZoomComboIndexChanged(const QString& text); + void slotTheOwnedSceneDestroyed(QObject* p); + +public: + + // 画背景及纸张 + virtual void paintPaper(QPainter* painter); + + // 画工具、Policy、控制点、辅助线等前景 + // @note 打印和输出图片时不画这一层 + virtual void paintOverlay(QPainter* painter); + + // 画文档内容 + virtual void paintScene(QPainter* painter, const ZxPaintParam& param); + + // 用默认的ZxPaintParam来绘图 + virtual void paintScene(QPainter* painter); + + // 在指定画布上绘制图形(无前景和背景) + // deviceRect: 设备坐标范围,坐标单位为像素,如果为空,则表示按照图形实际大小输出 + // expose: 文档坐标范围,如果为空表示输出完整图形 + virtual void paint(QPainter* painter, QRect deviceRect = QRect(), QRectF expose = QRectF(), bool isPreview = false); + +protected: + + virtual void paintEvent(QPaintEvent *); + + virtual void resizeEvent(QResizeEvent *); + + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void wheelEvent(QWheelEvent *); + + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + + virtual void customContextMenuRequested(const QPoint &pos); + + virtual void enterEvent(QEvent *); + virtual void leaveEvent(QEvent *); + + virtual void hideEvent(QHideEvent *); + + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + + virtual void closeEvent(QCloseEvent *); + +protected: + + virtual QSizeF getViewportSizePixel() const; + + // 见Qt文档, 滚动位置发生变化 + virtual void scrollContentsBy ( int dx, int dy ); + + // 根据缩放模式计算出缩放率 + virtual void calcZoomRatio(); + + // 计算转换矩阵 + static void calcMatrix(QMatrix & m, float scaleX, float scaleY, float x0, float y0); + + // 计算转换矩阵 + void calcMatrix(QMatrix & m, float x0, float y0); + + // 更新转换矩阵 + virtual void calcMatrix(); + +private: + + void _setZoomRatio(float f, bool reLayout, bool sync, bool bX); + + // 以下函数在QWdiget里是非虚的, 不能重写. + // 但他们又很容易和viewport里的混淆, 所以设为private的, 避免误用 + // 如果确实要用, 可使用限定符调用基类的: QAbstractScrollArea::update() + + // (已封闭) use viewport()->update(...) instead. + void update(); + + // (已封闭) use viewport()->repaint(...) instead. + void repaint(); + + // (已封闭) use viewport()->update(...) instead. + void update(int x, int y, int w, int h); + + // (已封闭) use viewport()->update(...) instead. + void update(const QRect&); + + // (已封闭) use viewport()->update(...) instead. + void update(const QRegion&); + + // (已封闭) use viewport()->repaint(...) instead. + void repaint(int x, int y, int w, int h); + + // (已封闭) use viewport()->repaint(...) instead. + void repaint(const QRect &); + + // (已封闭) use viewport()->repaint(...) instead. + void repaint(const QRegion &); + + // (已封闭) use paint(...) instead + void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), + const QRegion &sourceRegion = QRegion(), + RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren)); + + // (已封闭) use paint(...) instead + void render(QPainter* painter, const QPoint &targetOffset = QPoint(), + const QRegion &sourceRegion = QRegion(), + RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren)); + + // 打印或者打印预览 + virtual void print(QPrinter *printer, bool isPreview); + +public: + // 相当于 viewport()->update(...) + virtual void updateViewport(int x, int y, int w, int h); + + // 相当于 viewport()->update(...) + virtual void updateViewport(const QRect&); + + // @see void updateViewport(const QRect&) + virtual void updateViewport(const QRectF&); + + // 相当于 viewport()->update(...) + virtual void updateViewport(const QRegion&); + + // 相当于 viewport()->repaint(...) + virtual void repaintViewport(int x, int y, int w, int h); + + // 相当于 viewport()->repaint(...) + virtual void repaintViewport(const QRect &); + + // 相当于 viewport()->repaint(...) + virtual void repaintViewport(const QRegion &); + + // 文档发生改变 + virtual void onDocUpdate(const QRectF * pSceneRect); + + // 布局. 包括更新滚动条范围, 做页面布局, 计算矩阵等 + virtual void layoutViewport(QRectF * pSceneBounds = 0); + + // 获取窗口边距 + virtual void getMargins(float * top, float * left, float * bottom, float * right) const; + + // 设置窗口边距 + virtual void setMargins(float top, float left, float bottom, float right); + + // 获取文档坐标系下的窗口边距 + virtual void getMarginsSceneCoord(float * top, float * left, float * bottom, float * right) const; + + // 获取文档范围 + virtual QRectF getSceneBounds() const; + + // 获取加上缩进后的文档范围 + virtual QRectF getSceneBoundsWithMargins() const; + + // 获取当前缩放率下视口能显示的最大文档尺寸 + virtual QSizeF getViewportSizeMillimeter() const; + + // 获取当前可见的场景区域 + virtual QRectF getViewportRectSceneCoord() const; + + // 滚动位置 + virtual QPointF getScrollPos() const; + virtual void setScrollPos(const QPointF& pos); + virtual void setScrollPos(float x, float y); + + // 水平滚动位置 + virtual void setHorizontalScrollPos(float pos); + virtual void setVerticalScrollPos(float pos); + + // 设置缩放下拉栏是否可见 + void setZoomComboVisible(bool b); + + // 不变性检测 + virtual void invariant() const; + + // 对齐方式. + // 暂时只支持居中和不居中 + virtual void setAlignment(Qt::Alignment alignment); + virtual Qt::Alignment getAlignment() const; + +#ifdef _SCAN_OLD_CODE_ + virtual void setSmartHorizontalScrollPos(bool b); + bool isSmartHorizontalScrollPos() const; + + virtual void setSmartVerticalScrollPos(bool b); + bool isSmartVerticalScrollPos() const; +#endif + +public: + + // 获取视图中所有工具 + QVector getTools() const; + + // 活动工具 + virtual ZxTool* getActiveTool() const; + virtual void setActiveTool(int index); + virtual void setActiveTool(ZxTool* p); + virtual void setActiveTool(const QString& sToolText); + + // 默认工具 + virtual ZxTool* getDefaultTool() const; + virtual void setDefaultTool(int index); + virtual void setDefaultTool(ZxTool* p); + + // 把工具加到视图中. + // @ pTool 要添加的工具. 可以为0, 0将显示为分隔线. + // 注: 视图将负责销毁工具 + int addTool(ZxTool* pTool); + + // 获取指定action, 触发action可激活工具 + QAction* getToolAction(int index) const; + QAction* getToolAction(ZxTool* p) const; + + // 删除全部工具 + virtual void clearTools(); + + // 活动视图 + bool isActiveView() const; + bool activateView(); + + // 当前视图被激活/被取消激活 + virtual void onActivated(QWidget* pOldActiveView); + virtual void onDeactivated(QWidget* pNewActiveView); + + // 工具的状态和另一个视图同步(单次同步) + void syncActiveToolWith(const ZxRenderView* pOther); + + // 从另一个视图中复制工具 + void copyToolsFrom(const ZxRenderView* pOther); + +protected: + +// void onSerialize(ZxSerializer* ser); +// void onDeserialize(ZxSerializer* ser); + + bool checkAndDoLayout(); + + virtual void onViewportParamChanged(); + + virtual void onSelectionChanged(ZxSelection& selection); + + // 转换矩阵, 用作painter的 matrix + QMatrix getMatrixDocToView() const; + + // 转换矩阵 + QMatrix getMatrixViewToDoc() const; + + virtual void onIdle(); + +public: + + void setCursorKeeping(bool bKeeping); + +private: + // scene + // |<----------------------------------------->| + // |==============================|<---------->| + // min page + void setHorizontalScrollInfo(float fMin, float fScene, float fView); + void setVerticalScrollInfo(float fMin, float fScene, float fView); + + void prepareBackBuffer(); + +private slots: + + void slotActivateTool(); + +private: + + // 场景指针 + ZxSceneItem* m_pScene; + + // Action & Tool + QVector m_vecToolActions; + QVector m_vecTools; + QActionGroup* m_pToolActionGroup; + int m_nDefaultTool; + int m_nActiveTool; + + // 用作painter的world matrix + QMatrix* m_pMatrixDocToView; + QMatrix* m_pMatrixViewToDoc; + + static float m_fCachedPpmmX; + static float m_fCachedPpmmY; + + // 工具的状态, 同时只有一个工具激活, 所以没必要每个工具都记一份 + ZxToolState* m_pToolState; + + // 缩放 + QComboBox* m_pComboZoom; + ZoomMode m_nZoomMode; + float m_fZoomX; + float m_fZoomY; + + float m_fMarginLeft; + float m_fMarginTop; + float m_fMarginRight; + float m_fMarginBottom; + float m_fScrollOriginX; + float m_fScrollOriginY; + + QRectF m_rectLastBounds; // 用来检测是否需要重新布局 + QSizeF m_sizeLastViewport; + QPixmap m_snapshot; + QPixmap m_backBuffer; + + Qt::Alignment m_nAlignment; + + bool m_bSnapshotMode; + bool m_bPaperMode; + bool m_bNeedRepaintSnapshot; + bool m_bInLayoutViewport; + +#ifdef _SCAN_OLD_CODE_ + bool m_bSmartHorizontalScrollPos : 1; + bool m_bSmartVerticalScrollPos : 1; +#endif + + bool m_bOwnScene; + bool m_bPainting; + bool m_bHover; + bool m_bNoBackBuffer; // 不使用后台缓存 (此变量不影响Qt自带的防闪烁机制) + +private: + + // 临时变量 + bool m_bKeepingCursor; //对于Polygon生成过程中,不能恢复为箭头 + + bool m_bActive;//临时 + + friend class ZxTool; + friend class ZxSceneItem; + friend class ZxCompoundTool; +}; diff --git a/Include/iPlot/iPlotBase/ZxSceneItem.h b/Include/iPlot/iPlotBase/ZxSceneItem.h new file mode 100644 index 0000000..1c44aa7 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSceneItem.h @@ -0,0 +1,224 @@ +#pragma once + +#include "IxRedoUndo.h" +#include "IxRenderItem.h" +#include "ZxTempLayer.h" +#include "iPlotBase_global.h" + +class QUndoStack; +class QUndoCommand; +class ZxSelection; +class IxPtyPano; +class ZxRenderItem; +class QSignalMapper; +class QKeyEvent; + +/// 图形场景. 具有 图形文档 和 图元树的根节点双重分身 +class I_PLOTBASE_EXPORT ZxSceneItem + : public ZxRenderItem + , virtual public IxRedoUndo +{ +public: + + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + explicit ZxSceneItem(QObject* parent = 0); +// ZxSceneItem(const ZxSceneItem & c); +// ZxSceneItem* clone() const; + ~ZxSceneItem(); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + /// 获取当前选中的图元 + ZxSelection& getSelection(); + + /// 获取撤销/恢复堆栈 + virtual QUndoStack * getUndoStack(); + + /// 类似于QUndoStack::beginMacro()的功能, 但做了一些特殊处理 + /// @see QUndoStack::beginMacro() + virtual void beginUndoStackMacro(); + + /// 类似于QUndoStack::endMacro()的功能, 但做了一些特殊处理 + /// @see QUndoStack::endMacro() + virtual void endUndoStackMacro(); + + /// 运行一个命令 + virtual void pushCommand(QUndoCommand * cmd); + + /// 清除widget + virtual void clearEditingWidget(); + + /// 刷新 + virtual void update(); + virtual void update(const QRectF& rect); + + void paintBack(QPainter* painter, const ZxPaintParam& param); + + void paintFront(QPainter* painter, const ZxPaintParam& param); + + /// 设置文档路径 + virtual void setFilePath(const QString& filePath); + + /// 获取文档路径 + virtual QString getFilePath() const; + + + /// 文档是否已修改 + virtual bool isModified() const; + + /// 文档修改标识 + virtual void setModified(bool bModified); + + /// 关闭文档 + virtual bool close(bool bPromptSave = true); + + /// 保存文档 + virtual bool save(); + + /// 保存文档 + virtual bool save(const QString& filePath); + + /// 另存文档 + virtual bool saveAs(); + + /// 设置属性窗口 + virtual void setPtyPano(IxPtyPano* p); + + /// 获取属性窗口 + virtual IxPtyPano* getPtyPano(bool tryOuter = true) const; + + /// 获取背景图层 (不建议使用) + virtual ZxRenderItem* getBackLayer() const; + + /// 设置背景图层 (不建议使用) + virtual void setBackLayer(ZxRenderItem* pLayer); + + /// 获取主图层 + virtual ZxRenderItem* getMainLayer() const; + + /// 设置主图层 + virtual void setMainLayer(ZxRenderItem* pLayer); + + /// 获取前景图层 (不建议使用) + virtual ZxRenderItem* getFrontLayer() const; + + /// 设置前景图层 (不建议使用) + virtual void setFrontLayer(ZxRenderItem* pLayer); + + /// 获取临时图层 + virtual ZxTempLayer * getTempLayer() const; + + /// 设置临时图层 (不推荐, 因为改了以后可能和别人的需求冲突) + virtual void setTempLayer(ZxTempLayer * pLayer); + + virtual void invariant() const; + + /// 获取所有和本场景关联的视图 + /// @note 依据的是文档视图管理器里的信息, 即addView()/addDoc()/bindDocView()等函数所建立的关系. + QList getGraphViews(); + + /// 往菜单里添加选择图元的actions + virtual void makeSelectItemsMenu(QMenu* pMenu, const QPointF& pt, ZxFilterFun filter = NULL, bool bRecursive = true); + + /// 获取文档标题 + virtual QString getTitle() const; + + virtual QIcon getIcon() const; + + /// 是否自动关闭场景. + virtual bool isAutoClose() const; + + /// 设置是否自动关闭场景 + virtual void setAutoClose(bool bAutoClose); + + /// 弹出对话框, 选择保存文件 + virtual QString getSaveFileName() const; + + virtual void updateEditActionStatus(); + + /// 设置本场景的属性表配置 + /// @param sConfigName 配置文件名(不带扩展名). 如果为空则使用所在模块的配置. + void setPtyTag(const QString& sConfigName); + + /// 获取本场景使用的属性表配置 + QString getPtyTag() const; + + /// 把焦点设到Active View上, 只在Active View是关联到本Scene时起作用. + void trySyncFocusWithActiveView(); + +signals: + + /// 信号: 安装编辑策略, 在收到信号时应为图元安装编辑策略 + /// @note 信号的sender是场景, 参数里的图元才是实际需要安装策略的图元. + void sigInstallPolicies(ZxRenderItem* pItem); + + /// 信号: 有图元被移出图件树 + void sigItemDetached(ZxRenderItem* pItem); + + // 对于update函数无法顺利刷新的,触发如下信号在View中直接刷新 + void sigUpdate(); + void sigUpdateRect(const QRect&); + +protected: + + virtual void emitSigInstallPolicies(ZxRenderItem* pItem); + void notifyItemDetached(ZxRenderItem* pItem); + +protected slots: + + virtual void slotUndoStackIndexChanged(int); + + virtual void slotSelectItem(QObject* p); + + virtual void cloneSelection(); + + virtual void slotEditCopy(); + virtual void slotEditPaste(); + virtual void slotEditCut(); + virtual void slotEditDelete(); + virtual void slotEditSelectAll(); + +protected: + + /// 选中列表被改变(即时) + virtual void onSelectionChanged(); + + /// 选中列表被改变(非即时) + virtual void onSelectionChangedLazy(); + + virtual void keyPressEvent(QKeyEvent *e); + virtual void keyReleaseEvent(QKeyEvent * e); + +protected: + + QSignalMapper* m_pSelectMapper; + QUndoStack* m_pUndoStack; + ZxSelection* m_pSelection; + QString m_sSceneFilePath; + int m_nUndoStackMacroNest; + bool m_bAutoClose; + bool m_bModified; + + QList m_listPendingCommand; + ZxRenderView* m_pTheOnlyOwnerView; + + QAction* actionUndo; + QAction* actionRedo; + QAction* actionEditCopy; + QAction* actionEditPaste; + QAction* actionEditCut; + QAction* actionEditDelete; + QAction* actionEditSelectAll; + QString m_sPtyTag; + IxPtyPano* m_pPtyPano; + + friend class ZxRenderItem; + friend class ZxRenderView; + friend class ZxSelection; + friend class ZxSelectionPrivate; +}; diff --git a/Include/iPlot/iPlotBase/ZxSelection.h b/Include/iPlot/iPlotBase/ZxSelection.h new file mode 100644 index 0000000..3376498 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSelection.h @@ -0,0 +1,175 @@ +#pragma once + +#include +#include +#include +#include +#include "ZxPaintParam.h" +#include "ZxRenderAlign.h" +#include "iPlotBase_global.h" + +class ZxRenderItem; +class ZxSceneItem; +class QTimer; +class QTime; +class ZxSelectionPrivate; +class ZxSelectionNode; + +/// 当前选择的图件列表. +/// 已经为大数据量及频繁选择做了优化. +/// @note 此类的行为类似Qt的shared类. +class I_PLOTBASE_EXPORT ZxSelection +{ +public: + +public: + ZxSelection(); + ZxSelection(const ZxSelection& c); + ~ZxSelection(); + + const ZxSelection& operator=(const ZxSelection& c); + +// // 获取实际对象, 以挂接信号 +// QObject & operator*(); + +// // 获取实际对象, 以挂接信号 +// const QObject & operator*() const; + + /// 获取实际对象, 以挂接信号 + QObject* qobject() const; + + /// 获取所属的场景 + ZxSceneItem* getScene() const; + + /// 选择 + void add(ZxRenderItem* p, bool force = false); + + /// 选择 + void add(const QList & items, bool force = false); + + /// 取消选择 + void remove(ZxRenderItem* p); + + /// 取消选择 + void remove(const QList & items); + + /// 反选 + void invert(ZxRenderItem* p, bool force = false); + + /// 反选 + void invert(const QList & items, bool force = false); + + /// 清除选择 + void clear(); + + /// 获取第一个图元 + /// @return 列表不为空时返回第一个图元, 列表为空时返回NULL + /// @see begin() end() last() + ZxRenderItem* first() const; + + /// 获取最后一个图元 + /// @return 列表不为空时最后一个图元, 列表为空时返回NULL + /// @see begin() end() first() + ZxRenderItem* last() const; + + /// 转换成list + QList toList() const; + + class I_PLOTBASE_EXPORT const_iterator + { + ZxSelectionPrivate * imp; + ZxSelectionNode* p; + const_iterator(ZxSelectionPrivate * imp, ZxSelectionNode* p); + public: + const_iterator(); + ZxRenderItem* operator*(); + bool operator!=( const const_iterator& ) const; + bool operator==( const const_iterator& ) const; + const_iterator& operator++(); + friend class ZxSelection; + }; + + /// Returns an STL-style iterator pointing to the first item in the list. + /// @see first() last() end() + /// @code + /// for(auto it = selection.begin(); it != selection.end(); ++it) + /// { + /// ZxRenderItem* p = *it; + /// // do something + /// } + /// @endcode + const_iterator begin() const; + + /// Returns an STL-style iterator pointing to the imaginary item after the last item in the list. + /// @see last() last() begin() + /// @code + /// for(auto it = selection.begin(); it != selection.end(); ++it) + /// { + /// ZxRenderItem* p = *it; + /// // do something + /// } + /// @endcode + const_iterator end() const; + + /// 列表是否为空 + bool empty() const; + + /// 列表是否为空 + bool isEmpty() const; + + /// 是否单选 + bool isSingle() const; + + /// 选中的图元数量 + int count() const; + + // 选中的图元是否相同类型. + // @return 类型相同或列表为空时返回true, 否则返回false. + // @note 根据 item->getClassName() 来判断 + //bool isSameType() const; + + /// 选中的图元的边框的并集 + QRectF getBounds(ZxFilterFun filter = 0); + + /// 选中的图元是否有相同父节点 + bool hasSameParent() const; + + /// 移动选中的图元 + void move(float dx, float dy); + + /// 查找选中图元的最近公共祖先节点 + ZxRenderItem* findCommonAncestor() const; + + /// 对齐算法 + static QList calcAlign(const QList & rects, const QRectF& box, Zx::ChartObjAlign type); + + /// 对齐 + void align(Zx::ChartObjAlign mode); + + /// 目前选中的对象是否支持指定对齐方式 + bool canAlign(Zx::ChartObjAlign mode) const; + + /// 复制到剪贴板 + bool copy() const; + + /// 从剪贴板粘贴 + bool paste(); + + /// 模拟重新选择, 可用来实现刷新属性表等功能 + void emulateReSelect(); + + /// 判断是否含有指定图元. + bool contains(ZxRenderItem* p) const; + +private: + + ZxSelection(ZxSceneItem* pScene); + ZxSelectionPrivate* imp; + + friend class ZxSceneItem; + friend class ZxSelectionPrivate; +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxSelectionPrivate.h b/Include/iPlot/iPlotBase/ZxSelectionPrivate.h new file mode 100644 index 0000000..d6ebd38 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSelectionPrivate.h @@ -0,0 +1,87 @@ +#pragma once + +#include +#include +#include +#include + +#include "iPlotBase_global.h" + +class ZxRenderItem; +class ZxSceneItem; +class QTimer; +class QTime; + +/// @internal +class ZxSelectionNode +{ +public: + ZxRenderItem* item; + ZxSelectionNode* prev; + ZxSelectionNode* next; +}; + +/// @internal +class ZxSelectionPrivate : public QObject +{ + Q_OBJECT + + static ZxSelectionNode* alloc(); + + bool m_bChanged; + ZxSelectionNode* head; + ZxSelectionNode* tail; + QHash dict; + + void listAdd(ZxSelectionNode* n); + void listRemove(ZxSelectionNode* n); + + void doAdd(ZxRenderItem* w, bool force); + void doRemove(ZxSelectionNode* n); + + void setChanged(); + + QTime* m_pLazyChangedTime; + QTimer* m_pTimer; + + int m_nRefCount; + ZxSceneItem* m_pScene; + + ZxSelectionPrivate(ZxSceneItem* pScene); + ~ZxSelectionPrivate(); + int release(); + int addRef(); + void add(ZxRenderItem* p, bool force = false); + void remove(ZxRenderItem* p); + void invert(ZxRenderItem* p, bool force = false); + void clear(); + bool contains(ZxRenderItem* p) const; + +signals: + + /// 个别图件被加进列表 + void sigItemAdded(ZxRenderItem* p); + + /// 个别图件被从列表移除 + void sigItemRemoved(ZxRenderItem* p); + + /// 选中列表被改变(即时) + void sigSelectionChanged(); + + /// 选中列表被改变(非即时) + void sigSelectionChangedLazy(); + +protected slots: + + void onTimer(); + +private: + + ZxSelectionPrivate(const ZxSelectionPrivate& c); + + friend class ZxSelection; +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxSnapGrid.h b/Include/iPlot/iPlotBase/ZxSnapGrid.h new file mode 100644 index 0000000..6cba59e --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSnapGrid.h @@ -0,0 +1,65 @@ +#pragma once +#include +#include +#include +#include "IxSerDes.h" +#include "iPlotBase_global.h" + +class ZxRenderItem; +class QPainter; +class ZxPaintParam; + +/// 对齐网格 +/// @note 对齐网格不能做成Layout, 因为只对当前鼠标移动的对象起作用 +class I_PLOTBASE_EXPORT ZxSnapGrid + : virtual public IxDynObj + , virtual public IxSerDes + , virtual public IxGridAlign +{ + ZX_DECLARE_DYNAMIC +public: + enum Style + { + dotStyle, + lineStyle + }; + explicit ZxSnapGrid(ZxRenderItem * pOwner = 0); + virtual ~ZxSnapGrid(); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual QPointF calcSnapPos(const QPointF & pos) const; + virtual void paint(QPainter * painter, const ZxPaintParam & param); + + int getVCount() const; + void setVCount(int n); + + int getHCount() const; + void setHCount(int n); + + void setGridWidth(float fGridWidth); + + QColor getColor() const; + void setColor(const QColor & color); + + bool isSnapEnabled() const; + void setSnapEnabled(bool bEnabled); + bool isGridVisible() const; + void setGridVisible(bool bVisible); + Style getStyle() const; + void setStyle(Style style); +private: + float getGridWidth() const; + float getGridHeight() const; + + ZxRenderItem * m_pOwner; + float m_nVCount; + float m_nHCount; + QColor m_color; + bool m_bEnabled; + bool m_bVisible; + Style m_style; +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxSubAxisBase.h b/Include/iPlot/iPlotBase/ZxSubAxisBase.h new file mode 100644 index 0000000..67dd658 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSubAxisBase.h @@ -0,0 +1,345 @@ +#pragma once + +#include +#include +#include +#include + +#include "Defines.h" +#include "ZxRenderItem.h" +#include "ZxDrawHelper.h" +#include "iPlotBase_global.h" + +// 该类主要是为了坐标轴在显示方面的复原 +class I_PLOTBASE_EXPORT iAxisTickInfo +{ + +public: + + iAxisTickInfo(); + +public: + + float m_fMax; + float m_fMin; + VecFloat m_vecTicks; +}; + +class IxPtyItem; +class ZxAxisHelper; + +// 坐标轴基类 +class I_PLOTBASE_EXPORT ZxSubAxisBase : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSubAxisBase(); + ZxSubAxisBase(const QString& name); + + ZxSubAxisBase* clone(); + void copyToThis(ZxSubAxisBase *pAxisBase); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 模版 + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + // 属性 + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 数值转换(屏幕坐标与实际值) + virtual float getValueForPos(float fPos) const; + virtual float getPosForValue(float fVal) const; + + // 标题显示内容 + QString getLabelOfTitle(); + + // 当图形Move时,刷新坐标轴以及发送信号,(仅仅对数坐标有用) + void runFreshWithLogMove(); + + // 获取坐标轴大刻度的间隔长度,屏幕坐标 + // 为了特征线的默认效果 + virtual float getPerCellLenByPos(); + + // Plot整体移动时的处理,20190222 + void changeRangeWithMove(const QPointF& ptStart, \ + const QPointF& ptEnd); + +public: + + // 名称 + QString getName(void) const; + void setName(QString name); //不发送信号 + void setNameEx(QString name); //发送信号 + + // 别名 + QString getAlias(void) const; + void setAlias(QString name); + + // 范围 + float getRangeMin(void) const; + float getRangeMax(void) const; + void setRangeMin(float f); + void setRangeMax(float f); + + // 范围(针对实时增加) + float getRangeMinEx(void) const; + float getRangeMaxEx(void) const; + void setRangeMinEx(float f); + void setRangeMaxEx(float f); + + // 主区间 + float getMainInterval(void) const; + void setMainInterval(float fValue); + float getMainIntervalCount(); + float getMainInterval(int nIndex); + + // 到次区间 + float getSubInterval(void) const; + void setSubInterval(float fValue); + + // 小数点个数 + int getDecimalNumber(void) const; + void setDecimalNumber(int n); + + // 轴类型 log对数,Linear常规 + AxisType getAxisType(void) const; + void setAxisType(AxisType type); + int getAxisTypeEx(void) const; + void setAxisTypeEx(int type); + + // 轴位置(不涉及属性页,不涉及update,在外界布局中处理) + AxisPos getAxisPos() const; + void setAxisPos(AxisPos pos); + + // 画笔颜色 + QColor getColor(void) const; + void setColor(QColor clr); + + // 大刻度个数 + int getBigScaleCount(void) const; + void setBigScaleCount(int nCount); + + // 小刻度个数 + int getSmallScaleCount(void) const; + void setSmallScaleCount(int nCount); + + // 是否显示刻度 + bool isBigScaleVisible(); + void setBigScaleVisible(bool bVisible); + bool isSmallScaleVisible(); + void setSmallScaleVisible(bool bVisible); + void setBigScaleVisibleEx(bool bVisible); //仅仅设置状态,不做其他 + void setSmallScaleVisibleEx(bool bVisible); + + // 刻度向外 + bool isScaleOutward(); + void setScaleOutward(bool bScaleOutward); + + // 是否以对数模式显示 + bool isExpTickMode(); + void setExpTickMode(bool b); + + // 单位 + void setUnit(QString strUnit); + QString getUnit(void) const; + + // 标注 + virtual QStringList getTickLabels(void) const; + virtual void setTickLabels(QStringList list); + + // 这是设置一些辅助信息,比如Date起始,就是0的位置 + void setTickExs(QVariant o); + QVariant getTickExs(); + + + // 主次刻度的画笔 + QPen getBigGridPen(); + QPen getSmallGridPen(); + + // 名称字体 + void setNameFont(QFont font); + QFont getNameFont(void) const; + + // 数字字体 + void setNumberFont(QFont font); + QFont getNumberFont(void) const; + + // 指数字体 + QFont getLogIndexFont(void) const; + void setLogIndexFont(QFont font); + + // 间隔设置 + void setScaleTicks(VecFloat& vecTicks); + VecFloat getScaleTicks(); + + // 设置范围和间隔 + void setScaleAndTicks(iAxisTickInfo& o); + void getScaleAndTicks(iAxisTickInfo& o); + + // 获取预估大小 + void getPreferedAxisSize(QPainter* painter, \ + float& w, float& h); + + // 是否竖轴(Y) + virtual bool isVertical(); + + // 是否最小化 + void setMinimizeAxis(bool b); + bool isMinimizeAxis(); + + // 是否主轴 + void setMainAxis(bool b); + bool isMainAxis(); + + // 是否系统轴 + void setSysAxis(bool b); + bool isSysAxis(); + + // 宽度Span + float getSpan(); + void setSpan(float f); + + void setIntervalRatio(float f); + + // 设置坐标轴的基准时间,通常针对X轴而言 + void setBaseDt(QDateTime dt); + QDateTime getBaseDt() const; + + // 框选放大缩小过程中,坐标轴范围的比累计,通常为x轴,这是为了大数据量动态显示用的 + // 不涉及序列化 + float getRectZoomRatio() const; + void setRectZoomRatio(float f); //设为f + void resetRectZoomRatio(); //设为1.f + void accuRectZoomRatio(float f); //累积乘以f + + ZxAxisHelper* getAxisHelper(); + +protected: + + // 根据类型创建Helper + virtual void resetHelper(); + + // 把参数传递到Helper(Date类型) + void setConfigsToDateHelper(); + float adjustConfigsByDateHelper(float& fMin, \ + float& fMax, \ + QVector* pVecTicks = NULL, + bool bConsiderRectZoom = false); + + // 重载刷新函数,主要是调整范围 + void update(); + +signals: + + void sigNameChanged(const QString& sName); + void sigAliasChanged(const QString& sName); + void sigAxisDigitChanged(int nNumber); + void sigColorChanged(QColor clr); + void sigBigScaleCountChanged(int nNumber); + void sigSmallScaleCountChanged(int nNumber); + + void sigRangeChanged(float fMin, float fMax, \ + bool bRecalTicks = true, \ + bool bAdjustRectZoomRatio = false); + + void sigRangeChangedEx(); + + // 触发信号获取当前坐标轴上对应数据中的最小的正值 + void sigGetLeastPositive(float& f); + + // 由于刻度显示与Plot相互关联,所以此处进行额外处理 + void sigScaleVisibleChanged(bool bBigScale, bool bVisible); + +public slots: + + void setRangeMinMax(float fMin, float fMax, \ + bool bRecalTicks = true, \ + bool bAdjustRectZoomRatio = false); + +protected: + + // 名称、别称、单位 + QString m_strName; + QString m_strAlias; + QString m_strUnit; + + // 范围 + float m_fStart; + float m_fEnd; + + // 刻度相关 + float m_fMainInterval; + float m_fSubInterval; + int m_nDecimalNumber; + int m_nBigScaleCount; + int m_nSmallScaleCount; + QVector m_vecMainValues; + + QStringList m_listTickLabels; //对于规定的标题,如日期,而不是数值 + + // 类型 + AxisType m_oAxisType; + AxisPos m_oAxisPos; + + // 颜色 + QColor m_clr; + + // 显示控制 + bool m_bBigScaleVisible; + bool m_bSmallScaleVisible; + bool m_bScaleOutward; + bool m_bExpTickMode; + + // 画笔 + QPen m_penBigGrid; + QPen m_penSmallGrid; + + // 字体 + QFont m_fontName; + QFont m_fontNumber; + QFont m_fontLogIndex; + + ZxAxisHelper* m_pAxisHelper; + + // 坐标轴最小化显示,基本上类似隐藏 + bool m_bMinimizeAxis; + + // 是否x或y当前的主坐标轴 + bool m_bMainAxis; + + // 是否系统自带,Plot自动带四个 + bool m_bSysAxis; + + // y轴宽度或x轴高度,20190123 + float m_fSpan; + + // 这是设置一些辅助信息,比如Date起始,就是0的位置 20190222 + QVariant m_oTickExs; + + // 临时,不涉及序列化,实时右键间隔比例,秒换成分钟 + float m_nIntervalRatio; + + // 坐标轴的基准时间,通常针对X轴而言 + QDateTime m_dtBase; // + + // 框选放大缩小过程中,坐标轴范围的比累计,通常为x轴,这是为了大数据量动态显示用的 + // 不涉及序列化 + float m_fRectZoomRatio; +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxSubAxisDt.h b/Include/iPlot/iPlotBase/ZxSubAxisDt.h new file mode 100644 index 0000000..c1e6206 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSubAxisDt.h @@ -0,0 +1,90 @@ +#pragma once + +#include "ZxSubAxisBase.h" + +// 该类用于了zxLogMonitor +class I_PLOTBASE_EXPORT ZxSubAxisDt + : public ZxSubAxisBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + enum TimeTextFormat //刻度文本显示样式 + { + TTF_Relative_TIU = 0, //相对时间,多少分或多少秒等等 + TTF_Relative_Normal, //相对时间,1'35.24'',时分秒模式 + + // 成都不考虑如下三种 +#ifdef QT_DEBUG + TTF_Absolute_Time //绝对时间,格式由format来定 +#endif + }; + +public: + + ZxSubAxisDt(); + ZxSubAxisDt(const QString& name); + ZxSubAxisDt(const ZxSubAxisDt & c); + virtual ~ZxSubAxisDt(); + +public: + + virtual float getValueForPos(float fPos) const; + virtual float getPosForValue(float fVal) const; + + void setStartDt(QDateTime& dt); + QDateTime getStartDt(); + +protected: + + void init(); + void onInstallPolicies(); + + virtual void onLayout(); + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void fillPtyPano(IxPtyPano* pano); + virtual void fillPtyPano_TtfFormat(IxPtyPano* pano, IxPtyItem* prop); + virtual void fillPtyPano_TtfUnit(IxPtyPano* pano, IxPtyItem* prop); + virtual void fillPtyPano_Style(IxPtyPano* pano, IxPtyItem* prop); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + + virtual void calculateMajorGrid(); + virtual void calculateMinorGrid(); + virtual void calculateThirdGrid(); + + virtual void drawMajorGrid(QPainter* painter, const ZxPaintParam& param); + virtual void drawMinorGrid(QPainter* painter, const ZxPaintParam& param); + virtual void drawThirdGrid(QPainter* painter, const ZxPaintParam& param); + virtual void drawDepthText(QPainter* painter, const ZxPaintParam& param); + +public slots: + + virtual void onColnDepthRatioChanged(double dRatio); + +public: + + QString getLabelStr(double d); + + void setTtf(TimeTextFormat o); + TimeTextFormat getTtf(); + void setTtfFormat(QString s); + QString getTtfFormat(); + void setTtfUnit(QString s); + QString getTtfUnit(); + QString getTimeBaseUnit(); + + virtual QString getTipOfDepth(double dDepth); + +private: + + // 起始时间,对应数据深度0 + QDateTime m_dtStart; + TimeTextFormat m_oTtf; + QString m_sTtfUnit; //对于相对时间,是单位 + QString m_sTtfFormat; //对于绝对时间,是format +}; diff --git a/Include/iPlot/iPlotBase/ZxSubAxisX.h b/Include/iPlot/iPlotBase/ZxSubAxisX.h new file mode 100644 index 0000000..ae8217e --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSubAxisX.h @@ -0,0 +1,27 @@ +#pragma once + +#include "ZxSubAxisBase.h" + +// 坐标轴X +class I_PLOTBASE_EXPORT ZxSubAxisX : public ZxSubAxisBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSubAxisX(); + ZxSubAxisX(const QString& name); + ZxSubAxisX(const ZxSubAxisX & c); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + + virtual float getValueForPos(float fPos) const; + virtual float getPosForValue(float fVal) const; +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxSubAxisY.h b/Include/iPlot/iPlotBase/ZxSubAxisY.h new file mode 100644 index 0000000..9fa4c2e --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxSubAxisY.h @@ -0,0 +1,32 @@ +#pragma once + +#include "ZxSubAxisBase.h" + +// 坐标轴Y +class I_PLOTBASE_EXPORT ZxSubAxisY : public ZxSubAxisBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSubAxisY(); + ZxSubAxisY(const QString& name); + ZxSubAxisY(const ZxSubAxisY& c); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + +// virtual void onSerialize(ZxSerializer* ser); +// virtual void onDeserialize(ZxSerializer* ser); + + virtual float getValueForPos(float fPos) const; + virtual float getPosForValue(float fVal) const; + +private: +}; + + + + diff --git a/Include/iPlot/iPlotBase/ZxTempLayer.h b/Include/iPlot/iPlotBase/ZxTempLayer.h new file mode 100644 index 0000000..fbc6843 --- /dev/null +++ b/Include/iPlot/iPlotBase/ZxTempLayer.h @@ -0,0 +1,58 @@ +#pragma once + +#include "ZxLayerItem.h" + +/// 临时图层. 这是一种特殊图层, 主要特点如下 +/// 每个场景只有一个临时图层 +/// 总是在其他图层前面 +class I_PLOTBASE_EXPORT ZxTempLayer : public ZxLayerItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxTempLayer(); + + /// 是否显示十字线 + virtual void setCrossLineVisible(bool bVisible); + virtual bool isCrossLineVisible() const; + + /// 十字线位置(窗口坐标) + virtual void setCrossLinePos(const QPointF& _pt); + virtual QPointF getCrossLinePos() const; + + /// 十字线的画笔 + virtual QPen getCrossLinePen() const; + virtual void setCrossLinePen(QPen pen); + + /// 十字线显示区域 + virtual QRectF getCrossLineRect() const; + virtual void setCrossLineRect(const QRectF& rect); + + // 设置Tips + virtual void setTips(QString s); + virtual QString getTips() const; + virtual void setTipsVisible(bool bVisible); + virtual bool isTipsVisible() const; + + // 鼠标移出视图区 + virtual void clearLineAndTips(); + +protected: + + virtual void paintFront(QPainter* painter, const ZxPaintParam& param); + virtual void paintCrossLine(QPainter* painter, const ZxPaintParam& param, QRectF rt); + virtual void paintTips(QPainter* painter, const ZxPaintParam& param, QRectF rt); + + virtual void updateRenderArea(); + +protected: + + bool m_bShowCrossLine; + QPointF m_ptCrossLine; + QPen m_penCrossLine; + QRectF m_rectCrossLine; + bool m_bShowTips; + QString m_sTips; +}; diff --git a/Include/iPlot/iPlotBase/iPlotBase_global.h b/Include/iPlot/iPlotBase/iPlotBase_global.h new file mode 100644 index 0000000..a55c319 --- /dev/null +++ b/Include/iPlot/iPlotBase/iPlotBase_global.h @@ -0,0 +1,13 @@ +#pragma once +#include + +#if defined(I_PLOTBASE_LIBRARY) +# define I_PLOTBASE_EXPORT Q_DECL_EXPORT +#else +# define I_PLOTBASE_EXPORT Q_DECL_IMPORT +#endif + + + + + diff --git a/Include/iPlot/iPlotCurveT/Commands/ZxCommandAdd.h b/Include/iPlot/iPlotCurveT/Commands/ZxCommandAdd.h new file mode 100644 index 0000000..0c70f9d --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Commands/ZxCommandAdd.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include "iPlotCurveT_global.h" + +class ZxObjBase; +class ZxRenderItem; + +// 命令: 添加一个图元 +class I_PLOTCURVE_T_EXPORT ZxCommandAdd : public QUndoCommand +{ +public: + + ZxCommandAdd(QVector* pVecAllObjs, + ZxObjBase* pObj, + int nIndex = -1, + bool bNeedLayout = true, + QUndoCommand* parent = 0); + ~ZxCommandAdd(); + + virtual void redo(); + virtual void undo(); + +private: + + QVector* m_pVecAllObjs; + ZxObjBase* m_pObj; + int m_nIndex; + bool m_bNeedLayout; + bool m_bShowSubObjs; + ZxRenderItem* m_pParent; +}; diff --git a/Include/iPlot/iPlotCurveT/Commands/ZxCommandDelCurvePts.h b/Include/iPlot/iPlotCurveT/Commands/ZxCommandDelCurvePts.h new file mode 100644 index 0000000..8cd804e --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Commands/ZxCommandDelCurvePts.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include "iPlotCurveT_global.h" + +class ZxObjBase; +class ZxRenderItem; + +// 命令: 删除Band所包围的曲线上的点 +class I_PLOTCURVE_T_EXPORT ZxCommandDelCurvePts : public QUndoCommand +{ +public: + + ZxCommandDelCurvePts(QVector* pVecAllObjs, + ZxObjBase* pObj, + QVector vecBands, + bool bNeedLayout = true, + QUndoCommand* parent = 0); + ~ZxCommandDelCurvePts(); + + virtual void redo(); + virtual void undo(); + +private: + + QVector* m_pVecAllObjs; + ZxObjBase* m_pObj; + QVector m_vecBands; + bool m_bNeedLayout; + + QVector m_vecIndexes; + ZxRenderItem* m_pParent; + QVector m_vecObjPts; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Commands/ZxCommandDelete.h b/Include/iPlot/iPlotCurveT/Commands/ZxCommandDelete.h new file mode 100644 index 0000000..befbbb4 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Commands/ZxCommandDelete.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include "iPlotCurveT_global.h" + +class ZxObjBase; +class ZxRenderItem; + +// 命令: 删除一个图元 +class I_PLOTCURVE_T_EXPORT ZxCommandDel : public QUndoCommand +{ +public: + + ZxCommandDel(QVector* pVecAllObjs, + ZxObjBase* pObj, + bool bNeedLayout = true, + QUndoCommand* parent = 0); + ~ZxCommandDel(); + + virtual void redo(); + virtual void undo(); + +private: + + QVector* m_pVecAllObjs; + ZxObjBase* m_pObj; + + int m_nIndex; + bool m_bNeedLayout; + bool m_bShowSubObjs; + + ZxRenderItem* m_pParent; + QVector m_vecSubObjVisibles; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Commands/ZxCommandEraseCurvePts.h b/Include/iPlot/iPlotCurveT/Commands/ZxCommandEraseCurvePts.h new file mode 100644 index 0000000..93a85f1 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Commands/ZxCommandEraseCurvePts.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include +#include +#include "iPlotCurveT_global.h" + +class ZxObjBase; +class ZxRenderItem; + +// 命令: 擦除曲线上的点 +class I_PLOTCURVE_T_EXPORT ZxCommandEraseCurvePts : public QUndoCommand +{ +public: + ZxCommandEraseCurvePts(ZxObjBase* pObj, + QRectF rt, + bool bNeedLayout = true, + QUndoCommand* parent = 0); + ~ZxCommandEraseCurvePts(); + + virtual void redo(); + virtual void undo(); + +private: + + ZxObjBase* m_pObj; + bool m_bNeedLayout; + + ZxRenderItem* m_pParent; + QVector m_vecObjPts; + QRectF m_rt; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Commands/ZxCommandMove.h b/Include/iPlot/iPlotCurveT/Commands/ZxCommandMove.h new file mode 100644 index 0000000..e4449c0 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Commands/ZxCommandMove.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include "iPlotCurveT_global.h" + +class ZxObjBase; + +// 命令: 移动一个图元 + +// TODO 为了压力移动时的速度,而更改逻辑 +// 如果m_fOffsetX>0,且m_vecPoss为空,则认为是直接对后台的Value进行偏移处理 + +class I_PLOTCURVE_T_EXPORT ZxCommandMove : public QUndoCommand +{ +public: + + ZxCommandMove(ZxObjBase* pObj, + const QVector& vecPoss, + const QVector vecIndexesModified, + float fOffsetX = 0.f, + float fOffsetY = 0.f, + QUndoCommand* parent = 0); + + virtual void redo(); + virtual void undo(); + +private: + + ZxObjBase* m_pObj; + QVector m_vecPoss; + + //这是对Brother的处理 + float m_fOffsetX; //整体移动时,Brother的偏移量,为了redo/undo + float m_fOffsetY; + + QVector m_vecIndexesModified; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Commands/ZxCommandZoom.h b/Include/iPlot/iPlotCurveT/Commands/ZxCommandZoom.h new file mode 100644 index 0000000..a19e8cc --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Commands/ZxCommandZoom.h @@ -0,0 +1,41 @@ +#pragma once + +#include +#include +#include "iPlotCurveT_global.h" + +class ZxRenderItem; +class ZxSubAxisBase; + +// 命令: 视图缩放,主要通过坐标轴范围来实现 +class I_PLOTCURVE_T_EXPORT ZxCommandZoom : \ + public QUndoCommand +{ +public: + + ZxCommandZoom(ZxSubAxisBase* pAxisX, + float fMaxX, + float fMinX, + ZxSubAxisBase* pAxisY = NULL, + float fMaxY = 0.f, + float fMinY = 0.f, + QUndoCommand* parent = 0); + ~ZxCommandZoom(); + + virtual void redo(); + virtual void undo(); + +private: + + ZxSubAxisBase* m_pAxisX; + float m_fMaxX; + float m_fMinX; + float m_fMaxXOld; + float m_fMinXOld; + + ZxSubAxisBase* m_pAxisY; + float m_fMaxY; + float m_fMinY; + float m_fMaxYOld; + float m_fMinYOld; +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjBand.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjBand.h new file mode 100644 index 0000000..3615713 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjBand.h @@ -0,0 +1,73 @@ +#pragma once + +#include "ZxObjRect.h" + +class I_PLOTCURVE_T_EXPORT ZxObjBand + : public ZxObjRect +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjBand(); + ZxObjBand(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjBand(); + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 方向模式 + void setOriental(bool bVertial); + bool isVertical(); + + // 击中 + virtual bool hitTest(const QPointF& pt); + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + +public: + + virtual bool moveToPos(const float& l, const float& r, + const float& t, const float& b); + virtual bool moveToPos(const QVector& vecPoss); + virtual void setValueByPos(const QPointF& ptTL, const QPointF& ptRB); + virtual void setValueByPos(const float& l, const float& r, + const float& t, const float& b); + + // 封装 + virtual void initTools(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +protected: + + bool m_bVertival; //方向 + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjBandTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjBandTool.h new file mode 100644 index 0000000..77ed8c9 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjBandTool.h @@ -0,0 +1,36 @@ +#pragma once + +#include "ZxObjToolBase.h" + + +// 矩形tool +class I_PLOTCURVE_T_EXPORT ZxObjBandTool : public ZxObjToolBase +{ + Q_OBJECT + +public: + + ZxObjBandTool(); +// ~ZxObjBandTool(); + +public: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onRightDown(const QPointF& pt); + virtual bool onRightUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual void onPaint(QPainter* painter, + const ZxPaintParam& param); +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +protected: + RectPos m_oHitPos; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjBase.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjBase.h new file mode 100644 index 0000000..85907c9 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjBase.h @@ -0,0 +1,335 @@ +#pragma once + +#include +#include +#include +#include + +#include "ZxDot.h" +#include "Defines.h" +#include "ZxRenderItem.h" +#include "ZxDrawHelper.h" + +#include "iPlotCurveT_global.h" + +#define _isNearLine ZxDrawHelper::isPointNearLine + +class ZxPlot; +class ZxSubAxisX; +class ZxSubAxisY; +class IxPtyItem; +class ZxObjToolBase; + +// 绘图对象基类 +class I_PLOTCURVE_T_EXPORT ZxObjBase : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjBase(); + ZxObjBase(const QString& sName, ZxSubAxisX* pAxisX, ZxSubAxisY* pAxisY); + ~ZxObjBase(void); + virtual void init(const QString& sName, ZxSubAxisX* pAxisX, ZxSubAxisY* pAxisY); + +public: + /////////////////////////////////// + ///SubObjs + + // 自己创建、此处管理 + virtual void initSubObjs(); + + // 外界传入,此处管理 + virtual void appendSubObjs(ZxObjBase* p); + + // 是否显示,统一控制 + virtual bool isShowSubObjs(); + virtual void showSubObjs(bool b); + + // 删除或添加时的消息处理 + void setAddOrDel(bool bAdd); + bool getAddOrDel(); + + // 取得鼠标移动时的tip信息 + virtual QString getTipOf(const QPointF& point); + +public: + + virtual void initTools(); + virtual void removeTools(); + virtual void resetTools(ZxRenderView* pView); + +protected: + + // 这是根据当前点再次计算出来Bound + virtual QRectF getBoundsEx(); + + // 设置图元对象的属性标志 + virtual void initFlags(); + + // 删除所有子节点 + virtual void clear(); + +public: + + /////////////////////////////////// + ///Brother + // 仅仅是关联一下,比如在移动至,二者同步移动 + virtual void bindBrother(ZxObjBase* p); + virtual void detachBrother(ZxObjBase* p); + void resetBrotherOffset(); + int getBrotherCount(); + ZxObjBase* getBrotherOfIndex(int n); + +public: + + // 移动模式判断 + virtual bool canMovePoint(); + virtual bool canMoveBound(); + virtual bool canMoveWhole(); + +public: + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, + const QPointF& pt2); + + // 新增接口,20210918 为了流量和压力对齐,只支持右移动 + // dOffsetX > 0,且是Value而不是Pos + // 20210919 更改支持:左右移动,压力 + virtual bool runMoveByV(const double dOffsetX); + + // 整体移动时,对Brother的同步处理 + virtual bool runMoveBrother(const float &fOffsetX, + const float &fOffsetY); + virtual bool moveToPos(const float& l, const float& r, + const float& t, const float& b); + virtual bool moveToPos(const QVector& vecPoss); + + // 根据pt1--->pt2的偏移,获取pt的偏移后的点 + // pt1:鼠标Down点,pt2:鼠标Up点 + QPointF offsetPoint(QPointF& pt, + const QPointF& pt1, const QPointF& pt2); + + // 当该对象未选中,反选其它,如文本框 + virtual void deselectOthers(); + +public: + + // paint + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void paintSubObjs(QPainter* painter, + const ZxPaintParam& param); + virtual void paintDotPt(QPainter* painter, + QPointF pt, + ZxDot& dot, + bool bSelChanged = true); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void onDeserialized(); + virtual void fillPtyPano(IxPtyPano* sheet); + + // + virtual bool isItemBody(float x, float y); + virtual void onLeftDoubleClick(const QPointF& pt); + + // 这是在整体移动Obj时,同步绘制其绑定的Obj + virtual void drawBrotherWhenMoving(QPainter* painter, + QPointF ptOld, + QPointF ptNew); + virtual void paintWithBrotherMode(QPainter* painter, + QPointF ptOld, + QPointF ptNew); + + virtual void update(); + + virtual QRectF getBounds4Update(); + virtual void updateRect(QRectF); + +public: + + // 得到/设置名称 + QString getName(void) const; + void setName(QString sName); + + // 点 + QPointF getPtValueOf(int nIndex) const; //Value值 + void setPtValueOf(int nIndex, QPointF ptValue); + + QPointF getPtPosOf(int nIndex) const; //Pos值 + void setPtPosOf(int nIndex, QPointF ptPos); + + QPointF getPosOf(QPointF ptValue) const; //根据Value求Pos + QPointF getValueOf(QPointF ptPos) const; //根据Pos求Value + + QVector getPosOf(QVector vecValues) const; //根据Value求Pos + QVector getValueOf(QVector vecPoss) const; //根据Pos求Value + + // 设置所有的Value,外界调用 + virtual void setAllValues(QVector vecValues); + virtual QVector getAllValues() const; + + // 设置所有的Pos,外界调用 + virtual void setAllPos(QVector vecPoss, QVector* pVecIndexes = NULL); + virtual QVector getAllPos(bool bFuzzyMode = false, + float fZoom = 1.f, + int nMax = 20000, + QVector* pVecSelecteds = NULL, + QVector* pVecIndexes = NULL) const; + virtual QVector fuzzyAllPos(QVector vec, + float fZoom = 1.f, + int nMax = 20000, + QVector* pVecSelecteds = NULL, + QVector* pVecIndexes = NULL) const; + virtual int fuzzyPosTimes(float fZoom, int nPtCount) const; + virtual void resetBounds(); + virtual QRectF calValueBounds(); //计算数值的Bound,对于对数坐标,去除小于0 + virtual void resetOthers(); //resetBounds内部调用 + + // 坐标轴 + ZxSubAxisX* getAxisX(void); + const ZxSubAxisX* getAxisX(void) const; + void setAxisX(ZxSubAxisX* pAxis); + ZxSubAxisY* getAxisY(void); + const ZxSubAxisY* getAxisY(void) const; + void setAxisY(ZxSubAxisY* pAxis); + void setAxisObjectNameX(QString s); + void setAxisObjectNameY(QString s); + QString getAxisObjectNameX(); + QString getAxisObjectNameY(); + + // 类型 + void setObjType(PlotObjectType o); + PlotObjectType getObjType(); + + // 类型 + //void setObjTag(QString s); + QString getObjTag(); + + // 逐级获取Plot + ZxPlot* getPlot(); + + // ZxPlot的InnerRect + QRectF getOuterRect(); + // ClipRect + QRectF getClipRect(QRectF rtViewClip); + + // 设置View + void setView(ZxRenderView* pView); + ZxRenderView* getView(); + + // 该函数主要是触发信号: sigObjSelectionChanged + void dealSelChanged(bool bSelected); + + // 返回数据点在水平和竖直最大最小值,是数值非POS + float getScaleVL(); + float getScaleVR(); + float getScaleVT(); + float getScaleVB(); + + // 绘制的内容Set Get + virtual void setPen(QPen o); + virtual QPen getPen(); + + virtual void setDot(ZxDot o); + virtual ZxDot getDot(); + + virtual float getDotRadius(void) const; + virtual void setDotRadius(float fRadius); + virtual void setDotStyle(int oStyle); + virtual int getDotStyle(); + virtual QColor getDotColor(void) const; + virtual void setDotColor(QColor color); + virtual void setDotFilling(bool b); + virtual bool getDotFilling(); + + virtual void setDotSel(ZxDot o); //选中状态下的点 + virtual ZxDot getDotSel(); + +signals: + + // 部分关联信号 + void sigNameChanged(QString sName); + void sigColorChanged(QColor clr); + void sigObjSelectionChanged(bool bSelected); + + // 通知数据点改变 + void sigPtsChanged(); + // 通知数据点改变,并告知改变前后的数据点 + void sigPtValuesChanged(QVector& vecOlds, + QVector& vecNews); + + // 当Obj被双击选中时触发 + void sigObjDblCliked(const QPointF& pt); + + // 在外界修改tip + void sigGetObjTip(QString& s); + +public: + + // 击中 + ObjHitOption m_oHitOption; + int m_nHitIndex; //对于点和边界有效 + +protected: + + // 从外界传入,本身不负责创建及释放 + ZxSubAxisX* m_pAxisX; + ZxSubAxisY* m_pAxisY; + + // Tool + ZxObjToolBase* m_pTool; + // View + ZxRenderView* m_pView; + +protected: + + // 名称 + QString m_sName; + + PlotObjectType m_oObjType; + QString m_sObjTag; + + // 组成的点,实际的数值 + QVector m_vecPoints; + + // 内部创建(或外部传入)、本对象进行管理的子对象,如文本显示 + bool m_bShowSubObjs; + + QRectF m_rtBoundVs;//所有点的数值的范围 + + // brother + QVector m_vecBrothers; + float m_fOffsetX; //整体移动时,Brother的偏移量,为了redo/undo + float m_fOffsetY; + + // 为了方便放在父类 + ZxDot m_oDot; + ZxDot m_oDotSel; //选中点的样式 + QPen m_oPen; + + QString m_sAxisObjectNameX; //为了序列化 + QString m_sAxisObjectNameY; + + bool m_bAddMode; //Add Or Del模式,临时变量 + + // 在MoveToPos函数中涉及到哪些点进行了修改,不涉及序列化 + VecInt m_vecIndexesModified; +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurve.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurve.h new file mode 100644 index 0000000..0cd2206 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurve.h @@ -0,0 +1,79 @@ +#pragma once + +#include "ZxObjCurveBase.h" + +class I_PLOTCURVE_T_EXPORT ZxObjCurve : public ZxObjCurveBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjCurve(); + ZxObjCurve(const QString& sName, + ZxSubAxisX* pAxisX, ZxSubAxisY* pAxisY); + ~ZxObjCurve(void); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, ZxSubAxisY* pAxisY); + + // 封装 + virtual void initTools(); + + // 选择(from to) + virtual bool selectRowRanges(int nFrom, int nTo); + + // 根据鼠标位置xPos获取在线上的位置点 + virtual bool getPointByX(float& xPos, QPointF& ptPos); + +public: + + // 一点选中边界是的移动策略 + enum CurveMoveMode + { + MM_Free = 0, //单条移动 + MM_Point_Free, //线模式 + MM_Line_Free, //线模式 + MM_Self_WithP, //与压力计同步 + MM_Whole_Hori, //整体水平移动(竖直不动) + MM_Whole_Vert, //整体竖直移动(水平不动,暂时不用) + MM_Whole_Free //整体移动 + }; + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +// // 击中 +// virtual bool hitTest(const QPointF& pt); +// // 击中后,ButtonUp后的处理 +// // pt1:鼠标Down点,pt2:鼠标Up点 +// virtual bool runMove(const QPointF& pt1, +// const QPointF& pt2); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void drawPoint(QPainter* painter, QPointF arrPoints[], int nCount, ZxDot& dot); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + + +public: + + void setMoveMode(int nMoveMode); + int getMoveMode() const; + +protected: + + // 移动模式,仅仅对于竖线而言 + CurveMoveMode m_oMoveMode; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBar.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBar.h new file mode 100644 index 0000000..4b6a55e --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBar.h @@ -0,0 +1,95 @@ +#pragma once + +#include "ZxObjCurve.h" + +class I_PLOTCURVE_T_EXPORT ZxObjCurveBar : public ZxObjCurve +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjCurveBar(); + ZxObjCurveBar(const QString& sName, ZxSubAxisX* pAxisX, ZxSubAxisY* pAxisY); + ~ZxObjCurveBar(void); + + virtual void init(const QString& sName, ZxSubAxisX* pAxisX, ZxSubAxisY* pAxisY); + + // 封装 + virtual void initTools(); + +public: + + void setBarWidth(float f); + float getBarWidth(); + + void setBarFill(bool b); + bool getBarFill(); + + void setBarFillClr(QColor clr); + QColor getBarFillClr(); + + void setPinValue(bool b); + bool getPinValue(); + + void setPinFont(QFont o); + QFont getPinFont(); + + void setPinClr(QColor clr); + QColor getPinClr(); + + void setShow3D(bool b); + bool getShow3D(); + +protected: + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + virtual QRectF getBounds4Update(); + virtual void updateRect(QRectF); + +public: + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onLoadTempl(ZxSerializer *ser); + virtual void onSaveTempl(ZxSerializer *ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + +protected: + + virtual void drawSubBars(QPainter* painter, QVector& vec); + virtual void drawSubBarOne(QPainter* painter, QPointF pt, int index); + +private: + + QRectF _getBarRectOf(QPointF pt); //Pos而非Value + void _drawSubBarOne2D(QPainter* painter, QRectF rt, int index, bool calledBy3D = false); + void _drawSubBarOne3D(QPainter* painter, QRectF rt, int index); + void _drawPinnedValue(QPainter* painter, QRectF rtTag, int index); + +protected: + + float m_fBarWidth; + bool m_bBarFill; + QColor m_oBarFillClr; + + bool m_bPinValue; + QFont m_oPinFont; + QColor m_oPinClr; + + bool m_bShow3D; //3D显示 +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBarTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBarTool.h new file mode 100644 index 0000000..e3a114f --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBarTool.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ZxObjCurveBaseTool.h" + +// 柱状图曲线工具 +class I_PLOTCURVE_T_EXPORT ZxObjCurveBarTool : public ZxObjCurveBaseTool +{ + Q_OBJECT + +public: + + ZxObjCurveBarTool(); + ~ZxObjCurveBarTool(); + +protected: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBase.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBase.h new file mode 100644 index 0000000..18a3bef --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBase.h @@ -0,0 +1,167 @@ +#pragma once + +#include "ZxObjBase.h" + +class ZxObjRect; +class I_PLOTCURVE_T_EXPORT ZxObjCurveBase : public ZxObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjCurveBase(); + ZxObjCurveBase(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjCurveBase(void); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 通过设置ZxObjRect,配置点的状态 + bool changeOrAppendRect(ZxObjRect* p); + void removeRect(ZxObjRect* p); + QVector getAllRectBounds(); + void dealwithRects(ZxObjRect* p, bool bDelOrAppendRect); //ZxObjRect被删除的恢复撤销处理 + + // 删除 + bool removePtsInRects(QVector vec); + + // 删除点 + bool delPtsWithinRect(QRectF rtPos); + +public slots: + + // 刷新点的状态 + void slotFreshPtStates(); + +public: + + // 设置数据 + virtual void setAllPos(QVector vecPoss, QVector* pVecIndexes = NULL); + virtual void setAllValues(QVector vecValues); + virtual void resetBounds(); + + // 取得鼠标移动时的tip信息 + virtual QString getTipOf(const QPointF& point); + + virtual QVector fuzzyAllPos(QVector vec, + float fZoom = 1.f, + int nMax = 20000, + QVector* pVecSelecteds = NULL, + QVector* pVecIndexes = NULL) const; +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + virtual bool canMovePoint(); + virtual bool canMoveBound(); + virtual bool canMoveWhole(); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void drawCurveLine(QPainter* painter, QVector& vec); + virtual void drawPoint(QPainter* painter, QPointF arrPoints[], int nCount, ZxDot& dot); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + + virtual void paintWhenMoving(QPainter* painter, \ + const ZxPaintParam& param, \ + QPointF& ptOld, \ + QPointF& ptNew, \ + ObjHitOption op); +public: + + // 画笔 + virtual void setColor(QColor clr); + + // 曲线 + bool getLineVisible(void) const; + void setLineVisible(bool bVisible = true); + + bool getPointVisible(void) const; + void setPointVisible(bool bVisible = true); + + // 统一设置,为了速度 + //void setCurvePty(QPen o1, ZxDot o2); + void setCurvePty(QPen o1, ZxDot o2, bool bLineVisible, bool bPointVisible); + + // 点数 + int getPtCount(); + +public: + + // 点状态 + void changPointState(int nIndex, + PointState psNew); + void startNewRectSelection(); + PointState getPointState(int nIndex); + bool hasPointOfState(PointState ps); + bool reversePointOfState(PointState psOld, PointState psNew); + void setPtStates(const PointState pPtStates[], + int cnt); + PointState* getPtStates(); + // 获取本曲线ps状态下的所有的点 + QVector getPointValuesOfState(PointState ps); + + /// @brief 这是拟合后,对曲线的状态进行复原 + /// @param bSelectConsidered:选择状态的点是否参与复原 + /// @param bExcludeConsidered:剔除状态的点是否参与复原 + /// @param bEraseConsidered:删除状态的点是否参与复原 + void restorePtStates(bool bSelectConsidered, \ + bool bExcludeConsidered = false, \ + bool bEraseConsidered = false); + + +signals: + + void sigNameChanged(QString sName); + void sigColorChanged(QColor clr); + + // 点模式状态发生改变 + void sigPointStateChanged(int nIndex, PointState psOld, PointState psNew); + void sigPointStatesRestored(); + + // 在开始一个新的框选之前触发 + void sigNewRectSelection(); + + // 可以画一些辅助的信息 + void sigGetBrotherObj(ZxObjBase*&); + +protected: + + bool m_bLineVisible; + bool m_bPointVisible;//added 20210823 + + // 点状态 + QVector m_vecPointStates; + + // 临时变量,只为点的状态 + QVector m_vecBands; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBaseTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBaseTool.h new file mode 100644 index 0000000..b9f8f94 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBaseTool.h @@ -0,0 +1,31 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjToolBase.h" + +// 曲线工具 +class I_PLOTCURVE_T_EXPORT ZxObjCurveBaseTool : public ZxObjToolBase +{ + Q_OBJECT +public: + ZxObjCurveBaseTool(); + ~ZxObjCurveBaseTool(); + +protected: + +// virtual bool onLeftDown(const QPointF& pt); +// virtual bool onLeftUp(const QPointF& pt); +// virtual bool onRightDown(const QPointF& pt); +// virtual bool onRightUp(const QPointF& pt); +// virtual bool onMouseMove(const QPointF& pt); + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); +protected: + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveDiscrete.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveDiscrete.h new file mode 100644 index 0000000..60d4b2a --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveDiscrete.h @@ -0,0 +1,58 @@ +#pragma once + +#include "ZxObjCurve.h" + +class I_PLOTCURVE_T_EXPORT ZxObjCurveDiscrete : public ZxObjCurve +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjCurveDiscrete(); + ZxObjCurveDiscrete(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjCurveDiscrete(void); + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 封装 + virtual void initTools(); + +public: + +protected: + // 设置图元对象的属性标志 + virtual void initFlags(); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void drawPoint(QPainter* painter, QPointF arrPoints[], int nCount, ZxDot& dot); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +protected: + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveDiscreteTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveDiscreteTool.h new file mode 100644 index 0000000..caf194b --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveDiscreteTool.h @@ -0,0 +1,29 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjCurveBaseTool.h" + +// 散点曲线工具 +class I_PLOTCURVE_T_EXPORT ZxObjCurveDiscreteTool : public ZxObjCurveBaseTool +{ + Q_OBJECT +public: + ZxObjCurveDiscreteTool(); + +protected: + + bool onLeftDown(const QPointF& pt); + bool onLeftUp(const QPointF& pt); + bool onMouseMove(const QPointF& pt); + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFlow.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFlow.h new file mode 100644 index 0000000..5941426 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFlow.h @@ -0,0 +1,172 @@ +#pragma once + +#include +#include "ZxObjCurve.h" + +class ZxObjCurveFlowTool; +class I_PLOTCURVE_T_EXPORT ZxObjCurveFlow : public ZxObjCurve +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjCurveFlow(); + ZxObjCurveFlow(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjCurveFlow(void); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 新增接口,20210918 为了流量和压力对齐,只支持右移动 + // dOffsetX > 0,且是Value而不是Pos + // 20210919 更改支持:左右移动,压力 + virtual bool runMoveByV(const double dOffsetX); + + // 考虑同步压力计问题 + virtual bool dealwithPosP(const QPointF& pt1, + const QPointF& pt2, + float& fX); + + // 是否击中流动段矩形 + virtual bool hitTestOthers(const QPointF& pt, bool& bZeroSeg); + + // 封装 + virtual void initTools(); + + virtual void resetBounds(); + virtual QRectF getBounds4Update(); + + // 根据鼠标位置xPos获取在线上的位置点 + virtual bool getPointByX(float& xPos, QPointF& ptPos); + + // 选择(from to) + virtual bool selectRowRanges(int nFrom, int nTo); + + /// @brief 流量数据体的转换 + // duraToAccu:true 从持续到累积 false 从累积到持续 + static bool convertFlowData(VecFloat& vecX, VecFloat& vecY, bool duraToAccu); + static bool convertFlowData(VecPointF& vecPts, bool duraToAccu); + + /// @brief 在某点对流量段进行批分 + /// @param ptValue是数值点Value,非坐标点Pos + /// @nIndex 是针对的第几段,如果不传入,则通过 getSegIndexOf 自动计算 + /// x值<最左,为0,然后 1,2,3..,n,x值>最右侧,n+1 + /// @param bUpdateView一旦批分成功是否刷新视图 + bool splitSegAt(QPointF ptValue, int nIndex = -1, bool bUpdateView = false); + int getSegIndexOf(QPointF ptValue); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual bool canMovePoint(); + virtual bool canMoveBound(); + virtual bool canMoveWhole(); + +private: + + bool _isNearLineEx(QPointF pt, QPointF pt2, QPointF pt3); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void drawLines(QPainter* painter); + virtual void drawPoint(QPainter* painter, QPointF arrPoints[], int nCount, ZxDot& dot); + void drawFlowSegmentSel(QPainter* painter, QRectF rt); + void drawFlowSegments(QPainter* painter); + virtual void paintWithBrotherMode(QPainter* painter, + QPointF ptOld, + QPointF ptNew); + + void _drawLinesOf(QPainter* painter, QVector& vecPts); + + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + + // 取得鼠标移动时的tip信息, + virtual QString getTipOf(const QPointF& point); + //virtual void onLeftDoubleClick(const QPointF& pt); + + // 重载做转换 + virtual QVector getAllPos(bool bFuzzyMode = false, + float fZoom = 1.f, + int nMax = 20000, + QVector* pVecSelecteds = NULL, + QVector* pVecIndexes = NULL) const; + virtual QVector fuzzyAllPos(QVector vec, + float fZoom = 1.f, + int nMax = 20000, + QVector* pVecSelecteds = NULL, + QVector* pVecIndexes = NULL) const; + virtual int fuzzyPosTimes(float fZoom, int nPtCount) const; + virtual void setAllPos(QVector vecPoss, QVector* pVecIndexes = NULL); + +public: + + void setFlowLineVisible(bool b); + bool isFlowLineVisible() const; + + void setFlowSegmentVisible(bool b); + bool isFlowSegmentVisible() const; + + void setFlowLineClr(QColor clr); + QColor getFlowLineClr() const; + + void setFlowSegmentClr(QColor clr); + QColor getFlowSegmentClr() const; + + void setCurSegPtIndex(int n); + int getCurSegPtIndex() const; + +signals: + + // 当前选泽的流动段改变 + void sigSegCurIndexChanged(); + + // 竖线、x方向的左右改变 + void sigSegVerChanged(int nIndex, float fOld, float fNew); + +public: + + // 临时变量,是否选中的竖线 + bool m_bVertical; + + // 是否画流动线 + bool m_bFlowLineVisible; + bool m_bFlowSegmentVisible; + QColor m_clrFlowLine; + QColor m_clrFlowSegment; + + // 当前选中的seg的起始点所在index + int m_nCurSegPtIndex; + + // 临时变量,绑定的 + //ZxObjCurve* m_pBrotherP; + +// float m_fFirstSpan; +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFlowTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFlowTool.h new file mode 100644 index 0000000..6a3db73 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFlowTool.h @@ -0,0 +1,32 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjCurveBaseTool.h" + +// 流体曲线工具 +class I_PLOTCURVE_T_EXPORT ZxObjCurveFlowTool : public ZxObjCurveBaseTool +{ + Q_OBJECT + +public: + + ZxObjCurveFlowTool(); + +protected: + + bool onLeftDown(const QPointF& pt); + bool onLeftUp(const QPointF& pt); + bool onMouseMove(const QPointF& pt); + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + //virtual bool onLeftDoubleClick(const QPointF& pt); + +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFree.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFree.h new file mode 100644 index 0000000..f76011d --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFree.h @@ -0,0 +1,52 @@ +#pragma once + +#include "ZxObjCurve.h" + +class I_PLOTCURVE_T_EXPORT ZxObjCurveFree : public ZxObjCurve +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjCurveFree(); + ZxObjCurveFree(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjCurveFree(void); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 封装 + virtual void initTools(); + +public: + +protected: + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +protected: + +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFreeTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFreeTool.h new file mode 100644 index 0000000..fbf1e85 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveFreeTool.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ZxObjCurveBaseTool.h" + +// 曲线工具 +class I_PLOTCURVE_T_EXPORT ZxObjCurveFreeTool : public ZxObjCurveBaseTool +{ + Q_OBJECT + +public: + + ZxObjCurveFreeTool(); + ~ZxObjCurveFreeTool(); + +protected: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjCurvePressure.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurvePressure.h new file mode 100644 index 0000000..65819e8 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjCurvePressure.h @@ -0,0 +1,70 @@ +#pragma once + +#include "ZxObjCurve.h" + +class I_PLOTCURVE_T_EXPORT ZxObjCurvePressure : public ZxObjCurve +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjCurvePressure(); + ZxObjCurvePressure(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjCurvePressure(void); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 封装 + virtual void initTools(); + + virtual void paintWithBrotherMode(QPainter* painter, + QPointF ptOld, + QPointF ptNew); + +public: + +protected: + // 设置图元对象的属性标志 + virtual void initFlags(); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 新增接口,20210918 为了流量和压力对齐,只支持右移动 + // dOffsetX > 0,且是Value而不是Pos + // 20210919 更改支持:左右移动,压力 + virtual bool runMoveByV(const double dOffsetX); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void drawSegInfos(QPainter* painter); + virtual void drawPoint(QPainter* painter, QPointF arrPoints[], int nCount, ZxDot& dot); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +protected: + + float m_fPosMovingX; //临时不序列化 +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjImage.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjImage.h new file mode 100644 index 0000000..9e3bd2e --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjImage.h @@ -0,0 +1,71 @@ +#pragma once + +#include +#include "ZxObjRect.h" + +class I_PLOTCURVE_T_EXPORT ZxObjImage + : public ZxObjRect +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjImage(); + ZxObjImage(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjImage(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 封装 + virtual void initTools(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +protected: + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void drawImage(QPainter* painter, + QRectF rt, + QString sPath, + int nAlpha = 255); + virtual void _drawImage(QPainter* painter, + QRectF rt, + QImage& img, + int nAlpha); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void fillPtyPano(IxPtyPano* sheet); + virtual void onLeftDoubleClick(const QPointF& pt); + +public: + + // 图片 + QString getImgPath(); + virtual void setImgPath(QString s); + +protected: + + QString m_sImgPath; //图片 +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjImageTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjImageTool.h new file mode 100644 index 0000000..5270748 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjImageTool.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ZxObjRectTool.h" + + +// 矩形tool +class I_PLOTCURVE_T_EXPORT ZxObjImageTool : public ZxObjRectTool +{ + Q_OBJECT + +public: + + ZxObjImageTool(); +// ~ZxObjImageTool(); + +public: + + virtual void onPaint(QPainter* painter, + const ZxPaintParam& param); + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLine.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLine.h new file mode 100644 index 0000000..6d500c6 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLine.h @@ -0,0 +1,109 @@ +#pragma once + +#include "ZxObjBase.h" +#include "ZxDot.h" + +class ZxObjText; +class I_PLOTCURVE_T_EXPORT ZxObjLine : public ZxObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjLine(); + ZxObjLine(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjLine(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // resetBounds内部调用 + virtual void resetOthers(); + + // 辅助信息 + virtual void initSubObjs(); + + // 封装 + virtual void initTools(); + +public: + + // 斜率 + virtual float getSlope() const; + + // 截距 + virtual float getIntercept() const; + + // 字符串 Y=Kx+b + virtual QString getLineExp(); + + // 线段上任意一点,暂取中点 + virtual QPointF getRandomPtValue(); //实际值 + virtual QPointF getRandomPtPos(); //屏幕值 + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 实际值 + QPointF getStartValue(); + void setStartValue(const QPointF& pt); + QPointF getEndValue(); + void setEndValue(const QPointF& pt); + + // XY + float getStartValueX(); + void setStartValueX(const float &x); + float getStartValueY(); + void setStartValueY(const float &Y); + float getEndValueX(); + void setEndValueX(const float &x); + float getEndValueY(); + void setEndValueY(const float &y); + + bool getShowDotPoint(); + void showDotPoint(bool show); + + void resetBounds(); + QRectF getBounds4Update(); + +public: + + bool m_showDotPoint; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLineParallel.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineParallel.h new file mode 100644 index 0000000..a44bce5 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineParallel.h @@ -0,0 +1,75 @@ +#pragma once + +#include "ZxObjLineSlr.h" + +class I_PLOTCURVE_T_EXPORT ZxObjLineParallel : public ZxObjLineSlr +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjLineParallel(); + ZxObjLineParallel(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjLineParallel(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 鼠标移动时,限制斜率得到的新点 + QPointF calFitPoint(const QPointF& ptNew); + + // 封装 + virtual void initTools(); + + virtual void resetOthers(); + +public: + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 根据某点以及斜率,计算四点 + // fLen如果为-1.f则默认取坐标轴网格长度的一半 + virtual QVector calLinePoints(const QPointF& pt, + float fRatio, + float fLen = -1.f); + static QVector calLinePointsEx(const QPointF& pt, + float fRatio, + float fLen); + + // 计算线斜率,得到字符串 + virtual QString getLineExp(); + + // 默认的高度 + void setH(float f); + float getH() const; + +public: + + float m_fH; //默认的高度 +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLineParallelTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineParallelTool.h new file mode 100644 index 0000000..5cf2336 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineParallelTool.h @@ -0,0 +1,29 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjLineTool.h" + +// 特征线工具 +class I_PLOTCURVE_T_EXPORT ZxObjLineParallelTool : public ZxObjLineTool +{ + Q_OBJECT + +public: + + ZxObjLineParallelTool(); + //ZxObjLineParallelTool(const ZxObjLineParallelTool& c); + +public: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + + +protected: + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSlr.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSlr.h new file mode 100644 index 0000000..484f003 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSlr.h @@ -0,0 +1,94 @@ +#pragma once + +#include "ZxObjLine.h" + +class I_PLOTCURVE_T_EXPORT ZxObjLineSlr : public ZxObjLine +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjLineSlr(); + ZxObjLineSlr(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjLineSlr(); + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 鼠标移动时,限制斜率得到的新点 + QPointF calFitPoint(const QPointF& ptNew); + + // 封装 + virtual void initTools(); + + // 辅助信息 + virtual void initSubObjs(); + + virtual void resetOthers(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 根据某点以及斜率,计算两点,屏幕坐标 + // fLen如果为-1.f则默认取坐标轴网格长度的一半 + virtual QVector calLinePoints(const QPointF& pt, + float fRatio, + float fLen = -1.f); + // 根据某点以及斜率,计算两点,屏幕坐标 + static QVector calLinePointsEx(const QPointF& pt, + float fRatio, + float fLen); + + // 特征线斜率 Special line ratio + // 斜率 + void setSlope(float f); + virtual float getSlope() const; + + // 计算线斜率,得到字符串 + virtual QString getLineExp(); + + // 默认的长度 + void setLen(float f); + float getLen() const; + +public: + + float m_fSlope; //这是针对特征线时后的斜率值 + float m_fLen; //默认的长度 + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSlrTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSlrTool.h new file mode 100644 index 0000000..473923d --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSlrTool.h @@ -0,0 +1,29 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjLineTool.h" + +// 特征线工具 +class I_PLOTCURVE_T_EXPORT ZxObjLineSlrTool : public ZxObjLineTool +{ + Q_OBJECT + +public: + + ZxObjLineSlrTool(); + //ZxObjLineSlrTool(const ZxObjLineSlrTool& c); + +public: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +//protected: +// virtual Qt::CursorShape getCursorBy(const int& nOption, +// const int& nSubIndex); + + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSpecial.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSpecial.h new file mode 100644 index 0000000..c06d3bc --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSpecial.h @@ -0,0 +1,80 @@ +#pragma once + +#include "ZxObjLine.h" + +//ZXF2024特征线优化 +class I_PLOTCURVE_T_EXPORT ZxObjLineSpecial : public ZxObjLine +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjLineSpecial(); + ZxObjLineSpecial(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjLineSpecial(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 鼠标移动时,限制斜率得到的新点 + QPointF calFitPoint(const QPointF& ptNew); + + // 封装 + virtual void initTools(); + // 辅助信息 + virtual void initSubObjs(); + + virtual void resetOthers(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + //根据两点计算出多个点(斜率为1的最大最小点,与斜率为0的焦点及斜率为0的最大点) + virtual QVector calLinePoints(const QPointF& pt1, + const QPointF& pt0); + + //计算交点(P1和P2是线,P4是水平最后点, p3是交点) + void getInCrossPt(const QPointF& p1, const QPointF& p2, const QPointF& p4, QPointF& pt3); + + + // 特征线斜率 Special line ratio(组合斜率)() + // 斜率 + QPointF getSlopeOnePt() const; //斜率为1 + QPointF getSlopeZeroPt() const; //斜率为0 +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSpecialTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSpecialTool.h new file mode 100644 index 0000000..801fbf5 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineSpecialTool.h @@ -0,0 +1,29 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjLineTool.h" + +//ZXF2024组合(斜率1和0)特征线工具 +class I_PLOTCURVE_T_EXPORT ZxObjLineSpecialTool : public ZxObjLineTool +{ + Q_OBJECT + +public: + + ZxObjLineSpecialTool(); + //ZxObjLineSlrTool(const ZxObjLineSlrTool& c); + +public: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +//protected: +// virtual Qt::CursorShape getCursorBy(const int& nOption, +// const int& nSubIndex); + + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjLineTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineTool.h new file mode 100644 index 0000000..f706fa9 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjLineTool.h @@ -0,0 +1,30 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjToolBase.h" + +// 线工具 +class I_PLOTCURVE_T_EXPORT ZxObjLineTool : public ZxObjToolBase +{ + Q_OBJECT + +public: + + ZxObjLineTool(); + //ZxObjLineTool(const ZxObjLineTool& c); + +public: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjPoint.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjPoint.h new file mode 100644 index 0000000..e5c0bd8 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjPoint.h @@ -0,0 +1,83 @@ +#pragma once + +#include "ZxObjBase.h" + +class I_PLOTCURVE_T_EXPORT ZxObjPoint : public ZxObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjPoint(); + ZxObjPoint(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjPoint(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 获取中心点 + virtual QPointF getCenterPos(); + + // 封装 + virtual void initTools(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // XY的位置信息 + void setValueX(float x); + float getValueX(); + void setValueY(float y); + float getValueY(); + + // 描述 + void setDesc(QString s); + QString getDesc(); + + // 点数据 + void setDataByPos(const QPointF& pt, QString sDesc); + + void resetBounds(); + virtual QRectF getBounds4Update(); + +public: + + QString m_sDesc; ///描述字符串 + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjPointSlr.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjPointSlr.h new file mode 100644 index 0000000..38f089a --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjPointSlr.h @@ -0,0 +1,47 @@ +#pragma once + +#include "ZxObjPoint.h" + +class I_PLOTCURVE_T_EXPORT ZxObjPointSlr : public ZxObjPoint +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjPointSlr(); + ZxObjPointSlr(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjPointSlr(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + +public: + + // 辅助信息 + virtual void initSubObjs(); + virtual void resetOthers(); + + // 封装 + virtual void initTools(); + + // 设置显示的标识 + void setPointTag(QString s); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjPointSlrTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjPointSlrTool.h new file mode 100644 index 0000000..5131f85 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjPointSlrTool.h @@ -0,0 +1,22 @@ +#pragma once + +#include "ZxObjPointTool.h" + +// 点工具 +class I_PLOTCURVE_T_EXPORT ZxObjPointSlrTool : public ZxObjPointTool +{ + Q_OBJECT + +public: + + ZxObjPointSlrTool(); + +public: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjPointTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjPointTool.h new file mode 100644 index 0000000..1e5062e --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjPointTool.h @@ -0,0 +1,28 @@ +#pragma once + +#include "ZxObjToolBase.h" + +// 点工具 +class I_PLOTCURVE_T_EXPORT ZxObjPointTool : public ZxObjToolBase +{ + Q_OBJECT + +public: + + ZxObjPointTool(); + +public: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjPolygon.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjPolygon.h new file mode 100644 index 0000000..1bbe9a8 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjPolygon.h @@ -0,0 +1,69 @@ +#pragma once + +#include "ZxObjBase.h" + +class I_PLOTCURVE_T_EXPORT ZxObjPolygon : public ZxObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjPolygon(); + ZxObjPolygon(const QString& name,ZxSubAxisX* pAxisX,ZxSubAxisY* pAxisY); + ~ZxObjPolygon(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 封装 + virtual void initTools(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 填充颜色 + QColor getFillColor(void) const; + void setFillColor(QColor color); + + // 是否填充颜色 + bool isFillColor(void) const; + void FillColor(bool fill); + +public: + + QColor m_fillColor;//填充颜色 + bool m_bIsFill; //是否填充 +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjPolygonTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjPolygonTool.h new file mode 100644 index 0000000..909f0d4 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjPolygonTool.h @@ -0,0 +1,34 @@ +#pragma once + +#include "Defines.h" +#include "ZxObjToolBase.h" + +/// 多边形区域工具缩放 +class I_PLOTCURVE_T_EXPORT ZxObjPolygonTool : public ZxObjToolBase +{ + Q_OBJECT + +public: + + ZxObjPolygonTool(); + //ZxObjPolygonTool(const ZxObjPolygonTool& c); + +public: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + + +protected: + + QVector m_vecPoints; + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjRect.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjRect.h new file mode 100644 index 0000000..a6fcfa3 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjRect.h @@ -0,0 +1,105 @@ +#pragma once + +#include +#include "ZxObjBase.h" + +class I_PLOTCURVE_T_EXPORT ZxObjRect + : public ZxObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjRect(); + ZxObjRect(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjRect(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 为了方便而再次封装,仅仅判断位置 + virtual RectPos _getPtPosOfRect(const QPointF& pt); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 封装 + virtual void initTools(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +protected: + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void paintFrame(QPainter* painter); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 边界 + virtual float getL() const; + virtual void setL(float f); + virtual float getR() const; + virtual void setR(float f); + virtual float getT() const; + virtual void setT(float f); + virtual float getB() const; + virtual void setB(float f); + virtual void setValueByPos(const QPointF& ptTL, const QPointF& ptRB); + virtual void setValueByPos(const float& l, const float& r, + const float& t, const float& b); + + // 是否显示边框 + bool isFrameVisible(void) const; + void setFrameVisible(bool bIsShow); + + // 背景色 + QColor getBackgroundColor(); + void setBackgroundColor(QColor color); + + // 背景透明度 + int getBackgroundAlpha(); + void setBackgroundAlpha(int nAlpha); + +protected: + + bool m_bFrameVisible; //是否显示边框 + QColor m_clrBackgrd; //背景色 + +public: + + RectPos m_oHitPos; + + // 临时变量 + bool m_bAsBand; + bool m_bBanded; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjRectTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjRectTool.h new file mode 100644 index 0000000..df591cf --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjRectTool.h @@ -0,0 +1,42 @@ +#pragma once + +#include "ZxObjToolBase.h" + +class ZxHandleHelper; +class ZxObjRect; + +// 矩形tool +class I_PLOTCURVE_T_EXPORT ZxObjRectTool : public ZxObjToolBase +{ + Q_OBJECT + +public: + + ZxObjRectTool(); + ~ZxObjRectTool(); + + virtual ZxHandleHelper* getHandleHelper(); + +public: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onRightDown(const QPointF& pt); + virtual bool onRightUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual void onPaint(QPainter* painter, + const ZxPaintParam& param); + +protected: + + virtual QRectF getMovingBound(ZxRenderItem *pObj); + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +protected: + + RectPos m_oHitPos; + + ZxHandleHelper* m_pHandleHelper; +}; diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjSketch.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjSketch.h new file mode 100644 index 0000000..5847e87 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjSketch.h @@ -0,0 +1,52 @@ +#pragma once + +#include "ZxObjImage.h" + +class I_PLOTCURVE_T_EXPORT ZxObjSketch + : public ZxObjImage +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjSketch(); + ZxObjSketch(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjSketch(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +protected: + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void drawImage(QPainter* painter, + QRectF bound, + QString sPath); +#ifdef QT_DEBUG + virtual void drawImageEx(QPainter* painter, + QRectF bound, + QString sPath); +#endif + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void fillPtyPano(IxPtyPano* sheet); + virtual void onLeftDoubleClick(const QPointF& pt); + +public: + +protected: + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjText.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjText.h new file mode 100644 index 0000000..9208056 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjText.h @@ -0,0 +1,122 @@ +#pragma once + +#include +#include "ZxObjRect.h" + +class I_PLOTCURVE_T_EXPORT ZxObjText + : public ZxObjRect +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxObjText(); + ZxObjText(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjText(); + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // resetBounds内部调用 + virtual void resetOthers(); + void changeTextEditPos(); + + // 计算文本大小 + QSizeF calTextSize(const QString& sText); + + // 根据文本大小,自动调整,并且以某点为中心 + void resetBoundsEx(const QString& sText, + const QPointF& ptCenter); + // 封装 + virtual void initTools(); + + // 当该对象未选中,反选其它,如文本框 + virtual void deselectOthers(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + + // 初始化Text + virtual void initTextEdit(); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void onDeserialized(); + virtual void fillPtyPano(IxPtyPano* sheet); + + virtual void onLeftDoubleClick(const QPointF& pt); + virtual void showEditWidget(bool bVisible); + +public slots: + + void slotTextEditDestroy(); + virtual void slotTextContentChanged(); + +public: + + // 文本 + QString getText(void) const; + void setText(QString text); + + // 文本颜色 + QColor getTextColor(void) const; + void setTextColor(QColor color); + + // 文本字体 + QFont getFont(void) const; + void setFont(QFont font); + + // 是否自适应宽度 + bool isAutoAdjust() const; + void setAutoAdjust(bool bAutoAdjust); + + // 是否双击手工编辑 + bool isManulEdit() const; + void setManulEdit(bool bManulEdit); + + // 对齐模式 + int getAlignFlag() const; + void setAlignFlag(int nAlignFlag); + int getAlignHor() const; + void setAlignHor(int n); + int getAlignVert() const; + void setAlignVert(int n); + +protected: + + QString m_sText; //文本 + QColor m_oTextClr; //字体颜色 + QFont m_oTextFont; //字体 + bool m_bAutoAdjust; //是否自动调整边框(根据文本) + bool m_bManulEdit; //是否允许用户双击手工编辑 + int m_nAlignFlag; //对齐模式 +// int m_nAlignHor; //水平对齐模式,左中右 0 1 2 +// int m_nAlignVert; //竖直对齐模式,上中下 0 1 2 + + // 临时变量 + QTextEdit* m_pTempEdit; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjTextTool.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjTextTool.h new file mode 100644 index 0000000..5c9322d --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjTextTool.h @@ -0,0 +1,26 @@ +#pragma once + +#include "ZxObjRectTool.h" + +// 文本工具 +class I_PLOTCURVE_T_EXPORT ZxObjTextTool : public ZxObjRectTool +{ + Q_OBJECT + +public: + + ZxObjTextTool(); + //ZxObjTextTool(const ZxObjTextTool & c); + +protected: + + //virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + //virtual bool onMouseMove(const QPointF& pt); + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/Objects/ZxObjToolBase.h b/Include/iPlot/iPlotCurveT/Objects/ZxObjToolBase.h new file mode 100644 index 0000000..b89e85d --- /dev/null +++ b/Include/iPlot/iPlotCurveT/Objects/ZxObjToolBase.h @@ -0,0 +1,62 @@ +#pragma once + +#include +#include +#include "ZxSimpleTool.h" +#include "Defines.h" + +#include "iPlotCurveT_global.h" + +class ZxRenderItem; +class ZxObjBase; + +/// 工具类的再次封装 +class I_PLOTCURVE_T_EXPORT ZxObjToolBase : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxObjToolBase(); +// ~ZxObjToolBase(); + + void setChartObj(ZxObjBase* pObj); + +public: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onRightDown(const QPointF& pt); + virtual bool onRightUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual void onPaint(QPainter* painter, + const ZxPaintParam& param); + virtual void onPaintHandles(QPainter* painter, + const ZxPaintParam& param); + + +protected: + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + virtual void changeCursor(Qt::CursorShape oShape, bool bMoveActivated = false); + virtual void restoreCursor(); + +protected: + + ZxObjBase* m_pObj; + + // 鼠标交互相关 + bool m_bTracking; + QRectF m_rtTracker; + QPointF m_ptStart; + QPointF m_ptMove; + + ObjHitOption m_oHitOption; + + Qt::CursorShape m_oOldShape; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxCmdTool.h b/Include/iPlot/iPlotCurveT/ZxCmdTool.h new file mode 100644 index 0000000..536ecda --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxCmdTool.h @@ -0,0 +1,74 @@ +#pragma once + +#include +#include +#include "iPlotCurveT_global.h" + +class QPointF; +class ZxRenderItem; +class ZxPlotBase; + +/// 通用Tool,消息分发 +class I_PLOTCURVE_T_EXPORT ZxCmdTool : public ZxSimpleTool +{ + Q_OBJECT + +public: + + ZxCmdTool(); + ZxCmdTool(const ZxCmdTool& c); + + void setPlotRect(QRectF rc); + void setChartObj(ZxPlotBase* pObj); + +protected: + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onLeftDoubleClick(const QPointF& pt); + virtual void onKeyPress(QKeyEvent *event); + void changeCursor(int nOpType); + +signals: + + // 鼠标交互式选择点后,触发信号,允许外界创建Object + void sigTakeMousePts(QVector& vecPts, \ + int n, bool& b); + +private: + + void verifyPos(QPointF& pt); + + // 鼠标移动时的辅助信息显示 + virtual bool _runShowWithMoving(const QPointF& pt); + + // 鼠标Up时的相应操作 + virtual bool _runCmdAddObj(const QPointF& pt); + virtual bool _runCmdZoom(const QPointF& pt); + virtual bool _runCmdMove(const QPointF& pt); + virtual bool _runCmdSelect(const QPointF& pt); + virtual bool _runCmdHitPoint(const QPointF& pt); + +protected: + + bool m_bTracking; + + // 图的有效矩形 + QPointF m_ptStart; + QPointF m_ptMove; + QRectF m_rtPlot; + QRectF m_rtTracker; + ZxPlotBase* m_pPlot; + + QVector m_vecPosPoints; + + bool m_bLeftDown; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxHandleHelper.h b/Include/iPlot/iPlotCurveT/ZxHandleHelper.h new file mode 100644 index 0000000..41f098b --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxHandleHelper.h @@ -0,0 +1,43 @@ +#pragma once + +#include +#include + +#include "Defines.h" +#include "iPlotCurveT_global.h" + +class ZxPaintParam; + +// 8控制点管理器 +class I_PLOTCURVE_T_EXPORT ZxHandleHelper +{ +public: + + ZxHandleHelper(); + ZxHandleHelper(const QRectF& rt); + +public: + + // 边界 + virtual void setBounds(const QRectF& rt); + virtual QRectF getBounds() const; + + // handle + virtual RectPos hitTest(const QPointF& pt, float fHdlSize = 2.2f); + static QVector getEightPoints(const QRectF& rtBound); + static QPointF getOnePointOf(const QRectF& rtBound, RectPos o); + + // 光标 + virtual QCursor getCursor(RectPos o); + + // 绘制 + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param, + RectPos oActive = OUTER); + +private: + + QRectF m_rtBound; +}; + + diff --git a/Include/iPlot/iPlotCurveT/ZxPlot.h b/Include/iPlot/iPlotCurveT/ZxPlot.h new file mode 100644 index 0000000..9a72b3c --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxPlot.h @@ -0,0 +1,168 @@ +#pragma once + +#include "ZxPlotBase.h" + +class ZxObjBase; + +// 绘图载体再次封装,其实大部分绘图都是基于本类来实现 +class I_PLOTCURVE_T_EXPORT ZxPlot : public ZxPlotBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxPlot(); + ZxPlot(ZxRenderView* pView); + ~ZxPlot(); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void paintBounds(QPainter* painter); + + // 布局 + virtual void onLayout(); + + // 上下文菜单 + virtual void onPrepareContextMenu(QMenu *pMenu, const QPointF &pos); + +public: + + // 鼠标 + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual void onLeftDoubleClick(const QPointF& pt); + + // Tips + virtual void onShowTips(const QPointF& pt); + + // 删除(这是响应键盘Delete键) + virtual void onDeleteItem(); + virtual void deleteCurvePtsWithin(QRectF rt); + + // 属性填充 + virtual void fillPtyPano(IxPtyPano* sheet); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onDeserialized(); + + // 模版序列化 + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + // 重新绑定相互关联的 + virtual void onDeserializedReBounds(); + +public: + + // 布局 + virtual bool checkNeedLayout(); + virtual QRectF getNetBounds(); //去除Margin + virtual QRectF getInnerChartArea(QRectF rt); //内部绘图区,不包括坐标轴和标题区 + + float getTitleHeight(); //获取标题的高度 + float getNaviBarHeight(); //获取NaviBar高度 + + virtual float getAxisDisOf(AxisPos oPos); + virtual QVector getVisibleAxisOf(AxisPos oPos); + +protected: + + // 布局Title,并且返回其Bound + virtual QRectF layoutTitle(QRectF rtLast, int nPos); + + // NaviBar + virtual QRectF layoutNaviBar(QRectF rtLast); + + // 上下左右侧坐标轴 + virtual QRectF layoutAxisOf(QRectF rtLast, AxisPos oPos); + virtual void _layoutAxisOf(QMap& map, \ + QRectF rt, AxisPos oPos); + +public: + + // 是否以正方形网格化显示,对于双对数有效 + bool isSquareGrid() const; + void setSquareGrid(bool b); + + // 只有m_bSquareGrid为true且xy为双对数 + bool checkSquareGridMode(float& w, float& h); + + // 是否正在执行插入新对象的操作 + bool isInserting(); + + // 特征线斜率 Special line ratio,权宜之计 + float getLineSlope() const; + void setLineSlope(float f); + + // 统一的增加接口,调用下面的创建和添加 + virtual ZxObjBase* addOneObj(const PlotObjectType& oType, + QString& sName, + bool bAppend = true, + ZxSubAxisX* pAxisX = NULL, + ZxSubAxisY* pAxisY = NULL, + bool bY2 = false); + + virtual bool addOneObj(ZxObjBase* pObj, + bool bAppend = true, + ZxSubAxisX* pAxisX = NULL, + ZxSubAxisY* pAxisY = NULL, + bool bY2 = false); + + virtual bool zoomPlot(QRectF rtTracker); + +protected: + + virtual ZxObjBase* _createObjOf(const PlotObjectType& oType, \ + QString& sName); + // 添加 + virtual void _appendObjOf(ZxObjBase* pObj); + +public: + + // 响应从ZxCmdTool过来的鼠标处理 + virtual bool runCmdSelect(PlotOperationMode o, \ + const QPointF& ptStart, \ + const QPointF& ptEnd); + virtual bool runCmdHitPoint(PlotOperationMode o, \ + const QPointF& pt); + +public slots: + + virtual void slotShowCurveData(); + virtual void slotClearPointsSelection(); + +signals: + + // 触发信号,允许外界处理鼠标HitPoint + void sigCmdHitPoint(PlotOperationMode o, \ + const QPointF& pt, \ + bool& b); + + void sigUpdate(); + void sigShowCurveData(ZxObjCurveBase*); + +protected: + + // 是否以正方形网格化显示,对于双对数有效 + bool m_bSquareGrid; + + // 临时标示,左键按下 + bool m_bLButtonDown; + + // 权宜之计 + QPainter* m_pPainter; + + // 权宜之计,其实不应该这么处理,不涉及序列化 + // 这是针对特征线时后的斜率值 + float m_fLineSlope; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxPlotBase.h b/Include/iPlot/iPlotCurveT/ZxPlotBase.h new file mode 100644 index 0000000..aa188c1 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxPlotBase.h @@ -0,0 +1,359 @@ +#pragma once + +#include + +#include "Defines.h" +#include "ZxRenderItem.h" +#include "ZxDrawHelper.h" +#include "iPlotCurveT_global.h" + +class ZxSubAxisX; +class ZxSubAxisY; +class ZxSubAxisBase; +class ZxSubTitle; +class ZxSubNaviBar; +class ZxObjCurveBase; +class ZxSubLegend; +class IxPtyItem; +class ZxCmdTool; +class ZxObjBase; +class ZxSimpleTool; + +// 绘图载体 +class I_PLOTCURVE_T_EXPORT ZxPlotBase : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxPlotBase(); + ZxPlotBase(ZxRenderView* pView); + ~ZxPlotBase(); + + // 初始化及Tool管理 + virtual void init(ZxRenderView* pView); + virtual void initTools(); + void removeTools(ZxSimpleTool *pSubTool = NULL); + void appendTools(ZxSimpleTool *pSubTool = NULL); + void resetTools(ZxRenderView* pView); + +public: + + // 响应从ZxCmdTool过来的鼠标处理 + virtual bool runCmdSelect(PlotOperationMode o, \ + const QPointF& ptStart, \ + const QPointF& ptEnd); + virtual bool runCmdHitPoint(PlotOperationMode o, \ + const QPointF& pt); + + // 整体移动,20190222 + virtual bool runWholeMove(const QPointF& ptStart, + const QPointF& ptEnd); + +protected: + + virtual void release(); + +public: + + static const int AXISHEIGHT = 12; + static const int AXISWIDTH = 12; + static const int TITLEHEIGHT = 13; + static const int NAVIBARHEIGHT = 5; + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + virtual void paintBackground(QPainter* painter); + virtual void paintGrid(QPainter* painter); + + // 属性填充 + virtual void fillPtyPano(IxPtyPano* sheet); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onDeserialized(); + + // 序列化之后重新进行一下成员变量的遍历(遍历以及绑定) + virtual void reparseMembers(); + virtual void rebindObjs(); + virtual void rebindObjOf(ZxObjBase*& p); + virtual void rebindLegend(); + + // 模版序列化 + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + // 布局 + // 刷新激活(重新布局的开关) + void setNeedLayout(bool b); + bool isNeedLayout(); + virtual void onLayout(); + + // 是否发生更改的状态标识 + virtual void setModified(bool b); + virtual bool isModified(); + +public: + + // 鼠标 + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual void onLeftDoubleClick(const QPointF& pt); + + // Tips + virtual void onShowTips(const QPointF &point); + + // 删除(这是响应键盘Delete键) + virtual void onDeleteItem(); + virtual void deleteCurvePtsWithin(QRectF rt); + +public: + + // 操作类型 + int getOpType(void) const; + void setOpType(int nOpType); + + // 图元对象相关 + int getObjCount(void); + ZxObjBase* getObjByIndex(int nIndex); + ZxObjBase* getObjByName(QString sName); + virtual void removeObjByIndex(int nIndex); + virtual void removeObjByName(QString sName); + virtual void removeAllObjects(bool bTestMode = false); + + // 内部绘图区域,不包括标题区,坐标轴 + virtual QRectF getInnerRectF(); + + // 恢复撤销 + virtual void runCmdUndo(); + virtual void runCmdRedo(); + virtual bool canRedo(); + virtual bool canUndo(); + virtual void clearUndoStack(); + + // 动态创建添加坐标轴(该函数暂未启用,在应用时,应该已经设定了pAxis的位置) + virtual void appendAxis(ZxSubAxisBase* pAxis); + + // 对坐标轴进行配置及绑定(主要是一些信号关联) + virtual void configAxis(ZxSubAxisBase* pAxis); + + // 关联各个子项 + virtual void bindSubMembers(ZxRenderView* pView); + +public: + + // 坐标轴、标题、图例 + ZxSubTitle* getTitle(); + virtual void setTitle(ZxSubTitle* pTitle); + ZxSubLegend* getLegend(); + + // 获取当前起作用的主坐标轴,比如画网格线时需要的 + virtual ZxSubAxisX* getMainAxisX(); + virtual ZxSubAxisY* getMainAxisY(); + void setMainAxisX(ZxSubAxisX* pAxis); + void setMainAxisY(ZxSubAxisY* pAxis); + + // 坐标轴 + ZxSubAxisX* getSysAxisX(AxisPos o); + ZxSubAxisY* getSysAxisY(AxisPos o); + ZxSubAxisBase* getSysAxisOf(AxisPos o); + + // 坐标轴显示隐藏 + void setAxisVisibleByObjName(QString sAxisObjectName, bool bVisible); + void setAxisVisibleByPos(AxisPos o, bool bVisible); + void setAxisVisibleByPtr(ZxSubAxisBase* pAxis, bool bVisible); + + // 坐标轴最小化 + void setMinimizeAxisX(bool b); + void setMinimizeAxisY(bool b); + + // 导航,暂时没用到 + ZxSubNaviBar* getNaviBar(); + void setNaviBar(ZxSubNaviBar* p); + + /////////////////////////////////////////////////////// + // 通用成员变量的处理 + + // 背景渐变色 + QColor getBKColor(void); + virtual void setBKColor(QColor color); + QColor getBKColorEx(void); + virtual void setBKColorEx(QColor color); + + // 外边框颜色 + QColor getFrameColor(void); + virtual void setFrameColor(QColor color); + + // Margin + float getMargin(); + virtual void setMargin(float fMargin); + + // 是否显示图标题 + virtual void setTitleVisible(bool bVisible); + bool isTitleVisible(); + + // 是否显示导航(暂未启用) + virtual void setNaviBarVisible(bool bVisible); + bool isNaviBarVisible(); + + // 是否显示图例 + virtual void setLegendVisible(bool bVisible); + bool isLegendVisible(); + virtual void setLegendGroups(QStringList list); + + // 是否显示tip + bool isBkTipVisible(void) const; + virtual void setBkTipVisible(bool bVisible); + + // 是否显示边框 + bool isFrameVisible(void) const; + virtual void setFrameVisible(bool bVisible); + + // 标题位置,0顶部和1底部 + int getTitlePos(void) const; + virtual void setTitlePos(int nShowPos); + + // 是否显示网格线 + bool isScaleBigXVisible(); + virtual void setScaleBigXVisible(bool b); + bool isScaleBigYVisible(); + virtual void setScaleBigYVisible(bool b); + bool isScaleSmallXVisible(); + virtual void setScaleSmallXVisible(bool b); + bool isScaleSmallYVisible(); + virtual void setScaleSmallYVisible(bool b); + bool _isScaleXYVisible(bool bX, bool bBigScale); + void _setScaleXYVisible(bool bX, bool bBigScale, bool b); + + + + /////////////////////////////////////////////////////// + + // x/y轴每一个的Span,这是统一设定(每个坐标轴还可以单独设定) + // 请在plot的init时候调用该函数 + float getPerAxisSpanX(); + void setPerAxisSpanX(float f); + float getPerAxisSpanY(); + void setPerAxisSpanY(float f); + + // 设置四个方向各自总的Span(然后每个坐标轴按比例拆分) + void setSumAxisSpan(AxisPos o, float f); + float getSumAxisSpan(AxisPos o); + + // 主要为了触发对象创建完成 + virtual void objCompleted(ZxObjBase* p); + +public slots: + + virtual void slotAxisScaleCountChanged(int); + + // 获取(发送者)坐标轴上对应数据中的最小的正值 + virtual void slotGetLeastPositive(float& f); + + // 响应信号 鼠标交互式选择点后,允许Plot自行创建Object + virtual void slotTakeMousePts(QVector& vecPts, \ + int nMode, bool& b); + + // 由于刻度显示与Plot相互关联,所以此处进行额外处理 + virtual void slotScaleVisibleChanged(bool bBigScale, bool bVisible); + + +public: + + // 背景图像 + void setBkImgFile(QString s); + + // 旋转(倾斜度校正) + // 顺时针旋转的角度,不需弧度转换, fAngle:0-360 + bool rotateImg(float fAngle); + QSize getBkImgSize(); + QImage* getBkImg(); + static bool loadImg(QImage& oImg, QString sFile); + +signals: + + void sigOpTypeChanged(int nOpType);//鼠标操作模式发生改变 + + void sigObjAdding(ZxObjBase*); //新对象添加前触发 + void sigObjAdded(ZxObjBase*); //新对象添加后触发,此时对象没有数据 + void sigObjCompleted(ZxObjBase*);//新对象添加后触发,已经可以正常使用 + void sigObjDeleting(ZxObjBase*); //对象删除前触发 + void sigObjDeleted(ZxObjBase*); //对象删除后触发 + +// void sigPlotModified(bool); //该信号废弃 + + /// @brief 工具框选时推送信号,告知主窗体进行相关处理 + /// @param rtBoundV这是框选的窗体(是实际数值坐标,非屏幕坐标) + /// @param oPom当前的操作模态 + void sigOpRectChanged(const QRectF& rtBoundV, \ + PlotOperationMode oPom); + +protected: + + // 图元 + ZxSubTitle* m_pTitle; + ZxSubNaviBar* m_pNaviBar; + ZxSubLegend* m_pLegend; + + // 本身有次序和主次,靠前者为主 + // 另外,就是先左后右、先下后上 + QVector m_vecAxises; + + // x/y轴每一个的Span,这是统一设定(每个坐标轴还可以单独设定) + // 请在plot的init时候进行设置 + float m_fPerAxisSpanX; + float m_fPerAxisSpanY; + + // 设置四个方向各自总的Span(然后每个坐标轴按比例拆分) + //0:Left,1:top,2right,3 bottom与AxisPos定义相同 + VecFloat m_vecSumSpans; + + // 内在图元 + QVector m_vecAllObjs; + + // Tool + ZxCmdTool* m_pCmdTool; + + // View + ZxRenderView* m_pView; + + // 操作类型 + int m_nOpType; + + // 范围、位置 + QRectF m_rcInner; + float m_fMargin; + int m_nTitlePos; //标题位置 + + // 颜色 + QColor m_clrBKColor; + QColor m_clrBKColorEx; + QColor m_clrFrameColor; + + // 显示 + // 对绘图区的网格线与坐标轴的网格线分开控制 + bool m_bScaleBigXVisible; + bool m_bScaleBigYVisible; + bool m_bScaleSmallXVisible; + bool m_bScaleSmallYVisible; + + // 显示辅助 + bool m_bBkTipVisible; + bool m_bFrameVisible; + + // 临时变量 + bool m_bModified; + bool m_bNeedLayout; + + QString m_sBkImgFile; + QImage m_oBkImg; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxSubColorTable.h b/Include/iPlot/iPlotCurveT/ZxSubColorTable.h new file mode 100644 index 0000000..54db781 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxSubColorTable.h @@ -0,0 +1,139 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include "Defines.h" +#include + +#include "ZxDrawHelper.h" + +#include "iPlotCurveT_global.h" + +class ColorNode +{ +public: + ColorNode(float fPos,QColor clrColor) + { + m_fPos = fPos; + m_clrColor = clrColor; + } + + float m_fPos; + QColor m_clrColor; +}; + +class ColorScheme +{ +public: + ColorScheme() + { + m_strName = ""; + m_fValMin = 0.0f; + m_fValMax = 0.0f; + m_vecColors.clear(); + m_vecIntervals.clear(); + } + + QString m_strName; + float m_fValMin; + float m_fValMax; + QVector m_vecColors; + QVector m_vecIntervals; +}; + + +class I_PLOTCURVE_T_EXPORT ZxSubColorTable : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + enum COLOR_TYPE + { + STEP,GRADIENT,GRAY,ST_PROJECTION + }; + + + static const float COLOR_WIDTH; + +public: + + ZxSubColorTable(); + ZxSubColorTable(const QString& name); + ZxSubColorTable(const ZxSubColorTable & _r); + ~ZxSubColorTable(); + + void init(); + void initGradient(); + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void fillPtyPano(IxPtyPano* sheet); + + void drawColorRect(QPainter* painter,QRectF rc); + + void initSystemPalette(); + void getAllPalette(QString strPath, QVector &vecPlates); + QStringList splitString(QString s); + +public: + // 名称 + QString getName() const; + void setName(const QString& sName); + + // 别名 + QString getAlias() const; + void setAlias(QString name); + + // 颜色表的单位 + void setUnit(const QString &strUnit); + QString getUnit() const; + + // 数据最值 + float getMinValue() const; + void setMinValue(float fMin); + float getMaxValue() const; + void setMaxValue(float fMax); + + // 颜色表的类型,梯度,渐变,灰度 + int getColorType() const; + void setColorType(int nType); + + QString getColorTypeSTR() const; + void setColorTypeSTR(QString strTypeName); + + // 根据值得到对应的颜色 + bool getColorForValue(float fValue,QColor &clr); + bool getValueForColor(QColor clr,float &fValue); + + // 根据值得到对应的颜色 + bool getColor(float pos,QColor &clr); + + void setColorGrade(int nColorGrade); + int getColorGrade() const ; + + QVector getColorTable(); + +protected: + + QString m_strName; + QString m_strAlias; + QString m_sUnit; + float m_fMin; + float m_fMax; + + int m_nColorType; + QString m_strColorType; + int m_nColorGrade; //颜色表大小,最大到65536个(真彩) + + QVector m_vecColorNodes; + QVector m_vecColorSchemes; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxSubLegend.h b/Include/iPlot/iPlotCurveT/ZxSubLegend.h new file mode 100644 index 0000000..37158c1 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxSubLegend.h @@ -0,0 +1,235 @@ +#pragma once + +#include "Defines.h" +#include "ZxDrawHelper.h" + +#include "ZxSubLegendItems.h" + +class ZxObjBase; +class ZxObjCurveBase; +class ZxSubLegendTool; +class ZxSimpleTool; +class ZxSubAxisX; +class ZxSubAxisY; + +// 图例 +class I_PLOTCURVE_T_EXPORT ZxSubLegend + : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSubLegend(); + ZxSubLegend(const QString& sName, + ZxSubAxisX *pAxisX, + ZxSubAxisY *pAxisY); + ~ZxSubLegend(); + + // 图例位置 + enum LegendPos + { + LP_LeftTop = 0, //左上 + LP_LeftBottom, //左下 + LP_RightTop, //右上 + LP_RightBottom, //右下 + LP_Free, //任意,包括用户拖拽移动 + LP_Unknown + }; + +public: + + virtual void init(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + virtual void initTools(ZxRenderView* pView); + ZxSimpleTool* getTool(); + + void setAxisX(ZxSubAxisX* pAxis); + void setAxisY(ZxSubAxisY* pAxis); + +public slots: + + // 子项管理 + void slotObjItemAdded(ZxObjBase*); + void slotObjItemDeleted(ZxObjBase*); + void slotObjItemSelChanged(bool bSelected); + void slotItemLeftDoubleClicked(const QPointF& pt); + +public: + + // 左键双击 + virtual void onLeftDoubleClick(const QPointF& pt); + +public: + + ////////////////////////////////// + // 子项管理 + + void appendItem(ZxObjCurveBase* pCurve); + void removeItem(ZxObjCurveBase* pCurve); +// void removeItem(int nIndex); + void removeAllItems(); + + bool _addOrDel(ZxSubLegendItem* p, bool bAdd); + + // 在组模式情况下,拆分名称 + bool _dealwithGroup(ZxSubLegendItem* p, bool bAdd); + + // 查找当前组 + ZxSubLegendItems* _findOrCreateGroup(QString sNameP, bool bAdd); + + // 序列化后重新关联,仅仅实现与Group的绑定 + void bindItem(ZxSubLegendItem* p); + +public: + + ////////////////////////////////// + // 布局管理 + + // 重置位置,rtOuter是Plot的Inner + void resetPosBy(const QRectF& rtOuter); + + // 布局 + void onLayout(); + + // 根据子项字体和文字长度获取最小的长宽(不包括左侧) + QSizeF getAllItemWH(); + + // 如果当前bound小于w*h,则重新调整bound + // 注意:内部不能调用 setBounds + bool adjustBoundInner(QRectF& bound); + + // 如果当前bound越界,则重新调整bound + // 注意:内部不能调用 setBounds + bool adjustBoundOuter(QRectF& bound); + + // 获取高度间隔,分别:组之间、项之间(Parent, CHild) + void getIntersectH(float& fP, float& fC); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + +public: + + // 支持的分组 + void setGroupNames(QStringList& list); + void appendGroupName(QString s); + + // 位置 + int getLegendPos(); + void setLegendPos(int n); + + // 边框 + bool isFrameVisible(void) const; + void setFrameVisible(bool bIsShow); + QPen getFramePen(void); + void setFramePen(QPen o); + + // 分组标题 + QColor getGroupBackgrdClr(); + void setGroupBackgrdClr(QColor clr); + int getGroupBackgrdClrAlpha(); + void setGroupBackgrdClrAlpha(int nAlpha); + QFont getGroupTextFont(); + void setGroupTextFont(QFont ft); + QColor getGroupTextClr(); + void setGroupTextClr(QColor clr); + + // 子项背景色,所有子项的通用 + QColor getItemBackgrdClr(); + void setItemBackgrdClr(QColor clr); + int getItemBackgrdClrAlpha(); + void setItemBackgrdClrAlpha(int nAlpha); + QFont getItemTextFont(); + void setItemTextFont(QFont ft); + QColor getItemTextClr(); + void setItemTextClr(QColor clr); + + // 边界控制 + float getMarginInner(); + void setMarginInner(float f); + float getMarginOuter(); + void setMarginOuter(float f); + float getLeftWidth(); + float getGroupHeight(); + + void setAxisObjectNameX(QString s); + void setAxisObjectNameY(QString s); + QString getAxisObjectNameX(); + QString getAxisObjectNameY(); + +protected: + + // 本身tool、坐标轴关联,序列化后重新设置 + ZxSubLegendTool* m_pTool; + ZxSubAxisX* m_pAxisX; + ZxSubAxisY* m_pAxisY; + + // 分组信息 + QVector m_vecGroups; //序列化后重新设置 + QStringList m_listGrouNames; + + // 相对于全图Plot的位置 + LegendPos m_oLdPos; + + // 边框 + bool m_bFrameVisible; + QPen m_oFramePen; + + // 分组标题 + QColor m_oGroupBackgrdClr; //背景色 + QFont m_oGroupTextFont; + QColor m_oGroupTextClr; + + // 子项背景色,所有子项的通用 + QColor m_oItemBackgrdClr; + QColor m_oItemTextClr; + QFont m_oItemTextFont; + + // 边界控制 + float m_fMarginInner; //内部Margin + float m_fMarginOuter; //外部Margin + float m_fLeftWidth; //左侧符号宽度 + float m_fGroupHeight; + + float m_fRatio; //组间距/子项间距=3, 不参与序列化 + QSizeF m_szChildText; //不参与序列化,临时 + + QString m_sAxisObjectNameX; //为了序列化 + QString m_sAxisObjectNameY; + +public: + + // 选中标示,不需要序列化 + RectPos m_oHitPos; + int m_nHitIndex; + +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxSubLegendItem.h b/Include/iPlot/iPlotCurveT/ZxSubLegendItem.h new file mode 100644 index 0000000..30a651a --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxSubLegendItem.h @@ -0,0 +1,80 @@ +#pragma once + +#include +#include +#include + +#include "Defines.h" +#include "ZxRenderItem.h" +#include "iPlotCurveT_global.h" + +// 图例中的每一项 +class ZxObjCurveBase; +class I_PLOTCURVE_T_EXPORT ZxSubLegendItem : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + +public: + + ZxSubLegendItem(); + ZxSubLegendItem(ZxObjCurveBase* pCurve); + ~ZxSubLegendItem(); + +public: + + // 关联曲线 + void setCurve(ZxObjCurveBase* p); //用于序列化时,重新设定 + ZxObjCurveBase* getCurve(void); + QString getCurveName(); + + // 根据当前字体和文字以及线获取其最小的宽+高 + float getFixedWidth(); + float getFixedHeight(); + + // 刷新 + virtual void update(); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual QString getTemplPath(bool bSelf); + + // 属性页 + virtual void fillPtyPano(IxPtyPano* sheet); + + // 绘图 + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + + // 鼠标 + virtual void onLeftDoubleClick(const QPointF& pt); + virtual void onLeftClick(const QPointF& pt); + + // 获取线范围内的点 + VecPointF getDotPtsWithin(QRectF rt); + +Q_SIGNALS: + + void sigLeftDoubleClicked(const QPointF& pt); + +protected: + + // 存入曲线最原始的名字,可能与显示的不一致 + // 因为分组原因,显示的放在objectName中 + QString m_sCurveName; + + // 外界传入,本类不负责释放 + ZxObjCurveBase* m_pCurve; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxSubLegendItems.h b/Include/iPlot/iPlotCurveT/ZxSubLegendItems.h new file mode 100644 index 0000000..565e527 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxSubLegendItems.h @@ -0,0 +1,57 @@ +#pragma once + +#include "ZxSubLegendItem.h" + +// 图例中的每一组 +// 不进行序列化,由ZxSubLegend序列化之后进行重新绑定 +class I_PLOTCURVE_T_EXPORT ZxSubLegendItems + : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSubLegendItems(); + ZxSubLegendItems(QString sName); + ~ZxSubLegendItems(); + +public: + + // 本身Header范围 + void setHeaderBound(QRectF rt); + QRectF getHeaderBound(); + + // 设置载体 + void setLegend(ZxRenderItem* p); + + // 子项组织 + int indexOfItem(ZxSubLegendItem* p); + void addOneItem(ZxSubLegendItem* p); + void removeOneItem(ZxSubLegendItem* p); + + // 根据子项字体和文字长度获取最小的长宽(不包括左侧) + QSizeF getAllItemWH(); + + // 返回子项个数 + int getItemCount(); + bool isGroupEmpty(); + + // 返回子项 + ZxSubLegendItem* getItemAt(int n); + +protected: + + // 子项 + QVector m_vecItems; + + // 载体 + ZxRenderItem* m_pLegend; + + // 范围 + QRectF m_rtHeader; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxSubLegendTool.h b/Include/iPlot/iPlotCurveT/ZxSubLegendTool.h new file mode 100644 index 0000000..14d55fe --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxSubLegendTool.h @@ -0,0 +1,33 @@ +#pragma once + +#include "ZxObjRectTool.h" + +// 图例tool,从矩形框重载 +class ZxSubLegend; +class I_PLOTCURVE_T_EXPORT ZxSubLegendTool : public ZxObjRectTool +{ + Q_OBJECT + +public: + + ZxSubLegendTool(); + ~ZxSubLegendTool(); + + void setObjLegend(ZxSubLegend* p); + +public: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onRightDown(const QPointF& pt); + virtual bool onRightUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual void onPaint(QPainter* painter, + const ZxPaintParam& param); + + virtual QRectF getMovingBound(ZxRenderItem* pObj); + +protected: + + ZxSubLegend* m_pObjLegend; +}; diff --git a/Include/iPlot/iPlotCurveT/ZxSubNaviBar.h b/Include/iPlot/iPlotCurveT/ZxSubNaviBar.h new file mode 100644 index 0000000..d26c22b --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxSubNaviBar.h @@ -0,0 +1,67 @@ +#pragma once + +#include +#include + +#include "ZxDrawHelper.h" +#include "iPlotCurveT_global.h" +#include "ZxRenderItem.h" + +class IxPtyItem; + +// 导航,暂未启用 +class I_PLOTCURVE_T_EXPORT ZxSubNaviBar : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSubNaviBar(); + ZxSubNaviBar(const QString& name); + +public: + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + + virtual void onLeftClick(const QPointF& pt); + + // 名称 + QString getName(void) const; + void setName(QString name); + + // 颜色 + QColor getColor(void) const; + void setColor(QColor clr); + + // 字体 + QFont getFont(void) const; + void setFont(QFont font); + + // 字体位置 + void setFlags(int flags); + int getFlags(void); + + // 下划线 + bool isShowUnderline(void); + void showUnderline(bool bVisible); + +protected: + + QString m_sName; + QColor m_oClr; + QFont m_oFont; + int m_nFlags; + bool m_bShowUnderline; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/ZxSubTitle.h b/Include/iPlot/iPlotCurveT/ZxSubTitle.h new file mode 100644 index 0000000..8d81ab5 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/ZxSubTitle.h @@ -0,0 +1,65 @@ +#pragma once + +#include +#include + +#include "iPlotCurveT_global.h" +#include "ZxDrawHelper.h" +#include "ZxRenderItem.h" + +class IxPtyItem; + +// 图标题 +class I_PLOTCURVE_T_EXPORT ZxSubTitle : public ZxRenderItem +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + ZxSubTitle(); + ZxSubTitle(const QString& name); + + virtual void paintBack(QPainter* painter, const ZxPaintParam& param); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 名称 + QString getName(void) const; + void setName(QString name); + + // 颜色 + QColor getColor(void) const; + void setColor(QColor clr); + + // 字体 + QFont getFont(void) const; + void setFont(QFont font); + + // 字体位置 + void setFlags(int flags); + int getFlags(void); + + // 下划线 + bool isShowUnderline(void); + void showUnderline(bool bVisible); + +protected: + + QString m_sName; + QColor m_oClr; + QFont m_oFont; + int m_nFlags; + bool m_bShowUnderline; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/iPlotCurveT_global.h b/Include/iPlot/iPlotCurveT/iPlotCurveT_global.h new file mode 100644 index 0000000..9538c35 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/iPlotCurveT_global.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#if defined(I_PLOTCURVE_T_LIBRARY) +# define I_PLOTCURVE_T_EXPORT Q_DECL_EXPORT +#else +# define I_PLOTCURVE_T_EXPORT Q_DECL_IMPORT +#endif + + + + + + diff --git a/Include/iPlot/iPlotCurveT/tCurvePlotScene.h b/Include/iPlot/iPlotCurveT/tCurvePlotScene.h new file mode 100644 index 0000000..6f08e95 --- /dev/null +++ b/Include/iPlot/iPlotCurveT/tCurvePlotScene.h @@ -0,0 +1,118 @@ +#pragma once + +#include +#include "ZxSceneItem.h" +#include "ZxSerializer.h" +#include "ZxPlot.h" + +#include "iPlotCurveT_global.h" + +class ZxPlotBase; +class ZxRenderView; + +// 图表场景 +class I_PLOTCURVE_T_EXPORT tCurvePlotScene + : public ZxSceneItem + , public IxDeserialized +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + tCurvePlotScene(); + + // 初始化 + virtual void init(ZxRenderView* pView, QString sTitle, \ + QSize szDefault = QSize(265, 203)); + virtual void initMembers(ZxRenderView* pView, QString sTitle); + virtual void resetLayouts(QSize szDefault); + + virtual void setBoundEx(int l, int t, int w, int h); + + //void doLayout(); + + virtual void freshToPlot(ZxPlot* pPlot, ZxRenderView* pView); + +public: + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onDeserialized(); + +public slots: + + // 放大/缩小 + virtual void slotZoomRectIn(); + virtual void slotZoomRectOut(); + + virtual void slotZoomRectInH(); + virtual void slotZoomRectInV(); + virtual void slotZoomRectOutH(); + virtual void slotZoomRectOutV(); + + // 移动 + virtual void slotMove(); + + // 复位 + virtual void slotReset(); + + // 选择模式 + virtual void slotHitPoint(); + virtual void slotSelectPoint(); + virtual void slotSelectRect(); + virtual void slotSelect(); + virtual void slotSelectMulti(); + virtual void slotResetRect(); + + // 删除 + virtual void slotErasePoint(); + virtual void slotEraseRect(); + + // 删除 + virtual void slotDelete(); + + // 排除 + virtual void slotExcludePoint(); + virtual void slotExcludeRect(); + + // 插入各种对象 + virtual void slotInsertPolygon(); + virtual void slotInsertCurveFree(); + virtual void slotInsertLine(); + virtual void slotInsertRect(); + virtual void slotInsertText(); + virtual void slotInsertImage(); + virtual void slotInsertBandV(); + virtual void slotInsertBandH(); + + // 显示相关信息 +// virtual void slotShowTip(); +// virtual void slotShowLine(); + + // 具体执行函数 + virtual void slotDoOperate(int nOpType); + + // 保存位图 +// virtual void slotSaveBmp(); + +protected: + + // 更新工具条按钮 + virtual void updateBtns(); + virtual void changeCursor(int nOpType); + +signals: + + void sigUpdateBtns(); + +protected: + +public: + + ZxPlot* m_pPlot; +}; + + + + diff --git a/Include/iPlot/iPlotCurveT/tCurvePlotView.h b/Include/iPlot/iPlotCurveT/tCurvePlotView.h new file mode 100644 index 0000000..2a3b65e --- /dev/null +++ b/Include/iPlot/iPlotCurveT/tCurvePlotView.h @@ -0,0 +1,78 @@ +#pragma once + +#include "ZxRenderView.h" +#include "tCurvePlotScene.h" + +#include "iPlotCurveT_global.h" + +// 图视图 +class I_PLOTCURVE_T_EXPORT tCurvePlotView + : public ZxRenderView +{ + Q_OBJECT + + ZX_DECLARE_DYNAMIC + +public: + + tCurvePlotView(); + +public: + + // 获取Scene,仅仅类型转换 + tCurvePlotScene* getScene() const; + + virtual QRectF adjustRectFitViewAspect(const QRectF& rect); + + + // 准备右键菜单 + virtual void onPrepareContextMenu(QMenu* pMenu, + const QPointF& pos); + + // 图示简易模式(不显示缩放、不有滚动条) + virtual void setSimpleMode(bool bSimpleMode); + +public slots: + + virtual void slotSaveAsImg(); + virtual void slotCopyAsImg(); + + virtual void slotUndo(); + virtual void slotRedo(); + +public: + +signals: + + // 由于本来不依赖数据对象,所有通过信号槽关联出去 + void sigCheckDragAccepted(QDragEnterEvent*, bool&); + void sigDealwithDrop(QDropEvent*); + void sigMousePosChanged(const QPointF &pos); + + // 获取额外的tips,比如 探测半径 + void sigGetTipsExOfPos(QString& sTip, float fX, float fY); + + // 状态栏 + void sigFresh2Status(QString& s); + +protected: + + /// @brief 拖拽支持 + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent* event); + void mouseMoveEvent(QMouseEvent* e); + + void focusOutEvent(QFocusEvent *); + void leaveEvent(QEvent *); + +protected: + + bool m_bSimpleMode; //是否简易模式 + + // 拖拽模式 + bool m_bDraging; + }; + + + + diff --git a/Include/iPlot/iPlotWxT/iPlotBaseWxT.h b/Include/iPlot/iPlotWxT/iPlotBaseWxT.h new file mode 100644 index 0000000..3370ba2 --- /dev/null +++ b/Include/iPlot/iPlotWxT/iPlotBaseWxT.h @@ -0,0 +1,114 @@ +#pragma once + +#include "Defines.h" + +#include "IxSerDes.h" +#include "ZxXpf.h" +#include "ZxSerializer.h" +#include "iPlotWxT_global.h" + +class tCurvePlotScene; +class tCurvePlotView; +class ZxPlot; +class ZxObjCurve; +class tCurveObjFlow; +class ZxSubAxisBase; +class ZxObjCurveBase; + +// 这是最基础的绘图窗体 +class I_PLOTWX_T_EXPORT iPlotBaseWxT : public QWidget, + virtual public IxSerDes +{ + Q_OBJECT + +public: + explicit iPlotBaseWxT(QWidget *parent = 0); + ~iPlotBaseWxT(); + + // 初始化UI + virtual void initUI(QString sTitle, + QSize szDefault = QSize(265, 203)); + + virtual void clearAllPlots(); + +public: + + // 坐标轴相关设置 + virtual void setAxisX(QString sName, QString sUnit = ""); + virtual void setAxisY(QString sName, QString sUnit = "", bool bY2 = false); + virtual void setAxisXY(int nIndexXY, QString sName, QString sUnit = ""); + virtual void setAxisScaleX(float fMin, float fMax, VecFloat& vecTicks); + virtual void setAxisScaleY(float fMin, float fMax, VecFloat& vecTicks); + virtual void setAxisScaleY2(float fMin, float fMax, VecFloat& vecTicks); + virtual void setAxisScaleXY(int nIndexXY, float& fMin, float& fMax, VecFloat& vecTicks); + virtual void setAxisXYLog(bool bLogAxis, int nIndexXY); + + // nIndexXY:0 x轴,1 左侧y轴,2 右侧y轴 + ZxSubAxisBase* getAxisOf(int nIndexXY); + void copyAxisScalesTo(iPlotBaseWxT* pDest, int nIndexXY = -1); + + // 设置x轴的基准时间 + void setAxisBaseDtX(QDateTime dt); + QDateTime getAxisBaseDtX() const; + + virtual void connectSignals(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void resetAfterDeserialized(); + +protected: + + virtual void initChartView(QString sTitle, QSize szDefault); + virtual void resizeEvent(QResizeEvent *); + virtual void paintEvent(QPaintEvent *); + // 窗体关闭的情形 + virtual void closeEvent(QCloseEvent *); + + // 处理Resize,主要是正方形网格 + bool changeToSize(QSize sz, bool bResizeMode); + +public slots: + + virtual void slotChangeSizeWithChangedXY(); + + // 缩放复原 + virtual void zoomReset(); + +signals: + void sigZoomReset(); + + // 在关闭的消息函数中触发 + void sigConfirmClosing(bool& bClosable); + +public: + + // 内部变量 + tCurvePlotView* m_pPlotView; + tCurvePlotScene* m_pPlotScene; + ZxPlot* m_pPlot; + +protected: + + QLayout* m_pMainLayout; + + // 记录各坐标轴原始状态 + // 为了回归原始 + float m_fMaxX; + float m_fMinX; + float m_fMaxY; + float m_fMinY; + float m_fMaxY2; + float m_fMinY2; + VecFloat m_vecTicksX; + VecFloat m_vecTicksY; + VecFloat m_vecTicksY2; + + // 信号槽标识开关 + bool m_bUnableSP; + + // 是否启用新的样式表,ZXF202407 + bool m_bNovelQss; +}; + diff --git a/Include/iPlot/iPlotWxT/iPlotCurveWxT.h b/Include/iPlot/iPlotWxT/iPlotCurveWxT.h new file mode 100644 index 0000000..b133fd9 --- /dev/null +++ b/Include/iPlot/iPlotWxT/iPlotCurveWxT.h @@ -0,0 +1,60 @@ +#pragma once + +#include "ZxDot.h" +#include "iPlotBaseWxT.h" +#include "ZxDrawHelper.h" + +// 曲线类绘图窗体 +class I_PLOTWX_T_EXPORT iPlotCurveWxT : public iPlotBaseWxT +{ + Q_OBJECT + +public: + + explicit iPlotCurveWxT(QWidget* parent = 0); + ~iPlotCurveWxT(); + + // 初始化UI + virtual void initUI(QString sTitle, + QSize szDefault = QSize(265, 203)); + + // 关联信号 + virtual void connectSignals(); + + // 清空 + virtual void clearAllPlots(); + + // 设置数据 + // 分别对应 压力P 离散D 流量F + virtual ZxObjCurve* appendSeriesF(VecFloat x, VecFloat y, + QString sName, + bool bUseY2 = false); + virtual ZxObjCurve* appendSeriesD(VecFloat x, VecFloat y, + QString sName, + bool bUseY2 = false); + virtual ZxObjCurve* appendSeriesP(VecFloat x, VecFloat y, + QString sName, + bool bUseY2 = false); + + // 设置画笔相关 + void setPenAndDot(ZxObjCurve* pCurve, bool bLineVisible); + void setPenAndDot(ZxObjCurve* pCurve, bool bLineVisible, \ + QPen oPen, ZxDot oDot); + + // 把曲线添加或新建后,刷新坐标轴 + virtual void freshAxisScales(bool bReset = true, bool bMinusPermitted = true); + virtual void freshAxisYScales(bool bReset = true); + +protected: + + // resize and parint + virtual void resizeEvent(QResizeEvent *); + virtual void paintEvent(QPaintEvent *); + +public slots: + + // 右键响应 + virtual void slotShowCurveData(ZxObjCurveBase*); + +}; + diff --git a/Include/iPlot/iPlotWxT/iPlotMapWxT.h b/Include/iPlot/iPlotWxT/iPlotMapWxT.h new file mode 100644 index 0000000..4256cae --- /dev/null +++ b/Include/iPlot/iPlotWxT/iPlotMapWxT.h @@ -0,0 +1,36 @@ +#pragma once + +#include "iPlotBaseWxT.h" + +// 井位图类绘图窗体 +class I_PLOTWX_T_EXPORT iPlotMapWxT : public iPlotBaseWxT +{ + Q_OBJECT + +public: + explicit iPlotMapWxT(QWidget *parent = 0); + ~iPlotMapWxT(); + + // 初始化UI + virtual void initUI(QString sTitle, + QSize szDefault = QSize(265, 203)); + + // 关联信号 + virtual void connectSignals(); + + // 清空 + virtual void clearAllPlots(); + +protected: + + // resize and parint + virtual void resizeEvent(QResizeEvent *); + virtual void paintEvent(QPaintEvent *); + +public slots: + + // 右键响应 + virtual void slotShowCurveData(ZxObjCurveBase*); + +}; + diff --git a/Include/iPlot/iPlotWxT/iPlotWxT_global.h b/Include/iPlot/iPlotWxT/iPlotWxT_global.h new file mode 100644 index 0000000..1f4c6a6 --- /dev/null +++ b/Include/iPlot/iPlotWxT/iPlotWxT_global.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +#if defined(I_PLOTWX_T_LIBRARY) +# define I_PLOTWX_T_EXPORT Q_DECL_EXPORT +#else +# define I_PLOTWX_T_EXPORT Q_DECL_IMPORT +#endif + + + + + diff --git a/Include/mData/mModuleDefines/iDataTypes.h b/Include/mData/mModuleDefines/iDataTypes.h new file mode 100644 index 0000000..3235916 --- /dev/null +++ b/Include/mData/mModuleDefines/iDataTypes.h @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "iDataEngine_global.h" + +#define sTableDemoTest ("TableName_DemoTest") + +namespace iDataModelType +{ + // 数据模型类型定义 + const QString sTypeProject = "zx_Project"; + const QString sTypeWell = "zx_Well"; + const QString sTypeLayer = "zx_Layer"; + const QString sTypeDataRes = "zx_DataRes"; + const QString sTypeDataFluid = "zx_DataFluid"; + const QString sTypeDataGas = "zx_DataGas"; + const QString sTypeDataGaugeF = "zx_DataGaugeF"; + const QString sTypeDataGaugeP = "zx_DataGaugeP"; + const QString sTypeDataGaugeT = "zx_DataGaugeT"; + const QString sTypeDataOther = "zx_DataOther"; + const QString sTypeJobInfo = "zx_JobInfo"; + const QString sTypeJobRun = "zx_JobRun"; + + const QString sTypePvtInfo = "zx_PvtInfo"; + const QString sTypePvtData = "zx_PvtData"; + + const QString sTypePerson = "zx_Person"; + const QString sTypeCustom = "zx_Custom"; + + const QString sTypeRstPureData = "zx_RstPureData"; + const QString sTypeRstRun = "zx_RstRun"; + const QString sTypeRstSeg = "zx_RstSeg"; +// const QString sTypeRstSubData = "zx_RstSubData"; + const QString sTypeRstUtils = "zx_RstUtils"; + const QString sTypeRstWnd = "zx_RstWnd"; + + const QString sTypeSketch = "zx_Sketch"; + + // 增加数值试井部分 + const QString sTypeNumDataDemo = "zx_NumDataDemo"; + + const QString sTypeInvalid = "zx_Invalid"; +} diff --git a/Include/mData/mModuleDefines/mModuleDefines.h b/Include/mData/mModuleDefines/mModuleDefines.h new file mode 100644 index 0000000..ce7ef9f --- /dev/null +++ b/Include/mData/mModuleDefines/mModuleDefines.h @@ -0,0 +1,280 @@ + +#pragma once + +#include "Defines.h" + +/// @brief 存放应用模块(比如WTAI)的定义内容 + +///////////////////////////////////////// +// defines +///////////////////////////////////////// + +// 工区所在路径,相对路径 +#define s_Dir_WorkArea "TestOfWTAI" + +#ifdef _SCAN_OLD_CODE_ +// 新建标识(很久之前的处理方式,目前已经屏蔽该功能) +#define s_Tag_NewTab QObject::tr("New") +#endif + +// 新建SubWnd +#define s_Tag_NewWnd QObject::tr("New sub wnd") + +// 最近处理的模型 +#define s_Tag_RecentModels "recentModels" + +// 此处应该与XML配置对应,目前只是临时处理方式 +#define s_Tag_Wnd_Anal QStringCH("流动段选择") +#define s_Tag_Wnd_Fitting QStringCH("流动段分析") + +// 首页面涉及到的一些配置信息 +#define s_Tag_RecentNum "RecentNum" +#define s_Tag_MaxRs "MaxRs" +#define s_Tag_MaxCl "MaxCl" +#define s_Tag_SortBy "SortBy" + +// 自动拟合界面参数 +#define s_Tag_FA_Method "FaMethod" +#define s_Tag_FA_LoopMax "FaLoopMax" +#define s_Tag_FA_ErrorMax "FaErrorMax" +#define s_Tag_FA_Weight "FaWeight" + +// 单相多相标识 +#define s_Tag_Phase_S QObject::tr("Single phase") +#define s_Tag_Phase_M QObject::tr("Multiphase") +#define s_Tag_Phase_PS3 QObject::tr("Pseu3Contained") + +// 历史曲线 +#define s_Tag_HIST_PF "HistPF" + +// IPR +#define s_Tag_IPR_EN "IPR" +#define s_Tag_IPR_CN QObject::tr("Inflow Performance Relationship") + +// 小型压裂 +#define s_Tag_MiniFr_EN "MiniFr" +#define s_Tag_MiniFr_CN QObject::tr("Mini Frac Model") + +#define s_Key_MiniFrac_In QObject::tr("DataInput") +#define s_Key_MiniFrac_Curve QObject::tr("CurveData") +#define s_Key_MiniFrac_Out QObject::tr("DataRst") + +// 模型Key +#define s_Key_Wbs QObject::tr("Wbs") +#define s_Key_Wel QObject::tr("Wel") +#define s_Key_Res QObject::tr("Res") +#define s_Key_Bdy QObject::tr("Bdy") + +// 模型窗口涉及的部分 +#define s_Key_ModelOption QObject::tr("ModelOption") +#define s_Key_ModelParameter QObject::tr("ModelParameter") +#define s_Key_WellBasic QObject::tr("WellBasic") +#define s_Key_WellRes QObject::tr("WellRes") +#define s_Key_WellFluid QObject::tr("WellFluid") + +// 聚合物相关 +#define s_Key_PF_Normal QObject::tr("Normal") +#define s_Key_PF_Interference QObject::tr("Interference") +#define s_Key_PF_FractuWell QObject::tr("FractuWell") +#define s_Key_PF_NormalEn "Normal" +#define s_Key_PF_InterferenceEn "Interference" +#define s_Key_PF_FractuWellEn "FractuWell" + +// 模型开关(启动压力梯度、动态渗透率、小信号、应力敏感 +#define s_Key_PressGrad QObject::tr("PressGrad") +#define s_Key_DynamicK QObject::tr("DynamicK") +#define s_Key_SmallSignal QObject::tr("SmallSignal") +#define s_Key_StressSensitive QObject::tr("StressSensitive") + +#define s_Key_UseOrNot QObject::tr("UseOrNot options") + +// 时间格式(流量/压力) +#define s_Value_FromStart QObject::tr("Value (FromStart)") +#define s_Value_Duration QObject::tr("Value (Duration)") +#define s_Real_Time QObject::tr("RealTime") +#define s_Real_DateTime QObject::tr("RealDateTime") +#define s_Real_Date QObject::tr("RealDate") + +// 井间距离,干扰时使用 +#define s_Inter_Well_Dis "wellDis" + +// 坐标轴等相关标识 +#define s_Tag_Date_EN "Date" +#define s_Tag_Time_EN "Time" +#define s_Tag_DateTime_EN "DateTime" +#define s_Tag_Date_CN QObject::tr("Date") +#define s_Tag_Time_CN QObject::tr("Time") +#define s_Tag_DateTime_CN QObject::tr("DateTime") + +#define s_Tag_Pressure_EN "Pressure" +#define s_Tag_FlowRate_EN "FlowRate" +#define s_Tag_Pressure_CN QObject::tr("Pressure") +#define s_Tag_Pressure_CN_Avg QObject::tr("AvgP") +#define s_Tag_FlowRate_CN QObject::tr("FlowRate") + +#define s_Tag_ProdOil_EN "ProdOil" +#define s_Tag_ProdOil_CN QObject::tr("ProdOil") +#define s_Tag_ProdGas_EN "ProdGas" +#define s_Tag_ProdGas_CN QObject::tr("ProdGas") +#define s_Tag_ProdWater_EN "ProdWater" +#define s_Tag_ProdWater_CN QObject::tr("ProdWater") + +#define s_Tag_PressurePse_CN QObject::tr("PseudoPressure") //拟压力 + +#define s_Axis_NameX s_Tag_Time_CN +#define s_Axis_NameY_P s_Tag_Pressure_CN +#define s_Axis_NameY_PGas s_Tag_PressurePse_CN +#define s_Axis_NameY_F s_Tag_FlowRate_CN + +#define s_Axis_NameX_R QObject::tr("Radius") +#define s_Axis_NameY_Vis QObject::tr("Vis") +#define s_Axis_NameY_Den QObject::tr("Den") + +#define s_Tag_Other_EN "Other" +#define s_Tag_Other_CN QObject::tr("Other") + +// 数据加载 +#define s_Format_Date "yyyy-MM-dd" +#define s_Format_Time "hh:mm:ss" +#define s_Format_DateTime "yyyy-MM-dd hh:mm:ss" + +// 文件格式 +#define s_Test_Src_File_Exts QObject::tr("All supported files(*.txt *.dat *.rec *.xls *.xlsx *.csv);;Test text file(*.txt);;Test dat file(*.dat);;Test dat file(*.rec);;Excel file(*.xlsx);;Excel 97-2003 file(*.xls);;csv file(*.csv);;All file(*.*)") +#define s_Test_Src_Db_Exts QObject::tr("Sqlite Database File(*.db)") +#define s_Test_Src_mDb_Exts QObject::tr("Sqlite Database File(*.mdb)") + +// IPR相关定义 +#define s_Tag_Eq_Psquare QStringCH("压力平方") +#define s_Tag_Eq_PPse QStringCH("拟压力(含三区拟压力)") + +// 从iToolPreCon移植过来 +#define s_PreInput_Structure QObject::tr("Structure") +#define s_PreInput_Contraction QObject::tr("ContractionStructure") +#define s_PreInput_Expansion QObject::tr("ExpansionStructure") +#define s_PreInput_CloseWellDynSurface QObject::tr("CloseWellDynSurface") + +#define s_Pre_Next QObject::tr("Next") +#define s_Pre_Prev QObject::tr("Prev") +#define s_Pre_Run QObject::tr("Run") +#define s_Pre_SaveFile QObject::tr("SaveFile") +#define s_Pre_LoadFile QObject::tr("LoadFile") + +#define s_Pre_WellHeadPressure QObject::tr("WellHeadPressure") +#define s_Pre_BottomHolePressure QObject::tr("BottomHolePressure") + +// 其他 +#define s_Field_FieldName "FieldName" +#define s_Field_BlockName "BlockName" + +// 拖拽之DOM格式 +#define s_MimeData_Text "text/uri-list" +#define s_MimeData_Abstract "application/x-qabstractitemmodeldatalist" + +// 数据连接标识 +#define s_Conn_DbStrTemp "ConnDbBaseStrTemp" + +///////////////////////////////////////// +// enums +///////////////////////////////////////// + +enum MainWindowOption +{ + MWO_MPA = 0, //MPA + MWO_WTAI, //iWelltestStar + MWO_WellTestStar, //iWelltestStar + MWO_GasCondensate, //iGasCondensateWT + MWO_Unknown +}; + +// 测试类型 +enum PvtTestType +{ + PTT_Standard = 0, //标准类型 + PTT_Interfere, //干扰试井 + PTT_MiniFrac, //小型压裂 + PTT_Unknown +}; + +// 左侧工区树 +enum DockTreeMode +{ + DTM_Da = 0, //数据 + DTM_Jb, //Jobs + DTM_Rs, //成果 + DTM_Unknown +}; + +// 成果对比中,每一项参与对比的类型对应 +enum ContentCpType +{ + CCT_DbLogRaw = 0, // + CCT_DbLogFit, // + CCT_Model, // + CCT_Parameters, // + + CCT_HalfLog, // + CCT_History, // + + CCT_Pressure, // + CCT_Rate, // + + CCT_WellBasic, // + CCT_Fluid, // + CCT_Res, // + + CCT_Unknown +}; + +// 项目树节点类型 +enum MainTreeNodeType +{ + MNT_Top = 0, //全局 + + MNT_Field, //油田 + MNT_Block, //区块 + MNT_Well, //井 + + MNT_Series, //Series + + MNT_Rs, //Rs + MNT_Rs_Child, //Rs具体成果 + + MNT_Jb, //Job + + MNT_DataWell, //WellData + MNT_DataAll, //AllData + MNT_Data_Child, //WellData或AllData的具体分类 + + MNT_PF, //PF + MNT_PF_Child, //PF具体分类 + + MNT_UNKNOWN +}; + +// 项目树节点操作命令类型 +enum TreeNodeCmd +{ + TNC_Scan = 0, //浏览该节点对应的信息,如数据表、图表,与拖拽类似 + TNC_Edit, //弹出对话框,编辑模式,针对后台数据库操作 + TNC_New, //新建 + TNC_Rename, //重命名 + TNC_Del, //删除 + + TNC_SaveRs, //保存Job + + TNC_ManageJb, //JobManager + TNC_DefaultJb, //设为默认Job + TNC_SaveJb, //保存Job + + TNC_RstFit, //Rst Fit + TNC_RstCp, //Rst Compare + + TNC_UNKNOWN +}; + +///////////////////////////////////////// +// macros +///////////////////////////////////////// + +#define zxFillDefaultOfPara zxSysUtils::getInstance()->loadAndFillWithDefault +#define zxCurJobRun dynamic_cast(zxSysUtils::getCurJobRun()) diff --git a/Include/mData/mProjectManager/DataModels/ZxAllDataObjects.h b/Include/mData/mProjectManager/DataModels/ZxAllDataObjects.h new file mode 100644 index 0000000..2df3f5f --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxAllDataObjects.h @@ -0,0 +1,5 @@ +#pragma once + +#include "ZxDataProject.h" +#include "ZxDataWell.h" +#include "ZxDataSketch.h" diff --git a/Include/mData/mProjectManager/DataModels/ZxDataFluid.h b/Include/mData/mProjectManager/DataModels/ZxDataFluid.h new file mode 100644 index 0000000..6f3b4ea --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataFluid.h @@ -0,0 +1,108 @@ +#pragma once + +#include "ZxDataObjectDbl.h" + +// 流体 +class M_PROJECTMANAGER_EXPORT ZxDataFluid + : public ZxDataObjectDbl +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataFluid(); + ZxDataFluid(const ZxDataFluid &other); + virtual ~ZxDataFluid(); + + ZxDataFluid &operator = (const ZxDataFluid &other); + bool operator == (const ZxDataFluid &other) const; + bool operator != (const ZxDataFluid &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + +// // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + virtual void setCode(const QString &sCode); + virtual void setName(const QString &sName); + + void setWellCode(const QString& sWellCode); + QString getWellCode() const; + + void setGOR(const float& fGOR); + float getGOR() const; + + void setOilCF(const float& fOilCF); + float getOilCF() const; + + void setOilVF(const float& fOilVF); + float getOilVF() const; + + void setOilVisc(const float& fOilVisc); + float getOilVisc() const; + + void setOilDens(const float& fOilDens); + float getOilDens() const; + + void setGasDevif (const float& fGasDeviF); + float getGasDevif () const; + + void setGasVisc(const float& fGasVisc); + float getGasVisc() const; + + void setGasVF(const float& fGasVF); + float getGasVF() const; + + void setGasDens(const float& fGasDens); + float getGasDens() const; + + void setWaterCF(const float &fwaterCF); + float getWaterCF()const; + + void setWaterVF(const float &fWaterVF); + float getWaterVF()const; + + void setWaterVisc(const float &fWaterVisc); + float getWaterVisc()const; + + void setWaterDens(const float &fWaterDens); + float getWaterDens()const; + + void setRemark(const QString &sRemark); + QString getRemark()const; + +protected: + //QString m_sID; //流体ID号 + QString m_sWellCode; //井号 + float m_fGOR; //气油比 + float m_fOilCF; + float m_fOilVF; + float m_fOilVisc; + float m_fOilDens; + float m_fGasDeviF; + float m_fGasVisc; + float m_fGasVF; + float m_fGasDens; + float m_fWaterCF; + float m_fWaterVF; + float m_fWaterVisc; + float m_fWaterDens; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataGas.h b/Include/mData/mProjectManager/DataModels/ZxDataGas.h new file mode 100644 index 0000000..305295b --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataGas.h @@ -0,0 +1,113 @@ +#pragma once + +#include "ZxDataObjectDbl.h" + +// 气 +class M_PROJECTMANAGER_EXPORT ZxDataGas + : public ZxDataObjectDbl +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataGas(); + ZxDataGas(const ZxDataGas &other); + virtual ~ZxDataGas(); + + ZxDataGas &operator = (const ZxDataGas &other); + bool operator == (const ZxDataGas &other) const; + bool operator != (const ZxDataGas &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + virtual void setCode(const QString &sCode); + virtual void setName(const QString &sName); + + void setWellCode(const QString& sWellCode); + QString getWellCode() const; + + void setC1(const float& fC1); + float getC1() const; + + void setC2(const float& fC2); + float getC2() const; + + void setC3(const float& fC3); + float getC3() const; + + void setiC4(const float& fiC4); + float getiC4() const; + + void setnC4(const float& fnC4); + float getnC4() const; + + void setiC5(const float& fiC5); + float getiC5() const; + + void setnC5(const float& fnC5); + float getnC5() const; + + void setC6(const float& fC6); + float getC6() const; + + void setC7(const float& fC7); + float getC7() const; + + void setC02(const float &fC02); + float getC02() const; + + void setN2(const float &fN2); + float getN2() const; + + void setH2S(const float &fH2S); + float getH2S() const; + + void setTempHc(const float &fTempHc); + float getTempHc() const; + + void setDens(const float &fDens); + float getDens() const; + + void setRelativeDens(const float &fRelativeDens); + float getRelativeDens() const; + +protected: + //QString m_sID; //流体ID号 + QString m_sWellCode; //井号 + float m_fC1; + float m_fC2; + float m_fC3; + float m_fiC4; + float m_fnC4; + float m_fiC5; + float m_fnC5; + float m_fC6; + float m_fC7; + float m_fC02; + float m_fN2; + float m_fH2S; + float m_fTempHc; + float m_fDens; + float m_fRelativeDens; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataGaugeBase.h b/Include/mData/mProjectManager/DataModels/ZxDataGaugeBase.h new file mode 100644 index 0000000..f04c0e8 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataGaugeBase.h @@ -0,0 +1,84 @@ +#pragma once + +#include "ZxDataObjectStrUser.h" + +// 测量类数据(基类) +class M_PROJECTMANAGER_EXPORT ZxDataGaugeBase + : public ZxDataObjectStrUser +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataGaugeBase(); + ZxDataGaugeBase(const ZxDataGaugeBase &other); + virtual ~ZxDataGaugeBase(); + + ZxDataGaugeBase &operator = (const ZxDataGaugeBase &other); + bool operator == (const ZxDataGaugeBase &other) const; + bool operator != (const ZxDataGaugeBase &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + //virtual QIcon getIcon(bool expanded) const; + + // 返回数据,该函数支持2,3,4维,修正,对于流量(油气水亦支持) + // 对于流量,indexObj分别对应0,油,1,气,2 水 + virtual bool getDataVecXY(VecFloat& vecX, VecFloat& vecY, int indexObj = 0); + virtual bool getDataVVecXY(VVecFloat& vecXY, int indexObj = 0); + virtual QByteArray getGaugeDataOf(int indexObj = 0) const; + virtual void setGaugeDataOf(const QByteArray& ba, int indexObj = 0); + + // 返回PointF + //bool getDataVecPoints(QVector& vec); + +public: + + virtual void setCode(const QString &sCode); + virtual void setName(const QString &sName); + + void setWellCode(const QString& sWellCode); + QString getWellCode() const; + + void setTimeFormat(const QString& sTimeFormat); + QString getTimeFormat() const; + + void setGaugeTime(const QString& sGaugeTime); + QString getGaugeTime() const; + + void setGaugeData(const QByteArray& byteGaugeData); + QByteArray getGaugeData() const; + + void setGaugeName(const QString& s); + QString getGaugeName() const; + + bool isPressure() { return m_bPressure; } + +protected: + + //QString m_sID; + QString m_sWellCode; + QString m_sTimeFormat; + QString m_sGaugeTime; + QByteArray m_byteGaugeData; + QString m_sGaugeName; + + bool m_bPressure; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataGaugeF.h b/Include/mData/mProjectManager/DataModels/ZxDataGaugeF.h new file mode 100644 index 0000000..f0db0c0 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataGaugeF.h @@ -0,0 +1,64 @@ +#pragma once + +#include "ZxDataGaugeBase.h" + +// 测量类数据(流量) +class M_PROJECTMANAGER_EXPORT ZxDataGaugeF + : public ZxDataGaugeBase +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataGaugeF(); + ZxDataGaugeF(const ZxDataGaugeF &other); + virtual ~ZxDataGaugeF(); + + ZxDataGaugeF &operator = (const ZxDataGaugeF &other); + bool operator == (const ZxDataGaugeF &other) const; + bool operator != (const ZxDataGaugeF &other) const; + +public: + + // 返回数据,该函数支持2,3,4维,修正,对于流量(油气水亦支持) + // 对于流量,indexObj分别对应0,油,1,气,2 水 + virtual QByteArray getGaugeDataOf(int indexObj = 0) const; + virtual void setGaugeDataOf(const QByteArray& ba, int indexObj = 0); + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + void setGaugeDataEx2(const QByteArray& ba); + QByteArray getGaugeDataEx2() const; + void setGaugeDataEx3(const QByteArray& ba); + QByteArray getGaugeDataEx3() const; + + void setMultiPhase(const bool& b); + bool getMultiPhase() const; + void setStepTypeFw(const bool& b); + bool getStepTypeFw() const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // Icon + virtual QIcon getIcon(bool expanded) const; + + QByteArray m_byteGaugeDataEx2; + QByteArray m_byteGaugeDataEx3; + + bool m_bMultiPhase; + bool m_bStepTypeFw; //是否前阶梯 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataGaugeP.h b/Include/mData/mProjectManager/DataModels/ZxDataGaugeP.h new file mode 100644 index 0000000..af245c1 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataGaugeP.h @@ -0,0 +1,33 @@ +#pragma once + +#include "ZxDataGaugeBase.h" + +// 测量类数据(压力) +class M_PROJECTMANAGER_EXPORT ZxDataGaugeP + : public ZxDataGaugeBase +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataGaugeP(); + ZxDataGaugeP(const ZxDataGaugeP &other); + virtual ~ZxDataGaugeP(); + + ZxDataGaugeP &operator = (const ZxDataGaugeP &other); + bool operator == (const ZxDataGaugeP &other) const; + bool operator != (const ZxDataGaugeP &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // Icon + virtual QIcon getIcon(bool expanded) const; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataGaugeT.h b/Include/mData/mProjectManager/DataModels/ZxDataGaugeT.h new file mode 100644 index 0000000..5ff4714 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataGaugeT.h @@ -0,0 +1,33 @@ +#pragma once + +#include "ZxDataGaugeBase.h" + +// 测量类数据(温度) +class M_PROJECTMANAGER_EXPORT ZxDataGaugeT + : public ZxDataGaugeBase +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataGaugeT(); + ZxDataGaugeT(const ZxDataGaugeT &other); + virtual ~ZxDataGaugeT(); + + ZxDataGaugeT &operator = (const ZxDataGaugeT &other); + bool operator == (const ZxDataGaugeT &other) const; + bool operator != (const ZxDataGaugeT &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // Icon + virtual QIcon getIcon(bool expanded) const; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataJobInfo.h b/Include/mData/mProjectManager/DataModels/ZxDataJobInfo.h new file mode 100644 index 0000000..5275ea6 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataJobInfo.h @@ -0,0 +1,71 @@ +#pragma once + +#include "ZxDataObjectStrUser.h" + +// JobInfo +class M_PROJECTMANAGER_EXPORT ZxDataJobInfo + : public ZxDataObjectStrUser +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataJobInfo(); + ZxDataJobInfo(const ZxDataJobInfo &other); + virtual ~ZxDataJobInfo(); + + ZxDataJobInfo &operator = (const ZxDataJobInfo &other); + bool operator == (const ZxDataJobInfo &other) const; + bool operator != (const ZxDataJobInfo &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + +// // 作业ID +// void setJobID(const QString& sJobID); +// QString getJobID() const; + + // 井号 + void setWellCode(const QString& sWellCode); + QString getWellCode() const; + +// // 作业标题 +// void setJobTitle(const QString& sJobTitle); +// QString getJobTitle() const; + + // 作业类型 + void setJobType(const QString& sJobType); + QString getJobType() const; + + // 作业描述 + void setJobDesc(const QString& sJobDesc); + QString getJobDesc() const; + +protected: + +// QString m_sJobID; //作用编码 + QString m_sWellCode; //井编码 +// QString m_sJobTitle; //作业标题 + QString m_sJobType; //作业版本号 + QString m_sJobDesc; //作业描述 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataJobRun.h b/Include/mData/mProjectManager/DataModels/ZxDataJobRun.h new file mode 100644 index 0000000..477c7cc --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataJobRun.h @@ -0,0 +1,67 @@ +#pragma once + +#include "ZxDataObjectBin.h" + +// JobInfo +class M_PROJECTMANAGER_EXPORT ZxDataJobRun + : public ZxDataObjectBin +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataJobRun(); + ZxDataJobRun(const ZxDataJobRun &other); + virtual ~ZxDataJobRun(); + + ZxDataJobRun &operator = (const ZxDataJobRun &other); + bool operator == (const ZxDataJobRun &other) const; + bool operator != (const ZxDataJobRun &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + +// // 作业ID +// void setJobID(const QString& sJobID); +// QString getJobID() const; + + void setDataBasic(const QByteArray& v); + QByteArray getDataBasic() const; + + void setDataFluid(const QByteArray& v); + QByteArray getDataFluid() const; + + void setDataGasConst(const QByteArray& v); + QByteArray getDataGasConst() const; + +protected: + +// QString m_sJobID; //作用编码 + + // 分别对应五个对话框中的数据 + QByteArray m_byteDataBasic; + QByteArray m_byteDataFluid; + QByteArray m_byteDataGasConst; + + //m_baExt1 //已经启用 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataLayer.h b/Include/mData/mProjectManager/DataModels/ZxDataLayer.h new file mode 100644 index 0000000..d572158 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataLayer.h @@ -0,0 +1,97 @@ +#pragma once + +#include "ZxDataObjectStr.h" + +// 地层 +class M_PROJECTMANAGER_EXPORT ZxDataLayer + : public ZxDataObjectStr +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataLayer(); + ZxDataLayer(const ZxDataLayer &other); + virtual ~ZxDataLayer(); + + ZxDataLayer &operator = (const ZxDataLayer &other); + bool operator == (const ZxDataLayer &other) const; + bool operator != (const ZxDataLayer &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + virtual QStringList getKeyValues(); //筛选时获得主键的值。 + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + // 井号 + void setWellCode(const QString& sWellCode); + QString getWellCode() const; + +// // 层名 +// void setLayerName(const QString& sLayerName); +// QString getLayerName() const; + + // 对象编码 + virtual void setCode(const QString &sCode); + virtual void setName(const QString &sName); + + + // 顶深 + void setTopMD(const float& fTopMD); + float getTopMD() const; + + // 底深 + void setBottomMD(const float& fBottomMD); + float getBottomMD() const; + + // 顶TVD + void setTopTVD(const float& fTopTVD); + float getTopTVD() const; + + // 底TVD + void setBottomTVD(const float& fBottomTVD); + float getBottomTVD() const; + + // 储层厚度 + void setThicknessM(const float& fThicknessM); + float getThicknessM() const; + + // 储层TV值 + void setThicknessTV(const float & fThicknessTV); + float getThicknessTV()const; + + // 储层描述 + void setLayerDesc(const QString& sLayerDesc); + QString getLayerDesc() const; + +protected: + + QString m_sWellCode; //井号 +// QString m_sLayerName; //层名 + float m_fTopMD; //顶深 + float m_fBottomMD; //底深 + float m_fTopTVD; //顶TVD + float m_fBottomTVD; //底TVD + float m_fThicknessM; //储层厚度 + float m_fThicknessTV; //储层TV值 + QString m_sLayerDesc; //储层描述 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataObjectBin.h b/Include/mData/mProjectManager/DataModels/ZxDataObjectBin.h new file mode 100644 index 0000000..06e03df --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataObjectBin.h @@ -0,0 +1,58 @@ +#pragma once + +#include "ZxDataObjectEx.h" + +// DataObjectBin +class M_PROJECTMANAGER_EXPORT ZxDataObjectBin + : public ZxDataObjectEx +{ +// ZX_DECLARE_DYNAMIC + +public: + + ZxDataObjectBin(ZxDataObject *pParent); + ZxDataObjectBin(const ZxDataObjectBin& other); + virtual ~ZxDataObjectBin(); + + ZxDataObjectBin &operator = (const ZxDataObjectBin& other); + bool operator == (const ZxDataObjectBin& other) const; + bool operator != (const ZxDataObjectBin& other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + + // 20240604为了方便,新增内部解析 + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + void setExt1(const QByteArray& s); + QByteArray getExt1() const; + void setExt2(const QByteArray& s); + QByteArray getExt2() const; + void setExt3(const QByteArray& s); + QByteArray getExt3() const; + void setExt4(const QByteArray& s); + QByteArray getExt4() const; + void setExt5(const QByteArray& s); + QByteArray getExt5() const; + +protected: + + QByteArray m_baExt1; + QByteArray m_baExt2; + QByteArray m_baExt3; + QByteArray m_baExt4; + QByteArray m_baExt5; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataObjectDbl.h b/Include/mData/mProjectManager/DataModels/ZxDataObjectDbl.h new file mode 100644 index 0000000..9547b81 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataObjectDbl.h @@ -0,0 +1,58 @@ +#pragma once + +#include "ZxDataObjectEx.h" + +// DataObjectDbl +class M_PROJECTMANAGER_EXPORT ZxDataObjectDbl + : public ZxDataObjectEx +{ +// ZX_DECLARE_DYNAMIC + +public: + + ZxDataObjectDbl(ZxDataObject *pParent); + ZxDataObjectDbl(const ZxDataObjectDbl& other); + virtual ~ZxDataObjectDbl(); + + ZxDataObjectDbl &operator = (const ZxDataObjectDbl& other); + bool operator == (const ZxDataObjectDbl& other) const; + bool operator != (const ZxDataObjectDbl& other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + + // 20240604为了方便,新增内部解析 + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + void setExt1(const double& s); + double getExt1() const; + void setExt2(const double& s); + double getExt2() const; + void setExt3(const double& s); + double getExt3() const; + void setExt4(const double& s); + double getExt4() const; + void setExt5(const double& s); + double getExt5() const; + +protected: + + double m_dExt1; + double m_dExt2; + double m_dExt3; + double m_dExt4; + double m_dExt5; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataObjectEx.h b/Include/mData/mProjectManager/DataModels/ZxDataObjectEx.h new file mode 100644 index 0000000..628e583 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataObjectEx.h @@ -0,0 +1,49 @@ +#pragma once + +#include "iDataTypes.h" +#include "ZxDynamic.h" +#include "ZxDataObject.h" +#include "mProjectManager_global.h" + +// 数据模型对象类的抽象基类 +class M_PROJECTMANAGER_EXPORT ZxDataObjectEx + : public ZxDataObject +{ + //Q_OBJECT + +public: + + ZxDataObjectEx(ZxDataObject *pParent); + ZxDataObjectEx(const ZxDataObjectEx& other); + virtual ~ZxDataObjectEx(); + +public: + + // 接口,子类必须实现 + virtual ZxDataObject* clone()/* = 0*/; + virtual QString type() const/* = 0*/; + + // 操作符 + virtual ZxDataObjectEx& operator = (const ZxDataObjectEx& other); + virtual bool operator == (const ZxDataObjectEx& other) const; + virtual bool operator != (const ZxDataObjectEx& other) const; + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 20240604为了方便,新增内部解析 + virtual bool parseData(VecVariant vec); + virtual bool sumUpData(VecVariant& vec); + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + virtual QString getTableNameBy(QString sType); + + void setRemark(const QString& s); + QString getRemark() const; + +protected: + + QString m_sRemark; +}; diff --git a/Include/mData/mProjectManager/DataModels/ZxDataObjectStr.h b/Include/mData/mProjectManager/DataModels/ZxDataObjectStr.h new file mode 100644 index 0000000..3520dd7 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataObjectStr.h @@ -0,0 +1,58 @@ +#pragma once + +#include "ZxDataObjectEx.h" + +// DataObjectStr +class M_PROJECTMANAGER_EXPORT ZxDataObjectStr + : public ZxDataObjectEx +{ +// ZX_DECLARE_DYNAMIC + +public: + + ZxDataObjectStr(ZxDataObject *pParent); + ZxDataObjectStr(const ZxDataObjectStr& other); + virtual ~ZxDataObjectStr(); + + ZxDataObjectStr &operator = (const ZxDataObjectStr& other); + bool operator == (const ZxDataObjectStr& other) const; + bool operator != (const ZxDataObjectStr& other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + + // 20240604为了方便,新增内部解析 + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + void setExt1(const QString& s); + QString getExt1() const; + void setExt2(const QString& s); + QString getExt2() const; + void setExt3(const QString& s); + QString getExt3() const; + void setExt4(const QString& s); + QString getExt4() const; + void setExt5(const QString& s); + QString getExt5() const; + +protected: + + QString m_sExt1; + QString m_sExt2; + QString m_sExt3; + QString m_sExt4; + QString m_sExt5; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataObjectStrEx.h b/Include/mData/mProjectManager/DataModels/ZxDataObjectStrEx.h new file mode 100644 index 0000000..f92e166 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataObjectStrEx.h @@ -0,0 +1,58 @@ +#pragma once + +#include "ZxDataObjectStr.h" + +// DataObjectStrEx +class M_PROJECTMANAGER_EXPORT ZxDataObjectStrEx + : public ZxDataObjectStr +{ +// ZX_DECLARE_DYNAMIC + +public: + + ZxDataObjectStrEx(ZxDataObject *pParent); + ZxDataObjectStrEx(const ZxDataObjectStrEx& other); + virtual ~ZxDataObjectStrEx(); + + ZxDataObjectStrEx &operator = (const ZxDataObjectStrEx& other); + bool operator == (const ZxDataObjectStrEx& other) const; + bool operator != (const ZxDataObjectStrEx& other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + + // 20240604为了方便,新增内部解析 + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + void setExt6(const QString& s); + QString getExt6() const; + void setExt7(const QString& s); + QString getExt7() const; + void setExt8(const QString& s); + QString getExt8() const; + void setExt9(const QString& s); + QString getExt9() const; + void setExt10(const QString& s); + QString getExt10() const; + +protected: + + QString m_sExt6; + QString m_sExt7; + QString m_sExt8; + QString m_sExt9; + QString m_sExt10; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataObjectStrExUser.h b/Include/mData/mProjectManager/DataModels/ZxDataObjectStrExUser.h new file mode 100644 index 0000000..69477a2 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataObjectStrExUser.h @@ -0,0 +1,57 @@ +#pragma once + +#include "ZxDataObjectStrEx.h" + +// DataObjectStrExUser +class M_PROJECTMANAGER_EXPORT ZxDataObjectStrExUser + : public ZxDataObjectStrEx +{ +// ZX_DECLARE_DYNAMIC + +public: + + ZxDataObjectStrExUser(ZxDataObject *pParent); + ZxDataObjectStrExUser(const ZxDataObjectStrExUser& other); + virtual ~ZxDataObjectStrExUser(); + + ZxDataObjectStrExUser &operator = (const ZxDataObjectStrExUser& other); + bool operator == (const ZxDataObjectStrExUser& other) const; + bool operator != (const ZxDataObjectStrExUser& other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + + // 20240604为了方便,新增内部解析 + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + void setCreator(const QString& s); + QString getCreator() const; + void setCreatedTime(const QString& s); + QString getCreatedTime() const; + + void setModifier(const QString& s); + QString getModifier() const; + void setModifiedTime(const QString& s); + QString getModifiedTime() const; + +protected: + + QString m_sCreator; //项目创建人 + QString m_sCreatedTime;//项目创建时间 + + QString m_sModifier; //项目修改人 + QString m_sModifiedTime;//项目修改时间 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataObjectStrUser.h b/Include/mData/mProjectManager/DataModels/ZxDataObjectStrUser.h new file mode 100644 index 0000000..9b32b59 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataObjectStrUser.h @@ -0,0 +1,57 @@ +#pragma once + +#include "ZxDataObjectStr.h" + +// DataObjectStrUser +class M_PROJECTMANAGER_EXPORT ZxDataObjectStrUser + : public ZxDataObjectStr +{ +// ZX_DECLARE_DYNAMIC + +public: + + ZxDataObjectStrUser(ZxDataObject *pParent); + ZxDataObjectStrUser(const ZxDataObjectStrUser& other); + virtual ~ZxDataObjectStrUser(); + + ZxDataObjectStrUser &operator = (const ZxDataObjectStrUser& other); + bool operator == (const ZxDataObjectStrUser& other) const; + bool operator != (const ZxDataObjectStrUser& other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + + // 20240604为了方便,新增内部解析 + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + void setCreator(const QString& s); + QString getCreator() const; + void setCreatedTime(const QString& s); + QString getCreatedTime() const; + + void setModifier(const QString& s); + QString getModifier() const; + void setModifiedTime(const QString& s); + QString getModifiedTime() const; + +protected: + + QString m_sCreator; //项目创建人 + QString m_sCreatedTime;//项目创建时间 + + QString m_sModifier; //项目修改人 + QString m_sModifiedTime;//项目修改时间 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataOther.h b/Include/mData/mProjectManager/DataModels/ZxDataOther.h new file mode 100644 index 0000000..5217223 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataOther.h @@ -0,0 +1,93 @@ +#pragma once + +#include "ZxDataObjectBin.h" +#include "zxDataOtherItem.h" + +// 这是针对新疆 试井之星 软件的特殊处理数据对象 +// 从新疆 试井之星 后台mdb文件的两张表加载数据时, +// 把部分MPA/WTAI需要的数据加载分发至MPA/WTAI的数据表中,而 +// 把MPA/WTAI未涉及的数据放在本数据对象中进行处理 + +class M_PROJECTMANAGER_EXPORT ZxDataOther + : public ZxDataObjectBin +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataOther(); + ZxDataOther(const ZxDataOther &other); + virtual ~ZxDataOther(); + + ZxDataOther &operator = (const ZxDataOther &other); + bool operator == (const ZxDataOther &other) const; + bool operator != (const ZxDataOther &other) const; + +public: + + // 组织为一行数据,包括Obj头 + bool setRowInfos(VecVariant& vec); + bool getRowInfos(VecVariant& vec); + bool getBaseInfos(QStringList& listNames, \ + QStringList& listUnits, \ + QStringList& listAlias); + + /// @brief 准备好数据后,填入Obj,仅仅是具体数据,不包括头 + /// @param vec:数据 + bool setParasData(const QVector& vec); + bool getParasData(QVector& vec); + + /// @brief 从大字段里面解析出来具体的参数数据 + /// @param sPara:传入的参数, + /// 以英文方式,比如"h" "Ct"等,大小写不敏感 + /// @param f:返回值,如果有 + bool getValueOfPara(QString s, double& d); + bool getValueOfPara(QString s, QVariant& o); + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + virtual void setCode(const QString &sCode); + virtual void setName(const QString &sName); + + void setWellCode(const QString& sWellCode); + QString getWellCode() const; + + void setDataTestDate(const QString& s); + QString getDataTestDate() const; + + void setOtherWellData(const QByteArray& v); + QByteArray getOtherWellData() const; + void setOtherBlockData(const QByteArray& v); + QByteArray getOtherBlockData() const; + +protected: + + //QString m_sID; //ID号 + QString m_sWellCode; //井号 + + QString m_sDataTestDate; + + QByteArray m_byteOtherWellData; + QByteArray m_byteOtherBlockData; + + QVector m_vecItems;//对应WellData+BlockData +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataOtherItem.h b/Include/mData/mProjectManager/DataModels/ZxDataOtherItem.h new file mode 100644 index 0000000..9607cc4 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataOtherItem.h @@ -0,0 +1,37 @@ +#pragma once + +#include "ZxDataObjectEx.h" +#include "iXmlField.h" + +// 这是针对新疆 试井之星 软件的特殊处理数据对象 +// 从新疆 试井之星 后台mdb文件的两张表加载数据时, +// 把部分MPA/WTAI需要的数据加载分发至MPA/WTAI的数据表中,而 +// 把MPA/WTAI未涉及的数据放在本数据对象中进行处理 +class M_PROJECTMANAGER_EXPORT zxDataOtherItem +{ +public: + + zxDataOtherItem(); + virtual ~zxDataOtherItem(); + + virtual bool parseData(VecVariant vec); //解析 + virtual bool sumUpData(VecVariant& vec); + +public: + + QString m_sName; //Name,英文 + QString m_sAlias; //别名,通常对应中文 + FieldInfoType m_oType; //类型, + QString m_sUnit; //单位,数值型有效 + QVariant m_oValue; //数值 + + bool m_bWellData; //从属于井还是从属于区块 + QString m_sTable; + int m_ndex; + bool m_bShow; //从表中读取数据一些不需要显示的 + bool m_bOther; //other数据表不显示(这里定义为没有存到MPA/WTAI数据库中的就为other) + + QString m_sParam;//对应到MPA/WTAI中参数名(如果为空就说明是没有对应的参数) +}; + +typedef QVector vecAccessItem; diff --git a/Include/mData/mProjectManager/DataModels/ZxDataPersons.h b/Include/mData/mProjectManager/DataModels/ZxDataPersons.h new file mode 100644 index 0000000..6af9b3a --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataPersons.h @@ -0,0 +1,68 @@ +#pragma once + +#include "ZxDataObjectEx.h" + +// 人员 +class M_PROJECTMANAGER_EXPORT ZxDataPersons + : public ZxDataObjectEx +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataPersons(); + ZxDataPersons(const ZxDataPersons &other); + virtual ~ZxDataPersons(); + + ZxDataPersons &operator = (const ZxDataPersons &other); + bool operator == (const ZxDataPersons &other) const; + bool operator != (const ZxDataPersons &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool parseData(VecVariant vec); //解析 + virtual bool sumUpData(VecVariant& vec); + virtual QStringList getKeyValues(); //筛选时获得主键的值。 + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + void setDepart(const QString& sDepart); + QString getDepart() const; + + // 对象编码 + virtual void setCode(const QString &sCode); + virtual void setName(const QString &sName); + + void setPosition(const QString& sPosition); + QString getPosition() const; + + void setMobile(const QString& sMobile); + QString getMobile() const; + + void setEmail(const QString& sEmail); + QString getEmail() const; + +protected: + + QString m_sDepart; //部门 +// QString m_sName; //名字 + QString m_sPosition; //位置 + QString m_sMobile; //手机号 + QString m_sEmail; //电子邮件 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataProject.h b/Include/mData/mProjectManager/DataModels/ZxDataProject.h new file mode 100644 index 0000000..5fbf646 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataProject.h @@ -0,0 +1,104 @@ +#pragma once + +#include "ZxDataObjectStrUser.h" + +// 项目项目数据对象类 +class M_PROJECTMANAGER_EXPORT ZxDataProject + : public ZxDataObjectStrUser +{ + ZX_DECLARE_DYNAMIC + Q_OBJECT + +public: + + ZxDataProject(); + ZxDataProject(const ZxDataProject &other); + virtual ~ZxDataProject(); + + ZxDataProject &operator = (const ZxDataProject &other); + bool operator == (const ZxDataProject &other) const; + bool operator != (const ZxDataProject &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + + // 该函数是加载子类对象,仅仅加载code之类的关键信息 + // 比如在建立树时,创建该节点。 + virtual bool createChildren(); + virtual bool createChildrenWells(); + virtual bool createChildrenJobs(); + virtual bool createChildrenPVTs();//注意:PVT与井无关,此处只是借用 + + // 重新加载,注意:PVT与井无关,此处只是借用 + void reloadChildrenJobs(); + void reloadChildrenPVTs(); + + // 加载数据 + virtual bool loadData(VVecVariant& vvec, QString &sLog, bool bTopOneOnly = true); + +signals: + + // 允许在外部进行工区级别或井级别的孩子节点创建(比如数值试井涉及到的数据) + void sigExtDataObjChildren(ZxDataObject*); + +public: + + // 对象编码 + virtual void setCode(const QString& s); + virtual void setName(const QString& s); + + // 数据库类型 + void setDbType(const QString& s); + QString getDbType() const; + + // 数据库路径 + void setDbUrl(const QString& s); + QString getDbUrl() const; + + // 版本号 + void setDbVer(const QString& s); + QString getDbVer() const; + + // 项目描述 + void setProjDesc(const QString& s); + QString getProjDesc() const; + + // 油田名称 + void setFieldName(const QString& s); + QString getFieldName() const; + + // 油田编码 + void setFieldCode(const QString& s); + QString getFieldCode() const; + +protected: + +// QString m_sProjName; //项目名称 + + QString m_sDbType; //数据库类型 + QString m_sDbUrl; //数据库路径 + QString m_sDbVer; //版本号 + + QString m_sFieldName; //油田名称 + QString m_sFieldCode; //油田编码 + + QString m_sProjDesc; //项目描述 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataPvtData.h b/Include/mData/mProjectManager/DataModels/ZxDataPvtData.h new file mode 100644 index 0000000..7d5e903 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataPvtData.h @@ -0,0 +1,63 @@ +#pragma once + +#include "ZxDataObjectBin.h" + +// ZxDataPvtData:存储PVT相关的数据信息,与PvtInfo关联 +class M_PROJECTMANAGER_EXPORT ZxDataPvtData + : public ZxDataObjectBin +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataPvtData(); + ZxDataPvtData(const ZxDataPvtData &other); + virtual ~ZxDataPvtData(); + + ZxDataPvtData &operator = (const ZxDataPvtData &other); + bool operator == (const ZxDataPvtData &other) const; + bool operator != (const ZxDataPvtData &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + // PvtInfoID + void setPvtID(const QString& s); + QString getPvtID() const; + + void setMethodName(const QString& s); + QString getMethodName() const; + void setFixedPosX(const float& f); + float getFixedPosX() const; + void setFixedPosY(const float& f); + float getFixedPosY() const; + + // 过程数据 + void setProcData(const QByteArray& ba); + QByteArray getProcData() const; + + +protected: + + QString m_sPvtID; //PvtInfo编码 + QString m_sMethodName; //选用方法 + float m_fFixedPosX; //x轴数值 + float m_fFixedPosY; //y轴数值 + QByteArray m_baProcData; //过程数据 +}; diff --git a/Include/mData/mProjectManager/DataModels/ZxDataPvtInfo.h b/Include/mData/mProjectManager/DataModels/ZxDataPvtInfo.h new file mode 100644 index 0000000..4291b49 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataPvtInfo.h @@ -0,0 +1,63 @@ +#pragma once + +#include "ZxDataObjectStrUser.h" + +// ZxDataPvtInfo:存储PVT相关的基础信息,可以绑定JobID也可以不绑定 +class M_PROJECTMANAGER_EXPORT ZxDataPvtInfo + : public ZxDataObjectStrUser +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataPvtInfo(); + ZxDataPvtInfo(const ZxDataPvtInfo &other); + virtual ~ZxDataPvtInfo(); + + ZxDataPvtInfo &operator = (const ZxDataPvtInfo &other); + bool operator == (const ZxDataPvtInfo &other) const; + bool operator != (const ZxDataPvtInfo &other) const; + +public: + + virtual bool createChildren(); + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + // 作业ID + void setJobID(const QString& s); + QString getJobID() const; + + // 过程数据 + void setMainOption(const QByteArray& ba); + QByteArray getMainOption() const; + void setSubOptionO(const QByteArray& ba); + QByteArray getSubOptionO() const; + void setSubOptionG(const QByteArray& ba); + QByteArray getSubOptionG() const; + void setSubOptionW(const QByteArray& ba); + QByteArray getSubOptionW() const; + +protected: + + QString m_sJobID; //作业编码 + QByteArray m_baMainOption; //主选项信息 + QByteArray m_baSubOptionO; //油子选项信息 + QByteArray m_baSubOptionG; //气子选项信息 + QByteArray m_baSubOptionW; //水子选项信息 +}; diff --git a/Include/mData/mProjectManager/DataModels/ZxDataRes.h b/Include/mData/mProjectManager/DataModels/ZxDataRes.h new file mode 100644 index 0000000..c202bbd --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataRes.h @@ -0,0 +1,85 @@ +#pragma once + +#include "ZxDataObjectDbl.h" + +// 油藏 +class M_PROJECTMANAGER_EXPORT ZxDataRes + : public ZxDataObjectDbl +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataRes(); + ZxDataRes(const ZxDataRes &other); + virtual ~ZxDataRes(); + + ZxDataRes &operator = (const ZxDataRes &other); + bool operator == (const ZxDataRes &other) const; + bool operator != (const ZxDataRes &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + void setWellCode(const QString& sWellCode); + QString getWellCode() const; + + void setEffThickness(const float& fEffThickness); + float getEffThickness() const; + + void setResTopDepth(const float& fResTopDepth); + float getResTopDepth() const; + + void setResBottomDepth(const float& fResBottomDepth); + float getResBottomDepth() const; + + void setPor(const float& fPor); + float getPor() const; + + void setK(const float& fK); + float getK() const; + + void setFormationPress(const float& fFormationPress); + float getFormationPress() const; + + void setFormationTemp(const float& fFormationTemp); + float getFormationTemp() const; + + void setTotalCF(const float& fTotalCF); + float getTotalCF() const; + +protected: + + //QString m_sID; + QString m_sWellCode; + //QString m_sLayerName; + + float m_fEffThickness; + float m_fResTopDepth; + float m_fResBottomDepth; + float m_fPor; + float m_fK; + float m_fFormationPress; + float m_fFormationTemp; + float m_fTotalCF; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataSketch.h b/Include/mData/mProjectManager/DataModels/ZxDataSketch.h new file mode 100644 index 0000000..d728c4b --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataSketch.h @@ -0,0 +1,143 @@ +#pragma once + +#include +#include +#include +#include + +#include "ZxDataObjectStrUser.h" +#include "mProjectManager_global.h" + +// 图片,临时 +// 20171026 示意图应用 + +class M_PROJECTMANAGER_EXPORT ZxDataSketch : public ZxDataObjectStrUser +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataSketch(ZxDataObject* parent = 0); + ZxDataSketch(const ZxDataSketch &other); + virtual ~ZxDataSketch(); + + ZxDataSketch &operator = (const ZxDataSketch &other); + bool operator == (const ZxDataSketch &other) const; + bool operator != (const ZxDataSketch &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + + // 自动组织加载和保存 + // 先从当前工区,如果没有,则从系统db + bool loadSketch(QByteArray& o); + // 保存指定的db, nMode = 0:当前工区,1:系统配置 + bool saveSketch(int nMode); + + +private: + + // 由于示意图涉及到系统db和工区db,所以特殊处理 + // 根据当前的选项获取示意图 + QByteArray _loadSketch(QSqlDatabase& db); + // 保存 + bool _saveSketch(QSqlDatabase& db); + +public: + +// MstID +// virtual void setCode(const QString &sCode); +//ModelSeries + // virtual void setName(const QString &sName); + + void setWBS(const QString& s); + QString getWBS() const; + void setWEL(const QString& s); + QString getWEL() const; + void setRES(const QString& s); + QString getRES() const; + void setBDY(const QString& s); + QString getBDY() const; + void setOthers(const QString& s); + QString getOthers() const; + + void setSketch(const QByteArray& s); + QByteArray getSketch() const; + + +protected: + + //MstID + //ModelSeries + + QString m_sWBS; + QString m_sWEL; + QString m_sRES; + QString m_sBDY; + + QString m_sOthers; + QByteArray m_arrSketch; +}; + +// 本类的目的通过单例实现对系统下面的示意图配置管理 +// 主要为了速度 +class M_PROJECTMANAGER_EXPORT ZxDataPictureHelper +{ +public: + + // 获取对象,单例模式 + static ZxDataPictureHelper* getInstance(); + // 关闭 + static void closeSysDb(); + + // 获得数据库连接 + QSqlDatabase getSysDb(); + + // + void reLoadSketches(); + // + bool checkSketch(QString sSeries, + QString sWbs, + QString sWel, + QString sRes, + QString sBdy, + QByteArray& o); + +private: + ZxDataPictureHelper(); + ~ZxDataPictureHelper(); + +private: + + static ZxDataPictureHelper* spZxDbSys; + QSqlDatabase m_db; + + VVecVariant m_vvecSketchs; +}; + + + + + + + + + + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxDataWell.h b/Include/mData/mProjectManager/DataModels/ZxDataWell.h new file mode 100644 index 0000000..d4c59b7 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxDataWell.h @@ -0,0 +1,157 @@ +#pragma once + +#include "mProjectManager_global.h" +#include "ZxDataObjectStrExUser.h" + +class ZxDataJobInfo; +class ZxRstJobUtils; +class ZxDataGaugeP; +class ZxDataGaugeF; + +// 井对象 +class M_PROJECTMANAGER_EXPORT ZxDataWell : + public ZxDataObjectStrExUser +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxDataWell(ZxDataObject* parent = 0); + ZxDataWell(const ZxDataWell &other); + virtual ~ZxDataWell(); + + ZxDataWell &operator = (const ZxDataWell &other); + bool operator == (const ZxDataWell &other) const; + bool operator != (const ZxDataWell &other) const; + +signals: + + void sigThisss(int); + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + + // 该函数是加载子类对象,仅仅加载code之类的关键信息 + // 比如在建立树时,创建该节点。 + virtual bool createChildren(); + virtual bool createChildrenResults(); + virtual bool createChildrenFluid(); + virtual bool createChildrenRes(); + virtual bool createChildrenLayer(); + virtual bool createChildrenGuageP(); + virtual bool createChildrenGuageF(); + virtual bool createChildrenGas(); + + // 试井之星Other + virtual bool createChildrenOther(); + + // 数据表编辑保存之后,刷新当前井的内存 + void fuzzyChildrenOf(VVecVariant& vvec, QString sTable); + +public: + + // 油田 + void setFieldCode(const QString& s); + QString getFieldCode() const; + void setFieldName(const QString& s); + QString getFieldName() const; + + // 区块 + void setBlockCode(const QString &sBlockCode); + QString getBlockCode() const; + void setBlockName(const QString &sBlockName); + QString getBlockName() const; + + // 井类型 + void setWellTypeCn(const QString &sWellType); + QString getWellTypeCn() const; + QString getWellTypeEn() const; + int getWellTypeIndex() const; + bool isGasWell()const; + void makesureWellType(); + + // 井类别 + void setWellClass(const QString &sWellClass); + QString getWellClass() const; + + // 井半径 + void setWellRadius(const float &fWellRadius); + float getWellRadius() const; + + // 井坐标X + void setLocationX(const float &fLocationX); + float getLocationX() const; + + // 井坐标Y + void setLocationY(const float &fLocationY); + float getLocationY() const; + + // 井描述 + void setWellRemark(const QString &sWellRemark); + QString getWellRemark() const; + + // 基准时间 +// void setBaseDT(const QString& dt); +// QString getBaseDT() const; + + /// @brief 根据参数sPara,获取当前井的参数值(主要是数据库里面) + /// @param sPara:传入的参数, + /// 以英文方式,比如"h" "Ct"等,大小写不敏感 + /// @param f:返回值,如果有 + bool getValueOfPara(QString sPara, double& d); + bool getValueOfPara(QString sPara, QVariant& o); + + // 获取Well/Job后台的路径 + static QString getJobDirOf(ZxDataWell* pWell, + ZxRstJobUtils* pJob = NULL, + QString sWndID = ""); + +private: + + // 井基础、储层、流体数据表获取数据 + bool getDbValueFromBasic(QString s, double& d); + bool getDbValueFromRes(QString s, double& d); + bool getDbValueFromFluid(QString s, double& d); + bool getDbValueFromOther(QString s, double& d); + + bool getDbValueFromBasic(QString s, QVariant& v); + bool getDbValueFromRes(QString s, QVariant& v); + bool getDbValueFromFluid(QString s, QVariant& v); + bool getDbValueFromOther(QString s, QVariant& v); + +protected: + + QString m_sFieldCode; //油田代码 + QString m_sFieldName; //油田名称 + + QString m_sBlockCode; //区块代码 + QString m_sBlockName; //区块名称 +// QString m_sWellCode; //井号 +// QString m_sWellName; //井名 + QString m_sWellTypeCn; //井型,这是中文 + QString m_sWellTypeEn; //井型,英文,不涉及序列化,根据中文以及ini进行转换 + QString m_sWellClass; //井类别 + float m_fWellRadius; //井半径 + float m_fLocationX; //井坐标X + float m_fLocationY; //井坐标Y + +// QString m_dtBase; //基准时间 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxRstJobPureData.h b/Include/mData/mProjectManager/DataModels/ZxRstJobPureData.h new file mode 100644 index 0000000..9d0cb60 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxRstJobPureData.h @@ -0,0 +1,66 @@ +#pragma once + +#include "ZxDataObjectBin.h" + +// JobPureResult +class M_PROJECTMANAGER_EXPORT ZxRstJobPureData + : public ZxDataObjectBin +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxRstJobPureData(); + ZxRstJobPureData(const ZxRstJobPureData &other); + virtual ~ZxRstJobPureData(); + + ZxRstJobPureData &operator = (const ZxRstJobPureData &other); + bool operator == (const ZxRstJobPureData &other) const; + bool operator != (const ZxRstJobPureData &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + +// // 成果ID +// void setRstID(const QString& sRstID); +// QString getRstID() const; + + void setCurveRaws(const QByteArray& v); + QByteArray getCurveRaws() const; + void setCurveFits(const QByteArray& v); + QByteArray getCurveFits() const; + void setModelInfos(const QByteArray& v); + QByteArray getModelInfos() const; + void setParameterInfos(const QByteArray& v); + QByteArray getParameterInfos() const; + +protected: + +// QString m_sRstID; //成果编码 + + // 具体大字段数据 + QByteArray m_byteCurveRaws; + QByteArray m_byteCurveFits; + QByteArray m_byteModelInfos; + QByteArray m_byteParameterInfos; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxRstJobRun.h b/Include/mData/mProjectManager/DataModels/ZxRstJobRun.h new file mode 100644 index 0000000..e3a5ec8 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxRstJobRun.h @@ -0,0 +1,65 @@ +#pragma once + +#include "ZxDataObjectBin.h" + +// JobInfo +class M_PROJECTMANAGER_EXPORT ZxRstJobRun + : public ZxDataObjectBin +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxRstJobRun(); + ZxRstJobRun(const ZxRstJobRun &other); + virtual ~ZxRstJobRun(); + + ZxRstJobRun &operator = (const ZxRstJobRun &other); + bool operator == (const ZxRstJobRun &other) const; + bool operator != (const ZxRstJobRun &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + +// // 成果ID +// void setRstID(const QString& sRstID); +// QString getRstID() const; + + void setDataBasic(const QByteArray& v); + QByteArray getDataBasic() const; + + void setDataFluid(const QByteArray& v); + QByteArray getDataFluid() const; + + void setDataGasConst(const QByteArray& v); + QByteArray getDataGasConst() const; + +protected: + +// QString m_sRstID; //成果编码 + + // 分别对应五个对话框中的数据 + QByteArray m_byteDataBasic; + QByteArray m_byteDataFluid; + QByteArray m_byteDataGasConst; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxRstJobSeg.h b/Include/mData/mProjectManager/DataModels/ZxRstJobSeg.h new file mode 100644 index 0000000..52890b6 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxRstJobSeg.h @@ -0,0 +1,73 @@ +#pragma once + +#include "ZxDataObjectStr.h" + +// RstJobSeg +class M_PROJECTMANAGER_EXPORT ZxRstJobSeg + : public ZxDataObjectStr +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxRstJobSeg(); + ZxRstJobSeg(const ZxRstJobSeg &other); + virtual ~ZxRstJobSeg(); + + ZxRstJobSeg &operator = (const ZxRstJobSeg &other); + bool operator == (const ZxRstJobSeg &other) const; + bool operator != (const ZxRstJobSeg &other) const; + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + +// // 成果ID +// void setRstID(const QString& sRstID); +// QString getRstID() const; + +// void setSegName(const QString& s); +// QString getSegName() const; + void setSegType(const int& n); + int getSegType() const; + void setFlowRatePrev(const float& f); + float getFlowRatePrev() const; + void setPresValueL(const float& f); + float getPresValueL() const; + void setPresValueR(const float& f); + float getPresValueR() const; + void setTimeL(const float& f); + float getTimeL() const; + void setTimeR(const float& f); + float getTimeR() const; + +protected: + +// QString m_sRstID; //成果编码 +// QString m_sSegName; + int m_nSegType; //类型:0:压恢 1:压降 + float m_fFlowRatePrev; + float m_fPresValueL; + float m_fPresValueR; + float m_fTimeL; + float m_fTimeR; +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxRstJobUtils.h b/Include/mData/mProjectManager/DataModels/ZxRstJobUtils.h new file mode 100644 index 0000000..a06f52a --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxRstJobUtils.h @@ -0,0 +1,64 @@ +#pragma once + +#include "ZxDataObjectStrUser.h" + +// RstJobUtils +class M_PROJECTMANAGER_EXPORT ZxRstJobUtils + : public ZxDataObjectStrUser +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxRstJobUtils(); + ZxRstJobUtils(const ZxRstJobUtils &other); + virtual ~ZxRstJobUtils(); + + ZxRstJobUtils &operator = (const ZxRstJobUtils &other); + bool operator == (const ZxRstJobUtils &other) const; + bool operator != (const ZxRstJobUtils &other) const; + + // 加载孩子节点 + virtual bool createChildren(); + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + +// virtual void setCode(const QString &sCode); +// virtual void setName(const QString &sName); + + void setJobID(const QString& s); + QString getJobID() const; + void setWellCode(const QString& s); + QString getWellCode() const; + void setModelSeries(const QString& s); + QString getModelSeries() const; + +protected: + + //RstUtilID, + //RstUtilTag, + QString m_sJobID; //对应的作业ID + QString m_sWellCode; //20171225增加 + QString m_sModelSeries; //本成果属于的模型类型 +}; + + + + diff --git a/Include/mData/mProjectManager/DataModels/ZxRstJobWnd.h b/Include/mData/mProjectManager/DataModels/ZxRstJobWnd.h new file mode 100644 index 0000000..ffb77b4 --- /dev/null +++ b/Include/mData/mProjectManager/DataModels/ZxRstJobWnd.h @@ -0,0 +1,112 @@ +#pragma once + +#include "ZxDataObjectBin.h" + +// RstJobWnd +class M_PROJECTMANAGER_EXPORT ZxRstJobWnd + : public ZxDataObjectBin +{ + ZX_DECLARE_DYNAMIC + +public: + + ZxRstJobWnd(); + ZxRstJobWnd(const ZxRstJobWnd &other); + virtual ~ZxRstJobWnd(); + + ZxRstJobWnd &operator = (const ZxRstJobWnd &other); + bool operator == (const ZxRstJobWnd &other) const; + bool operator != (const ZxRstJobWnd &other) const; + + // 加载孩子节点 + virtual bool createChildren(); + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存 + virtual bool _parseData(VecVariant vec, int& n); //解析 + virtual bool _sumUpData(VecVariant& vec); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + +// // 成果ID +// void setRstID(const QString& sRstID); +// QString getRstID() const; + + void setWndIndex(const QString& s); + QString getWndIndex() const; + void setWndID(const QString& s); + QString getWndID() const; + void setWndTag(const QString& s); + QString getWndTag() const; + + void setRstUtilID(const QString& s); + QString getRstUtilID() const; + void setDataJobRun(const QByteArray& v); + QByteArray getDataJobRun() const; + void setDataSegInfo(const QByteArray& v); + QByteArray getDataSegInfo() const; + + void setDataInfo(const QByteArray& v); + QByteArray getDataInfo() const; + void setDataInfo1(const QByteArray& v); + QByteArray getDataInfo1() const; + void setDataInfo2(const QByteArray& v); + QByteArray getDataInfo2() const; + void setDataInfo3(const QByteArray& v); + QByteArray getDataInfo3() const; + void setDataInfo4(const QByteArray& v); + QByteArray getDataInfo4() const; + void setDataInfo5(const QByteArray& v); + QByteArray getDataInfo5() const; + void setDataInfo6(const QByteArray& v); + QByteArray getDataInfo6() const; + void setDataInfo7(const QByteArray& v); + QByteArray getDataInfo7() const; + void setDataInfo8(const QByteArray& v); + QByteArray getDataInfo8() const; + void setDataInfo9(const QByteArray& v); + QByteArray getDataInfo9() const; + + void setDataInfoOf(const QByteArray& v, int nIndex); + QByteArray getDataInfoOf(int nIndex) const; + +protected: + +// QString m_sRstID; //成果编码 + + QString m_sWndIndex; + QString m_sWndID; + QString m_sWndTag; + + QString m_sRstUtilID; + QByteArray m_byteDataJobRun; + QByteArray m_byteDataSegInfo; + + // 各类大数据 + QByteArray m_byteDataInfo; + QByteArray m_byteDataInfo1; + QByteArray m_byteDataInfo2; + QByteArray m_byteDataInfo3; + QByteArray m_byteDataInfo4; + QByteArray m_byteDataInfo5; + QByteArray m_byteDataInfo6; + QByteArray m_byteDataInfo7; + QByteArray m_byteDataInfo8; + QByteArray m_byteDataInfo9; +}; + + + + diff --git a/Include/mData/mProjectManager/ZxModuleDataService.h b/Include/mData/mProjectManager/ZxModuleDataService.h new file mode 100644 index 0000000..c4dd473 --- /dev/null +++ b/Include/mData/mProjectManager/ZxModuleDataService.h @@ -0,0 +1,39 @@ +#pragma once + +#include "iBase_global.h" +#include "iDataTypes.h" +#include "Defines.h" + +#include "mProjectManager_global.h" + +class ZxDataObject; +class ZxDataWell; +class ZxDataProject; + +// 数据服务 +class M_PROJECTMANAGER_EXPORT ZxModuleDataService +{ +public: + + ZxModuleDataService(); + virtual ~ZxModuleDataService(); + +public: + +#ifdef QT_DEBUG + // 加载保存 + virtual bool load(ZxDataObject* pObject); + virtual bool save(ZxDataObject* pObject); +#endif + +public: + + // 根据sCode创建DataProject + virtual ZxDataProject* createDataProject(QString sCode); + +protected: + + // 暂未启用 + //QString m_sCode; //对象标识\序号\编号\编码 + //QString m_sName; //对象名称, 包括分组\分类名称 +}; diff --git a/Include/mData/mProjectManager/ZxModuleUpdater.h b/Include/mData/mProjectManager/ZxModuleUpdater.h new file mode 100644 index 0000000..bc58a6d --- /dev/null +++ b/Include/mData/mProjectManager/ZxModuleUpdater.h @@ -0,0 +1,49 @@ +#pragma once + +#include "Defines.h" + +#include "mProjectManager_global.h" + +// 数据库版本升级 +class M_PROJECTMANAGER_EXPORT ZxModuleUpdater +{ +public: + + ZxModuleUpdater(); + virtual ~ZxModuleUpdater(); + +public: + + // 遍历版本历史 + // 注:map已经默认按照Ver排序了 + // map[0] [20170921 ... V1.0] + // map[1] [20171016 ... V1.01] + // map[2] [20171025 ... V1.02] + // map[3] [20171225 ... V1.03] + // map[4] [20180517 ... V1.04] + bool parseVerRecords(QString sOld, \ + QString sNew, \ + QMap& map, \ + QString& sError); + + // 执行Sql更新 + bool executeDbSqls(QStringList& listSqls, \ + bool bProjMode, \ + QString &sError); + + // 文件工区版本更新 + bool updateProjVer(QString sNew, \ + bool bProjMode, + QString &sError); + + // 文件工区版本获取 + bool getProjVer(QString& sVer, \ + bool bProjMode, \ + QString &sError); +private: + + // 内部处理Sql的存储 + void appendTempSql(QStringList& listSqls, + QStringList& listTemps); + +}; diff --git a/Include/mData/mProjectManager/ZxMpaDataService.h b/Include/mData/mProjectManager/ZxMpaDataService.h new file mode 100644 index 0000000..0a7fb84 --- /dev/null +++ b/Include/mData/mProjectManager/ZxMpaDataService.h @@ -0,0 +1,35 @@ +#pragma once + +#include "iBase_global.h" +#include "iDataTypes.h" +#include "Defines.h" + +#include "mProjectManager_global.h" + +class ZxDataObject; +class ZxDataWell; +class ZxDataProject; +// 数据服务 +class M_PROJECTMANAGER_EXPORT ZxMpaDataService +{ +public: + + ZxMpaDataService(); + virtual ~ZxMpaDataService(); + +public: + + // 加载保存 + virtual bool load(ZxDataObject* pObject); + virtual bool save(ZxDataObject* pObject); + +public: + + // 根据sCode创建DataProject + virtual ZxDataProject* createDataProject(QString sCode); + +protected: + QString m_sCode; //对象标识\序号\编号\编码 + QString m_sName; //对象名称, 包括分组\分类名称 + +}; diff --git a/Include/mData/mProjectManager/ZxMpaUpdater.h b/Include/mData/mProjectManager/ZxMpaUpdater.h new file mode 100644 index 0000000..9d56122 --- /dev/null +++ b/Include/mData/mProjectManager/ZxMpaUpdater.h @@ -0,0 +1,49 @@ +#pragma once + +#include "Defines.h" + +#include "mProjectManager_global.h" + +// MPA数据库版本升级 +class M_PROJECTMANAGER_EXPORT ZxMpaUpdater +{ +public: + + ZxMpaUpdater(); + virtual ~ZxMpaUpdater(); + +public: + + // 遍历版本历史 + // 注:map已经默认按照Ver排序了 + // map[0] [20170921 MPA V1.0] + // map[1] [20171016 MPA V1.01] + // map[2] [20171025 MPA V1.02] + // map[3] [20171225 MPA V1.03] + // map[4] [20180517 MPA V1.04] + bool parseVerRecords(QString sOld, \ + QString sNew, \ + QMap& map, \ + QString& sError); + + // 执行Sql更新 + bool executeDbSqls(QStringList& listSqls, \ + bool bProjMode, \ + QString &sError); + + // 文件工区版本更新 + bool updateProjVer(QString sNew, \ + bool bProjMode, + QString &sError); + + // 文件工区版本获取 + bool getProjVer(QString& sVer, \ + bool bProjMode, \ + QString &sError); +private: + + // 内部处理Sql的存储 + void appendTempSql(QStringList& listSqls, + QStringList& listTemps); + +}; diff --git a/Include/mData/mProjectManager/iDataIoUtilsEx.h b/Include/mData/mProjectManager/iDataIoUtilsEx.h new file mode 100644 index 0000000..81df66a --- /dev/null +++ b/Include/mData/mProjectManager/iDataIoUtilsEx.h @@ -0,0 +1,38 @@ +#pragma once + +#include "iDataIoUtils.h" +#include "mProjectManager_global.h" + +class M_PROJECTMANAGER_EXPORT iDataIoUtilsEx : public iDataIoUtils +{ +public: + + /// @note pSqlDb为空,则自动从ZxDbSimple中获取 + iDataIoUtilsEx(QString sConnStr = "", QSqlDatabase* pSqlDb = NULL); + ~iDataIoUtilsEx(); + +public: + + // 获取所有井名/井号 + bool getAllWells(QStringList& listNames, \ + QStringList& listCodes, \ + QString sBlock = ""); + // 获取所有井号 + //QStringList getAllWellCodes(QString sBlock = ""); + + // 获取所有作业名,按照时间降序排列 + QStringList getAllJobNames(QString sWellCode = ""); + + // 获取某表所有的数据 + bool getWellDatas(VVecVariant& vvec, QString sTable, QString sWellCode = ""); + + +public: + + /// @brief 批量保存模式,需要统一删除原来的重复数据 + /// @param sTable针对表名 + /// @param vvecData结果 + virtual bool saveDataEx(QString sTable, VVecVariant& vvecData); +}; + + diff --git a/Include/mData/mProjectManager/iModuleHelper.h b/Include/mData/mProjectManager/iModuleHelper.h new file mode 100644 index 0000000..3a09356 --- /dev/null +++ b/Include/mData/mProjectManager/iModuleHelper.h @@ -0,0 +1,78 @@ +#pragma once + +#include "mProjectManager_global.h" +#include "iBase_global.h" +#include "mModuleDefines.h" + +class ZxDataObjectEx; + +/// @brief 该类是模块层级(如MPA/WTAI) +/// 公有函数库的实现,比较杂 +/// @note 尽量以静态函数实现,避免成员变量 +class M_PROJECTMANAGER_EXPORT iModuleHelper +{ +public: + + iModuleHelper(); + + // 转换 Just for test + static bool convertValue(QString s, float& f); + + // 判断数据是否在两者之间 + static bool judgeNewData(int nCurRow, + VVecVariant& vvec, QString& sError); + + // 检查压力数据是否有问题 + static bool checkPressDateData(VecFloat vecX, QVector& vecRowState); + static bool checkPressDateData(VVecVariant& vvecData, QVector& vecRowState); + + //检查流量数据是否有相同的两段是一起的 + static bool checkFluidData(VecFloat vecY); + + // 合并流量段相同的 + static bool mergeFluidData(VecFloat& vecY, VecFloat& vecX); + static bool mergeFluidData(VVecVariant& vvecData); + + // 如果表格里面需要填的数据都有数值了开始刷新图(否则不刷新) + static bool isTableDataValid(VVecVariant vvec, bool bIgnoreNullRows = false); + + // 判断正式还是临时(目前临时版本指的是新疆版本) + static bool isAppStandardVer(); + static bool isAppTempVer(); + + /// @brief 获取模块编译日期,请每次打包时务必重新编译iProjectManager + /// 否则,版本日期可能会不对 + /// @note 代码来自框架 + static int getModuleCompiledDate(); + + // 判断是否模型系列(主要为了区分IPR等) + static bool isMpaSeries(QString s); + + // 中英文转换,仅仅限于iModuleDefines中定义的 + static QString getStrENOf(QString s); + static QString getStrCNOf(QString s); + + static void setCurJobRun(QObject* p, QString sJobId); + static QObject* getCurJobRun(); + static QString getCurJobId(); + + /// @brief 考虑修改人及修改时间,对数据进行统一调整 + /// @param sTable具体表,为了查找表定义 + /// @param vvecData 待调整修改的数据 + /// @param bForceFilled 是否强制填写 修改人及修改时间,否则,只有 修改人 非空时才填写时间 + static bool adjustDataWithModifier(QString sTable, \ + VVecVariant& vvecData, \ + bool bForceFilled); + /// @brief 考虑修改人及修改时间,对数据进行调整 + /// @param pObj具体的数据对象 + /// @param bForceFilled 是否强制填写 修改人及修改时间,否则,只有 修改人 非空时才填写时间 + static bool adjustDataWithModifier(ZxDataObjectEx* pObj, \ + bool bForceFilled); + +public: + + /// @brief Excel比较特殊,特定把过滤条件封装 + const static QString gExcelFileFilterOpen; + const static QString gExcelFileFilterSave; + +}; diff --git a/Include/mData/mProjectManager/iProjectManager.h b/Include/mData/mProjectManager/iProjectManager.h new file mode 100644 index 0000000..8757ec6 --- /dev/null +++ b/Include/mData/mProjectManager/iProjectManager.h @@ -0,0 +1,12 @@ +#pragma once + +#include "mProjectManager_global.h" + +class M_PROJECTMANAGER_EXPORT iProjectManager +{ +public: + iProjectManager(); +}; + + + diff --git a/Include/mData/mProjectManager/mProjectFile.h b/Include/mData/mProjectManager/mProjectFile.h new file mode 100644 index 0000000..dc7671f --- /dev/null +++ b/Include/mData/mProjectManager/mProjectFile.h @@ -0,0 +1,55 @@ +#pragma once + +#include "IxSerDes.h" +#include "Defines.h" +#include "mProjectManager_global.h" + +class ZxDataProject; +class M_PROJECTMANAGER_EXPORT mProjectFile : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + mProjectFile(); + mProjectFile(ZxDataProject* p); + ~mProjectFile(); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + static bool parseProjUrl(QString s, QString& sDir, QString& sProjName); + +private: + +public: + + // sFullPathFile 指的是,自定义格式的文件,非db文件 + + bool save(ZxDataProject* p, bool ignoreIfExists = true); + bool save(QString sDir, QString sName, bool ignoreIfExists = true); + bool save(QString sFullPathFile, bool ignoreIfExists = true); + + bool load(ZxDataProject* p); + bool load(QString sDir, QString sName); + bool load(QString sFullPathFile); + +private: + + bool makesureDbUrl(QString sFullPathFile, bool bLoad); + + bool saveProj(QString sProj); + bool loadProj(QString sProj); + + void initByProj(ZxDataProject* p); + + QString getWtjFile(ZxDataProject* p); + QString getWtjFile(QString sDir, QString sName, QString sExt = "wtf"); + +protected: + + ZxDataProject* m_pDataProject; //设置的Obj + QString m_sProjName; + QString m_sDbUrl; +}; diff --git a/Include/mData/mProjectManager/mProjectManager_global.h b/Include/mData/mProjectManager/mProjectManager_global.h new file mode 100644 index 0000000..e83e887 --- /dev/null +++ b/Include/mData/mProjectManager/mProjectManager_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(M_PROJECTMANAGER_LIBRARY) +# define M_PROJECTMANAGER_EXPORT Q_DECL_EXPORT +#else +# define M_PROJECTMANAGER_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/mGui/mGuiDataLoad/iGuiDataLoad.h b/Include/mGui/mGuiDataLoad/iGuiDataLoad.h new file mode 100644 index 0000000..86572ed --- /dev/null +++ b/Include/mGui/mGuiDataLoad/iGuiDataLoad.h @@ -0,0 +1,28 @@ +#pragma once + +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "iDlgBase.h" + +#include "mGuiDataLoad_global.h" + +class M_GUI_DATA_LOAD_EXPORT iGuiDataLoad : public iDlgBase +{ + Q_OBJECT + +public: + explicit iGuiDataLoad(QWidget *parent = 0); + ~iGuiDataLoad(); + +protected: + virtual void paintEvent(QPaintEvent *); + +private: + + void initUI(); + void initSheets(); //Sheet + +private: + + VVecVariant m_vvecData; +}; diff --git a/Include/mGui/mGuiDataLoad/iLoadAccess.h b/Include/mGui/mGuiDataLoad/iLoadAccess.h new file mode 100644 index 0000000..b5f378b --- /dev/null +++ b/Include/mGui/mGuiDataLoad/iLoadAccess.h @@ -0,0 +1,30 @@ +#pragma once +#include +#include "Defines.h" +#include "mGuiDataLoad_global.h" + +//读取Access数据 +class M_GUI_DATA_LOAD_EXPORT iLoadAccess +{ +public: + iLoadAccess(); + //获得数据从数据库中 + static bool getDataFromAccess(QString sFile, QStringList& listField, QMap& mapData); + //获得某一个表的数据字段 + static bool getDataByTable(QString sTable, QStringList& listFieldName, VVecVariant& vvec); + + //区块表组织 + static bool parseQkTable(VVecVariant vvecSrc, QMap& mapQK, + QStringList listSrc, QStringList& listField); + //组织两个表的数据合起来(以井为map的关键字) + static bool combineTableData(VVecVariant vvecTableSrc, + QMap mapQK, + QStringList listSrc, QStringList listFieldQK, + QStringList& listField, + QMap& mapData); + //数据的时候需要的到表名及每个表的数据 + static bool getDataFromAccess(QString sFile, QMap& mapTable, + QMap& mapData); + //跟新数据 + static bool updateAccess(QString sFile, QString sTable, QPair pairKey, QMap mapUpdateData); +}; diff --git a/Include/mGui/mGuiDataLoad/iWxDataAccessLoad.h b/Include/mGui/mGuiDataLoad/iWxDataAccessLoad.h new file mode 100644 index 0000000..ce409f0 --- /dev/null +++ b/Include/mGui/mGuiDataLoad/iWxDataAccessLoad.h @@ -0,0 +1,77 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiDataLoad_global.h" +#include "ZxDataOtherItem.h" + +class ZxDataObject; +class iWxDataShow; + +namespace Ui { +class iWxDataAccessLoad; +} + +/// @brief 该类是为了兼容试井之星mdb文件而做的数据加载界面 +class M_GUI_DATA_LOAD_EXPORT iWxDataAccessLoad : public iDlgBase +{ + Q_OBJECT +public: + explicit iWxDataAccessLoad(QWidget *parent = 0); + ~iWxDataAccessLoad(); + +public: + + // 读取后台配置文件 + static bool loadAccessConfig(vecAccessItem& vecItems, QString sFile = ""); + +private: + //布局 + virtual void initUI(); + + //新建一组表 + bool initNewTable(QMap& mapDataObj,QMap& mapDataVec); + //得到井号 + bool saveWell(QMap mapDataObj, QMap mapDataVec); + //大字段特殊处理 + bool dealBytPressData(); + //流量大字段处理 + bool dealBytFlowData(); + // 处理井号+井名 + bool dealWellNames(); + //根据字段名得到字段的位置id号 + bool getNdexByField(QString s, int& ndex); + //配置文件加载 + bool getWellTypeCn(QMap& mapWellTp); + bool findWellType(QMap mapWellTp, QString s, QString& sType); + //填充对话框 + bool fillUI(); + bool fillShowWx(); + + // 判断是否已有同样的数据 + bool existSameRec(QString sTableName, QString sWellCode, VecVariant& vec); + bool isSameField(QString sTableName, int nIndex, QVariant o1, QVariant o2); + //根据字段得到配置文件的显示 + zxDataOtherItem* getConfigItemByField(QString sField); + +private slots: + + void on_listWidget_currentRowChanged(int currentRow); + void on_tbxFile_textChanged(const QString &arg1); + + void on_btnFile_clicked(); + void on_btnRun_clicked(); + + void on_btnSave_clicked(); + void on_btnClose_clicked(); + +private: + + Ui::iWxDataAccessLoad *ui; + QStringList m_listField; + QMap m_mapData; + vecAccessItem m_vecAccessItem; + + //设置选择的数据显示框 + iWxDataShow* m_pWxShow; +}; diff --git a/Include/mGui/mGuiDataLoad/iWxDataLoad.h b/Include/mGui/mGuiDataLoad/iWxDataLoad.h new file mode 100644 index 0000000..987fe89 --- /dev/null +++ b/Include/mGui/mGuiDataLoad/iWxDataLoad.h @@ -0,0 +1,283 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiDataLoad_global.h" +#include "iWxPressError.h" + +namespace Ui { +class iWxDataLoad; +} + +class ZxTableView; +class ZxTableModel; +class ZxTableHeaderView; +class ZxPlot; +class iGuiPlot; +class ZxDataObject; +class ZxDataGaugeBase; + +class M_GUI_DATA_LOAD_EXPORT iWxDataLoad : public iDlgBase +{ + Q_OBJECT + +public: + + // 当前数据对应的类型 + enum DataLoadType + { + dtPressure = 0, //压力数据 + dtFluid, //流量 + dtAuto, //自动判断 + dtUnkown // + }; + + // 加载数据时时间格式 + enum DateTimeMode + { + DTM_Value_FromStart = 0,//相对时间,从0开始一直持续时间 + DTM_Value_Duration, //相对时间,每一段持续时间,如流量 + DTM_Real_Time, //真实时间格式 + DTM_Real_DateTime, //日期时间格式 + DTM_Real_Date, //日期 几乎不常用 + DTM_Unknown + }; + + +public: + explicit iWxDataLoad(DataLoadType oType, bool bFixWellName = false, QWidget *parent = 0); + ~iWxDataLoad(); + +private: + + // 初始化 + void initTitle(); // + void initUI(); + + // 初始化各个子布局 + void initUI_SubAreas(); + QWidget* initUI_Tags(); + QWidget* initUI_Grids(); + QWidget* initUI_Charts(); + void intUiBtns(); + void initWells(); + void initUnits(); + void initDataTag(); + QString getDefaultTag(bool bF); + +private: + + // 加载解析 + bool loadFromFile(QString sFile, QString& sLog); + //bool loadFromClipboard(QString& sLog); + + // 配置目标标题 + void initTargetTitles(); + + // 调用默认,配置表头 + void initDefaultTableTitles(); + // 如果既有日期、又有时间列,则自动判断调整日期格式 + void checkDateTimeSeparated(); + // s是文件中解析出来的,查找其模糊匹配的目标title的中索引 + int findMuzzIndex(QString s, QStringList &listKeys); + + // 位置索引 + int indexOfStrList(QString s, const QStringList& list); + + // 获取表格第一行的第n列的数据 + QStringList getFirstRowCellOf(QVector listIndexes); + + bool checkStartDt(); + bool checkDataTag(bool bF); + + // 检测时间格式,并根据当前数据进行细微调整 + bool fuzzyFormatDT(QString& sFormatDT, \ + QString& sFormatD, QString& sFormatT, \ + int nIndexT1, int nIndexT2); + VecInt splitDtValue(QString s); + + + // 获取当前的两列数据 + QByteArray sumCurData(VVecVariant& vvec, int nSample, \ + int nIndexT1, int nIndexT2, int nIndexD); + VVecVariant getFilteredData(); + int getDataRowStep(int nCount); + + bool writeDataLog(VVecVariant& vvec, int index, + int& nIndexD, int& nIndexT1, int& nIndexT2); + + // s11,s12===TopRow, s21,s22====CurrentRow + QDateTime parseValueDtX(QString s1, QString s2, \ + QString sFormatDT, \ + QString sFormatD, QString sFormatT); + + // 起始终止行数 + void filterByFromTos(VVecVariant& vvec); + //压力数据时间矫正 + void correctPressTime(ePressError eType, + QVector vecTableRowState, + VecFloat& vecX, + VecFloat& vecY); + void correctlgNew(QVector vecTableRowState, VVecVariant& vvec); + void correctlgOld(QVector vecTableRowState, VVecVariant& vvec); + void correctJump(QVector vecTableRowState, VVecVariant& vvec); + + // 当表格数据改变后刷新 + void freshByTableChanged(); + + // 根据当前表头进行绘图 + bool refreshCharts(); + + // 处理起始时间、单位等等 + void dealWithStartTime(); + void dealWithUnits(VecFloat& vecX, VecFloat& vecY); + void convertValueByUnit(QString sOld, QString sNew, VecFloat &vec); + + void adjustFlowRates(VecFloat& vecX, VecFloat& vecY); + + // 如果当前的已经被选中,则清除原先选中 + void dealPrevSameColAuto(int n, QString s); + // 如果当前还有一个没有选择,则自动选择 + void dealLastColAuto(int n, QString s); + + // 获取表头位置索引 + bool getTitleIndexes(int& nIndexD, int& nIndexT1, int& nIndexT2); + // 获取绘图时的XY轴标题 + bool getTitleOfAxisXY(QString& sNameX, + QString& sNameY, + QString& sUnitX, + QString& sUnitY); + + void freshFromTos(); + + // 当前表格数据存入数据库 + bool saveData(); + + // 执行与实现 + void runLoad(); + void fillExcelSheets(); + + void runByTableColSelection(const int, const QString); + + bool checkData(VecFloat& vecX, VecFloat& vecY); + + +private slots: + + // 各个按钮 + void on_btnRun_clicked(); + + void on_btnFile_clicked(); + void on_btnDatabase_clicked(); + + void on_btnOK_clicked(); + void on_btnApply_clicked(); + void on_btnCancel_clicked(); + +private slots: + + // 来源模式改变 + void slotRadioGroupSrcClicked(int index); + + // 选择改变时响应 + void slotSelChanged(const int, const QString); + + // 点击下拉表头前,刷新下拉项的状态 + void slotOnGetColumnItems(int nIndex); + + // 日期模式 + void on_cbxDtFormat_currentIndexChanged(const QString &arg1); + void on_cbxDateTimeSeparated_clicked(); + void on_cbxFormat_currentIndexChanged(const QString &arg1); + + + // 其它消息 + void on_tbxFile_textChanged(const QString &arg1); + void on_cbxExcelSheets_currentIndexChanged(const QString &arg1); + void on_cbxTimeUnit_currentIndexChanged(const QString &arg1); + void on_cbxValueUnit_currentIndexChanged(const QString &arg1); + + // 拖拽支持 + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent* event); + + // 重载函数 + void keyPressEvent(QKeyEvent* e); + + void on_cbxUseCodec_clicked(); + + // 表格改变 + void slotTableCellChanged(const QModelIndex&, const QModelIndex&); + void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + + // 起始行终止行 + void on_sbxRowFrom_valueChanged(int arg1); + void on_sbxRowTo_valueChanged(int arg1); + + + // 这是允许外界对粘贴板内容进行解析,解析为二维表格数据 + void slotParseContents(const QString& s, VVecVariant& vvec); + + void on_cbxAutoThinning_clicked(); + + void slotCellDbClicked(QModelIndex index); + + void slotColInserted(int nFrom, int nCount); + void slotColRemoved(int nFrom, int nCount); + + void on_radioStepForward_clicked(); + + void on_radioStepPost_clicked(); + +signals: + + // PF数据保存成功后,触发 + // p本身包括了WellCode,是否Pressure等信息 + void sigPfObjSaved(ZxDataGaugeBase* p); + +private: + + Ui::iWxDataLoad *ui; + + // 布局载体 + QTextEdit* m_pTbxDataDesc; + ZxTableView* m_pTableView; + ZxTableHeaderView* m_pTableHeaderView; + + // 图形数据 + ZxPlot* m_pPlot; + iGuiPlot* m_pWxPlot; + + // 加载数据后解析解出来 + QString m_sHeaders; //顶部文件说明信息 + QStringList m_listTitles; //顶部单位和标题 + QStringList m_listUnits; + VVecVariant m_vvecData; //数据原始 + + // 表格数据 + QStringList m_listTableTitles; //表上显示的标题,可以为空 + QStringList m_listTargetTitles; + QStringList m_listKeyTitles; + + // 数据类,压力或流量 + DataLoadType m_oType; + // 数据类的时间格式 + DateTimeMode m_oDtm; + + // 当前拖拽为正确的格式 + bool m_bDraging; + + // 空标志 + QString m_sTagNull; + + // LastError + QString m_sLastError; + + // 限制井名 + bool m_bFixWellName; + + // 空白表格数据 + VVecVariant m_vvecDefaults; + + QDateTime m_dtInitStart; +}; diff --git a/Include/mGui/mGuiDataLoad/iWxDataShow.h b/Include/mGui/mGuiDataLoad/iWxDataShow.h new file mode 100644 index 0000000..520c266 --- /dev/null +++ b/Include/mGui/mGuiDataLoad/iWxDataShow.h @@ -0,0 +1,58 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiDataLoad_global.h" +#include "ZxDataOtherItem.h" + +class M_GUI_DATA_LOAD_EXPORT iWxDataShow : public iDlgBase +{ + Q_OBJECT + +public: + + iWxDataShow(QWidget *parent = 0); + iWxDataShow(vecAccessItem vecItem, + bool IsOher = false, + int nNum = 3, + QWidget *parent = 0); + ~iWxDataShow(); + + // 传递参数及Items + void setBasicInfos(vecAccessItem vecItem, \ + bool IsOher = false, \ + int nNum = 3); + + //填充数据 + void fillData(QStringList listField, VecVariant vecData); + + //初始化 + virtual void initUI(); + +private: + + //添加所有的字段及数据项 + void addWxUI(); + + //找字段对应的位置 + bool getNdexByField(QString s, QStringList listField, int& ndex); + + //添加每一项 + void addWxItemUI(QGridLayout* pGridLayout, int nRow, int nCol, + zxDataOtherItem* pItem); + // + void fillEditByType(QString sField, QLineEdit* pEdit, QVariant var); + +private: + + //布局 + QVBoxLayout* m_pMainLayout; + //item + vecAccessItem m_vecItem; + //数据填写 + QVector m_vecEdit; + //总列数 + int m_nNum; + //是否仅仅显示Other的数据 + bool m_bShowOtherOnly; +}; diff --git a/Include/mGui/mGuiDataLoad/iWxPressError.h b/Include/mGui/mGuiDataLoad/iWxPressError.h new file mode 100644 index 0000000..b3c391f --- /dev/null +++ b/Include/mGui/mGuiDataLoad/iWxPressError.h @@ -0,0 +1,30 @@ +#pragma once + +#include "iDlgBase.h" +#include "mGuiDataLoad_global.h" + +namespace Ui { +class iWxPressError; +} + +enum ePressError +{ + PE_IgNew, + PE_IgOld, + PE_Jump, + PE_UnKown +}; + +class M_GUI_DATA_LOAD_EXPORT iWxPressError : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxPressError(QWidget *parent = 0); + ~iWxPressError(); + + ePressError getPressError(); +private: + Ui::iWxPressError *ui; +}; + diff --git a/Include/mGui/mGuiDataLoad/mGuiDataLoad_global.h b/Include/mGui/mGuiDataLoad/mGuiDataLoad_global.h new file mode 100644 index 0000000..4277b55 --- /dev/null +++ b/Include/mGui/mGuiDataLoad/mGuiDataLoad_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(M_GUI_DATA_LOAD_LIBRARY) +# define M_GUI_DATA_LOAD_EXPORT Q_DECL_EXPORT +#else +# define M_GUI_DATA_LOAD_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/mGui/mGuiJob/iJobRun.h b/Include/mGui/mGuiJob/iJobRun.h new file mode 100644 index 0000000..ef9359b --- /dev/null +++ b/Include/mGui/mGuiJob/iJobRun.h @@ -0,0 +1,98 @@ +#pragma once + +#include +#include + +#include "IxSerDes.h" +#include "ZxXpf.h" +#include "ZxSerializer.h" + +#include "Defines.h" +#include "ZxBaseUtil.h" + +#include "mGuiJob_global.h" + +class ZxDataWell; +class ZxDataJobInfo; +class ZxDataJobRun; + +class ZxSegmentInfo; +class iPseu3Wrapper; +class iPseuCWrapper; +class iModelOption; + +class iWxBase; + +class M_GUI_JOB_EXPORT iJobRun : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + explicit iJobRun(); + ~iJobRun(); + + // 初始化、刷新UI + virtual void init(); + virtual void refresh(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 为了速度,而增加的特殊处理 + virtual void ensureLoaded(); + void setLoaded(bool b); + bool saveBasicAsByteArr(QByteArray& v); + bool loadLoadFromByteArr(QByteArray& v); + QString getTestType(); + QString getFluidOption(); + bool isPhaseS(); + +public: + + virtual void setDataWell(ZxDataWell* p); + virtual void setDataJobInfo(ZxDataJobInfo* p); + virtual void setDataJobRun(ZxDataJobRun* p); + + // 组织其基础信息,为了展示到表格中 + bool getBaseInfos(VecVariant& vec, int nColCount); + + bool getMpParaValues(QStringList listParas, QMap& map); + + // 根据当前的模型情况进行配置拟压力相关,调用该函数前已经确保是GAS + // initPs是否初始化,如果不是,则只设置ps3 + // 如果pModelOption不为空,则根据pModelOption设置ps3模式, + // 否则: + // bSetPs3ModeBySelf为true时,根据this设置ps3模式 + // 对于IPR对话框,需要根据Job类型直接设置,对于其它不能设置 + bool configPsAbouts(bool initPs, iModelOption* pModelOption, bool bSetPs3ModeBySelf = false); + bool isPs3Valid(); + bool isPsCValid(); + +public: + + iWxBase* getWxDataOf(int n); + + // 与数据库对应的真实数据 + ZxDataJobInfo* getDataJobInfo(); + ZxDataJobRun* getDataJobRun(); + + QString getJobId(); + +private slots: + +private: + // 参与序列化:分别为 Basic、Fluid、(GasConst) + QVector m_vecWxDatas; + + // 与数据库对应的真实数据(外界传入,本类不进行创建释放维护) + ZxDataWell* m_pDataWell; + ZxDataJobInfo* m_pDataJobInfo; + ZxDataJobRun* m_pDataJobRun; + + // 为了速度而增加 + bool m_bLoaded; + QStringList m_listBasicInfos; +}; diff --git a/Include/mGui/mGuiJob/iPseu3Wrapper.h b/Include/mGui/mGuiJob/iPseu3Wrapper.h new file mode 100644 index 0000000..933e0fd --- /dev/null +++ b/Include/mGui/mGuiJob/iPseu3Wrapper.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include + +#include "IxSerDes.h" +#include "ZxXpf.h" +#include "ZxSerializer.h" +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "mGuiJob_global.h" + +class iPseudo3Info; + +// 三区拟压力设置相关的序列化载体 +class M_GUI_JOB_EXPORT iPseu3Wrapper : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + iPseu3Wrapper(); + iPseu3Wrapper(const iPseu3Wrapper &other); + ~iPseu3Wrapper(); + + // 初始化、刷新UI + virtual void init(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + void setInfos(const VVecDouble& vvec, \ + const QMap& mapPsInfos, \ + const QMap& mapOthers); + QMap* getPsInfoPtrs(); + QMap* getOtherPtrs(); + VVecDouble getDataXY(); + + // 是否有效的三区配置 + bool isPs3Valid(); + + iPseu3Wrapper* clone(); + +private: + // ByteArray map,序列化的另类实现 + bool thisToBa(QByteArray& ba); + bool baToThis(QByteArray& ba); + +private slots: + +private: + VVecDouble m_vvecDataXY;//size()==2,一列x一列y + QMap m_mapPsInfos; + QMap m_mapOthers; +}; diff --git a/Include/mGui/mGuiJob/iPseuCWrapper.h b/Include/mGui/mGuiJob/iPseuCWrapper.h new file mode 100644 index 0000000..81cb858 --- /dev/null +++ b/Include/mGui/mGuiJob/iPseuCWrapper.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include + +#include "IxSerDes.h" +#include "ZxXpf.h" +#include "ZxSerializer.h" +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "mGuiJob_global.h" + +class iPseudoCInfo; + +// 三区拟压力设置相关的序列化载体 +class M_GUI_JOB_EXPORT iPseuCWrapper : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + iPseuCWrapper(); + iPseuCWrapper(const iPseuCWrapper &other); + ~iPseuCWrapper(); + + // 初始化、刷新UI + virtual void init(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + void setInfos(const VVecDouble& vvec, \ + const QMap& mapPsInfos, \ + const QMap& mapOthers); + QMap* getPsInfoPtrs(); + QMap* getOtherPtrs(); + VVecDouble getDataXY(); + + // 是否有效的三区配置 + bool isPsCValid(); + + iPseuCWrapper* clone(); + +private: + // ByteArray map,序列化的另类实现 + bool thisToBa(QByteArray& ba); + bool baToThis(QByteArray& ba); + +private slots: + +private: + VVecDouble m_vvecDataXY;//size()==2,一列x一列y + QMap m_mapPsInfos; + QMap m_mapOthers; +}; diff --git a/Include/mGui/mGuiJob/iWxBase.h b/Include/mGui/mGuiJob/iWxBase.h new file mode 100644 index 0000000..1d73835 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxBase.h @@ -0,0 +1,98 @@ +#pragma once + +#include "iDlgBase.h" +#include "mGuiJob_global.h" +#include "iResultInfo.h" + +class iParaItemCtrl; +class ZxDataWell; +//class iResultInfo; + +class M_GUI_JOB_EXPORT iWxBase : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxBase(QWidget *parent = 0); + ~iWxBase(); + +public: + + // 初始化 + virtual void initUI(); + virtual void setDataWell(ZxDataWell* p); + + virtual QVector* getVecParaCtrls(); + + // 组织结果数据,注:vec不进行clear,由调用方自行clear + virtual bool organizeResults(QVector& vec, QString sType); + virtual bool organizeResultsEx(QStringList& listTags, + QStringList& listValues, + QString sType, + bool bClear = false); + // 与序列化关联 + virtual bool saveAsByteArr(QByteArray& v); + virtual bool loadFromByteArr(QByteArray& v); + +public: + + // 建立某参数的Layout,考虑单位控件 + virtual iParaItemCtrl* createParaCtrl(QString sPara, + bool bUnitEditable = true, + bool bShowScale = false, + bool bStrench = true, + VecInt* pVecStrenchRatios = NULL, + int nSpacing = 4, + int nMarginL = 20, + int nMarginR = 20); + + // 在pCtrl InitUI之前允许部分调整,如参数跟着模型走的调整 + //virtual void adjustParaInfos(iParameter* pParameter); + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, double d); + virtual bool getParaValue(QString sPara, double& d); + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + virtual bool getAllParaValuesUnit(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + +signals: + // 当参数改变时触发,通知后续窗体 + void sigParasChanged(QMap& map); + + // 返回Jog标识 + void sigGetJogTag(QString& s); + +public slots: + + virtual void slotGetJobTag(QString& s) { Q_UNUSED(s); } + // 当前面窗体参数改变时,本窗体响应 + virtual void slotParasObtained(QMap& map); + + // 响应ParaCtrl数据的改变 + virtual void slotParaCtrlValueChanged(QString sPara, QVariant o); + +protected: + virtual void paintEvent(QPaintEvent *); + + // 绘制Log + virtual void drawLogInfo(QPainter* painter); + + // 从当前井获取该参数的数值 + bool getValueFromCurWell(QString sPara, QVariant& o); + +protected: + + // 对于单位类的控件进行管理 + QVector m_vecParaCtrls; + + // 当前井 + ZxDataWell* m_pDataWell; + + // 默认的存储路径,外部传递过来 + //QString m_sJobTag; +}; diff --git a/Include/mGui/mGuiJob/iWxDataBasic.h b/Include/mGui/mGuiJob/iWxDataBasic.h new file mode 100644 index 0000000..2841a09 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxDataBasic.h @@ -0,0 +1,143 @@ +#pragma once + +#include "iWxBase.h" +#include "mModuleDefines.h" + +class ZxTableModel; +class M_GUI_JOB_EXPORT iWxDataBasic : public iWxBase +{ + Q_OBJECT + +public: + + explicit iWxDataBasic(QWidget *parent = 0); + ~iWxDataBasic(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser);// + virtual void onDeserialize(ZxSerializer* ser); + + // 组织结果数据,注:vec不进行clear,由调用方自行clear + virtual bool organizeResults(QVector& vec, QString sType); + bool organizeResults_TV(QVector& vec, QString sType); + + virtual void initUI(); + void setDataLayers(VVecVariant& vvec); + + // 标题标识 + void setJobName(QString s); + QString getJobName(); + // 测试类型 + QString getTestType(); + PvtTestType getTestTypeEx(); + // 井半径 + float getWellR(); + // 井间距离 + float getInterferenceDis(); + // 获取选中的层参数,支持多层 + VVecVariant getLayerParameters(); + // 流体性质 + QString getFluidOption(); + bool isPhaseS(); + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, double d); + virtual bool getParaValue(QString sPara, double& d); + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + //Pseudo + void setMapParaBasic(QMap map); + QMap getMapParaBasic(); + + void simuFluidMainChange(); + //void simuJobTagChange(); + + + //不显示标题 + void setTagShow(bool bShowTag); + +signals: + + void sigFluidTypeChanged(QString s); +// void sigJobTagChanged(QString s); + +public slots: + + virtual void slotGetJobTag(QString& s); + +private slots: + + void slotFluidMainChanged(QString s); + void slotPhaseTypeChanged(); + void slotTestTypeChanged(); +// void slotJobTagChanged(); + + // 表格 + void slotTableCellChanged(const QModelIndex&, const QModelIndex&); + void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + +public: + +// // 序列化 +// virtual void onSerialize(ZxSerializer* ser); +// virtual void onDeserialize(ZxSerializer* ser); + void runLayerDataChanged(); + +private: + + // 初始化 + void initBase(); + void initUI_TestType(); + void initUI_FluidType(); + void initUI_Layers(); + QHBoxLayout* initUI_Tags(); + + // 初始储层数据获取 + VVecVariant initLayerData(); + // 相变化 + void runPhaseTypeChanged(bool bByTestType = false); + + // 刷新图chart + void refreshBy(QRadioButton* p); + +protected: + + virtual void paintEvent(QPaintEvent *); + +private: + + // GroupBox + QGroupBox* m_pGbxTestType; + QGroupBox* m_pGbxFluidType; + QGroupBox* m_pGbxLayerParas; + + QRadioButton* m_pRadioPhaseS; + QRadioButton* m_pRadioPhaseM; + QComboBox* m_pCbxFluidType; + + // 测试类型 + QRadioButton* m_pRadioStandard; + QRadioButton* m_pRadioInterference; + QRadioButton* m_pRadioMiniFrac; + + // 标题 + QLineEdit* m_pTbxTag; + //ZXF不布局标题试井设计中不需要标题 + bool m_bShowTag; + + // 储层数据 + ZxTableModel* m_pDataModel; + VecVariant m_vecRawRowData; + + // 储层参数列,含 储层名称 + QStringList m_listResParas; + QStringList m_listResParaCHs; + QStringList m_listResUnits; + VecInt m_vecDigits; + + //Pseudo 为了把地层压力传给FluidSub + QMap m_mapBasicPara; +}; diff --git a/Include/mGui/mGuiJob/iWxDataFluid.h b/Include/mGui/mGuiJob/iWxDataFluid.h new file mode 100644 index 0000000..eec1ae8 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxDataFluid.h @@ -0,0 +1,59 @@ +#pragma once + +#include "iWxBase.h" +#include "iWxDataFluidSub.h" + +class M_GUI_JOB_EXPORT iWxDataFluid : public iWxBase +{ + Q_OBJECT + +public: + explicit iWxDataFluid(QWidget *parent = 0); + ~iWxDataFluid(); + + virtual void initUI(); + void setCurrentFluid(QString sFluid); + void setPhaseS(bool b); + + // Gas自动弹出模式 + void setAutoShow(bool b); + void changedAutoShow(); + + virtual QVector* getVecParaCtrls(); + + // 组织结果数据,注:vec不进行clear,由调用方自行clear + virtual bool organizeResults(QVector& vec, QString sType); + + //Pseudo + void setMapParaFromBasic(QMap map); + QMap getMapParaFromBasic(); + + virtual void copyFrom(ZxUiBase* p); + iWxDataFluidSub* getSubChildWx(int n); + +public: + + int getCurSubIndex(); + iWxDataFluidSub* getCurSubWx(); + void copyFrom(iDlgBase* pFrom); + bool getMpParaValues(QStringList listParas, QMap& map); + + // 当前面窗体参数改变时,本窗体响应 + virtual void slotParasObtained(QMap& map); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private: + +protected: + virtual void paintEvent(QPaintEvent *); + +private: + QStackedWidget* m_pStackedWidget; + bool m_bAutoShow; //不序列化 + + //Pseudo + QMap m_mapParaFromBasic; +}; diff --git a/Include/mGui/mGuiJob/iWxDataFluidSub.h b/Include/mGui/mGuiJob/iWxDataFluidSub.h new file mode 100644 index 0000000..1badf55 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxDataFluidSub.h @@ -0,0 +1,98 @@ +#pragma once + +#include "iWxBase.h" + +namespace Ui { +class iWxDataFluidSub; +} + +class iWxPvtMain; +class iPseu3Wrapper; +class iPseudo3Info; +class iPseuCWrapper; +class iPseudoCInfo; +class M_GUI_JOB_EXPORT iWxDataFluidSub : public iWxBase +{ + Q_OBJECT + +public: + explicit iWxDataFluidSub(QString sFluid, QWidget *parent = 0); + ~iWxDataFluidSub(); + + virtual void initUI(); + + QString getFluid(); + + void setPhaseS(bool b); + bool getPhaseS(); + + // 启动Gas自动显示模式 + void runAutoShow(); + + // 拟压力模式 + VVecDouble getPseuData(); + iPseu3Wrapper* getPseuData3(); //三区 + iPseuCWrapper* getPseuDataC(); + + //Pseudo + void setMapParaFromFluid(QMap map); + QMap getMapParaFromFluid(); + + bool getMapParaValue(QString str, float& f); + + // 由于多相用的时候得顺序问题,故权宜之计 + bool getParaValueEx(QString sPara, float& f); + +public: + + void copyFrom(iDlgBase* pFrom); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private: + + void initAdvCtrls(); + void freshAdvCtrls(); + +protected: + virtual void paintEvent(QPaintEvent *); + +private slots: + + void on_cbxUseAdvanced_clicked(); + void on_btnCalSoSg_clicked(); //计算饱和度 + void on_btnCal3C_clicked(); //通过弹出PVT对话框计算压缩系数等 + void on_btnCalFinal_clicked(); //最终刷新计算 + + void slotPvtResultsChanged(QMap& map); + void slotPseudoResultsChanged(VVecDouble& vvec); + void slotPseudoResults3Changed(const VVecDouble& vvec, \ + const QMap& mapPsInfos, \ + const QMap& mapOthers); + void slotPseudoResultsCChanged(const VVecDouble& vvec, \ + const QMap& mapPsInfos, \ + const QMap& mapOthers); + +private: + Ui::iWxDataFluidSub *ui; + + QString m_sFluid; //油气水 + bool m_bPhaseS; //是否单相 + QStringList m_listParas; //参数项 + + // //Pseudo结果,四列 + // VecDouble vecP = vvec[0] + // VecDouble vecPs = vvec[1] + // VecDouble vecZg = vvec[2] + // VecDouble vecMug = vvec[3] + VVecDouble m_vvecPseuData;//原先VecPointF + iPseu3Wrapper* m_pPseu3Wrapper; //对于三区,采用数据体 + iPseuCWrapper* m_pPseuCWrapper; + + iWxPvtMain* m_pWxPvt; + + //Pseudo + QMap m_mapParaFromFluid; +}; diff --git a/Include/mGui/mGuiJob/iWxDataGasConst.h b/Include/mGui/mGuiJob/iWxDataGasConst.h new file mode 100644 index 0000000..61df93e --- /dev/null +++ b/Include/mGui/mGuiJob/iWxDataGasConst.h @@ -0,0 +1,91 @@ +#pragma once + +#include "iWxBase.h" + +class ZxTableModel; +class iXmlTable; +class iXmlField; +class ZxDataPvtInfo; +class M_GUI_JOB_EXPORT iWxDataGasConst : public iWxBase +{ + Q_OBJECT + +public: + explicit iWxDataGasConst(QWidget *parent = 0); + ~iWxDataGasConst(); + + virtual void initUI(); + +public: + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, double d); + virtual bool getParaValue(QString sPara, double& d); + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 20240716 去除该模式,可以查看先前代码进行分析 +// virtual bool savePvt(); +// virtual bool loadPvt(); +// virtual QString getFilePvt(bool bLoad); +// virtual ZxDataPvtInfo* getJobPVT(bool bLoad); + +public slots: + + // 组分范围判断 + void slotTextInputValueChanged(const QString &); + + // 校验组分是否100 + void slotVerifyCompo100(); + // 归一C1 + void slotVerifyDown(); + //同比例缩小 + void slotVerifyUp(); + + // 组分校验颜色 + void changeMarkClr(bool bByNormalC1 = false); + + // 是否满足组分100 + bool isCompo100(); + + // 最后对结果的验证,并弹出对话框 +// bool runFinalCheckWithTips(); + +private: + + void initUI_Sub(QGridLayout* pGridLayout, int iLayout, iXmlField *pField, int nCount); //组分 + void initOutputUI_Sub(QVBoxLayout*& pMainLayout);//组分界面 + + // 组分内容检测(仅仅是范围) + bool checkTextValueScale(QLineEdit* pSender = NULL); + // 组分综合是否100 + bool checkTextCompo100s(float &fSum, QLineEdit* pSender = NULL); + // 综合调用 + bool verifyInputOfComp(QLineEdit* pSender = NULL); + +protected: + virtual void paintEvent(QPaintEvent *); + +private: + + iXmlTable* m_pXmlDefine; + + // 组分相关 + bool m_bMergeMode; //是否合并模式,组分 + QCheckBox* m_pCbxAuto; + QCheckBox* m_pCbxLess100; + QLabel* m_pLabelClr; + QLineEdit* m_pSumCompo; + bool m_bNormalingC1; + float m_fSum; + QPushButton* m_pBtnDown; + QPushButton* m_pBtnUp; + + int m_nDigit; +}; diff --git a/Include/mGui/mGuiJob/iWxDataObjEdit.h b/Include/mGui/mGuiJob/iWxDataObjEdit.h new file mode 100644 index 0000000..4e5da37 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxDataObjEdit.h @@ -0,0 +1,113 @@ +#pragma once + +#include "iDlgBase.h" +#include "mGuiJob_global.h" + +class iParaItemCtrl; +class ZxDataObject; +class ZxDataWell; +class iXmlTable; +class iXmlField; +class M_GUI_JOB_EXPORT iWxDataObjEdit : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxDataObjEdit(QWidget *parent = 0); + ~iWxDataObjEdit(); + +public: + + // Title + void setTitle(QString s); + + // TableName + void setTableName(QString s); + + //返回数据体 + ZxDataObject* getObjData(); + + // Obj + virtual void setObj(ZxDataObject* p); + + // 模式 + void setEditMode(bool b); + + // 初始化 + virtual void initUI(); + + // 返回修改的标题,为了树刷新 + virtual QString getNodeName(); + +signals: + + // 当应用或保存成功时触发 + void sigObjDataChanged(VecVariant&, ZxDataObject*); + // 在井数据改变之前进行触发,以准备db文件之类 + void sigWellDataToChange(bool, VecVariant&, VecVariant&, ZxDataWell*); + +protected slots: + + void slotTbxEditingFinished(); + +// void slotApply(); + void slotSaveObj(); + void slotCancel(); + +private: + + // 初始化子项 + void initUI_Title(); + QLayout* initUI_Headers(); + QLayout* initUI_MainGrids(); + QLayout* initUI_Btns(); + + // 获取表格配置信息 + iXmlTable* findTableConfig(); + // 范围 + QString getScaleStrOf(iXmlField* p); + + // 根据表名创建一个对应Object的对象体 + ZxDataObject* createObjBy(QString sTableName); + + // 把Obj内容刷新至UI或者反之 + bool refreshVec2UI(VecVariant& vec); + bool refreshUI2Vec(VecVariant& vec); + bool findSubWxInfo(int nRow, QWidget*& pWx, iXmlField*& pF); + + // 获取所有的区块或者油田名称 + QStringList getFieldBlockNames(bool bBlock); + + // 输入检测 + bool checkInputs(); + bool checkInputs_WellName(); + bool isWellNameOk(QString s); + +protected: + + virtual void paintEvent(QPaintEvent *); + +protected: + + // 针对数据表 + QString m_sTableName; + iXmlTable* m_pXmlTable; + + // 两种传入模式 + // Obj + ZxDataObject* m_pObj; + // Data + VecVariant m_vecData; + + // 如果传入Obj或者ObjData,则为编辑模式,否则新建模式 + bool m_bEditMode; + + // Grid 临时变量,为了方便 + QGridLayout* m_pGridLayout; + + QLineEdit* m_pTbxWellCode; //权宜之计 + QLineEdit* m_pTbxWellName; + + VecInt m_vecHideCols; //隐藏的 + VecVariant m_vecHideValues; +}; diff --git a/Include/mGui/mGuiJob/iWxDataObjEditPF.h b/Include/mGui/mGuiJob/iWxDataObjEditPF.h new file mode 100644 index 0000000..ec7f65e --- /dev/null +++ b/Include/mGui/mGuiJob/iWxDataObjEditPF.h @@ -0,0 +1,48 @@ +#pragma once + +#include "iWxDataObjEdit.h" + +class iGuiPlotEx; +class ZxDataGaugeF; +class ZxDataGaugeP; +class ZxDataGaugeBase; +class ZxSegmentInfo; +class ZxDataObject; +class ZxDataWell; + +// 压力流量 +class M_GUI_JOB_EXPORT iWxDataObjEditPF : public iWxDataObjEdit +{ + Q_OBJECT + +public: + explicit iWxDataObjEditPF(QWidget *parent = 0); + ~iWxDataObjEditPF(); + + // Obj + virtual void setObj(ZxDataObject* p); + + virtual void initUI(); + virtual void runUpdate(); //刷新 + +public slots: + +public: + +protected: + + void refreshGraph(); + + virtual void paintEvent(QPaintEvent *); + +private: + + VVecFloat m_vvecGaugeData; + bool m_bPressure; + + iGuiPlotEx* m_pWxPlot; + + // Options控件 + QComboBox* m_pCbx; + ZxDataWell* m_pWell; +}; diff --git a/Include/mGui/mGuiJob/iWxModelOption.h b/Include/mGui/mGuiJob/iWxModelOption.h new file mode 100644 index 0000000..fe8319d --- /dev/null +++ b/Include/mGui/mGuiJob/iWxModelOption.h @@ -0,0 +1,131 @@ +#pragma once + +#include "iWxBase.h" + +//class iModelDesc; +class ZxPlot; +class iWxModelSketch; +class iModelOption; +class iModelInfoBase; + +namespace Ui { +class iWxModelOption; +} + +class M_GUI_JOB_EXPORT iWxModelOption : public iWxBase +{ + Q_OBJECT + +public: + explicit iWxModelOption(QWidget *parent = 0); + ~iWxModelOption(); + + // 初始化 + virtual void initUI(); +// void initUI_TopSpecial(QVBoxLayout*& pLayout); //该函数暂时不启用,后续可能需要重启 + void initUI_ModelListWxs(); + void initFromLasts(); + void initUI_ModelGridLines(QVector& vec, \ + QVBoxLayout* pLayout, \ + QString sType = ""); + + // 切换模型时刷新 + virtual void refreshBrothers(bool bfresh = true); + + // 组织结果数据,注:vec不进行clear,由调用方自行clear + virtual bool organizeResults(QVector& vec, QString sType); + + // 返回当前选中的 + iModelOption* getOption(); + + // 示意图绘图(多幅,弹出对话框) + virtual void showSketchCharts(); + + // FitModel之后改变一些状态 + void dealwithFitOption(iModelOption* p); + void changeListItem(QListWidget* pListWx, \ + QString sItem, QString sKey, \ + bool bSelectOnly = true); + + //得到聚合物中启动低渗的按钮状态 + bool getCbxStatePF(); + +protected: + + // 填充List + void fillListWx(QListWidget* pListWx, + QString sType, + bool bConsiderSpecial = false, + bool bIsSpecial = false); + + // 在切换时,先处理一下是否有 子 下拉选项 + bool dealwithSubCbx(QListWidget* pListWx, bool bUnableSP = false); + // 从当前选项的子选项中进行调整 + void adjustBySubCbx(QString sKey, QString& sCode, QString& sTag); + + // 界面数据到Option载体 + virtual void freshUi2Option(); + void _freshUiListWx2Option(QListWidget* pListWx, QString sKey); + void _freshUiCheckBox2Option(QCheckBox* pCbx, QString sKey); + + // 最近选用 + void freshUiByOpenRecents(); + void fillRecentModels(); + void refreshRecentModels(QString sModel); + void freshRecentItem2ListWxs(QString s); + +protected: + + virtual void paintEvent(QPaintEvent *); + +protected slots: + + // 模型选择 + virtual void slotModelOptionChanged(QString); + virtual void on_cbxSubWel_currentIndexChanged(const QString &arg1); + virtual void on_cbxSubRes_currentIndexChanged(const QString &arg1); + + // 各自的状态设定,复选框选项 + void slotCbxStateChangedLP(); + void slotCbxStateChangedPF(); + void slotCbxStateChangedSR(); + + // 筛选部分 + void on_btnFilter_clicked(); + void on_tbxFilter_textChanged(const QString &arg1); + + // 最近选用 + void on_listWxRecents_doubleClicked(const QModelIndex &index); + void on_cbxOpenRecents_clicked(); + void on_sbRecentCounts_valueChanged(int arg1); + +signals: + + // 模型切换信号 + void sigParasChangedEx(iModelOption* ); + + // 增加这个信号主要增加小信号的选择模式(目前小信号只比普通模式多一条线,增加信号,保证绘制时候出现) + void sigCbxStateChanged(bool bSmall); + + // 聚合物PF + void sigCbxStatePfChanged(bool bCheck); + +protected: + + Ui::iWxModelOption *ui; + + // 选择内容的载体 + iModelOption* m_pOption; + + // ListWidget Ctrls / CheckBox + QMap m_mapSubWxs; + + // 示意图 + iWxModelSketch* m_pWxSketch; +// iWxModelSketch* m_pWxTheory; //二者用的同一个窗体,暂未启用,后续考虑 + + // 临时变量,不涉及序列化 + QString m_sItemSub; + bool m_bRecentDbClick; + +}; diff --git a/Include/mGui/mGuiJob/iWxModelParameter.h b/Include/mGui/mGuiJob/iWxModelParameter.h new file mode 100644 index 0000000..c28b403 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxModelParameter.h @@ -0,0 +1,166 @@ +#pragma once + +#include "iWxBase.h" + +//class iModelDesc; +class iParameter; +class ZxTableView; +class iModelOption; +class iBdyInfo; +class iGridRowItem; +class iGridRowUtils; + +class M_GUI_JOB_EXPORT iWxModelParameter : public iWxBase +{ + Q_OBJECT + +public: + explicit iWxModelParameter(QWidget *parent = 0); + ~iWxModelParameter(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 初始化 + virtual void initUI(); + void initUI_HelpBox(); + + // 在pCtrl InitUI之前允许部分调整,如参数跟着模型走的调整 + // 包括: + // 1. 把原有的被特殊模型修改过的,重新矫正过来 + // 2. 调整特殊模型 + virtual void adjustParaInfos(iParameter* pParameter); + virtual void restoreParaInfos(iParameter* pParameter = NULL); //如果为空,则全部恢复 + + // 组织结果数据,注:vec不进行clear,由调用方自行clear + virtual bool organizeResults(QVector& vec, QString sType); + bool sortByShow(QVector& vec); + + // 返回所有的跟模型相关的边界参数的类型,封闭或定压 + // 封闭:0 + // 定压:1 + bool getBdyInfos(QMap& map); + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, double d); + virtual bool getParaValue(QString sPara, double& d); + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + virtual bool getAllParaUnits(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + // 模式设置 + void setDnMode(bool b); + + // 刷新 + virtual void refreshUIs(QStringList& listParas); + +protected: + + virtual void paintEvent(QPaintEvent *); + +signals: + //增加信号保证切换的时候,窗口中的参数显示与否的按钮初始化(即恢复到隐藏状态) + void sigWxImageInit(); + void sigIsAddBt(bool IsAdd); + +private slots: + + void slotShowParam(bool bHide); + +public : + // 当前面窗体参数改变时,本窗体响应 + virtual void slotParasObtained(QMap& map); + // 根据多相单相对右侧参数进行调整 + void setToMpMode(bool bMultiPhase); + + void freshParasByMap(QMap& mapOldValues); + +public slots: + virtual void slotParasObtainedEx(iModelOption* pOption); + + // 响应ParaCtrl数据的改变 + virtual void slotParaCtrlValueChanged(QString sPara, QVariant o); + + // help msg + virtual void slotHelpMsg(QString& s); + + // 外部控制 + void slotOuterValidate(QString sPara, QVariant o, bool& bValid, bool& bSet); + + /// @brief 响应属性页子参数列表改变,比如调用水平井段数编辑功能 + /// @param sSegName: (in) 基准参数,为英文标识,如流动段数:"Nq" + /// @param vvec: (in & out) 子参数数据, + /// 注意:key为英文,如"NqX","NqL","NqQ"之类,与xml配置文件严格对应 + /// @param dWellLen: (in) 水平井长度 + /// @param bModified: (out) 是否正确触发且vvec发生改变 + void slotSegItemMore(const QString sSegName, \ + QVector >& vvec, \ + const double dWellLen, \ + bool& bModified); + + + /// @brief 响应边界信息改变,比如修改平行边界,由上下改为左右 + /// @param pItem: (in) 当前的GroupItem,其实即是本类iGridRowGroupBdy + /// @param vvec: (in & out) 边界信息数据 + /// @param bModified: (out) 是否正确触发且vvec发生改变 + void slotBdyDetails(iGridRowItem* pItem, \ + QVector< iBdyInfo* >& vvec, \ + bool& bModified); + + +protected: + + //virtual void makesureListParas(QStringList& listParas); //对显示名称进行调整 + virtual void runParseOldVersion(QStringList& listParas, ZxSerializer* ser); + + QStringList checkTypes(); //类别 + + // 部分没有在xml配置的参数 + void appendParas_Inner(QStringList& listParas, \ + iModelOption* pOption); + // 井储参数 + void appendParas_Wbs(QStringList& listParas, \ + QString sWbs); + // 边界参数 + void appendParas_Bdy(QStringList& listParas, \ + QString sBdy); + + // 根据当前选中模型处理特殊参数 + void findSpecialParas(); + + //设置参数隐藏 + void setSpecialParasHide(bool &IsAdd); + +protected: + + // 布局器 + QVBoxLayout* m_pMainLayout; + + QStringList m_listParas; + iGridRowUtils* m_pGridItemUtils; + + // 临时,不序列化 + QStringList m_listParaTags; + + // 临时 + QString m_sSerie; + QString m_sWbs; + QString m_sWel; + QString m_sRes; + QString m_sBdy; + + // 满足当前模型条件的特殊的Parameter + QVector m_vecSpecialParas; + + bool m_bDnMode; + + bool m_bMultiPhase; + + // Help + QTextEdit * m_pHelpBox; +}; diff --git a/Include/mGui/mGuiJob/iWxModelParameterEx.h b/Include/mGui/mGuiJob/iWxModelParameterEx.h new file mode 100644 index 0000000..bfd1702 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxModelParameterEx.h @@ -0,0 +1,75 @@ +#pragma once + +#include "iWxModelParameter.h" +class ZxObjBase; +class ZxObjWmPoint; +class iGridRowItem; +class M_GUI_JOB_EXPORT iWxModelParameterEx : public iWxModelParameter +{ + Q_OBJECT + +public: + explicit iWxModelParameterEx(QWidget *parent = 0); + ~iWxModelParameterEx(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void initUI(); + virtual void initUI_M(); + void initUI_M_Name(); + void initUI_M_Types(); + + // 刷新至选中的Obj + void fresh2Obj(ZxObjBase* p, bool bPtsOnly); + +protected: + + // 刷新至选中的Obj,分项处理 + void fresh2Obj_Name(ZxObjWmPoint* p); + void fresh2Obj_Type(ZxObjWmPoint* p); + void fresh2Obj_Paras(ZxObjWmPoint* p); + + // 刷新 + virtual void refreshUIs(QStringList& listParas); + + // 在pCtrl InitUI之前允许部分调整 + virtual void adjustParaInfos(iParameter* pParameter); + + // 响应ParaCtrl数据的改变 + virtual void slotParaCtrlValueChanged(QString sPara, QVariant o); + + virtual void slotFreshBrotherParasOf(QString sParaBy); + + // TODO函数全盘拷贝,由于引用关系,暂时未处理 + int getWellTypeOf(QString s); + +public slots: + + // 当前面窗体参数改变时,本窗体响应 + virtual void slotParasObtained(QMap& map); + + void slotTypeCurrentChanged(QString s); + void slotWellNameChanged(QString s); + + // 参数区增加井名井型 + //void slotAddWellAboutItems(QVector&); + +protected: + + virtual void paintEvent(QPaintEvent *); + +protected: + + QVBoxLayout* m_pLayoutM; + QVBoxLayout* m_pLayoutP; + + QLineEdit* m_pTbxName; + QComboBox* m_pCbxTypes; + + ZxObjBase* m_pObj; + QStringList m_listTypes; + + iGridRowUtils* m_pGridItemUtilsEx; +}; diff --git a/Include/mGui/mGuiJob/iWxModelScan.h b/Include/mGui/mGuiJob/iWxModelScan.h new file mode 100644 index 0000000..0067554 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxModelScan.h @@ -0,0 +1,58 @@ +#pragma once + +#include "iWxModelOption.h" + +class ZxPlot; +class iWxModelSketch; +class iModelOption; +class iModelInfoBase; + +namespace Ui { +class iWxModelScan; +} + +class M_GUI_JOB_EXPORT iWxModelScan : public iWxModelOption +{ + Q_OBJECT + +public: + explicit iWxModelScan(QWidget *parent = 0); + ~iWxModelScan(); + + virtual void initUI(); + void hideBtns(); + +protected: + virtual void paintEvent(QPaintEvent *); + virtual void resizeEvent(QResizeEvent *e); + + // 界面数据到Option载体 + virtual void freshUi2Option(); + // 填充TableWx + void fillTableWx(QTableWidget* pTableWx, QString sType); + void fillTableWxOneCell(QTableWidget* pTableWx, int r, iModelInfoBase* p); + void drawOneCell(QLabel* p, QString sImg); + void resizeTableWx(QTableWidget* p); + +private slots: + + void on_btnOK_clicked(); + void on_btnApply_clicked(); + void on_btnCancel_clicked(); + + void on_cbxApplyTo_currentIndexChanged(const QString &arg1); + +protected slots: + virtual void slotModelOptionChanged(QString s); + +private: + void initUI_Cbxs(); + void initUI_ListWxs(); + void initUI_TableWxs(); + + void freshTableWxBy(QListWidget* pListWx); + void freshSketBy(QListWidget* pListWx); + +private: + Ui::iWxModelScan *ui; +}; diff --git a/Include/mGui/mGuiJob/iWxModelSketch.h b/Include/mGui/mGuiJob/iWxModelSketch.h new file mode 100644 index 0000000..1249cc7 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxModelSketch.h @@ -0,0 +1,63 @@ +#pragma once + +#include "iDlgBase.h" +#include "mGuiJob_global.h" + +class iModelOption; + +// 模型示意图 +class M_GUI_JOB_EXPORT iWxModelSketch : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxModelSketch(bool bTheoryChart, QWidget *parent = 0); + ~iWxModelSketch(); + +public: + + // 当前选项 + void setOptions(iModelOption* pOption); + + // 初始化 + virtual void initUI(); + + // 刷新 + virtual void refresh(); + +protected: + + // 初始化 + void initUISketchMode(); + + // 刷新绘图 + void refreshSketchChart(int nCol = -1); //如果-1则全部 + + void fillCbx(QComboBox* p, int nCol); + + // 绘图 + void drawOneChart(QLabel* p, QString sImg); + + virtual void paintEvent(QPaintEvent *); + +signals: + +public slots: + + // 模型选项改变,然后刷新相应的辅助信息 + void slotOptionChanged(QString); + + // 设置透明用(目前只在绘制 理论曲线 时才应用) + void slotSliderValueChanged(int nValue); + +protected: + + iModelOption* m_pOption; //外界传入 + bool m_bTheoryChart; + + QString m_sWbs; + QString m_sRes; + QString m_sWel; + QString m_sBdy; + +}; diff --git a/Include/mGui/mGuiJob/iWxParam.h b/Include/mGui/mGuiJob/iWxParam.h new file mode 100644 index 0000000..60f3b85 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxParam.h @@ -0,0 +1,66 @@ +#pragma once + +#include +#include +#include +#include "mGuiJob_global.h" + +#define s_Image_Deploy "Deploy" +#define s_Image_Fold "Fold" + +//主要是为了切换图片 +class M_GUI_JOB_EXPORT ZxImage +{ +public: + ZxImage() + { + m_sName = s_Image_Deploy; + } + void loadImage(); +public: + QImage m_pImage; + QString m_sName; +}; + +//对话框左下角添加按钮响应 +class M_GUI_JOB_EXPORT iWxParam : public QWidget +{ + Q_OBJECT + +public: + explicit iWxParam(bool bNovelQss, QWidget *parent = 0); + ~iWxParam(); + + float getBtWidth(); + float getBtHight(); + +protected: + virtual void paintEvent(QPaintEvent *); + + virtual void resizeEvent(QResizeEvent *); + virtual void mouseMoveEvent(QMouseEvent *mouseEvent); + virtual void mousePressEvent(QMouseEvent *mouseEvent); + virtual void leaveEvent(QEvent *e); + +signals: + void sigShowParam(bool IsShow); +private slots: + void slotWxImageInit(); + void slotIsAddBt(bool IsAdd); +protected: + + //矩形框大小 + QRect m_BtRect; + + //矩形框的宽和高 + float m_fWidth; + float m_fHight; + + //是否选中 + bool m_bSelect; + + ZxImage m_pZxImage; + + //是否添加按钮 + bool m_bAddBt; +}; diff --git a/Include/mGui/mGuiJob/iWxResult.h b/Include/mGui/mGuiJob/iWxResult.h new file mode 100644 index 0000000..1938328 --- /dev/null +++ b/Include/mGui/mGuiJob/iWxResult.h @@ -0,0 +1,121 @@ +#pragma once + +#include "iWxBase.h" +#include "iResultInfo.h" +#include "ZxTextEdit.h" + +namespace Ui { +class iWxResult; +} + +class M_GUI_JOB_EXPORT iWxResult : public iWxBase +{ + Q_OBJECT + +public: + explicit iWxResult(QWidget *parent = 0, \ + int nVisibleTabItem = -1); + ~iWxResult(); + + virtual void initSheets(); //Sheet + virtual void initUI(); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 这是显示的数据(详细Tab页)中的标题 + // 而不是iWxResult本身的标题 + void setTitle(QString s); + +public: + + // 返回TextEdit指针 + QTextEdit* getTbxSimle(); + QTextEdit* getTbxAll(); + QTextEdit* getTbxTemp(); + + // 传入数据 + void freshResults(QVector& vecResults); + //ZXF20240625 模型参数更新 + void freshParams(QVector& vecResults); + + // 追加式传入数据,放在Temp的Tab页 + void freshResult_t(QStringList listInfo, bool bWarning = false); + void clearResult_t(); + // _o oneTab版 + void freshResults_o(QVector& vecResults); + void clearResult_o(); + + // 结果对比调用,非常复杂 + void freshResults_ResCp(QStringList& listTags, + QVector >& vvecInfosM, + QVector >& vvecInfosP, + QVector >& vvecInfosC); + + // 填表 + void _fillTableWith(QTextTable *pTableWx, \ + QVector >* pVVec, \ + bool bChart); + QString _getRandomType(QVector >* pVVec); + + // 显示隐藏Tab + void setTabItemVisible(int n, bool bVisible); + +private slots: + + void slotCustomMenu(QMenu* pMenu); + +private: + + // 传入数据,刷新 + // _s 简易版 + // _c详细版 + void freshResults_s(QVector& vecResults); + void freshResults_c(QVector& vecResults); + + // 解析得到类别 + QStringList parseTypes(QVector & vec, bool bSimpleMode = false); + + // 显示相关 + void displayText(QTextCursor& cursor, + QString s, + Qt::AlignmentFlag oAln = Qt::AlignHCenter, + bool bBold = false, + bool bReturn = true, + bool bWarning = false); + QTextTable* createTableWithHeaders(QTextCursor& cursor, \ + QStringList listTitles, \ + bool bSimpleMode = false); + void displayTableHeaders(QTextTable* &pTableWx, \ + QStringList listTitles); + // n = 0: s 1:c 2:o + void displayOneRow(QTextTable* &pTableWx, \ + iResultInfo o, \ + int n = 0); + +protected: + + virtual void paintEvent(QPaintEvent *); + +private slots: + + // 打印 + void slotPrintResult_s(); + void slotPrintResult_c(); + void slotPrintResult_t(); + void _printResultsOf(QTextEdit* p); + +private: + Ui::iWxResult *ui; + + // 这是显示的数据(详细Tab页)中的标题 + // 而不是iWxResult本身的标题 + QString m_sResTitle; + + // 这是对Tab显示与隐藏的控制 + // >0时,仅仅显示特定的Tab页 + // <0时,所有 + // 默认-1,所有 + int m_nVisibleTabItem; +}; diff --git a/Include/mGui/mGuiJob/iWxSegMore.h b/Include/mGui/mGuiJob/iWxSegMore.h new file mode 100644 index 0000000..9f2f76e --- /dev/null +++ b/Include/mGui/mGuiJob/iWxSegMore.h @@ -0,0 +1,95 @@ +#pragma once + +#include "IxPtyPano.h" +#include "iGuiPlotSeg.h" +#include "ZxTableView.h" +#include "iDlgBase.h" +#include "mGuiJob_global.h" + +class ZxPtyDock; +class ZxRenderItem; + +// ZXF20240702 +// 产液段设置 +class M_GUI_JOB_EXPORT iWxSegMore : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iWxSegMore(QWidget *parent = 0); + ~iWxSegMore(); + + // 产液段设置信息(水平段顶深,水平段底深) + void setInfos(QString sSegName, QVector > vecInfos, \ + double dDepthTop, double dDepthBottom); + // 得到参数 + QVector > getInfos(); + + // 初始化 + virtual void initUI(); + +private: + + // 初始化 + void initUI_MainLayout(); + void initUI_Main(); + void initUI_Bottoms(); + + //表格和图形 + void initPlot(); + void initTable(); + void initPtyWx(); + + void bindDockPty(IxPtySource* pItem); + +signals: + + // 表格项修改 + void sigSegTableChanged(QString sTagName, QString sParam, double fVal); + +private slots: + + void slotBtnOK(); + void slotBtnCancel(); + + // 图元ObjSegLine改变 + void slotObjSegLineChange(ZxObjBase*); + // 表格改变 + void slotTableCellChanged(const QModelIndex&, const QModelIndex&); + + // 属性 + void slotGraphItemPoliciesInstalled(ZxRenderItem* pItem); + + // 属性是否显示 + void slotShowProperty(); + +private: + + // 布局相关 + QVBoxLayout* m_pMainLayout; + // 绘图区域 + iGuiPlotSeg* m_pPlot; + // 表格 + ZxTableView* m_pTableView; + // 属性框 + ZxPtyDock* m_pDockPty; + QList m_listProps; + + // 产液段数 + QString m_sSegName; + + // 层数,段参数 + QVector > m_vecInfos; + + // 段标签数据传入图形中 + QStringList m_listSegTags; + QMap > m_mapInfos; + + // 参数列表 + QStringList m_listSegParams; + + // 水平井起始深度,终止深度 + double m_dDepthTop; + double m_dDepthBottom; +}; diff --git a/Include/mGui/mGuiJob/iWxWizard.h b/Include/mGui/mGuiJob/iWxWizard.h new file mode 100644 index 0000000..b70c89a --- /dev/null +++ b/Include/mGui/mGuiJob/iWxWizard.h @@ -0,0 +1,93 @@ +#pragma once + +#include "iWxBase.h" + +class M_GUI_JOB_EXPORT iWxWizard : public iWxBase +{ + Q_OBJECT + +public: + enum WizardShowMode + { + WSM_Basic = 0, //基础 + WSM_Fluid, //流体性质 + WSM_PF, //Pressure&Rate + WSM_GasConst, //Gas const + + WSM_All, //All + + WSM_Unknown + }; + +public: + + explicit iWxWizard(QWidget *parent = 0); + ~iWxWizard(); + + void clearWx(); + virtual void initUI(); + + // 显示模式 + void setWsm(WizardShowMode o); + WizardShowMode getWsm(); + + // 子窗体 + void appendSubWx(iWxBase* p); + + void resetSubWx(iWxBase* p = NULL); + +signals: + + void sigWizardOptionOk(); + +private: + + // 初始化 + void initBase(); + void updateBtnStates(); + + // 标题 + void changeTitle(); + +protected: + + virtual void paintEvent(QPaintEvent *); + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private slots: + + void on_btnBack_clicked(); + void on_btnNext_clicked(); + void on_btnHelp_clicked(); + void on_btnCancel_clicked(); + + // 把Wizard中所有项进行保存或者恢复 + void slotLoad(); + void slotSave(); + + // 当流体性质改变时,本窗体响应 + virtual void slotParasObtained(QMap& map); + + // 当Job标识改变时,本窗体响应 + //void slotJobTagChanged(QString s); + +private: + + WizardShowMode m_oWsm; + + // 子窗体,本类不负责创建维护 + // 分别为 Basic、Fluid、(Gas Const)、PF + QVector m_vecSubWxs; + + // 子窗体容器 + QStackedWidget* m_pStackedWidget; + + // Btn + QPushButton* m_pBtnBack; + QPushButton* m_pBtnNext; + + // 是否显示气体组分(在流体为 gas 时)显示 + bool m_bShowGasConst; + int m_nIndexHide; +}; diff --git a/Include/mGui/mGuiJob/mGuiJob_global.h b/Include/mGui/mGuiJob/mGuiJob_global.h new file mode 100644 index 0000000..42f0f41 --- /dev/null +++ b/Include/mGui/mGuiJob/mGuiJob_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(M_GUI_JOB_LIBRARY) +# define M_GUI_JOB_EXPORT Q_DECL_EXPORT +#else +# define M_GUI_JOB_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjSegData.h b/Include/mGui/mGuiPlot/WellMap/ZxObjSegData.h new file mode 100644 index 0000000..0d92825 --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjSegData.h @@ -0,0 +1,45 @@ +#pragma once + +#include "ZxObjPoint.h" +#include "mGuiPlot_global.h" +#include "mAlgDefines.h" + +class ZxDataWell; +class ZxObjSegLine; +//产液段数据体 +class M_GUI_PLOT_EXPORT ZxObjSegData : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + //ZX_DECLARE_DYNAMIC + +public: + ZxObjSegData(ZxObjSegLine* p); + ~ZxObjSegData(); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + //设置产液段整体信息ZXF20240704 + void setSegMapInfos(QMap mapInfos); + QMap getSegMapInfos(); + + //得到产液段的参数 + bool getSegParamVal(QString sParam, double& fVal); + void setSegParamVal(QString sParam, double& fVal); + + //产液段对象 + ZxObjSegLine* getSegLineObj(); + void setSegLineObj(ZxObjSegLine *p); +protected: + + ZxObjSegLine* m_pSegLine; //绑定产液段对象 + //产液段数据体ZXF20270704 + QMap m_mapSegInfos; +}; + + + + diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjSegLine.h b/Include/mGui/mGuiPlot/WellMap/ZxObjSegLine.h new file mode 100644 index 0000000..1bfcd70 --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjSegLine.h @@ -0,0 +1,92 @@ +#pragma once + +#include "ZxObjLine.h" +#include "mGuiPlot_global.h" + +//井段 +class ZxObjWmLinePlus; +class ZxObjSegData; +class M_GUI_PLOT_EXPORT ZxObjSegLine : public ZxObjLine +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + ZxObjSegLine(); + ZxObjSegLine(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjSegLine(); + + //得到产液段数据体 + ZxObjSegData* getObjSegData(); + + //得到深度点对应的点Pos + QPointF getSegLineDepthPos(); + + //获得对应数据(长度,位置) + bool getSegParamVal(QString sParam, double& dVal); + void setSegParamVal(QString sParam, double& dVal); + + //位置长度 + void setSegLineLenght(double dVal); + double getSegLineLenght(); + + //位置 + void setSegLineDepth(double dDepth); + double getSegLineDepth(); + + //得到角度 + void setSegLineAngle(double dAngle); + double getSegLineAngle(); + +public: + + // 封装 + virtual void initTools(); + + // 击中 + virtual bool hitTest(const QPointF& pt); + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + //计算偏移后位置 + QPointF offsetPoint(QPointF& pt, + const QPointF& pt1, const QPointF& pt2); + + //移动点改变长度 + bool calNewPosChangeLenght(QVector& vec, QPointF ptMouse); + //移动点改变角度 + bool calNewPosChangeAngle(QVector& vec, QPointF ptMouse); + + virtual bool calNewPos(QVector& vec, QPointF ptMouse); + //属性 + virtual void fillPtyPano(IxPtyPano* sheet); + //得到线的中点Pos + QPointF getCenterPosPt(); + //得到线中点Val + QPointF getCenterValPt(); + //改变位置 + void calChangedDepth(double dVal, QPointF& ptStart, QPointF& ptEnd); + //改变长度 + void calChangedLenght(double dVal, QPointF& p1); + //改变角度 + void calChangedAngle(double dVal, QPointF& p1, QPointF& p2); +protected: + //得到前一个 + ZxObjSegLine* getPreSegLineObj(); + //得到后一个 + ZxObjSegLine* getNextSegLineObj(); + //得到井段的起始深度点 + ZxObjWmLinePlus* getWnLineObj(); +protected: + //产液线对象 + ZxObjSegData* m_pData; +}; + + + + diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjSegLineTool.h b/Include/mGui/mGuiPlot/WellMap/ZxObjSegLineTool.h new file mode 100644 index 0000000..669701a --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjSegLineTool.h @@ -0,0 +1,32 @@ +#pragma once + +#include "ZxObjToolBase.h" +#include "mGuiPlot_global.h" + +//产液段线工具 +class M_GUI_PLOT_EXPORT ZxObjSegLineTool : public ZxObjToolBase +{ + Q_OBJECT + +public: + + ZxObjSegLineTool(); + +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +public: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onLeftDoubleClick(const QPointF& pt); + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + //绘制标签 + void drawLabel(QPainter* painter, QString str, QPointF pt); + +private: + +}; diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjWmData.h b/Include/mGui/mGuiPlot/WellMap/ZxObjWmData.h new file mode 100644 index 0000000..3d13f73 --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjWmData.h @@ -0,0 +1,105 @@ +#pragma once + +#include "ZxObjPoint.h" +#include "mGuiPlot_global.h" +#include "mAlgDefines.h" + +class ZxDataWell; +class ZxObjWmPoint; +class M_GUI_PLOT_EXPORT ZxObjWmData : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + //ZX_DECLARE_DYNAMIC + +public: + ZxObjWmData(ZxObjWmPoint* p); + ~ZxObjWmData(); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + + // 基础数据 + void loadBaseInfos(); + + // 后处理,如距离 + void dealwithInfos(); + + // 从外界传输,仅仅从外界调用 + void setPosX(float f); //坐标X + float getPosX(); + void setPosY(float f); + float getPosY(); + void setWellDis(float f); //井间距离 + float getWellDis(); + void setWellSlope(float f);//井间倾斜 + float getWellSlope(); + void setWmLen(float f);//井长 + float getWmLen(); + void setWmDev(float f);//井斜 + float getWmDev(); + void setSegCount(int n);//段数 + int getSegCount(); + void setSegLenV(float n);//裂缝半长 + float getSegLenV(); + + float getItemValueOf(QString s); + void setItemValueOf(QString s, float f); + +public: + + // 是否有效 + bool isDataValid(); + //void setDataValid(bool b); + + // 类型 + void setWmt(m_Wel_Type o); + m_Wel_Type getWmt(); + + // 数据获取 + QMap* getMapInfos(); + VVecFloat* getVVecDataF(); //流量数据 + VVecFloat* getVVecDataP(); //压力数据 + + // 本身的ZxDataWell对象 + void setDataObj(ZxDataWell* p); + ZxDataWell* getDataObj(); + + // 是否中心井 + bool isCenterWmPt(); + void setAsCenterWmPt(bool b); + + // 中心井 + ZxObjWmPoint* getWmPtC(); + void setWmPtC(ZxObjWmPoint *p); + + // 设置压力、流量 + bool setDataPF(QVector& vecP, //Pressure Data + QVector& vecF); + void setDataP(VVecFloat& vvec); + void setDataF(VVecFloat& vvec); + + // 自动添加的部分 + QStringList getDefaultParas(); + +protected: + + ZxObjWmPoint* m_pWmPt; //本身绑定的对象 + ZxObjWmPoint* m_pWmPtC; //中心井对应的对象 + bool m_bWmPtC; //是否中心井 + bool m_bDataValid; + + // m_sName; //Name + m_Wel_Type m_oWmt; //井型 + QMap m_mapInfos; //基础信息 + VVecFloat m_vvecDataF; //流量数据 + VVecFloat m_vvecDataP; //压力数据 + + ZxDataWell* m_pDataObj; //设置的WellObj +}; + + + + diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjWmLine.h b/Include/mGui/mGuiPlot/WellMap/ZxObjWmLine.h new file mode 100644 index 0000000..5d97033 --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjWmLine.h @@ -0,0 +1,85 @@ +#pragma once + +#include "ZxObjWmPoint.h" +#include "mGuiPlot_global.h" + +class M_GUI_PLOT_EXPORT ZxObjWmLine : public ZxObjWmPoint +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + ZxObjWmLine(); + ZxObjWmLine(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjWmLine(); + +public: + + // 封装 + virtual void initTools(); + + // 击中 + virtual bool hitTest(const QPointF& pt); + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + virtual bool calNewPos(QVector& vec, QPointF ptMouse); + + // 移动位置后,刷新相关的信息,如距离、角度、长度等 + virtual bool reCalInfos(); + // 0-180,°,90°,120°等等 + float getLineAngle(); + // 在右侧手工改动数据,刷新数据点,m_pData已经改变,不予考虑 + virtual bool freshWmPosBy(QString sPara, float f); + +protected: + + virtual QPointF getCenterPos(); + + virtual void resetBounds(); + + // 绘制线 + virtual bool drawLine(QPainter* painter, QLineF& oLine); + // 绘制垂线 + virtual bool drawSubLines(QPainter* painter, QLineF& oLine); + // 绘制井点 + virtual bool drawWellPos(QPainter* painter, QPointF pt); + // 绘制选择 + virtual bool drawSelStates(QPainter* painter, QLineF& oLine); + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + + // 得到/设置画笔 + QPen getSubPen(void) const; + void setSubPen(QPen o); + +protected: + + //float m_fSlope; //这是针对特征线时后的斜率值 + + QPen m_oSubPen; +}; + + + + diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjWmLinePlus.h b/Include/mGui/mGuiPlot/WellMap/ZxObjWmLinePlus.h new file mode 100644 index 0000000..19280f1 --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjWmLinePlus.h @@ -0,0 +1,34 @@ +#pragma once + +#include "ZxObjWmLine.h" +#include "mGuiPlot_global.h" + +class M_GUI_PLOT_EXPORT ZxObjWmLinePlus : public ZxObjWmLine +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + ZxObjWmLinePlus(); + ZxObjWmLinePlus(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjWmLinePlus(); + +public: + + +protected: + +public: + + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + +protected: + +}; + + + + diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjWmLineTool.h b/Include/mGui/mGuiPlot/WellMap/ZxObjWmLineTool.h new file mode 100644 index 0000000..0a7baad --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjWmLineTool.h @@ -0,0 +1,33 @@ +#pragma once + +#include "ZxObjWmPointTool.h" +#include "mGuiPlot_global.h" + +// 点工具 +class M_GUI_PLOT_EXPORT ZxObjWmLineTool : public ZxObjWmPointTool +{ + Q_OBJECT + +public: + + ZxObjWmLineTool(); + +protected: + + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +public: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onLeftDoubleClick(const QPointF& pt); + virtual void onKeyPress(QKeyEvent *event); + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +private: + +}; diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjWmPoint.h b/Include/mGui/mGuiPlot/WellMap/ZxObjWmPoint.h new file mode 100644 index 0000000..aeee4bc --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjWmPoint.h @@ -0,0 +1,86 @@ +#pragma once + +#include "ZxObjPoint.h" +#include "mGuiPlot_global.h" +#include "mAlgDefines.h" + +class ZxObjWmData; +class M_GUI_PLOT_EXPORT ZxObjWmPoint : public ZxObjPoint +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + ZxObjWmPoint(); + ZxObjWmPoint(const QString& sName, + ZxSubAxisX* pAxisX, + ZxSubAxisY* pAxisY); + ~ZxObjWmPoint(); + +public: + + // 辅助信息 + virtual void initSubObjs(); + virtual void resetOthers(); + + // 封装 + virtual void initTools(); + + // 设置显示的标识 + void setPointTag(QString s); + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 移动位置后,刷新相关的信息,如距离、角度、长度等 + virtual bool reCalInfos(); + + // 返回数据体 + ZxObjWmData* getWmData(); + + // 在右侧手工改动数据,刷新数据点,m_pData已经改变,不予考虑 + virtual bool freshWmPosBy(QString sPara, float f); + virtual bool freshWmAboutBy(QString sPara, float f); + +signals: + + void sigWmInfoChanged(QString sParaBy); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + + // 绘制井点 + virtual bool drawWellPos(QPainter* painter, QPointF pt); + virtual bool drawWellLine2Center(QPainter* painter, QPointF pt); + +public: + virtual void paintBack(QPainter* painter, + const ZxPaintParam& param); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void fillPtyPano(IxPtyPano* sheet); + +public: + +protected: + + QColor m_clrFillUnvalid; //无效时填充颜色 + QColor m_clrOuter; //外边界颜色 + + ZxObjWmData* m_pData; +}; + + + + diff --git a/Include/mGui/mGuiPlot/WellMap/ZxObjWmPointTool.h b/Include/mGui/mGuiPlot/WellMap/ZxObjWmPointTool.h new file mode 100644 index 0000000..23aba90 --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/ZxObjWmPointTool.h @@ -0,0 +1,45 @@ +#pragma once + +#include "ZxObjPointTool.h" +#include "mGuiPlot_global.h" + +#include "mAlgDefines.h" + +// 点工具 +class M_GUI_PLOT_EXPORT ZxObjWmPointTool : public ZxObjPointTool +{ + Q_OBJECT + +public: + + ZxObjWmPointTool(); + +signals: + + void sigPointsHit(QVector); + +protected: + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +public: + + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onLeftDoubleClick(const QPointF& pt); + virtual void onKeyPress(QKeyEvent *event); + + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +public: + + void setWmt(m_Wel_Type o); + m_Wel_Type getWmt(); + +protected: + + m_Wel_Type m_oWmt; + +}; diff --git a/Include/mGui/mGuiPlot/WellMap/iWxWmDataPF.h b/Include/mGui/mGuiPlot/WellMap/iWxWmDataPF.h new file mode 100644 index 0000000..1161f87 --- /dev/null +++ b/Include/mGui/mGuiPlot/WellMap/iWxWmDataPF.h @@ -0,0 +1,31 @@ +#pragma once + +#include "iWxTablePF.h" + +class M_GUI_PLOT_EXPORT iWxWmDataPF : public iWxTablePF +{ + Q_OBJECT + +public: + explicit iWxWmDataPF(const QString& sTitle, + bool bPressure, + QWidget *parent = 0); + ~iWxWmDataPF(); + + // 初始化 + virtual void initUI(); + + // 刷新 + void freshTableByObj(ZxObjBase* p, bool bPtsOnly); + virtual void freshBrotherByTable(); + +protected: + + virtual void paintEvent(QPaintEvent *); + +public slots: + +signals: + +private: +}; diff --git a/Include/mGui/mGuiPlot/ZxSegmentInfo.h b/Include/mGui/mGuiPlot/ZxSegmentInfo.h new file mode 100644 index 0000000..88fa660 --- /dev/null +++ b/Include/mGui/mGuiPlot/ZxSegmentInfo.h @@ -0,0 +1,92 @@ +#pragma once + +#include "Defines.h" +#include "ZxBaseUtil.h" + +#include "IxSerDes.h" +#include "ZxXpf.h" +#include "ZxSerializer.h" + +#include "mGuiPlot_global.h" + +class ZxDataGaugeP; +class ZxDataGaugeF; + +// 选定的流动段对应的信息 +class M_GUI_PLOT_EXPORT ZxSegmentInfo : public QObject, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + ZxSegmentInfo(); + + void copyFrom(ZxSegmentInfo* p); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + void on_cbxUseSmoothing_clicked(); + void on_cbxUseThinning_clicked(); + + QString getSegTypeCH(); + QString getBaseDesc(); + + int fuzzyThinLoop(); + bool singleSegDataPF(QVector& vecP, QVector& vecF); + bool isSwapMode(QVector& vecF); + + // 尾部效应比例,0-1之间 + float getTailorOffset(); + + /// @brief 确定了流动段、压降/压恢之后,对前一流量进行调整确认 + /// @param vecPoss (in) 流量曲线屏幕坐标信息 (该参数废弃 TODO 20240919) + /// @param vecValuesF (in) 流量曲线实际数值点信息 + /// @note 两个数组大小很可能不一致 + bool verifyPrevValueF(/*QVector& vecPoss, */QVector& vecValuesF); + +public: + + int m_nIndexStartP; //流动段在压力曲线数据的位置索引(第几个点,从0开始) + int m_nIndexEndP; + float m_fValueStartP; //流动段两点对应的压力曲线数据 + float m_fValueEndP; + + int m_nIndexF; //流动段在流量曲线中索引,其实就是鼠标点中位置 + float m_fPrevValueF; //流动段的前一个 流量数据值(非零) + int m_nPrevValueIndex; //前一个值在数据Value(not pos)的索引 + + // 是否启用光滑和抽稀 + bool m_bSmoothing; //是否启用光滑 + float m_fSmoothFactor; + bool m_bThinning; //是否启用抽稀 + int m_nThinLoop; + + bool m_bBuildUp; //是否压恢(上升) + + QString m_sSegName; + + // 序列化用 + float m_fTimeS; //时间域 + float m_fTimeE; + QString m_sCurveNameP; + QString m_sCurveNameF; + + VVecFloat m_vvecMpData; + bool m_bMultiPhase; + + bool m_bTrimmed; //是否裁剪的模式 + + + // 临时,不涉及序列化 + // 一旦流动段多于该数,则仅仅对当前段进行处理。(如果为0)则处理所有段 + int m_nSegMaxToTrim; + + // 临时,不涉及序列化 +// int m_nSegThinRatio; + + // 临时,不涉及序列化,范围0-50,%,末端效应 + float m_fTailorOffset; +}; diff --git a/Include/mGui/mGuiPlot/iCurveDesc.h b/Include/mGui/mGuiPlot/iCurveDesc.h new file mode 100644 index 0000000..659eb87 --- /dev/null +++ b/Include/mGui/mGuiPlot/iCurveDesc.h @@ -0,0 +1,35 @@ +#pragma once + +#include "ZxDot.h" +#include "mGuiPlot_global.h" + +class ZxDataGaugeBase; + +// 曲线信息描述,为了传递曲线数据而设定 +class M_GUI_PLOT_EXPORT iCurveDesc +{ +public: + + iCurveDesc(); + + // n = 0,设置Dot/Pen 1:Pen 2:Dot + void setColor(QColor clr, int n = 0); + +public: + + VecFloat m_vecX; + VecFloat m_vecY; + + bool m_bLineVisible; + PlotObjectType m_oCurveType; + + ZxDot m_oDot; //点绘制模式 + QPen m_oPen; //线绘制模式 + + bool m_bUseY2; + QString m_sCurveName; + + ZxDataGaugeBase* m_pDataObj; + + double m_dOffsetDt; //这是基准时间的偏移量 +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlot.h b/Include/mGui/mGuiPlot/iGuiPlot.h new file mode 100644 index 0000000..67eee12 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlot.h @@ -0,0 +1,172 @@ +#pragma once + +#include "iPlotCurveWxT.h" +#include "ZxDot.h" +#include "mGuiPlot_global.h" + +class ZxDataGaugeBase; +class ZxDataGaugeF; +class ZxObjCurveFlow; +class iGuiPlotCmdHelper; +class iGuiPlotTableHelper; +class ZxObjBase; +class iCurveDesc; + +// 绘图窗体的再一次封装 +class M_GUI_PLOT_EXPORT iGuiPlot : public iPlotCurveWxT +{ + Q_OBJECT + +public: + explicit iGuiPlot(bool bUseBtn = true, QWidget *parent = 0); + ~iGuiPlot(); + + // 初始化UI + virtual void initUI(QString sTitle, QSize szDefault = QSize(265, 203)); + + // 设置图上数据、线的类型(点或者线) + // 这是一次性设置数据,需要外界显示调用runUpdate刷新 + void setCurveData(QVector vecCurveDesc); + QVector getCurveData(); + void checkForDateMode(); + // 这是在现有图形上追加数据,会自动刷新 + void appendCurveData(QVector vecCurveDesc, bool bFreshAxis = true); + //清楚后面数据的数据 + void removeCurveData(QString sCurveName); + // 这是仅仅更改某条曲线的数据 + bool changedCurveData(QString sTag, QVector vec); + int indexOfCurveDescOf(QString sTag); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + // 反序列化后,把数据重新加入m_mapCurveData与m_mapCurveType + virtual void resetAfterDeserialized(); + + // 刷新图形 + virtual void runUpdate(); + + // 图形按钮类别 + void setChartCmdType(QString s); + + // 设置是否显示toolbar + void setUseBtns(bool b); + void setToolBarPos(int n); + + ZxObjCurve* getCurve(QString s); + // Pen and Dot + void setPenAndDotEx(ZxObjCurve* pCurve, iCurveDesc &o); + + // 这是触发其它按钮 + bool sendActionToParent(QString sAction); + + // 设置Plot里面对象只读 + bool setReadOnly(bool bReadonly, bool bCurveTypeOnly = true); + + // 是否允许拖拽 + void setDropEnabled(bool b); + + // 状态 + virtual void setModified(bool b); + virtual bool isModified(); + + //自动调整坐标轴大小(两边扩展点) + void setAutoExpandAxisScaleX(VecFloat vecX); + void setAutoExpandAxisScaleY(VecFloat vecY); + + virtual bool runAction(QString sAction); + + // 根据曲线描述获取第一个流量数据体 + QString getDataIdBy(QString sName); + + void keyPressEvent(QKeyEvent* e); + +protected: + + // 初始化Sheet + void initSheets(); + + // 初始化布局 + virtual void initMainLayout(); + virtual QWidget* initChartLayout(QString sTitle, QSize szDefault); + + // 刷新 + virtual void updatePlots(); + + // 创建添加曲线 + virtual bool createAndAppendCurves(ZxPlot* pPlot, + QVector& vecData); + // 绘制Painter函数重载 + virtual void paintEvent(QPaintEvent *); + +// // 拖拽支持 +// void dragEnterEvent(QDragEnterEvent *event); +// void dropEvent(QDropEvent* event); + + virtual bool dealwithDropCurve(ZxDataGaugeBase* pObj); + +public slots: + + // 这是从 tPlotCurveView传递过来的拖拽处理 + void slotCheckDragAccepted(QDragEnterEvent* event, bool&b); + void slotDealwithDrop(QDropEvent* event); + + // 选择曲线弹出对话框显示数据 + virtual void slotShowCurveData(ZxObjCurveBase* p); + void slotSubTableSelChanged(); + + // 从zxPlot传递 + virtual void slotPlotModified(int b); + + // 刷新状态栏 + void slotFresh2Status(QString&); + + void slotObjCompleted(ZxObjBase*); + +signals: + + // 当GuiPlot的toolbar建立后触发,调用方可以做调整, + // 如增加一些按钮或控件 + void sigToolbarBuilt(QToolBar*); + + // 这是触发其它按钮 + void sigParentActioned(QString sAction, bool& b); + + // 触发是否允许拖拽 + void sigCheckCurveDropEnabled(ZxDataGaugeBase* pObj, bool& bEnabled); + + // 触发拖拽的曲线处理 + void sigCurvedDropped(ZxDataGaugeBase* pObj, bool& b); + + // + void sigGuiPlotModified(bool); + + // 获取额外的tips,比如 探测半径 + void sigGetTipsExOfPos(QString& sTip, float fX, float fY); + +protected: + + // 曲线对应的描述信息map + QVector m_vecCurveDesc; + + // 图形Helper,各类Cmd的封装 + iGuiPlotCmdHelper* m_pCmdHelper; + + // 图形按钮类别 + QString m_sChartCmdType; + + // 是否需要工具ToolBar + bool m_bUseBtns; + + // 这是在图上右键显示曲线数据用的表格窗体 + iGuiPlotTableHelper* m_pTableTemp; + + // bool 是否允许拖拽 序列化如何处理??? + bool m_bDropEnabled; + + // 临时变量 + bool m_bModified; + + // 工具栏的位置 0-3 l t r b + int m_oToolBarPos; //默认2 +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotCmdHelper.h b/Include/mGui/mGuiPlot/iGuiPlotCmdHelper.h new file mode 100644 index 0000000..8b26c49 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotCmdHelper.h @@ -0,0 +1,52 @@ +#pragma once + +#include "iPlotCurveWxT.h" + +#include "mGuiPlot_global.h" + +class iGuiPlot; + +// 该类是iGuiPlot的Cmd命令分发处理 +class M_GUI_PLOT_EXPORT iGuiPlotCmdHelper : public QObject +{ + Q_OBJECT + +public: + explicit iGuiPlotCmdHelper(iGuiPlot* p); + ~iGuiPlotCmdHelper(); + +//protected: + virtual void initToolBar(QToolBar* pToolBar, QString sType); + + virtual bool runAction(QString sAction); + + virtual void fuzzyCheckStates(QAction* pAction, bool& bRepeatedHit); + ActionCheckMode getAcmOf(QAction* pAction); + virtual void finalWithAcm(bool bToNone, bool bChangeToolBar = false); + +public slots: + // Toolbar按钮消息响应 + virtual void slotBtnTriggered(); + + virtual void slotLoadGraph(); + virtual void slotSaveGraph(); + virtual void slotSaveTemplate(); + + virtual void slotHelp(); + +protected: + + iGuiPlot* m_pGuiPlot; + + // 动态按钮 + QStringList m_listBtnNames; + QStringList m_listBtnIcons; + QStringList m_listBtnTips; + + QToolBar* m_pToolBar; + + ActionCheckMode m_oTempAcm; + QAction* m_pTempAction; + + friend class iGuiPlot; +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotEx.h b/Include/mGui/mGuiPlot/iGuiPlotEx.h new file mode 100644 index 0000000..388ed47 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotEx.h @@ -0,0 +1,78 @@ +#pragma once + +#include "iGuiPlot.h" + +class ZxTableView; +class ZxTableModel; +class ZxObjCurveBase; +class ZxObjBase; + +/// @brief 该类基于iGuiPlot,增加了辅助表格,实现表图同步 +class M_GUI_PLOT_EXPORT iGuiPlotEx : public iGuiPlot +{ + Q_OBJECT + +public: + explicit iGuiPlotEx(bool bUseBtn = true, QWidget *parent = 0); + ~iGuiPlotEx(); + + // 初始化UI + virtual void initUI(QString sTitle, QSize szDefault = QSize(265, 203)); + + // 辅助表格设置 + void setTableHelperVisible(bool b); + bool isTableHelperVisible(); + int getPosMode(); + /// @brief 设置位置信息,只在显示table时有效 + /// @param n 0:表左图右 1:表右图左 2:表上图下 3:表下图上 + void setPosMode(int n); + + // 设置表格只读,主要是右键及双击 + void setTableReadonly(QString sTag = "", bool bReadonly = true); + +protected: + virtual void paintEvent(QPaintEvent *); + + QWidget* initTableLayout(); + + // 为确保一致性,updatePlots中调用updateBrotherTables + virtual void updatePlots(); + virtual void updateBrotherTables(); + + // 信号关联 + void bindSignals(ZxObjCurveBase* pCurve, ZxTableView* pTableView); + +public slots: + // 表格 + void slotTableCellChanged(const QModelIndex&, const QModelIndex&); + void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + void slotSubTableSelChanged(); + + // Curve + void slotCurveSelChanged(bool bSelect); + void slotCurvePtsChanged(); + + // plot + void slotObjDeleted(ZxObjBase* p); + + // 在iGuiPlotTableHelper保存时,通过该信号获取对应的DataObj + void slotGetDataObjOfView(ZxTableView* pView, ZxDataGaugeBase*& p); + +signals: + + // 一旦压力或流量保存之后,则触发其他窗口的刷新 + void sigDataSavedPF(QString sCode); + +private: + // Table改变时,刷新曲线 + void refreshCurveBy(ZxTableModel* p); + +public: + + // 辅助表格 + iGuiPlotTableHelper* m_pTableHelper; + bool m_bShowTableHelper; //是否显示 + int m_nPosMode; //在显示辅助表格时,表图的位置关系 + //0:表左图右 1:表右图左 + //2:表上图下 3:表下图上 +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotMap.h b/Include/mGui/mGuiPlot/iGuiPlotMap.h new file mode 100644 index 0000000..9ef4611 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotMap.h @@ -0,0 +1,85 @@ +#pragma once + +#include "iGuiPlot.h" +#include "mAlgDefines.h" +class ZxDataWell; +class ZxObjBase; +class ZxObjWmPoint; + +// WellMap +class M_GUI_PLOT_EXPORT iGuiPlotMap : public iGuiPlot +{ + Q_OBJECT + +public: + + explicit iGuiPlotMap(bool bUseBtn = true, QWidget *parent = 0); + ~iGuiPlotMap(); + + // 初始化UI + virtual void initUI(QString sTitle, QSize szDefault = QSize(265, 203)); + + // 反序列化后,把数据重新加入m_mapCurveData与m_mapCurveType + virtual void resetAfterDeserialized(); + + // 刷新图形 + virtual void runUpdate(); + + // 设置中心井 + void setCentralWell(ZxDataWell* p); + + // 返回井点信息 + bool getWmInfos(QVector& vecWms); + + // 添加中心井 + void appendWmPtCObj(); + + // 创建添加一个Obj + ZxObjWmPoint* appendOneWmObj(m_Wel_Type oType, + QString &sName, + QVector& vec, + bool bCentral = false); + ZxObjWmPoint* _createOneWmObj(m_Wel_Type oType, + QString &sName, + QVector& vec); + +protected: + + // 调整UI + void adjustPlotUI(); + + // 刷新 + virtual void updatePlots(); + + // 绘制Painter函数重载 + virtual void paintEvent(QPaintEvent *); + virtual void resizeEvent(QResizeEvent * event); + +public slots: + + // Obj选择状态改变 + void slotWmObjSelChanged(bool); + // Obj数据发生了改变 + void slotWmObjPtsChanged(); + + // 这是从 tPlotCurveView传递过来的拖拽处理 + void slotCheckDragAccepted(QDragEnterEvent* event, bool&b); + void slotDealwithDrop(QDropEvent* event); + + // 确保方格 + virtual void slotChangeSizeWithChangedXY(); + +signals: + // Obj选择状态改变 + void sigWmObjSelChanged(ZxObjBase*, bool); + // Obj数据发生了改变 + void sigWmObjPtsChanged(ZxObjBase*); + // 获取当前中心井的压力和流量 + void sigGetCentralDataPF(QVector& vecP, + QVector& vecF); + +protected: + + ZxDataWell* m_pCenterWell; + ZxObjWmPoint* m_pWmPtC; +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotMapCmdHelper.h b/Include/mGui/mGuiPlot/iGuiPlotMapCmdHelper.h new file mode 100644 index 0000000..83816c6 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotMapCmdHelper.h @@ -0,0 +1,31 @@ +#pragma once + +#include "iGuiPlotCmdHelper.h" + +class ZxObjWmPointTool; +class ZxObjWmLineTool; + +// 该类是iGuiPlot的Cmd命令分发处理 +class M_GUI_PLOT_EXPORT iGuiPlotMapCmdHelper + : public iGuiPlotCmdHelper +{ + Q_OBJECT + +public: + explicit iGuiPlotMapCmdHelper(iGuiPlot* p); + ~iGuiPlotMapCmdHelper(); + + virtual bool runAction(QString sAction); + +public slots: + + void slotObjFinished(); + void slotPointsHit(QVector vec); + +protected: + + ZxObjWmPointTool* m_pTool1; + ZxObjWmLineTool* m_pTool2; + + friend class iGuiPlot; +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotPF.h b/Include/mGui/mGuiPlot/iGuiPlotPF.h new file mode 100644 index 0000000..a6ce6ae --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotPF.h @@ -0,0 +1,216 @@ +#pragma once + +#include "iGuiPlot.h" +#include "iDlgBase.h" +#include "ZxSegmentInfo.h" + +class ZxTableView; +class ZxTableModel; +class ZxObjCurveBase; +class ZxObjCurveFlow; +class ZxObjCurvePressure; +class ZxObjCurve; +class ZxObjBase; +class iGuiPlotPFCmdHelper; + +/// @brief 针对PF上下显示的需求,特创建本类 +/// @note 本类基于 iGuiPlotEx 的部分功能 +class M_GUI_PLOT_EXPORT iGuiPlotPF : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iGuiPlotPF(QString sExt, QWidget *parent = 0); + ~iGuiPlotPF(); + + // 初始化UI + virtual void initUI(QString sTitle, \ + QSize szDefault = QSize(265, 203)); + + // 辅助表格设置 + void setTableHelperVisible(bool b); + bool isTableHelperVisible(); + int getPosMode(); + + /// @brief 设置位置信息,只在显示table时有效 + /// @param n 0:表左图右 1:表右图左 2:表上图下 3:表下图上 + void setPosMode(int n); + + // 为确保一致性,updatePlots中调用updateBrotherTables + virtual void runUpdate(); + void reBindTwo(); + bool freshDataOfPF(QVector& vecObjs); + + // 设置图上数据、线的类型(点或者线) + // 这是一次性设置数据,需要外界显示调用runUpdate刷新 + void setCurveData(QVector vecCurveDesc); + void changeCurveData(QString sKey, iCurveDesc o); + // 分配 + void allocateData(); + + // 获取两条线的数据点(绘图对象) + bool getChartDataXYOfPF(QVector& vec, bool bPressure, \ + QString* pStrCodeF = NULL); + // 获取两条线的绘图对象 + bool getChartDataObjOfPF(ZxObjCurveBase*& p, bool bPressure); + // 获取两条线的数据对象 + bool getDataObjOfPF(ZxDataGaugeBase*& p, bool bPressure); + + // 模拟右键双击 + bool runClickBySimulation(); + + // 信号关联 + void bindTwoPlots(); + + // 建议流动段上下对比调整过程时,随时保存入库 + // 建议采取折中方案,每次流动段弹窗前保存一下 + // 20211216 Added 数据 编辑 也用该函数 + void runPossibleSave(); + bool isPossibleModified(); + +private: + + // 选定的流动段在当前压力曲线 + // 数据的位置索引(第几个点,从0开始) + bool prepareSegInfo(ZxSegmentInfo* p); + bool checkCurrentPF(ZxObjCurvePressure*& pCurveP, \ + ZxObjCurveFlow*& pCurveF); + +private: + + // 初始化 + void initUI_MainLayout(); + void initUI_P(QString sTitle, QSize sz); + void initUI_F(QString sTitle, QSize sz); + void initUI_SplitterPF(); + void initUI_Table(); + void initUI_ToolBar(); + void initUI_SumUp(); + + // 基础Signal + void buildBaseSignals(bool bP); + + // Table改变时,刷新曲线 + void refreshCurveBy(ZxTableModel* p, bool bRightColOnly = false); + QVector getVecPtFrom(VVecVariant& vvecData); + ZxObjCurve* checkObjCurveFrom(ZxTableModel* pTableModel, \ + QString& sTag); + iGuiPlot* checkPlotWxFrom(ZxTableModel* pTableModel, \ + QString& sTag); + +protected: + + virtual void paintEvent(QPaintEvent *); + + virtual void updateBrotherTables(); + + // 信号关联 + void bindPlotWithTable(ZxPlot *pPlot, ZxObjCurveBase* pCurve, ZxTableView* pTableView); + + // 获取当前显示的视图中的曲线 + bool getAllVisibleCurves(QVector& vec); + bool getAllVisibleCurvesOf(iGuiPlot* p, QVector& vec); + bool getCurveDescByName(QString s, iCurveDesc& o); + +public slots: + + // 表格 + void slotTableCellChanged(const QModelIndex& Index, const QModelIndex& nIndex); + void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + // 表格选中 + void slotSubTableSelChanged(); + + // Curve + void slotCurveSelChanged(bool bSelect); + void slotCurvePtsChanged(); + // 压力数据,PointState改变 + void slotPressPsChanged(int nIndex, PointState psOld, PointState psNew); + void slotNewRectSelection(); + + // flow + void slotFlowVerPtsChanged(int nIndex, float fOld, float fNew); + void slotFlowSegCurIndexChanged(); + + // plot + void slotObjDeleted(ZxObjBase* p); + + // 水平滚动条的同步 + void slotHSrollBarValueChanged(int); + + // splitter的响应 + void slotSplitterMoved(int pos, int index); + + // 双击处理(弹出右键流动段,或者 属性页) + void slotLeftDoubleClicked(const QPointF& pt); + + // 重新调整ToolBar,此处只是接口传递一下 + void slotToolbarBuilt(QToolBar*); + + // 为了统一,把流动段方面的绘制提取出来了,而没有放在CurveFlow的类里 + void slotGetBrotherObj(ZxObjBase*&); + void slotUpdateWhenFlowChanged(); + + // 在iGuiPlotTableHelper保存时,通过该信号获取对应的DataObj + void slotGetDataObjOfView(ZxTableView* pView, ZxDataGaugeBase*& p); + + // 是否允许拖拽的响应处理 + void slotCheckDropCurve(ZxDataGaugeBase* pObj, bool& bEnabled); + + // 拖拽曲线的处理 + void slotDealwithDropCurve(ZxDataGaugeBase* pObj, bool& b); + + +signals: + + // 一旦压力或流量保存之后,则触发其他窗口的刷新 + void sigDataSavedPF(QString sCode); + + // 当前选泽的流动段改变 + void sigSegmentChanged(ZxSegmentInfo& o, bool bShowOptionWx); + + // 当前流动段的参数改变,如移动水平线,此时仅仅刷新相应的结果视图 + void sigSegmentParamsChanged(ZxSegmentInfo& o); + + // 当GuiPlot的toolbar建立后触发,调用方可以做调整, + // 如增加一些按钮或控件 + void sigToolbarBuilt(QToolBar*); + + // 对整体布局允许用户进行调整 + void sigAdjustUis(QSplitter* pSplitter); + + // 弹出属性页(如果当前未显示) + void sigSetPtyVisible(bool); + + // 仅仅触发双击事件 + void sigDoubleClicked(ZxPlot* pPlotHit, \ + bool bShowOptionWx, bool& bProcessed); + +public: + + // 布局 + QVBoxLayout* m_pMainLayout; + QSplitter* m_pSplitter; + QWidget* m_pWxChartM; + + // 图形 + iGuiPlot* m_pWxPlotP; + iGuiPlot* m_pWxPlotF; + + // 曲线对应的描述信息map + QVector m_vecCurveDesc; + + // 辅助表格 + iGuiPlotTableHelper* m_pTableHelper; + bool m_bShowTableHelper; //是否显示 + int m_nPosMode; //在显示辅助表格时,表图的位置关系 + //0:表左图右 1:表右图左 + //2:表上图下 3:表下图上 + + // 图形统一的工具栏 + iGuiPlotPFCmdHelper* m_pCmdHelper; + QWidget* m_pWxToolBar; + + // 辅助信息 区分是 压力编辑、流量编辑还是 压力流量流动段选择 + QString m_sExt; +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotPFCmdHelper.h b/Include/mGui/mGuiPlot/iGuiPlotPFCmdHelper.h new file mode 100644 index 0000000..2019c50 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotPFCmdHelper.h @@ -0,0 +1,38 @@ +#pragma once + +#include "iGuiPlotCmdHelper.h" + +class iGuiPlotPF; + +// 该类是iGuiPlot的Cmd命令分发处理 +class M_GUI_PLOT_EXPORT iGuiPlotPFCmdHelper : public iGuiPlotCmdHelper +{ + Q_OBJECT + +public: + explicit iGuiPlotPFCmdHelper(iGuiPlotPF* p); + ~iGuiPlotPFCmdHelper(); + +//protected: + virtual void initToolBar(QToolBar* pToolBar, QString sType); + + virtual bool runAction(QString sAction); + +// virtual void fuzzyCheckStates(QAction* pAction, bool& bRepeatedHit); + //ActionCheckMode getAcmOf(QAction* pAction); + virtual void finalWithAcm(bool bToNone, bool bChangeToolBar = false); + +public slots: + + virtual void slotLoadGraph(); + virtual void slotSaveGraph(); + virtual void slotSaveTemplate(); + + virtual void slotHelp(); + +protected: + + iGuiPlotPF* m_pGuiPlotPF; + + friend class iGuiPlotPF; +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotSeg.h b/Include/mGui/mGuiPlot/iGuiPlotSeg.h new file mode 100644 index 0000000..9b7ef9e --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotSeg.h @@ -0,0 +1,107 @@ +#pragma once + +#include "iGuiPlot.h" +#include "mAlgDefines.h" +class ZxDataWell; +class ZxObjBase; +class ZxObjWmPoint; +class ZxObjSegLine; + +//ZXF20240703 +//水平井段设置 +class M_GUI_PLOT_EXPORT iGuiPlotSeg : public iGuiPlot +{ + Q_OBJECT + +public: + + explicit iGuiPlotSeg(bool bUseBtn = true, QWidget *parent = 0); + ~iGuiPlotSeg(); + + // 初始化UI + virtual void initUI(QString sTitle, QSize szDefault = QSize(265, 203)); + + // 反序列化后,把数据重新加入m_mapCurveData与m_mapCurveType + virtual void resetAfterDeserialized(); + + // 刷新图形 + virtual void runUpdate(); + + // 设置中心井 + void setCentralWell(ZxDataWell* p); + + // 返回井点信息 + bool getWmInfos(QVector& vecWms); + + // 添加中心水平井 + void appendWmPtCObj(float fTop, float fBottom, + QStringList listSegTags, + QMap > mapInfos); + + // 创建添加一个Obj + ZxObjWmPoint* appendOneWmObj(m_Wel_Type oType, + QString &sName, + QVector& vec, + bool bCentral = false); + ZxObjWmPoint* _createOneWmObj(m_Wel_Type oType, + QString &sName, + QVector& vec); + + //添加产液线 + //添加产液线对象 + ZxObjSegLine* appendSegObj(QString& sName, QMap& map); + //添加新的产液线对象 + ZxObjSegLine* _createOneSegObj(QString &sName,QMap& map); + //等间隔布局(弹框,对话框设置,根据起始深度和终止深度和设置间隔进行布局) + void calEquLayout(); + //整体一起设置 + void calWholeSet(); + //鼠标交互整体调整ZXF202409 + void calTotalSet(); + +protected: + // 调整UI + void adjustPlotUI(); + // 刷新 + virtual void updatePlots(); + // 绘制Painter函数重载 + virtual void paintEvent(QPaintEvent *); + + //改变其他产液线(动的产液线)ZXF202409整体一起联动(鼠标交互后操作) + void setOtherSegLine(ZxObjSegLine* pSrcSegLine); + +public slots: + // Obj选择状态改变 + void slotWmObjSelChanged(bool); + // Obj数据发生了改变 + void slotWmObjPtsChanged(); + + //ObjSegLine数据改变 + void slotObjSegLineChanged(); + + //对产液线参数进行修改 + void slotSegTableChanged(QString sTagName, QString sParam, double fVal); + //属性 + void slotShowProperty(); + +signals: + // Obj选择状态改变 + void sigWmObjSelChanged(ZxObjBase*, bool); + // Obj数据发生了改变 + void sigWmObjPtsChanged(ZxObjBase*); + // 获取当前中心井的压力和流量 + void sigGetCentralDataPF(QVector& vecP, + QVector& vecF); + + //ObjSegLine改变 + void sigObjSegLineChanged(ZxObjBase*); + //属性 + void sigShowProperty(); + +protected: + + ZxDataWell* m_pCenterWell; + ZxObjWmPoint* m_pWmPtC; + //是否整体调整(鼠标交互的时候) + bool m_bTotalSet; +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotSegCmdHelper.h b/Include/mGui/mGuiPlot/iGuiPlotSegCmdHelper.h new file mode 100644 index 0000000..0e5ff77 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotSegCmdHelper.h @@ -0,0 +1,29 @@ +#pragma once + +#include "iGuiPlotCmdHelper.h" + +// 该类是iGuiPlot的Cmd命令分发处理 +class M_GUI_PLOT_EXPORT iGuiPlotSegCmdHelper + : public iGuiPlotCmdHelper +{ + Q_OBJECT + +public: + explicit iGuiPlotSegCmdHelper(iGuiPlot* p); + ~iGuiPlotSegCmdHelper(); + + virtual bool runAction(QString sAction); + +signals: + //属性显示信号 + void sigShowProperty(); +public slots: + + void slotObjFinished(); + //属性是否显示 + virtual void slotShowProperty(); + +protected: + + friend class iGuiPlot; +}; diff --git a/Include/mGui/mGuiPlot/iGuiPlotTableHelper.h b/Include/mGui/mGuiPlot/iGuiPlotTableHelper.h new file mode 100644 index 0000000..9746c89 --- /dev/null +++ b/Include/mGui/mGuiPlot/iGuiPlotTableHelper.h @@ -0,0 +1,86 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiPlot_global.h" + +class ZxTableView; +class ZxTableModel; +class ZxObjCurveBase; +class ZxDataGaugeBase; +class M_GUI_PLOT_EXPORT iGuiPlotTableHelper : public iDlgBase +{ + Q_OBJECT + +public: + explicit iGuiPlotTableHelper(const QString& sTitle, QWidget *parent = 0); + ~iGuiPlotTableHelper(); + + // 初始化 + virtual void initUI(); + + // 如果pCurve对应的的表已经存在,则修改其数据 + // 否则新建 + ZxTableView* appendTableBy(ZxObjCurveBase* pCurve); + + // 图上选中,反推表格 + void setSelectedRows(ZxObjCurveBase* pCurve, int nFrom, int nTo); + + QStringList getTitles(ZxObjCurveBase* pCurve); + // 删除pCurve对应的表 + bool removeTableBy(ZxObjCurveBase* pCurve); + // 设置TabWx的当前Tab + bool setCurrentTableBy(ZxObjCurveBase* pCurve); + + int getIndexOf(ZxObjCurveBase* pCurve); + + // 反复查找相关的函数 + QString getTagByModel(const ZxTableModel* p); + + // 是否显示toolbar + void setToolBarVisible(bool ); + + // 返回所有View + QMap* getMapTableViews(); + + // 保存入库 + void runPossibleSave(); + bool isPossibleModified(); + + // 设置表格只读,主要是右键及双击 + void setTableReadonly(QString sTag = "", bool bReadonly = true); + +public slots: + // Toolbar按钮消息响应 + virtual void slotBtnTriggered(); + virtual void slotSaveDatabase(); + +signals: + // 在保存时,通过该信号获取对应的DataObj + void sigGetDataObjOfView(ZxTableView* pView, ZxDataGaugeBase*& p); + + // 一旦压力或流量保存之后,则触发其他窗口的刷新 + void sigDataSavedPF(QString sCode); + +private: + void loadDatabase(ZxTableModel* pModel); + void loadFromExcel(ZxTableModel* pModel); + ZxTableView* getCurView(); + +protected: + + virtual QHBoxLayout* initToolBars(); + virtual ZxTableView* createTableView(VVecFloat& vvecData, QStringList& listTitles); + virtual void paintEvent(QPaintEvent *); + +private: + + // TabWx + QTabWidget* m_pTabWx; + + // 是否显示toolbar + bool m_bShowToolBar; + + // TableView载体 + QMap m_mapTableViews; +}; diff --git a/Include/mGui/mGuiPlot/iWxSegLineLayout.h b/Include/mGui/mGuiPlot/iWxSegLineLayout.h new file mode 100644 index 0000000..be7f979 --- /dev/null +++ b/Include/mGui/mGuiPlot/iWxSegLineLayout.h @@ -0,0 +1,62 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiPlot_global.h" + +//产液线整体布局(设置初始位置,间隔等参数) +enum eSetMethod +{ + SM_None = 0, + SM_FixStartDepth, //设置起点,步长 + SM_FixEndDepth, //设置终点,步长 + SM_FixDepth //设置起点,终点 +}; + +class M_GUI_PLOT_EXPORT iWxSegLineLayout : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxSegLineLayout(QWidget *parent = NULL); + ~iWxSegLineLayout(); + //设井深度 + void setWellDepthInfo(double dDepthStart, double dDepthEnd, int nSegNum); + // 初始化 + virtual void initUI(); + //得到深度列表 + QVector getDepthList(); +protected: + //主 + void initUI_Main(); + //井信息 + void initUI_MainWellInfo(); + //段设置模式 + void initUI_MainSegMethod(); + //按钮 + void initUI_Bt(); + + //设置状态 + void changedMethod(); + +public slots: + //方法切换 + void slotMethodChanged(int); + void slotBtnOK(); + void slotBtnCancel(); +protected: + //起始深度 + double m_dDepthStart; + //终止深度 + double m_dDepthEnd; + //段数 + int m_nSegNum; + //布局 + QVBoxLayout* m_pMainLayout; + //编辑框 + QLineEdit* m_pLESegStartDepth; + QLineEdit* m_pLESegEndDepth; + QLineEdit* m_pLESegSpace; + + eSetMethod m_eSetMEthod; +}; diff --git a/Include/mGui/mGuiPlot/iWxSegLineWholeSet.h b/Include/mGui/mGuiPlot/iWxSegLineWholeSet.h new file mode 100644 index 0000000..6911441 --- /dev/null +++ b/Include/mGui/mGuiPlot/iWxSegLineWholeSet.h @@ -0,0 +1,76 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiPlot_global.h" + +class ZxObjSegLine; +class QListWidget; +//产液线整体设置 +class M_GUI_PLOT_EXPORT iWxSegLineWholeSet : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxSegLineWholeSet(QWidget *parent = NULL); + ~iWxSegLineWholeSet(); + //设井深度 + void setWellDepthInfo(double dDepthStart, double dDepthEnd, QVector vecObjs); + // 初始化 + virtual void initUI(); + +protected: + //主 + void initUI_Main(); + //井信息 + void initUI_MainWellInfo(); + //段设置模式 + void initUI_MainSegInfo(); + //左边 + void initUIMainLeft(QHBoxLayout* pLayout); + //右边 + void initUIMainRight(QHBoxLayout* pLayout); + //按钮 + void initUI_Bt(); + //根据名字找到对应的产液线 + ZxObjSegLine* getObjSegLine(QString sTag); + //得到选中的产液线 + QStringList getSelectSegLines(); + +public slots: + //全选和反选 + void slotBtnSelectAll(); + void slotBtnInvert(); + + void slotBtnOK(); + void slotBtnCancel(); + + // + void slotLenghtRbChanged(int); + void slotAngleRbChanged(int); + + //选择变化 + void slotSegTagStateChanged(QListWidgetItem *); + +protected: + //起始深度 + double m_dDepthStart; + //终止深度 + double m_dDepthEnd; + //段数 + QVector m_vecObjs; + //布局 + QVBoxLayout* m_pMainLayout; + //整体展示所有产液段 + QListWidget* m_pListWt; + //深度平移 + QLineEdit* m_pLEDepthOffset; + //长度累加 + QString m_sLenghtType; + QLineEdit* m_pLELenghtAddUp; + QLineEdit* m_pLELendhtReset; + //角度累加 + QString m_sAngleType; + QLineEdit* m_pLEAngleAddUp; + QLineEdit* m_pLEAngleReset; +}; diff --git a/Include/mGui/mGuiPlot/iWxTableMF.h b/Include/mGui/mGuiPlot/iWxTableMF.h new file mode 100644 index 0000000..1ef3ab6 --- /dev/null +++ b/Include/mGui/mGuiPlot/iWxTableMF.h @@ -0,0 +1,91 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiPlot_global.h" + +class ZxTableView; +class ZxTableModel; +class ZxObjCurveBase; +class ZxDataGaugeBase; +class ZxObjBase; + +// 小型压裂应用表格 +class M_GUI_PLOT_EXPORT iWxTableMF : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iWxTableMF(const QString& sTitle, \ + QWidget* parent = 0); + ~iWxTableMF(); + + // 初始化 + virtual void initUI(); + + // 是否显示toolbar + void setToolBarVisible(bool b); + void setToolBarCmdType(QString s); + + // 数据 + void changeTitle(QStringList& list); + QStringList getTitle(); + + void setDataPs(VVecVariant& vvec, QStringList listTitles); + void setDataPs(VVecDouble& vvec, QStringList listTitles); + VVecVariant getDataPsV(); + VVecDouble getDataPsD(); + ZxTableView* getTableView(); + +protected: + + virtual void paintEvent(QPaintEvent *); + +public slots: + + // Toolbar按钮消息响应 + virtual void slotBtnTriggered(); + virtual void slotSaveDatabase(); + + // 表格改变 + void slotTableCellChanged(const QModelIndex&, const QModelIndex&); + void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + +signals: + + // 初始化对工具栏进行调整 + void sigAdjustToolBar(QToolBar*&); + + // 在保存时,通过该信号获取对应的DataObj + void sigGetDataObjOfView(ZxTableView* pView, ZxDataGaugeBase*& p); + + // 数据发生了改变 + void sigTableDataChanged(VVecFloat&); + +protected: + + // 初始化 + virtual QHBoxLayout* initToolBars(); + virtual ZxTableView* initTableView(); + + // 默认值 + QStringList getDefaultTitles(); + VVecVariant getDefaultData(int nCol); + + // 相关按钮的响应 + void loadDatabase(ZxTableModel* pModel); + void loadFromExcel(ZxTableModel* pModel); + + // 数据格式转换 + VVecDouble convertVVec(VVecVariant vvec); + +protected: + + ZxTableView* m_pTableView; //视图 + ZxObjBase* m_pObj; //关联的井点对象 + QStringList m_listTitles; + bool m_bShowToolBar; //是否显示toolbar + QString m_sCmdType; + +}; diff --git a/Include/mGui/mGuiPlot/iWxTablePF.h b/Include/mGui/mGuiPlot/iWxTablePF.h new file mode 100644 index 0000000..1566470 --- /dev/null +++ b/Include/mGui/mGuiPlot/iWxTablePF.h @@ -0,0 +1,90 @@ +#pragma once + +#include "iDlgBase.h" + +#include "mGuiPlot_global.h" + +class ZxTableView; +class ZxTableModel; +class ZxObjCurveBase; +class ZxDataGaugeBase; +class ZxObjBase; +class M_GUI_PLOT_EXPORT iWxTablePF : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxTablePF(const QString& sTitle, + bool bPressure, + QWidget *parent = 0); + ~iWxTablePF(); + + // 初始化 + virtual void initUI(); + + // 是否显示toolbar + void setToolBarVisible(bool b); + void setToolBarCmdType(QString s); + + // 数据 + void changedTitle(bool bPressure); + void clearDataPF(); + void setDataPF(VVecFloat &vvec); + VVecFloat getDataPF(); + + // 刷新 + void freshTableByObj(ZxObjBase* p, bool bPtsOnly); + virtual void freshBrotherByTable(); + +protected: + + virtual void paintEvent(QPaintEvent *); + +public slots: + + // Toolbar按钮消息响应 + virtual void slotBtnTriggered(); + virtual void slotSaveDatabase(); + + // 表格改变 + void slotTableCellChanged(const QModelIndex&, const QModelIndex&); + void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + +signals: + + // 初始化对工具栏进行调整 + void sigAdjustToolBar(QToolBar*&); + + // 在保存时,通过该信号获取对应的DataObj + void sigGetDataObjOfView(ZxTableView* pView, ZxDataGaugeBase*& p); + + // 数据发生了改变 + void sigTableDataChanged(VVecFloat&); + +protected: + + // 初始化 + virtual QHBoxLayout* initToolBars(); + virtual ZxTableView* initTableView(); + + // 默认值 + QStringList getDefaultTitles(); + VVecVariant getDefaultData(int nCol); + + // 相关按钮的响应 + void loadDatabase(ZxTableModel* pModel); + void loadFromExcel(ZxTableModel* pModel); + + // 数据格式转换 + VVecFloat convertVVec(VVecVariant vvec); + +protected: + + ZxTableView* m_pTableView; //视图 + ZxObjBase* m_pObj; //关联的井点对象 + bool m_bPressure; //压力or流量 + bool m_bShowToolBar; //是否显示toolbar + + QString m_sCmdType; + +}; diff --git a/Include/mGui/mGuiPlot/mGuiPlot_global.h b/Include/mGui/mGuiPlot/mGuiPlot_global.h new file mode 100644 index 0000000..4056020 --- /dev/null +++ b/Include/mGui/mGuiPlot/mGuiPlot_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(M_GUI_PLOT_LIBRARY) +# define M_GUI_PLOT_EXPORT Q_DECL_EXPORT +#else +# define M_GUI_PLOT_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/mGui/mGuiTree/TreeWx/TreeItemBase.h b/Include/mGui/mGuiTree/TreeWx/TreeItemBase.h new file mode 100644 index 0000000..3fa5707 --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeItemBase.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include +#include "mGuiTree_global.h" + +class M_GUI_TREE_EXPORT TreeItemBase : public QTreeWidgetItem +{ +public: + + TreeItemBase(QTreeWidget* parent = 0); + ~TreeItemBase(); + +public slots: + + // item的属性 + void setExtInfos(QMap& map); + QMap getExtInfos(); + +public: + + QMap m_mapExtInfos; + QString m_sNameNew; //即将重命名的新名字 +}; diff --git a/Include/mGui/mGuiTree/TreeWx/TreeItemMain.h b/Include/mGui/mGuiTree/TreeWx/TreeItemMain.h new file mode 100644 index 0000000..394e8aa --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeItemMain.h @@ -0,0 +1,31 @@ +#pragma once + +#include "Defines.h" +#include "TreeItemBase.h" +#include "TreeNodeDescBase.h" + +class ZxDataProject; +class ZxDataObject; +class M_GUI_TREE_EXPORT TreeItemMain : public TreeItemBase +{ +public: + + TreeItemMain(QTreeWidget* parent = 0); + ~TreeItemMain(); + + void setNodeType(MainTreeNodeType o); + void setTableName(QString sTable); + void setNodeDesc(TreeNodeDescBase* p); + void setDataObj(ZxDataObject* p); + ZxDataObject* getDataObj(); + +public slots: + +public: + MainTreeNodeType m_oType; + QString m_sTable; + TreeNodeDescBase* m_pNodeDesc; + + ZxDataObject* m_pDataObj; + +}; diff --git a/Include/mGui/mGuiTree/TreeWx/TreeNodeDescBase.h b/Include/mGui/mGuiTree/TreeWx/TreeNodeDescBase.h new file mode 100644 index 0000000..ddaf540 --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeNodeDescBase.h @@ -0,0 +1,24 @@ +#pragma once + +#include "mModuleDefines.h" +#include "mGuiTree_global.h" + +/// @brief 暂时是最低级别Child的描述 +class M_GUI_TREE_EXPORT TreeNodeDescBase +{ +public: + + TreeNodeDescBase(); + ~TreeNodeDescBase(); + + bool isDataNode(); + +public: + QString m_sName; //节点名称 + QString m_sTable; //节点对应的表名 + QString m_sIcon; //节点对应的图标名 + + MainTreeNodeType m_oType; //类型 +}; + +typedef QVector vecTreeNodeDescPtr; diff --git a/Include/mGui/mGuiTree/TreeWx/TreeWxBase.h b/Include/mGui/mGuiTree/TreeWx/TreeWxBase.h new file mode 100644 index 0000000..a0f059b --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeWxBase.h @@ -0,0 +1,87 @@ +#pragma once + +#include +#include "mModuleDefines.h" +#include "TreeItemBase.h" + +class M_GUI_TREE_EXPORT TreeWxBase : public QTreeWidget +{ + Q_OBJECT + +public: + + TreeWxBase(QWidget* parent = 0); + ~TreeWxBase(); + + virtual void refresh(); + //virtual QStringList getParentsOf(TreeItemBase* p); + +protected: + + // 公共Action初始化 + virtual void initCommonActions(); + + // 右键菜单功能总调用 + virtual void initContextMenu(QMenu* pMenu); + // 空节点通用 + virtual void initContextMenuCommonAll(QMenu* pMenu); + // 节点通用 + virtual void initContextMenuCommonNode(QMenu* pMenu); + + // 填充 + virtual void fillTree(); + + // 右键的部分功能重载实现 + virtual bool showOrEditNode(QTreeWidgetItem* pItem); + virtual bool delCurrentNodes(QList& listItems); + virtual bool renameCurrentNode(QString sNew); + virtual void doubleClickItem(QTreeWidgetItem* pItem); + virtual void enteredItem(QTreeWidgetItem* pItem); + + // 拖拽支持 + void dragEnterEvent(QDragEnterEvent* event); + void dropEvent(QDropEvent* event); + + // 拖拽相关的信号 + virtual bool isDragAccepted(QDragEnterEvent* event); + virtual void dealwithDrop(QDropEvent* event); + +Q_SIGNALS: + + // 触发项目树节点 + void sigRunNodeCmd(TreeItemBase* , TreeNodeCmd, bool&); + +public slots: + + // 具体响应函数 + virtual void slotShowContextMenu(const QPoint &pos); + virtual void slotItemDoubleClicked(QTreeWidgetItem* item, int column); + virtual void slotItemEntered(QTreeWidgetItem* item, int column); + + // 节点右键操作 + virtual void slotDelNodes(); + virtual void slotEditNode(); + virtual void slotRenameNode(); + virtual void slotItemNodeNameChanged(); //节点名称改变的槽 + + // 节点统一操作 + virtual void slotExpandNode(); + virtual void slotExpandNodeAll(); + virtual void slotCollapseNode(); + virtual void slotCollapseNodeAll(); + virtual void slotRefresh(); + +protected: + + QMenu* m_pMenu; + TreeItemBase* m_pItemSel; + TreeItemBase* m_pRenameItem; + + // 公共的Action项 + QAction* m_pActionRename; + QAction* m_pActionEdit; + QAction* m_pActionDel; + + // 临时 + bool m_bDraging; +}; diff --git a/Include/mGui/mGuiTree/TreeWx/TreeWxMain.h b/Include/mGui/mGuiTree/TreeWx/TreeWxMain.h new file mode 100644 index 0000000..f52d3c5 --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeWxMain.h @@ -0,0 +1,181 @@ +#pragma once + +#include "TreeItemMain.h" +#include "TreeWxBase.h" +#include "TreeNodeDescBase.h" + +class ZxDataObjectEx; +class ZxDataWell; +class ZxDataJobInfo; +class ZxRstJobUtils; +class ZxDataGaugeBase; + +class M_GUI_TREE_EXPORT TreeWxMain : public TreeWxBase +{ + Q_OBJECT + +public: + + TreeWxMain(QWidget* parent = 0); + ~TreeWxMain(); + + // 全局项目指针 + void setDataProject(ZxDataProject* p); + + // 数据树与成果树需要相互关联+消息响应 + void setBrother(TreeWxMain* p); + void setUnableSP(bool b); + + // 根据某节点获取其父井节点的Code + virtual QString getParentWellCodeOf(TreeItemBase* p); + + // 获取特定节点对应的井、Job信息 + bool getObjCodeInfos(QTreeWidgetItem* p, + QString& sWell, + QString& sJob, + QString& sWndID); + + // 当批量保存井基础数据后的刷新 +// virtual void freshTreeEx(); + + // 刷新Brother + void freshBotherTreeWx(); + + // 根据井型油气水获取相应图标 + static void getWellIcon(QString sType, QString& sIcon); + + // 这是在SubWndData表格右键删除时,触发,然后借助树进行响应 + // 不用tips进行确认,在此之前已经确认 + virtual bool forceDelByDataObjs(QStringList& listKeys, \ + QString& sTable, \ + QString& sError); + virtual bool collectItemsOfDataObjs(QList& list, \ + QStringList& listKeys, \ + QString& sTable, \ + QString& sError); + bool collectItemsOfDataCodes(TreeItemBase* pItemP, \ + bool bTopLevelOnly, \ + QStringList& listKeys, \ + QList& listTrItems); + + // 遍历查找所有井一级的节点 + virtual bool findAllWellNodes(TreeItemBase* pItemP, \ + QList& listTrItems); + + // 遍历查找数据对象所关联的节点 + virtual TreeItemMain* findItemNodeOf(ZxDataObject* pObj, TreeItemBase* pItemP); + // 拖拽时,暂时移走 + virtual void takeawayItemNode(TreeItemBase* pItem); + // 插入节点 + virtual void insertItemNode(TreeItemBase* pItem, TreeItemBase* pItemP, int nIndex); + // 查找父级节点(其中类型为oType) + virtual TreeItemMain* findParentItemNodeOf(TreeItemBase* pItem, MainTreeNodeType oType); + // 是否父级节点 + virtual bool isParentLevelsOf(TreeItemBase* pItem, TreeItemBase* pItemP); + + // 改变当前选项状态 + virtual void modifyCurrentItemStates(QString sItemName, bool bInit); + + // 保存时,确保树中的Node的存在 + virtual TreeItemMain* makeureBlockNode(QString sBlockName); + virtual TreeItemMain* makeureWellNode(ZxDataWell* pWell); + +protected: + + // 填充 + virtual void fillTree(); + + // 填写树 + //virtual void initTopLevels(); + virtual void initTopLevels(); + virtual void initTopLevel_OneBlock(QString sBlockName, \ + TreeItemMain*& pItem, \ + ZxDataObjectList& vecObjs); + virtual void initTopLevel_OneWell(ZxDataObject* p, \ + TreeItemMain*& pItem, \ + TreeItemMain* pItemP, \ + bool bExcusive = true); + virtual void initSubLevels(TreeItemMain* pItem); + + // 填写时,该数据对象是否考虑,比如填写成果树时,如果井下面没有成果则不考虑 + virtual bool isDataObjConsidered(ZxDataObject* pObj); + +protected: + + // 获取筛选后的区块名称(可能根据井进行适当筛选,比如没有成果的) + QStringList getFilteredBlocks(bool bAutoSort = true); + + // 初始化节点信息,从INi获取 + void loadCommonNodeDescs(); + + // 右键菜单功能_节点通用 + virtual void initContextMenuCommonNode(QMenu* pMenu); + // 空节点通用 + virtual void initContextMenuCommonAll(QMenu* pMenu); + + // 右键节点级别的菜单 + virtual void initContextMenuWell(QMenu* pMenu); + virtual void initContextMenuBlock(QMenu* pMenu); + + // 右键的部分功能重载实现 + virtual bool showOrEditNode(QTreeWidgetItem* pItem); + virtual bool delCurrentNodes(QList &listItems); + virtual bool delOneNode(TreeItemMain* pItem); + virtual bool renameCurrentNode(QString sNew); + virtual void doubleClickItem(QTreeWidgetItem* pItem); + virtual void enteredItem(QTreeWidgetItem* pItem); + + // 当p的一孩子被删除后,刷新p + // 此时,孩子已经被删除 + virtual void updateParentWhenDel(QTreeWidgetItem* pParent); + + // 拖拽相关的信号 + virtual bool isDragAccepted(QDragEnterEvent* event); + virtual void dealwithDrop(QDropEvent* event); + ZxDataObjectEx* parseMimeData(const QMimeData* pMimeData, \ + MainTreeNodeType& oType); + +Q_SIGNALS: + + // 当前井该变 + void sigSetCurrentWell(const QString&, const QString&); + void sigConfirmChangingCurWell(bool& b); + +protected: + + // 更改节点属性 + virtual void changeNodeAttrs(TreeItemMain*& p); + + // 获取节点tips,以\r\n换行 + virtual QString getTipsOf(TreeItemMain*& p); + + // 获取井的区块名称,如果为空,则返回“其他” + QString getBlockNameOf(ZxDataWell* pDataWell); + +public slots: + + // 右键响应 + void slotSetCurrentWell(); //设为当前井 + void slotScanData(); //浏览数据 + void slotEditNodeObj(); //编辑Node + +protected: + + // 树节点特殊的节点标识 + QString m_sAllDataTag; + QString m_sWellDataTag; + + // 部分常用节点信息,从ini获取 + vecTreeNodeDescPtr m_vecCommonNodeDescs; + + // 数据对象载体 + ZxDataProject* m_pDataProject; + + // Brother + TreeWxMain* m_pBrother; + + // 在其它brother刷新中,不能触发信号 + bool m_bUnableSP; + + bool m_bEnableBlockOthers;//是否启用,区块没填写时,自动为其他 +}; diff --git a/Include/mGui/mGuiTree/TreeWx/TreeWxMainDa.h b/Include/mGui/mGuiTree/TreeWx/TreeWxMainDa.h new file mode 100644 index 0000000..4c5ccde --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeWxMainDa.h @@ -0,0 +1,91 @@ +#pragma once + +#include "TreeWxMain.h" + +class M_GUI_TREE_EXPORT TreeWxMainDa : public TreeWxMain +{ + Q_OBJECT + +public: + + TreeWxMainDa(QWidget* parent = 0); + ~TreeWxMainDa(); + + // 填写树 +// virtual void fillTree(); +// virtual void initTopLevels(); +// virtual void initTopLevel_OneWell(ZxDataObject* p, \ +// TreeItemMain*& pItem, \ +// TreeItemMain* pItemP, \ +// bool bExcusive = true); + virtual void initSubLevels(TreeItemMain* pItem); + + void initSubLevel_WellPF(TreeItemMain *&pParent); + void initThirdLevel_WellPF(TreeItemMain*& pParent); + + void initSubLevel_WellOther(TreeItemMain *&pParent); + void initThirdLevel_WellOther(TreeItemMain*& p); + +// void initTopLevel_AllData(); +// void initSubLevel_AllData(TreeItemMain *&p); + + // 改变当前选项状态 + virtual void modifyCurrentItemStates(QString sItemName, bool bInit); + +protected: + + /// 右键菜单功能_节点通用 + virtual void initContextMenuCommonNode(QMenu* pMenu); + // 空节点通用 + virtual void initContextMenuCommonAll(QMenu* pMenu); + + // 右键节点级别的菜单 + virtual void initContextMenuWell(QMenu* pMenu); + + void initContextMenuDataChild(QMenu* pMenu); + void initContextMenuPFChild(QMenu* pMenu); + + virtual bool delCurrentNodes(QList &listItems); + + // 如果点击的是区块或井,那么获取油田、区块信息 + bool getCurItemExtInfos(QMap& map); + + virtual void changeNodeAttrs(TreeItemMain*& p); + virtual QString getTipsOf(TreeItemMain*& p); + + /////////////////////////////////////////////////////////// + // 拖拽相关的函数处理,很啰嗦 + virtual bool isDragAccepted(QDragEnterEvent* event); + virtual void dealwithDrop(QDropEvent* event); + + bool findParentItem2Drop(MainTreeNodeType oType, \ + QModelIndex modelIndex, \ + TreeItemMain*& pItemP, \ + int& nIndex); + bool _findParentItem2DropWell(QModelIndex modelIndex, \ + TreeItemMain*& pItemP, \ + int& nIndex); + bool _findParentItem2DropPF(QModelIndex modelIndex, \ + TreeItemMain*& pItemP, \ + int& nIndex); + + void dropNodeItem(TreeItemMain* pItemSrc, \ + TreeItemMain* pItemDestP, \ + MainTreeNodeType oType, int nIndex); + bool makesureMoveNode(TreeItemMain* pItemSrc, \ + TreeItemMain* pItemDestP, \ + MainTreeNodeType oType); + bool updateDataObj(ZxDataObject* pDataObj, \ + TreeItemMain* pItemSrcA, \ + TreeItemMain* pItemDestP, \ + MainTreeNodeType oType); + /////////////////////////////////////////////////////////// + +public slots: + + void slotNewWell(); //新建井 + void slotScanAndDragOnePF();//拖拽或显示PF单条曲线 + // 当通过外界创建了一个PF数据后,刷新到TreeCtrl + void slotPfObjAppended(ZxDataGaugeBase* pObj); + +}; diff --git a/Include/mGui/mGuiTree/TreeWx/TreeWxMainJb.h b/Include/mGui/mGuiTree/TreeWx/TreeWxMainJb.h new file mode 100644 index 0000000..7d0ebb9 --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeWxMainJb.h @@ -0,0 +1,51 @@ +#pragma once + +#include "TreeWxMain.h" + +class M_GUI_TREE_EXPORT TreeWxMainJb : public TreeWxMain +{ + Q_OBJECT + +public: + + TreeWxMainJb(QWidget* parent = 0); + ~TreeWxMainJb(); + + // 刷新视图 + virtual void fillTree(); +// virtual void freshTreeEx(); + virtual void initTopLevel_OneWell(ZxDataObject* p, \ + TreeItemMain*& pItem, \ + TreeItemMain* pItemP, \ + bool bExcusive = true); + virtual void initSubLevels(TreeItemMain* pItem); + + // 改变当前选项状态 + virtual void modifyCurrentItemStates(QString sItemName, bool bInit); + +protected: + + // 公共Action初始化 + virtual void initCommonActions(); + + // 右键菜单功能_节点通用 + virtual void initContextMenuCommonNode(QMenu* pMenu); + + // 空节点通用 + virtual void initContextMenuCommonAll(QMenu* pMenu); + + // 右键节点级别的菜单 + virtual void initContextMenuJob(QMenu* pMenu); + + virtual void changeNodeAttrs(TreeItemMain*& p); + virtual QString getTipsOf(TreeItemMain*& p); + +public slots: + + void slotNewJob(); + void slotJobManager(); + void slotSetAsDefault(); + +Q_SIGNALS: + +}; diff --git a/Include/mGui/mGuiTree/TreeWx/TreeWxMainRs.h b/Include/mGui/mGuiTree/TreeWx/TreeWxMainRs.h new file mode 100644 index 0000000..88e80bc --- /dev/null +++ b/Include/mGui/mGuiTree/TreeWx/TreeWxMainRs.h @@ -0,0 +1,67 @@ +#pragma once + +#include "TreeWxMain.h" + +class M_GUI_TREE_EXPORT TreeWxMainRs : public TreeWxMain +{ + Q_OBJECT + +public: + + TreeWxMainRs(QWidget* parent = 0); + ~TreeWxMainRs(); + + // 初始化 + virtual void fillTree(); + virtual bool isDataObjConsidered(ZxDataObject* pObj); + virtual void initSubLevels(TreeItemMain* pItem); + void initThirdLevel_WellRs(TreeItemMain*& pParent); + TreeItemMain* initThirdLevel_WellRs_One(TreeItemMain*& pParent, ZxDataObject* p); + + // 作业保存后,刷新树节点 + bool updateRsNodes(ZxDataWell* pWell, + ZxRstJobUtils* pJobRst); + // 获取能够Rst Fit 的Item + // 允许不同井不同类型的成果参数进行对比 + // 成果对比也借用了该函数 + bool getRstFitItems(QList& listRst, int nMinCount); + +protected: + + // 公共Action初始化 + virtual void initCommonActions(); + + // 右键菜单功能_节点通用 + virtual void initContextMenuCommonNode(QMenu* pMenu); + + // 空节点通用 + virtual void initContextMenuCommonAll(QMenu* pMenu); + + // 右键节点级别的菜单 + virtual void initContextMenuWell(QMenu* pMenu); + void initContextMenuRs(QMenu* pMenu); + + virtual void changeNodeAttrs(TreeItemMain*& p); + virtual QString getTipsOf(TreeItemMain*& p); + +Q_SIGNALS: + + // 对于作业的处理,获取能否加载或保存 + void sigCanLoadSaveRss(TreeItemMain* pItemSel, bool bForLoad, bool& b); + +public slots: + + virtual void slotSaveNodeJobs(); + virtual void slotLoadNodeJobs(); + + virtual void slotRstFit();//参数对比(敏感性分析) + virtual void slotRstCp();//成果对比 + +protected: + + QAction* m_pActionRsLoad; + QAction* m_pActionRsSave; + + QAction* m_pActionRstFit; + QAction* m_pActionRstCp; +}; diff --git a/Include/mGui/mGuiTree/iDockBaseWx.h b/Include/mGui/mGuiTree/iDockBaseWx.h new file mode 100644 index 0000000..afb45ff --- /dev/null +++ b/Include/mGui/mGuiTree/iDockBaseWx.h @@ -0,0 +1,62 @@ +#pragma once + +#include +#include + +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "ZxDockWidget.h" + +#include "mGuiTree_global.h" + +class M_GUI_TREE_EXPORT iDockBaseWx : public ZxDockWidget +{ + Q_OBJECT + +public: + explicit iDockBaseWx(const QString& sTitle, QWidget *parent = 0); + ~iDockBaseWx(); + + // 多个Tab或单个 + virtual void initUI(QStringList listTags, QStringList listIcons = QStringList()); + // 功能按钮 + virtual QHBoxLayout* initToolBars(); + // 搜索相关 + virtual QHBoxLayout* initSearchAbout(); + // 返回窗体 + QWidget* getWxItemOf(QString sTag); + // 返回当前窗体 + QWidget* getCurrentWx(); + // 返回TreeWidget + QTreeWidget* getTreeWxFrom(QWidget* p); + +// virtual QSize sizeHint() const; + +protected: + + // 创建第nIndex个 + virtual QWidget* buildCentrlWx(int nIndex); + bool getTagOf(int nIndex, QString& sTag, QString& sIcon); + +protected slots: + void slotSearchTextChanged(QString); + void slotFindNext(); + // 这是为了当用户选择时,清除原有的Find造成的状态 + void slotTreeCurrentChanged(QTreeWidgetItem*,QTreeWidgetItem*); + +protected: + + // 内部包含的窗体,可以多个或一个 + QStringList m_listTags; + QStringList m_listIcons; + QMap m_mapAllWxs; + +protected: + + // 查找功能 + QPushButton* m_pBtnFind; //查找按钮 + QLineEdit* m_pTbxValue; //要查找内容 + QList m_vecFindItems; //当前查找到的项 + int m_nFindIndex; //当前是第几个 + +}; diff --git a/Include/mGui/mGuiTree/iDockJobs.h b/Include/mGui/mGuiTree/iDockJobs.h new file mode 100644 index 0000000..6ca0226 --- /dev/null +++ b/Include/mGui/mGuiTree/iDockJobs.h @@ -0,0 +1,23 @@ +#pragma once + +#include "iDockBaseWx.h" + +class ZxDataJobInfo; +class M_GUI_TREE_EXPORT iDockJobs : public iDockBaseWx +{ + Q_OBJECT + +public: + explicit iDockJobs(const QString& sTitle, QWidget *parent = 0); + ~iDockJobs(); + +public: + + void freshJobs(QVector& vecJobInfos); + +protected: + virtual QWidget* buildCentrlWx(int nIndex); + +private: + +}; diff --git a/Include/mGui/mGuiTree/iDockLogs.h b/Include/mGui/mGuiTree/iDockLogs.h new file mode 100644 index 0000000..4a6b53c --- /dev/null +++ b/Include/mGui/mGuiTree/iDockLogs.h @@ -0,0 +1,18 @@ +#pragma once + +#include "iDockBaseWx.h" + +class M_GUI_TREE_EXPORT iDockLogs : public iDockBaseWx +{ + Q_OBJECT + +public: + explicit iDockLogs(const QString& sTitle, QWidget *parent = 0); + ~iDockLogs(); + +protected: + virtual QWidget* buildCentrlWx(int nIndex); + +private: + +}; diff --git a/Include/mGui/mGuiTree/iDockModelOption.h b/Include/mGui/mGuiTree/iDockModelOption.h new file mode 100644 index 0000000..ba833c7 --- /dev/null +++ b/Include/mGui/mGuiTree/iDockModelOption.h @@ -0,0 +1,19 @@ +#pragma once + +#include "iDockBaseWx.h" + +class M_GUI_TREE_EXPORT iDockModelOption : public iDockBaseWx +{ + Q_OBJECT + +public: + explicit iDockModelOption(const QString& sTitle, QWidget *parent = 0); + ~iDockModelOption(); + +protected: + virtual QWidget* buildCentrlWx(int nIndex); + +private: + + +}; diff --git a/Include/mGui/mGuiTree/iDockPlots.h b/Include/mGui/mGuiTree/iDockPlots.h new file mode 100644 index 0000000..10c50df --- /dev/null +++ b/Include/mGui/mGuiTree/iDockPlots.h @@ -0,0 +1,21 @@ +#pragma once + +#include "iDockBaseWx.h" + +class iPlotCurveWxT; +class M_GUI_TREE_EXPORT iDockPlots : public iDockBaseWx +{ + Q_OBJECT + +public: + explicit iDockPlots(const QString& sTitle, QWidget *parent = 0); + ~iDockPlots(); + iPlotCurveWxT* getPlotWx(); + +protected: + virtual QWidget* buildCentrlWx(int nIndex); + +private: + iPlotCurveWxT* m_pPlotWx; + +}; diff --git a/Include/mGui/mGuiTree/iDockResult.h b/Include/mGui/mGuiTree/iDockResult.h new file mode 100644 index 0000000..20392b2 --- /dev/null +++ b/Include/mGui/mGuiTree/iDockResult.h @@ -0,0 +1,21 @@ +#pragma once + +#include "iDockBaseWx.h" + +class M_GUI_TREE_EXPORT iDockResult : public iDockBaseWx +{ + Q_OBJECT + +public: + explicit iDockResult(const QString& sTitle, QWidget *parent = 0); + ~iDockResult(); + + void setResultLog(QMap > mmapResult); + +protected: + virtual QWidget* buildCentrlWx(int nIndex); + +private: + QTextEdit* m_pResultLog; + +}; diff --git a/Include/mGui/mGuiTree/iDockTableView.h b/Include/mGui/mGuiTree/iDockTableView.h new file mode 100644 index 0000000..2a69a5e --- /dev/null +++ b/Include/mGui/mGuiTree/iDockTableView.h @@ -0,0 +1,35 @@ +#pragma once + +#include "iDockBaseWx.h" + +class ZxTableView; +class M_GUI_TREE_EXPORT iDockTableView : public iDockBaseWx +{ + Q_OBJECT + +public: + explicit iDockTableView(const QString& sTitle, QWidget *parent = 0); + ~iDockTableView(); + + // 获取View + ZxTableView* getTableView(int nIndex); + int indexOf(ZxTableView* p); + + // 是否显示toolbar + void setToolBarVisible(bool ); + +protected: + virtual QWidget* buildCentrlWx(int nIndex); + + // 功能按钮 + virtual QHBoxLayout* initToolBars(); + +private: + + // 是否显示toolbar + bool m_bShowToolBar; + + // TableView载体 + QVector m_vecTableViews; + +}; diff --git a/Include/mGui/mGuiTree/iDockWellExplorer.h b/Include/mGui/mGuiTree/iDockWellExplorer.h new file mode 100644 index 0000000..5c50862 --- /dev/null +++ b/Include/mGui/mGuiTree/iDockWellExplorer.h @@ -0,0 +1,31 @@ +#pragma once + +#include "mModuleDefines.h" +#include "iDockBaseWx.h" + +class TreeWxBase; +class TreeWxItemBase; + +class M_GUI_TREE_EXPORT iDockWellExplorer : public iDockBaseWx +{ + Q_OBJECT + +public: + + explicit iDockWellExplorer(const QString& sTitle, QWidget *parent = 0); + ~iDockWellExplorer(); + + TreeWxBase* getMainTreeWx(); + + void setDTM(DockTreeMode o); + DockTreeMode getDTM(); + +protected: + virtual QWidget* buildCentrlWx(int nIndex); + +private: + TreeWxBase* m_pMainTreeWx; //主项目树 + + // 区分是数据还是Job还是结果 + DockTreeMode m_oDtm; +}; diff --git a/Include/mGui/mGuiTree/mGuiTree_global.h b/Include/mGui/mGuiTree/mGuiTree_global.h new file mode 100644 index 0000000..2aaa550 --- /dev/null +++ b/Include/mGui/mGuiTree/mGuiTree_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(M_GUI_TREE_LIBRARY) +# define M_GUI_TREE_EXPORT Q_DECL_EXPORT +#else +# define M_GUI_TREE_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/mGui/mSubWnd/SubWxs/iResCpSrcDesc.h b/Include/mGui/mSubWnd/SubWxs/iResCpSrcDesc.h new file mode 100644 index 0000000..7dfbb2e --- /dev/null +++ b/Include/mGui/mSubWnd/SubWxs/iResCpSrcDesc.h @@ -0,0 +1,30 @@ +#pragma once + +#include "iDlgBase.h" +#include "mSubWnd_global.h" + +class ZxRstJobUtils; +class ZxMdiSubWindow; + +class M_SUB_WND_EXPORT iResCpSrcDesc +{ +public: + iResCpSrcDesc() + { + m_pSubChild = NULL; + m_oType = CST_Unknown; + } + + // nMode = 0://已经加载 1://未保存 2:未加载 + enum CpSrcType + { + CST_Loaded = 0, //成果已经保存,并且已经加载 + CST_Unsaved, //待保存 + CST_Unloaded, //保存的成果,但未加载 + CST_Unknown + }; + +public: + ZxMdiSubWindow* m_pSubChild; + CpSrcType m_oType; +}; diff --git a/Include/mGui/mSubWnd/SubWxs/iWxRunOption.h b/Include/mGui/mSubWnd/SubWxs/iWxRunOption.h new file mode 100644 index 0000000..5f8d10b --- /dev/null +++ b/Include/mGui/mSubWnd/SubWxs/iWxRunOption.h @@ -0,0 +1,141 @@ +#pragma once + +#include "iDlgBase.h" +#include "mSubWnd_global.h" + +class ZxDataWell; +class iSubWnd; +class iJobRun; +class iGuiPlot; +class ZxTableViewEx; +class M_SUB_WND_EXPORT iWxRunOption : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iWxRunOption(QWidget *parent = 0); + ~iWxRunOption(); + + // 初始化 + virtual void initUI(); + virtual void initTableViews(); + virtual void initChartView(); + + // 刷新 + virtual void freshUI(bool bAutoRun = false); + +public: + + // 外界调用参数 + void setDataWell(ZxDataWell* p); + void setAllJobRuns(QVector* p); + void setOneJobRun(iJobRun* pJobRun); + + // 返回对话框选择的结果 + virtual iJobRun* getCurSelJobRun(); + virtual iSubWnd* getSubWndApplied(); + virtual bool isNewIfNull(); + virtual bool isSetJobAsCurrent(); + virtual QString getSubWndTitle(); + +private slots: + + // TODO 这两个函数是为了子类应用,目前放此处有些不妥 + void on_cbxWnds_currentIndexChanged(const QString &arg1); + void on_cbxNewIfNull_clicked(); + + virtual void slotJobRunSelectionChanged(); + void on_cbxJobType_currentIndexChanged(const QString &arg1); + +protected: + + // 下拉流体类型 + virtual void OnCbxJobTypeChanged(); + virtual bool isProperJobType(VecVariant& vec, bool bMiniFracMode = false); //筛选过滤合适的部分 + +signals: + + // 从主窗体获取 + void sigGetFitWnds(QMap& map); + void sigRunOptionChanged(iJobRun*, iSubWnd*, bool, bool, QString); + +protected: + + // 窗体名称的切换 + void changeNewWndName(); + + // 填充下拉 + void fillCbxWnds(QComboBox* p); + virtual bool fuzzyCbxJobRuns(); + + // 涉及的内部处理函数 + QVector getAllJobRuns(QString sFilterType = ""); + QStringList getAllJobTypes(QVector& vec, bool bMiniFracMode = false); + QString getCurJobID(); + iJobRun* getJobRunByID(QVector& vec, QString sID); + bool checkJobIdByPF(iJobRun* p); + QString getFluidOfCurWell(); + void filterJobRunsByPhase(QVector& vec, iJobRun* p); + + // 刷新组件 + virtual void refreshChartInfo(); + void refreshSmoothState(); + void refreshThinningState(); + + // 刷新图形时调用 + // 获取当前选中的Job的流体类型,油气水 + virtual QString getCurFluidType(); + + // 结果处理 + virtual bool runApply(); + virtual bool dealwithJobRun(); + virtual bool dealwithWndSel(); + + //zxf设置当前的job + virtual bool setCurrentJobRun(); + +protected: + + // 井 + ZxDataWell* m_pDataWell; + + // 当前所有JobRun,输入主窗口,从主窗口传入 + QVector* m_pVecJobRuns; + + // 当前 + iJobRun* m_pJobRun; + + // SubWnd + iSubWnd* m_pSubWnd; + + // 绘图组件 + iGuiPlot* m_pPlotWx; + + // 表格组件 + ZxTableViewEx* m_pTableViewJ; + + // 下拉Job类型 + QComboBox* m_cbxJobTypes;//ui->cbxJobType + + QCheckBox* m_pCbxSetAsCurrent; + QCheckBox* m_pCbxNewIfNull; + QLineEdit* m_pTbxNewWndName; + + // 下拉窗体 + QComboBox* m_pCbxWnds; + + //table中填充的信息 + VVecVariant m_vvecInfos; + + //当前job的code + QString m_sCurCode; + + // 对于加入多相之后,只能固定JobRun,不能选择。 + // 即在流动段右键弹出时,如果发现当前Job为多相,则固定 + bool m_bFixJobMode; + bool m_bAutoFix; + + // 类型标识:是否小型压裂 + bool m_bMiniFracMode; +}; diff --git a/Include/mGui/mSubWnd/SubWxs/iWxRunOptionStd.h b/Include/mGui/mSubWnd/SubWxs/iWxRunOptionStd.h new file mode 100644 index 0000000..ac3a7e3 --- /dev/null +++ b/Include/mGui/mSubWnd/SubWxs/iWxRunOptionStd.h @@ -0,0 +1,110 @@ +#pragma once + +#include "iWxRunOption.h" + +class ZxSegmentInfo; + +namespace Ui { + class iWxRunOptionStd; +} + +class M_SUB_WND_EXPORT iWxRunOptionStd : public iWxRunOption +{ + Q_OBJECT + +public: + + explicit iWxRunOptionStd(QWidget *parent = 0, bool bMiniFrac = false); + ~iWxRunOptionStd(); + + // 初始化 + virtual void initUI(); + virtual void initTableViews(); + virtual void initChartView(); + + // 外界调用参数 + void setSegmentInfo(ZxSegmentInfo* p); + + // 默认调用模式,不弹出对话框 + virtual void runByDefault(); + + virtual void runByBtnOk(); + virtual bool runByBtnApply(); + + // 刷新 + virtual void freshUI(bool bAutoRun = false); + + // 返回对话框选择的结果 + + bool getDataPandF(QVector& vecP, \ + QVector& vecF); + + +private slots: + + // 是否启用光滑和抽稀 + void on_cbxUseSmoothing_clicked(); + void on_cbxUseThinning_clicked(); + + // OK cancel + void on_btnOK_clicked(); + void on_btnCancel_clicked(); + void on_btnApply_clicked(); + + virtual void slotJobRunSelectionChanged(); +//protected: + + // 设置MpData + void on_btnSetMpData_clicked(); + + void on_cbxBuildUpOrDown_currentIndexChanged(int index); + +protected: + + // 下拉流体类型 + virtual void OnCbxJobTypeChanged(); + +signals: + +protected: + + // 填充下拉 + virtual bool fuzzyCbxJobRuns(); + + // 刷新组件 + void refreshSegInfo(ZxSegmentInfo* p); + virtual void refreshChartInfo(); + void refreshSmoothState(); + void refreshThinningState(); + + // 结果处理 + virtual bool runApply(); + virtual bool dealwithWndSel(); + bool dealwithSmoothAndThin(bool bMultiPhase); + + //zxf设置当前的job + virtual bool setCurrentJobRun(); + + // 对于多相确保多相数据 + void makesureMpData(QString sCurveIdF, QVector& vecF); + +protected: + + Ui::iWxRunOptionStd *ui; + + // 流动段载体 + ZxSegmentInfo* m_pSegInfo; + + // 多相数据,竖向排列,size为4,//注意:[0]时间,[1]油,[2]气,[3]水 + VVecFloat m_vvecMpData; + QString m_sFlowDataCode; + bool m_bIniting; + QVector m_vecBackupF; + + // 当前选择的 数据(如果截取) + QVector m_vecPtsCurveP; + QVector m_vecPtsCurveF; + + // 为了方便应用 + QComboBox* m_pCbxStepUpDown; +}; diff --git a/Include/mGui/mSubWnd/SubWxs/iWxTabShareOption.h b/Include/mGui/mSubWnd/SubWxs/iWxTabShareOption.h new file mode 100644 index 0000000..786c542 --- /dev/null +++ b/Include/mGui/mSubWnd/SubWxs/iWxTabShareOption.h @@ -0,0 +1,72 @@ +#pragma once + +#include +#include "iDlgBase.h" + +#include "mSubWnd_global.h" + +namespace Ui { +class iWxTabShareOption; +} + +class ZxSegmentInfo; +class ZxDataWell; +class iSubWnd; +class iJobRun; +class ZxTabWidget; +class M_SUB_WND_EXPORT iWxTabShareOption : public iDlgBase +{ + Q_OBJECT + +public: + explicit iWxTabShareOption(QWidget *parent = 0); + ~iWxTabShareOption(); + + virtual void initUI(); + + void setTabWx(ZxTabWidget* pTabWx); + +private: + + // 初始化 + void initTitle(); + void getAndCheckSubWnds(QMap& map); + void findSubWndsOf(bool bAnal, QMap& map); + void freshTypes(); + void freshWnds(); + + // 结果处理 + bool runApply(); + +signals: + + // 获取窗体的信号 + void signalGetAllWnds(QMap& map, ZxTabWidget* pTabWx); + // 结果处理的信号 + void sigCreateOneWnd(QString sWndTag, + QString sWndID, + iSubWnd* pWndRefer, + ZxTabWidget* pTabWx); + +private slots: + + void on_btnOK_clicked(); + void on_btnApply_clicked(); + void on_btnCancel_clicked(); + void on_btnHelp_clicked(); + + void on_radioButtonAnal_clicked(); + + void on_radioButtonFitting_clicked(); + + void on_cbxCopyFrom_clicked(); + +private: + Ui::iWxTabShareOption *ui; + + QMap m_mapAllSubWnds; + QMap m_mapAllSubWnds_a; //Anal + QMap m_mapAllSubWnds_f; //Fitting + + ZxTabWidget* m_pTabWx; +}; diff --git a/Include/mGui/mSubWnd/iModelCurveDesc.h b/Include/mGui/mSubWnd/iModelCurveDesc.h new file mode 100644 index 0000000..441aca2 --- /dev/null +++ b/Include/mGui/mSubWnd/iModelCurveDesc.h @@ -0,0 +1,33 @@ +#pragma once +#include "mSubWnd_global.h" +#include "mAlgDefines.h" +#include "iGuiPlot.h" +#include "iCurveDesc.h" + +//曲线的一些基本信息设置 +class M_SUB_WND_EXPORT iModelCurveDesc +{ +public: + + iModelCurveDesc(); + ~iModelCurveDesc(); + +public: + // 设置曲线数据 + void setCurveDescData(QString s, VecFloat &vecX, VecFloat &vecY); + + // 得到曲线的数据iCurveDesc(主要用于替换) + bool getCurveDescByName(QString s, int &ndex, iCurveDesc &o); + // 设置曲线 + void changeOrAppendCurveDesc(QString s, iCurveDesc &o); +protected: + + // 初始化曲线的线型,颜色等 + void initModelCurveDesc(); + + // 默认从后台模板加载一下 + bool loadFromTeml(iCurveDesc& o); + +protected: + QVector m_vecCurveDesc; +}; diff --git a/Include/mGui/mSubWnd/iSubWnd.h b/Include/mGui/mSubWnd/iSubWnd.h new file mode 100644 index 0000000..7b03a1c --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWnd.h @@ -0,0 +1,293 @@ +#pragma once + +#include "IxSerDes.h" +#include "IxPtyPano.h" +#include "ZxXpf.h" +#include "ZxSerializer.h" + +#include "ZxBaseUtil.h" +#include "mModuleDefines.h" + +#include "mSubWnd_global.h" + +class ZxMainWindow; +class ZxMdiSubWindow; +class ZxTabWidget; +class ZxPtyDock; +class iDockBaseWx; + +class ZxDataWell; +class ZxDataJobInfo; +class ZxDataGaugeBase; + +class ZxPlot; +class iGuiPlot; +class ZxRenderItem; + +class ZxRstJobWnd; + +// 各类型窗体MDI类型 +#define s_MdiType_DataManager "DataManager" +#define s_MdiType_DataEdit "DataEdit" +#define s_MdiType_DataAnal "DataAnal" +#define s_MdiType_DataIPR "DataIPR" +#define s_MdiType_DataMiniFr "DataMiniFr" +#define s_MdiType_DataAnalDn "DataDesign" +#define s_MdiType_DataFit "DataFit" +#define s_MdiType_DataConfig "DataConfig" +#define s_MdiType_ResCompare "ResCompare" +#define s_MdiType_DataNum "DataNum" +#define s_MdiType_Free "Free" + +// 子窗体基类 +class M_SUB_WND_EXPORT iSubWnd : public QMainWindow, + virtual public IxSerDes +{ + Q_OBJECT + +public: + + /// @brief 子窗体基类构造 + /// @param parent:父 + /// @param sExt指的是辅助信息,如操作的表名等等 + explicit iSubWnd(QWidget *parent = 0, QString sExt = ""); + ~iSubWnd(); + + void setMainWindow(ZxMainWindow* p); //主窗体 + + virtual void initUI(); //初始化入口 + virtual void configWnd(); //配置窗体 + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + virtual void firstLoadAndUpdate(); //窗体初始后允许数据加载及刷新 + virtual bool onConfirmClosing(); //窗体关闭之前的确认 + virtual void onActivated(); //当前窗体激活时被调用 + virtual void finalDeals(); //窗体完成并且在显示之前,允许再做些调整 + + void setProgressBar(QProgressBar* p); //进度条传递 + + virtual void setDataWell(ZxDataWell* p); //操作对象井传递 + ZxDataWell* getDataWell(); + + void setWndID(QString sID); //窗体ID + QString getWndID(); + + // 为了触发消息,新增标题修改函数,触发 + void setWndTag(QString s); + + // 是否强制创建MDI + bool isForcedMdiWnd(); + + void setMdiWndType(QString sType); //窗体MdiWndType + QString getMdiWndType(); + + void setMdiChild(ZxMdiSubWindow *p); + ZxMdiSubWindow* getMdiChild(); + ZxTabWidget* getTabWx(); + + // 临时变量,对应的窗体Obj + virtual void setRstJobWnd(ZxRstJobWnd* p); + ZxRstJobWnd* getRstJobWnd(); + + // 执行命令:通常来自Ribbon + virtual bool runCmdBy(QString sName, QString sID); + + /// @brief 命令是否Enabled的状态判断,通常来自Ribbon + /// @param b (out),true:Enabled false:disabled + /// @param sName (in),Cmd Name + /// @param nID (in),Cmd ID + /// @param bLicensed (in),当前是否有授权 + /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); + + // 辅助信息 + void setExt(QString s); + QString getExt(); + + // readonly + void setReadonly(bool b); + bool isReadonly(); + + // 对于缓存已经保存的压力流量进行刷新处理 + void addTempSavedPFs(QString sCode); + virtual void freshByTempSavedPFs(); + +public: + + void keyPressEvent(QKeyEvent* e); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onDeserialized(); + + // Rst + virtual bool saveRstInfoToArr(QByteArray& v, IxSerDes*& pSerObj); + virtual bool loadRstInfoFromArr(QByteArray& v, IxSerDes*& pSerObj); + + // graph + virtual bool loadOnePlot(ZxPlot*& p, QByteArray& v); + virtual bool saveOnePlot(ZxPlot* p, QByteArray& v); + + // 保存加载 + virtual bool loadRss(); + virtual bool saveRss(); + virtual bool _runSaveRss(ZxRstJobWnd* pRstWnd); + virtual bool _runLoadRss(ZxRstJobWnd* pRstWnd); + + // 状态 + virtual void setModified(bool b); + virtual bool isModified(); + +protected: + + // 初始化参数 + virtual void initStyleSheets(); //Sheet + + // 初始化UI + virtual void initUiMain(); + virtual QWidget* initUiMainWx(); + virtual void initUiDockPtys(); + virtual void initUiDockToolBar(); + virtual void initUiDockWxs(); + + // 绑定属性载体 + virtual void bindDockPty(IxPtySource* pPtyObj); + + // 绑定图形信号 + virtual void bindChartSignals(iGuiPlot* pWxPlot); + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + + // 权限验证 + bool checkLicensed(bool bPromptLicenseDlg = false); + +public: + + +signals: + + // 当通过外界创建了一个PF数据后,刷新到TreeCtrl + void sigPfObjFinished(ZxDataGaugeBase* p); + + // 窗体的大小,附带需要所在的MDI进行变化 + // 0: Normal 1 Max 2 Min + void sigMdiChildShow(int); + + // m_pRstWnd为空时,提醒父窗体进行创建指定 + void sigNeedCreateRstWnd(bool& ); + + // 进度条 + void sigShowProgressAbout(bool); + + // 触发信号刷新Ribbon按钮状态 + void sigFreshRnStates(); + + // 触发信息,关闭或者显示左侧工区数据树 + void sigLeftTreeDocksVisible(bool); + + /// @brief 在SubWnd中创建Dock并且显示至主窗体之中,该Dock由SubWnd进行管理 + /// @param pDockWx (in) Dock指针 + /// @param areaDefault(in) 默认布局区域 + void sigAppendDock2Main(iDockBaseWx* pDockWx, \ + Qt::DockWidgetArea areaDefault = Qt::LeftDockWidgetArea); + +public slots: + + // 进度条 + virtual void slotPrsRangeSet(int nMin, int nMax); + virtual void slotPrsValueSet(int nPos); + virtual void slotPrsFormatSet(QString s); + + // Toolbar按钮消息响应 + virtual void slotBtnTriggered(); + virtual void slotGraphItemPoliciesInstalled(ZxRenderItem*); + + // 当前窗体所有信息的保存,比如关闭时提问的保存 + virtual bool slotSaveAll(); + + virtual void slotShowProperty(); + virtual void updateView(); + + // 获取当前主窗口有多少Fit窗口(即;Anal对应的Fitting窗口,也可以扩展为其他同类) + virtual void slotGetBrotherFitWnds(QMap& map); + + // 属性模板 + virtual void slotItemPropertyTempl(IxPtySource* p, + bool bLoad, + bool bSelf); + + // 外部传递已修改信号 + virtual void slotGuiPlotModified(bool b); + + // 从子控件触发Action + virtual void slotChildActioned(QString sAction, bool& b); + +protected: + + virtual void paintEvent(QPaintEvent *); + + // /// @brief 拖拽支持 + // void dragEnterEvent(QDragEnterEvent *event); + // void dropEvent(QDropEvent* event); + +protected: + + // 主窗体 + ZxMainWindow* m_pMainWindow; + + // toolbar、属性等成员变量 + QToolBar* m_pToolBar; + ZxPtyDock* m_pDockPty; + QList m_listProps; + + // 辅助信息,如操作的表名等等 + QString m_sExt; + + // MdiSubWnd Type + QString m_sMdiWndType; + + // 该窗体是否显示ToolBar + bool m_bShowToolbar; + + // 与数据库对应的真实数据(外界传入,本类不进行创建释放维护) + ZxDataWell* m_pDataWell; + + // ID + QString m_sWndID; + + // 从属的Mdi窗口,内含TabWx,主窗口传递过来 + ZxMdiSubWindow* m_pMdiChild; // + + // 按钮类别,如需增加工具栏,只需在构造中对该变量赋值 + QString m_sCmdType; + + // 临时变量,对应的窗体Obj + bool m_bDeserialzing; + ZxRstJobWnd* m_pRstWnd; + + // 临时变量 + bool m_bModified; + + // 进度条 + QProgressBar* m_pProgressBar; + // 进度条刷新间隔 + int m_nProgressLoop; + + // 临时 + bool m_bReadonly; + + // 临时,当前涉及到的,可能得已经发生保存的压力/流量code,只需要刷新本视窗 + QStringList m_listTempSavedPFs; + + bool m_bUnableSP; //临时变量不参与序列化 + + // 是否启用新的样式表,ZXF202407,不参与序列化 + bool m_bNovelQss; + + // 该窗口是否强制创建MDI,比如流动段选择+试井设计+LPR+小型压裂准备 需要强制创建Mdi + bool m_bForcedMdiWnd; +}; diff --git a/Include/mGui/mSubWnd/iSubWndAdvanced.h b/Include/mGui/mSubWnd/iSubWndAdvanced.h new file mode 100644 index 0000000..7d90715 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndAdvanced.h @@ -0,0 +1,39 @@ +#pragma once + +#include "iSubWnd.h" + +class ZxPlot; +class iPlotCurveWxT; +class iDockBaseWx; +class M_SUB_WND_EXPORT iSubWndAdvanced : public iSubWnd +{ + Q_OBJECT + +public: + explicit iSubWndAdvanced(QWidget *parent = 0, QString sExt = ""); + ~iSubWndAdvanced(); + + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + + // 配置窗体 + virtual void configWnd(); + +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockWxs(); + +public slots: +// void slotLeftDoubleClickOnPlot(ZxPlot *); + +private: + +private: + + VVecVariant m_vvecData; + QStringList m_listTags; //轴标题(表头) + QStringList m_listUnits; //单位 + +}; diff --git a/Include/mGui/mSubWnd/iSubWndAnal.h b/Include/mGui/mSubWnd/iSubWndAnal.h new file mode 100644 index 0000000..98e8922 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndAnal.h @@ -0,0 +1,202 @@ +#pragma once + +#include "iSubWndBaseFit.h" + +class ZxDataGaugeBase; +class ZxDataObject; +class iGuiPlotPF; +class ZxObjBase; +class ZxObjPoint; +class ZxObjCurve; +class iWxRateInsert; +class iWxOptionSmooth; +class iWxOptionThinning; +class iWxPointSelPreview; +class iWxSwapPF; +class ZxObjPointEx; +//class iSubWndBaseFit; +class iCurveDesc; +class iWxRunOptionStd; +class iWxRunOption; + +class M_SUB_WND_EXPORT iSubWndAnal : public iSubWndBaseFit +{ + Q_OBJECT + +public: + + explicit iSubWndAnal(QWidget *parent = 0, QString sExt = ""); + ~iSubWndAnal(); + + // 配置窗体 + virtual void configWnd(); + + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onDeserialized(); + + // 保存加载 + virtual bool loadRss(); + virtual bool saveRss(); + + + /// @brief 命令是否Enabled的状态判断,通常来自Ribbon + /// @param b (out),true:Enabled false:disabled + /// @param sName (in),Cmd Name + /// @param nID (in),Cmd ID + /// @param bLicensed (in),当前是否有授权 + /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); + + // 对于缓存已经保存的压力流量进行刷新处理 + virtual void freshByTempSavedPFs(); + + // 对于流动段,在此处考虑模拟选中最后一个流动段 + // 有判断条件的情况下,TODO 20240819 + virtual void simuHitLastSeg(); //模拟点击最后一个流动段 + +public: + + // 拖拽实现,目前暂未起作用 + void resetOneCurveByDrag(ZxDataGaugeBase* p); + + // 获取两条线的数据点,从图形上取,然后传递给SubWndFitting + // 20220324 TODO 修改逻辑:保留流量的第一个点,后续需要验证其他地方是否需要相应修改 + bool getPlotCurveDataPF(QVector& vecP, \ + QVector& vecF, \ + QString* pStrCodeF = NULL); + void removeDupDataP(QVector& vecP, ZxSegmentInfo* pSegInfo = NULL); //压力数据去重 + + bool adjustMultiPhaseDataF(QVector& vecF, \ + VVecFloat& vvecMp, \ + ZxSegmentInfo* pSeg, \ + iJobRun* pJobRun); + + // 触发WndFitting + virtual bool runActionOf_ActivateFit(int nID); + + // 取值 + iGuiPlotPF* getPlotPF(); + + //自适应调整(X轴压力数据不会占满显示范围) + void autoZoomView(); + +signals: + + // 申请主窗口创建一个新的窗体 + void sigCreateNextSubWnd(iSubWndBaseAF*& p); + void sigActivateSubWnd(iSubWnd*& p); + + // 一旦压力或流量保存之后,则触发其他窗口的刷新 + void sigDataSavedPF(QString sCode); + +protected: + + // 加载获取到默认两条数据 + virtual void loadDefaultCurves(QVector& vecCurveData, + QString sWell = ""); + + // 对压力和流量进行标准零点校正 + virtual void baseAdjustCurves(QVector* pVec); + + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockWxs(); + virtual void initPlotPF(); + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + bool runActionOf_EditPF(QString sAction); + + // 刷新 + virtual void updatePlots(); + + // 重新调整工具栏 + virtual void reAdjustToolbar(QToolBar*); + + // 由子窗体创建RunOption + virtual iWxRunOptionStd* buildWxRunOption(); + + // 在弹出对话框后判断是否试井设计,并进行相应处理 + virtual void adjustByPossibleDn(iSubWndBaseFit* pWndFitting); + +public slots: + + // 调整主体布局 + virtual void slotAdjustPlotPFUis(QSplitter* p); + + // 双击弹出属性页 + virtual void slotSetPtyVisible(bool b); + + // 流动段改变 + virtual void slotSegmentChanged(ZxSegmentInfo& o, bool bShowOptionWx); + + // iWxRunOptionStd对话框OK后触发 + // iJobRun当前的JobRun + // iSubWnd待应用的SubWnd + // bool如果为空,则自动新建 + // sNewWndName 新的窗体名称 + virtual void slotJobOptionFinished(iJobRun* pJobRun, + iSubWnd* pSubWndAim, + bool bNewIfNull, + bool bJobRunAlreadyCurrent, + QString sNewWndName); + + // 数据加载信号相应 + virtual void slotPfObjSaved(ZxDataGaugeBase* p); + + // Rate加点 + void slotRateInsertPt(ZxObjBase* p); + + // 当前窗体所有信息的保存,比如关闭时提问的保存 + virtual bool slotSaveAll(); + +protected: + + //////////////////////////////////////////////// + // 增加拟合点的处理 + + // 获取另一个Plot + ZxPlot* getBrotherPlot(ZxPlot* pPlot); + + // 查询x方向的点,并存入Map + virtual bool findHitPoints(ZxPlot* pPlot, float& x, \ + QMap& mapHits, \ + bool bP, bool bConsiderBrother); + // 从map中的曲线获取屏幕坐标点x的范围 + virtual void checkCurveXBounds(float& min, float& max, \ + QMap& mapHits); + virtual void checkOneCurveXBound(ZxObjCurve* p, float& min, float& max); + // 添加到点 + virtual QVector addHitPoints(float& min, float& max, \ + QMap& mapHits); + //////////////////////////////////////////////// + +protected: + + // 绘图相关 + iGuiPlotPF* m_pWxPlotPF; + + //轴标题(表头)、单位 +// QStringList m_listTags; +// QStringList m_listUnits; + + // 临时 + //ZxObjPoint* m_pRateInsertPt; + iWxOptionSmooth* m_pWxSmooth; + iWxOptionThinning* m_pWxThinning; + iWxPointSelPreview* m_pWxPsPreview; + iWxRateInsert* m_pWxRateInsert; + iWxSwapPF* m_pWxSwapPF; + + // 临时,不需序列化,为了区分ANal和AnalDn + bool m_bTableVisible; + +}; diff --git a/Include/mGui/mSubWnd/iSubWndAnalEdit.h b/Include/mGui/mSubWnd/iSubWndAnalEdit.h new file mode 100644 index 0000000..554abf4 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndAnalEdit.h @@ -0,0 +1,54 @@ +#pragma once + +#include "iSubWndAnal.h" + +class iWxModelOption; +class iWxModelParameter; +class iAlgModelBase; +class iParaManager; +class iWxWmDataPF; +class ZxTableModel; +class iWxTime; +class iAlgFitBase; +class ZxObjCurve; +class ZxObjPointEx; + +class M_SUB_WND_EXPORT iSubWndAnalEdit : public iSubWndAnal +{ + Q_OBJECT + +public: + + explicit iSubWndAnalEdit(QWidget *parent = 0, QString sExt = ""); + ~iSubWndAnalEdit(); + + // 配置窗体 + virtual void configWnd(); + + virtual QWidget* initUiMainWx(); + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + + virtual bool isModified(); + + + /// @brief 命令是否Enabled的状态判断,通常来自Ribbon + /// @param b (out),true:Enabled false:disabled + /// @param sName (in),Cmd Name + /// @param nID (in),Cmd ID + /// @param bLicensed (in),当前是否有授权 + /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); +protected: + +public slots: + + // 当前窗体所有信息的保存,比如关闭时提问的保存 + virtual bool slotSaveAll(); + +private: + +}; diff --git a/Include/mGui/mSubWnd/iSubWndAnalSeg.h b/Include/mGui/mSubWnd/iSubWndAnalSeg.h new file mode 100644 index 0000000..347a727 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndAnalSeg.h @@ -0,0 +1,71 @@ +#pragma once + +#include "iSubWndAnal.h" + +class iWxModelOption; +class iWxModelParameter; +class iAlgModelBase; +class iParaManager; +class iWxWmDataPF; +class ZxTableModel; +class iWxTime; +class iAlgFitBase; +class ZxObjCurve; +class ZxObjPointEx; + +class M_SUB_WND_EXPORT iSubWndAnalSeg : public iSubWndAnal +{ + Q_OBJECT + +public: + + explicit iSubWndAnalSeg(QWidget *parent = 0, QString sExt = ""); + ~iSubWndAnalSeg(); + + // 配置窗体 + virtual void configWnd(); + + virtual QWidget* initUiMainWx(); + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + + // 重新调整工具栏 +// virtual void reAdjustToolbar(QToolBar*); + + // 检测按钮状态(Ribbon) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); + // 由子窗体创建RunOption + virtual iWxRunOptionStd* buildWxRunOption(); + + virtual void finalDeals(); + +protected: + + void _dealFuzzy(); + void fuzzyHitPoints(ZxObjPointEx* pPt); + bool getCrossXOfHitPoints(QVector& vecHitPts, float& fX); + bool getFuzzyFlowXBy(float xC, float& xF); + void removeFirstOne(); + bool autoAlignP(float xC, float xF); + + // 对于流动段,在此处考虑模拟选中最后一个流动段 + // 有判断条件的情况下,TODO 20240819 + virtual void simuHitLastSeg(); //模拟点击最后一个流动段 + +public slots: + + // 添加点 + void slotCmdHitPoint(PlotOperationMode o, \ + const QPointF& pt, \ + bool& b); + + void slotHitPointMoved(); + +private: + + QVector m_vecHitPts; + +}; diff --git a/Include/mGui/mSubWnd/iSubWndBaseAF.h b/Include/mGui/mSubWnd/iSubWndBaseAF.h new file mode 100644 index 0000000..46d3400 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndBaseAF.h @@ -0,0 +1,83 @@ +#pragma once + +#include "iSubWnd.h" + +class iJobInfoModel; +class ZxSegmentInfo; +class iWxBase; +class ZxPlot; +class iDockBaseWx; +class iJobRun; +class iWxWizard; +class iModelOption; +class ZxRstJobWnd; + +class M_SUB_WND_EXPORT iSubWndBaseAF : public iSubWnd +{ + Q_OBJECT + +public: + + explicit iSubWndBaseAF(QWidget *parent = 0, QString sExt = ""); + ~iSubWndBaseAF(); + + // 配置窗体 + virtual void configWnd(); + + virtual void setDataWell(ZxDataWell* p); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + virtual bool saveRunAndSegInfo(ZxRstJobWnd* pRstWnd); + virtual bool loadRunAndSegInfo(ZxRstJobWnd* pRstWnd); + + virtual void layoutSubWnds(WndLayoutMode oWlm); + + // 把所有JobRun指针传递过来 + void setAllJobRuns(QVector* p); + virtual void setJobRun(iJobRun* pJobRun, bool bFuzzyPit = false); + iJobRun* getJobRun(); +// virtual void setSegmentInfo(ZxSegmentInfo* p); + ZxSegmentInfo* getSegmentInfo(); + + + /// @brief 命令是否Enabled的状态判断,通常来自Ribbon + /// @param b (out),true:Enabled false:disabled + /// @param sName (in),Cmd Name + /// @param nID (in),Cmd ID + /// @param bLicensed (in),当前是否有授权 + /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); +protected: + + // 重新调整工具栏 + virtual void reAdjustToolbar(QToolBar*); + + // 20210825去除无效,比如变井储HegeMan开始处总是有空值TheoryDeriv / TheorySource + // 后续可以考虑是不是需要处理其它 TODO + virtual bool adjustResultDataOf(QString sCurveTag, \ + VecFloat& vecX, \ + VecFloat& vecY, \ + bool bCutoffNeeded = false); + +public slots: + + // 增加JobRun选项 + void slotToolbarBuilt(QToolBar*); + +protected: + + // 当前所有JobRun,输入主窗口,从主窗口传入 + QVector* m_pVecJobRuns; + + iJobRun* m_pJobRun; //这是传入,本类不负责维护 + + ZxSegmentInfo* m_pSegInfo; + + // 临时,当前子窗体布局Mode + WndLayoutMode m_oWlm; +}; diff --git a/Include/mGui/mSubWnd/iSubWndBaseFit.h b/Include/mGui/mSubWnd/iSubWndBaseFit.h new file mode 100644 index 0000000..1203cb1 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndBaseFit.h @@ -0,0 +1,164 @@ +#pragma once + +#include "mAlgDefines.h" +#include "iSubWndBaseAF.h" +//#include "iAlgPseuCal.h" + +class iParaManager; +//class cmParaManager; +class iAlgModelBase; +class cmAlgModelBase; +class iWxRunOptionStd; +class zxAlgThread; +class ZxObjWmPoint; +class M_SUB_WND_EXPORT iSubWndBaseFit : public iSubWndBaseAF +{ + Q_OBJECT + +public: + + explicit iSubWndBaseFit(QWidget *parent = 0, QString sExt = ""); + ~iSubWndBaseFit(); + + // 配置窗体 + virtual void configWnd(); + + // 初始化Jobs + virtual bool createJobWxs(); + virtual bool initJobWxUIs(); + virtual void setDataWell(ZxDataWell* p); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + + /// @brief 命令是否Enabled的状态判断,通常来自Ribbon + /// @param b (out),true:Enabled false:disabled + /// @param sName (in),Cmd Name + /// @param nID (in),Cmd ID + /// @param bLicensed (in),当前是否有授权 + /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); + + // 右键弹窗,然后激活Fitting窗口 + virtual bool firstRunByDataPF(iWxRunOptionStd *pWxJobRun, \ + ZxSegmentInfo* pSegInfo); + // 试井设计模式 + virtual void copyModelOptionDn(iModelOption* p); + virtual void setDnMode(bool b); + +public: + + virtual void setJobRun(iJobRun* p, bool bFuzzyPit = false); + + // 从各个Wx(m_vecWxDatas)中遍历查找 + bool setParaValue(QString sPara, double d); + bool getParaValue(QString sPara, double& d); + // 返回所有参数,Key为英文ID + bool getAllParaValues(QMap& map, + bool bOnlyFitted); + //返回所有的模型参数 + bool getAllParaValuesUnit(QMap& map, + bool bOnlyFitted); + //返回所有的跟模型相关的参数 + bool getModelParaValues(QMap& map); + bool getModelParaUnit(QMap& map); + + // 返回所有的跟模型相关的边界参数的类型,不渗透或定压 + // 不渗透:0 + // 定压:1 + bool getBdyInfos(QMap& map); + + // 返回当前模型相关的参数,包括ModelOption、以及井型等信息 + iModelOption* getModelOption(); + // 构建算法载体 + bool buildAlgModel(iModelOption* pModelOption, \ + bool bReset = true, \ + bool bSetParas = true); + // 具体的创建算法载体 + virtual void createAlgModel(ModelSeriesType o, AlgModelSrc ams, \ + iModelOption* pModelOption); + + // 返回所有窗体的指针 + QVector* getAllWxPtr(); + + // 根据多相单相对右侧参数进行调整 + void adjustParaUIsBy(bool bMultiPhase); + + // 配置算法载体 + bool configAlgModel(); + +protected: + + // 重新调整工具栏 + virtual void reAdjustToolbar(QToolBar*); + + // 显示iInput的信息 + // 0:Basic 1:Fluid 2:GasConst 3:PF other:All + virtual void showJobInfoInput(int n); + + // 根据流体类型刷新 流体对话框 + void changeFluidOption(); + + // 算法类关联信号 + virtual void buildAlgSignals(); + + // 是否正确支持的模型 + virtual bool isModelSupported(iModelOption* p); + +public slots: + + // 对应流动段参数改变,如移动水平线,刷新结果视图 + virtual void slotSegmentParamsChanged(ZxSegmentInfo& o); + + // 常规拟合线程结束 + virtual void slotCommonFitThreadFinished(); + + // 基础参数对话框流体类型发生改变 + virtual void slotFluidTypeChanged(QString s); + // 左侧模型参数发生改变 + virtual void slotOptionParasChanged(iModelOption* pOption); + +public: + + // 线程管理,被MainFrmWindow调用 + // 当前窗体内部的线程,如Fitting里面的算法线程 + // 增加参数QThread* p的目的为了后续扩展多个线程管理使用 + virtual bool pauseSubThread(zxAlgThread* p = NULL); + virtual bool continueSubThread(zxAlgThread* p = NULL); + virtual bool quitSubThread(zxAlgThread* p = NULL); + virtual zxAlgThread* getSubThread(zxAlgThread* p); + +signals: + + /// @brief 触发信号,获取当前的井位图井点信息 + /// @return vecWms.count()>1时有效 + /// @note 仅仅返回正确有效的井点,其中中心井默认放在第一个 + /// 如果vecWms.count()<=1,则认为不考虑井位图 + void sigGetWmInfos(QVector& vecWms); + +protected: + + // 分别为 Basic、Fluid、(GasConst)、PF、ModelOption、ModelParameter; + QVector m_vecWxDatas; + + // 输入参数部分,为了统一,此处用Wizard把iWxBase包裹 + // 每个WiZard包括四个,但是只显示一个 + QVector m_vecWxWizards; //只有前四个 + + // 常规拟合算法类 + // 由于Fitting和AnalDn都用到,故放在该类 + iAlgModelBase* m_pAlgModel; + iParaManager* m_pParaManager; + + // 是否序列化,由子类确定 + QPointF m_ptFlowFirst; + +#ifdef QT_DEBUG + bool m_bXcmBrother; +#endif + +}; diff --git a/Include/mGui/mSubWnd/iSubWndConfig.h b/Include/mGui/mSubWnd/iSubWndConfig.h new file mode 100644 index 0000000..9ea9686 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndConfig.h @@ -0,0 +1,33 @@ +#pragma once + +#include "iSubWnd.h" + +class iWxConfigWizard; +class M_SUB_WND_EXPORT iSubWndConfig : public iSubWnd +{ + Q_OBJECT + +public: + + explicit iSubWndConfig(QWidget *parent = 0, QString sExt = ""); + ~iSubWndConfig(); + + // 配置窗体 + virtual void configWnd(); + + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockPtys(); + virtual void initUiDockWxs(); + +public slots: + +private: + + iWxConfigWizard* m_pWxConfig; +}; diff --git a/Include/mGui/mSubWnd/iSubWndData.h b/Include/mGui/mSubWnd/iSubWndData.h new file mode 100644 index 0000000..d57f1af --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndData.h @@ -0,0 +1,124 @@ +#pragma once + +#include "iSubWnd.h" + +class ZxTableModel; +class ZxTableView; +class M_SUB_WND_EXPORT iSubWndData : public iSubWnd +{ + Q_OBJECT + +public: + + explicit iSubWndData(QWidget *parent = 0, QString sExt = ""); + ~iSubWndData(); + + // 配置窗体 + virtual void configWnd(); + + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + virtual void setColWidths(); + + + /// @brief 命令是否Enabled的状态判断,通常来自Ribbon + /// @param b (out),true:Enabled false:disabled + /// @param sName (in),Cmd Name + /// @param nID (in),Cmd ID + /// @param bLicensed (in),当前是否有授权 + /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockPtys(); + virtual void bindTableSignals(ZxTableView* pTableView); + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + + virtual void saveData(); + virtual void exportData(); + + virtual void printData(); + virtual void printPreviewData(); + + // 20240613,启用隐藏列,故该方式不再启用 + /// @brief 对数据做一些特殊处理,比如隐藏某些列的处理 + /// @param bLoad : + /// true load+show(隐藏) + /// false save(Add) + /// @param vvec (in & out) + /// @param listTitles (in & out) +// virtual void adjustData(bool bLoadMode, \ +// VVecVariant& vvec, \ +// QStringList* pListTitles = NULL, \ +// bool bTitlesOnly = false); + + // 根据表名获取不显示的字段索引 + VecInt getHideCols(QString sTableName); + + // 当index网格改变时,自动填写井号之类的内容 + void autoFillCodesBy(const QModelIndex& Index); + +public slots: + + // 具体的按钮按钮操作 + virtual void slotDataLoad(); + + // 当前窗体所有信息的保存,比如关闭时提问的保存 + virtual bool slotSaveAll(); + + virtual void slotSaveDatabase(); + // 表格删除行时,对应删除数据库数据 + // 如果sError非常证明未删除成功 + virtual void slotRemoveRowsOfDB(int nRowFrom, int nRowTo, QString& sError); + virtual void slotTableCellClicked(const QModelIndex &index); + virtual void slotDataTableModified(); + virtual void slotTableCellChanged(const QModelIndex& Index, const QModelIndex& nIndex); + // 主要是为了,右键删除之后,刷新右侧图 + virtual void slotRowDeleted(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + +signals: + + void sigFreshWellAbout(); + void sigNeedDelObjs(QStringList& listKeys, QString& sTable, QString& sError); + +public: + + virtual void firstLoadAndUpdate(); + virtual bool loadDataBy(QString sTable, QString sFilterWellCode); + +protected: + + //virtual QString getOrderStrOf(QString sTable); //获取某表关键字组织为Order + virtual bool scanInfosByTable(QString sTable, QString& sSql); + + // 保存数据 + virtual bool _saveData(VVecVariant& vvec); + + // 保存后,刷新当前井和工区数据 + void refreshMemObjs(VVecVariant& vvec); + +protected: + + VVecVariant m_vvecData; + + QStringList m_listFields; + QStringList m_listTags; //轴标题(表头) + QStringList m_listUnits; //单位 + VecInt m_vecKeyIndexes; + + ZxTableModel* m_pTableModel; + ZxTableView* m_pTableView; + + QString m_sObjCode; + + QString m_sWellFilter; //如果为空,则全部,否则为单井 + + bool m_bAutoFilling; + +}; diff --git a/Include/mGui/mSubWnd/iSubWndDataOther.h b/Include/mGui/mSubWnd/iSubWndDataOther.h new file mode 100644 index 0000000..73fbd94 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndDataOther.h @@ -0,0 +1,49 @@ +#pragma once + +#include "iSubWndData.h" + +class iWxDataShow; +class zxDataOtherItem; + +class M_SUB_WND_EXPORT iSubWndDataOther : public iSubWndData +{ + Q_OBJECT + +public: + + explicit iSubWndDataOther(QWidget *parent = 0, QString sExt = ""); + ~iSubWndDataOther(); + + // 配置窗体 + virtual void configWnd(); + + virtual void runUpdate(); //刷新 + +protected: + +public slots: + + virtual void slotTableCellClicked(const QModelIndex &index); + virtual void slotTableCellChanged(const QModelIndex& Index, const QModelIndex& nIndex); + +protected: + + // 初始化入口 + virtual void initUI(); + virtual QWidget* initUiMainWx(); + + void showRowDataOf(int r); + + // 保存数据 + virtual void saveData(); + virtual bool _saveData(VVecVariant& vvec); + +private: + + iWxDataShow* m_pWxItem; + QString m_sLastCode; + + QStringList m_listFieldExs; //解析显示的字段名 + QVector m_vecAccessItems; + +}; diff --git a/Include/mGui/mSubWnd/iSubWndDataPF.h b/Include/mGui/mSubWnd/iSubWndDataPF.h new file mode 100644 index 0000000..c05cf0e --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndDataPF.h @@ -0,0 +1,111 @@ +#pragma once + +#include "iSubWndData.h" + +class ZxDataWell; +class iPlotCurveWxT; +class ZxDataGaugeBase; + +class M_SUB_WND_EXPORT iSubWndDataPF : public iSubWndData +{ + Q_OBJECT + +public: + + explicit iSubWndDataPF(QWidget *parent = 0, QString sExt = ""); + ~iSubWndDataPF(); + + // 配置窗体 + virtual void configWnd(); + + virtual void runUpdate(); //刷新 + virtual void setColWidths(); + + virtual bool loadDataBy(QString sTable, QString sFilterWellCode); + virtual void simuAutoLoad(); //如果没有数据,则自动弹出加载 + +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockToolBar(); + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + +public slots: + + // 具体的按钮按钮操作 + virtual void slotDataLoadP(); + virtual void slotDataLoadF(); + + // 数据加载信号相应 + void slotPfObjSaved(ZxDataGaugeBase* p); + + virtual void slotSaveDatabase(); + // 表格删除行时,对应删除数据库数据 + // 如果sError非常证明未删除成功 + virtual void slotRemoveRowsOfDB(int nRowFrom, int nRowTo, QString& sError); + virtual void slotTableCellClicked(const QModelIndex &index); + virtual void slotDataTableModified(); + void slotSubTableSelChanged(); + virtual void slotTableCellChanged(const QModelIndex& Index, const QModelIndex& nIndex); + // 主要是为了,右键删除之后,刷新右侧图 + virtual void slotRowDeleted(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + +protected: + + void activeByTableMain(int nIndexRow, int nIndexCol); + void activeByTableSub(int nIndexCol, bool foceRedraw = false); + void freshRightSubByCode(QString sCode); + + VVecVariant convertBa(QByteArray& ba, bool forceConvert = false); + + virtual bool scanInfosByTable(QString sTable, QString& sSql); + + // 20240613,启用隐藏列,故该方式不再启用 + /// @brief 对数据做一些特殊处理,比如隐藏某些列的处理 + /// @param bLoad : + /// true load+show(隐藏) + /// false save(Add) + /// @param vvec (in & out) + /// @param listTitles (in & out) +// virtual void adjustData(bool bLoadMode, \ +// VVecVariant& vvec, \ +// QStringList* pListTitles = NULL, \ +// bool bTitlesOnly = false); + + // 更新辅助表格 + void refreshBindTable(VVecVariant& vvec); + QString getTitleOfCol(int indexOGW); + QString getTitleNameOfCol(int indexOGW); + QString getTitleUnitOfCol(int indexOGW); + // 更新辅助图形 + void refreshBindChart(QByteArray& ba, \ + int indexOGW, QString sWellInfo = ""); + void refreshBindChart(VecFloat& vecX, VecFloat& vecY, \ + int indexOGW, \ + QString sWellInfo = ""); + + // 保存 + bool saveOneGauge(); + bool sumCurGaugeData(QByteArray& ba); + + // 保存数据 + virtual bool _saveData(VVecVariant& vvec); + + // 和一开始的备份对比是否修改 + bool isRowDataChanged(VecVariant& vec); + + // 对于缓存已经保存的压力流量进行刷新处理 + virtual void freshByTempSavedPFs(); + +private: + + ZxTableView* m_pTableViewBind; //辅助显示(压力+流量) + iPlotCurveWxT* m_pPlotWx; + + bool m_bGaugeModeF; //在m_bGaugeMode为true时有效 + int m_nLastSubCol; + ZxDataWell* m_pWell; +}; diff --git a/Include/mGui/mSubWnd/iSubWndFree.h b/Include/mGui/mSubWnd/iSubWndFree.h new file mode 100644 index 0000000..bc5da14 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndFree.h @@ -0,0 +1,33 @@ +#pragma once + +#include "iSubWnd.h" + +class iGuiPlotEx; +class M_SUB_WND_EXPORT iSubWndFree : public iSubWnd +{ + Q_OBJECT + +public: + + explicit iSubWndFree(QWidget *parent = 0, QString sExt = ""); + ~iSubWndFree(); + + // 配置窗体 + virtual void configWnd(); + + //virtual void runUpdate(); //刷新 + +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + void initChart(); + virtual void initUiDockPtys(); + virtual void initUiDockWxs(); + +public slots: + +private: + iGuiPlotEx* m_pWxPlot; + +}; diff --git a/Include/mGui/mSubWnd/iSubWndMap.h b/Include/mGui/mSubWnd/iSubWndMap.h new file mode 100644 index 0000000..c8722a2 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndMap.h @@ -0,0 +1,104 @@ +#pragma once + +#include "iSubWndBaseAF.h" + +class ZxDataGaugeBase; +class ZxDataObject; +class iGuiPlotMap; +class ZxObjBase; +class ZxObjPoint; +class ZxObjWmPoint; + +class iWxRateInsert; +class iWxOptionSmooth; +class iWxOptionThinning; +class iWxPointSelPreview; +class iWxSwapPF; +class iSubWndBaseFit; +class iSubWndAnal; + +class iWxWmDataPF; +class iDockBaseWx; +class iWxModelParameterEx; + +class M_SUB_WND_EXPORT iSubWndMap : public iSubWndBaseAF +{ + Q_OBJECT + +public: + + explicit iSubWndMap(QWidget *parent = 0, QString sExt = ""); + ~iSubWndMap(); + + // 配置窗体 + virtual void configWnd(); + + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onDeserialized(); + + // 保存加载 + virtual bool loadRss(); + virtual bool saveRss(); + +public: + + // 外部调用 + bool getWmInfos(QVector& vecWms); + void bindSubWndAnal(iSubWndAnal* p); + void freshWmPtC(); + +signals: + +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockWxs(); + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + + // 刷新 + void updatePlots(); + + // 重新调整工具栏 + virtual void reAdjustToolbar(QToolBar*); + + // 点击一个WmPt,刷新右侧窗体 + void freshRightWxsByObj(ZxObjBase* p, bool bPtsOnly); + +public slots: + + // Obj选择状态改变 + void slotWmObjSelChanged(ZxObjBase*, bool); + // Obj数据发生了改变 + void slotWmObjPtsChanged(ZxObjBase*); + + // 获取当前中心井的压力和流量 + void slotGetCentralDataPF(QVector& vecP, + QVector& vecF); + + // 当前窗体所有信息的保存,比如关闭时提问的保存 + virtual bool slotSaveAll(); + +private: + + // 绘图相关 + iGuiPlotMap* m_pWxPlotMap; + + // 关联的m_pAnalWnd,序列化需要特殊考虑 + iSubWndAnal/*Seg*/* m_pAnalWnd; + + iDockBaseWx* m_pWxDockModelParameter; //模型参数 + iWxModelParameterEx* m_pWxModelParameter; + + iDockBaseWx* m_pWxDockDataF; + iDockBaseWx* m_pWxDockDataP; + iWxWmDataPF* m_pWxDataF; //流量数据 + iWxWmDataPF* m_pWxDataP; +}; diff --git a/Include/mGui/mSubWnd/iSubWndModel.h b/Include/mGui/mSubWnd/iSubWndModel.h new file mode 100644 index 0000000..e1c6026 --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndModel.h @@ -0,0 +1,34 @@ +#pragma once + +#include "iSubWnd.h" + +class iWxModelScan; +class M_SUB_WND_EXPORT iSubWndModel : public iSubWnd +{ + Q_OBJECT + +public: + + explicit iSubWndModel(QWidget *parent = 0, QString sExt = ""); + ~iSubWndModel(); + + // 配置窗体 + virtual void configWnd(); + + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + virtual void finalDeals(); + +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockPtys(); + virtual void initUiDockWxs(); + +public slots: + +private: + iWxModelScan* m_pWxModelScan; + +}; diff --git a/Include/mGui/mSubWnd/iSubWndTool.h b/Include/mGui/mSubWnd/iSubWndTool.h new file mode 100644 index 0000000..8fe8d3a --- /dev/null +++ b/Include/mGui/mSubWnd/iSubWndTool.h @@ -0,0 +1,40 @@ +#pragma once + +#include "iSubWnd.h" + +class ZxPlot; +class iPlotCurveWxT; +class iDockBaseWx; +class M_SUB_WND_EXPORT iSubWndTool : public iSubWnd +{ + Q_OBJECT + +public: + + explicit iSubWndTool(QWidget *parent = 0, QString sExt = ""); + ~iSubWndTool(); + + // 配置窗体 + virtual void configWnd(); + + virtual void loadData(QString sWell = ""); //加载数据 + virtual void runUpdate(); //刷新 + +protected: + + // 初始化UI + virtual QWidget* initUiMainWx(); + virtual void initUiDockWxs(); + +public slots: +// void slotLeftDoubleClickOnPlot(ZxPlot *); + +private: + +private: + + VVecVariant m_vvecData; + QStringList m_listTags; //轴标题(表头) + QStringList m_listUnits; //单位 + +}; diff --git a/Include/mGui/mSubWnd/mSubWnd_global.h b/Include/mGui/mSubWnd/mSubWnd_global.h new file mode 100644 index 0000000..7c5c36e --- /dev/null +++ b/Include/mGui/mSubWnd/mSubWnd_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(M_SUB_WND_LIBRARY) +# define M_SUB_WND_EXPORT Q_DECL_EXPORT +#else +# define M_SUB_WND_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/mTool/mToolPvt/Pseu3/iWxPseudo3Sub.h b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3Sub.h new file mode 100644 index 0000000..1f50a8f --- /dev/null +++ b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3Sub.h @@ -0,0 +1,113 @@ +#pragma once + +#include "iWxPvtUtilItem.h" + +namespace Ui { +class iWxPseudo3Sub; +} + +class iPseudo3Info; +class iCurveDesc; +class M_TOOL_PVT_EXPORT iWxPseudo3Sub : public iWxPvtUtilItem +{ + Q_OBJECT + +public: + + explicit iWxPseudo3Sub(QString sMethod, QWidget *parent = 0); + ~iWxPseudo3Sub(); + + // 初始化 + virtual void makeSureInitUI(); + virtual void initUI(); + + // 外部调用接口 + QString getMethod() {return m_sMethod; } + + // Ps3Info相关接口 + virtual void makesureMapPsInfos(); + QMap* getMapPsInfos(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + + // 文件标识 + virtual QString getFilePvtTag(); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual void initUI_ChartAndTable(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initDefaultData(); + virtual void initPsInfo(iPseudo3Info*& pInfo); + + // 表格数据改变,与图形相关内容 + virtual void freshChartByTableChange(); + virtual void refreshChart(VVecVariant& vvec); + virtual void refreshHitPoint(); + + // 曲线基础操作 + // 配置曲线 + void configCurveDecs(iCurveDesc* pDesc, \ + QString sName, QColor clr, \ + VecFloat& x, VecFloat& y, \ + bool bLineVisible = true, bool bPtVisible = false); + // 添加曲线 + virtual bool addCurveBy(VecPointF& vecFts, QString sName, \ + bool bLineVisible = true, bool bPtVisible = false, \ + QColor clr = QColor(), bool bUseY2 = false); + virtual bool addCurveBy(VecFloat& x, VecFloat& y, QString sName, \ + bool bLineVisible = true, bool bPtVisible = false, \ + QColor clr = QColor(), bool bUseY2 = false); + //virtual void addOrChangeCurveBy(VecPointF& vecRaw, VecPointF& vecFit, bool bFitCurveOnly); + // 移除指定曲线 + virtual void removeCurveOf(QString sName); + // 获取曲线名称 + QString getCurveNameOf(int nIndexName, int nIndexSub = -1, bool bFit = false); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); + + // 拟合过程封装 + virtual bool runAlgFit(QString sName, VVecVariant vvec, int nType = -1, int nOrder = -1); + // 清除内容,状态 + void clearAlg(QString sKey); + + // 通用标识 + virtual bool isFinalPseu(); + virtual bool isFittingNeeded(); + virtual bool isTbDataEditable(); + +public: + + // 序列化 +// void saveBkInfos(); +// void loadBkInfos(); +// QString getBkInfoFile(QString s); + + // 窗体关闭的情形 + virtual void closeEvent(QCloseEvent *); + +protected: + + Ui::iWxPseudo3Sub *ui; + + // 初始设定Ps3Info的参数 + QStringList m_listPsInfoKeys; + // 构造map + QMap m_mapPsInfos; + + // 针对的方法标识 + QString m_sMethod; + + // 坐标轴相关 + QStringList m_listNames; + QStringList m_listUnits; + QString m_sTitle; + + // 初始化标识(为了速度+序列化) + bool m_bInitUi; +}; diff --git a/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubCCE.h b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubCCE.h new file mode 100644 index 0000000..b9779bb --- /dev/null +++ b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubCCE.h @@ -0,0 +1,23 @@ +#pragma once + +#include "iWxPseudo3Sub.h" + +class M_TOOL_PVT_EXPORT iWxPseudo3SubCCE : public iWxPseudo3Sub +{ + Q_OBJECT + +public: + + explicit iWxPseudo3SubCCE(QString sMethod, QWidget *parent = 0); + ~iWxPseudo3SubCCE(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_TableView(); +}; diff --git a/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubCVD.h b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubCVD.h new file mode 100644 index 0000000..bd7c460 --- /dev/null +++ b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubCVD.h @@ -0,0 +1,21 @@ +#pragma once + +#include "iWxPseudo3SubFit.h" + +class M_TOOL_PVT_EXPORT iWxPseudo3SubCVD : public iWxPseudo3SubFit +{ + Q_OBJECT + +public: + + explicit iWxPseudo3SubCVD(QString sMethod, QWidget *parent = 0); + ~iWxPseudo3SubCVD(); + virtual void initUI(); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_TableView(); +}; diff --git a/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubFit.h b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubFit.h new file mode 100644 index 0000000..e8dfdd7 --- /dev/null +++ b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubFit.h @@ -0,0 +1,51 @@ +#pragma once + +#include "iWxPseudo3Sub.h" + +class M_TOOL_PVT_EXPORT iWxPseudo3SubFit : public iWxPseudo3Sub +{ + Q_OBJECT + +public: + + explicit iWxPseudo3SubFit(QString sMethod, QWidget *parent = 0); + ~iWxPseudo3SubFit(); + + // 外部调用 + virtual void initUI(); + +protected: + + // 初始化 + virtual void initUI_Tops(); + + // 拟合相关设置的初始化 + virtual bool isFitItemVisible(int nIndex); + void changeFitUIOf(int nIndex); + void freshExpr(int nIndex, QString s); + bool getFitInfoOf(int nIndex, int& nType, int& nOrder); + + // 通用标识 + virtual bool isFittingNeeded(); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + virtual void refreshByTopFit(); + virtual void fitAndFreshChart(QString sKey, VVecVariant& vvec, bool bFitCurveOnly = false); + +protected slots: + + // 拟合控件 + virtual void slotFitTypeChanged(int index); + virtual void slotOrderChanged(int arg1); + + // 拟合 + virtual void on_btnRunFit_clicked(); + +protected: + + // 拟合控件,为了方便并支持多组 + QVector m_vecCbxFitTypes; + QVector m_vecSbxFitOrders; + QVector m_vecTbxFitDescs; +}; diff --git a/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubKrgKro.h b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubKrgKro.h new file mode 100644 index 0000000..7544d2d --- /dev/null +++ b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubKrgKro.h @@ -0,0 +1,35 @@ +#pragma once + +#include "iWxPseudo3Sub.h" + +class M_TOOL_PVT_EXPORT iWxPseudo3SubKrgKro : public iWxPseudo3Sub +{ + Q_OBJECT + +public: + + explicit iWxPseudo3SubKrgKro(QString sMethod, QWidget *parent = 0); + ~iWxPseudo3SubKrgKro(); + virtual void initUI(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudo3Info*& pInfo); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); + + // 后台执行拟合 + virtual void backFitKrgKro1(); + virtual void backFitKrgKro2(); +}; diff --git a/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubPseu.h b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubPseu.h new file mode 100644 index 0000000..3aa0f6d --- /dev/null +++ b/Include/mTool/mToolPvt/Pseu3/iWxPseudo3SubPseu.h @@ -0,0 +1,54 @@ +#pragma once + +#include "iWxPseudo3SubFit.h" + +class M_TOOL_PVT_EXPORT iWxPseudo3SubPseu : public iWxPseudo3SubFit +{ + Q_OBJECT + +public: + + explicit iWxPseudo3SubPseu(QString sMethod, QWidget *parent = 0); + ~iWxPseudo3SubPseu(); + + // 外部调用 + virtual void initUI(); + + // 传递数据,开启刷新图表 + virtual bool freshFinalPs(VecFloat& vecP, VecFloat& vecPs, double dPP, double dPD, QString sAllExpr); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudo3Info*& pInfo); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + virtual void refreshByTopFit(); + virtual void fitAndFreshChart(QString sKey, VVecVariant& vvec, bool bFitCurveOnly = false); + virtual void fitPseuReverse(VVecVariant& vvec); //反推 + + // 拟合相关 + virtual bool isFitItemVisible(int nIndex); + + // 通用标识 + virtual bool isFinalPseu(); + virtual bool isTbDataEditable(); + +signals: + + void sigRefreshPseu(); + +private slots: + + virtual void on_cbxWholeMode_clicked(); + virtual void on_btnCalPseu3_clicked(); + +protected: + + double m_dPP; //临时,画三段曲线用 + double m_dPD; +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSub.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSub.h new file mode 100644 index 0000000..6cc1f9a --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSub.h @@ -0,0 +1,122 @@ +#pragma once + +#include "iWxPvtUtilItem.h" + +namespace Ui { +class iWxPseudoCSub; +} + +class iPseudoCInfo; +class iCurveDesc; +class M_TOOL_PVT_EXPORT iWxPseudoCSub : public iWxPvtUtilItem +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSub(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSub(); + + // 初始化 + virtual void makeSureInitUI(); + virtual void initUI(); + + // 外部调用接口 + QString getMethod() {return m_sMethod; } + + // Ps3Info相关接口 + virtual void makesureMapPsInfos(); + QMap* getMapPsInfos(); + iPseudoCInfo* getPsInfoBy(QString sName); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + + // 文件标识 + virtual QString getFilePvtTag(); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual void initUI_ChartAndTable(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initDefaultData(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 表格数据改变,与图形相关内容 + virtual void freshChartByTableChange(); + virtual void refreshChart(VVecVariant& vvec); + virtual void refreshHitPoint(); + + // 曲线基础操作 + // 配置曲线 + void configCurveDecs(iCurveDesc* pDesc, \ + QString sName, QColor clr, \ + VecFloat& x, VecFloat& y, \ + bool bLineVisible = true, bool bPtVisible = false); + // 添加曲线 + virtual bool addCurveBy(VecPointF& vecFts, QString sName, \ + bool bLineVisible = true, bool bPtVisible = false, \ + QColor clr = QColor(), bool bUseY2 = false); + virtual bool addCurveBy(VecFloat& x, VecFloat& y, QString sName, \ + bool bLineVisible = true, bool bPtVisible = false, \ + QColor clr = QColor(), bool bUseY2 = false); + //virtual void addOrChangeCurveBy(VecPointF& vecRaw, VecPointF& vecFit, bool bFitCurveOnly); + // 移除指定曲线 + virtual void removeCurveOf(QString sName); + // 获取曲线名称 + QString getCurveNameOf(int nIndexName, int nIndexSub = -1, bool bFit = false); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); + + // 拟合过程封装 + virtual bool runAlgFit(QString sName, VVecVariant vvec, int nType = -1, int nOrder = -1); + // 清除内容,状态 + void clearAlg(QString sKey); + + // 通用标识 + virtual bool isFinalPseu(); + virtual bool isFittingNeeded(); + virtual bool isTbDataEditable(); + +public: + + // 序列化 +// void saveBkInfos(); +// void loadBkInfos(); +// QString getBkInfoFile(QString s); + + // 窗体关闭的情形 + virtual void closeEvent(QCloseEvent *); + +protected: + + Ui::iWxPseudoCSub *ui; + + // 初始设定Ps3Info的参数 + QStringList m_listPsInfoKeys; + // 构造map + QMap m_mapPsInfos; + + // 针对的方法标识 + QString m_sMethod; + + // 坐标轴相关 + QStringList m_listNames; + QStringList m_listUnits; + QString m_sTitle; + + // 初始化标识(为了速度+序列化) + bool m_bInitUi; + + // 是否启用Y2 + bool m_bY2Used; + + // 内部设定 + bool m_bLineVisible; + bool m_bDotVisible; + +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubFit.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubFit.h new file mode 100644 index 0000000..fedf59c --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubFit.h @@ -0,0 +1,51 @@ +#pragma once + +#include "iWxPseudoCSub.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubFit : public iWxPseudoCSub +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubFit(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubFit(); + + // 外部调用 + virtual void initUI(); + +protected: + + // 初始化 + virtual void initUI_Tops(); + + // 拟合相关设置的初始化 + virtual bool isFitItemVisible(int nIndex); + void changeFitUIOf(int nIndex); + void freshExpr(int nIndex, QString s); + bool getFitInfoOf(int nIndex, int& nType, int& nOrder); + + // 通用标识 + virtual bool isFittingNeeded(); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + virtual void refreshByTopFit(); + virtual void fitAndFreshChart(QString sKey, VVecVariant& vvec, bool bFitCurveOnly = false); + +protected slots: + + // 拟合控件 + virtual void slotFitTypeChanged(int index); + virtual void slotOrderChanged(int arg1); + + // 拟合 + virtual void on_btnRunFit_clicked(); + +protected: + + // 拟合控件,为了方便并支持多组 + QVector m_vecCbxFitTypes; + QVector m_vecSbxFitOrders; + QVector m_vecTbxFitDescs; +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubInput.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubInput.h new file mode 100644 index 0000000..ad16fc4 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubInput.h @@ -0,0 +1,74 @@ +#pragma once + +#include "iWxPseudoCSub.h" + +namespace Ui { +class iWxPseudoCSubInput; +} + +class M_TOOL_PVT_EXPORT iWxPseudoCSubInput : public iWxPvtBase +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubInput(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubInput(); + + // 外部调用 + virtual void initUI(); + + // 外传 + void setOtherParas(QMap& maps); + + // 文件标识 + virtual QString getFilePvtTag(); + + // + float getSpecialV(QString s); + +protected: + + // 默认值 + virtual void initDefault(); + + void buildSignals(); + + // 填入最大最小的单位 + void fillUnitOfMaxMin(); + +// // 初始化 +// virtual void initLabels(); +// virtual void initUI_Tops(); +// virtual QWidget* initUI_Chart(); +// virtual QWidget* initUI_TableView(); +// virtual void initPsInfo(iPseudoCInfo*& pInfo); + +// // 表格及图形刷新 +// virtual void freshChartByTableChange(); +// // 对图形进行最后调整 +// virtual void adjustPlots(bool bForceLineVisible = false); + +signals: + void sigInputRefresh(bool, VVecDouble*); + +private slots: + void slotCbxUnitMaxMinChanged(const QString s); + void slotCompSubChanged(QMap& map); + + void on_btnComposition_clicked(); + void on_btnRun_clicked(); + +protected: + + Ui::iWxPseudoCSubInput *ui; + + QString m_sLastUnitMaxMin; + QMap m_mapOthers; + + + QMap m_mapComps; + + // 保存所有的计算结果 + VVecDouble m_vvecResults; +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubKrgKroPE.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubKrgKroPE.h new file mode 100644 index 0000000..54197b3 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubKrgKroPE.h @@ -0,0 +1,38 @@ +#pragma once + +#include "iWxPseudoCSubPE.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubKrgKroPE : public iWxPseudoCSubPE +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubKrgKroPE(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubKrgKroPE(); + virtual void initUI(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); + + // 后台执行拟合 + void backFitBoth(); + bool splitDataByLR(VVecVariant& vvec, VVecVariant& vvecL, VVecVariant& vvecR); + +private: + int m_nSplitIndex; +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubKrgKroPseu.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubKrgKroPseu.h new file mode 100644 index 0000000..f5e5cae --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubKrgKroPseu.h @@ -0,0 +1,36 @@ +#pragma once + +#include "iWxPseudoCSub.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubKrgKroPseu : public iWxPseudoCSub +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubKrgKroPseu(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubKrgKroPseu(); + virtual void initUI(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); + + // 后台执行拟合 + bool prepare4ColsData(VVecVariant& vvecRs); + bool splitFitData(VVecVariant& vvec4Cols, VVecVariant& vvec, int indexX, int indexY); + virtual void backFitKrgKroPseus(VVecVariant& vvecRs); +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubMu.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubMu.h new file mode 100644 index 0000000..17e77a8 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubMu.h @@ -0,0 +1,34 @@ +#pragma once + +#include "iWxPseudoCSubPE.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubMu : public iWxPseudoCSubPE +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubMu(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubMu(); + virtual void initUI(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + void backFitMuo(); + void backFitMug(); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubPE.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubPE.h new file mode 100644 index 0000000..8793ce4 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubPE.h @@ -0,0 +1,43 @@ +#pragma once + +#include "iWxPseudoCSub.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubPE : public iWxPseudoCSub +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubPE(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubPE(); + virtual void initUI(); + virtual void initLabels(); + + // 所有的平衡计算的结果地址 + void setResultPtrOfPE(VVecDouble* pVVec); + // 是否需要刷新 + void setFreshNeeded(bool b); + bool isFreshNeeded(){ return m_bFreshNeeded;} + + // 根据新的相态平衡计算结果进行刷新 + virtual bool freshResultPE(); + virtual bool freshTableByPE(); + +protected: + + // 准备拟合数据 + bool prepareFitSrc(VVecVariant& vvec, int nIndexY, int nIndexX = -1); + + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + +protected: + + // 所有的平衡计算的结果地址,临时,不需要析构 + VVecDouble* m_pVVecPtrOfPE; + // 是否需要刷新 + bool m_bFreshNeeded; + // PE中第几列数据,最后为压力,8,不予考虑 + VecInt m_vecDataIndexes; +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubPseu.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubPseu.h new file mode 100644 index 0000000..089ab53 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubPseu.h @@ -0,0 +1,62 @@ +#pragma once + +#include "iWxPseudoCSubFit.h" + +class iPseudoPressureC; +class M_TOOL_PVT_EXPORT iWxPseudoCSubPseu : public iWxPseudoCSubFit +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubPseu(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubPseu(); + + // 外部调用 + virtual void initUI(); + + // 传递数据,开启刷新图表 + virtual bool freshFinalPs(VecFloat& vecP, VecFloat& vecPs, double dPP, double dPD, QString sAllExpr); + + QString getFitExprStr(QMap& mapFits); + bool freshFitRsView(QMap& mapFits, \ + QMap &mapOthers, \ + VecDouble& vecXs, int nSplitIndex, \ + iPseudoPressureC* pPvt); + + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + virtual void refreshByTopFit(); + virtual void fitAndFreshChart(QString sKey, VVecVariant& vvec, bool bFitCurveOnly = false); + virtual void fitPseuReverse(VVecVariant& vvec); //反推 + + // 拟合相关 + virtual bool isFitItemVisible(int nIndex); + + // 通用标识 + virtual bool isFinalPseu(); + virtual bool isTbDataEditable(); + +signals: + +// void sigRefreshPseu(); + +private slots: + + virtual void on_cbxWholeMode_clicked(); +// virtual void on_btnCalPseu3_clicked(); + +protected: + + double m_dPP; //临时,画三段曲线用 + double m_dPD; +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubRou.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubRou.h new file mode 100644 index 0000000..9d6cac8 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubRou.h @@ -0,0 +1,35 @@ +#pragma once + +#include "iWxPseudoCSubPE.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubRou : public iWxPseudoCSubPE +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubRou(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubRou(); + virtual void initUI(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 后台拟合 + void backFitRo(); + void backFitRg(); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubSo.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubSo.h new file mode 100644 index 0000000..7cd12cc --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubSo.h @@ -0,0 +1,38 @@ +#pragma once + +#include "iWxPseudoCSub.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubSo : public iWxPseudoCSub +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubSo(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubSo(); + virtual void initUI(); + + bool freshFitRsView(QMap& map, \ + VecDouble& vecPs, int nSplitIndex); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); + +private: + + VecDouble m_vecPs; +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubVL.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubVL.h new file mode 100644 index 0000000..51ae8f3 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubVL.h @@ -0,0 +1,32 @@ +#pragma once + +#include "iWxPseudoCSubPE.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubVL : public iWxPseudoCSubPE +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubVL(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubVL(); + virtual void initUI(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 表格及图形刷新 + virtual bool freshTableByPE(); + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); +}; diff --git a/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubZg.h b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubZg.h new file mode 100644 index 0000000..f22b156 --- /dev/null +++ b/Include/mTool/mToolPvt/PseuC/iWxPseudoCSubZg.h @@ -0,0 +1,31 @@ +#pragma once + +#include "iWxPseudoCSubPE.h" + +class M_TOOL_PVT_EXPORT iWxPseudoCSubZg : public iWxPseudoCSubPE +{ + Q_OBJECT + +public: + + explicit iWxPseudoCSubZg(QString sMethod, QWidget *parent = 0); + ~iWxPseudoCSubZg(); + virtual void initUI(); + + // 获取特殊数据 + virtual float getSpecialV(QString s); + +protected: + + // 初始化 + virtual void initLabels(); + virtual void initUI_Tops(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void initPsInfo(iPseudoCInfo*& pInfo); + + // 表格及图形刷新 + virtual void freshChartByTableChange(); + // 对图形进行最后调整 + virtual void adjustPlots(bool bForceLineVisible = false); +}; diff --git a/Include/mTool/mToolPvt/iWxPvtBase.h b/Include/mTool/mToolPvt/iWxPvtBase.h new file mode 100644 index 0000000..8162fbb --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtBase.h @@ -0,0 +1,75 @@ +#pragma once + +#include "iDlgBase.h" +#include "mToolPvt_global.h" + +class ZxDataPvtInfo; +class M_TOOL_PVT_EXPORT iWxPvtBase : public iDlgBase +{ + Q_OBJECT + +public: + + explicit iWxPvtBase(QWidget *parent = 0); + ~iWxPvtBase(); + + // 初始化 + virtual void initUI(); + + // 返回数据 + virtual bool getParaValue(QString sPara, + float &fValue, + QString sUnitDest = ""); + + //Pseudo + void setPi(float fPi); + float getPi(); + + + // 20220418 增加PVT的过程序列化处理 + // 以文件方式存储,并且以Job名称为目录标识 + virtual void setJobTag(QString sDir); + virtual QString getFilePvtTag(); //文件标识 + virtual bool savePvt(); + virtual bool loadPvt(); + virtual QString getFilePvt(bool bLoad); + virtual ZxDataPvtInfo* getJobPVT(bool bLoad); + +protected: + + // 默认值 + virtual void initDefault(); + + // 绑定参数 + void appendParaInfos(QString sPara, + QWidget* pValue, + QWidget* pUnit, + float fDefault = SYS_VALUE_INVALID, + QString sCurUnit = ""); + +protected: + + virtual void paintEvent(QPaintEvent*); + virtual void resizeEvent(QResizeEvent*); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public slots: + void slotUnitChanged(QString s); + +signals: + +protected: +// QMap m_mapCtrls//借用父类 + QMap m_mapUnits; + QMap m_mapUnitDefaults; //这是算法应用的单位,而不是显示的单位 + QMap m_mapUnitLasts; //这是上一次显示的单位 + + //Pseudo + //存储Zgi、Mugi等参数 + float m_fPi; + + // 默认的存储路径,外部传递过来 + QString m_sJobTag; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtComposition.h b/Include/mTool/mToolPvt/iWxPvtComposition.h new file mode 100644 index 0000000..137806e --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtComposition.h @@ -0,0 +1,120 @@ +#pragma once + +#include "iWxPvtBase.h" +//#include "mToolPvt_global.h" + +class ZxTableModel; +class iXmlTable; +class iXmlField; +class CompSubItem; +class M_TOOL_PVT_EXPORT iWxPvtComposition : public iWxPvtBase +{ + Q_OBJECT + +public: + explicit iWxPvtComposition(bool bExt = false, QWidget *parent = 0); + ~iWxPvtComposition(); + + virtual void initUI(); + + void setMapParas(QMap& map); + + static float getCompSubDefault(QString sTag, int whichOne = 0); + + // 文件标识 + virtual QString getFilePvtTag(); + +public: + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, double d); + virtual bool getParaValue(QString sPara, float& f); + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public slots: + + // 组分范围判断 + void slotTextInputValueChanged(const QString &); + + // 校验组分是否100 + void slotVerifyCompo100(); + // 归一C1 + void slotVerifyDown(); + //同比例缩小 + void slotVerifyUp(); + + // 组分校验颜色 + void changeMarkClr(bool bByNormalC1 = false); + + // 是否满足组分100 + bool isCompo100(float error = 0); + + // 最后对结果的验证,并弹出对话框 +// bool runFinalCheckWithTips(); + + void slotApply(); + void slotClose(); + +signals: + + void sigTcPcChanged(QMap& ); + +private: + + void initUI_Sub(QGridLayout* pGridLayout, int iLayout, iXmlField *pField, int nCount); //组分 + void initOutputUI_Sub(QVBoxLayout*& pMainLayout);//组分界面 + void initOutputUI_Btn(QVBoxLayout*& pMainLayout);//组分界面 + + // 组分内容检测(仅仅是范围) + bool checkTextValueScale(QLineEdit* pSender = NULL); + // 组分综合是否100 + bool checkTextCompo100s(float &fSum, QLineEdit* pSender = NULL); + // 综合调用 + bool verifyInputOfComp(QLineEdit* pSender = NULL); + +protected: + virtual void paintEvent(QPaintEvent *); + +private: + + iXmlTable* m_pXmlDefine; + + // 组分相关 + bool m_bMergeMode; //是否合并模式,组分 + QCheckBox* m_pCbxAuto; + QCheckBox* m_pCbxLess100; + QLabel* m_pLabelClr; + QLineEdit* m_pSumCompo; + bool m_bNormalingC1; + float m_fSum; + QPushButton* m_pBtnDown; + QPushButton* m_pBtnUp; + + QMap m_mapComps; + + int m_nDigit; + + bool m_bExtMode; //应用于组分三区拟压力的输入,比普通的要多4项 +}; + +//组分 fraction 临界压力(MPa) 临界温度(℃) +class M_TOOL_PVT_EXPORT CompSubItem +{ +public: + CompSubItem(); + CompSubItem(QString s, double d1, double d2, double d3); + static CompSubItem* getDefaultOf(QString s); + +public: + + QString m_sTag; + float m_fFraction; //0-1之间 + float m_fPc; + float m_fTc; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtMain.h b/Include/mTool/mToolPvt/iWxPvtMain.h new file mode 100644 index 0000000..e4379d2 --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtMain.h @@ -0,0 +1,101 @@ +#pragma once + +#include "iWxPvtBase.h" +#include "mToolPvt_global.h" + +class TreeWxConfig; +class iPseudo3Info; +class iPseudoCInfo; +class iWxPvtUtilItemPseudo; +class iWxPvtUtilItemPseudo3; +class iWxPvtUtilItemPseudoC; +class M_TOOL_PVT_EXPORT iWxPvtMain : public iWxPvtBase +{ + Q_OBJECT + +public: + + explicit iWxPvtMain(QString sType, bool bPhaseS, QWidget *parent = 0); + ~iWxPvtMain(); + + // 初始化 + virtual void initUI(); + + // 设置油气水饱和度 + void setFactors(VecFloat vec); + + virtual bool savePvt(); + + // 文件标识 + virtual QString getFilePvtTag(); + +private: + + // 初始化 + void initUI_MainLayout(); + void initUI_Tops(); + void initUI_StackedWx(); + void initUI_Bottoms(); + + // 具体的内容填充 + void initToolBars(); + void initStatckedWxs(); + void createAndAppendSubWxByName(QString sName); + void calAndFreshPseu(bool bCreateIfFirst = true); + void calAndFreshPseu3(bool bCreateIfFirst = true); + void calAndFreshPseuC(bool bCreateIfFirst = true); + + // 刷新 + void refresh(); + +protected: + + virtual void paintEvent(QPaintEvent*); + virtual void resizeEvent(QResizeEvent*); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public: + +signals: + void sigPvtResultsChanged(QMap& map); + void sigPseudoResults(VVecDouble& vvec); + void sigPseudoResults3(const VVecDouble&, const QMap&, const QMap&); + void sigPseudoResultsC(const VVecDouble&, const QMap&, const QMap&); + +private slots: + + void slotBtnTriggered(); + void slotBtnHelp(); + void slotBtnApply(); + void slotBtnOK(); + void slotBtnCancel(); + + // 子项表格数据更改 + void slotPhaseItemTableChanged(QString sPara); + +private: + + // FluidType + QString m_sFluidType; + bool m_bPhaseS; + // Cmds + QStringList m_listCmds; + + // 子窗体,与Cmd的ID一一对应 + QMap m_mapSubWxs; + + // 布局相关 + QVBoxLayout* m_pMainLayout; + QToolBar* m_pToolBar; + QStackedWidget* m_pStackedWx; + + // 各相的系数(饱和度) + VecFloat m_vecFactors; //依次对应油气水 + + // 拟压力 + iWxPvtUtilItemPseudo* m_pPseudoItem; + iWxPvtUtilItemPseudo3* m_pPseudoItem3; + iWxPvtUtilItemPseudoC* m_pPseudoItemC; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtMatch.h b/Include/mTool/mToolPvt/iWxPvtMatch.h new file mode 100644 index 0000000..28f2b1f --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtMatch.h @@ -0,0 +1,51 @@ +#pragma once + +#include "Defines.h" +#include "ZxBaseUtil.h" +#include "ZxUiBase.h" + +#include "mToolPvt_global.h" + +namespace Ui { +class iWxPvtMatch; +} + +class ZxTableModel; +class ZxTableView; +class M_TOOL_PVT_EXPORT iWxPvtMatch : public ZxUiBase +{ + Q_OBJECT + +public: + + explicit iWxPvtMatch(QStringList listTitles, \ + VVecVariant& vvecData,\ + QWidget *parent = 0); + ~iWxPvtMatch(); + + // 初始化 + virtual void initUI(); + +Q_SIGNALS: + + void sigMatchExpData(VVecVariant& ); + +private slots: + + void on_btnApply_clicked(); + void on_btnOK_clicked(); + void on_btnCancel_clicked(); + +private: + + bool apply(); + +private: + + Ui::iWxPvtMatch *ui; + ZxTableModel* m_pTableModel; + ZxTableView* m_pTableView; + + QStringList m_listTitles; + VVecVariant m_vvecData; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtSubHeader.h b/Include/mTool/mToolPvt/iWxPvtSubHeader.h new file mode 100644 index 0000000..f883f34 --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtSubHeader.h @@ -0,0 +1,88 @@ +#pragma once + +#include +#include "iWxPvtBase.h" +#include "mToolPvt_global.h" + +namespace Ui { +class iWxPvtSubHeader; +} + +class M_TOOL_PVT_EXPORT iWxPvtSubHeader : public iWxPvtBase +{ + Q_OBJECT + +public: + explicit iWxPvtSubHeader(QString sType, QWidget *parent = 0); + ~iWxPvtSubHeader(); + + // 初始化 + virtual void initUI(); + + // 返回数据 + float getTempBase(); + float getPressureBase(); + float getGorBase(); + VecFloat* getPtrOfValueP(); + VecFloat* getPtrOfValueT(); + + // 文件标识 + virtual QString getFilePvtTag(); + +private: + + // 默认值填入 + void initDefault(); + // signal + void buildSignals(); + + // 填入最大最小的单位 + void fillUnitOfMaxMin(); + + // 刷新 + void refresh(); + + // 计算压力温度点 + void calPressAndTemp(); + bool _calIncrement(float& f, + float fMax, float fMin); + bool _calVecOfIncrements(VecFloat& vec, + float fIncrement, + float fMax, float fMin); + +protected: + + virtual void paintEvent(QPaintEvent*); + virtual void resizeEvent(QResizeEvent*); + + virtual bool eventFilter(QObject* object, QEvent* event); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private slots: + + void slotChangeIncrements(); + void slotMaxMinChanged(QString); + void slotMaxMinStrChanged(); + + void slotCbxUnitMaxMinChanged(const QString s); + +signals: + void sigOptionChanged(); + +private: + Ui::iWxPvtSubHeader *ui; + + // FluidType + QString m_sFluidType; + + // 压力数据数组 + VecFloat m_vecValueP; + // 温度数据数组,温度是后台计算的。 + VecFloat m_vecValueT; + float m_fMaxT; //温度范围,固定:20-400℃ 摄氏度 + float m_fMinT; + + QString m_sLastUnitMaxMin; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtSubPhase.h b/Include/mTool/mToolPvt/iWxPvtSubPhase.h new file mode 100644 index 0000000..6456f98 --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtSubPhase.h @@ -0,0 +1,116 @@ +#pragma once + +#include "qglobal.h" +#if (QT_VERSION >= 0x050000) +#include +#define QWebView QWebEngineView +#else +#include +#endif + +#include "iWxPvtBase.h" +#include "mToolPvt_global.h" + +class iPvtBase; +class TreeWxConfig; +class iWxPvtSubHeader; +class iPvtParaItemGroup; +class iWxPvtUtilItem; +class M_TOOL_PVT_EXPORT iWxPvtSubPhase : public iWxPvtBase +{ + Q_OBJECT + +public: + + explicit iWxPvtSubPhase(QString sFluidType, + QString sPhaseType, + QWidget *parent = 0); + ~iWxPvtSubPhase(); + + // 初始化 + virtual void initUI(); + + // 设置关联 + void setBindInfos(iWxPvtSubHeader* pSubHeader); + + // 获取结果 + bool getAllResults(QMap& mapResults); + // 获取类似Zg、Cg的页面的原始数据 + bool getRawDataOf(QString s, VecFloat& x, VecFloat& y); + bool getRawDataOf(QString s, VVecVariant& vvec); + // 获取单个的Point(结果) + bool getFixedPtOf(QString s, float& x, float& y); + // 获取参数对应的Wx + iWxPvtUtilItem* getWxPvtUtilItem(QString s); + + virtual bool savePvt(); + + // 文件标识 + virtual QString getFilePvtTag(); + +private: + + void fillTabWx(); + + // 根据相类型决定多少Tab + void dealwithItemNames(); + // 具体的算法 + void dealwithItemAlgos(); + void dealwithItemAlgos_O(QString sPara); + void dealwithItemAlgos_G(QString sPara); + void dealwithItemAlgos_Gc(); + void dealwithItemAlgos_W(QString sPara); + void dealwithAlgoBindings(); //绑定算法类 + iPvtParaItemGroup* getCurPvtGroup(); + +protected: + + virtual void paintEvent(QPaintEvent*); + virtual void resizeEvent(QResizeEvent*); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private slots: + void slotTabCurIndexChanged(int); + + // 这是首页Option触发 + void slotOptionParaMethodChanged(QString sPara, QString sMethod); + // 这是各个Item触发 + void slotItemParaMethodChanged(QString sPara, QString sMethod); + + // 设置算法类的参数 + void slotDealwithAlgoMembers(iPvtBase*& p); + + // 获取Pb压力值 + void slotDealwithReferPb(QPointF& pt); + + // 从当前所有的信息中获取参数的值 + bool getPvtParaValue(QString s, float& f); + + // 子项表格数据更改 + void slotParaItemTableChanged(QString sPara); + +signals: + + // 子项表格数据更改 + void sigParaItemTableDataChanged(QString s); + +private: + // FluidType,这是主类型 + QString m_sFluidType; + // PhaseType,相类型 + QString m_sPhaseType; + + // Tab + QTabWidget* m_pTabWx; + + // TabWx的内容,第一项为iWxPvtUtilOption + QStringList m_listItems; + + // SubHeader + iWxPvtSubHeader* m_pSubHeader; + + // 算法类 + QMap m_mapAlgos; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtUtilItem.h b/Include/mTool/mToolPvt/iWxPvtUtilItem.h new file mode 100644 index 0000000..3854f98 --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilItem.h @@ -0,0 +1,233 @@ +#pragma once + +#include "iWxPvtBase.h" +#include "mToolPvt_global.h" + +class iPvtBase; +class iGuiPlot; +class ZxTableView; +class ZxTableModel; +class iWxPvtSubHeader; +class iWxPvtUtilOption; +class M_TOOL_PVT_EXPORT iWxPvtUtilItem : public iWxPvtBase +{ + Q_OBJECT + +public: + + explicit iWxPvtUtilItem(QWidget *parent = 0); + ~iWxPvtUtilItem(); + + // 初始化 + virtual void initUI(); + + // 传递参数 + virtual void setInfos(QString sFluidType, QString sPhaseType, QString sPara); + + // 设置选项,从外界 + virtual void selectMethod(QString s); + + // 设置关联 + virtual void setBindInfos(iWxPvtSubHeader* pSubHeader, iWxPvtUtilOption* pUtilOption); + + // 设置算法载体 + virtual void setPvt(iPvtBase* p); + + // 返回计算结果 + virtual float getResult(); + // 返回原始的两列数据 + virtual bool getRawData(VecFloat& x, VecFloat& y); + virtual bool getRawData(VVecVariant& vvec); + virtual bool getFixedPtData(float& x, float& y); + + // 计算点 + virtual bool calResultPos(QPointF& pt); + virtual bool calReferDbPos(QPointF& pt); + + // 返回数据 + virtual bool getParaValue(QString sPara, + float &fValue, + QString sUnitDest = ""); + + virtual void forceMethodChanged(); + + // 文件标识 + virtual QString getFilePvtTag(); + +protected: + + // 初始化 + virtual void initUI_MainLayout(); + virtual void initUI_MethodOptions(); + virtual void initUI_MainViews(); + virtual QWidget* initUI_Chart(); + virtual QWidget* initUI_TableView(); + virtual void fillTableViewWithDefault(); + virtual void initUI_Others(); + virtual void initUI_Others_Btns(QHBoxLayout* pLayoutH); + virtual void initUI_Others_Paras(QHBoxLayout* pLayoutH); + virtual void changeOthersBtns(QString s); + virtual void changeOthersParas(QString s); + virtual void fuzzyLayoutWH(int n, int& szW, int& szH); + + void runDataMatch(); + void getMathExps(VecPointF& vec); + void updateMatchPlot(VecFloat x, VecFloat y, VecPointF vecExps); + void freshPpcs(float fPpc, float fPpcNew = -1.f); + + // check是否温度模式 + virtual void checkIfModeT(); + // check是否需要考虑PB压力点 + virtual void checkIfPbConsidered(); + + // 算法有多少种 + virtual void dealwithMethods(); + // 标题 + virtual void dealwithTitles(); + + // 刷新 + virtual void refresh(); + virtual void refreshByMethod(QString s); + virtual bool refreshByMethod_C(QString s, VecFloat& x, VecFloat& y); //通用方法 + virtual bool refreshByMethod_S(QString s, VecFloat& x, VecFloat& y); //特殊方法如Table等 + virtual void refreshChart(VVecVariant& vvec); + virtual void refreshChart(VecFloat& x, VecFloat& y); + virtual void refreshTable(VecFloat& x, VecFloat& y); + virtual void refreshHitPoint(); + virtual void clearChart(); + + // 表格数据改变 + virtual void freshChartByTableChange(); + // Const数据改变 + virtual void freshChartByConstChange(); + + // 显示常数部分 + virtual void showConstAbouts(bool bVisible); + // 表格只读 + virtual void setTableEditable(bool bEditable); + + // 获取当前选中的方法在算法类中的类型(剔除Table、Const等特殊) + virtual int getMethodSubType(); + // 根据不同方法,对算法类赋值 + virtual void setMemberValuesOfAlgo(); + + // 获取x方向数据 + virtual void getVecX(VecFloat& x); + + // 计算点 + virtual float calResultPosY(float fX, QString sMethod); + + // 辅助信息 + virtual void dealwithDesc(); + +protected: + + virtual void paintEvent(QPaintEvent*); + virtual void resizeEvent(QResizeEvent*); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public slots: + + virtual void slotMainHeaderOptionChanged(); + virtual void slotMethodChanged(); + + void slotConstValueChanged(QString s); + + // 表格 + void slotTableCellChanged(const QModelIndex&, const QModelIndex&); + void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); + + // match 功能,20210718 + void slotBtnEdit(); + void slotBtnMatch(); + void slotCbxUsePpc(); + void slotMatchExpData(VVecVariant& vvecData); + + // 凝析气参数设置 + void slotRatioGPP(); + + // 选择改变 + // vecIndexCbxs:所有勾选的方法 + // indexRadio:勾选的主方法 + void slotMethodChangedCR(const VecInt vecIndexCbxs, const int indexRadio); + +signals: + + void sigMethodSelected(QString sPara, QString sMethod); + void sigMemberValueNeeded(iPvtBase*& ); + void sigReferPbNeeded(QPointF& pt); + void sigTableDataChanged(QString sPara); + +protected: + + // FluidType,这是主类型 + QString m_sFluidType; + // PhaseType,相类型 + QString m_sPhaseType; + // 当前计算的参数对象,通常英文 + QString m_sPara; + + // 当前参数对象计算方法有几种 + QStringList m_listMethods; + // 特殊方法的标识,与配置xml文件要对应,而且必须放在列表的最前面 + QStringList m_listSpecialMethodTags; //所有 + + // Radio选项 + QVector m_vecRadios; + + // 布局 + QVBoxLayout* m_pMainLayout; + + // 辅助信息显示 + QLabel* m_pLblDesc; + + // SubHeader + iWxPvtSubHeader* m_pSubHeader; + // UtilOption + iWxPvtUtilOption* m_pUtilOption; + + // 对应的实体类 + iPvtBase* m_pPvt; + + // 绘图/表格展示 + iGuiPlot* m_pWxPlot; + ZxTableView* m_pTableView; + ZxTableModel* m_pTableModel; + + // 坐标轴 + QString m_sTitleX; + QString m_sTitleY; + QString m_sUnitX; + QString m_sUnitY; + + // 结果的点 + QPointF m_ptResult; + QPointF m_ptReferPb; + + // Const + float m_fConst; + QVector m_vecConstCtrls; + + // 是否温度模式 + bool m_bModeT; + + // 是否需要考虑PB压力点 + bool m_bReferPbConsidered; + + // 当前选项 + QString m_sLastMethod; + + // match 功能,20210718 + QPushButton* m_pBtnEdit; + QPushButton* m_pBtnMatch; + QLabel* m_pLblPpcs; + QCheckBox* m_pCbxUsePpc; + + VVecVariant m_vvecExps; //match需要的edit数据 + + QLineEdit* m_pTbxGPP; + QLabel* m_pLblGPP; + +}; diff --git a/Include/mTool/mToolPvt/iWxPvtUtilItemPseudo.h b/Include/mTool/mToolPvt/iWxPvtUtilItemPseudo.h new file mode 100644 index 0000000..be83499 --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilItemPseudo.h @@ -0,0 +1,75 @@ +#pragma once + +#include "iWxPvtUtilItem.h" + +class M_TOOL_PVT_EXPORT iWxPvtUtilItemPseudo : public iWxPvtUtilItem +{ + Q_OBJECT + +public: + + explicit iWxPvtUtilItemPseudo(QWidget *parent = 0); + ~iWxPvtUtilItemPseudo(); + + // 传递参数 + virtual void setInfos(QString sFluidType, QString sPhaseType, QString sPara); + + // 传递参数 + void calAndFreshBy(QMap& mapInputs, \ + iWxPvtUtilItem* pWxZg, iWxPvtUtilItem* pWxMug); + + // 组织四列拟压力相关的数据 + // VecDouble vecP = vvec[0] + // VecDouble vecPs = vvec[1] + // VecDouble vecZg = vvec[2] + // VecDouble vecMug = vvec[3] + bool getPvtPseuInfos(VVecDouble& vvec); + + // 文件标识 + virtual QString getFilePvtTag(); + +protected: + + virtual void initUI_Others_Paras(QHBoxLayout* pLayoutH); + + // 四个范围点,nWhich:0-3 + double getPrsScale(int nWhich); + // 步长 + double getPrsStep(); + // 获取数值 + double getCtrlValueBy(QString sKey); + +protected slots: + + // 压力段范围点改变 + void slotPrsScaleChanged(); + // 压力段步长改变 + void slotPrsStepChanged(); + // 根据当前压力段范围点重新计算 + void slotBtnRefresh(); + +private: + + // 初始化 + virtual QWidget* initUI_Chart(); + virtual void initUI_Others(); + + // 算法有多少种 + virtual void dealwithMethods(); + + // 标题 + virtual void dealwithTitles(); + + // 计算点 + virtual bool calResultPos(QPointF& pt); + + // 组织数据 + bool organizeInputs(QString sX, \ + QMap& mapInputs, \ + QMap& mapParas); +signals: + +private: + VecFloat m_vecZg; + VecFloat m_vecMug; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtUtilItemPseudo3.h b/Include/mTool/mToolPvt/iWxPvtUtilItemPseudo3.h new file mode 100644 index 0000000..0897a9e --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilItemPseudo3.h @@ -0,0 +1,73 @@ +#pragma once + +#include "iWxPvtUtilItem.h" + +class iWxPseudo3Sub; +class iPseudo3Info; +class M_TOOL_PVT_EXPORT iWxPvtUtilItemPseudo3 : public iWxPvtUtilItem +{ + Q_OBJECT + +public: + + explicit iWxPvtUtilItemPseudo3(QWidget *parent = 0); + ~iWxPvtUtilItemPseudo3(); + + // 初始化 + virtual void initUI(); + + // 传递参数 + virtual void setInfos(QString sFluidType, QString sPhaseType, QString sPara); + + // 最后一个SubWx + iWxPseudo3Sub* getSubWxPseu(); + iWxPseudo3Sub* getSubWxBy(QString sName); + + // 传递参数 + void calAndFreshBy(VecFloat& vecX); + + // 最终的计算函数 + bool calPseudo3(VecFloat& vecP, VecFloat& vecPs, QString& sAllExpr, bool bLogging); + + // 刷新最终的Sub图表 + bool freshFinalPs(VecFloat& vecP, VecFloat& vecPs, QString sAllExpr); + + // 返回数据,触发信息 + bool getPvtPseuInfos(VVecDouble& vvec, \ + QMap& mapPsInfos, \ + QMap& mapOthers); + + // 保存 +// void saveBkInfos(); + + // 文件标识 + virtual QString getFilePvtTag(); + virtual bool savePvt(); + +private: + + // 算法有多少种 + virtual void dealwithMethods(); + + // 算法切换 + void refreshByMethod(QString s); + + // 准备 + void preparePsInfos(QMap& mapInfos, bool bOut); + void prepareOthers(); + +signals: + +private slots: + void slotSubWxChanged(int); + void slotRefreshPseu(); + +private: + + QStackedWidget* m_pStackedWx; + + VecFloat m_vecX; + QMap m_mapOthers; +}; + + diff --git a/Include/mTool/mToolPvt/iWxPvtUtilItemPseudoC.h b/Include/mTool/mToolPvt/iWxPvtUtilItemPseudoC.h new file mode 100644 index 0000000..1187b4d --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilItemPseudoC.h @@ -0,0 +1,97 @@ +#pragma once + +#include "iWxPvtUtilItem.h" + +class iWxPseudoCSub; +class iWxPseudoCSubSo; +class iWxPseudoCSubInput; +class iWxPseudoCSubPseu; +class iPseudoCInfo; +class M_TOOL_PVT_EXPORT iWxPvtUtilItemPseudoC : public iWxPvtUtilItem +{ + Q_OBJECT + +public: + + explicit iWxPvtUtilItemPseudoC(QWidget *parent = 0); + ~iWxPvtUtilItemPseudoC(); + + // 初始化 + virtual void initUI(); + + // 传递参数 + virtual void setInfos(QString sFluidType, QString sPhaseType, QString sPara); + + // 最后一个SubWx + iWxPseudoCSub* getSubWxPseu(); + iWxPseudoCSub* getSubWxBy(QString sName); + iWxPseudoCSubInput* getSubWxInputs(); + + // 传递参数 + //void calAndFreshBy(VecFloat& vecX); + + // 最终的计算函数 + //bool calPseudoC(VecFloat& vecP, VecFloat& vecPs, QString& sAllExpr, bool bLogging); + + // 刷新最终的Sub图表 + //bool freshFinalPs(VecFloat& vecP, VecFloat& vecPs, QString sAllExpr); + + // 返回数据,触发信息 + bool getPvtPseuInfos(VVecDouble& vvec, \ + QMap& mapPsInfos, \ + QMap& mapOthers); + + // 保存 +// void saveBkInfos(); + + // 文件标识 + virtual QString getFilePvtTag(); + virtual bool savePvt(); + + virtual void fuzzyLayoutWH(int n, int& szW, int& szH); + +private: + + virtual void initUI_MethodOptions(); + + // 除了第一个之外,其它Radio隐藏与显示 + void showMostRadios(bool bVisible, VVecDouble* pVVecResults); + + // 算法有多少种 + virtual void dealwithMethods(); + + // 算法切换 + void refreshByMethod(QString s); + + // 准备 + void preparePsInfos(QMap& mapInfos, bool bOut); + void prepareOthers(); + + // 根据名称查找FitAlg + iPseudoCInfo* findAlgFitInfo(QString sName); + + void freshSubWxSo(iWxPseudoCSubSo* pSub); + void freshSubWxPseu(iWxPseudoCSubPseu* pSub); + bool fuzzyFitAboutInfos(QMap& map, \ + QStringList& listFitNames, \ + VecDouble& vecX, int& nSplitIndex); + +signals: + +private slots: + void slotInputRefresh(bool bVisible, VVecDouble* pVVecResults); + void slotSubWxChanged(int); +// void slotRefreshPseu(); + +private: + + QStackedWidget* m_pStackedWx; + + VecFloat m_vecX; + QMap m_mapOthers; + + // 临时,对应Input的计算结果数据 + VVecDouble* m_pVVecPtrOfPE; +}; + + diff --git a/Include/mTool/mToolPvt/iWxPvtUtilOption.h b/Include/mTool/mToolPvt/iWxPvtUtilOption.h new file mode 100644 index 0000000..7ccd7ac --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilOption.h @@ -0,0 +1,62 @@ +#pragma once + +#include "iWxPvtBase.h" +#include "mToolPvt_global.h" + +class M_TOOL_PVT_EXPORT iWxPvtUtilOption : public iWxPvtBase +{ + Q_OBJECT + +public: + + explicit iWxPvtUtilOption(QWidget *parent = 0); + ~iWxPvtUtilOption(); + + // 初始化 + virtual void initUI(); + + // 传递参数 + void setInfos(QString sFluidType, QString sPhaseType, QStringList listParas); + + // 下拉选项的设定,从外界传入 + void selectParaMethod(QString sPara, QString sMethod); + +protected: + + // 默认值 + virtual void initDefault(); + + virtual void initMethodLists(QGroupBox* p); + virtual void dealWithParaItem(QGridLayout* pLayout, + QString sPara, + int r, + int& c); + virtual void fillParaMethods(); + +protected: + + virtual void paintEvent(QPaintEvent*); + virtual void resizeEvent(QResizeEvent*); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public slots: + + void slotParaCbxTextChanged(QString s); + +signals: + void sigParaMethodChanged(QString sPara, QString sMethod); + +private: + + // FluidType,这是主类型 + QString m_sFluidType; + // PhaseType,相类型 + QString m_sPhaseType; + // 当前计算的参数对象,通常英文 + QStringList m_listParas; + + // 下拉选项载体 + QMap m_mapCbxParas; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtUtilOptionG.h b/Include/mTool/mToolPvt/iWxPvtUtilOptionG.h new file mode 100644 index 0000000..0dbec0d --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilOptionG.h @@ -0,0 +1,79 @@ +#pragma once + +#include "iWxPvtUtilOption.h" + +namespace Ui { +class iWxPvtUtilOptionG; +} + +class iWxPvtComposition; +class M_TOOL_PVT_EXPORT iWxPvtUtilOptionG : public iWxPvtUtilOption +{ + Q_OBJECT + +public: + explicit iWxPvtUtilOptionG(QWidget *parent = 0); + ~iWxPvtUtilOptionG(); + + // 初始化 + virtual void initUI(); + + // 返回数据 + virtual bool getParaValue(QString sPara, + float &fValue, + QString sUnitDest = ""); + + // 文件标识 + virtual QString getFilePvtTag(); + +protected: + + // 默认值 + virtual void initDefault(); + + // 刷新H2S/CO2/N2等 + void refreshHCN(); + // 刷新摩尔 + void refreshMole(); + + // 根据组分计算并刷新相对密度 + void calAndFreshPho(QMap& map); + + // 计算临界值 + void calAndFreshTcPc(QWidget *pSender = NULL); + + // 判断数值是否正确 + bool checkInputOfHCN(QWidget *pSender = NULL); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + + +private slots: + + // 临界计算方法切换 + void on_cbxCriticalMethods_currentIndexChanged(const QString &arg1); + + // H2S/CO2/N2的摩尔模式 + void on_radioFraction_clicked(); + void on_radioPercent_clicked(); + + // H2S/CO2/N2的摩尔数值验证 + void on_tbxH2S_textChanged(const QString &arg1); + void on_tbxCO2_textChanged(const QString &arg1); + void on_tbxN2_textChanged(const QString &arg1); + + // 比重改变 + void on_tbxGravity_textChanged(const QString &arg1); + + void on_btnComposition_clicked(); + + void slotCompSubChanged(QMap& map); + +private: + Ui::iWxPvtUtilOptionG *ui; + + QMap m_mapComps; + int m_nCustomIndex; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtUtilOptionO.h b/Include/mTool/mToolPvt/iWxPvtUtilOptionO.h new file mode 100644 index 0000000..b16f4bf --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilOptionO.h @@ -0,0 +1,50 @@ +#pragma once + +#include "iWxPvtUtilOption.h" + +namespace Ui { +class iWxPvtUtilOptionO; +} + + +class M_TOOL_PVT_EXPORT iWxPvtUtilOptionO : public iWxPvtUtilOption +{ + Q_OBJECT + +public: + + explicit iWxPvtUtilOptionO(QWidget *parent = 0); + ~iWxPvtUtilOptionO(); + + // 初始化 + virtual void initUI(); + + // 文件标识 + virtual QString getFilePvtTag(); + +protected: + + // 默认值 + virtual void initDefault(); + + virtual void dealWithParaItem(QGridLayout* pLayout, + QString sPara, + int r, + int& c); + // 返回数据 + virtual bool getParaValue(QString sPara, + float &fValue, + QString sUnitDest = ""); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +private slots: + void slotVasBegSetting(); + +private: + Ui::iWxPvtUtilOptionO *ui; + + float m_fPsep; + float m_fTsep; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtUtilOptionW.h b/Include/mTool/mToolPvt/iWxPvtUtilOptionW.h new file mode 100644 index 0000000..f15522b --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtUtilOptionW.h @@ -0,0 +1,48 @@ +#pragma once + +#include "iWxPvtUtilOption.h" + +namespace Ui { +class iWxPvtUtilOptionW; +} + +class M_TOOL_PVT_EXPORT iWxPvtUtilOptionW : public iWxPvtUtilOption +{ + Q_OBJECT + +public: + explicit iWxPvtUtilOptionW(QWidget *parent = 0); + ~iWxPvtUtilOptionW(); + + // 初始化 + virtual void initUI(); + + // 文件标识 + virtual QString getFilePvtTag(); + + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +protected: + + // 默认值 + virtual void initDefault(); + + // 刷新Radio相关 + void refreshRadioAbouts(); + + // 返回数据 + virtual bool getParaValue(QString sPara, + float &fValue, + QString sUnitDest = ""); + +private slots: + + void on_radioGravity_clicked(); + void on_radioSalinity_clicked(); + + void on_cbxUnitSalinity_currentIndexChanged(const QString &arg1); + +private: + Ui::iWxPvtUtilOptionW *ui; +}; diff --git a/Include/mTool/mToolPvt/iWxPvtVasBeg.h b/Include/mTool/mToolPvt/iWxPvtVasBeg.h new file mode 100644 index 0000000..3a113e3 --- /dev/null +++ b/Include/mTool/mToolPvt/iWxPvtVasBeg.h @@ -0,0 +1,37 @@ +#pragma once + +#include "iWxPvtBase.h" +#include "mToolPvt_global.h" + +namespace Ui { +class iWxPvtVasBeg; +} + +// 注:该类派生自iWxPvtBase仅仅是为了借用其getParaValue函数 +class M_TOOL_PVT_EXPORT iWxPvtVasBeg : public iWxPvtBase +{ + Q_OBJECT + +public: + + explicit iWxPvtVasBeg(QWidget *parent = 0); + ~iWxPvtVasBeg(); + + // 初始化 + virtual void initUI(); + +private slots: + + void on_checkBox_clicked(); + void on_btnOK_clicked(); + void on_btnCancel_clicked(); + +private: + + // 默认值填入 + void initDefault(); + +private: + + Ui::iWxPvtVasBeg *ui; +}; diff --git a/Include/mTool/mToolPvt/mToolPvt_global.h b/Include/mTool/mToolPvt/mToolPvt_global.h new file mode 100644 index 0000000..80eb266 --- /dev/null +++ b/Include/mTool/mToolPvt/mToolPvt_global.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#if defined(M_TOOL_PVT_LIBRARY) +# define M_TOOL_PVT_EXPORT Q_DECL_EXPORT +#else +# define M_TOOL_PVT_EXPORT Q_DECL_IMPORT +#endif diff --git a/Include/nmNum/nmData/nmDataDemo.h b/Include/nmNum/nmData/nmDataDemo.h new file mode 100644 index 0000000..4516949 --- /dev/null +++ b/Include/nmNum/nmData/nmDataDemo.h @@ -0,0 +1,76 @@ +#pragma once + +#include "ZxDataObjectDbl.h" +#include "nmData_global.h" + +// 这是数值试井数据对象的例子 +// 对应的表结构参见 +/* + + + + + + + + + + + + */ +class NM_DATA_EXPORT nmDataDemo : public ZxDataObjectDbl +{ + ZX_DECLARE_DYNAMIC + +public: + + nmDataDemo(); + nmDataDemo(const nmDataDemo &other); + virtual ~nmDataDemo(); + nmDataDemo &operator = (const nmDataDemo &other); + +public: + + // 接口 + virtual ZxDataObject* clone(); + virtual QString type() const; + + // 加载保存(数据库部分) + virtual bool _parseData(VecVariant vec, int& n); + virtual bool _sumUpData(VecVariant& vec); + + // 序列化(统一序列化为大字段时的处理) + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // Icon + virtual QIcon getIcon(bool expanded) const; + +public: + + // 对于参数的set和get处理,主要是为了调用方便 + + void setWellCode(const QString& s); + QString getWellCode() const; + + void setTopDepth(const double& d); + double getTopDepth() const; + + void setBottomDepth(const double& d); + double getBottomDepth() const; + +protected: + + // 与数据库关联的数据,如果父类已经定义,则无需再次定义 + + //QString m_sID; + QString m_sWellCode; + //QString m_sName; + + double m_dTopDepth; + double m_dBottomDepth; +}; + + + + diff --git a/Include/nmNum/nmData/nmDataUtils.h b/Include/nmNum/nmData/nmDataUtils.h new file mode 100644 index 0000000..28845a2 --- /dev/null +++ b/Include/nmNum/nmData/nmDataUtils.h @@ -0,0 +1,26 @@ +#pragma once + +#include "ZxDataObject.h" +#include "nmData_global.h" + +class ZxDataProject; +class ZxDataWell; + +// 数值试井数据对象如何进行初始加载的方式 +class NM_DATA_EXPORT nmDataUtils : public QObject +{ + +public: + + nmDataUtils(); + ~nmDataUtils(); + + // 对数据对象的children进行外部扩充:ZxDataProject 和 ZxDataWell + static bool extendChildrenOfProj(ZxDataProject* pDataProj); + static bool extendChildrenOfWell(ZxDataWell* pDataWell); + +}; + + + + diff --git a/Include/nmNum/nmData/nmData_global.h b/Include/nmNum/nmData/nmData_global.h new file mode 100644 index 0000000..4993d9d --- /dev/null +++ b/Include/nmNum/nmData/nmData_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(NM_DATA_LIBRARY) +# define NM_DATA_EXPORT Q_DECL_EXPORT +#else +# define NM_DATA_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/nmNum/nmData/nmDefines.h b/Include/nmNum/nmData/nmDefines.h new file mode 100644 index 0000000..8eda03e --- /dev/null +++ b/Include/nmNum/nmData/nmDefines.h @@ -0,0 +1,11 @@ +#pragma once + +// 数值试井绘图对象类型 +enum NM_Obj_Type +{ + NOT_Point = 0, //点 + NOT_Line, //线 + NOT_Polygon, //多边形 + NOT_Other, //其它 + NOT_UNKNWON +}; diff --git a/Include/nmNum/nmPlot/nmGuiPlot.h b/Include/nmNum/nmPlot/nmGuiPlot.h new file mode 100644 index 0000000..0bb5825 --- /dev/null +++ b/Include/nmNum/nmPlot/nmGuiPlot.h @@ -0,0 +1,89 @@ +#pragma once + +#include "iGuiPlot.h" +#include "nmDefines.h" +#include "nmPlot_global.h" + +class nmObjBase; + +// 数值试井绘图载体的样例 +class NM_PLOT_EXPORT nmGuiPlot : public iGuiPlot +{ + Q_OBJECT + +public: + + explicit nmGuiPlot(bool bUseBtn = true, QWidget *parent = 0); + ~nmGuiPlot(); + + // 初始化UI + virtual void initUI(QString sTitle, QSize szDefault = QSize(265, 203)); + + // 初始化Sheet + void initSheets(); + + // 初始化布局 + virtual void initMainLayout(); + QWidget* initChartLayout(QString sTitle, QSize szDefault); + + // 刷新图形 + virtual void runUpdate(); + + // Action命令执行 + virtual bool runAction(QString sAction); + + // 创建添加一个Obj + nmObjBase* appendOneObj(NM_Obj_Type o, QString& sName, QVector& vec); + nmObjBase* _createOneObj(NM_Obj_Type o, QString& sName); + + // 绑定绘图对象的信号 + void bindObjSignals(ZxObjBase* pObj); + +#ifdef QT_DEBUG + + /// @brief 刷新指定的绘图对象 + /// @param sName 绘图对象名称 + /// @param vecX 数据点 + /// @param vecY 绘图对象名称 + /// @param bPressureLike 压力模式还是流量模式,通常都是压力模式 + /// @param bUseY2 是否启用第二y轴(右侧) + /// @param bClearAll 刷新指定绘图对象时,是否把原有所有绘图对象清除 + ZxObjBase* updatePlotObjBy(QString sName, \ + VecFloat& vecX, VecFloat& vecY, \ + bool bPressureLike = true, \ + bool bUseY2 = false, \ + bool bClearAll = false); + +#endif + +public slots: + + // Obj选择状态改变 + void slotObjSelChanged(bool); + + // Obj数据发生了改变 + void slotObjPtsChanged(); + +signals: + + // 绘图对象选择状态发生改变 + void sigObjSelChanged(ZxObjBase*, bool); + + // 绘图对象数据点发生改变 + void sigObjPtsChanged(ZxObjBase*); + +public: + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 反序列化后,把数据重新加入m_mapCurveData与m_mapCurveType + virtual void resetAfterDeserialized(); + +protected: + + // 绘制Painter函数重载 + virtual void paintEvent(QPaintEvent *); + +}; diff --git a/Include/nmNum/nmPlot/nmGuiPlotCmdHelper.h b/Include/nmNum/nmPlot/nmGuiPlotCmdHelper.h new file mode 100644 index 0000000..8bd1a90 --- /dev/null +++ b/Include/nmNum/nmPlot/nmGuiPlotCmdHelper.h @@ -0,0 +1,26 @@ +#pragma once + +#include "iGuiPlotCmdHelper.h" +#include "nmPlot_global.h" + +// 该类是数值试井绘图载体的样例nmGuiPlot的Cmd命令分发处理 +class NM_PLOT_EXPORT nmGuiPlotCmdHelper + : public iGuiPlotCmdHelper +{ + Q_OBJECT + +public: + explicit nmGuiPlotCmdHelper(iGuiPlot* p); + ~nmGuiPlotCmdHelper(); + + virtual bool runAction(QString sAction); + +public slots: + + void slotObjPtsFinished(QVector& vec); +// void slotObjFinished(); + +protected: + + friend class nmGuiPlot; +}; diff --git a/Include/nmNum/nmPlot/nmObjBase.h b/Include/nmNum/nmPlot/nmObjBase.h new file mode 100644 index 0000000..e7fe8dd --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjBase.h @@ -0,0 +1,23 @@ +#pragma once + +#include "ZxObjBase.h" +#include "nmPlot_global.h" + +// 数值试井绘图对象(基类) +class NM_PLOT_EXPORT nmObjBase : public ZxObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + nmObjBase(); + nmObjBase(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY); + ~nmObjBase(); + + virtual void paintBack(QPainter* painter, \ + const ZxPaintParam& param); + +}; diff --git a/Include/nmNum/nmPlot/nmObjLine.h b/Include/nmNum/nmPlot/nmObjLine.h new file mode 100644 index 0000000..e2311cf --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjLine.h @@ -0,0 +1,75 @@ +#pragma once + +#include "nmObjPoint.h" + +// 数值试井绘图对象(线) +class NM_PLOT_EXPORT nmObjLine : public nmObjPoint +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + nmObjLine(); + nmObjLine(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY); + ~nmObjLine(); + +public: + + // 封装 + virtual void initTools(); + + // 辅助信息 + virtual void initSubObjs(); + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, \ + int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + +public: + + // 属性填充内容 + virtual void fillPtyPano(IxPtyPano* sheet); + + // 成果序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 模版处理(从道理上讲,模版处理与成果序列化机制完全一致) + // 但此处放开是为了调用方更灵活的控制 + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void paintBack(QPainter* painter, \ + const ZxPaintParam& param); + +protected: + + // 绘制线 + virtual bool drawLine(QPainter* painter, QLineF& oLine); + // 绘制选择 + virtual bool drawSelStates(QPainter* painter, QLineF& oLine); + // 绘制井点 + virtual bool drawWellPos(QPainter* painter, QPointF pt); + + // 获取线的中点 + virtual QPointF getCenterPos(); + + // 重新绑定范围 + virtual void resetBounds(); +}; + + + + diff --git a/Include/nmNum/nmPlot/nmObjLineTool.h b/Include/nmNum/nmPlot/nmObjLineTool.h new file mode 100644 index 0000000..bb7e560 --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjLineTool.h @@ -0,0 +1,32 @@ +#pragma once + +#include "nmObjPointTool.h" + +// 数值试井绘图对象之工具(线) +class NM_PLOT_EXPORT nmObjLineTool : public nmObjPointTool +{ + Q_OBJECT + +public: + + nmObjLineTool(); + +public: + + // 鼠标各种响应 + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onLeftDoubleClick(const QPointF& pt); + + // 绘制 + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + // 根据鼠标当前选择情况确定不同的光标类型 + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + +}; diff --git a/Include/nmNum/nmPlot/nmObjPoint.h b/Include/nmNum/nmPlot/nmObjPoint.h new file mode 100644 index 0000000..9f04161 --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjPoint.h @@ -0,0 +1,104 @@ +#pragma once + +#include "nmObjBase.h" +#include "nmDefines.h" +#include "nmPlot_global.h" + +// 数值试井绘图对象(点) +class NM_PLOT_EXPORT nmObjPoint : public nmObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + nmObjPoint(); + nmObjPoint(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY); + ~nmObjPoint(); + + // 设置初始参数 + virtual void init(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY); + // 设置Tools + virtual void initTools(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + + // 辅助信息 + virtual void initSubObjs(); + virtual void resetOthers(); + + // 设置显示的标识 + void setPointTag(QString s); + +public: + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + + // 获取中心点 + virtual QPointF getCenterPos(); + +public: + + // 属性填充内容 + virtual void fillPtyPano(IxPtyPano* sheet); + + // 成果序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 模版处理(从道理上讲,模版处理与成果序列化机制完全一致) + // 但此处放开是为了调用方更灵活的控制 + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void paintBack(QPainter* painter, \ + const ZxPaintParam& param); + + // 绘制井点 + virtual bool drawWellPos(QPainter* painter, QPointF pt); + +public: + + // XY的位置信息 + void setValueX(float x); + float getValueX(); + void setValueY(float y); + float getValueY(); + + // 描述 + void setDesc(QString s); + QString getDesc(); + + // 点数据 + void setDataByPos(const QPointF& pt, QString sDesc); + + void resetBounds(); + virtual QRectF getBounds4Update(); + +public: + + QString m_sDesc; ///描述字符串 + QColor m_clrFillUnvalid; //无效时填充颜色 + QColor m_clrOuter; //外边界颜色 +}; + + + + diff --git a/Include/nmNum/nmPlot/nmObjPointTool.h b/Include/nmNum/nmPlot/nmObjPointTool.h new file mode 100644 index 0000000..59e8ead --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjPointTool.h @@ -0,0 +1,32 @@ +#pragma once + +#include "nmObjToolBase.h" + +// 数值试井绘图对象之工具(点) +class NM_PLOT_EXPORT nmObjPointTool : public nmObjToolBase +{ + Q_OBJECT + +public: + + nmObjPointTool(); + +public: + + // 鼠标各种响应 + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onLeftDoubleClick(const QPointF& pt); + + // 绘制 + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +protected: + + // 根据鼠标当前选择情况确定不同的光标类型 + virtual Qt::CursorShape getCursorBy(const int& nOption, \ + const int& nSubIndex); + +}; diff --git a/Include/nmNum/nmPlot/nmObjPolygon.h b/Include/nmNum/nmPlot/nmObjPolygon.h new file mode 100644 index 0000000..7986f8b --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjPolygon.h @@ -0,0 +1,75 @@ +#pragma once + +#include "nmObjBase.h" +#include "nmDefines.h" +#include "nmPlot_global.h" + +// 数值试井绘图对象(多边形) +class NM_PLOT_EXPORT nmObjPolygon : public nmObjBase +{ + Q_OBJECT + ZX_DECLARE_DYNAMIC + +public: + + nmObjPolygon(); + nmObjPolygon(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY); + ~nmObjPolygon(); + + // 设置初始参数 + virtual void init(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY); + // 设置Tools + virtual void initTools(); + +protected: + + // 设置图元对象的属性标志 + virtual void initFlags(); + +public: + + // 击中 + virtual bool hitTest(const QPointF& pt); + + // 具体击中实现的函数,单纯击中,不做选项的改变 + // nOption用int是因为Rect类的击中选项不一致 + // nOption为负值,表示未击中,此时返回false + virtual bool _runHitTest(const QPointF& pt, \ + int& nOption, int& nSubIndex); + + // 击中后,ButtonUp后的处理 + // pt1:鼠标Down点,pt2:鼠标Up点 + virtual bool runMove(const QPointF& pt1, const QPointF& pt2); + +public: + + // 属性填充内容 + virtual void fillPtyPano(IxPtyPano* sheet); + + // 成果序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + + // 模版处理(从道理上讲,模版处理与成果序列化机制完全一致) + // 但此处放开是为了调用方更灵活的控制 + virtual void onLoadTempl(ZxSerializer* ser); + virtual void onSaveTempl(ZxSerializer* ser); + + virtual void paintBack(QPainter* painter, \ + const ZxPaintParam& param); + +public: + + // 填充背景颜色 + QColor getBackgrdColor() const; + void setBackgrdColor(QColor color); + +public: + + QColor m_clrBackgrd;//填充颜色 + +}; diff --git a/Include/nmNum/nmPlot/nmObjPolygonTool.h b/Include/nmNum/nmPlot/nmObjPolygonTool.h new file mode 100644 index 0000000..f693d63 --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjPolygonTool.h @@ -0,0 +1,49 @@ +#pragma once + +#include "nmObjToolBase.h" + +// 数值试井绘图对象之工具(多边形) +class NM_PLOT_EXPORT nmObjPolygonTool : public nmObjToolBase +{ + Q_OBJECT + +public: + + nmObjPolygonTool(); + +public: + + // 鼠标各种响应 + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onLeftDoubleClick(const QPointF& pt); + + // 绘制 + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +private: + + // 绑定数据对象情况下绘制(真实) + void paintTrackingRealObj(QPainter* painter, const ZxPaintParam& param); + + // 尚未绑定数据对象情况下绘制(虚拟) + void paintTrackingVirtualObj(QPainter* painter, const ZxPaintParam& param); + +protected: + + // 根据鼠标当前选择情况确定不同的光标类型 + virtual Qt::CursorShape getCursorBy(const int& nOption, + const int& nSubIndex); + + +protected: + + // 鼠标点缓存 + QVector m_vecPoints; +}; + + + + diff --git a/Include/nmNum/nmPlot/nmObjToolBase.h b/Include/nmNum/nmPlot/nmObjToolBase.h new file mode 100644 index 0000000..58db52c --- /dev/null +++ b/Include/nmNum/nmPlot/nmObjToolBase.h @@ -0,0 +1,44 @@ +#pragma once + +#include "nmDefines.h" +#include "ZxObjToolBase.h" +#include "nmPlot_global.h" + +// 数值试井绘图对象之工具(基类) +class NM_PLOT_EXPORT nmObjToolBase : public ZxObjToolBase +{ + Q_OBJECT + +public: + + nmObjToolBase(); + +public: + + // 鼠标各种响应 + virtual bool onLeftDown(const QPointF& pt); + virtual bool onLeftUp(const QPointF& pt); + virtual bool onMouseMove(const QPointF& pt); + virtual bool onMouseWheel(const QPointF& pt, int delta); + virtual bool onLeftDoubleClick(const QPointF& pt); + + // 绘制 + virtual void onPaint(QPainter* painter, const ZxPaintParam& param); + +signals: + + // 鼠标交互完成(双击) + void sigPtsFinished(QVector& vec); + +public: + + NM_Obj_Type getNOT(); + +protected: + + NM_Obj_Type m_oNot; //内部类型标识,不涉及序列化 +}; + + + + diff --git a/Include/nmNum/nmPlot/nmPlot_global.h b/Include/nmNum/nmPlot/nmPlot_global.h new file mode 100644 index 0000000..acbd28b --- /dev/null +++ b/Include/nmNum/nmPlot/nmPlot_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(NM_PLOT_LIBRARY) +# define NM_PLOT_EXPORT Q_DECL_EXPORT +#else +# define NM_PLOT_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/nmNum/nmSubWnd/nmSubWndDemo.h b/Include/nmNum/nmSubWnd/nmSubWndDemo.h new file mode 100644 index 0000000..3cbb192 --- /dev/null +++ b/Include/nmNum/nmSubWnd/nmSubWndDemo.h @@ -0,0 +1,135 @@ +#pragma once + +#include "iSubWndBaseAF.h" +#include "nmSubWnd_global.h" + +class ZxObjBase; +class ZxObjCurve; +class ZxDataObject; +class nmGuiPlot; +class ZxTableView; +class iDockBaseWx; +class nmWxParaProperty; + +class NM_SUB_WND_EXPORT nmSubWndDemo : public iSubWndBaseAF +{ + Q_OBJECT + +public: + + explicit nmSubWndDemo(QWidget *parent = 0, QString sExt = ""); + ~nmSubWndDemo(); + + // 配置窗体 + virtual void configWnd(); + + // 初始化UI + virtual void initUI(); + virtual QWidget* initUiMainWx(); + virtual void initUiDockWxs(); + virtual void initUiDockPtys(); + +#ifdef QT_DEBUG + // 示例:演示增加Dock并且追加至程序主窗口 + void initUiTop(); +#endif + + // 窗体初始后允许数据加载及刷新 + virtual void firstLoadAndUpdate(); + + // 窗体创建完毕之后的尾处理 + virtual void finalDeals(); + + // 当前窗体激活时被调用 + virtual void onActivated(); + +#ifdef QT_DEBUG + + // 更新左右Dock数据 + void updateDockWxs(); + + // 更新图形 + void updatePlots(); + + /// @brief 从当前井获取压力数据 + /// @param sType 具体类型,比如压力、流量、温度等 + /// @param sCode 指定Code,如果不指定,则返回满足条件的第一条 + ZxDataObject* getDataObjOf(QString sType, QString sCode = ""); + + // 把曲线数据刷新至表格 + void updateTableByCurve(ZxObjCurve* pObjCurve, ZxTableView* pTableView); + +#endif + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + virtual void onDeserialized(); + + // 成果保存加载 + virtual bool loadRss(); + virtual bool saveRss(); + + // 窗体关闭之前的确认 + virtual bool onConfirmClosing(); + +protected: + + // 绑定图形信号 + virtual void bindChartSignals(iGuiPlot* pWxPlot); + + // 重新调整工具栏 + virtual void reAdjustToolbar(QToolBar*); + +public: + + // 执行命令:通常来自图形右侧/左侧的工具栏 + virtual bool runActionOf(QString sAction); + + // 执行命令:通常来自Ribbon + virtual bool runCmdBy(QString sName, QString sID); + + /// @brief 命令是否Enabled的状态判断,通常来自Ribbon + /// @param b (out),true:Enabled false:disabled + /// @param sName (in),Cmd Name + /// @param nID (in),Cmd ID + /// @param bLicensed (in),当前是否有授权 + /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) + virtual bool checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed); + +signals: + +public slots: + + // Obj选择状态改变 + void slotObjSelChanged(ZxObjBase*, bool); + + // Obj数据发生了改变 + void slotObjPtsChanged(ZxObjBase*); + + // 当前窗体所有信息的保存,比如关闭时提问的保存 + virtual bool slotSaveAll(); + +private: + + // 绘图相关 + nmGuiPlot* m_pWxPlot; + + iDockBaseWx* m_pWxDockParas; //模型参数 + nmWxParaProperty* m_pWxParas; + + iDockBaseWx* m_pWxDockData1; //表格数据样例1 + ZxTableView* m_pTableView1; + + iDockBaseWx* m_pWxDockData2; //表格数据样例2 + ZxTableView* m_pTableView2; + +#ifdef QT_DEBUG + // 示例:演示增加Dock并且追加至程序主窗口 + iDockBaseWx* m_pWxDockTemp; + QListWidget* m_pListWxTemp; +#endif + +}; diff --git a/Include/nmNum/nmSubWnd/nmSubWndUtils.h b/Include/nmNum/nmSubWnd/nmSubWndUtils.h new file mode 100644 index 0000000..eb3e535 --- /dev/null +++ b/Include/nmNum/nmSubWnd/nmSubWndUtils.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include "nmSubWnd_global.h" + +class iRibbonXmlCmd; +class iSubWnd; + +// 本来主要是为数值部分提供SubWnd初始化构造的方法 +class NM_SUB_WND_EXPORT nmSubWndUtils : public QObject +{ + Q_OBJECT + +public: + + /// @brief 构造窗体,根据RibbonXmlCmd + /// @note 权宜之计:此处构造的窗体,无需额外删除(析构),系统会统一处理 + static iSubWnd* createSubWnd(iRibbonXmlCmd* pCmdInfo); + + /// @brief 构造窗体,根据sID和sExt + /// @note sID和sExt也是来自于RibbonXmlCmd + /// @note 权宜之计:此处构造的窗体,无需额外删除(析构),系统会统一处理 + static iSubWnd* createSubWnd(QString sID, QString sExt); +}; diff --git a/Include/nmNum/nmSubWnd/nmSubWnd_global.h b/Include/nmNum/nmSubWnd/nmSubWnd_global.h new file mode 100644 index 0000000..d044c3a --- /dev/null +++ b/Include/nmNum/nmSubWnd/nmSubWnd_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(NM_SUB_WND_LIBRARY) +# define NM_SUB_WND_EXPORT Q_DECL_EXPORT +#else +# define NM_SUB_WND_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/nmNum/nmSubWxs/nmSubWxs_global.h b/Include/nmNum/nmSubWxs/nmSubWxs_global.h new file mode 100644 index 0000000..91307bc --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmSubWxs_global.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#if defined(NM_SUB_WXS_LIBRARY) +# define NM_SUB_WXS_EXPORT Q_DECL_EXPORT +#else +# define NM_SUB_WXS_EXPORT Q_DECL_IMPORT +#endif + + + diff --git a/Include/nmNum/nmSubWxs/nmWxParaProperty.h b/Include/nmNum/nmSubWxs/nmWxParaProperty.h new file mode 100644 index 0000000..f2050e0 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmWxParaProperty.h @@ -0,0 +1,71 @@ +#pragma once + +#include "iDlgBase.h" +#include "nmSubWxs_global.h" + +class iGridRowUtils; + +// 参数输入/编辑属性对话框窗体 +class NM_SUB_WXS_EXPORT nmWxParaProperty : public iDlgBase +{ + Q_OBJECT + +public: + + explicit nmWxParaProperty(QWidget *parent = 0); + ~nmWxParaProperty(); + + // 初始化 + virtual void initUI(); + void initUI_HelpBox(); + + /// @brief 刷新参数属性载体的入口 + /// @param listParas (in) 参数列表,可以是英文也可以是中文 + /// @param bReserveOlds (in) 是否保留原来,比如原先属性页已经有s和k,这时候新的列表里面也包括s和k + /// @note 参数列表必须是在系统中配置的参数,listParas已经包括了显示顺序 + /// 但对于层级,由系统配置来决定,具体咨询wzg + virtual void refreshUIs(QStringList& listParas, bool bReserveOlds = true); + + // 允许备份/恢复原有的参数内容 + virtual void backupOldParas(QMap& map, \ + QStringList& listParas); + virtual void restoreOldParas(QMap& map); + + // 从各个Wx(m_vecWxDatas)中遍历查找 + virtual bool setParaValue(QString sPara, QVariant o); + virtual bool getParaValue(QString sPara, QVariant& o); + + // 返回所有参数,Key为英文ID + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + virtual bool getAllParaUnits(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true); + + // 序列化 + virtual void onSerialize(ZxSerializer* ser); + virtual void onDeserialize(ZxSerializer* ser); + +public slots: + + // help msg + virtual void slotHelpMsg(QString& s); + +protected: + + virtual void paintEvent(QPaintEvent *); + +protected: + + // 布局器 + QVBoxLayout* m_pMainLayout; + + // 属性参数列表及载体 + QStringList m_listParas; + iGridRowUtils* m_pGridItemUtils; + + // Help + QTextEdit* m_pHelpBox; +}; diff --git a/Include/nmNum/nmXml/nmXmlData.h b/Include/nmNum/nmXml/nmXmlData.h new file mode 100644 index 0000000..febf8de --- /dev/null +++ b/Include/nmNum/nmXml/nmXmlData.h @@ -0,0 +1,45 @@ +#pragma once + +#include "Defines.h" +#include "iXmlItemBase.h" + +#include "nmXml_global.h" + +// xml节点对应的数据对象 +class NM_XML_EXPORT nmXmlData : public iXmlItemBase +{ +public: + + nmXmlData(); + ~nmXmlData(); + + // 示例:把xml某属性转为枚举 + enum nmUseMode + { + NUM_Common = 0, //枚举1 + NUM_Advanced, //枚举2 + NUM_Others, //其他 + NUM_Unknown + }; + + // 解析xml节点到List + virtual void parseInfo(const QDomElement& e); + + // 把List分配到成员变量 + // 输入开始的m_listValues中index,并且返回下一个index + virtual int allocateInfo(int nIndex); + +protected: + + // 初始设置节点信息 + virtual void initXmlTags(); + +public: + //QString m_sName; //名称,父类已经提供 + //QString m_sAlias; //别名,父类已经提供 + + QString m_sTag; // 示例:把xml某属性转为QString + QStringList m_listParas;// 示例:把xml某属性转为QStringList + nmUseMode m_oNum; // 示例:把xml某属性转为枚举 +}; +typedef QVector vecNmXmlDatas; diff --git a/Include/nmNum/nmXml/nmXmlHelper.h b/Include/nmNum/nmXml/nmXmlHelper.h new file mode 100644 index 0000000..84a10e9 --- /dev/null +++ b/Include/nmNum/nmXml/nmXmlHelper.h @@ -0,0 +1,41 @@ +#pragma once + +#include "nmXmlData.h" + +// 本类的目的通过单例实现对XML文件解析之后的存储 +class NM_XML_EXPORT nmXmlHelper +{ +public: + + // 获取对象,单例模式 + static nmXmlHelper* getInstance(); + + // 加载文件 + // 如果文件为空,则自动指定 + bool loadXmlDefines(QString sFile = ""); + + // 返回结果 + vecNmXmlDatas* getVecNmXmlDataPtrs(); + + // 关闭消耗 + static void release(); + + QString getLastError(); + +private: + + nmXmlHelper(); + ~nmXmlHelper(); + +private: + +private: + + static nmXmlHelper* _helper; + + vecNmXmlDatas m_vecNmXmlDatas; + + QString m_sError; +}; + +#define _nmXmlHelper nmXmlHelper::getInstance() diff --git a/Include/nmNum/nmXml/nmXmlUtils.h b/Include/nmNum/nmXml/nmXmlUtils.h new file mode 100644 index 0000000..a657055 --- /dev/null +++ b/Include/nmNum/nmXml/nmXmlUtils.h @@ -0,0 +1,17 @@ +#pragma once + +#include "nmXmlData.h" +#include "iXmlUtilBase.h" + +// xml文件解析接口类对应的数据对象 +class NM_XML_EXPORT nmXmlUtils : public iXmlUtilBase +{ +public: + + /// @brief 解析xml文件并且存入缓存 + /// @param (in&out) pVecNmXmlDatas 数据存储载体 + /// @param (in) sFile 文件,通常是全路径(后缀可以是xml也可以是dat) + /// @note 对于加密模式,软件会自动查找对应的dat模式 + static bool loadNmXmlDatas(vecNmXmlDatas* pVecNmXmlDatas, \ + QString sFile); +}; diff --git a/Include/nmNum/nmXml/nmXml_global.h b/Include/nmNum/nmXml/nmXml_global.h new file mode 100644 index 0000000..965dcec --- /dev/null +++ b/Include/nmNum/nmXml/nmXml_global.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#if defined(NM_XML_LIBRARY) +# define NM_XML_EXPORT Q_DECL_EXPORT +#else +# define NM_XML_EXPORT Q_DECL_IMPORT +#endif diff --git a/Src/nmNum/nmData/nmDataDemo.cpp b/Src/nmNum/nmData/nmDataDemo.cpp new file mode 100644 index 0000000..34d772d --- /dev/null +++ b/Src/nmNum/nmData/nmDataDemo.cpp @@ -0,0 +1,138 @@ +#include "ZxSerializer.h" +#include "nmDataDemo.h" + +ZX_DEFINE_DYNAMIC(DataDemo, nmDataDemo) + +nmDataDemo::nmDataDemo() : ZxDataObjectDbl(0) +{ + //m_sID = ""; + m_sWellCode = ""; + //m_sName = ""; + + m_dTopDepth = 0.00; + m_dBottomDepth = 0.00; + + m_sRemark = ""; + m_sCth = "ndd"; + + checkXmlTable(); +} + +nmDataDemo::nmDataDemo(const nmDataDemo &other) + : ZxDataObjectDbl(other) +{ + if (this == &other) + { + return; + } + checkXmlTable(); + //m_sID = other.m_sID; + m_sWellCode = other.m_sWellCode; + //m_sName = other.m_sName; + m_dTopDepth = other.m_dTopDepth; + m_dBottomDepth = other.m_dBottomDepth; +} + +nmDataDemo::~nmDataDemo() +{ +} + +nmDataDemo &nmDataDemo::operator = (const nmDataDemo &other) +{ + //m_sID = other.m_sID; + m_sWellCode = other.m_sWellCode; + //m_sName = other.m_sName; + m_dTopDepth = other.m_dTopDepth; + m_dBottomDepth = other.m_dBottomDepth; + + return *this; +} + +ZxDataObject* nmDataDemo::clone() +{ + ensureLoaded(); + + return (new nmDataDemo(*this)); +} + +QString nmDataDemo::type() const +{ + return iDataModelType::sTypeNumDataDemo; +} + +void nmDataDemo::setWellCode(const QString& s) +{ + m_sWellCode = s; +} +QString nmDataDemo::getWellCode()const +{ + ensureLoaded(); + return m_sWellCode; +} + +void nmDataDemo::setTopDepth(const double& d) +{ + m_dTopDepth = d; +} +double nmDataDemo::getTopDepth()const +{ + ensureLoaded(); + return m_dTopDepth; +} + +void nmDataDemo::setBottomDepth(const double& d) +{ + m_dBottomDepth = d; +} +double nmDataDemo::getBottomDepth()const +{ + ensureLoaded(); + return m_dBottomDepth; +} + +bool nmDataDemo::_parseData(VecVariant vec, int& n) +{ + m_sCode = vec.at(n++).toString(); + m_sWellCode = vec.at(n++).toString(); + m_sName = vec.at(n++).toString(); + m_dTopDepth = vec.at(n++).toDouble(); + m_dBottomDepth = vec.at(n++).toDouble(); + + return ZxDataObjectDbl::_parseData(vec, n); +} + +bool nmDataDemo::_sumUpData(VecVariant& vec) +{ + ensureLoaded(); + + vec.append(m_sCode); + vec.append(m_sWellCode); + vec.append(m_sName); + vec.append(m_dTopDepth); + vec.append(m_dBottomDepth); + + return ZxDataObjectDbl::_sumUpData(vec); +} + +void nmDataDemo::onSerialize(ZxSerializer* ser) +{ + ZxDataObjectDbl::onSerialize(ser); + + ser->write("WellCode", m_sWellCode); + ser->write("TopDepth", m_dTopDepth); + ser->write("BottomDepth", m_dBottomDepth); +} + +void nmDataDemo::onDeserialize(ZxSerializer* ser) +{ + ZxDataObjectDbl::onDeserialize(ser); + + ser->read("WellCode", m_sWellCode); + ser->read("TopDepth", m_dTopDepth); + ser->read("BottomDepth", m_dBottomDepth); +} + +QIcon nmDataDemo::getIcon(bool expanded) const +{ + return zxLoadIcon("DataDemo"); +} diff --git a/Src/nmNum/nmData/nmDataUtils.cpp b/Src/nmNum/nmData/nmDataUtils.cpp new file mode 100644 index 0000000..61a7604 --- /dev/null +++ b/Src/nmNum/nmData/nmDataUtils.cpp @@ -0,0 +1,83 @@ +#include "zxLogInstance.h" + +#include "ZxDataProject.h" +#include "ZxDataWell.h" +#include "nmDataDemo.h" +#include "nmDataUtils.h" + +nmDataUtils::nmDataUtils() +{ +} + +nmDataUtils::~nmDataUtils() +{ +} + +bool nmDataUtils::extendChildrenOfProj(ZxDataProject* pDataProj) +{ + Q_ASSERT (NULL != pDataProj); + + /* 如下代码只是参照,请根据具体需求咨询框架负责人员后进行处理 + + pDataObj->clearChildren(iDataModelType::sTypePvtInfo); + + // load Job PVTs + QString sSql = "Select PvtID, PvtName, JobID from V_PVT_INFO"; + sSql += QString(" order by PvtID"); + VVecVariant vvec; + QString sLog = ""; + if (_load(sSql, vvec, sLog, false, true)) + { + for (int i = 0; i < vvec.count(); i++) + { + ZxDataPvtInfo* p = new ZxDataPvtInfo(); + Q_ASSERT (NULL != p); + p->setCode(vvec.at(i).at(0).toString()); + p->setName(vvec.at(i).at(1).toString()); + p->setJobID(vvec.at(i).at(2).toString()); + p->createChildren(); + appendChild(p); + p->setLoaded(false); + } + } + else if (!sLog.isEmpty()) + { + zxLogRunW(QObject::tr("Failed to load PVTInfo with \r\n '%1'").arg(sLog)); + return false; + }//*/ + + return true; +} + +bool nmDataUtils::extendChildrenOfWell(ZxDataWell* pDataWell) +{ + Q_ASSERT (NULL != pDataWell); + + // 此处仅仅以获取样表举例 Alias="n数值样例数据表" Name="N_DATA_DEMO" + QString sWellCode = pDataWell->getCode(); + QString sSql = "Select distinct ID from N_DATA_DEMO"; + sSql += QString(" where WellCode = '%1'").arg(sWellCode); + sSql += QString(" order by ID"); + VVecVariant vvec; + QString sLog = ""; + if (pDataWell->loadData(sSql, vvec, sLog, false)) + { + for (int i = 0; i < vvec.count(); i++) + { + nmDataDemo* p = new nmDataDemo(); + Q_ASSERT (NULL != p); + p->setCode(vvec.at(i).at(0).toString()); + p->setWellCode(sWellCode); + pDataWell->appendChild(p); + } + } + else if (!sLog.isEmpty()) + { + zxLogRunW(QObject::tr("Failed to load nmDataDemo with \r\n '%1'").arg(sLog)); + return false; + } + + return true; +} + + diff --git a/Src/nmNum/nmPlot/nmGuiPlot.cpp b/Src/nmNum/nmPlot/nmGuiPlot.cpp new file mode 100644 index 0000000..0939ab6 --- /dev/null +++ b/Src/nmNum/nmPlot/nmGuiPlot.cpp @@ -0,0 +1,253 @@ +#include "ZxBaseUtil.h" +#include "zxLogInstance.h" + +#include "ZxSubAxisX.h" +#include "ZxSubAxisY.h" +#include "ZxSubTitle.h" + +#include "ZxPlot.h" +#include "ZxObjCurve.h" +#include "tCurvePlotScene.h" +#include "tCurvePlotView.h" + +#include "nmObjPoint.h" +#include "nmObjLine.h" +#include "nmObjPolygon.h" + +#include "nmGuiPlotCmdHelper.h" +#include "nmGuiPlot.h" + +nmGuiPlot::nmGuiPlot(bool bUseBtns, QWidget *parent) : + iGuiPlot(bUseBtns, parent) +{ + m_bUseBtns = bUseBtns; + + if (NULL != m_pCmdHelper) + { + delete m_pCmdHelper; + m_pCmdHelper = NULL; + } + m_pCmdHelper = new nmGuiPlotCmdHelper(this); + Q_ASSERT (NULL != m_pCmdHelper); + + m_sChartCmdType = "NmDemo2DType"; + + setWindowTitle(tr("nmGuiPlot")); +} + +nmGuiPlot::~nmGuiPlot() +{ +} + +void nmGuiPlot::initUI(QString sTitle, + QSize szDefault /*= QSize(265, 203)*/) +{ + iGuiPlot::initUI(sTitle, szDefault); +} + +void nmGuiPlot::initSheets() +{ + // iGuiPlot::initSheets(); +} + +void nmGuiPlot::initMainLayout() +{ + iGuiPlot::initMainLayout(); +} + +QWidget* nmGuiPlot::initChartLayout(QString sTitle, QSize szDefault) +{ + return iGuiPlot::initChartLayout(sTitle, szDefault); +} + +void nmGuiPlot::runUpdate() +{ + // iGuiPlot::updatePlots(); + if (NULL != m_pPlot) + { + } +} + +bool nmGuiPlot::runAction(QString sAction) +{ + Q_ASSERT (NULL != m_pCmdHelper); + return m_pCmdHelper->runAction(sAction); +} + +nmObjBase* nmGuiPlot::appendOneObj(NM_Obj_Type o, QString& sName, QVector& vec) +{ + nmObjBase* pObj = _createOneObj(o, sName); + if (NULL == pObj) + { + return NULL; + } + pObj->setAllPos(vec); + pObj->select(true); + pObj->dealSelChanged(true); // + pObj->update(); + + // emit sigObjCompleted(p); + setModified(true); + + return pObj; +} + +nmObjBase* nmGuiPlot::_createOneObj(NM_Obj_Type o, QString& sName) +{ + Q_ASSERT (NULL != m_pPlot); + + // 确保名称不重复 + QStringList listOlds; + for (int i = 0; i < m_pPlot->getObjCount(); i++) + { + listOlds << m_pPlot->getObjByIndex(i)->getName(); + } + sName = ZxBaseUtil::getNextOneName(listOlds, sName); + + // 创建,此处代码为了简洁,作了非规范性书写 + nmObjBase* pObj = NULL; + if (o == NOT_Point) pObj = new nmObjPoint(sName, NULL, NULL); + else if (o == NOT_Line) pObj = new nmObjLine(sName, NULL, NULL); + else if (o == NOT_Polygon) pObj = new nmObjPolygon(sName, NULL, NULL); + else { zxLogRunW(tr("Type '%1' not supported.").arg((int)o)); return NULL; } + Q_ASSERT (NULL != pObj); + + bindObjSignals(pObj); + + m_pPlot->addOneObj(pObj); + + return pObj; +} + +void nmGuiPlot::bindObjSignals(ZxObjBase* pObj) +{ + Q_ASSERT (NULL != pObj); + + disconnect(pObj, SIGNAL(sigObjSelectionChanged(bool)), \ + this, SLOT(slotObjSelChanged(bool))); + disconnect(pObj, SIGNAL(sigPtsChanged()), \ + this, SLOT(slotObjPtsChanged())); + connect(pObj, SIGNAL(sigObjSelectionChanged(bool)), \ + this, SLOT(slotObjSelChanged(bool))); + connect(pObj, SIGNAL(sigPtsChanged()), \ + this, SLOT(slotObjPtsChanged())); + +} + +// Obj选择状态改变 +void nmGuiPlot::slotObjSelChanged(bool b) +{ + ZxObjBase* p = dynamic_cast(sender()); + if (NULL != p) + { + emit sigObjSelChanged(p, b); + } +} + +// Obj数据发生了改变 +void nmGuiPlot::slotObjPtsChanged() +{ + ZxObjBase* p = dynamic_cast(sender()); + if (NULL != p) + { + emit sigObjPtsChanged(p); + } +} + +void nmGuiPlot::onSerialize(ZxSerializer* ser) +{ + iGuiPlot::onSerialize(ser); +} + +void nmGuiPlot::onDeserialize(ZxSerializer* ser) +{ + iGuiPlot::onDeserialize(ser); +} + +void nmGuiPlot::resetAfterDeserialized() +{ + iGuiPlot::resetAfterDeserialized(); + + if (NULL == m_pPlot) + { + return; + } + + connectSignals(); + slotChangeSizeWithChangedXY(); + setModified(false); + + for (int i = 0; i < m_pPlot->getObjCount(); i++) + { + nmObjBase* pObj = (nmObjBase*)m_pPlot->getObjByIndex(i); + if (NULL != pObj) + { + // 建立信号 + bindObjSignals(pObj); + } + } +} + +void nmGuiPlot::paintEvent(QPaintEvent* e) +{ + iGuiPlot::paintEvent(e); +} + +#ifdef QT_DEBUG + +ZxObjBase* nmGuiPlot::updatePlotObjBy(QString sName, \ + VecFloat& vecX, VecFloat& vecY, \ + bool bPressureLike /*= true*/, \ + bool bUseY2 /*= false*/, \ + bool bClearAll /*= false*/) +{ + if (vecX.count() < 2 || vecX.count() != vecY.count()) + { + return NULL; + } + + ZxPlot* pPlot = m_pPlot; + Q_ASSERT (NULL != pPlot); + + // 移除先前图上已经有的曲线 + int n = pPlot->getObjCount(); + for (int i = n - 1; i >= 0; i--) + { + ZxObjBase* pObj = pPlot->getObjByIndex(i); + if (NULL == pObj) + { + continue; + } + + if (bClearAll) + { + pPlot->removeObjByIndex(i); + } + else if (_isSame(sName, pObj->getName())) + { + pPlot->removeObjByIndex(i); + break; + } + } + + ZxObjCurve* pObj = NULL; + if (bPressureLike) + { + pObj = appendSeriesP(vecX, vecY, sName, bUseY2); + } + else + { + pObj = appendSeriesF(vecX, vecY, sName, bUseY2); + } + + if (NULL != pObj) + { + setPenAndDot(pObj, !bPressureLike); + + bindObjSignals(pObj); + } + + return pObj; +} + +#endif diff --git a/Src/nmNum/nmPlot/nmGuiPlotCmdHelper.cpp b/Src/nmNum/nmPlot/nmGuiPlotCmdHelper.cpp new file mode 100644 index 0000000..95478cd --- /dev/null +++ b/Src/nmNum/nmPlot/nmGuiPlotCmdHelper.cpp @@ -0,0 +1,84 @@ +#include "ZxBaseUtil.h" +#include "zxLogInstance.h" + +#include "ZxPlot.h" +#include "iGuiPlot.h" + +#include "nmObjPointTool.h" +#include "nmObjLineTool.h" +#include "nmObjPolygonTool.h" + +#include "nmGuiPlot.h" +#include "nmGuiPlotCmdHelper.h" + +nmGuiPlotCmdHelper::nmGuiPlotCmdHelper(iGuiPlot* p) + : iGuiPlotCmdHelper(p) +{ +} + +nmGuiPlotCmdHelper::~nmGuiPlotCmdHelper() +{ +} + +bool nmGuiPlotCmdHelper::runAction(QString sAction) +{ + Q_ASSERT (NULL != m_pGuiPlot); + ZxPlot* pPlot = m_pGuiPlot->m_pPlot; + Q_ASSERT (NULL != pPlot); + + // 鼠标交互,插入数值试井绘图对象 的例子:点、线、多边形 + if (_isSame(sAction, "nmInsertObjPoint")) + { + nmObjToolBase* pObjTool = new nmObjPointTool(); + Q_ASSERT (NULL != pObjTool); + pPlot->appendTools(pObjTool); + connect(pObjTool, SIGNAL(sigPtsFinished(QVector&)), \ + this, SLOT(slotObjPtsFinished(QVector&))); + return true; + } + else if (_isSame(sAction, "nmInsertObjLine")) + { + nmObjToolBase* pObjTool = new nmObjLineTool(); + Q_ASSERT (NULL != pObjTool); + pPlot->appendTools(pObjTool); + connect(pObjTool, SIGNAL(sigPtsFinished(QVector&)), \ + this, SLOT(slotObjPtsFinished(QVector&))); + return true; + } + else if (_isSame(sAction, "nmInsertObjPolygon")) + { + nmObjToolBase* pObjTool = new nmObjPolygonTool(); + Q_ASSERT (NULL != pObjTool); + pPlot->appendTools(pObjTool); + connect(pObjTool, SIGNAL(sigPtsFinished(QVector&)), \ + this, SLOT(slotObjPtsFinished(QVector&))); + return true; + } + else + { + // 其它Action + } + + return iGuiPlotCmdHelper::runAction(sAction); +} + +void nmGuiPlotCmdHelper::slotObjPtsFinished(QVector& vec) +{ + nmObjToolBase* pTool = dynamic_cast(sender()); + if (NULL == pTool) + { + return; + } + nmGuiPlot* pWxPlot = dynamic_cast(m_pGuiPlot); + if (NULL == pWxPlot) + { + return; + } + + ZxPlot* pPlot = pWxPlot->m_pPlot; + Q_ASSERT (NULL != pPlot); + pPlot->removeTools(pTool); //移除Tool + + QString sName = tr("nmObj"); + pWxPlot->appendOneObj(pTool->getNOT(), sName, vec); +} diff --git a/Src/nmNum/nmPlot/nmObjBase.cpp b/Src/nmNum/nmPlot/nmObjBase.cpp new file mode 100644 index 0000000..e97ac9c --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjBase.cpp @@ -0,0 +1,24 @@ +#include + +#include "nmObjBase.h" + +ZX_DEFINE_DYNAMIC(nObjBase, nmObjBase) + +nmObjBase::nmObjBase() +{ +} + +nmObjBase::nmObjBase(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY) +{ +} + +nmObjBase::~nmObjBase() +{ +} + +void nmObjBase::paintBack(QPainter* painter, const ZxPaintParam& param) +{ + ZxObjBase::paintBack(painter, param); +} diff --git a/Src/nmNum/nmPlot/nmObjLine.cpp b/Src/nmNum/nmPlot/nmObjLine.cpp new file mode 100644 index 0000000..44f2979 --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjLine.cpp @@ -0,0 +1,301 @@ +#include + +#include +#include "IxPtyPano.h" +#include "ZxBaseUtil.h" +#include "ZxSubAxisX.h" +#include "ZxSubAxisY.h" + +#include "nmObjLineTool.h" +#include "ZxPlot.h" +#include "ZxObjText.h" + +#include "nmObjLine.h" + +ZX_DEFINE_DYNAMIC(nObjLine, nmObjLine) + +nmObjLine::nmObjLine() +{ + m_sObjTag = "nObjLine"; + nmObjLine("", NULL, NULL); +} + +nmObjLine::nmObjLine(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY) + : nmObjPoint(sName, pAxisX, pAxisY) +{ + m_sObjTag = "nObjLine"; + + initFlags(); + + m_oDot = ZxDot(DTS_Circle, QColor(0, 255, 0), 0.5f, true); + m_oPen = QPen(QBrush(QColor(0, 255, 164)), \ + 0.5f, Qt::SolidLine); + m_vecPoints.clear(); + m_vecPoints << QPointF(0.f, 0.f) << QPointF(0.f, 0.f); + + loadTempl(); +} + +nmObjLine::~nmObjLine() +{ +} + +void nmObjLine::initTools() +{ + m_pTool = new nmObjLineTool(); + ZxObjBase::initTools(); +} + +void nmObjLine::initSubObjs() +{ + nmObjPoint::initSubObjs(); + setPointTag(tr("Line")); +} + +bool nmObjLine::_runHitTest(const QPointF& pt, int& nOption, int& nSubIndex) +{ + if (!ZxObjBase::_runHitTest(pt, nOption, nSubIndex)) + { + return false; + } + + nOption = -1; + nSubIndex = 0; + + float fDis = (2 + m_oPen.widthF() / 2); + QPointF ptStart = getPosOf(m_vecPoints[0]); + QRectF rtStart(ptStart.x() - fDis, + ptStart.y() - fDis, + 2 * fDis, + 2 * fDis); + QPointF ptEnd = getPosOf(m_vecPoints[1]); + QRectF rtEnd(ptEnd.x() - fDis, + ptEnd.y() - fDis, + 2 * fDis, + 2 * fDis); + + if (rtStart.contains(pt)) + { + nOption = (int)OHO_Point; + nSubIndex = 0; + return true; + } + else if (rtEnd.contains(pt)) + { + nOption = (int)OHO_Point; + nSubIndex = 1; + return true; + } + else if (_isNearLine(pt, ptStart, ptEnd, 1.f * 3)) + { + nOption = (int)OHO_Bound; + nSubIndex = 0; + return true; + } + + nOption = (int)OHO_None; + nSubIndex = -1; + + return false; +} + +bool nmObjLine::hitTest(const QPointF& pt) +{ + if (!ZxObjBase::hitTest(pt)) + { + return false; + } + + return true; +} + +bool nmObjLine::runMove(const QPointF& pt1, + const QPointF& pt2) +{ + if (isLockPos()) + { + return false; + } + + if (m_oHitOption != OHO_Bound && m_oHitOption != OHO_Point) + { + m_oHitOption = OHO_None; + m_nHitIndex = -1; + return false; + } + + QPointF ptStart = getPosOf(m_vecPoints[0]); + QPointF ptEnd = getPosOf(m_vecPoints[1]); + ptStart = offsetPoint(ptStart, pt1, pt2); + ptEnd = offsetPoint(ptEnd, pt1, pt2); + + QVector vec = getAllPos(); + if (m_oHitOption == OHO_Point && m_nHitIndex == 0) + { + vec[0] = ptStart; + } + else if (m_oHitOption == OHO_Point && m_nHitIndex == 1) + { + vec[1] = ptEnd; + } + else if (m_oHitOption == OHO_Bound) + { + vec[0] = ptStart; + vec[1] = ptEnd; + m_fOffsetX = pt2.x() - pt1.x(); + m_fOffsetY = pt2.y() - pt1.y(); + } + else + { + return false; + } + + return moveToPos(vec); +} + +void nmObjLine::paintBack(QPainter* painter, const ZxPaintParam& param) +{ + Q_ASSERT (m_vecPoints.count() >= 2); + + QPointF pt1 = getPosOf(m_vecPoints[0]); + QPointF pt2 = getPosOf(m_vecPoints[1]); + QLineF oLine = QLineF(pt1, pt2); + + if (!drawLine(painter, oLine)) + { + return; + } + drawSelStates(painter, oLine); + + QPointF pt = oLine.pointAt(0.5f); + drawWellPos(painter, pt); +} + +bool nmObjLine::drawLine(QPainter* painter, QLineF& oLine) +{ + Q_ASSERT (NULL != m_pAxisX); + Q_ASSERT (NULL != m_pAxisY); + if (m_pAxisX->getRangeMin() == m_pAxisX->getRangeMax() || \ + m_pAxisY->getRangeMin() == m_pAxisY->getRangeMax()) + { + return false; + } + + painter->save(); + + QRectF rt = getOuterRect(); + painter->setClipRect(rt); + + QPen pen = m_oPen; + painter->setPen(pen); + painter->drawLine(oLine); + + painter->restore(); + + return true; +} + +bool nmObjLine::drawSelStates(QPainter* painter, + QLineF& oLine) +{ + if (!isSelected()) + { + return true; + } + + Q_ASSERT (NULL != m_pAxisX); + Q_ASSERT (NULL != m_pAxisY); + if (m_pAxisX->getRangeMin() == m_pAxisX->getRangeMax() || \ + m_pAxisY->getRangeMin() == m_pAxisY->getRangeMax()) + { + return false; + } + + painter->save(); + + QRectF rt = getOuterRect(); + painter->setClipRect(rt); + + QPointF pt1 = oLine.p1(); + QPointF pt2 = oLine.p2(); + QVector pts; + pts << pt1 << pt2; + + for (int i = 0; i < pts.count(); i++) + { + float w = 1.2f; + QPointF pt = pts[i]; + QRectF rect(pt.x() - w * 0.5f, pt.y() -w * 0.5f, w, w); + + if (m_nHitIndex == i && m_oHitOption == OHO_Point) + { + QBrush br(Qt::red); + painter->fillRect(rect, br); + } + else + { + painter->setPen(QColor(0, 0, 128)); + painter->drawRect(rect); + } + } + + painter->restore(); + + return true; +} + +bool nmObjLine::drawWellPos(QPainter* painter, QPointF pt) +{ + return nmObjPoint::drawWellPos(painter, pt); +} + +void nmObjLine::onSerialize(ZxSerializer* ser) +{ + nmObjPoint::onSerialize(ser); +} + +void nmObjLine::onDeserialize(ZxSerializer* ser) +{ + nmObjPoint::onDeserialize(ser); +} + +void nmObjLine::onSaveTempl(ZxSerializer* ser) +{ + nmObjPoint::onSaveTempl(ser); +} + +void nmObjLine::onLoadTempl(ZxSerializer* ser) +{ + nmObjPoint::onLoadTempl(ser); +} + +void nmObjLine::fillPtyPano(IxPtyPano* sheet) +{ + nmObjPoint::fillPtyPano(sheet); + + ZX_PROP("WmLine.Pen", getPen, setPen); +} + +QPointF nmObjLine::getCenterPos() +{ + QVector vec = getAllPos(); + Q_ASSERT (vec.count() >= 2); + QLineF oLine = QLineF(vec[0], vec[1]); + return oLine.pointAt(0.5f); +} + +void nmObjLine::resetBounds() +{ + QPointF pt1 = getPosOf(m_vecPoints[0]); + + QRectF rcClient(pt1.x() - (2 + m_oPen.widthF() / 2.0), \ + pt1.y() - (2 + m_oPen.widthF() / 2.0), \ + 4 + m_oPen.widthF(), 4 + m_oPen.widthF()); + setBounds(rcClient); + + m_rtBoundVs = calValueBounds(); + + resetOthers(); +} diff --git a/Src/nmNum/nmPlot/nmObjLineTool.cpp b/Src/nmNum/nmPlot/nmObjLineTool.cpp new file mode 100644 index 0000000..f5b8a21 --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjLineTool.cpp @@ -0,0 +1,165 @@ +#include + +#include "nmObjLine.h" +#include "nmObjLineTool.h" + +nmObjLineTool::nmObjLineTool() : nmObjPointTool() +{ + setText(tr("nObjPointTool")); + m_oNot = NOT_Line; +} + +bool nmObjLineTool::onLeftDown(const QPointF& pt) +{ + if (NULL == m_pObj) + { + m_ptStart = pt; + m_bTracking = true; + return true; + } + + return nmObjPointTool::onLeftDown(pt); +} + +bool nmObjLineTool::onMouseMove(const QPointF& pt) +{ + if (NULL == m_pObj) + { + m_ptMove = pt; + +// Qt::CursorShape o = getCursorBy(0, 0); +// changeCursor(o); + + if (m_bTracking) + { + m_rtTracker = getView()->adjustRectFitViewAspect(getTrackRect()); + updateLastMoveArea(true); + } + + return true; + } + + return nmObjPointTool::onMouseMove(pt); +} + +bool nmObjLineTool::onLeftUp(const QPointF& pt) +{ + if (NULL == m_pObj) + { + getView()->setSnapshotMode(false); + if (m_bTracking) + { + m_bTracking = false; + } + + QVector vec; + vec << m_ptStart << pt; + emit sigPtsFinished(vec); + + return true; + } + return nmObjPointTool::onLeftUp(pt); +} + +bool nmObjLineTool::onMouseWheel(const QPointF& pt, int delta) +{ + return nmObjPointTool::onMouseWheel(pt, delta); +} + +bool nmObjLineTool::onLeftDoubleClick(const QPointF& pt) +{ + return nmObjPointTool::onLeftDoubleClick(pt); +} + +void nmObjLineTool::onPaint(QPainter* painter, const ZxPaintParam& param) +{ + nmObjLine* pObj = dynamic_cast(m_pObj); + if (pObj == NULL) + { + Qt::CursorShape o = Qt::CrossCursor; + if (m_bTracking) + { + painter->save(); + QPen focus(Qt::DashLine); + painter->setPen(focus); + painter->drawLine(m_ptStart, getCurrentPos()); + changeCursor(o); + painter->restore(); + } + else + { + changeCursor(o); + } + } + else + { + if (m_bTracking) + { + painter->save(); + + Qt::CursorShape o = getCursorBy((int)m_oHitOption, pObj->m_nHitIndex); + + QVector vec = pObj->getAllPos(); + if (m_oHitOption == OHO_Point && + pObj->m_nHitIndex == 0) + { + QPen focus(Qt::DashLine); + QPointF endPoint = vec[1]; + painter->drawPoint(endPoint); + painter->drawPoint(getCurrentPos()); + painter->setPen(focus); + painter->drawLine(endPoint,getCurrentPos()); + } + else if (m_oHitOption == OHO_Point && + pObj->m_nHitIndex == 1) + { + QPen focus(Qt::DashLine); + QPointF startPoint = vec[0]; + painter->drawPoint(startPoint); + painter->drawPoint(getCurrentPos()); + painter->setPen(focus); + painter->drawLine(startPoint,getCurrentPos()); + } + else if (m_oHitOption == OHO_Bound) + { + QPen focus(Qt::DashLine); + QPointF pt1 = vec[0]; + QPointF pt2 = vec[1]; + QPointF ptOld = m_ptStart; + QPointF ptNew = getCurrentPos(); + pt1 = pObj->offsetPoint(pt1, ptOld, ptNew); + pt2 = pObj->offsetPoint(pt2, ptOld, ptNew); + painter->drawPoint(pt1); + painter->drawPoint(pt2); + painter->setPen(focus); + painter->drawLine(pt1, pt2); + } + + changeCursor(o); + painter->restore(); + } + } +} + +Qt::CursorShape nmObjLineTool::getCursorBy(const int& nOption, + const int& nSubIndex) +{ + if (nOption < 0) + { + return Qt::ArrowCursor; + } + + ObjHitOption oHitOption = (ObjHitOption)nOption; + if (oHitOption == OHO_Point) + { + return (Qt::CrossCursor); + } + else if (oHitOption == OHO_Bound) + { + return (Qt::SizeAllCursor); + } + + return Qt::ArrowCursor; +} + + diff --git a/Src/nmNum/nmPlot/nmObjPoint.cpp b/Src/nmNum/nmPlot/nmObjPoint.cpp new file mode 100644 index 0000000..3a72dac --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjPoint.cpp @@ -0,0 +1,364 @@ +#include + +#include +#include "IxPtyPano.h" + +#include "ZxSubAxisX.h" +#include "ZxSubAxisY.h" + +#include "ZxPlot.h" +#include "ZxObjText.h" + +#include "nmObjPointTool.h" +#include "nmObjPoint.h" + +ZX_DEFINE_DYNAMIC(nObjPoint, nmObjPoint) + +nmObjPoint::nmObjPoint() +{ + m_sObjTag = "nObjPoint"; + init("", NULL, NULL); +} + +nmObjPoint::nmObjPoint(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY) + : nmObjBase(sName, pAxisX, pAxisY) +{ + m_sObjTag = "nObjPoint"; + init(sName, pAxisX, pAxisY); +} + +void nmObjPoint::init(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY) +{ + nmObjBase::init(sName, pAxisX, pAxisY); + + initFlags(); + + m_oDot = ZxDot(DTS_DownTriangle, QColor(255,0,0,125), 1.f, true); + m_sDesc = ""; + + m_bShowSubObjs = true; + m_oDot = ZxDot(DTS_Circle, QColor(0, 255, 0), 1.5f, true); + m_clrFillUnvalid = QColor(0, 255, 255); + m_clrOuter = QColor(255, 0, 0); + + m_vecPoints << QPointF(0.f, 0.f); + + loadTempl(); +} + +nmObjPoint::~nmObjPoint() +{ +} + +void nmObjPoint::initTools() +{ + m_pTool = new nmObjPointTool(); + nmObjBase::initTools(); +} + +void nmObjPoint::initFlags() +{ + setLockPos(false); + setLockSize(false); + setReadOnly(false); +} + +void nmObjPoint::initSubObjs() +{ + ZxPlot* pPlot = dynamic_cast(this->getParent()); + if (NULL != pPlot) + { + QString sName = ""; + ZxObjBase* p = pPlot->addOneObj(POT_Text, sName, false, \ + m_pAxisX, m_pAxisY); + appendSubObjs(p); + + ZxObjText* pBoundText = dynamic_cast(p); + Q_ASSERT (NULL != pBoundText); + pBoundText->setFrameVisible(false); + QColor clr = QColor(255, 255, 255, 64); + pBoundText->setBackgroundColor(clr); + + pBoundText->setReadOnly(true); + int n = Qt::AlignHCenter | Qt::AlignVCenter; + pBoundText->setAlignFlag(n); + pBoundText->setFont(QFont("Times",8)); + pBoundText->deselect(true); + pBoundText->deselectOthers(); + pBoundText->setText(tr("Point")); + } +} + +bool nmObjPoint::hitTest(const QPointF& pt) +{ + return nmObjBase::hitTest(pt); +} + +bool nmObjPoint::_runHitTest(const QPointF& pt, int& nOption, int& nSubIndex) +{ + if (!nmObjBase::_runHitTest(pt, nOption, nSubIndex)) + { + return false; + } + + nOption = -1; + nSubIndex = 0; + + Q_ASSERT (NULL != m_pAxisX); + Q_ASSERT (NULL != m_pAxisY); + + QPointF ptPos = getCenterPos(); + QPointF ptTopLeft = QPointF(ptPos.x() - m_oDot.radius(), + ptPos.y() - m_oDot.radius()); + QSizeF sz = QSizeF(m_oDot.radius() * 2.f, + m_oDot.radius() * 2.f); + + QRectF rt = QRectF(ptTopLeft, sz); + bool b = rt.contains(pt); + if (b) + { + nOption = (int)OHO_Point; + nSubIndex = 0; + } + else + { + nOption = (int)OHO_None; + nSubIndex = -1; + } + + return b; +} + +bool nmObjPoint::runMove(const QPointF& pt1, const QPointF& pt2) +{ + if (isLockPos()) + { + return false; + } + + if (m_oHitOption == OHO_Point) + { + QVector vec = getAllPos(); + vec[0] = pt2; + //setPtPosOf(0, pt2); + return moveToPos(vec); + } + + return nmObjBase::runMove(pt1, pt2); +} + +void nmObjPoint::fillPtyPano(IxPtyPano* sheet) +{ + nmObjBase::fillPtyPano(sheet); + ZX_PROP("Point.Dot", getDot, setDot); +} + +void nmObjPoint::onSerialize(ZxSerializer* ser) +{ + nmObjBase::onSerialize(ser); + + ser->write("PDesc", m_sDesc); + ser->write("ClrFillUnvalid", m_clrFillUnvalid); + ser->write("ClrOuter", m_clrOuter); +} + +void nmObjPoint::onDeserialize(ZxSerializer* ser) +{ + nmObjBase::onDeserialize(ser); + + ser->read("PDesc", m_sDesc); + ser->read("ClrFillUnvalid", m_clrFillUnvalid); + ser->read("ClrOuter", m_clrOuter); +} +void nmObjPoint::onSaveTempl(ZxSerializer* ser) +{ + nmObjBase::onSaveTempl(ser); + + ser->write("PDesc", m_sDesc); + ser->write("ClrFillUnvalid", m_clrFillUnvalid); + ser->write("ClrOuter", m_clrOuter); +} + +void nmObjPoint::onLoadTempl(ZxSerializer* ser) +{ + nmObjBase::onLoadTempl(ser); + + ser->read("PDesc", m_sDesc); + ser->read("ClrFillUnvalid", m_clrFillUnvalid); + ser->read("ClrOuter", m_clrOuter); +} + +//QColor nmObjPolygon::getBackgrdColor() const +//{ +// return m_clrBackgrd; +//} + +//void nmObjPolygon::setBackgrdColor(QColor color) +//{ +// if (m_clrBackgrd != color) +// { +// m_clrBackgrd = color; +// update(); +// } +//} + +void nmObjPoint::paintBack(QPainter* painter, const ZxPaintParam& param) +{ + QPointF ptPos = getPosOf(m_vecPoints[0]); + drawWellPos(painter, ptPos); +} + +bool nmObjPoint::drawWellPos(QPainter* painter, + QPointF ptPos) +{ + Q_ASSERT (NULL != m_pAxisX); + Q_ASSERT (NULL != m_pAxisY); + if (m_pAxisX->getRangeMin() == m_pAxisX->getRangeMax() || \ + m_pAxisY->getRangeMin() == m_pAxisY->getRangeMax()) + { + return false; + } + + painter->save(); + + // 绘制填充 + float r = m_oDot.radius(); +// if (bCenter) +// { +// r *= 1.2f; +// } + + QColor clrInner = m_oDot.color(); + ZxDrawHelper::drawPoint(painter, ptPos, (int)m_oDot.style(), + r, m_oDot.isFilling(), clrInner); + //if (bCenter) + { + ZxDrawHelper::drawPoint(painter, + ptPos, + (int)m_oDot.style(), + m_oDot.radius() * 0.5f, + m_oDot.isFilling(), + QColor(255, 0, 0)); + } + + painter->setPen(m_clrOuter); + painter->drawEllipse(ptPos, r, r); + + painter->restore(); + + /*{ + + QPointF ptPos = getCenterPos(); + + ///绘制填充色 + paintDotPt(painter, ptPos, m_oDot); + + painter->restore(); + }//*/ + + return true; +} + +void nmObjPoint::setValueX(float x) +{ + m_vecPoints[0].setX(x); + update(); +} +float nmObjPoint::getValueX() +{ + return m_vecPoints[0].x(); +} + +void nmObjPoint::setValueY(float y) +{ + m_vecPoints[0].setY(y); + update(); +} +float nmObjPoint::getValueY() +{ + return m_vecPoints[0].y(); +} + +void nmObjPoint::setDesc(QString sDesc) +{ + m_sDesc = sDesc; +} + +QString nmObjPoint::getDesc() +{ + return m_sDesc; +} + +void nmObjPoint::resetOthers() +{ + if (getChildren().count() <= 0) + { + return; + } + ZxObjText* pBoundText = dynamic_cast(at(0)); + if (NULL == pBoundText) + { + return; + } + QString sText = pBoundText->getText(); + pBoundText->setText(sText); + + QPointF pt = getCenterPos(); + pBoundText->resetBoundsEx(sText, QPointF(pt.rx() - 2,pt.ry() -2)); + + pBoundText->deselect(true); + pBoundText->deselectOthers(); +} + +QPointF nmObjPoint::getCenterPos() +{ + return getPosOf(m_vecPoints[0]); +} + +void nmObjPoint::setPointTag(QString s) +{ + if (getChildren().count() <= 0) + { + return; + } + + ZxObjText* pBoundText = dynamic_cast(at(0)); + if (NULL == pBoundText) + { + return; + } + + pBoundText->setText(s); +} + +void nmObjPoint::resetBounds() +{ + QPointF pt1 = getPosOf(m_vecPoints[0]); + + QRectF rcClient(pt1.x()-(2+m_oDot.radius()/2),pt1.y()-(2+m_oDot.radius()/2),4+m_oDot.radius(),4+m_oDot.radius()); + setBounds(rcClient); + + m_rtBoundVs = calValueBounds(); + + resetOthers(); +} + +QRectF nmObjPoint::getBounds4Update() +{ + if (m_vecPoints.count() != 1) + { + return nmObjBase::getBounds4Update(); + } + else + { + QPointF pt = getPosOf(m_vecPoints[0]); + return QRectF(pt.x() - (2 + m_oDot.radius()), + pt.y() - (2 + m_oDot.radius()), + 4 + m_oDot.radius() * 2, + 4 + m_oDot.radius() * 2); + } +} diff --git a/Src/nmNum/nmPlot/nmObjPointTool.cpp b/Src/nmNum/nmPlot/nmObjPointTool.cpp new file mode 100644 index 0000000..7f51b83 --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjPointTool.cpp @@ -0,0 +1,142 @@ +#include + +//#include "ZxBaseUtil.h" + +#include "nmObjPoint.h" +#include "nmObjPointTool.h" + +nmObjPointTool::nmObjPointTool() : nmObjToolBase() +{ + setText(tr("nObjPointTool")); + m_oNot = NOT_Point; +} + +bool nmObjPointTool::onLeftDown(const QPointF& pt) +{ + if (NULL == m_pObj) //绘图对象尚未创建 + { + m_ptStart = pt; + m_bTracking = true; + return true; + } + else //业已绑定绘图对象 + { + if (nmObjToolBase::onLeftDown(pt)) + { + m_ptStart = pt; + m_bTracking = true; + return true; + } + return false; + } +} + +bool nmObjPointTool::onMouseMove(const QPointF& pt) +{ + if (NULL == m_pObj) //绘图对象尚未创建 + { + m_ptMove = pt; + if (m_bTracking) + { + m_rtTracker = getView()->adjustRectFitViewAspect(getTrackRect()); + updateLastMoveArea(true); + } + return true; + } + else //业已绑定绘图对象 + { + return nmObjToolBase::onMouseMove(pt); + } +} + +bool nmObjPointTool::onLeftUp(const QPointF& pt) +{ + if (NULL == m_pObj) + { + getView()->setSnapshotMode(false); + if (m_bTracking) + { + m_bTracking = false; + } + QVector vec; + vec << pt; + emit sigPtsFinished(vec); + + return true; + } + else //业已绑定绘图对象 + { + return nmObjToolBase::onLeftUp(pt); + } +} + +bool nmObjPointTool::onLeftDoubleClick(const QPointF& pt) +{ + return nmObjToolBase::onLeftDoubleClick(pt); +} + +bool nmObjPointTool::onMouseWheel(const QPointF& pt, int delta) +{ + return nmObjToolBase::onMouseWheel(pt, delta); +} + +void nmObjPointTool::onPaint(QPainter* painter, const ZxPaintParam& param) +{ + nmObjPoint* pObj = dynamic_cast(m_pObj); + if (pObj == NULL) + { + painter->save(); + + QPointF pt1 = getCurrentPos(); + float r = 1.5f; + int nStyle = 3; + bool bFilling = true; + QColor clr = QColor(0, 255, 0); + ZxDrawHelper::drawPoint(painter, pt1, nStyle, + r, bFilling, clr); + + Qt::CursorShape o = Qt::CrossCursor; + changeCursor(o); + + painter->restore(); + } + else + { + if (m_bTracking) + { + if (m_oHitOption == OHO_Point) + { + painter->save(); + + QPointF pt1 = getCurrentPos(); + float r = pObj->getDotRadius(); + int nStyle = pObj->getDotStyle(); + bool bFilling = pObj->getDotFilling(); + QColor clr = pObj->getDotColor(); + ZxDrawHelper::drawPoint(painter, pt1, nStyle, + r, !bFilling, clr); + Qt::CursorShape o = getCursorBy((int)m_oHitOption, pObj->m_nHitIndex); + changeCursor(o); + + painter->restore(); + } + } + } +} + +Qt::CursorShape nmObjPointTool::getCursorBy(const int& nOption, \ + const int& nSubIndex) +{ + if (nOption < 0) + { + return Qt::ArrowCursor; + } + + ObjHitOption oHitOption = (ObjHitOption)nOption; + if (oHitOption == OHO_Point) + { + return (Qt::SizeAllCursor); + } + + return Qt::ArrowCursor; +} diff --git a/Src/nmNum/nmPlot/nmObjPolygon.cpp b/Src/nmNum/nmPlot/nmObjPolygon.cpp new file mode 100644 index 0000000..77d8e8f --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjPolygon.cpp @@ -0,0 +1,294 @@ +#include + +#include +#include "IxPtyPano.h" + +#include "ZxSubAxisX.h" +#include "ZxSubAxisY.h" + +#include "nmObjPolygonTool.h" +#include "nmObjPolygon.h" + +ZX_DEFINE_DYNAMIC(nObjPolygon, nmObjPolygon) + +nmObjPolygon::nmObjPolygon() +{ + m_sObjTag = "nObjPolygon"; + init("", NULL, NULL); +} + +nmObjPolygon::nmObjPolygon(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY) +{ + m_sObjTag = "nObjPolygon"; + init(sName, pAxisX, pAxisY); +} + +nmObjPolygon::~nmObjPolygon() +{ +} + +void nmObjPolygon::init(const QString& sName, \ + ZxSubAxisX* pAxisX, \ + ZxSubAxisY* pAxisY) +{ + nmObjBase::init(sName, pAxisX, pAxisY); + + initFlags(); + + m_oPen = QPen(QBrush(QColor(128, 128, 128)), \ + 0.3f, Qt::SolidLine); + m_clrBackgrd = QColor(255, 170, 255, 100); + + loadTempl(); +} + +void nmObjPolygon::initTools() +{ + m_pTool = new nmObjPolygonTool(); + + nmObjBase::initTools(); +} + +void nmObjPolygon::initFlags() +{ + setLockPos(false); + setLockSize(false); + setReadOnly(false); +} + +bool nmObjPolygon::hitTest(const QPointF& pt) +{ + return nmObjBase::hitTest(pt); +} + +bool nmObjPolygon::_runHitTest(const QPointF& pt, int& nOption, int& nSubIndex) +{ + if (!nmObjBase::_runHitTest(pt, nOption, nSubIndex)) + { + return false; + } + + nOption = -1; + nSubIndex = 0; + + if (NULL == m_pAxisX || NULL == m_pAxisY) + { + return false; + } + + QVector pts = getPosOf(m_vecPoints); + + // 点 + float r = 1.f; + for (int i = 0; i < pts.count(); i++) + { + QPointF ptTopLeft = QPointF(pts[i].x() - r, + pts[i].y() - r); + QSizeF sz = QSizeF(r * 2.f, r * 2.f); + + QRectF rt = QRectF(ptTopLeft, sz); + bool b = rt.contains(pt); + if (b) + { + nOption = (int)OHO_Point; + nSubIndex = i; + return true; + } + } + + // 线 + for (int i = 0; i < pts.count()/* - 1*/; i++) + { + int n1 = i; + int n2 = (i == pts.count() - 1 ? 0 : i + 1); + if (_isNearLine(pt, pts[n1], pts[n2], 1.f * 2)) + { + nOption = (int)OHO_Bound; + nSubIndex = i; + return true; + } + } + + // 内部 + QPainterPath oPath; + oPath.moveTo(pts[0]); + for (int i = 1; i < pts.count(); i++) + { + oPath.lineTo(pts[i]); + } + oPath.closeSubpath(); + if (oPath.contains(pt)) + { + nOption = (int)OHO_Inner; + nSubIndex = 0; + return true; + } + + return false; +} + +bool nmObjPolygon::runMove(const QPointF& pt1, + const QPointF& pt2) +{ + if (isLockPos()) + { + return false; + } + + if (NULL == m_pAxisX || NULL == m_pAxisY) + { + return false; + } + + int nCount = m_vecPoints.count(); + QVector vecPts = getPosOf(m_vecPoints); //屏幕值 + if (m_oHitOption == OHO_Point && m_nHitIndex >= 0) + { + vecPts[m_nHitIndex] = offsetPoint(vecPts[m_nHitIndex], + pt1, pt2); + return moveToPos(vecPts); + } + else if (m_oHitOption == OHO_Bound && m_nHitIndex >= 0) + { + vecPts[m_nHitIndex] = offsetPoint(vecPts[m_nHitIndex], + pt1, pt2); + vecPts[m_nHitIndex + 1] = offsetPoint(vecPts[m_nHitIndex + 1], + pt1, pt2); + return moveToPos(vecPts); + } + else if (m_oHitOption == OHO_Inner) + { + for (int i = 0; i < nCount; i++) + { + vecPts[i] = offsetPoint(vecPts[i], pt1, pt2); + } + m_fOffsetX = pt2.x() - pt1.x(); + m_fOffsetY = pt2.y() - pt1.y(); + return moveToPos(vecPts); + } + else + { + return false; + } + + return true; +} + +void nmObjPolygon::fillPtyPano(IxPtyPano* sheet) +{ + nmObjBase::fillPtyPano(sheet); + + ZX_PROP("ObjPolygon.Pen", getPen, setPen); + ZX_PROP("ObjPolygon.BackgrdColor", getBackgrdColor, setBackgrdColor); +} + +void nmObjPolygon::onSerialize(ZxSerializer* ser) +{ + nmObjBase::onSerialize(ser); + + ser->write("BackgrdColor", m_clrBackgrd); +} + +void nmObjPolygon::onDeserialize(ZxSerializer* ser) +{ + nmObjBase::onDeserialize(ser); + + ser->read("BackgrdColor", m_clrBackgrd); +} + +void nmObjPolygon::onSaveTempl(ZxSerializer* ser) +{ + nmObjBase::onSaveTempl(ser); + + ser->write("BackgrdColor", m_clrBackgrd); +} + +void nmObjPolygon::onLoadTempl(ZxSerializer* ser) +{ + nmObjBase::onLoadTempl(ser); + + ser->read("BackgrdColor", m_clrBackgrd); +} + +QColor nmObjPolygon::getBackgrdColor() const +{ + return m_clrBackgrd; +} + +void nmObjPolygon::setBackgrdColor(QColor color) +{ + if (m_clrBackgrd != color) + { + m_clrBackgrd = color; + update(); + } +} + +void nmObjPolygon::paintBack(QPainter* painter, const ZxPaintParam& param) +{ + if (NULL == m_pAxisX || NULL == m_pAxisY || \ + m_pAxisX->getRangeMin() == m_pAxisX->getRangeMax() || \ + m_pAxisY->getRangeMin() == m_pAxisY->getRangeMax()) + { + return; + } + + painter->save(); + + QVector pts = getPosOf(m_vecPoints); + QRectF bound = getBounds(); + + if (!pts.empty()) + { + // 填充 + QPainterPath oPath; + oPath.moveTo(pts[0]); + for (int i = 1; i < pts.count(); i++) + { + oPath.lineTo(pts[i]); + } + oPath.closeSubpath(); +// m_clrBackgrd.setAlpha(100); + painter->fillPath(oPath, QBrush(m_clrBackgrd)); + + // 边界 + QPen pen = m_oPen; + painter->setPen(pen); + painter->drawPolygon(&pts[0], pts.count()); + + // 绘制名称文字 + painter->setFont(QFont("Arial", 8, QFont::Normal)); + painter->setPen(Qt::black); + ZxDrawHelper::drawText(painter, + bound, + Qt::AlignCenter|Qt::AlignVCenter, + m_sName); + } + + if (isSelected()) //选中状态下 + { + QPen pen(QBrush(Qt::black), 0.0f, Qt::DotLine); + painter->setPen(pen); + painter->drawPolygon(&pts[0], pts.count()); + for (int i = 0; i < pts.count(); i++) + { + float w = 2.2f; + QPointF pt = pts[i]; + QRectF rect(pt.x() - w * 0.5f, pt.y() - w * 0.5f, w, w); + if (m_nHitIndex == i && m_oHitOption == OHO_Point) + { + QBrush br(Qt::red); + painter->fillRect(rect, br); + } + else + { + painter->setPen(QColor(0, 0, 128)); + painter->drawRect(rect); + } + } + } + + painter->restore(); +} diff --git a/Src/nmNum/nmPlot/nmObjPolygonTool.cpp b/Src/nmNum/nmPlot/nmObjPolygonTool.cpp new file mode 100644 index 0000000..864dab0 --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjPolygonTool.cpp @@ -0,0 +1,238 @@ +#include + +#include "ZxBaseUtil.h" +#include "nmObjPolygon.h" +#include "nmObjPolygonTool.h" + +nmObjPolygonTool::nmObjPolygonTool() : nmObjToolBase() +{ + setText(tr("nObjPolygonTool")); + m_oNot = NOT_Polygon; +} + +bool nmObjPolygonTool::onLeftDown(const QPointF& pt) +{ + if (NULL == m_pObj) //绘图对象尚未创建(鼠标选点ing) + { + m_bTracking = true; + m_ptStart = pt; + + changeCursor(Qt::CrossCursor); + + // 对于持续性选点的工具,需要设置 + getView()->setCursorKeeping(true); + + float nDistance = 3.0f; + if (m_vecPoints.count() > 2) //如果与第一个点非常接近,自动封闭处理 + { + if ((qAbs(m_vecPoints[0].x() - pt.x()) < nDistance) && \ + (qAbs(m_vecPoints[0].y() - pt.y()) < nDistance)) + { + getView()->setCursorKeeping(false); + changeCursor(Qt::ArrowCursor); + emit sigPtsFinished(m_vecPoints); //注:该句正确执行之后,会把本工具nmObjPolygonTool + //与View之间detach + m_vecPoints.clear(); + + return true; + } + } + + m_vecPoints.push_back(pt); + + return true; + } + else //业已绑定绘图对象 + { + return nmObjToolBase::onLeftDown(pt); + } +} + +bool nmObjPolygonTool::onMouseMove(const QPointF& pt) +{ + if (NULL == m_pObj) //绘图对象尚未创建(鼠标选点ing) + { + m_ptMove = pt; + if (m_bTracking) + { + updateLastMoveArea(true); + } + return true; + } + else //业已绑定绘图对象 + { + return nmObjToolBase::onMouseMove(pt); + } +} + +bool nmObjPolygonTool::onLeftUp(const QPointF& pt) +{ + if (NULL == m_pObj) //绘图对象尚未创建(鼠标选点ing) + { + if (m_bTracking) + { + m_bTracking = false; + } + + if (!m_vecPoints.isEmpty()) //避免本工具被Detach之后无法update + { + updateLastMoveArea(true); + } + + return true; + } + else //业已绑定绘图对象 + { + return nmObjToolBase::onLeftUp(pt); + } +} + +bool nmObjPolygonTool::onLeftDoubleClick(const QPointF& pt) +{ + if (NULL == m_pObj) //绘图对象尚未创建(鼠标选点ing) + { + changeCursor(Qt::ArrowCursor); + emit sigPtsFinished(m_vecPoints); //注:该句正确执行之后,会把本工具nmObjPolygonTool + //与View之间detach + m_vecPoints.clear(); + + return true; + } + else //业已绑定绘图对象 + { + return nmObjToolBase::onLeftDoubleClick(pt); + } +} + +bool nmObjPolygonTool::onMouseWheel(const QPointF& pt, int delta) +{ + return nmObjToolBase::onMouseWheel(pt, delta); +} + +void nmObjPolygonTool::onPaint(QPainter* painter, const ZxPaintParam& param) +{ + nmObjPolygon* pObj = dynamic_cast(m_pObj); + if (pObj == NULL) //绘图对象尚未创建(鼠标选点ing) + { + Qt::CursorShape o = Qt::CrossCursor; + changeCursor(o); + paintTrackingVirtualObj(painter, param); + } + else //业已绑定绘图对象 + { + paintTrackingRealObj(painter, param); + } +} + +void nmObjPolygonTool::paintTrackingVirtualObj(QPainter* painter, const ZxPaintParam& param) +{ + painter->save(); + + // 已经选的点 + { + QPen pen(Qt::SolidLine); + painter->setPen(pen); + for (int i = 0; i < m_vecPoints.count() - 1; i++) + { + painter->drawLine(m_vecPoints[i], m_vecPoints[i + 1]); + } + } + // 当前正在进行的点 + if (m_bTracking || !m_vecPoints.isEmpty()) + { + QPen pen(Qt::DashLine); + painter->setPen(pen); + painter->drawLine(m_ptStart, m_ptMove); + } + + painter->restore(); +} + +void nmObjPolygonTool::paintTrackingRealObj(QPainter* painter, const ZxPaintParam& param) +{ + if (!m_bTracking) + { + return; + } + + nmObjPolygon* pObj = dynamic_cast(m_pObj); + Q_ASSERT (NULL != pObj); + int nIndex = pObj->m_nHitIndex; + Qt::CursorShape o = getCursorBy((int)m_oHitOption, nIndex); + + QVector vec = pObj->getAllPos(); + QPointF ptOld = m_ptStart; + QPointF ptNew = getCurrentPos(); + if (m_oHitOption == OHO_Point) + { + if (nIndex >= 0 && nIndex < vec.count()) + { + vec[nIndex] = getCurrentPos(); + } + } + else if (m_oHitOption == OHO_Bound) + { + if (nIndex >= 0 && nIndex < vec.count() - 1) + { + vec[nIndex] = pObj->offsetPoint(vec[nIndex], ptOld, ptNew); + vec[nIndex + 1] = pObj->offsetPoint(vec[nIndex + 1], ptOld, ptNew); + } + } + else if (m_oHitOption == OHO_Inner) + { + for (int i = 0; i < vec.count(); i++) + { + vec[i] = pObj->offsetPoint(vec[i], ptOld, ptNew); + } + } + else + { + return; + } + + painter->save(); + QPen pen(Qt::DashLine); + painter->setPen(pen); + + QPainterPath oPath; + oPath.moveTo(vec[0]); + for (int i = 1; i < vec.count(); i++) + { + oPath.lineTo(vec[i]); + } + oPath.closeSubpath(); + + QColor clr = pObj->getBackgrdColor(); + clr.setAlpha(128); + painter->fillPath(oPath, QBrush(clr)); + + changeCursor(o); + + painter->restore(); +} + +Qt::CursorShape nmObjPolygonTool::getCursorBy(const int& nOption, + const int& nSubIndex) +{ + if (nOption < 0) + { + return Qt::ArrowCursor; + } + + ObjHitOption oHitOption = (ObjHitOption)nOption; + if (oHitOption == OHO_Point) + { + return (Qt::CrossCursor); + } + else if (oHitOption == OHO_Bound) + { + return (Qt::SizeAllCursor); + } + else if (oHitOption == OHO_Inner) + { + return (Qt::SizeAllCursor); + } + + return Qt::ArrowCursor; +} + diff --git a/Src/nmNum/nmPlot/nmObjToolBase.cpp b/Src/nmNum/nmPlot/nmObjToolBase.cpp new file mode 100644 index 0000000..12b06b5 --- /dev/null +++ b/Src/nmNum/nmPlot/nmObjToolBase.cpp @@ -0,0 +1,42 @@ +#include +#include "nmObjToolBase.h" + +nmObjToolBase::nmObjToolBase() : ZxObjToolBase() +{ + m_oNot = NOT_UNKNWON; +} + +bool nmObjToolBase::onLeftDown(const QPointF& pt) +{ + return ZxObjToolBase::onLeftDown(pt); +} + +bool nmObjToolBase::onMouseMove(const QPointF& pt) +{ + return ZxObjToolBase::onMouseMove(pt); +} + +bool nmObjToolBase::onLeftUp(const QPointF& pt) +{ + return ZxObjToolBase::onLeftUp(pt); +} + +bool nmObjToolBase::onLeftDoubleClick(const QPointF& pt) +{ + return ZxObjToolBase::onLeftDoubleClick(pt); +} + +bool nmObjToolBase::onMouseWheel(const QPointF& pt, int delta) +{ + return ZxObjToolBase::onMouseWheel(pt, delta); +} + +void nmObjToolBase::onPaint(QPainter* painter, const ZxPaintParam& param) +{ + ZxObjToolBase::onPaint(painter, param); +} + +NM_Obj_Type nmObjToolBase::getNOT() +{ + return m_oNot; +} diff --git a/Src/nmNum/nmSubWnd/nmSubWndDemo.cpp b/Src/nmNum/nmSubWnd/nmSubWndDemo.cpp new file mode 100644 index 0000000..20a06a7 --- /dev/null +++ b/Src/nmNum/nmSubWnd/nmSubWndDemo.cpp @@ -0,0 +1,640 @@ + +#include "zxLogInstance.h" +#include "ZxBaHelper.h" +#include "ZxResolutionHelper.h" +#include "zxSysUtils.h" +#include "ZxPtyDock.h" +#include "iDockBaseWx.h" +#include "ZxMainWindow.h" + +#include "ZxSubAxisX.h" +#include "ZxSubAxisY.h" + +#include "ZxPlot.h" +#include "ZxObjCurve.h" +#include "ZxSubTitle.h" +#include "tCurvePlotScene.h" +#include "tCurvePlotView.h" + +#include "ZxTableView.h" +#include "ZxTableModel.h" + +#include "mModuleDefines.h" + +#include "ZxDataWell.h" +#include "ZxDataProject.h" +#include "ZxRstJobWnd.h" +#ifdef QT_DEBUG +#include "ZxDataGaugeP.h" +#endif + +#ifdef QT_DEBUG +#include "nmXmlHelper.h" +#endif + +#include "nmGuiPlot.h" +#include "nmWxParaProperty.h" + +#include "nmSubWndDemo.h" + +nmSubWndDemo::nmSubWndDemo(QWidget *parent, QString sExt) : + iSubWndBaseAF(parent, sExt) +{ + m_pWxPlot = NULL; + + m_pWxDockParas = NULL; + m_pWxParas = NULL; + + m_pWxDockData1 = NULL; + m_pTableView1 = NULL; + + m_pWxDockData2 = NULL; + m_pTableView2 = NULL; + +#ifdef QT_DEBUG + m_pWxDockTemp = NULL; + m_pListWxTemp = NULL; +#endif + + // 为了后续支持多井提供方便 + if (m_pDataWell == NULL) + { + m_pDataWell = zxCurWell; + } + + m_sMdiWndType = s_MdiType_DataNum; + + setWindowTitle(tr("nmSubWndDemo")); +} + +nmSubWndDemo::~nmSubWndDemo() +{ +#ifdef QT_DEBUG + + // 坚持谁创建谁析构原则,删除(首先需要去除绑定) + if (NULL != m_pWxDockTemp) + { + //QObject* pParent = m_pWxDockTemp->parent(); + //ZxMainWindow* p = dynamic_cast(pParent); + ZxMainWindow* p = m_pMainWindow; + if (NULL != p) + { + p->detachOuterDockWx(m_pWxDockTemp); + } + delete m_pWxDockTemp; + m_pWxDockTemp = NULL; + } + +#endif +} + +void nmSubWndDemo::configWnd() +{ + iSubWndBaseAF::configWnd(); + + if (NULL != m_pMainWindow) + { + disconnect(this, SIGNAL(sigAppendDock2Main(iDockBaseWx*,Qt::DockWidgetArea)), \ + m_pMainWindow, SLOT(slotAppendDock2Main(iDockBaseWx*,Qt::DockWidgetArea))); + connect(this, SIGNAL(sigAppendDock2Main(iDockBaseWx*,Qt::DockWidgetArea)), \ + m_pMainWindow, SLOT(slotAppendDock2Main(iDockBaseWx*,Qt::DockWidgetArea))); + } + + initUI(); +} + +void nmSubWndDemo::initUI() +{ + // iSubWndBaseAF::initUI(); + +#ifdef QT_DEBUG + // 示例:演示增加Dock并且追加至程序主窗口 + initUiTop(); + +#endif + + // 主布局:定义 + initUiMain(); + + // 外围布局,DockWx + { + initUiDockWxs(); + initUiDockPtys(); + } + +#ifdef QT_DEBUG + // 示例:如何加载xml文件 + + if (_nmXmlHelper->loadXmlDefines()) + { + foreach (nmXmlData* pData, *(_nmXmlHelper->getVecNmXmlDataPtrs())) + { + Q_ASSERT (NULL != pData); + zxLogRunD(QString("%1: %2").arg(pData->m_sName).arg(pData->m_sAlias)); + } + } + + +#endif +} + +QWidget* nmSubWndDemo::initUiMainWx() +{ + QSplitter* pSplitter = new QSplitter(Qt::Vertical); + Q_ASSERT (NULL != pSplitter); + + nmGuiPlot* pWxPlot = new nmGuiPlot(); + m_pWxPlot = pWxPlot; + { + // 建立信号,以便在此处增加新的工具 + connect(pWxPlot, SIGNAL(sigToolbarBuilt(QToolBar*)), + this, SLOT(slotToolbarBuilt(QToolBar*))); + + QSize sz = QSize(265, 203); + pWxPlot->initUI("TestGui", sz); + + bindChartSignals(pWxPlot); + + pSplitter->addWidget(pWxPlot); + } + + return pSplitter; +} + +void nmSubWndDemo::initUiDockWxs() +{ + // 基础参数Dock + { + m_pWxDockParas = new iDockBaseWx(tr("Parameters")); + Q_ASSERT (NULL != m_pWxDockParas); + addDockWidget(Qt::LeftDockWidgetArea, m_pWxDockParas); + + m_pWxParas = new nmWxParaProperty(); + Q_ASSERT (NULL != m_pWxParas); + m_pWxParas->initUI(); + m_pWxDockParas->setWidget(m_pWxParas); + m_pWxDockParas->setMinimumWidth(_resoSizeW(200)); + } + + // 表格数据Dock + { + QStringList listTitles; + listTitles << tr("Name1"); + iDockBaseWx* pDockWx1 = new iDockBaseWx(tr("Data1")); + Q_ASSERT (NULL != pDockWx1); + { + addDockWidget(Qt::RightDockWidgetArea, pDockWx1); + m_pWxDockData1 = pDockWx1; + + ZxTableView* pTableView = new ZxTableView(); + Q_ASSERT (NULL != pTableView); + { + ZxTableModel* pTableModel = new ZxTableModel(1, 1, listTitles); + Q_ASSERT (NULL != pTableModel); + pTableView->setModel(pTableModel); + pTableView->setMenuMode(ZxTableView::MTM_Edit_Without_Col); + pTableView->setSelectionBehavior(ZxTableView::SelectRows); + pTableView->fuzzyUiOfQt5(); + } + pDockWx1->setWidget(pTableView); + m_pTableView1 = pTableView; + } + iDockBaseWx* pDockWx2 = new iDockBaseWx(tr("Data2")); + Q_ASSERT (NULL != pDockWx2); + { + addDockWidget(Qt::RightDockWidgetArea, pDockWx2); + tabifyDockWidget(pDockWx1, pDockWx2); + m_pWxDockData2 = pDockWx2; + + ZxTableView* pTableView = new ZxTableView(); + Q_ASSERT (NULL != pTableView); + { + ZxTableModel* pTableModel = new ZxTableModel(1, 1, listTitles); + Q_ASSERT (NULL != pTableModel); + pTableView->setModel(pTableModel); + pTableView->setMenuMode(ZxTableView::MTM_Readonly); + pTableView->fuzzyUiOfQt5(); + } + pDockWx2->setWidget(pTableView); + m_pTableView2 = pTableView; + } + } +} + +void nmSubWndDemo::initUiDockPtys() +{ + iSubWndBaseAF::initUiDockPtys(); + + // 属性Dock + { + Q_ASSERT (NULL != m_pDockPty); + m_pDockPty->setMinimumWidth(_resoSizeW(200)); + } +} + + +#ifdef QT_DEBUG +// 示例:演示增加Dock并且追加至程序主窗口 +void nmSubWndDemo::initUiTop() +{ + // 基础参数Dock + { + iDockBaseWx* pDockWx = new iDockBaseWx(tr("TODO:Demo")); + Q_ASSERT (NULL != pDockWx); + + QListWidget* pListWx = new QListWidget(); + Q_ASSERT (NULL != pListWx); + pDockWx->setWidget(pListWx); + m_pListWxTemp = pListWx; + + pDockWx->setMinimumWidth(_resoSizeW(200)); + emit sigAppendDock2Main(pDockWx, Qt::LeftDockWidgetArea); + m_pWxDockTemp = pDockWx; + } +} + +#endif + +void nmSubWndDemo::bindChartSignals(iGuiPlot* pWxPlot) +{ + nmGuiPlot* p = dynamic_cast(pWxPlot); + if (NULL != p) + { + connect(p, SIGNAL(sigObjSelChanged(ZxObjBase*, bool)), \ + this, SLOT(slotObjSelChanged(ZxObjBase*, bool))); + connect(p, SIGNAL(sigObjPtsChanged(ZxObjBase*)), + this, SLOT(slotObjPtsChanged(ZxObjBase*))); + } + + iSubWndBaseAF::bindChartSignals(pWxPlot); +} + + +bool nmSubWndDemo::runActionOf(QString sAction) +{ + if (iSubWnd::runActionOf(sAction)) + { + return true; + } + + // 数据加载 + QString s = sAction; + if (_isSame(s, "LoadP")) + { + return true; + } + return false; +} + +bool nmSubWndDemo::runCmdBy(QString sName, QString sID) +{ + QString s = sName; + if (_isSame(s, "RunGrid")) + { + if (NULL != m_pWxPlot) + { + //m_pWxPlot->refreshGrid(true); + } + return true; + } + + return false; +} + +bool nmSubWndDemo::checkCmdEnable(bool &b, \ + QString sName, int nID, \ + bool bLicensed) +{ + bool b1 = (NULL != zxCurProject); + bool b2 = (NULL != m_pDataWell); + if (nID == 5102) //RunGrid + { + b =(b1 && b2 && bLicensed && !isReadonly() && NULL != m_pWxPlot); + return true; + } + + return iSubWndBaseAF::checkCmdEnable(b, sName, nID, bLicensed); +} + +void nmSubWndDemo::reAdjustToolbar(QToolBar* pToolBar) +{ + iSubWndBaseAF::reAdjustToolbar(pToolBar); +} + +void nmSubWndDemo::firstLoadAndUpdate() +{ + iSubWndBaseAF::firstLoadAndUpdate(); +} + +void nmSubWndDemo::finalDeals() +{ + iSubWndBaseAF::finalDeals(); + +#ifdef QT_DEBUG + + updatePlots(); + + updateDockWxs(); + Q_ASSERT (NULL != m_pWxDockData1); + m_pWxDockData1->raise(); + +#endif +} + +void nmSubWndDemo::onActivated() +{ +#ifdef QT_DEBUG + + // 当前窗体激活时,可以做些事情,比如把隐藏的Dock显示出来 + if (NULL != m_pWxDockTemp) + { + if (!m_pWxDockTemp->isVisible()) + { + m_pWxDockTemp->setVisible(true); + } + } + +#endif +} + +#ifdef QT_DEBUG + +void nmSubWndDemo::updatePlots() +{ + // 说明:以从当前井获取一条压力数据进行绘图为例 + QString sType = iDataModelType::sTypeDataGaugeP; + QString sCodeP = ""; //如果已知压力数据Code,可以直接引用 + ZxDataGaugeP* pDataObjP = dynamic_cast(getDataObjOf(sType, sCodeP)); + if (NULL == pDataObjP) + { + zxLogRunW(tr("Failed to get data of type '%1'").arg(sType)); + return; + } + + VecFloat vecX, vecY; + QByteArray ba = pDataObjP->getGaugeDataOf(0); + if (!ZxBaHelper::convertBa2VecXY(vecX, vecY, ba)) + { + zxLogRunW(tr("Failed to get x-y data of dataobj '%1'").arg(pDataObjP->getCode())); + return; + } + + nmGuiPlot* pWxPlot = m_pWxPlot; + Q_ASSERT (NULL != pWxPlot); + + QString sName = tr("CurveName"); + ZxObjBase* pObj = pWxPlot->updatePlotObjBy(sName, vecX, vecY, true); + if (NULL != pObj) + { + pObj->setLockPos(true); //可以调整属性 + // pObj->setReadOnly(true); + + pWxPlot->freshAxisScales(true);//刷新坐标轴刻度 + + // 设置标题+坐标轴等 + pWxPlot->setAxisX(tr("Time"), "hr"); + pWxPlot->setAxisY(tr("Pressure"), "MPa"); + pWxPlot->setAxisXYLog(false, 0); + pWxPlot->setAxisXYLog(false, 1); + pWxPlot->m_pPlot->setLegendVisible(false); + pWxPlot->m_pPlot->getTitle()->setName(tr("Demo")); + } +} + +ZxDataObject* nmSubWndDemo::getDataObjOf(QString sType, QString sCode /*= ""*/) +{ + ZxDataWell* pDataWell = zxCurWell; + Q_ASSERT (NULL != pDataWell); + + ZxDataObject* pDataObj = NULL; + if (!sCode.isEmpty()) + { + pDataObj = pDataWell->getChild(sType, sCode); + } + else + { + ZxDataObjectList vecObjs = pDataWell->getChildren(sType); + if (!vecObjs.isEmpty()) + { + pDataObj = vecObjs[0]; + } + } + + return pDataObj; +} + +void nmSubWndDemo::updateDockWxs() +{ + // 左侧参数窗体 + Q_ASSERT (NULL != m_pWxParas); + QStringList listParas; + listParas << "K" << "S" << "rw" << "Miuo" << "Bo" << "phi"; + m_pWxParas->refreshUIs(listParas); + + // 表格数据1 + Q_ASSERT (NULL != m_pTableView1); + ZxTableModel* pTableModel = m_pTableView1->getModel(); + Q_ASSERT (NULL != pTableModel); + QStringList listTitles; + listTitles << tr("Col1") << tr("Col2\n(MPa)"); + + VVecDouble vvec; + { + VecDouble vec; + vec << 0.2 << 3.4; + vvec << vec; + } + { + VecDouble vec; + vec << 5.6 << 0.456; + vvec << vec; + } + pTableModel->setTitles(listTitles); + pTableModel->setData(vvec); + + + if (NULL != m_pListWxTemp) + { + m_pListWxTemp->clear(); + for (int i = 0; i < 10; i++) + { + QString sItem = tr("Demo Item %1").arg(i + 1); + QListWidgetItem* pItem = new QListWidgetItem(sItem); + Q_ASSERT (NULL != pItem); + pItem->setIcon(zxLoadIcon("Open")); + m_pListWxTemp->addItem(pItem); + } + } +} + +void nmSubWndDemo::updateTableByCurve(ZxObjCurve* pObjCurve, ZxTableView* pTableView) +{ + Q_ASSERT (NULL != pObjCurve); + Q_ASSERT (NULL != pTableView); + + // 刷新表格标题 + { + QString sNameX = pObjCurve->getAxisX()->getName(); + QString sUnit = pObjCurve->getAxisX()->getUnit(); + if (!sUnit.isEmpty()) + { + sNameX += QString("\n(%1)").arg(sUnit); + } + QString sNameY = pObjCurve->getAxisY()->getName(); + sUnit = pObjCurve->getAxisY()->getUnit(); + if (!sUnit.isEmpty()) + { + sNameY += QString("\n(%1)").arg(sUnit); + } + + QStringList listTitles; + listTitles << sNameX << sNameY; + pTableView->getModel()->setTitles(listTitles); + } + + // 刷新表格数据 + { + VVecDouble vvec; + QVector vecValues = pObjCurve->getAllValues(); + for (int i = 0; i < vecValues.count(); i++) + { + VecDouble vec; + vec << vecValues.at(i).x() * 1.0; + vec << vecValues.at(i).y() * 1.0; + vvec << vec; + } + pTableView->getModel()->setData(vvec); + } +} + +#endif + +void nmSubWndDemo::slotObjSelChanged(ZxObjBase* p, bool b) +{ +#ifdef QT_DEBUG + + // 如果选中了一条曲线,则把其数据显示在数据表格2中 + ZxObjCurve* pObjCurve = dynamic_cast(p); + if (NULL != pObjCurve && b) + { + Q_ASSERT (NULL != m_pWxDockData2); + m_pWxDockData2->raise(); + updateTableByCurve(pObjCurve, m_pTableView2); + } + +#endif +} + +void nmSubWndDemo::slotObjPtsChanged(ZxObjBase* p) +{ +} + + +void nmSubWndDemo::onSerialize(ZxSerializer* ser) +{ + iSubWndBaseAF::onSerialize(ser); + + if (NULL != m_pWxPlot) + { + m_pWxPlot->setModified(false); + } +} + +void nmSubWndDemo::onDeserialize(ZxSerializer* ser) +{ + iSubWndBaseAF::onDeserialize(ser); + + if (NULL != m_pWxPlot) + { + m_pWxPlot->setModified(false); + } +} + +void nmSubWndDemo::onDeserialized() +{ + if (NULL != m_pWxPlot) + { + m_pWxPlot->resetAfterDeserialized(); + } +} + +bool nmSubWndDemo::loadRss() +{ + ZxRstJobWnd* pRstWnd = getRstJobWnd(); + Q_ASSERT (NULL != pRstWnd); + + // 基础信息 + { + QByteArray v = pRstWnd->getDataInfo(); + IxSerDes* pSerObj = this; + if (!loadRstInfoFromArr(v, pSerObj)) + { + return false; + } + } + // 图形 + if (NULL != m_pWxPlot) + { + QByteArray v = pRstWnd->getDataInfo1(); + ZxPlot* pPlot = NULL; + loadOnePlot(pPlot, v); + if (NULL != pPlot) + { + m_pWxPlot->m_pPlotScene->freshToPlot(pPlot, + m_pWxPlot->m_pPlotView); + m_pWxPlot->m_pPlot = m_pWxPlot->m_pPlotScene->m_pPlot; + pPlot->resetTools(m_pWxPlot->m_pPlotView); + m_pWxPlot->resetAfterDeserialized(); + } + m_pWxPlot->runUpdate(); + } + + return true; +} + +bool nmSubWndDemo::saveRss() +{ + ZxRstJobWnd* pRstWnd = getRstJobWnd(); + if (NULL == pRstWnd) + { + return false; + } + + // 基础信息 + { + QByteArray v; + IxSerDes* pSerObj = this; + if (!saveRstInfoToArr(v, pSerObj)) + { + return false; + } + pRstWnd->setDataInfo(v); + } + + // 图形 + if (NULL != m_pWxPlot) + { + ZxPlot* pPlot = m_pWxPlot->m_pPlot; + { + QByteArray v1; + if (saveOnePlot(pPlot, v1)) + { + pRstWnd->setDataInfo1(v1); + } + } + } + + return pRstWnd->save(); +} + +bool nmSubWndDemo::slotSaveAll() +{ + ZxRstJobWnd* pRstWnd = getRstJobWnd(); + Q_ASSERT (NULL != pRstWnd); + return saveRss(); +} + +bool nmSubWndDemo::onConfirmClosing() +{ + return iSubWndBaseAF::onConfirmClosing(); +} diff --git a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp new file mode 100644 index 0000000..a687f89 --- /dev/null +++ b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp @@ -0,0 +1,42 @@ +#include "zxLogInstance.h" +#include "iRibbonXmlCmd.h" + +#ifdef MY_OWN_GRID +#include "iSubWndGrid.h" +#else +#include "nmSubWndDemo.h" +#endif + +#include "nmSubWndUtils.h" + +iSubWnd* nmSubWndUtils::createSubWnd(iRibbonXmlCmd* pCmdInfo) +{ + if (NULL == pCmdInfo) + { + return NULL; + } + return createSubWnd(pCmdInfo->m_sID, pCmdInfo->m_sExtInfo); +} + +iSubWnd* nmSubWndUtils::createSubWnd(QString sID, QString sExt) +{ + iSubWnd* pSubWnd = NULL; + + int nID = sID.toInt(); + if (nID == 5001) + { +#ifdef MY_OWN_GRID + pSubWnd = new iSubWndGrid(NULL, sExt); +#else + pSubWnd = new nmSubWndDemo(NULL, sExt); +#endif + } + + if (NULL != pSubWnd) + { + // TODO 此处根据需要设置 改变 标识 + pSubWnd->setModified(true); + } + + return pSubWnd; +} diff --git a/Src/nmNum/nmSubWxs/nmWxParaProperty.cpp b/Src/nmNum/nmSubWxs/nmWxParaProperty.cpp new file mode 100644 index 0000000..4b00f6d --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmWxParaProperty.cpp @@ -0,0 +1,258 @@ + +#include "zxLogInstance.h" +#include "ZxResolutionHelper.h" +#include "zxSysUtils.h" + +#include "iParaItemCtrl.h" +#include "iParameterUtils.h" + +#include "iGridRowItem.h" +#include "iGridRowUtils.h" + +#include "nmWxParaProperty.h" + +nmWxParaProperty::nmWxParaProperty(QWidget *parent) : + iDlgBase(parent) +{ + m_pMainLayout = NULL; + m_listParas.clear(); + m_pGridItemUtils = NULL; + m_pHelpBox = NULL; + + setWindowTitle(tr("Numerical para property")); +} + +nmWxParaProperty::~nmWxParaProperty() +{ + if (NULL != m_pGridItemUtils) + { + delete m_pGridItemUtils; + m_pGridItemUtils = NULL; + } +} + +void nmWxParaProperty::initUI() +{ + m_pMainLayout = new QVBoxLayout(); + Q_ASSERT (NULL != m_pMainLayout); + m_pMainLayout->setSpacing(0); + m_pMainLayout->setMargin(0); + m_pMainLayout->setSizeConstraint(QVBoxLayout::SetMinAndMaxSize); + + //以ScrollArea来显示,出现滚动条 + { + QWidget* pWxBk = new QWidget(); + Q_ASSERT (NULL != pWxBk); + pWxBk->setContextMenuPolicy(Qt::CustomContextMenu); + pWxBk->setAutoFillBackground(true); + pWxBk->setLayout(m_pMainLayout); + + // Area,设置Widget + QScrollArea* pArea = new QScrollArea(); + pArea->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + pArea->setWidgetResizable(true); + pArea->setWidget(pWxBk); + pArea->setContextMenuPolicy(Qt::CustomContextMenu);//*/ + + // Layout, 设置Area。 + QVBoxLayout* pLayoutBk = new QVBoxLayout(); + pLayoutBk->setSpacing(0); + pLayoutBk->setMargin(0); + pLayoutBk->addWidget(pArea); + + initUI_HelpBox(); + if (NULL != m_pHelpBox) + { + pLayoutBk->addWidget(m_pHelpBox); + } + + setLayout(pLayoutBk); + } +} + +void nmWxParaProperty::initUI_HelpBox() +{ + // Sub: HelpBox + m_pHelpBox = new QTextEdit(); + Q_ASSERT (NULL != m_pHelpBox); + + m_pHelpBox->setMaximumHeight(_resoSizeH(65)); + m_pHelpBox->setReadOnly(true); +} + +void nmWxParaProperty::refreshUIs(QStringList& listParas, bool bReserveOlds /*= true*/) +{ + if (NULL == m_pMainLayout) + { + return; + } + + m_listParas = listParas; + + // 备份原有的参数内容 + QMap mapOldParas; + mapOldParas.clear(); + if (bReserveOlds) + { + backupOldParas(mapOldParas, listParas); + } + + // Clear Old + QVBoxLayout* pLayout = m_pMainLayout; + clearLayout(pLayout); + + // 创建 + m_pGridItemUtils = new iGridRowUtils(); + Q_ASSERT (NULL != m_pGridItemUtils); + m_pGridItemUtils->setParent(this); + connect(m_pGridItemUtils, SIGNAL(sigHelpMsg(QString&)), \ + this, SLOT(slotHelpMsg(QString&))); + m_pMainLayout->addWidget(m_pGridItemUtils);\ + QStringList list1 = listParas;//TODO 这是为了其他接口用的,此处暂未使用 + m_pGridItemUtils->buildRowUtils(listParas, list1, false, this); + + // 恢复原有的参数内容 + if (bReserveOlds && !mapOldParas.isEmpty()) + { + restoreOldParas(mapOldParas); + } +} + +void nmWxParaProperty::backupOldParas(QMap& map, \ + QStringList& listParas) +{ + map.clear(); + if (NULL != m_pGridItemUtils) + { + foreach (QString s, listParas) + { + map[s] = m_pGridItemUtils->getItemValueByPara(s); + } + } +} + +void nmWxParaProperty::restoreOldParas(QMap& map) +{ + if (NULL == m_pGridItemUtils) + return; + + // 恢复先前备份的数据 + QMap::iterator iter = map.begin(); + for (; iter != map.end(); iter++) + { + QString sPara = iter.key(); + + iParameter* p = iParameterUtils::getPara(sPara); + if (NULL == p || p->m_bReadonly) + { + continue; + } + + QVariant o = iter.value(); + if (!o.isValid()) + { + continue; + } + m_pGridItemUtils->setParaValue(sPara, o); + } +} + +bool nmWxParaProperty::setParaValue(QString sPara, QVariant o) +{ + if (NULL != m_pGridItemUtils && \ + m_pGridItemUtils->setParaValue(sPara, o)) + { + return true; + } + + return false; +} + +bool nmWxParaProperty::getParaValue(QString sPara, QVariant& o) +{ + if (NULL != m_pGridItemUtils) + { + if (m_pGridItemUtils->getParaValue(sPara, o)) + { + return true; + } + } + + return false; +} + +bool nmWxParaProperty::getAllParaValues(QMap& map, + bool bOnlyFitted/* = false*/, + bool bClearMap /*= true*/) +{ + if (bClearMap) + { + map.clear(); + } + if (NULL != m_pGridItemUtils) + { + if (!m_pGridItemUtils->getAllParaValues(map, bOnlyFitted, false)) + { + return false; + } + } + return true; +} + +bool nmWxParaProperty::getAllParaUnits(QMap& map, + bool bOnlyFitted/* = false*/, + bool bClearMap /*= true*/) +{ + if (NULL != m_pGridItemUtils && \ + !m_pGridItemUtils->getAllParaUnits(map, bOnlyFitted, false)) + { + return false; + } + + return true; +} + +void nmWxParaProperty::onSerialize(ZxSerializer* ser) +{ + iDlgBase::onSerialize(ser); + + ser->write("ParaLists", m_listParas); + if (NULL != m_pGridItemUtils) + { + m_pGridItemUtils->onSerialize(ser); + } +} + +void nmWxParaProperty::onDeserialize(ZxSerializer* ser) +{ + iDlgBase::onDeserialize(ser); + + m_bUnableSP = true; + + m_listParas.clear(); + ser->read("ParaLists", m_listParas); + + refreshUIs(m_listParas); + + if (NULL != m_pGridItemUtils) + { + m_pGridItemUtils->onDeserialize(ser); + } + + m_bUnableSP = false; +} + +// help msg +void nmWxParaProperty::slotHelpMsg(QString& s) +{ + if (NULL == m_pHelpBox) + { + return; + } + m_pHelpBox->setHtml(s); +} + +void nmWxParaProperty::paintEvent(QPaintEvent *e) +{ + iDlgBase::paintEvent(e); +} diff --git a/Src/nmNum/nmXml/nmXmlData.cpp b/Src/nmNum/nmXml/nmXmlData.cpp new file mode 100644 index 0000000..d6104e8 --- /dev/null +++ b/Src/nmNum/nmXml/nmXmlData.cpp @@ -0,0 +1,57 @@ +#include "nmXmlData.h" + +nmXmlData::nmXmlData() : iXmlItemBase() +{ + m_sTag = ""; + m_listParas.clear(); + m_oNum = NUM_Unknown; + + initXmlTags(); +} + +nmXmlData::~nmXmlData() +{ +} + +void nmXmlData::initXmlTags() +{ + m_listTags << "Tag"; + m_listTags << "Paras"; + m_listTags << "Num"; +} + +void nmXmlData::parseInfo(const QDomElement& e) +{ + iXmlItemBase::parseInfo(e); + + // 如果本身需要提供层级,可以在此处进行继续编写 +// QDomNodeList list = e.childNodes(); +// for (int i = 0; i < list.count(); i++) +// { +// QDomNode node = list.at(i); +// iXmlItemChild* p = new iXmlItemChild(); +// Q_ASSERT (NULL != p); +// p->parseInfo(node.toElement()); +// appenChild(p); +// } +} + +int nmXmlData::allocateInfo(int nIndex) +{ + nIndex = iXmlItemBase::allocateInfo(nIndex); + + m_sTag = m_listValues.at(nIndex++).trimmed(); + m_listParas = m_listValues.at(nIndex++).trimmed().split(";"); + + QString s = m_listValues.at(nIndex++).trimmed(); + if (!s.isEmpty()) + { + int n = s.toInt(); + if (n >= 0 && n < (int)NUM_Unknown) + { + m_oNum = (nmUseMode)n; + } + } + + return nIndex; +} diff --git a/Src/nmNum/nmXml/nmXmlHelper.cpp b/Src/nmNum/nmXml/nmXmlHelper.cpp new file mode 100644 index 0000000..579dd8d --- /dev/null +++ b/Src/nmNum/nmXml/nmXmlHelper.cpp @@ -0,0 +1,56 @@ +#include "zxLogInstance.h" +#include "ZxBaseUtil.h" +#include "nmXmlUtils.h" +#include "nmXmlHelper.h" + +nmXmlHelper* nmXmlHelper::_helper = NULL; + +nmXmlHelper* nmXmlHelper::getInstance() +{ + if (NULL == _helper) + { + _helper = new nmXmlHelper(); + } + + return _helper; +} + +void nmXmlHelper::release() +{ + if (_helper != NULL) + { + delete _helper; + _helper = NULL; + } +} + +nmXmlHelper::nmXmlHelper() +{ + m_vecNmXmlDatas.clear(); + m_sError = ""; +} + +nmXmlHelper::~nmXmlHelper() +{ +} + +bool nmXmlHelper::loadXmlDefines(QString sFile /*= ""*/) +{ + if (sFile.isEmpty()) + { + QString sDir = ZxBaseUtil::getDirOf(s_Dir_Config, "Common"); + sFile = sDir + "NmXmlDemo.xml"; + } + + return nmXmlUtils::loadNmXmlDatas(&m_vecNmXmlDatas, sFile); +} + +vecNmXmlDatas* nmXmlHelper::getVecNmXmlDataPtrs() +{ + return &m_vecNmXmlDatas; +} + +QString nmXmlHelper::getLastError() +{ + return m_sError; +} diff --git a/Src/nmNum/nmXml/nmXmlUtils.cpp b/Src/nmNum/nmXml/nmXmlUtils.cpp new file mode 100644 index 0000000..168b00c --- /dev/null +++ b/Src/nmNum/nmXml/nmXmlUtils.cpp @@ -0,0 +1,36 @@ +#include "nmXmlUtils.h" + +bool nmXmlUtils::loadNmXmlDatas(vecNmXmlDatas* pVecNmXmlDatas, \ + QString sFile) +{ + if (NULL == pVecNmXmlDatas) + { + return false; + } + + // 加载 + QDomDocument doc; + if (!openAndLoadXml(doc, sFile, true)) //第三个参数:加密模式 + { + return false; + } + + // 具体的解析 + QDomElement root = doc.documentElement(); + QDomNodeList listNodes = root.childNodes(); + + pVecNmXmlDatas->clear(); + for (int i = 0; i < listNodes.count(); i++) + { + QDomNode node = listNodes.at(i); + QDomElement e = node.toElement(); + + nmXmlData* p = new nmXmlData(); + Q_ASSERT (NULL != p); + p->parseInfo(e); + pVecNmXmlDatas->append(p); + } + + return (pVecNmXmlDatas->count() > 0); +} + diff --git a/Src4/functions.pri b/Src4/functions.pri new file mode 100644 index 0000000..26f647d --- /dev/null +++ b/Src4/functions.pri @@ -0,0 +1,74 @@ + +# addSubdirs用来添加子项目及其依赖关系, 并自动忽略缺失的项目. +# 用法 addSubdirs(项目, 依赖项1 [依赖项2] ...) + +defineTest(addSubdirs){ + for(prj, 1){ + prj = $$replace(prj, \\\\, /) + prj_id = $$replace(prj, [/\\\\], _) + SUBDIRS *= $$prj_id + #message ($${prj_id}.subdir = $$prj) + eval ($${prj_id}.subdir = $$prj) + for(dep, 2){ + dep = $$replace(dep, \\\\], /) + dep_id = $$replace(dep, [/\\\\], _) + #message($${prj_id}.depends += $$dep_id) + eval ($${prj_id}.depends *= $$dep_id) + isEmpty($${dep_id}.subdir){ + #message($${dep_id}.subdir = $$dep) + eval ($${dep_id}.subdir = $$dep) + export ($${dep_id}.subdir) + } + } + export ($${prj_id}.subdir) + export ($${prj_id}.depends) + } + export (SUBDIRS) +} + +defineTest(fixDepends){ + for(prj_id, SUBDIRS){ + eval (prj = \$\$$${prj_id}.subdir) + !exists($$prj){ + dirMissing *= $$prj + dirNeedBy -= $$prj + SUBDIRS -= $$prj_id + } + for(dep_id, $${prj_id}.depends){ + eval (dep = \$\$$${dep_id}.subdir) + !exists($$dep){ + dirMissing *= $$dep + s1 = $$find(dirMissing, $$dep) + isEmpty(s1){ + dirNeedBy *= $$prj + } + eval ($${prj_id}.depends -= $$dep_id) + } + s = $$find(SUBDIRS, $$dep_id) + isEmpty(s){ + #message("Project \"$$dep\" is not in project list. (need by \"$$prj\").") + listMissing *= $$dep + listNeedBy *= $$prj + eval ($${prj_id}.depends -= $$dep_id) + } + } + export ($${prj_id}.depends) + } + + export (SUBDIRS) + + !isEmpty(dirMissing){ + message("dir missing: $${dirMissing}") + !isEmpty(dirNeedBy){ + message(" -- need by: $${dirNeedBy}, may cause link problem.") + } + } + + + !isEmpty(listMissing){ + message("dir not in 'SUBDIRS': $${listMissing}") + message(" -- need by: $${listNeedBy}, may cause link problem.") + } +} + + diff --git a/Src4/nmNum/nmData/nmData.pro b/Src4/nmNum/nmData/nmData.pro new file mode 100644 index 0000000..4b07b69 --- /dev/null +++ b/Src4/nmNum/nmData/nmData.pro @@ -0,0 +1,42 @@ +## /////////////////////////////////////// +## Ҫ ֵԾ +## ݶ +## /////////////////////////////////////// + +QT += core xml sql + +TARGET = nmData +TEMPLATE = lib + +include(../../setting.pri) + +DEFINES += NM_DATA_LIBRARY + +INCLUDEPATH += $${wtInclude}/iBase +INCLUDEPATH += $${wtInclude}/iBase/iBase +INCLUDEPATH += $${wtInclude}/iBase/Interface +INCLUDEPATH += $${wtInclude}/iBase/iDefines +INCLUDEPATH += $${wtInclude}/iBase/iUtils +INCLUDEPATH += $${wtInclude}/iBase/iLogs +INCLUDEPATH += $${wtInclude}/iBase/iUnit + +INCLUDEPATH += $${wtInclude}/iData +INCLUDEPATH += $${wtInclude}/iData/iDataPool +INCLUDEPATH += $${wtInclude}/iData/iDataEngine +INCLUDEPATH += $${wtInclude}/iData/iXmlManager +INCLUDEPATH += $${wtInclude}/iData/iXmlManager/Models +INCLUDEPATH += $${wtInclude}/iData/iSysUtils + +INCLUDEPATH += $${wtInclude}/mData +INCLUDEPATH += $${wtInclude}/mData/mModuleDefines +INCLUDEPATH += $${wtInclude}/mData/mProjectManager +INCLUDEPATH += $${wtInclude}/mData/mProjectManager/DataModels + +INCLUDEPATH += $${wtInclude}/nmNum/nmData + +SOURCES += $${wtSrc}/nmNum/nmData/*.cpp +HEADERS += $${wtInclude}/nmNum/nmData/*.h + +LIBS += -liBase -liUtils -liLogs -liUnit +LIBS += -liDataPool +LIBS += -lmProjectManager diff --git a/Src4/nmNum/nmData/nmData.vcxproj b/Src4/nmNum/nmData/nmData.vcxproj new file mode 100644 index 0000000..e0444b5 --- /dev/null +++ b/Src4/nmNum/nmData/nmData.vcxproj @@ -0,0 +1,152 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {48F3293F-2F84-324C-9CFF-836C19DCACDC} + nmData + Qt4VSv1.0 + + + + ..\..\..\Bin\Debug\ + false + NotSet + DynamicLibrary + debug\ + nmData + + + ..\..\..\Bin\Release\ + false + NotSet + DynamicLibrary + release\ + nmData + + + + + + + + + + + + ..\..\..\Bin\Debug\ + $(Platform)\$(Configuration) + nmData + true + ..\..\..\Bin\Release\ + $(Platform)\$(Configuration) + nmData + true + false + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include\QtXml";"$(QTDIR)\include\QtSql";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iData";"..\..\..\Include\iData\iDataPool";"..\..\..\Include\iData\iDataEngine";"..\..\..\Include\iData\iXmlManager";"..\..\..\Include\iData\iXmlManager\Models";"..\..\..\Include\iData\iSysUtils";"..\..\..\Include\mData";"..\..\..\Include\mData\mModuleDefines";"..\..\..\Include\mData\mProjectManager";"..\..\..\Include\mData\mProjectManager\DataModels";"..\..\..\Include\nmNum\nmData";"$(QTDIR)\include\ActiveQt";"debug";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + debug\ + false + false + ProgramDatabase + Sync + $(IntDir) + Disabled + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_DATA_LIBRARY;QT_DLL;QT_SQL_LIB;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDebugDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Debug\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iDataPool.lib;E:/Run/mWTAI/Src4/../Bin/Debug\mProjectManager.lib;$(QTDIR)\lib\QtSqld4.lib;$(QTDIR)\lib\QtXmld4.lib;$(QTDIR)\lib\QtGuid4.lib;$(QTDIR)\lib\QtCored4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Debug;%(AdditionalLibraryDirectories) + true + true + true + true + $(OutDir)\nmData.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_DATA_LIBRARY;QT_DLL;QT_SQL_LIB;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include\QtXml";"$(QTDIR)\include\QtSql";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iData";"..\..\..\Include\iData\iDataPool";"..\..\..\Include\iData\iDataEngine";"..\..\..\Include\iData\iXmlManager";"..\..\..\Include\iData\iXmlManager\Models";"..\..\..\Include\iData\iSysUtils";"..\..\..\Include\mData";"..\..\..\Include\mData\mModuleDefines";"..\..\..\Include\mData\mProjectManager";"..\..\..\Include\mData\mProjectManager\DataModels";"..\..\..\Include\nmNum\nmData";"$(QTDIR)\include\ActiveQt";"release";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + release\ + false + false + ProgramDatabase + Sync + $(IntDir) + MaxSpeed + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_DATA_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_SQL_LIB;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Release\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Release\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Release\iDataPool.lib;E:/Run/mWTAI/Src4/../Bin/Release\mProjectManager.lib;$(QTDIR)\lib\QtSql4.lib;$(QTDIR)\lib\QtXml4.lib;$(QTDIR)\lib\QtGui4.lib;$(QTDIR)\lib\QtCore4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Release;%(AdditionalLibraryDirectories) + true + true + true + true + false + $(OutDir)\nmData.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_DATA_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_SQL_LIB;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Src4/nmNum/nmData/nmData.vcxproj.filters b/Src4/nmNum/nmData/nmData.vcxproj.filters new file mode 100644 index 0000000..1d5f9b9 --- /dev/null +++ b/Src4/nmNum/nmData/nmData.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Src4/nmNum/nmNum.pro b/Src4/nmNum/nmNum.pro new file mode 100644 index 0000000..7008a26 --- /dev/null +++ b/Src4/nmNum/nmNum.pro @@ -0,0 +1,15 @@ +## /////////////////////////////////////// +## ⼯ ҪֵԾ֣nm⣬Numerical +## /////////////////////////////////////// + +TEMPLATE = subdirs +include(../functions.pri) + +addSubdirs(nmData) +addSubdirs(nmPlot) +addSubdirs(nmSubWnd) +addSubdirs(nmSubWxs) +addSubdirs(nmXml) + + +fixDepends() diff --git a/Src4/nmNum/nmNum.sln b/Src4/nmNum/nmNum.sln new file mode 100644 index 0000000..9412b67 --- /dev/null +++ b/Src4/nmNum/nmNum.sln @@ -0,0 +1,50 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmData", "E:/Run/cmWTAI/nmWTAI/Src4/nmNum/nmData\nmData.vcxproj", "{7905AD21-852A-3CAE-99DE-D6857886273F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmPlot", "E:/Run/cmWTAI/nmWTAI/Src4/nmNum/nmPlot\nmPlot.vcxproj", "{950FD3B5-F13E-3CA1-8144-2759E600302C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmSubWnd", "E:/Run/cmWTAI/nmWTAI/Src4/nmNum/nmSubWnd\nmSubWnd.vcxproj", "{D12584CF-4B28-3329-99D4-DD71B754C41D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmSubWxs", "E:/Run/cmWTAI/nmWTAI/Src4/nmNum/nmSubWxs\nmSubWxs.vcxproj", "{0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmXml", "E:/Run/cmWTAI/nmWTAI/Src4/nmNum/nmXml\nmXml.vcxproj", "{E54962C0-1708-330A-9A64-4C1675B0396B}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug|Win32 + ConfigName.1 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + {D12584CF-4B28-3329-99D4-DD71B754C41D}.0 = {7905AD21-852A-3CAE-99DE-D6857886273F} + {D12584CF-4B28-3329-99D4-DD71B754C41D}.1 = {E54962C0-1708-330A-9A64-4C1675B0396B} + {D12584CF-4B28-3329-99D4-DD71B754C41D}.2 = {950FD3B5-F13E-3CA1-8144-2759E600302C} + {D12584CF-4B28-3329-99D4-DD71B754C41D}.3 = {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C} + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {7905AD21-852A-3CAE-99DE-D6857886273F}.Debug|Win32.ActiveCfg = Debug|Win32 + {7905AD21-852A-3CAE-99DE-D6857886273F}.Debug|Win32.Build.0 = Debug|Win32 + {7905AD21-852A-3CAE-99DE-D6857886273F}.Release|Win32.ActiveCfg = Release|Win32 + {7905AD21-852A-3CAE-99DE-D6857886273F}.Release|Win32.Build.0 = Release|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Debug|Win32.ActiveCfg = Debug|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Debug|Win32.Build.0 = Debug|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Release|Win32.ActiveCfg = Release|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Release|Win32.Build.0 = Release|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Debug|Win32.ActiveCfg = Debug|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Debug|Win32.Build.0 = Debug|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Release|Win32.ActiveCfg = Release|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Release|Win32.Build.0 = Release|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Debug|Win32.ActiveCfg = Debug|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Debug|Win32.Build.0 = Debug|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Release|Win32.ActiveCfg = Release|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Release|Win32.Build.0 = Release|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Debug|Win32.ActiveCfg = Debug|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Debug|Win32.Build.0 = Debug|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Release|Win32.ActiveCfg = Release|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/Src4/nmNum/nmPlot/nmPlot.pro b/Src4/nmNum/nmPlot/nmPlot.pro new file mode 100644 index 0000000..26f54ea --- /dev/null +++ b/Src4/nmNum/nmPlot/nmPlot.pro @@ -0,0 +1,48 @@ +## /////////////////////////////////////// +## Ҫ ֵԾ +## ͼ +## /////////////////////////////////////// + +QT += core + +greaterThan(QT_MAJOR_VERSION, 4) : QT += printsupport +#greaterThan(QT_MAJOR_VERSION, 4) : QT += axcontainer printsupport +#lessThan(QT_MAJOR_VERSION, 5) : CONFIG += qaxcontainer +TARGET = nmPlot +TEMPLATE = lib + +include(../../setting.pri) + +DEFINES += NM_PLOT_LIBRARY + +INCLUDEPATH += $${wtInclude}/iBase +INCLUDEPATH += $${wtInclude}/iBase/iBase +INCLUDEPATH += $${wtInclude}/iBase/Interface +INCLUDEPATH += $${wtInclude}/iBase/iDefines +INCLUDEPATH += $${wtInclude}/iBase/iUtils +INCLUDEPATH += $${wtInclude}/iBase/iLogs +INCLUDEPATH += $${wtInclude}/iBase/iUnit + +INCLUDEPATH += $${wtInclude}/iPlot +INCLUDEPATH += $${wtInclude}/iPlot/iPlotbase +INCLUDEPATH += $${wtInclude}/iPlot/iPlotbase/Tools +INCLUDEPATH += $${wtInclude}/iPlot/iPlotCurveT +INCLUDEPATH += $${wtInclude}/iPlot/iPlotCurveT/Objects +INCLUDEPATH += $${wtInclude}/iPlot/iPlotWxT + +INCLUDEPATH += $${wtInclude}/iGui +INCLUDEPATH += $${wtInclude}/iGui/iGuiBase + +INCLUDEPATH += $${wtInclude}/mGui/mGuiPlot + +INCLUDEPATH += $${wtInclude}/nmNum/nmData +INCLUDEPATH += $${wtInclude}/nmNum/nmPlot + +SOURCES += $${wtSrc}/nmNum/nmPlot/*.cpp +HEADERS += $${wtInclude}/nmNum/nmPlot/*.h + +LIBS += -liBase -liUtils -liUnit -liLogs +LIBS += -liPlotBase -liPlotCurveT -liPlotWxT +LIBS += -liGuiBase -lmGuiPlot + + diff --git a/Src4/nmNum/nmPlot/nmPlot.vcxproj b/Src4/nmNum/nmPlot/nmPlot.vcxproj new file mode 100644 index 0000000..89ef240 --- /dev/null +++ b/Src4/nmNum/nmPlot/nmPlot.vcxproj @@ -0,0 +1,320 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {79E5026E-C403-3994-8BB0-8386CCC70E07} + nmPlot + Qt4VSv1.0 + + + + ..\..\..\Bin\Debug\ + false + NotSet + DynamicLibrary + debug\ + nmPlot + + + ..\..\..\Bin\Release\ + false + NotSet + DynamicLibrary + release\ + nmPlot + + + + + + + + + + + + ..\..\..\Bin\Debug\ + $(Platform)\$(Configuration) + nmPlot + true + ..\..\..\Bin\Release\ + $(Platform)\$(Configuration) + nmPlot + true + false + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iPlot";"..\..\..\Include\iPlot\iPlotbase";"..\..\..\Include\iPlot\iPlotbase\Tools";"..\..\..\Include\iPlot\iPlotCurveT";"..\..\..\Include\iPlot\iPlotCurveT\Objects";"..\..\..\Include\iPlot\iPlotWxT";"..\..\..\Include\iGui";"..\..\..\Include\iGui\iGuiBase";"..\..\..\Include\mGui\mGuiPlot";"..\..\..\Include\nmNum\nmData";"..\..\..\Include\nmNum\nmPlot";"$(QTDIR)\include\ActiveQt";"debug";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + debug\ + false + false + ProgramDatabase + Sync + $(IntDir) + Disabled + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_PLOT_LIBRARY;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDebugDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Debug\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlotBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlotCurveT.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlotWxT.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iGuiBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\mGuiPlot.lib;$(QTDIR)\lib\QtGuid4.lib;$(QTDIR)\lib\QtCored4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Debug;%(AdditionalLibraryDirectories) + true + true + true + true + $(OutDir)\nmPlot.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_PLOT_LIBRARY;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iPlot";"..\..\..\Include\iPlot\iPlotbase";"..\..\..\Include\iPlot\iPlotbase\Tools";"..\..\..\Include\iPlot\iPlotCurveT";"..\..\..\Include\iPlot\iPlotCurveT\Objects";"..\..\..\Include\iPlot\iPlotWxT";"..\..\..\Include\iGui";"..\..\..\Include\iGui\iGuiBase";"..\..\..\Include\mGui\mGuiPlot";"..\..\..\Include\nmNum\nmData";"..\..\..\Include\nmNum\nmPlot";"$(QTDIR)\include\ActiveQt";"release";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + release\ + false + false + ProgramDatabase + Sync + $(IntDir) + MaxSpeed + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_PLOT_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Release\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Release\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlotBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlotCurveT.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlotWxT.lib;E:/Run/mWTAI/Src4/../Bin/Release\iGuiBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\mGuiPlot.lib;$(QTDIR)\lib\QtGui4.lib;$(QTDIR)\lib\QtCore4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Release;%(AdditionalLibraryDirectories) + true + true + true + true + false + $(OutDir)\nmPlot.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_PLOT_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + true + + + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmGuiPlot.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmGuiPlot.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmGuiPlotCmdHelper.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmGuiPlotCmdHelper.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjBase.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjBase.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjLine.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjLine.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjLineTool.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjLineTool.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPoint.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPoint.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPointTool.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPointTool.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPolygon.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPolygon.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPolygonTool.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjPolygonTool.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjToolBase.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_PLOT_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmObjToolBase.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + + \ No newline at end of file diff --git a/Src4/nmNum/nmPlot/nmPlot.vcxproj.filters b/Src4/nmNum/nmPlot/nmPlot.vcxproj.filters new file mode 100644 index 0000000..5e75273 --- /dev/null +++ b/Src4/nmNum/nmPlot/nmPlot.vcxproj.filters @@ -0,0 +1,166 @@ + + + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {f3722e1d-9da6-493a-9ac7-aaaacc57191f} + cpp;moc + False + + + {37311501-e8aa-477f-bc16-39451e118a20} + cpp;moc + False + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Src4/nmNum/nmSubWnd/nmSubWnd.pro b/Src4/nmNum/nmSubWnd/nmSubWnd.pro new file mode 100644 index 0000000..b511bcd --- /dev/null +++ b/Src4/nmNum/nmSubWnd/nmSubWnd.pro @@ -0,0 +1,75 @@ +## /////////////////////////////////////// +## Ҫ ֵԾ +## MainFrame㼶 +## /////////////////////////////////////// + +QT += core# xml sql + +greaterThan(QT_MAJOR_VERSION, 4) : QT += printsupport +#greaterThan(QT_MAJOR_VERSION, 4) : QT += axcontainer printsupport +#lessThan(QT_MAJOR_VERSION, 5) : CONFIG += qaxcontainer +TARGET = nmSubWnd +TEMPLATE = lib + +include(../../setting.pri) + +DEFINES += NM_SUB_WND_LIBRARY + +INCLUDEPATH += $${wtInclude}/iBase +INCLUDEPATH += $${wtInclude}/iBase/iBase +INCLUDEPATH += $${wtInclude}/iBase/Interface +INCLUDEPATH += $${wtInclude}/iBase/iDefines +INCLUDEPATH += $${wtInclude}/iBase/iUtils +INCLUDEPATH += $${wtInclude}/iBase/iLogs +INCLUDEPATH += $${wtInclude}/iBase/iPlugin +INCLUDEPATH += $${wtInclude}/iBase/iProperty +INCLUDEPATH += $${wtInclude}/iBase/iUnit +INCLUDEPATH += $${wtInclude}/iBase/iXmlBase + +INCLUDEPATH += $${wtInclude}/iPlot +INCLUDEPATH += $${wtInclude}/iPlot/iPlotbase +INCLUDEPATH += $${wtInclude}/iPlot/iPlotbase/Tools +INCLUDEPATH += $${wtInclude}/iPlot/iPlotCurveT +INCLUDEPATH += $${wtInclude}/iPlot/iPlotCurveT/Objects +INCLUDEPATH += $${wtInclude}/iPlot/iPlotWxT + +INCLUDEPATH += $${wtInclude}/iData +INCLUDEPATH += $${wtInclude}/iData/iDataPool +INCLUDEPATH += $${wtInclude}/iData/iDataEngine +INCLUDEPATH += $${wtInclude}/iData/iXmlManager +INCLUDEPATH += $${wtInclude}/iData/iXmlManager/Models +INCLUDEPATH += $${wtInclude}/iData/iSysUtils + +INCLUDEPATH += $${wtInclude}/mData +INCLUDEPATH += $${wtInclude}/mData/mModuleDefines +INCLUDEPATH += $${wtInclude}/mData/mProjectManager +INCLUDEPATH += $${wtInclude}/mData/mProjectManager/DataModels + +INCLUDEPATH += $${wtInclude}/iGui +INCLUDEPATH += $${wtInclude}/iGui/iGuiBase +INCLUDEPATH += $${wtInclude}/iGui/iGuiGridPty +INCLUDEPATH += $${wtInclude}/iGui/iGuiRibbon +INCLUDEPATH += $${wtInclude}/iGui/iGuiRibbon/iRibbonXml + +INCLUDEPATH += $${wtInclude}/mGui +INCLUDEPATH += $${wtInclude}/mGui/mGuiTree +INCLUDEPATH += $${wtInclude}/mGui/mGuiTree/TreeWx +INCLUDEPATH += $${wtInclude}/mGui/mGuiPlot +INCLUDEPATH += $${wtInclude}/mGui/mSubWnd + +INCLUDEPATH += $${wtInclude}/nmNum/nmData +INCLUDEPATH += $${wtInclude}/nmNum/nmPlot +INCLUDEPATH += $${wtInclude}/nmNum/nmXml +INCLUDEPATH += $${wtInclude}/nmNum/nmSubWxs +INCLUDEPATH += $${wtInclude}/nmNum/nmSubWnd + +SOURCES += $${wtSrc}/nmNum/nmSubWnd/*.cpp +HEADERS += $${wtInclude}/nmNum/nmSubWnd/*.h + +LIBS += -liBase -liUtils -liPlugin -liLogs -liProperty -liUnit -liXmlBase +LIBS += -liPlotBase -liPlotCurveT -liPlotWxT +LIBS += -liDataPool -liSysUtils +LIBS += -liGuiBase -liGuiGridPty -lmGuiTree -lmGuiPlot -liGuiRibbon +LIBS += -lmProjectManager -lmSubWnd +LIBS += -lnmData -lnmXml -lnmPlot -lnmSubWxs + diff --git a/Src4/nmNum/nmSubWnd/nmSubWnd.vcxproj b/Src4/nmNum/nmSubWnd/nmSubWnd.vcxproj new file mode 100644 index 0000000..c937857 --- /dev/null +++ b/Src4/nmNum/nmSubWnd/nmSubWnd.vcxproj @@ -0,0 +1,568 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {8CB94CEC-8CB2-35D5-B559-5821A7FEA6AA} + nmSubWnd + Qt4VSv1.0 + + + + ..\..\..\Bin\Debug\ + false + NotSet + DynamicLibrary + debug\ + nmSubWnd + + + ..\..\..\Bin\Release\ + false + NotSet + DynamicLibrary + release\ + nmSubWnd + + + + + + + + + + + + ..\..\..\Bin\Debug\ + $(Platform)\$(Configuration) + nmSubWnd + true + ..\..\..\Bin\Release\ + $(Platform)\$(Configuration) + nmSubWnd + true + false + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iPlugin";"..\..\..\Include\iBase\iProperty";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iBase\iXmlBase";"..\..\..\Include\iPlot";"..\..\..\Include\iPlot\iPlotbase";"..\..\..\Include\iPlot\iPlotbase\Tools";"..\..\..\Include\iPlot\iPlotCurveT";"..\..\..\Include\iPlot\iPlotCurveT\Objects";"..\..\..\Include\iPlot\iPlotWxT";"..\..\..\Include\iData";"..\..\..\Include\iData\iDataPool";"..\..\..\Include\iData\iDataEngine";"..\..\..\Include\iData\iXmlManager";"..\..\..\Include\iData\iXmlManager\Models";"..\..\..\Include\iData\iSysUtils";"..\..\..\Include\mData";"..\..\..\Include\mData\mModuleDefines";"..\..\..\Include\mData\mProjectManager";"..\..\..\Include\mData\mProjectManager\DataModels";"..\..\..\Include\iGui";"..\..\..\Include\iGui\iGuiBase";"..\..\..\Include\iGui\iGuiGridPty";"..\..\..\Include\iGui\iGuiRibbon";"..\..\..\Include\iGui\iGuiRibbon\iRibbonXml";"..\..\..\Include\mGui";"..\..\..\Include\mGui\mGuiTree";"..\..\..\Include\mGui\mGuiTree\TreeWx";"..\..\..\Include\mGui\mGuiPlot";"..\..\..\Include\mGui\mSubWnd";"..\..\..\Include\nmNum\nmData";"..\..\..\Include\nmNum\nmPlot";"..\..\..\Include\nmNum\nmXml";"..\..\..\Include\nmNum\nmSubWxs";"..\..\..\Include\nmNum\nmSubWnd";"$(QTDIR)\include\ActiveQt";"debug";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + debug\ + false + false + ProgramDatabase + Sync + $(IntDir) + Disabled + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_SUB_WND_LIBRARY;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDebugDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Debug\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlugin.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iProperty.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iXmlBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlotBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlotCurveT.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlotWxT.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iDataPool.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iSysUtils.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iGuiBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iGuiGridPty.lib;E:/Run/mWTAI/Src4/../Bin/Debug\mGuiTree.lib;E:/Run/mWTAI/Src4/../Bin/Debug\mGuiPlot.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iGuiRibbon.lib;E:/Run/mWTAI/Src4/../Bin/Debug\mProjectManager.lib;E:/Run/mWTAI/Src4/../Bin/Debug\mSubWnd.lib;E:/Run/mWTAI/Src4/../Bin/Debug\nmData.lib;E:/Run/mWTAI/Src4/../Bin/Debug\nmXml.lib;E:/Run/mWTAI/Src4/../Bin/Debug\nmPlot.lib;E:/Run/mWTAI/Src4/../Bin/Debug\nmSubWxs.lib;$(QTDIR)\lib\QtGuid4.lib;$(QTDIR)\lib\QtCored4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Debug;%(AdditionalLibraryDirectories) + true + true + true + true + $(OutDir)\nmSubWnd.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_SUB_WND_LIBRARY;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iPlugin";"..\..\..\Include\iBase\iProperty";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iBase\iXmlBase";"..\..\..\Include\iPlot";"..\..\..\Include\iPlot\iPlotbase";"..\..\..\Include\iPlot\iPlotbase\Tools";"..\..\..\Include\iPlot\iPlotCurveT";"..\..\..\Include\iPlot\iPlotCurveT\Objects";"..\..\..\Include\iPlot\iPlotWxT";"..\..\..\Include\iData";"..\..\..\Include\iData\iDataPool";"..\..\..\Include\iData\iDataEngine";"..\..\..\Include\iData\iXmlManager";"..\..\..\Include\iData\iXmlManager\Models";"..\..\..\Include\iData\iSysUtils";"..\..\..\Include\mData";"..\..\..\Include\mData\mModuleDefines";"..\..\..\Include\mData\mProjectManager";"..\..\..\Include\mData\mProjectManager\DataModels";"..\..\..\Include\iGui";"..\..\..\Include\iGui\iGuiBase";"..\..\..\Include\iGui\iGuiGridPty";"..\..\..\Include\iGui\iGuiRibbon";"..\..\..\Include\iGui\iGuiRibbon\iRibbonXml";"..\..\..\Include\mGui";"..\..\..\Include\mGui\mGuiTree";"..\..\..\Include\mGui\mGuiTree\TreeWx";"..\..\..\Include\mGui\mGuiPlot";"..\..\..\Include\mGui\mSubWnd";"..\..\..\Include\nmNum\nmData";"..\..\..\Include\nmNum\nmPlot";"..\..\..\Include\nmNum\nmXml";"..\..\..\Include\nmNum\nmSubWxs";"..\..\..\Include\nmNum\nmSubWnd";"$(QTDIR)\include\ActiveQt";"release";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + release\ + false + false + ProgramDatabase + Sync + $(IntDir) + MaxSpeed + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_SUB_WND_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Release\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlugin.lib;E:/Run/mWTAI/Src4/../Bin/Release\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Release\iProperty.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Release\iXmlBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlotBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlotCurveT.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlotWxT.lib;E:/Run/mWTAI/Src4/../Bin/Release\iDataPool.lib;E:/Run/mWTAI/Src4/../Bin/Release\iSysUtils.lib;E:/Run/mWTAI/Src4/../Bin/Release\iGuiBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iGuiGridPty.lib;E:/Run/mWTAI/Src4/../Bin/Release\mGuiTree.lib;E:/Run/mWTAI/Src4/../Bin/Release\mGuiPlot.lib;E:/Run/mWTAI/Src4/../Bin/Release\iGuiRibbon.lib;E:/Run/mWTAI/Src4/../Bin/Release\mProjectManager.lib;E:/Run/mWTAI/Src4/../Bin/Release\mSubWnd.lib;E:/Run/mWTAI/Src4/../Bin/Release\nmData.lib;E:/Run/mWTAI/Src4/../Bin/Release\nmXml.lib;E:/Run/mWTAI/Src4/../Bin/Release\nmPlot.lib;E:/Run/mWTAI/Src4/../Bin/Release\nmSubWxs.lib;$(QTDIR)\lib\QtGui4.lib;$(QTDIR)\lib\QtCore4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Release;%(AdditionalLibraryDirectories) + true + true + true + true + false + $(OutDir)\nmSubWnd.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_SUB_WND_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + + + + + true + + + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + %40echo -I$(QTDIR)\include/QtCore> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/QtGui>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I.>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/Interface>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iDefines>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUtils>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iLogs>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iPlugin>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iProperty>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUnit>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iXmlBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase/Tools>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT/Objects>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotWxT>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataPool>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataEngine>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager/Models>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iSysUtils>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mModuleDefines>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager/DataModels>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiGridPty>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon/iRibbonXml>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree/TreeWx>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiPlot>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mSubWnd>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmData>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmPlot>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmXml>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWxs>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWnd>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd +"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_SUB_WND_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iPlugin" "-I.\..\..\..\Include\iBase\iProperty" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iBase\iXmlBase" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iData" "-I.\..\..\..\Include\iData\iDataPool" "-I.\..\..\..\Include\iData\iDataEngine" "-I.\..\..\..\Include\iData\iXmlManager" "-I.\..\..\..\Include\iData\iXmlManager\Models" "-I.\..\..\..\Include\iData\iSysUtils" "-I.\..\..\..\Include\mData" "-I.\..\..\..\Include\mData\mModuleDefines" "-I.\..\..\..\Include\mData\mProjectManager" "-I.\..\..\..\Include\mData\mProjectManager\DataModels" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\iGui\iGuiGridPty" "-I.\..\..\..\Include\iGui\iGuiRibbon" "-I.\..\..\..\Include\iGui\iGuiRibbon\iRibbonXml" "-I.\..\..\..\Include\mGui" "-I.\..\..\..\Include\mGui\mGuiTree" "-I.\..\..\..\Include\mGui\mGuiTree\TreeWx" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\mGui\mSubWnd" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I.\..\..\..\Include\nmNum\nmXml" "-I.\..\..\..\Include\nmNum\nmSubWxs" "-I.\..\..\..\Include\nmNum\nmSubWnd" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmSubWndDemo.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + %40echo -I$(QTDIR)\include/QtCore> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/QtGui>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I.>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/Interface>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iDefines>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUtils>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iLogs>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iPlugin>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iProperty>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUnit>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iXmlBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase/Tools>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT/Objects>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotWxT>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataPool>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataEngine>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager/Models>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iSysUtils>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mModuleDefines>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager/DataModels>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiGridPty>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon/iRibbonXml>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree/TreeWx>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiPlot>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mSubWnd>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmData>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmPlot>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmXml>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWxs>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWnd>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd +"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_SUB_WND_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iPlugin" "-I.\..\..\..\Include\iBase\iProperty" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iBase\iXmlBase" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iData" "-I.\..\..\..\Include\iData\iDataPool" "-I.\..\..\..\Include\iData\iDataEngine" "-I.\..\..\..\Include\iData\iXmlManager" "-I.\..\..\..\Include\iData\iXmlManager\Models" "-I.\..\..\..\Include\iData\iSysUtils" "-I.\..\..\..\Include\mData" "-I.\..\..\..\Include\mData\mModuleDefines" "-I.\..\..\..\Include\mData\mProjectManager" "-I.\..\..\..\Include\mData\mProjectManager\DataModels" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\iGui\iGuiGridPty" "-I.\..\..\..\Include\iGui\iGuiRibbon" "-I.\..\..\..\Include\iGui\iGuiRibbon\iRibbonXml" "-I.\..\..\..\Include\mGui" "-I.\..\..\..\Include\mGui\mGuiTree" "-I.\..\..\..\Include\mGui\mGuiTree\TreeWx" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\mGui\mSubWnd" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I.\..\..\..\Include\nmNum\nmXml" "-I.\..\..\..\Include\nmNum\nmSubWxs" "-I.\..\..\..\Include\nmNum\nmSubWnd" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmSubWndDemo.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + %40echo -I$(QTDIR)\include/QtCore> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/QtGui>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I.>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/Interface>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iDefines>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUtils>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iLogs>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iPlugin>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iProperty>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUnit>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iXmlBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase/Tools>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT/Objects>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotWxT>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataPool>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataEngine>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager/Models>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iSysUtils>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mModuleDefines>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager/DataModels>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiBase>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiGridPty>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon/iRibbonXml>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree/TreeWx>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiPlot>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mSubWnd>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmData>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmPlot>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmXml>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWxs>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWnd>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> debug/mocinclude.tmp +if errorlevel 1 goto VCEnd +"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_SUB_WND_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iPlugin" "-I.\..\..\..\Include\iBase\iProperty" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iBase\iXmlBase" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iData" "-I.\..\..\..\Include\iData\iDataPool" "-I.\..\..\..\Include\iData\iDataEngine" "-I.\..\..\..\Include\iData\iXmlManager" "-I.\..\..\..\Include\iData\iXmlManager\Models" "-I.\..\..\..\Include\iData\iSysUtils" "-I.\..\..\..\Include\mData" "-I.\..\..\..\Include\mData\mModuleDefines" "-I.\..\..\..\Include\mData\mProjectManager" "-I.\..\..\..\Include\mData\mProjectManager\DataModels" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\iGui\iGuiGridPty" "-I.\..\..\..\Include\iGui\iGuiRibbon" "-I.\..\..\..\Include\iGui\iGuiRibbon\iRibbonXml" "-I.\..\..\..\Include\mGui" "-I.\..\..\..\Include\mGui\mGuiTree" "-I.\..\..\..\Include\mGui\mGuiTree\TreeWx" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\mGui\mSubWnd" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I.\..\..\..\Include\nmNum\nmXml" "-I.\..\..\..\Include\nmNum\nmSubWxs" "-I.\..\..\..\Include\nmNum\nmSubWnd" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmSubWndUtils.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + %40echo -I$(QTDIR)\include/QtCore> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/QtGui>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I.>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/Interface>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iDefines>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUtils>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iLogs>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iPlugin>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iProperty>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iUnit>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iBase/iXmlBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotbase/Tools>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotCurveT/Objects>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iPlot/iPlotWxT>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataPool>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iDataEngine>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iXmlManager/Models>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iData/iSysUtils>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mModuleDefines>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mData/mProjectManager/DataModels>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiBase>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiGridPty>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/iGui/iGuiRibbon/iRibbonXml>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiTree/TreeWx>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mGuiPlot>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/mGui/mSubWnd>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmData>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmPlot>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmXml>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWxs>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -IE:/Run/mWTAI/Src4/../Include/nmNum/nmSubWnd>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd + %40echo -I$(QTDIR)\include/ActiveQt>> release/mocinclude.tmp +if errorlevel 1 goto VCEnd +"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_SUB_WND_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iPlugin" "-I.\..\..\..\Include\iBase\iProperty" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iBase\iXmlBase" "-I.\..\..\..\Include\iPlot" "-I.\..\..\..\Include\iPlot\iPlotbase" "-I.\..\..\..\Include\iPlot\iPlotbase\Tools" "-I.\..\..\..\Include\iPlot\iPlotCurveT" "-I.\..\..\..\Include\iPlot\iPlotCurveT\Objects" "-I.\..\..\..\Include\iPlot\iPlotWxT" "-I.\..\..\..\Include\iData" "-I.\..\..\..\Include\iData\iDataPool" "-I.\..\..\..\Include\iData\iDataEngine" "-I.\..\..\..\Include\iData\iXmlManager" "-I.\..\..\..\Include\iData\iXmlManager\Models" "-I.\..\..\..\Include\iData\iSysUtils" "-I.\..\..\..\Include\mData" "-I.\..\..\..\Include\mData\mModuleDefines" "-I.\..\..\..\Include\mData\mProjectManager" "-I.\..\..\..\Include\mData\mProjectManager\DataModels" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\iGui\iGuiGridPty" "-I.\..\..\..\Include\iGui\iGuiRibbon" "-I.\..\..\..\Include\iGui\iGuiRibbon\iRibbonXml" "-I.\..\..\..\Include\mGui" "-I.\..\..\..\Include\mGui\mGuiTree" "-I.\..\..\..\Include\mGui\mGuiTree\TreeWx" "-I.\..\..\..\Include\mGui\mGuiPlot" "-I.\..\..\..\Include\mGui\mSubWnd" "-I.\..\..\..\Include\nmNum\nmData" "-I.\..\..\..\Include\nmNum\nmPlot" "-I.\..\..\..\Include\nmNum\nmXml" "-I.\..\..\..\Include\nmNum\nmSubWxs" "-I.\..\..\..\Include\nmNum\nmSubWnd" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmSubWndUtils.h... + $(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + + + + true + + + true + + + true + + + + + + + + + + \ No newline at end of file diff --git a/Src4/nmNum/nmSubWnd/nmSubWnd.vcxproj.filters b/Src4/nmNum/nmSubWnd/nmSubWnd.vcxproj.filters new file mode 100644 index 0000000..092d0fb --- /dev/null +++ b/Src4/nmNum/nmSubWnd/nmSubWnd.vcxproj.filters @@ -0,0 +1,70 @@ + + + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8d545b87-cac0-419c-9f43-626f8ed83c91} + cpp;moc + False + + + {d1b65366-e1a4-4a28-bbf2-5f667004f5d2} + cpp;moc + False + + + + + Source Files + + + Source Files + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Src4/nmNum/nmSubWxs/nmSubWxs.pro b/Src4/nmNum/nmSubWxs/nmSubWxs.pro new file mode 100644 index 0000000..f21798b --- /dev/null +++ b/Src4/nmNum/nmSubWxs/nmSubWxs.pro @@ -0,0 +1,48 @@ +## /////////////////////////////////////// +## Ҫ ֵԾ +## ҪһЩԻ֮ +## /////////////////////////////////////// + +QT += core + +greaterThan(QT_MAJOR_VERSION, 4) : QT += printsupport +#greaterThan(QT_MAJOR_VERSION, 4) : QT += axcontainer printsupport +#lessThan(QT_MAJOR_VERSION, 5) : CONFIG += qaxcontainer +TARGET = nmSubWxs +TEMPLATE = lib + +include(../../setting.pri) + +DEFINES += NM_SUB_WXS_LIBRARY + +INCLUDEPATH += $${wtInclude}/iBase +INCLUDEPATH += $${wtInclude}/iBase/iBase +INCLUDEPATH += $${wtInclude}/iBase/Interface +INCLUDEPATH += $${wtInclude}/iBase/iDefines +INCLUDEPATH += $${wtInclude}/iBase/iUtils +INCLUDEPATH += $${wtInclude}/iBase/iLogs +INCLUDEPATH += $${wtInclude}/iBase/iPlugin +INCLUDEPATH += $${wtInclude}/iBase/iUnit +INCLUDEPATH += $${wtInclude}/iBase/iXmlBase + +INCLUDEPATH += $${wtInclude}/iData +#INCLUDEPATH += $${wtInclude}/iData/iDataPool +INCLUDEPATH += $${wtInclude}/iData/iXmlManager +INCLUDEPATH += $${wtInclude}/iData/iXmlManager/Models +INCLUDEPATH += $${wtInclude}/iData/iSysUtils + +INCLUDEPATH += $${wtInclude}/iGui +INCLUDEPATH += $${wtInclude}/iGui/iGuiBase +INCLUDEPATH += $${wtInclude}/iGui/iGuiGridPty + +INCLUDEPATH += $${wtInclude}/nmNum +INCLUDEPATH += $${wtInclude}/nmNum/nmSubWxs +INCLUDEPATH += $${wtInclude}/nmNum/nmSubWxs/SubWxs + +SOURCES += $${wtSrc}/nmNum/nmSubWxs/*.cpp +HEADERS += $${wtInclude}/nmNum/nmSubWxs/*.h +#FORMS += $${wtSrc}/nmNum/nmSubWxs/SubWxs/*.ui + +LIBS += -liBase -liUtils -liPlugin -liLogs -liUnit -liXmlBase +LIBS += -liGuiBase -liGuiGridPty +LIBS += -liSysUtils #-liDataPool diff --git a/Src4/nmNum/nmSubWxs/nmSubWxs.vcxproj b/Src4/nmNum/nmSubWxs/nmSubWxs.vcxproj new file mode 100644 index 0000000..7a27e66 --- /dev/null +++ b/Src4/nmNum/nmSubWxs/nmSubWxs.vcxproj @@ -0,0 +1,165 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {2B971AA3-7A15-3193-A87F-62F43F32EB2A} + nmSubWxs + Qt4VSv1.0 + + + + ..\..\..\Bin\Debug\ + false + NotSet + DynamicLibrary + debug\ + nmSubWxs + + + ..\..\..\Bin\Release\ + false + NotSet + DynamicLibrary + release\ + nmSubWxs + + + + + + + + + + + + ..\..\..\Bin\Debug\ + $(Platform)\$(Configuration) + nmSubWxs + true + ..\..\..\Bin\Release\ + $(Platform)\$(Configuration) + nmSubWxs + true + false + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iPlugin";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iBase\iXmlBase";"..\..\..\Include\iData";"..\..\..\Include\iData\iDataPool";"..\..\..\Include\iData\iXmlManager";"..\..\..\Include\iData\iXmlManager\Models";"..\..\..\Include\iData\iSysUtils";"..\..\..\Include\iGui";"..\..\..\Include\iGui\iGuiBase";"..\..\..\Include\iGui\iGuiGridPty";"..\..\..\Include\nmNum";"..\..\..\Include\nmNum\nmSubWxs";"e:\Run\mWTAI\Src4\..\Include\nmNum\nmSubWxs\SubWxs";"$(QTDIR)\include\ActiveQt";"debug";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + debug\ + false + false + ProgramDatabase + Sync + $(IntDir) + Disabled + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_SUB_WXS_LIBRARY;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDebugDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Debug\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iPlugin.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iXmlBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iGuiBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iGuiGridPty.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iDataPool.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iSysUtils.lib;$(QTDIR)\lib\QtGuid4.lib;$(QTDIR)\lib\QtCored4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Debug;%(AdditionalLibraryDirectories) + true + true + true + true + $(OutDir)\nmSubWxs.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_SUB_WXS_LIBRARY;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iPlugin";"..\..\..\Include\iBase\iUnit";"..\..\..\Include\iBase\iXmlBase";"..\..\..\Include\iData";"..\..\..\Include\iData\iDataPool";"..\..\..\Include\iData\iXmlManager";"..\..\..\Include\iData\iXmlManager\Models";"..\..\..\Include\iData\iSysUtils";"..\..\..\Include\iGui";"..\..\..\Include\iGui\iGuiBase";"..\..\..\Include\iGui\iGuiGridPty";"..\..\..\Include\nmNum";"..\..\..\Include\nmNum\nmSubWxs";"e:\Run\mWTAI\Src4\..\Include\nmNum\nmSubWxs\SubWxs";"$(QTDIR)\include\ActiveQt";"release";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + release\ + false + false + ProgramDatabase + Sync + $(IntDir) + MaxSpeed + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_SUB_WXS_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Release\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Release\iPlugin.lib;E:/Run/mWTAI/Src4/../Bin/Release\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUnit.lib;E:/Run/mWTAI/Src4/../Bin/Release\iXmlBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iGuiBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iGuiGridPty.lib;E:/Run/mWTAI/Src4/../Bin/Release\iDataPool.lib;E:/Run/mWTAI/Src4/../Bin/Release\iSysUtils.lib;$(QTDIR)\lib\QtGui4.lib;$(QTDIR)\lib\QtCore4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Release;%(AdditionalLibraryDirectories) + true + true + true + true + false + $(OutDir)\nmSubWxs.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_SUB_WXS_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + + + + true + + + true + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -D_DEBUG -DNM_SUB_WXS_LIBRARY -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iPlugin" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iBase\iXmlBase" "-I.\..\..\..\Include\iData" "-I.\..\..\..\Include\iData\iDataPool" "-I.\..\..\..\Include\iData\iXmlManager" "-I.\..\..\..\Include\iData\iXmlManager\Models" "-I.\..\..\..\Include\iData\iSysUtils" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\iGui\iGuiGridPty" "-I.\..\..\..\Include\nmNum" "-I.\..\..\..\Include\nmNum\nmSubWxs" "-Ie:\Run\mWTAI\Src4\..\Include\nmNum\nmSubWxs\SubWxs" "-I$(QTDIR)\include\ActiveQt" "-I.\debug" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmWxParaProperty.h... + GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + $(QTDIR)\bin\moc.exe;%(FullPath);%(AdditionalInputs) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DNDEBUG -DNM_SUB_WXS_LIBRARY -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -D_WINDLL "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include" "-I." "-I.\..\..\..\Include" "-I.\..\..\..\Include\iBase" "-I.\..\..\..\Include\iBase\iBase" "-I.\..\..\..\Include\iBase\Interface" "-I.\..\..\..\Include\iBase\iDefines" "-I.\..\..\..\Include\iBase\iUtils" "-I.\..\..\..\Include\iBase\iLogs" "-I.\..\..\..\Include\iBase\iPlugin" "-I.\..\..\..\Include\iBase\iUnit" "-I.\..\..\..\Include\iBase\iXmlBase" "-I.\..\..\..\Include\iData" "-I.\..\..\..\Include\iData\iDataPool" "-I.\..\..\..\Include\iData\iXmlManager" "-I.\..\..\..\Include\iData\iXmlManager\Models" "-I.\..\..\..\Include\iData\iSysUtils" "-I.\..\..\..\Include\iGui" "-I.\..\..\..\Include\iGui\iGuiBase" "-I.\..\..\..\Include\iGui\iGuiGridPty" "-I.\..\..\..\Include\nmNum" "-I.\..\..\..\Include\nmNum\nmSubWxs" "-Ie:\Run\mWTAI\Src4\..\Include\nmNum\nmSubWxs\SubWxs" "-I$(QTDIR)\include\ActiveQt" "-I.\release" "-I$(QTDIR)\mkspecs\default" + Moc%27ing nmWxParaProperty.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp;%(Outputs) + + + + + + + + + + \ No newline at end of file diff --git a/Src4/nmNum/nmSubWxs/nmSubWxs.vcxproj.filters b/Src4/nmNum/nmSubWxs/nmSubWxs.vcxproj.filters new file mode 100644 index 0000000..fe1ef2c --- /dev/null +++ b/Src4/nmNum/nmSubWxs/nmSubWxs.vcxproj.filters @@ -0,0 +1,58 @@ + + + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8bafa67b-2ab3-489a-9b24-dd8ad9dc8aff} + cpp;moc + False + + + {9b4f7d8d-d496-4a06-8b39-9a11fe20e129} + cpp;moc + False + + + + + Source Files + + + Generated Files\Debug + + + Generated Files\Release + + + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Src4/nmNum/nmXml/nmXml.pro b/Src4/nmNum/nmXml/nmXml.pro new file mode 100644 index 0000000..3f58e55 --- /dev/null +++ b/Src4/nmNum/nmXml/nmXml.pro @@ -0,0 +1,33 @@ +## /////////////////////////////////////// +## Ҫ ֵԾ +## XMLļ +## /////////////////////////////////////// + +QT += core xml + +greaterThan(QT_MAJOR_VERSION, 4) : QT += printsupport +#greaterThan(QT_MAJOR_VERSION, 4) : QT += axcontainer printsupport +#lessThan(QT_MAJOR_VERSION, 5) : CONFIG += qaxcontainer + +TARGET = nmXml +TEMPLATE = lib + +include(../../setting.pri) + +DEFINES += NM_XML_LIBRARY + +INCLUDEPATH += $${wtInclude}/iBase +INCLUDEPATH += $${wtInclude}/iBase/iBase +INCLUDEPATH += $${wtInclude}/iBase/Interface +INCLUDEPATH += $${wtInclude}/iBase/iDefines +INCLUDEPATH += $${wtInclude}/iBase/iUtils +INCLUDEPATH += $${wtInclude}/iBase/iLogs +INCLUDEPATH += $${wtInclude}/iBase/iXmlBase + +INCLUDEPATH += $${wtInclude}/nmNum +INCLUDEPATH += $${wtInclude}/nmNum/nmXml + +SOURCES += $${wtSrc}/nmNum/nmXml/*.cpp +HEADERS += $${wtInclude}/nmNum/nmXml/*.h + +LIBS += -liBase -liUtils -liLogs -liXmlBase diff --git a/Src4/nmNum/nmXml/nmXml.vcxproj b/Src4/nmNum/nmXml/nmXml.vcxproj new file mode 100644 index 0000000..0d58f2e --- /dev/null +++ b/Src4/nmNum/nmXml/nmXml.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {3F3D8072-E08C-33B1-A500-3306085413BB} + nmXml + Qt4VSv1.0 + + + + ..\..\..\Bin\Debug\ + false + NotSet + DynamicLibrary + debug\ + nmXml + + + ..\..\..\Bin\Release\ + false + NotSet + DynamicLibrary + release\ + nmXml + + + + + + + + + + + + ..\..\..\Bin\Debug\ + $(Platform)\$(Configuration) + nmXml + true + ..\..\..\Bin\Release\ + $(Platform)\$(Configuration) + nmXml + true + false + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include\QtXml";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iXmlBase";"..\..\..\Include\nmNum";"..\..\..\Include\nmNum\nmXml";"e:\Run\mWTAI\Src4\..\Include\nmNum\nmXml\SubWxs";"$(QTDIR)\include\ActiveQt";"debug";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + debug\ + false + false + ProgramDatabase + Sync + $(IntDir) + Disabled + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_XML_LIBRARY;QT_DLL;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDebugDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Debug\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Debug\iXmlBase.lib;$(QTDIR)\lib\QtXmld4.lib;$(QTDIR)\lib\QtGuid4.lib;$(QTDIR)\lib\QtCored4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Debug;%(AdditionalLibraryDirectories) + true + true + true + true + $(OutDir)\nmXml.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;_DEBUG;NM_XML_LIBRARY;QT_DLL;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + + + "$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtGui";"$(QTDIR)\include\QtXml";"$(QTDIR)\include";".";"..\..\..\Include";"..\..\..\Include\iBase";"..\..\..\Include\iBase\iBase";"..\..\..\Include\iBase\Interface";"..\..\..\Include\iBase\iDefines";"..\..\..\Include\iBase\iUtils";"..\..\..\Include\iBase\iLogs";"..\..\..\Include\iBase\iXmlBase";"..\..\..\Include\nmNum";"..\..\..\Include\nmNum\nmXml";"e:\Run\mWTAI\Src4\..\Include\nmNum\nmXml\SubWxs";"$(QTDIR)\include\ActiveQt";"release";$(QTDIR)\mkspecs\default;%(AdditionalIncludeDirectories) + -Zm200 -w44819 -w44996 -w44100 -w44290 -w44250 -w24101 -we4238 -we4239 -w34100 -w34189 %(AdditionalOptions) + release\ + false + false + ProgramDatabase + Sync + $(IntDir) + MaxSpeed + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_XML_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + false + $(IntDir)vc$(PlatformToolsetVersion).pdb + MultiThreadedDLL + true + true + false + Level3 + + + E:/Run/mWTAI/Src4/../Bin/Release\iBase.lib;E:/Run/mWTAI/Src4/../Bin/Release\iUtils.lib;E:/Run/mWTAI/Src4/../Bin/Release\iLogs.lib;E:/Run/mWTAI/Src4/../Bin/Release\iXmlBase.lib;$(QTDIR)\lib\QtXml4.lib;$(QTDIR)\lib\QtGui4.lib;$(QTDIR)\lib\QtCore4.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\lib;E:/Run/mWTAI/Src4/../Bin/Release;%(AdditionalLibraryDirectories) + true + true + true + true + false + $(OutDir)\nmXml.dll + true + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;NDEBUG;NM_XML_LIBRARY;QT_DLL;QT_NO_DEBUG;QT_XML_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_HAVE_MMX;QT_HAVE_3DNOW;QT_HAVE_SSE;QT_HAVE_MMXEXT;QT_HAVE_SSE2;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Src4/nmNum/nmXml/nmXml.vcxproj.filters b/Src4/nmNum/nmXml/nmXml.vcxproj.filters new file mode 100644 index 0000000..1092ae9 --- /dev/null +++ b/Src4/nmNum/nmXml/nmXml.vcxproj.filters @@ -0,0 +1,46 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Src4/nmWTAI.pro b/Src4/nmWTAI.pro new file mode 100644 index 0000000..b4ec676 --- /dev/null +++ b/Src4/nmWTAI.pro @@ -0,0 +1,24 @@ +## /////////////////////////////////////// +## ⼯Ϊ WTAI֮ ֵԾ +## /////////////////////////////////////// + +TEMPLATE = subdirs +include(./functions.pri) + +addSubdirs(nmNum) #ֵԾ + +fixDepends() + +#Open this to extract Qt words for translation + +#TEMPLATE = subdirs +#include(./functions.pri) + +#TRANSLATIONS = ../Bin/Config/Lang/cn/nmNum_cn.ts + +#SUBDIRS += nmNum/nmData +#SUBDIRS += nmNum/nmNumnmPlot +#SUBDIRS += nmNum/nmNumnmSubWnd +#SUBDIRS += nmNum/nmNumnmSubWxs + +#fixDepends() diff --git a/Src4/nmWTAI.sln b/Src4/nmWTAI.sln new file mode 100644 index 0000000..534622b --- /dev/null +++ b/Src4/nmWTAI.sln @@ -0,0 +1,52 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmData", "nmNum\nmData\nmData.vcxproj", "{7905AD21-852A-3CAE-99DE-D6857886273F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmPlot", "nmNum\nmPlot\nmPlot.vcxproj", "{950FD3B5-F13E-3CA1-8144-2759E600302C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmSubWnd", "nmNum\nmSubWnd\nmSubWnd.vcxproj", "{D12584CF-4B28-3329-99D4-DD71B754C41D}" + ProjectSection(ProjectDependencies) = postProject + {7905AD21-852A-3CAE-99DE-D6857886273F} = {7905AD21-852A-3CAE-99DE-D6857886273F} + {E54962C0-1708-330A-9A64-4C1675B0396B} = {E54962C0-1708-330A-9A64-4C1675B0396B} + {950FD3B5-F13E-3CA1-8144-2759E600302C} = {950FD3B5-F13E-3CA1-8144-2759E600302C} + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C} = {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmSubWxs", "nmNum\nmSubWxs\nmSubWxs.vcxproj", "{0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmXml", "nmNum\nmXml\nmXml.vcxproj", "{E54962C0-1708-330A-9A64-4C1675B0396B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7905AD21-852A-3CAE-99DE-D6857886273F}.Debug|Win32.ActiveCfg = Debug|Win32 + {7905AD21-852A-3CAE-99DE-D6857886273F}.Debug|Win32.Build.0 = Debug|Win32 + {7905AD21-852A-3CAE-99DE-D6857886273F}.Release|Win32.ActiveCfg = Release|Win32 + {7905AD21-852A-3CAE-99DE-D6857886273F}.Release|Win32.Build.0 = Release|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Debug|Win32.ActiveCfg = Debug|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Debug|Win32.Build.0 = Debug|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Release|Win32.ActiveCfg = Release|Win32 + {950FD3B5-F13E-3CA1-8144-2759E600302C}.Release|Win32.Build.0 = Release|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Debug|Win32.ActiveCfg = Debug|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Debug|Win32.Build.0 = Debug|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Release|Win32.ActiveCfg = Release|Win32 + {D12584CF-4B28-3329-99D4-DD71B754C41D}.Release|Win32.Build.0 = Release|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Debug|Win32.ActiveCfg = Debug|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Debug|Win32.Build.0 = Debug|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Release|Win32.ActiveCfg = Release|Win32 + {0DF215D5-2A49-3CAC-BE88-D4DFD5AC4E7C}.Release|Win32.Build.0 = Release|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Debug|Win32.ActiveCfg = Debug|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Debug|Win32.Build.0 = Debug|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Release|Win32.ActiveCfg = Release|Win32 + {E54962C0-1708-330A-9A64-4C1675B0396B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + QtVersion = 4.8.2 + EndGlobalSection +EndGlobal diff --git a/Src4/setting.pri b/Src4/setting.pri new file mode 100644 index 0000000..a018466 --- /dev/null +++ b/Src4/setting.pri @@ -0,0 +1,69 @@ +CONFIG += separate_debug_info + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +lessThan(QT_MAJOR_VERSION, 5): QT += gui + +#qtHaveModule(printsupport): QT += printsupport + +# 代码根目录 +geoHome = $$PWD/.. + +# 常用目录 +wtInclude = $${geoHome}/Include +wtSrc = $${geoHome}/Src +#wtBin = $${geoHome}/Bin +greaterThan(QT_MAJOR_VERSION, 4): wtBin = $${geoHome}/Bin5 +lessThan(QT_MAJOR_VERSION, 5): wtBin = $${geoHome}/Bin + + +CONFIG(debug, debug|release){ + DESTDIR = $${wtBin}/Debug + DEFINES += _DEBUG + win32-msvc*{ + } + else{ + QMAKE_CXXFLAGS += -g # for debugging + QMAKE_CXXFLAGS += -fno-omit-frame-pointer # for debugging + } +} + +CONFIG(release, debug|release) { + DESTDIR = $${wtBin}/Release + DEFINES += NDEBUG + win32-msvc*{ + QMAKE_CXXFLAGS += -Zi + QMAKE_LFLAGS += /DEBUG + } + else{ + QMAKE_CXXFLAGS += -g1 # for debugging + } +} + +win32-msvc*{ + QMAKE_CXXFLAGS += -w44819 # The file contains a character that cannot be represented in the current code page (number) + QMAKE_CXXFLAGS += -w44996 # The compiler encountered a function that was marked with deprecated. + QMAKE_CXXFLAGS += -w44100 # The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored. + QMAKE_CXXFLAGS += -w44290 # C++ exception specification ignored except to indicate a function is not __declspec(nothrow) + QMAKE_CXXFLAGS += -w44250 # inherits xxx via dominance + QMAKE_CXXFLAGS += -w24101 # unreferenced local variable + QMAKE_CXXFLAGS += -we4238 # nonstandard extension used : class rvalue used as lvalue + QMAKE_CXXFLAGS += -we4239 # nonstandard extension used : 'token' : conversion from 'type' to 'type' +}else{ + QMAKE_CXXFLAGS += -std=c++0x + QMAKE_CXXFLAGS += -Wno-unused-parameter # 关闭警告: 未使用的函数形参. 很正常 + QMAKE_CXXFLAGS += -Werror=return-type # treat missing return value as error + QMAKE_CXXFLAGS += -Wno-sign-compare # 关闭警告: 有符号数和无符号数比较. 一般来说是正常的, 特殊情况也容易通过调试查出. + QMAKE_CXXFLAGS += -Wno-reorder # 关闭警告: 类成员初始化顺序和定义顺序不同. 估计99.9%的类都不会有这个问题, 剩下的0.1%也很容易通过调试查出. +} + +win32-g++{ +# CONFIG += silent # may cause jom.exe failed +# QMAKE_LFLAGS += -static -static-libgcc -static-libstdc++ +} + +LIBS += -L$${DESTDIR} # Lib目录和输出目录相同 + +INCLUDEPATH += . +INCLUDEPATH += $${wtInclude} + +# Avoid vorbose warning diff --git a/Src4/wzFileCleanerCS.exe b/Src4/wzFileCleanerCS.exe new file mode 100644 index 0000000..7101aa6 Binary files /dev/null and b/Src4/wzFileCleanerCS.exe differ diff --git a/本文当主要是为了给数值试井部分底层框架包.txt b/本文当主要是为了给数值试井部分底层框架包.txt new file mode 100644 index 0000000..e69de29