ソースを参照

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

Book Pauk 5 年 前
コミット
10d0a4079c

+ 31 - 14
client/components/Reader/Reader.vue

@@ -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.actionCur--;
-                    this.bookPosChanged({bookPos: this.actionList[this.actionCur]});
-                }
+                this.undoAction();
                 break;
                 break;
             case 'redoAction':
             case 'redoAction':
-                if (this.actionCur < this.actionList.length - 1) {
-                    this.actionCur++;
-                    this.bookPosChanged({bookPos: this.actionList[this.actionCur]});
-                }
+                this.redoAction();
                 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;
                     }
                     }
                 }
                 }
             }
             }

+ 2 - 1
client/components/Reader/SettingsPage/SettingsPage.vue

@@ -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;

+ 4 - 0
client/components/Reader/SettingsPage/UserHotKeys/UserHotKeys.vue

@@ -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) {

+ 30 - 9
client/components/Reader/SettingsPage/include/KeysTab.inc

@@ -1,12 +1,33 @@
-<div class="part-header">Управление</div>
+<div class="bg-grey-4 row">
+    <q-tabs
+        v-model="selectedKeysTab"
+        active-color="black"
+        active-bg-color="white"
+        indicator-color="white"
+        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 class="q-mb-sm"/>
 
 
-<div class="item row">
-    <div class="label-4"></div>
-    <div class="col row">
-        <q-checkbox size="xs" v-model="clickControl" label="Включить управление кликом" />
+<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>
-</div>
 
 
-<div class="item row">
-    <UserHotKeys v-model="userHotKeys" />
-</div>
+    <div v-if="selectedKeysTab == 'keyboard'">
+        <div class="item row">
+            <UserHotKeys v-model="userHotKeys" />
+        </div>
+    </div>
+</div>

+ 8 - 5
client/components/Reader/TextPage/TextPage.vue

@@ -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();

+ 9 - 3
client/store/modules/reader.js

@@ -1,12 +1,12 @@
 const readerActions = {
 const readerActions = {
-    'help': 'Справка',
-    'loader': 'Страница загрузки',
+    'help': 'Вызвать cправку',
+    '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 = [