Skip to content

Commit 4d2501d

Browse files
authored
feat: setting popmenu (#17)
1 parent ec2d465 commit 4d2501d

File tree

4 files changed

+127
-0
lines changed

4 files changed

+127
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { QuickInputButtons, commands, window } from 'vscode'
2+
import { defineQuickPickItems } from './utils'
3+
import { showTranslatePopmenu } from './translatePopmenu'
4+
import { showSettingsPopmenu } from './settingsPopmenu'
5+
import * as meta from '~/generated-meta'
6+
import type { Context } from '~/context'
7+
8+
export function showClearTranslationCachePopconfirm(ctx: Context) {
9+
const quickPick = window.createQuickPick()
10+
quickPick.title = 'Are you sure to clear translation cache?'
11+
quickPick.matchOnDescription = true
12+
quickPick.matchOnDetail = true
13+
defineQuickPickItems(quickPick, [
14+
{
15+
label: '$(x) No',
16+
detail: 'Cancel',
17+
callback: () => showSettingsPopmenu(ctx),
18+
},
19+
{
20+
label: '$(check) Yes',
21+
detail: 'Clear translation cache',
22+
callback: () => commands.executeCommand(meta.commands.clearTranslationCache).then(() => showTranslatePopmenu(ctx)),
23+
},
24+
])
25+
26+
quickPick.buttons = [
27+
QuickInputButtons.Back,
28+
]
29+
quickPick.onDidTriggerButton((button) => {
30+
if (button === QuickInputButtons.Back)
31+
showSettingsPopmenu(ctx)
32+
})
33+
34+
quickPick.onDidHide(() => {
35+
quickPick.dispose()
36+
showSettingsPopmenu(ctx)
37+
})
38+
quickPick.show()
39+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { QuickInputButtons, window } from 'vscode'
2+
import { showTranslatePopmenu } from './translatePopmenu'
3+
import { showSettingsPopmenu } from './settingsPopmenu'
4+
import { config } from '~/config'
5+
import type { Context } from '~/context'
6+
7+
export function showSetKnownPopularWordInput(ctx: Context) {
8+
const inputBox = window.createInputBox()
9+
inputBox.title = 'Known Popular Words'
10+
inputBox.value = String(config.knownPopularWordCount || 0)
11+
12+
inputBox.onDidAccept(() => {
13+
const count = Number(inputBox.value)
14+
if (Number.isNaN(count)) {
15+
window.showErrorMessage('Invalid number')
16+
return
17+
}
18+
config.knownPopularWordCount = count
19+
showTranslatePopmenu(ctx)
20+
})
21+
22+
inputBox.buttons = [
23+
QuickInputButtons.Back,
24+
]
25+
inputBox.onDidTriggerButton((button) => {
26+
if (button === QuickInputButtons.Back)
27+
showTranslatePopmenu(ctx)
28+
})
29+
30+
inputBox.onDidHide(() => {
31+
inputBox.dispose()
32+
showSettingsPopmenu(ctx)
33+
})
34+
inputBox.show()
35+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { QuickInputButtons, commands, window } from 'vscode'
2+
import { defineQuickPickItems } from './utils'
3+
import { showTranslatePopmenu } from './translatePopmenu'
4+
import { showSetKnownPopularWordInput } from './setKnownPopularWordInput'
5+
import { showClearTranslationCachePopconfirm } from './clearTranslationCachePopconfirm'
6+
import type { Context } from '~/context'
7+
import { translationCacheMap } from '~/model/cache'
8+
import { config } from '~/config'
9+
import * as extMeta from '~/generated-meta'
10+
11+
export function showSettingsPopmenu(ctx: Context) {
12+
const quickPick = window.createQuickPick()
13+
quickPick.title = 'Interline Translate'
14+
let routeJumping = false
15+
quickPick.onDidChangeSelection(() => routeJumping = true)
16+
const numberOfPhrases = Array.from(translationCacheMap.values()).reduce((acc, cache) => acc + cache.size, 0)
17+
defineQuickPickItems(quickPick, [
18+
{
19+
label: '$(mortar-board) Known popular words',
20+
detail: `${config.knownPopularWordCount} words`,
21+
callback: () => showSetKnownPopularWordInput(ctx),
22+
},
23+
{
24+
label: '$(database) Clear translation cache',
25+
detail: `${numberOfPhrases} phrases`,
26+
callback: () => showClearTranslationCachePopconfirm(ctx),
27+
},
28+
{
29+
label: '$(gear) More settings',
30+
detail: 'Configure extension settings',
31+
callback: () => commands.executeCommand('workbench.action.openSettings', extMeta.name).then(() => quickPick.dispose()),
32+
},
33+
])
34+
35+
quickPick.buttons = [QuickInputButtons.Back]
36+
quickPick.onDidTriggerButton((button) => {
37+
if (button === QuickInputButtons.Back)
38+
showTranslatePopmenu(ctx)
39+
})
40+
41+
quickPick.onDidHide(() => {
42+
quickPick.dispose()
43+
if (!routeJumping)
44+
showTranslatePopmenu(ctx)
45+
})
46+
quickPick.show()
47+
}

src/view/quickInput/translatePopmenu.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { QuickPickItemKind, commands, window } from 'vscode'
22
import { defineQuickPickItems } from './utils'
33
import { showSetLanguagePopmenu } from './setLanguagePopmenu'
44
import { showSetTranslationService } from './setTranslationService'
5+
import { showSettingsPopmenu } from './settingsPopmenu'
56
import { config, languageOptions } from '~/config'
67
import type { Context } from '~/context'
78
import { useStore } from '~/store'
@@ -47,6 +48,11 @@ export function showTranslatePopmenu(ctx: Context) {
4748
description: translators[config.translator]?.label || `Unsupported: ${config.translator}`,
4849
callback: () => showSetTranslationService(ctx),
4950
},
51+
{
52+
label: '$(gear) Settings',
53+
description: 'Configure extension settings',
54+
callback: () => showSettingsPopmenu(ctx),
55+
},
5056
])
5157
quickPick.onDidHide(() => quickPick.dispose())
5258
quickPick.show()

0 commit comments

Comments
 (0)