Работа над хоткеями

This commit is contained in:
Book Pauk
2020-03-18 19:00:02 +07:00
parent 589f7f3c22
commit 10d0a4079c
6 changed files with 85 additions and 33 deletions

View File

@@ -758,6 +758,20 @@ class Reader extends Vue {
} }
} }
undoAction() {
if (this.actionCur > 0) {
this.actionCur--;
this.bookPosChanged({bookPos: this.actionList[this.actionCur]});
}
}
redoAction() {
if (this.actionCur < this.actionList.length - 1) {
this.actionCur++;
this.bookPosChanged({bookPos: this.actionList[this.actionCur]});
}
}
buttonClick(button) { buttonClick(button) {
const activeClass = this.buttonActiveClass(button); const activeClass = this.buttonActiveClass(button);
@@ -771,16 +785,10 @@ class Reader extends Vue {
this.loaderToggle(); this.loaderToggle();
break; break;
case 'undoAction': case 'undoAction':
if (this.actionCur > 0) { this.undoAction();
this.actionCur--;
this.bookPosChanged({bookPos: this.actionList[this.actionCur]});
}
break; break;
case 'redoAction': case 'redoAction':
if (this.actionCur < this.actionList.length - 1) { this.redoAction();
this.actionCur++;
this.bookPosChanged({bookPos: this.actionList[this.actionCur]});
}
break; break;
case 'fullScreen': case 'fullScreen':
this.fullScreenToggle(); this.fullScreenToggle();
@@ -1137,15 +1145,27 @@ class Reader extends Vue {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
break; break;
case 'settings':
this.settingsToggle();
break;
case 'undoAction':
this.undoAction();
break;
case 'redoAction':
this.redoAction();
break;
case 'fullScreen':
this.fullScreenToggle();
break;
case 'scrolling':
this.scrollingToggle();
break;
default: default:
result = false; result = false;
break; break;
} }
switch (event.code) { switch (event.code) {
case 'KeyZ':
this.scrollingToggle();
break;
case 'KeyP': case 'KeyP':
this.setPositionToggle(); this.setPositionToggle();
break; break;
@@ -1174,9 +1194,6 @@ class Reader extends Vue {
case 'KeyO': case 'KeyO':
this.offlineModeToggle(); this.offlineModeToggle();
break; break;
case 'KeyS':
this.settingsToggle();
break;
} }
} }
} }

View File

@@ -46,7 +46,7 @@
@@include('./include/ButtonsTab.inc'); @@include('./include/ButtonsTab.inc');
</div> </div>
<!-- Управление ------------------------------------------------------------------> <!-- Управление ------------------------------------------------------------------>
<div v-if="selectedTab == 'keys'" class="fit tab-panel"> <div v-if="selectedTab == 'keys'" class="fit column">
@@include('./include/KeysTab.inc'); @@include('./include/KeysTab.inc');
</div> </div>
<!-- Листание --------------------------------------------------------------------> <!-- Листание -------------------------------------------------------------------->
@@ -142,6 +142,7 @@ export default @Component({
class SettingsPage extends Vue { class SettingsPage extends Vue {
selectedTab = 'profiles'; selectedTab = 'profiles';
selectedViewTab = 'color'; selectedViewTab = 'color';
selectedKeysTab = 'mouse';
form = {}; form = {};
fontBold = false; fontBold = false;
fontItalic = false; fontItalic = false;

View File

@@ -39,6 +39,7 @@
class="button bg-green-8 text-white" class="button bg-green-8 text-white"
@click="addHotKey(action)" @click="addHotKey(action)"
v-ripple v-ripple
:disabled="value[action].length >= maxCodesLength"
> >
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%"> <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
Добавить сочетание клавиш Добавить сочетание клавиш
@@ -90,6 +91,7 @@ class UserHotKeys extends UserHotKeysProps {
rstore = {}; rstore = {};
tableData = []; tableData = [];
collisions = {}; collisions = {};
maxCodesLength = 10;
created() { created() {
this.rstore = rstore; this.rstore = rstore;
@@ -159,6 +161,8 @@ class UserHotKeys extends UserHotKeysProps {
} }
async addHotKey(action) { async addHotKey(action) {
if (this.value[action].length >= this.maxCodesLength)
return;
try { try {
const result = await this.$root.stdDialog.getHotKey(`Добавить сочетание для:<br><b>${rstore.readerActions[action]}</b>`, ''); const result = await this.$root.stdDialog.getHotKey(`Добавить сочетание для:<br><b>${rstore.readerActions[action]}</b>`, '');
if (result) { if (result) {

View File

@@ -1,12 +1,33 @@
<div class="part-header">Управление</div> <div class="bg-grey-4 row">
<q-tabs
<div class="item row"> v-model="selectedKeysTab"
<div class="label-4"></div> active-color="black"
<div class="col row"> active-bg-color="white"
<q-checkbox size="xs" v-model="clickControl" label="Включить управление кликом" /> indicator-color="white"
</div> dense
no-caps
class="no-mp bg-grey-4 text-grey-7"
>
<q-tab name="mouse" label="Мышь/тачскрин" />
<q-tab name="keyboard" label="Клавиатура" />
</q-tabs>
</div> </div>
<div class="item row"> <div class="q-mb-sm"/>
<UserHotKeys v-model="userHotKeys" />
</div> <div class="col tab-panel">
<div v-if="selectedKeysTab == 'mouse'">
<div class="item row">
<div class="label-4"></div>
<div class="col row">
<q-checkbox size="xs" v-model="clickControl" label="Включить управление кликом" />
</div>
</div>
</div>
<div v-if="selectedKeysTab == 'keyboard'">
<div class="item row">
<UserHotKeys v-model="userHotKeys" />
</div>
</div>
</div>

View File

@@ -944,6 +944,14 @@ class TextPage extends Vue {
let result = false; let result = false;
if (event.type == 'keydown' && !event.ctrlKey && !event.altKey) { if (event.type == 'keydown' && !event.ctrlKey && !event.altKey) {
result = true; result = true;
const action = this.$root.readerActionByKeyEvent(event);
switch (action) {
default:
result = false;
break;
}
switch (event.code) { switch (event.code) {
case 'ArrowDown': case 'ArrowDown':
if (event.shiftKey) if (event.shiftKey)
@@ -984,11 +992,6 @@ class TextPage extends Vue {
else else
this.doFontSizeInc(); this.doFontSizeInc();
break; break;
case 'Enter':
case 'Backquote'://`
case 'KeyF':
this.doFullScreenToggle();
break;
case 'Tab': case 'Tab':
case 'KeyQ': case 'KeyQ':
this.doToolBarToggle(); this.doToolBarToggle();

View File

@@ -1,12 +1,12 @@
const readerActions = { const readerActions = {
'help': 'Справка', 'help': 'Вызвать cправку',
'loader': 'Страница загрузки', 'loader': 'На страницу загрузки',
'settings': 'Настроить', 'settings': 'Настроить',
'undoAction': 'Действие назад', 'undoAction': 'Действие назад',
'redoAction': 'Действие вперед', 'redoAction': 'Действие вперед',
'fullScreen': 'На весь экран', 'fullScreen': 'На весь экран',
'scrolling': 'Плавный скроллинг', 'scrolling': 'Плавный скроллинг',
'setPosition': 'На страницу', 'setPosition': 'Установить позицию',
'search': 'Найти в тексте', 'search': 'Найти в тексте',
'copyText': 'Скопировать текст со страницы', 'copyText': 'Скопировать текст со страницы',
'refresh': 'Принудительно обновить книгу', 'refresh': 'Принудительно обновить книгу',
@@ -32,6 +32,12 @@ const toolButtons = [
const hotKeys = [ const hotKeys = [
{name: 'help', codes: ['F1', 'H']}, {name: 'help', codes: ['F1', 'H']},
{name: 'loader', codes: ['Escape']}, {name: 'loader', codes: ['Escape']},
{name: 'settings', codes: ['S']},
{name: 'undoAction', codes: ['Ctrl+Z']},
{name: 'redoAction', codes: ['Ctrl+X']},
{name: 'fullScreen', codes: ['Enter', 'Backquote', 'F']},
{name: 'scrolling', codes: ['Z']},
]; ];
const fonts = [ const fonts = [