src/Tools/VSCode/extension/src/state_panel.ts
author wenzelm
Tue, 25 Feb 2020 18:30:08 +0100
changeset 71473 be84312a2d53
parent 66395 14146fb264d8
child 71475 7a867a38712a
permissions -rw-r--r--
update to WebviewPanel API, following initial version by Peter Zeller;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     1
'use strict';
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     2
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     3
import * as library from './library'
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     4
import * as protocol from './protocol'
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     5
import { Content_Provider } from './content_provider'
71473
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
     6
import { LanguageClient, VersionedTextDocumentIdentifier } from 'vscode-languageclient';
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
     7
import { Uri, ExtensionContext, workspace, commands, window, Webview, WebviewPanel } from 'vscode'
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     8
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
     9
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    10
/* HTML content */
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    11
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    12
const content_provider = new Content_Provider("isabelle-state")
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    13
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    14
function encode_state(id: number | undefined): Uri | undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    15
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    16
  return id ? content_provider.uri_template.with({ fragment: id.toString() }) : undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    17
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    18
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    19
function decode_state(uri: Uri | undefined): number | undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    20
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    21
  if (uri && uri.scheme === content_provider.uri_scheme) {
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    22
    const id = parseInt(uri.fragment)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    23
    return id ? id : undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    24
  }
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    25
  else undefined
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    26
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    27
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    28
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    29
/* setup */
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    30
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    31
let language_client: LanguageClient
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    32
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    33
export function setup(context: ExtensionContext, client: LanguageClient)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    34
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    35
  context.subscriptions.push(content_provider.register())
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    36
71473
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    37
  var panel: WebviewPanel
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    38
  language_client = client
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    39
  language_client.onNotification(protocol.state_output_type, params =>
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    40
    {
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    41
      const uri = encode_state(params.id)
71473
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    42
      if (!panel) {
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    43
        const column = library.adjacent_editor_column(window.activeTextEditor, true)
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    44
        panel = window.createWebviewPanel(
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    45
          uri.fsPath,
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    46
          "State",
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    47
          column,
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    48
          {
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    49
            enableScripts: true,
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    50
            retainContextWhenHidden: true
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    51
          }
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    52
        );
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    53
      }
71473
be84312a2d53 update to WebviewPanel API, following initial version by Peter Zeller;
wenzelm
parents: 66395
diff changeset
    54
      panel.webview.html = params.content;
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    55
    })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    56
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    57
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    58
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    59
/* commands */
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    60
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    61
export function init(uri: Uri)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    62
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    63
  if (language_client) language_client.sendNotification(protocol.state_init_type)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    64
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    65
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    66
export function exit(id: number)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    67
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    68
  if (language_client) language_client.sendNotification(protocol.state_exit_type, { id: id })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    69
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    70
66395
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    71
export function exit_uri(uri: Uri)
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    72
{
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    73
  const id = decode_state(uri)
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    74
  if (id) exit(id)
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    75
}
14146fb264d8 proper state_panel exit;
wenzelm
parents: 66211
diff changeset
    76
66203
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    77
export function locate(id: number)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    78
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    79
  if (language_client) language_client.sendNotification(protocol.state_locate_type, { id: id })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    80
}
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    81
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    82
export function update(id: number)
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    83
{
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    84
  if (language_client) language_client.sendNotification(protocol.state_update_type, { id: id })
5763d9a2f47d added missing files (cf. 5aa9cb83e70e);
wenzelm
parents:
diff changeset
    85
}
66211
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    86
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    87
export function auto_update(id: number, enabled: boolean)
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    88
{
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    89
  if (language_client)
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    90
    language_client.sendNotification(protocol.state_auto_update_type, { id: id, enabled: enabled })
100c9c997e2b HTML GUI actions via JavaScript;
wenzelm
parents: 66203
diff changeset
    91
}