File: shortcutkeys.cpp

package info (click to toggle)
nixnote2 2.0~beta11-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 9,448 kB
  • ctags: 7,058
  • sloc: cpp: 68,338; java: 1,096; sh: 834; makefile: 27
file content (313 lines) | stat: -rw-r--r-- 14,056 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2013 Randy Baumgarte

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
***********************************************************************************/

#include "shortcutkeys.h"
#include "global.h"

#include <QFile>

extern Global global;

ShortcutKeys::ShortcutKeys(QObject *parent) :
    QObject(parent)
{
    File_Note_Add = new QString("Ctrl+N");		// Add a new note
    File_Note_Reindex = new QString();			// Reindex the current note
    File_Note_Modify_Tags = new QString();		// Change current note tags
    File_Note_Delete = new QString("Ctrl+Shift+D");	// Delete a note
    File_Note_Reindex = new QString("");        // Reindex the current note
    File_Note_Restore = new QString();			// Undelete a note
    File_Note_Duplicate = new QString();			// Duplicate a note
    File_Notebook_Add = new QString();			// Add a notebook
    File_Notebook_Edit = new QString();			// Edit an existing notebook
    File_Notebook_Delete = new QString();		// Delete the existing notebook
    File_Notebook_Open = new QString(); 			// Open a closed (i.e. archived) notebook
    File_Notebook_Close = new QString();			// Close (i.e. archive) a notebook
    File_Tag_Add = new QString("Ctrl+Shift+T");	// Add a notebook
    File_Tag_Edit = new QString();				// Edit an existing notebook
    File_Tag_Delete = new QString();				// Delete the existing notebook
    File_SavedSearch_Add = new QString();		// Add a notebook
    File_SavedSearch_Edit = new QString();		// Edit an existing notebook
    File_SavedSearch_Delete = new QString();		// Delete the existing notebook
    File_Email = new QString("Ctrl+Shift+E");	// Email note
    File_Print = new QString("Ctrl+P");			// Print
    File_Backup = new QString();				// Backup
    File_Restore = new QString();				// Restore
    File_Empty_Trash = new QString();			// Purge all delete notes
    File_Exit = new QString("Ctrl+Q");			// I'm outahere

    Edit_Find_In_Note = new QString("Ctrl+F");	// Search only within the current note
    Edit_Undo = new QString("Ctrl+Z");			// Undo last change
    Edit_Redo = new QString("Ctrl+Y");			// Redo the last undone change
    Edit_Cut = new QString("Ctrl+X");			// Cut current selection to the clipboard
    Edit_Copy = new QString("Ctrl+C");			// Copy the current selection to the clipboard
    Edit_Paste = new QString("Ctrl+V");			// Paste
    Edit_Paste_Without_Formatting = new QString("Ctrl+Shift+P"); // Paste as plain text
    Edit_Remove_Format = new QString();  // Remove formatting
    Edit_Preferences = new QString();			// Settings dialog box
    Edit_Select_All = new QString("Ctrl+A");

    Edit_Insert_Hyperlink = new QString("Ctrl+K");  	// Insert a hyperlink
    Edit_Insert_Table = new QString();  				// Insert a table
    Edit_Insert_Table_Row = new QString();  			// Insert a table row
    Edit_Delete_Table_Row = new QString();  			// Delete a table row
    Edit_Insert_Todo = new QString();
    Edit_Encrypt_Text = new QString();
    Edit_Rotate_Image_Right = new QString();
    Edit_Rotate_Image_Left = new QString();
    Edit_Search_Notes = new QString("F6");
    Edit_Search_Find = new QString("Ctrl+F");
    Edit_Search_Find_Next = new QString("Ctrl+G");
    Edit_Search_Find_Prev = new QString("Ctrl+Shift+G");
    Edit_Search_Find_Replace = new QString("Ctrl+H");
    Edit_Reset_Search = new QString("Ctrl+Shift+A");

    View_Extended_Information = new QString("F8");	// View details on the current note
    View_Show_Left_Side = new QString("F10");       // Show/hide the left side panel
    View_Show_Note_List = new QString("F11");      // Show/hide the list of notes
    View_Show_Note_Panel = new QString("Ctrl+F11");  // Show/hide the note browser
    View_Source = new QString();

    Format_Bold = new QString("Ctrl+B");			// Bold (duh)
    Format_Underline = new QString("Ctrl+U");		// Underline
    Format_Italic = new QString("Ctrl+I");			// Italic
    Format_Strikethrough = new QString("Ctrl+-");	// Strikethrough
    Format_Horizontal_Line = new QString();		// Href line
    Format_Superscript = new QString("Ctrl+=");	// Set superscript
    Format_Subscript = new QString("Ctrl+Shift+=");	// Subscript
    Format_Alignment_Left = new QString("Ctrl+L");	// Left align text
    Format_Alignment_Center = new QString("Ctrl+E");	// Center text
    Format_Alignment_Right = new QString("Ctrl+R");	// Right align text
    Format_List_Bullet = new QString("Ctrl+Shift+B");	// Bullet list
    Format_List_Numbered = new QString("Ctrl+Shift+N");	// Numbered list
    Format_Indent_Increase = new QString("Ctrl+M");		// Increase the indentation
    Format_Indent_Decrease = new QString("Ctrl+Shift+M");	// Decrease the indent

    Online_Note_History = new QString();

    Online_Synchronize = new QString("F9");		// Synchronize with Evernote
    Online_Connect = new QString();				// Connect to Evernote
    Tools_Account_Information = new QString();	// Show account information
    Tools_Database_Status = new QString();      // Show database status
    Tools_Database_Reindex = new QString();     // Reindex all notes & resources;
    Tools_Import_Folders = new QString();      // Show database status

    About_Release_Notes = new QString();			// Current version's release notes
    About_Log = new QString();					// Message log
    About_About = new QString();					// About dialog box

    Insert_DateTime = new QString("Ctrl+;");

    Focus_Title = new QString("Ctrl+Space");
    Focus_Tag = new QString();
    Focus_Note = new QString("Ctrl+E");
    Focus_Author = new QString();
    Focus_Url = new QString();
    Focus_Notebook = new QString();
    Focus_Font = new QString();
    Focus_Font_Size = new QString();
    Prev_Tab = new QString("Ctrl+PgUp");
    Next_Tab = new QString("Ctrl+PgDown");
    Close_Tab = new QString("Ctrl+W");
    Up_Note = new QString();
    Down_Note = new QString();

    // Setup value Array
    shortcutMap = new QHash<QString, QString>();
    actionMap = new QHash<QString, QString>();

    // Load the defaults
    loadkey(QString("File_Note_Add"), File_Note_Add);
    loadkey(QString("File_Tag_Add"), File_Tag_Add);
    loadkey(QString("File_Email"), File_Email);
    loadkey(QString("File_Print"), File_Print);
    loadkey(QString("File_Backup"), File_Backup);
    loadkey(QString("File_Restore"), File_Restore);
    loadkey(QString("File_Exit"), File_Exit);

    loadkey(QString("File_Note_Delete"), File_Note_Delete);
    loadkey(QString("File_Note_Reindex"), File_Note_Reindex);

    loadkey(QString("Edit_Find_In_Note"), Edit_Find_In_Note);
    loadkey(QString("Edit_Undo"), Edit_Undo);
    loadkey(QString("Edit_Redo"), Edit_Redo);
    loadkey(QString("Edit_Cut"), Edit_Cut);
    loadkey(QString("Edit_Copy"), Edit_Copy);
    loadkey(QString("Edit_Paste"), Edit_Paste);
    loadkey(QString("Edit_Paste_Without_Formatting"), Edit_Paste_Without_Formatting);
    loadkey(QString("Edit_Remove_Formatting"), Edit_Remove_Format);
    loadkey(QString("Edit_Insert_Hyperlink"), Edit_Insert_Hyperlink);
    loadkey(QString("Edit_Insert_Table_Row"), Edit_Insert_Table_Row);
    loadkey(QString("Edit_Delete_Table_Row"), Edit_Delete_Table_Row);
    loadkey(QString("Edit_Insert_Todo"), Edit_Insert_Todo);
    loadkey(QString("Edit_Rotate_Image_Right"), Edit_Rotate_Image_Right);
    loadkey(QString("Edit_Rotate_Image_Left"), Edit_Rotate_Image_Left);
    loadkey(QString("Edit_Select_All"), Edit_Select_All);
    loadkey(QString("Edit_Search_Notes"), Edit_Search_Notes);
    loadkey(QString("Edit_Search_Find"), Edit_Search_Find);
    loadkey(QString("Edit_Search_Find_Next"), Edit_Search_Find_Next);
    loadkey(QString("Edit_Search_Find_Prev"), Edit_Search_Find_Prev);
    loadkey(QString("Edit_Search_Find_Replace"), Edit_Search_Find_Replace);
    loadkey(QString("Edit_Reset_Search"), Edit_Reset_Search);
    loadkey(QString("Edit_Preferences"), Edit_Preferences);

    loadkey(QString("View_Extended_Information"), View_Extended_Information);
    loadkey(QString("View_Source"), View_Source);
    loadkey(QString("View_Show_Left_Side"), View_Show_Left_Side);
    loadkey(QString("View_Show_Note_List"), View_Show_Note_List);
    loadkey(QString("View_Show_Note_Panel"), View_Show_Note_Panel);

    loadkey(QString("Format_Bold"), Format_Bold);
    loadkey(QString("Format_Underline"), Format_Underline);
    loadkey(QString("Format_Italic"), Format_Italic);
    loadkey(QString("Format_Strikethrough"), Format_Strikethrough);
    loadkey(QString("Format_Superscript"), Format_Superscript);
    loadkey(QString("Format_Subscript"), Format_Subscript);
    loadkey(QString("Format_Alignment_Left"), Format_Alignment_Left);
    loadkey(QString("Format_Alignment_Center"), Format_Alignment_Center);
    loadkey(QString("Format_Alignment_Right"), Format_Alignment_Right);
    loadkey(QString("Format_List_Bullet"), Format_List_Bullet);
    loadkey(QString("Format_List_Numbered"), Format_List_Numbered);
    loadkey(QString("Format_Indent_Increase"), Format_Indent_Increase);
    loadkey(QString("Format_Indent_Decrease"), Format_Indent_Decrease);
    loadkey(QString("Tools_Synchronize"), Online_Synchronize);
    loadkey(QString("Tools_Database_Status"), Tools_Database_Status);
    loadkey(QString("Tools_Database_Reindex"), Tools_Database_Reindex);
    loadkey(QString("Tools_Import_Folders"), Tools_Import_Folders);

    loadkey(QString("Focus_Title"), Focus_Title);
    loadkey(QString("Focus_Tag"), Focus_Tag);
    loadkey(QString("Focus_Note"), Focus_Note);
    loadkey(QString("Focus_Author"), Focus_Author);
    loadkey(QString("Focus_Notebook"), Focus_Notebook);
    loadkey(QString("Focus_Url"), Focus_Url);

    loadkey(QString("Insert_DateTime"), Insert_DateTime);

    QString userFileName = global.fileManager.getHomeDirPath("") + QString("shortcuts.txt");
    QString systemFileName = global.fileManager.getProgramDirPath("") + QString("shortcuts.txt");
    QLOG_DEBUG() << "Loading system shortcuts from " << systemFileName;
    loadCustomKeys(systemFileName);
    QLOG_DEBUG() << "Loadng user shortcuts from " << userFileName;
    loadCustomKeys(userFileName);

}

