|
@@ -0,0 +1,175 @@
|
|
|
+import { SItemStatus } from "@saga-web/big/lib/enums/SItemStatus";
|
|
|
+import { SObjectItem, SImageItem, SAnchorItem, STextItem } from '@saga-web/big/lib';
|
|
|
+import { SGraphItem } from '@saga-web/graph/lib/SGraphItem';
|
|
|
+import { STextBaseLine } from '@saga-web/draw/lib/enums/STextBaseLine';
|
|
|
+import { SMouseEvent } from '@saga-web/base/lib/SMouseEvent';
|
|
|
+import { SSize } from '@saga-web/draw/lib/types/SSize';
|
|
|
+import { SPainter } from '@saga-web/draw/lib/SPainter';
|
|
|
+import { SColor } from '@saga-web/draw/lib/SColor';
|
|
|
+import { SRect } from '@saga-web/draw/lib/types/SRect';
|
|
|
+
|
|
|
+/**
|
|
|
+ * 图例item icon
|
|
|
+ *
|
|
|
+ * */
|
|
|
+export class SImgTextItem extends SObjectItem {
|
|
|
+
|
|
|
+ /** item状态 */
|
|
|
+ _status: SItemStatus = SItemStatus.Normal;
|
|
|
+ get status(): SItemStatus {
|
|
|
+ return this._status;
|
|
|
+ }
|
|
|
+ set status(v: SItemStatus) {
|
|
|
+ this._status = v;
|
|
|
+ this.update();
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 是否显示文字 */
|
|
|
+ _showText: boolean = true;
|
|
|
+ get showText(): boolean {
|
|
|
+ return this._showText;
|
|
|
+ }
|
|
|
+ set showText(v: boolean) {
|
|
|
+ if (v === this._showText) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this._showText = v;
|
|
|
+ if (v) {
|
|
|
+ this.textItem.show();
|
|
|
+ } else {
|
|
|
+ this.textItem.hide();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** X轴坐标 */
|
|
|
+ get x(): number {
|
|
|
+ return this.pos.x;
|
|
|
+ } // Get x
|
|
|
+ set x(v: number) {
|
|
|
+ this.pos.x = v;
|
|
|
+ this.$emit("changePos");
|
|
|
+ this.update();
|
|
|
+ } // Set x
|
|
|
+ /** Y轴坐标 */
|
|
|
+ get y(): number {
|
|
|
+ return this.pos.y;
|
|
|
+ } // Get y
|
|
|
+ set y(v: number) {
|
|
|
+ this.pos.y = v;
|
|
|
+ this.$emit("changePos");
|
|
|
+ this.update();
|
|
|
+ } // Set y
|
|
|
+
|
|
|
+ /** 是否显示锚点 */
|
|
|
+ _showAnchor: boolean = false;
|
|
|
+ get showAnchor(): boolean {
|
|
|
+ return this._showAnchor;
|
|
|
+ }
|
|
|
+ set showAnchor(v: boolean) {
|
|
|
+ this._showAnchor = v;
|
|
|
+ this.anchorList.forEach(t => {
|
|
|
+ t.visible = v;
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ get text():string{
|
|
|
+ return this.textItem.text;
|
|
|
+ }
|
|
|
+ set text(v:string){
|
|
|
+ this.textItem.text = v;
|
|
|
+ this.update();
|
|
|
+ }
|
|
|
+
|
|
|
+ /** img Item */
|
|
|
+ img: SImageItem = new SImageItem(this);
|
|
|
+
|
|
|
+ /** text item */
|
|
|
+ textItem: STextItem = new STextItem(this);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构造体
|
|
|
+ *
|
|
|
+ * */
|
|
|
+ constructor(parent: SGraphItem | null) {
|
|
|
+ super(parent);
|
|
|
+ this.img.url = `http://adm.sagacloud.cn:8080/doc/assets/img/logo.png`;
|
|
|
+ this.img.width = 32;
|
|
|
+ this.img.height = 32;
|
|
|
+ let anchorPoint = [{ x: 0, y: this.img.height / 2 }, { x: 0, y: -this.img.height / 2 }, { x: -this.img.width / 2, y: 0 }, { x: this.img.width / 2, y: 0 }];
|
|
|
+ this.anchorList = anchorPoint.map(t => {
|
|
|
+ let item = new SAnchorItem(this);
|
|
|
+ item.moveTo(t.x, t.y);
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+ this.update();
|
|
|
+ this.textItem.text = "请填写文本";
|
|
|
+ this.textItem.moveTo(16, -6);
|
|
|
+ this.moveable = true;
|
|
|
+ this.selectable = true;
|
|
|
+ this.isTransform = false
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 鼠标按下事件
|
|
|
+ *
|
|
|
+ * */
|
|
|
+ onMouseDown(event: SMouseEvent): boolean {
|
|
|
+ console.log(this)
|
|
|
+ if (this.status == SItemStatus.Normal) {
|
|
|
+ return super.onMouseDown(event);
|
|
|
+ } else if (this.status == SItemStatus.Edit) {
|
|
|
+ return super.onMouseDown(event);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ } // Function onMouseDown()
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 宽高发发生变化
|
|
|
+ *
|
|
|
+ * @param oldSize 改之前的大小
|
|
|
+ * @param newSize 改之后大小
|
|
|
+ * */
|
|
|
+ onResize(oldSize: SSize, newSize: SSize) {
|
|
|
+ console.log(arguments);
|
|
|
+ } // Function onResize()
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 鼠标双击事件
|
|
|
+ *
|
|
|
+ * @param event 鼠标事件
|
|
|
+ * @return 是否处理事件
|
|
|
+ * */
|
|
|
+ onDoubleClick(event: SMouseEvent): boolean {
|
|
|
+ this.status = SItemStatus.Edit;
|
|
|
+ return true;
|
|
|
+ } // Function onDoubleClick()
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 宽高发生变化
|
|
|
+ *
|
|
|
+ * @return SRect 所有子对象的并集
|
|
|
+ * */
|
|
|
+ boundingRect(): SRect {
|
|
|
+ let rect: SRect = new SRect();
|
|
|
+ this.children.forEach(t => {
|
|
|
+ if (rect.isNull()) {
|
|
|
+ rect = t.boundingRect().adjusted(t.pos.x, t.pos.y, 0, 0);
|
|
|
+ } else {
|
|
|
+ rect = rect.unioned(t.boundingRect().adjusted(t.pos.x, t.pos.y, 0, 0));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return rect;
|
|
|
+ } // Function boundingRect()
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Item绘制操作
|
|
|
+ *
|
|
|
+ * @param painter painter对象
|
|
|
+ */
|
|
|
+ onDraw(painter: SPainter): void {
|
|
|
+ painter.pen.lineWidth = painter.toPx(1);
|
|
|
+ painter.pen.color = new SColor("#00FF00");
|
|
|
+ painter.brush.color = SColor.Transparent;
|
|
|
+ painter.drawRect(this.boundingRect());
|
|
|
+ } // Function onDraw()
|
|
|
+}
|