diff --git a/media/CircleGraph/index.js b/media/CircleGraph/index.js index 96a6bb21..ed5488cb 100644 --- a/media/CircleGraph/index.js +++ b/media/CircleGraph/index.js @@ -53,6 +53,7 @@ const viewMode = { selector: 1, // circle partition editor node selector visq: 2, // quantization error viewer // refer https://github.com/Samsung/ONE-vscode/issues/1350 + visqselector: 3, // quantization error viewer which is able to select nodes }; host.BrowserHost = class { @@ -97,6 +98,8 @@ host.BrowserHost = class { this._mode = viewMode.selector; } else if (__viewMode === "visq") { this._mode = viewMode.visq; + } else if (__viewMode === "visqselector") { + this._mode = viewMode.visqselector; } } @@ -167,6 +170,9 @@ host.BrowserHost = class { case "visq": this._msgVisq(message); break; + case "scrollToSelected": + this._view.setScrollToSelected(message.value); + break; } }); @@ -263,7 +269,7 @@ host.BrowserHost = class { }); this._view.show("welcome spinner"); - if (this._mode === viewMode.visq) { + if (this._mode === viewMode.visq || this._mode === viewMode.visqselector) { // request visq data prior to model // model is inside visq data vscode.postMessage({ command: "visq" }); diff --git a/media/CircleGraph/view.js b/media/CircleGraph/view.js index 58f50ab8..bba45f77 100644 --- a/media/CircleGraph/view.js +++ b/media/CircleGraph/view.js @@ -542,13 +542,24 @@ view.View = class { } } + /** + * @brief called when it's needed to change scroll behaviour + */ + setScrollToSelected(value) { + this._scrollToSelected = value; + } + /** * @brief toggleSelect will select or toggle select with CtrlKey down * @param viewNode view.Node instance * @note works on host mode is viewMode.selector */ toggleSelect(viewNode) { - if (viewNode && this._host._mode === viewMode.selector) { + if ( + viewNode && + (this._host._mode === viewMode.selector || + this._host._mode === viewMode.visqselector) + ) { if (this._keyCtrl) { // toggle selection let index = this._selectionNodes.indexOf(viewNode); @@ -585,7 +596,10 @@ view.View = class { clearSelection() { this._clearSelection(); - if (host._mode === viewMode.selector) { + if ( + host._mode === viewMode.selector || + this._host._mode === viewMode.visqselector + ) { this._host.onView("selection"); } } @@ -1098,7 +1112,10 @@ view.View = class { } applyStyleSheetVisq(element) { - if (this._host._mode === viewMode.visq) { + if ( + this._host._mode === viewMode.visq || + this._host._mode === viewMode.visqselector + ) { let rules = []; for (const styleSheet of this._host.document.styleSheets) { if (styleSheet.title === "visq_style") { @@ -1503,7 +1520,7 @@ view.Node = class extends grapher.Node { _visq(node) { const host = this.context.view._host; - if (host._mode !== viewMode.visq) { + if (host._mode !== viewMode.visq && host._mode !== viewMode.visqselector) { return; } @@ -1535,7 +1552,7 @@ view.Node = class extends grapher.Node { } } let visqSuffix = undefined; - if (host._mode === viewMode.visq) { + if (host._mode === viewMode.visq || host._mode === viewMode.visqselector) { if (node.visq_index) { let qstyle = `node-item-type-visq-${node.visq_index}`; styles.push(qstyle); @@ -1571,7 +1588,10 @@ view.Node = class extends grapher.Node { if (host._mode === viewMode.viewer || host._mode === viewMode.visq) { title.on("click", () => this.context.view.showNodeProperties(node, null)); - } else if (host._mode === viewMode.selector) { + } else if ( + host._mode === viewMode.selector || + host._mode === viewMode.visqselector + ) { // toggle select with click title.on("click", () => { this.context.view.toggleSelect(this);