// Read in the custom keys (if they exist)
void ShortcutKeys::loadCustomKeys(QString fileName) {
    QFile file(fileName);
    file.open(QFile::ReadOnly);
    if (file.isOpen()) {
        while (!file.atEnd()) {
            QString line = file.readLine();
            line = line.replace("\t", " ");
            line = line.replace("\n", " ");
            line = line.replace("\r", " " );
            line = line.trimmed();
            QStringList list = line.split(" ");
            QStringList keyvalue;
            for(int i=0;i<list.size(); i++) {
                if (list[i].trimmed() != "" && !list[i].trimmed().startsWith("//"))
                    keyvalue.append(list[i].trimmed().toLower());
                if (list[i].trimmed().startsWith("//"))
                    i = list.size();
            }
            if (keyvalue.size() == 1)
                removeByAction(keyvalue[0]);
            if (keyvalue.size() >= 2)
                loadkey(keyvalue[0], &keyvalue[1]);
        }
        file.close();
    } else {
        QLOG_DEBUG() << "Unable to open file for reading or file does not exist.";
    }
}


// Load a key value into the map for later use
void ShortcutKeys::loadkey(QString action, QString *shortcut) {
    action = action.toLower().trimmed();
    QString sc = shortcut->toLower().trimmed();

    // If we have an existing one, remove it.
    if (actionMap->contains(action))
        removeByAction(action);
    if (shortcutMap->contains(sc.toLower().trimmed()))
        removeByShortcut(sc.toLower().trimmed());

    if (sc == "") {
        removeByShortcut(sc);
        return;
    }

    //Add the new value
    actionMap->insert(action.toLower(), sc);
    shortcutMap->insert(sc.toLower(), action);
}

