-
Notifications
You must be signed in to change notification settings - Fork 310
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
辞書の単語追加・編集UIの単語・読み入力欄で右クリックメニューを使えるようにする #747
Comments
Issue作成ありがとうございます! |
こちらのissueですが、コンテキストメニューは #1374 でやり方が相当変わって、Vueの中で完結するようになったので結構タスクとして簡単になっていると思います。 |
こちら取り組みます! |
実装の参考にしている この二つにおいて切り取りやコピー、貼り付けを行う際に、
よって、どのように実装を進めていいのか分からないため、何かしらのアドバイスをいただけますと嬉しいです。 // AudioCell.vue
const textField = ref<QInput>();
const textFieldSelection = new SelectionHelperForQInput(textField);
// 省略
onClick: async () => {
contextMenu.value?.hide();
if (textFieldSelection.isEmpty) return;
const text = textFieldSelection.getAsString();
const start = textFieldSelection.selectionStart;
setAudioTextBuffer(textFieldSelection.getReplacedStringTo(""));
await nextTick();
navigator.clipboard.writeText(text);
textFieldSelection.setCursorPosition(start);
}, <!-- DictionaryManageDialog.vue -->
<div class="row q-pl-md q-mt-md">
<div class="text-h6">単語</div>
<QInput
ref="surfaceInput"
v-model="surface"
class="word-input"
dense
:disable="uiLocked"
@blur="setSurface(surface)"
@keydown.enter="yomiFocus"
>
<ContextMenu
ref="contextMenu"
:header="contextMenuHeader"
:menudata="contextMenudata"
/>
</QInput>
</div>
<div class="row q-pl-md q-pt-sm">
<div class="text-h6">読み</div>
<QInput
ref="yomiInput"
v-model="yomi"
class="word-input q-pb-none"
dense
:error="!isOnlyHiraOrKana"
:disable="uiLocked"
@blur="setYomi(yomi)"
@keydown.enter="setYomiWhenEnter"
>
<template #error>
読みに使える文字はひらがなとカタカナのみです。
</template>
<ContextMenu
ref="contextMenu"
:header="contextMenuHeader"
:menudata="contextMenudata"
/>
</QInput>
</div> |
https://ja.vuejs.org/guide/reusability/composables |
挑戦ありがとうございます!! おっしゃるとおり、コンポーザブルを使えば可能かもです! もっと簡単な方法として、OS標準の右クリックメニューを使うというのもあります! 右クリックしたときのvue側の処理はこのあたり voicevox/src/components/AudioCell.vue Lines 360 to 363 in ded825f
electron側の処理はこのあたり Lines 808 to 811 in ded825f
以前真っ向からtextFieldに戦いを挑んだのですが、かーーーーーなり難しいので、いつでも引き返して良いと思います!! |
もしかしたら自分が難しく考えてただけかもしれないです。 <QInput @focus="handleFocus('surface')">
<ContextMenu/>
</QInput>
// ...
<QInput @focus="handleFocus('yomi')">
<ContextMenu/>
</QInput>
// ...
// surface と yomi のどちらを選択しているか
const focusInputElement = ref("");
const handleFocus = (inputName: string) => {
focusInputElement.value = inputName;
}; |
@jdkfx 良いですね!! 別の発想として、コンポーザブルを用意してあげて、得たhandle関数をQInputに渡すという手もあると思います! このままでは動かないかもですが、疑似コードこんな雰囲気です。 // コンポーザブル側
export function useRightContextMenu(qInputRef: Ref<QInput>) {
const handleFocus = (inputName: string) => {
qInputRef.value = inputName;
}
// もっといろいろ定義する
return { handleFocus };
} // 使う側、script
const surfaceElementRef = ref("");
const { surfaceHandleFocus: handleFocus } = useRightContextMenu(surfaceElementRef);
const yomiElementRef = ref("");
const { yomiHandleFocus: handleFocus } = useRightContextMenu(yomiElementRef); <!-- 使う側、template -->
<template>
<QInput @focus="surfaceHandleFocus" ref="surfaceElementRef">
<ContextMenu/>
</QInput>
<QInput @focus="yomiHandleFocus" ref="yomiElementRef">
<ContextMenu/>
</QInput>
</template> こうしておけば他の箇所でテキスト入力したくなった場合も、 |
こちらのIssue、なかなか難しいなと感じておりまして、ヘルプをいただけましたら幸いです! |
内容
辞書の単語追加・編集UIの単語・読み入力欄では、右クリックメニューがないようでした(Ctrl+X/C/Vのショートカットキーはそれぞれ動作しました)。
読み上げテキストの入力欄と同じような右クリックメニューがあるとよさそうです。
Pros 良くなる点
マウスでコピペ操作ができる
Cons 悪くなる点
実現方法
VOICEVOXのバージョン
0.11.3
その他
The text was updated successfully, but these errors were encountered: