Работа над хоткеями
This commit is contained in:
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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 = [
|
||||||
|
|||||||
Reference in New Issue
Block a user