// Remove a shortcut by the Shortcut key
void ShortcutKeys::removeByShortcut(QString shortcut) {
    QString action = shortcutMap->key(shortcut.toLower(), "");
    shortcutMap->remove(shortcut.toLower());
    if (action != "")
        actionMap->remove(action.toLower());
}

// Remove a shortcut by the action itself
void ShortcutKeys::removeByAction(QString action) {
    QString shortcut = actionMap->key(action.toLower(),"");
    actionMap->remove(action.toLower());
    if (shortcut != "")
        shortcutMap->remove(shortcut.toLower());
}

// Check if a shortcut key exists
bool ShortcutKeys::containsShortcut(QString *shortcut) {
    QString sk(shortcut->toLower());
    QString key = shortcutMap->value(sk, "");
    if (key.trimmed() == "")
        return false;
    else
        return true;
}

// Check if an action exists
bool ShortcutKeys::containsAction(QString *action) {
    QString key = actionMap->value(action->toLower(), "");
    if (key.trimmed() == "")
        return false;
    else
        return true;
}

// Get a key based upon the action
QString ShortcutKeys::getShortcut(QString *action) {
    if (!actionMap->contains(action->toLower()))
        return "";
    QString retval(actionMap->value(action->toLower()));
    return retval;
}

// Get an action based upon the key
QString ShortcutKeys::getAction(QString *shortcut) {
    if (!shortcutMap->contains(shortcut->toLower()))
        return "";
    return shortcutMap->value(shortcut->toLower());
}