diff --git a/i18n/NotepadNext_ru.ts b/i18n/NotepadNext_ru.ts
index ac3a5d9dc..3965e8203 100644
--- a/i18n/NotepadNext_ru.ts
+++ b/i18n/NotepadNext_ru.ts
@@ -1,2299 +1,3055 @@
-
-
+
+
+ AuthenticateDialog
+
+
+ Dialog
+
+
+
+
+ Please provide the user name and password for the download location.
+
+
+
+
+ &User name:
+
+
+
+
+ &Password:
+
+
+
+
ColumnEditorDialog
-
- Column Mode
- Режим столбцов
+
+ Column Mode
+ Режим столбцов
-
- Text
- Текст
+
+ Text
+ Текст
-
- Numbers
- Числа
+
+ Numbers
+ Числа
-
- Start:
- Начало:
+
+ Start:
+ Начало:
-
- Step:
- Шаг:
+
+ Step:
+ Шаг:
-
-
+
+
DebugLogDock
-
- Debug Log
- Журнал отладки
+
+ Debug Log
+ Журнал отладки
+
+
+
+ Downloader
+
+
+
+ Updater
+
+
+
+
+
+
+ Downloading updates
+
+
+
+
+ Time remaining: 0 minutes
+
+
+
+
+ Open
+
+
+
+
+
+ Stop
+
+
+
+
+
+ Time remaining
+
+
+
+
+ unknown
+
+
+
+
+ Error
+
+
+
+
+ Cannot find downloaded update!
+
+
+
+
+ Close
+ Закрыть
+
+
+
+ Download complete!
+
+
+
+
+ The installer will open separately
+
+
+
+
+ Click "OK" to begin installing the update
+
+
+
+
+ In order to install the update, you may need to quit the application.
+
+
+
+
+ In order to install the update, you may need to quit the application. This is a mandatory update, exiting now will close the application.
+
-
-
+
+
+ Click the "Open" button to apply the update
+
+
+
+
+ Are you sure you want to cancel the download?
+
+
+
+
+ Are you sure you want to cancel the download? This is a mandatory update, exiting now will close the application
+
+
+
+
+
+ %1 bytes
+
+
+
+
+
+ %1 KB
+
+
+
+
+
+ %1 MB
+
+
+
+
+ of
+
+
+
+
+ Downloading Updates
+
+
+
+
+ Time Remaining
+
+
+
+
+ Unknown
+
+
+
+
+ about %1 hours
+
+
+
+
+ about one hour
+
+
+
+
+ %1 minutes
+
+
+
+
+ 1 minute
+
+
+
+
+ %1 seconds
+
+
+
+
+ 1 second
+
+
+
+
EditorInfoStatusBar
-
- Length: %L1 Lines: %L2
- Длина: %L1 Строк: %L2
+
+ Length: %L1 Lines: %L2
+ Длина: %L1 Строк: %L2
-
- Sel: N/A
- Выб: Н/Д
+
+ Sel: N/A
+ Выб: Н/Д
-
- Sel: %L1 | %L2
- Выб: %L1 | %L2
+
+ Sel: %L1 | %L2
+ Выб: %L1 | %L2
-
- Ln: %L1 Col: %L2
- Стр: %L1 Стл: %L2
+
+ Ln: %L1 Col: %L2
+ Стр: %L1 Стл: %L2
-
- Macintosh (CR)
- Macintosh (CR)
+
+ Macintosh (CR)
+ Macintosh (CR)
-
- Windows (CR LF)
- Windows (CR LF)
+
+ Windows (CR LF)
+ Windows (CR LF)
-
- Unix (LF)
- Unix (LF)
+
+ Unix (LF)
+ Unix (LF)
-
- ANSI
- ANSI
+
+ ANSI
+ ANSI
-
- UTF-8
- UTF-8
+
+ UTF-8
+ UTF-8
-
- UTF-8 BOM
- UTF-8 BOM
+
+ UTF-8 BOM
+ UTF-8 BOM
-
- UTF-16LE BOM
- UTF-16LE BOM
+
+ UTF-16LE BOM
+ UTF-16LE BOM
-
- UTF-16BE BOM
- UTF-16BE BOM
+
+ UTF-16BE BOM
+ UTF-16BE BOM
-
- OVR
- This is a short abbreviation to indicate characters will be replaced when typing
- OVR
+
+ OVR
+ This is a short abbreviation to indicate characters will be replaced when typing
+ OVR
-
- INS
- This is a short abbreviation to indicate characters will be inserted when typing
- INS
+
+ INS
+ This is a short abbreviation to indicate characters will be inserted when typing
+ INS
-
-
+
+
EditorInspectorDock
-
- Editor Inspector
- Инспектор редактора
+
+ Editor Inspector
+ Инспектор редактора
-
- Position Information
- Информация о положении
+
+ Position Information
+ Информация о положении
-
- Current Position
- Текущее положение
+
+ Current Position
+ Текущее положение
-
- Current Position (x, y)
- Текущее положение (x, y)
+
+ Current Position (x, y)
+ Текущее положение (x, y)
-
- Column
- Столбец
+
+ Column
+ Столбец
-
- Current Style
- Текущий стиль
+
+ Current Style
+ Текущий стиль
-
- Current Line
- Текущая строка
+
+ Current Line
+ Текущая строка
-
- Line Length
- Длина строки
+
+ Line Length
+ Длина строки
-
- Line End Position
- Положение конца строки
+
+ Line End Position
+ Положение конца строки
-
- Line Indentation
- Отступ строки
+
+ Line Indentation
+ Отступ строки
-
- Line Indent Position
- Положение отступа строки
+
+ Line Indent Position
+ Положение отступа строки
-
- Selection Information
- Информация о выделении
+
+ Selection Information
+ Информация о выделении
-
- Mode
- Режим
+
+ Mode
+ Режим
-
- Is Rectangle
- Прямоугольник
+
+ Is Rectangle
+ Прямоугольник
-
- Selection Empty
- Выделение пусто
+
+ Selection Empty
+ Выделение пусто
-
- Main Selection
- Основное выделение
+
+ Main Selection
+ Основное выделение
-
- # of Selections
- # выделений
+
+ # of Selections
+ # выделений
-
- Multiple Selections
- Множественные выделения
+
+ Multiple Selections
+ Множественные выделения
-
- Document Information
- Информация о документе
+
+ Document Information
+ Информация о документе
-
- Length
- Длина
+
+ Length
+ Длина
-
- Line Count
- Количество строк
+
+ Line Count
+ Количество строк
-
- View Information
- Сведения об области просмотра
+
+ View Information
+ Сведения об области просмотра
-
- Lines on Screen
- Строк на экране
+
+ Lines on Screen
+ Строк на экране
-
- First Visible Line
- Первая видимая строка
+
+ First Visible Line
+ Первая видимая строка
-
- X Offset
- Смещение по X
+
+ X Offset
+ Смещение по X
-
- Fold Information
- Информация о сворачивании
+
+ Fold Information
+ Информация о сворачивании
-
- Visible From Doc Line
- Отображаемая от строки документа
+
+ Visible From Doc Line
+ Отображаемая от строки документа
-
- Doc Line From Visible
- Строка документа от отображаемой
+
+ Doc Line From Visible
+ Строка документа от отображаемой
-
- Fold Level
- Уровень вложенности
+
+ Fold Level
+ Уровень вложенности
-
- Is Fold Header
- Заголовок вложения
+
+ Is Fold Header
+ Заголовок вложения
-
- Fold Parent
- Родитель вложения
+
+ Fold Parent
+ Родитель вложения
-
- Last Child
- Последний дочерний
+
+ Last Child
+ Последний дочерний
-
- Contracted Fold Next
- Следующее свернутое вложение
+
+ Contracted Fold Next
+ Следующее свернутое вложение
-
- Caret
- Каретка
+
+ Caret
+ Каретка
-
- Anchor
- Якорь
+
+ Anchor
+ Якорь
-
- Caret Virtual Space
- Виртуальное пространство каретки
+
+ Caret Virtual Space
+ Виртуальное пространство каретки
-
- Anchor Virtual Space
- Виртуальное пространство якоря
+
+ Anchor Virtual Space
+ Виртуальное пространство якоря
-
-
+
+
FileList
-
- File List
- Список файлов
+
+ File List
+ Список файлов
-
- ...
- ...
+
+ ...
+ ...
-
- Sort by File Name
- Sort by File Name
+
+ Sort by File Name
+ Sort by File Name
-
-
+
+
FindReplaceDialog
-
-
-
- Find
- Поиск
+
+
+
+ Find
+ Поиск
-
- Search Mode
- Режим поиска
+
+ Search Mode
+ Режим поиска
-
- &Normal
- &Нормальный
+
+ &Normal
+ &Нормальный
-
- E&xtended (\n, \r, \t, \0, \x...)
- Р&асширенный (\n, \r, \t, \0, \x...)
+
+ E&xtended (\n, \r, \t, \0, \x...)
+ Р&асширенный (\n, \r, \t, \0, \x...)
-
- Re&gular expression
- &Регулярное выражение
+
+ Re&gular expression
+ &Регулярное выражение
-
- &. matches newline
- &. - новая строка
+
+ &. matches newline
+ &. - новая строка
-
- Transparenc&y
- Про&зрачность
+
+ Transparenc&y
+ Про&зрачность
-
- On losing focus
- При потере фокуса
+
+ On losing focus
+ При потере фокуса
-
- Always
- Всегда
+
+ Always
+ Всегда
-
- Coun&t
- &Подсчитать
+
+ Coun&t
+ &Подсчитать
-
- &Replace
- &Заменить
+
+ &Replace
+ &Заменить
-
- Replace &All
- Заменить &все
+
+ Replace &All
+ Заменить &все
-
- Replace All in &Opened Documents
- Заменить все во всех о&ткрытых документах
+
+ Replace All in &Opened Documents
+ Заменить все во всех о&ткрытых документах
-
- Find All in All &Opened Documents
- Найти все во всех откр&ытых документах
+
+ Find All in All &Opened Documents
+ Найти все во всех откр&ытых документах
-
- Find All in Current Document
- Найти все в текущем документе
+
+ Find All in Current Document
+ Найти все в текущем документе
-
- Close
- Закрыть
+
+ Close
+ Закрыть
-
- &Find:
- &Найти:
+
+ &Find:
+ &Найти:
-
- Replace:
- Заменить:
+
+ Replace:
+ Заменить:
-
- Backward direction
- Обратное направление поиска
+
+ Backward direction
+ Обратное направление поиска
-
- Match &whole word only
- Только целые &слова
+
+ Match &whole word only
+ Только целые &слова
-
- Match &case
- Учитывать &регистр
+
+ Match &case
+ Учитывать &регистр
-
- Wra&p Around
- За&циклить поиск
+
+ Wra&p Around
+ За&циклить поиск
-
- Replace
- Замена
+
+ Replace
+ Замена
-
-
- Replaced %Ln matches
-
- Заменено %Ln соответствие
- Заменено %Ln соответствия
- Заменено %Ln соответствий
- Replaced %Ln matches
-
+
+
+ Replaced %Ln matches
+
+ Заменено %Ln соответствие
+ Заменено %Ln соответствия
+ Заменено %Ln соответствий
+
-
- The end of the document has been reached. Found 1st occurrence from the top.
- Достигнут конец документа. Обнаружено первое соответствие сверху.
+
+ The end of the document has been reached. Found 1st occurrence from the top.
+ Достигнут конец документа. Обнаружено первое соответствие сверху.
-
- No matches found.
- Не найдено соответствий.
+
+ No matches found.
+ Не найдено соответствий.
-
- 1 occurrence was replaced
- 1 совпадение заменено
+
+ 1 occurrence was replaced
+ 1 совпадение заменено
-
- No more occurrences were found
- Больше совпадений не обнаружено
+
+ No more occurrences were found
+ Больше совпадений не обнаружено
-
- Found %Ln matches
-
- Найдено %Ln соответствие
- Найдено %Ln соответствия
- Найдено %Ln соответствий
- Found %Ln matches
-
-
-
-
+
+ Found %Ln matches
+
+ Найдено %Ln соответствие
+ Найдено %Ln соответствия
+ Найдено %Ln соответствий
+
+
+
+
FolderAsWorkspaceDock
-
- Folder as Workspace
- Папка как Проект
+
+ Folder as Workspace
+ Папка как Проект
-
-
+
+
HexViewerDock
-
- Hex Viewer
- Просмотр Hex
+ Hex Viewer
+ Просмотр Hex
-
-
+
+
LanguageInspectorDock
-
- Language Inspector
- Инспектор языка
+
+ Language Inspector
+ Инспектор языка
-
- Language:
- Язык:
+
+ Language:
+ Язык:
-
- Lexer:
- Лексер:
+
+ Lexer:
+ Лексер:
-
- Properties:
- Свойства:
+
+ Properties:
+ Свойства:
-
- Property
- Свойство
+
+ Property
+ Свойство
-
- Type
- Тип
+
+ Type
+ Тип
-
-
- Description
- Описание
+
+
+ Description
+ Описание
-
- Value
- Значение
+
+ Value
+ Значение
-
- Keywords:
- Ключевые слова:
+
+ Keywords:
+ Ключевые слова:
-
- ID
- ID
+
+ ID
+ ID
-
- Styles:
- Стили:
+
+ Styles:
+ Стили:
-
- TextLabel
- TextLabel
+
+ TextLabel
+ TextLabel
-
- Position %1 Style %2
- Положение %1 Стиль %2
+
+ Position %1 Style %2
+ Положение %1 Стиль %2
-
-
+
+
LuaConsoleDock
-
- Lua Console
- Консоль Lua
+
+ Lua Console
+ Консоль Lua
-
-
+
+
MacroEditorDialog
-
- Macro Editor
- Редактор макросов
+
+ Macro Editor
+ Редактор макросов
-
- Name
- Имя
+
+ Name
+ Имя
-
- Shortcut
- Комбинация клавиш
+
+ Shortcut
+ Комбинация клавиш
-
- Steps:
- Шаги:
+
+ Steps:
+ Шаги:
-
- Insert Macro Step
- Вставить шаг макроса
+
+ Insert Macro Step
+ Вставить шаг макроса
-
- Delete Selected Macro Step
- Удалить выбранный шаг макроса
+
+ Delete Selected Macro Step
+ Удалить выбранный шаг макроса
-
- Move Selected Macro Step Up
- Переместить выбранный шаг макроса вверх
+
+ Move Selected Macro Step Up
+ Переместить выбранный шаг макроса вверх
-
- Move Selected Macro Step Down
- Переместить выбранный шаг макроса вниз
+
+ Move Selected Macro Step Down
+ Переместить выбранный шаг макроса вниз
-
- Copy Selected Macro
- Копировать выбранный макрос
+
+ Copy Selected Macro
+ Копировать выбранный макрос
-
- Delete Selected Macro
- Удалить выбранный макрос
+
+ Delete Selected Macro
+ Удалить выбранный макрос
-
- Delete Macro
- Удалить макрос
+
+ Delete Macro
+ Удалить макрос
-
- Are you sure you want to delete <b>%1</b>?
- Вы действительно хотите удалить <b>%1</b>?
+
+ Are you sure you want to delete <b>%1</b>?
+ Вы действительно хотите удалить <b>%1</b>?
-
- (Copy)
- (копия)
+
+ (Copy)
+ (копия)
-
-
+
+
MacroRunDialog
-
- Run a Macro Multiple Times
- Многократный запуск
+
+ Run a Macro Multiple Times
+ Многократный запуск
-
- Macro:
- Макрос:
+
+ Macro:
+ Макрос:
-
- Run Until End of File
- Выполнять до конца файла
+
+ Run Until End of File
+ Выполнять до конца файла
-
- Execute...
- Выполнить...
+
+ Execute...
+ Выполнить...
-
- times
- раз(а)
+
+ times
+ раз(а)
-
- Run
- Запускать
+
+ Run
+ Запускать
-
- Cancel
- Отмена
+
+ Cancel
+ Отмена
-
-
+
+
MacroSaveDialog
-
- Save Macro
- Сохранение макроса
+
+ Save Macro
+ Сохранение макроса
-
- Name:
- Имя:
+
+ Name:
+ Имя:
-
- Shortcut:
- Комбинация клавиш:
+
+ Shortcut:
+ Комбинация клавиш:
-
- OK
- ОК
+
+ OK
+ ОК
-
- Cancel
- Отмена
+
+ Cancel
+ Отмена
-
-
+
+
MacroStepTableModel
-
- Name
- Имя
+
+ Name
+ Имя
-
- Text
- Текст
+
+ Text
+ Текст
-
-
+
+
MainWindow
-
- Notepad Next[*]
- Notepad Next[*]
+
+ Notepad Next[*]
+ Notepad Next[*]
+
+
+
+ +
+ +
+
+
+
+ &File
+ &Файл
+
+
+
+ Close More
+ Закрытие вкладок
+
+
+
+ &Recent Files
+ &Последние файлы
+
+
+
+
+ Export As
+ Экспортировать как
-
- +
- +
+
+ &Edit
+ &Правка
-
- &File
- &Файл
+
+ Copy More
+ Копировать в буфер
-
- Close More
- Закрытие вкладок
+
+ Indent
+ Отступ
-
- &Recent Files
- &Последние файлы
+
+ EOL Conversion
+ Конвертация конца строк
-
-
- Export As
- Экспортировать как
+
+ Convert Case
+ Конвертация регистра
-
- &Edit
- &Правка
+
+ Line Operations
+ Операции со строками
-
- Copy More
- Копировать в буфер
+
+ Comment/Uncomment
+ Комментирование
-
- Indent
- Отступ
+
+ Copy As
+ Копировать как
-
- EOL Conversion
- Конвертация конца строк
+
+ Encoding/Decoding
+ Кодирование/декодирование
-
- Convert Case
- Конвертация регистра
+
+ Search
+ Поиск
-
- Line Operations
- Операции со строками
+
+ Bookmarks
+ Закладки
-
- Comment/Uncomment
- Комментирование
+
+ Mark All Occurrences
+ Mark All Occurrences
-
- Copy As
- Копировать как
+
+ Clear Marks
+ Clear Marks
-
- Encoding/Decoding
- Кодирование/декодирование
+
+ &View
+ &Вид
-
- Search
- Поиск
+
+ &Zoom
+ &Масштаб
-
- Bookmarks
- Закладки
+
+ Show Symbol
+ Показать символ
-
- Mark All Occurrences
- Mark All Occurrences
+
+ Fold Level
+ Уровень вложенности
-
- Clear Marks
- Clear Marks
+
+ Unfold Level
+ Unfold Level
-
- &View
- &Вид
+
+ Language
+ Язык
-
- &Zoom
- &Масштаб
+
+ Settings
+ Опции
-
- Show Symbol
- Показать символ
+
+ Macro
+ Макросы
-
- Fold Level
- Уровень вложенности
+
+ Help
+ Справка
-
- Unfold Level
- Unfold Level
+
+ Encoding
+ Кодировка
-
- Language
- Язык
+
+ Main Tool Bar
+ Основная панель инструментов
-
- Settings
- Опции
+
+ &New
+ &Новый
-
- Macro
- Макросы
+
+ Create a new file
+ Создать новый файл
-
- Help
- Справка
+
+ Ctrl+N
+ Ctrl+N
-
- Encoding
- Кодировка
+
+ &Open...
+ &Открыть...
-
- Main Tool Bar
- Основная панель инструментов
+
+ Ctrl+O
+ Ctrl+O
-
- &New
- &Новый
+
+ &Save
+ &Сохранить
-
- Create a new file
- Создать новый файл
+
+ Save
+ Сохранить
-
- Ctrl+N
- Ctrl+N
+
+ Ctrl+S
+ Ctrl+S
-
- &Open...
- &Открыть...
+
+ E&xit
+ &Выход
-
- Ctrl+O
- Ctrl+O
+
+ &Undo
+ &Отмена
-
- &Save
- &Сохранить
+
+ Ctrl+Z
+ Ctrl+Z
-
- Save
- Сохранить
+
+ &Redo
+ &Повтор
-
- Ctrl+S
- Ctrl+S
+
+ Ctrl+Y
+ Ctrl+Y
-
- E&xit
- &Выход
+
+ Cu&t
+ В&ырезать
-
- &Undo
- &Отмена
+
+ Ctrl+X
+ Ctrl+X
-
- Ctrl+Z
- Ctrl+Z
+
+ &Copy
+ &Копировать
-
- &Redo
- &Повтор
+
+ Ctrl+C
+ Ctrl+C
-
- Ctrl+Y
- Ctrl+Y
+
+ &Paste
+ В&ставить
-
- Cu&t
- В&ырезать
+
+ Ctrl+V
+ Ctrl+V
-
- Ctrl+X
- Ctrl+X
+
+ &Delete
+ &Удалить
-
- &Copy
- &Копировать
+
+ Del
+ Del
-
- Ctrl+C
- Ctrl+C
+
+ Copy Full Path
+ Копировать полный путь
-
- &Paste
- В&ставить
+
+ Copy File Name
+ Копировать имя файла
-
- Ctrl+V
- Ctrl+V
+
+ Copy File Directory
+ Копировать путь к файлу
-
- &Delete
- &Удалить
+
+ &Close
+ &Закрыть
-
- Del
- Del
+
+ Close the current file
+ Закрыть текущий файл
-
- Copy Full Path
- Копировать полный путь
+
+ Ctrl+W
+ Ctrl+W
-
- Copy File Name
- Копировать имя файла
+
+ Save &As...
+ Сох&ранить как...
-
- Copy File Directory
- Копировать путь к файлу
+
+ Ctrl+Alt+S
+ Ctrl+Alt+S
-
- &Close
- &Закрыть
+
+ Save a Copy As...
+ Сохранить копию как...
-
- Close the current file
- Закрыть текущий файл
+
+ Sav&e All
+ Сохра&нить все
-
- Ctrl+W
- Ctrl+W
+
+ Ctrl+Shift+S
+ Ctrl+Shift+S
-
- Save &As...
- Сох&ранить как...
+
+ Select A&ll
+ Выделить &все
-
- Ctrl+Alt+S
- Ctrl+Alt+S
+
+ Ctrl+A
+ Ctrl+A
-
- Save a Copy As...
- Сохранить копию как...
+
+ Increase Indent
+ Увеличить отступ
-
- Sav&e All
- Сохра&нить все
+
+ Decrease Indent
+ Уменьшить отступ
-
- Ctrl+Shift+S
- Ctrl+Shift+S
+
+ Rename...
+ Переименовать...
-
- Select A&ll
- Выделить &все
+
+ Re&load
+ &Перезагрузить
-
- Ctrl+A
- Ctrl+A
+
+ Windows (CR LF)
+ Windows (CR LF)
-
- Increase Indent
- Увеличить отступ
+
+ Unix (LF)
+ Unix (LF)
-
- Decrease Indent
- Уменьшить отступ
+
+ Macintosh (CR)
+ Macintosh (CR)
-
- Rename...
- Переименовать...
+
+ UPPER CASE
+ ВЕРХНИЙ РЕГИСТР
-
- Re&load
- &Перезагрузить
+
+ Convert text to upper case
+ Конвертировать текст в верхний регистр
-
- Windows (CR LF)
- Windows (CR LF)
+
+ lower case
+ нижний регистр
-
- Unix (LF)
- Unix (LF)
+
+ Convert text to lower case
+ Конвертировать текст в нижний регистр
-
- Macintosh (CR)
- Macintosh (CR)
+
+ Duplicate Current Line
+ Дублировать текущую строку
-
- UPPER CASE
- ВЕРХНИЙ РЕГИСТР
+
+ Alt+Down
+ Alt+Down
-
- Convert text to upper case
- Конвертировать текст в верхний регистр
+
+ Split Lines
+ Разбить строки
-
- lower case
- нижний регистр
+
+ Join Lines
+ Объединить строки
-
- Convert text to lower case
- Конвертировать текст в нижний регистр
+
+ Ctrl+J
+ Ctrl+J
-
- Duplicate Current Line
- Дублировать текущую строку
+
+ Move Selected Lines Up
+ Переместить выбранные строки вверх
-
- Alt+Down
- Alt+Down
+
+ Ctrl+Shift+Up
+ Ctrl+Shift+Up
-
- Split Lines
- Разбить строки
+
+ Move Selected Lines Down
+ Переместить выбранные строки вниз
-
- Join Lines
- Объединить строки
+
+ Ctrl+Shift+Down
+ Ctrl+Shift+Down
-
- Ctrl+J
- Ctrl+J
+
+ Clos&e All
+ Зак&рыть все
-
- Move Selected Lines Up
- Переместить выбранные строки вверх
+
+ Close All files
+ Закрыть все файлы
-
- Ctrl+Shift+Up
- Ctrl+Shift+Up
+
+ Ctrl+Shift+W
+ Ctrl+Shift+W
-
- Move Selected Lines Down
- Переместить выбранные строки вниз
+
+ Close All Except Active Document
+ Закрыть все кроме текущей
-
- Ctrl+Shift+Down
- Ctrl+Shift+Down
+
+ Close All to the Left
+ Закрыть все вкладки слева
-
- Clos&e All
- Зак&рыть все
+
+ Close All to the Right
+ Закрыть все вкладки справа
-
- Close All files
- Закрыть все файлы
+
+ Zoom &In
+ У&величить масштаб
-
- Ctrl+Shift+W
- Ctrl+Shift+W
+
+ Ctrl++
+ Ctrl++
-
- Close All Except Active Document
- Закрыть все кроме текущей
+
+ Zoom &Out
+ &Уменьшить масштаб
-
- Close All to the Left
- Закрыть все вкладки слева
+
+ Ctrl+-
+ Ctrl+-
-
- Close All to the Right
- Закрыть все вкладки справа
+
+ Reset Zoom
+ Сбросить масштаб
-
- Zoom &In
- У&величить масштаб
+
+ Ctrl+0
+ Ctrl+0
-
- Ctrl++
- Ctrl++
+
+ About Qt
+ О Qt
-
- Zoom &Out
- &Уменьшить масштаб
+
+ About Notepad Next
+ О Notepad Next
-
- Ctrl+-
- Ctrl+-
+
+ Show Whitespace
+ Показывать пустое пространство
-
- Reset Zoom
- Сбросить масштаб
+
+ Show End of Line
+ Показывать символ конца строки
-
- Ctrl+0
- Ctrl+0
+
+ Show All Characters
+ Показывать все символы
-
- About Qt
- О Qt
+
+ Show Indent Guide
+ Показывать направляющие отступов
-
- About Notepad Next
- О Notepad Next
+
+ Show Wrap Symbol
+ Отображать знак Перенос строк
-
- Show Whitespace
- Показывать пустое пространство
+
+ Word Wrap
+ Перенос строк
-
- Show End of Line
- Показывать символ конца строки
+
+ Restore Recently Closed File
+ Открыть последний закрытый файл
-
- Show All Characters
- Показывать все символы
+
+ Ctrl+Shift+T
+ Ctrl+Shift+T
-
- Show Indent Guide
- Показывать направляющие отступов
+
+ Open All Recent Files
+ Открыть все недавние файлы
-
- Show Wrap Symbol
- Отображать знак Перенос строк
+
+ Clear Recent Files List
+ Очистить список недавних файлов
-
- Word Wrap
- Перенос строк
+
+ &Find...
+ &Найти...
-
- Restore Recently Closed File
- Открыть последний закрытый файл
+
+ Ctrl+F
+ Ctrl+F
-
- Ctrl+Shift+T
- Ctrl+Shift+T
+
+ Find in Files...
+ Найти в файлах...
-
- Open All Recent Files
- Открыть все недавние файлы
+
+ Find &Next
+ Искать &далее
-
- Clear Recent Files List
- Очистить список недавних файлов
+
+ F3
+ F3
-
- &Find...
- &Найти...
+
+ Find &Previous
+ Искать &ранее
-
- Ctrl+F
- Ctrl+F
+
+ Shift+F3
+
-
- Find in Files...
- Найти в файлах...
+
+ &Replace...
+ &Заменить...
-
- Find &Next
- Искать &далее
+
+ Ctrl+H
+ Ctrl+H
-
- F3
- F3
+
+ Full Screen
+ Полный экран
-
- Find &Previous
- Искать &ранее
+
+ F11
+ F11
-
- &Replace...
- &Заменить...
+
+
+ Start Recording
+ Начать запись
-
- Ctrl+H
- Ctrl+H
+
+ Playback
+ Воспроизвести
-
- Full Screen
- Полный экран
+
+ Ctrl+Shift+P
+ Ctrl+Shift+
-
- F11
- F11
+
+ Save Current Recorded Macro...
+ Сохранить записанный макрос...
-
-
- Start Recording
- Начать запись
+
+ Run a Macro Multiple Times...
+ Многократный запуск...
-
- Playback
- Воспроизвести
+
+ Preferences...
+ Настройки...
-
- Ctrl+Shift+P
- Ctrl+Shift+
+
+ Quick Find
+ Быстрый поиск
-
- Save Current Recorded Macro...
- Сохранить записанный макрос...
+
+ Ctrl+Alt+I
+ Ctrl+Alt+I
-
- Run a Macro Multiple Times...
- Многократный запуск...
+
+ Select Next Instance
+ Выделить следующий экземпляр
-
- Preferences...
- Настройки...
+
+ Ctrl+D
+ Ctrl+D
-
- Quick Find
- Быстрый поиск
+
+ Move to Trash...
+ Убрать в корзину...
-
- Ctrl+Alt+I
- Ctrl+Alt+I
+
+ Move to Trash
+ Убрать в корзину
-
- Select Next Instance
- Выделить следующий экземпляр
+
+ Check for Updates...
+ Проверить обновления...
-
- Ctrl+D
- Ctrl+D
+
+ &Go to Line...
+ &Перейти к строке...
-
- Move to Trash...
- Убрать в корзину...
+
+ Ctrl+G
+ Ctrl+G
-
- Move to Trash
- Убрать в корзину
+
+ Print...
+ Печать...
-
- Check for Updates...
- Проверить обновления...
+
+ Ctrl+P
+ Ctrl+P
-
- &Go to Line...
- &Перейти к строке...
+
+ Open Folder as Workspace...
+ Открыть папку как Проект...
-
- Ctrl+G
- Ctrl+G
+
+ Toggle Single Line Comment
+ Комментирование строки (включить/выключить)
-
- Print...
- Печать...
+
+ Ctrl+/
+ Ctrl+/
-
- Ctrl+P
- Ctrl+P
+
+ Single Line Comment
+ Комментировать строку
-
- Open Folder as Workspace...
- Открыть папку как Проект...
+
+ Ctrl+K
+ Ctrl+K
-
- Toggle Single Line Comment
- Комментирование строки (включить/выключить)
+
+ Single Line Uncomment
+ Раскомментировать строку
-
- Ctrl+/
- Ctrl+/
+
+ Ctrl+Shift+K
+ Ctrl+Shift+K
-
- Single Line Comment
- Комментировать строку
+
+ Edit Macros...
+ Редактирование макросов...
-
- Ctrl+K
- Ctrl+K
+
+ This is not currently implemented
+ Это еще не реализовано
-
- Single Line Uncomment
- Раскомментировать строку
+
+ Column Mode...
+ Режим столбцов...
-
- Ctrl+Shift+K
- Ctrl+Shift+K
+
+ Export as HTML...
+ Экспортировать как HTML...
-
- Edit Macros...
- Редактирование макросов...
+
+ Export as RTF...
+ Экспортировать как RTF...
-
- This is not currently implemented
- Это еще не реализовано
+
+ Copy as HTML
+ Копировать как HTML
-
- Column Mode...
- Режим столбцов...
+
+ Copy as RTF
+ Копировать как RTF
-
- Export as HTML...
- Экспортировать как HTML...
+
+ Base 64 Encode
+ Кодирование Base 64
-
- Export as RTF...
- Экспортировать как RTF...
+
+ URL Encode
+ Кодирование URL
-
- Copy as HTML
- Копировать как HTML
+
+ Base 64 Decode
+ Декодирование Base 64
-
- Copy as RTF
- Копировать как RTF
+
+ URL Decode
+ Декодирование URL
-
- Base 64 Encode
- Кодирование Base 64
+
+ Copy URL
+ Копировать URL
-
- URL Encode
- Кодирование URL
+
+ Remove Empty Lines
+ Удалить пустые строки
-
- Base 64 Decode
- Декодирование Base 64
+
+
+ Show in Explorer
+ Открыть в Проводнике
-
- URL Decode
- Декодирование URL
+
+ Open %1 Here
+ Open %1 Here
-
- Copy URL
- Копировать URL
+
+ Toggle Bookmark
+ Закладка (поставить/снять)
-
- Remove Empty Lines
- Удалить пустые строки
+
+ Ctrl+F2
+ Ctrl+F2
-
-
- Show in Explorer
- Открыть в Проводнике
+
+ Next Bookmark
+ Следующая закладка
-
- Open %1 Here
- Open %1 Here
+
+ F2
+ F2
-
- Toggle Bookmark
- Закладка (поставить/снять)
+
+ Previous Bookmark
+ Предыдущая закладка
-
- Ctrl+F2
- Ctrl+F2
+
+ Shift+F2
+ Shift+F2
-
- Next Bookmark
- Следующая закладка
+
+ Clear Bookmarks
+ Очистить закладки
-
- F2
- F2
+
+ Invert Bookmarks
+ Инвертировать закладки
-
- Previous Bookmark
- Предыдущая закладка
+
+ Next Tab
+ Следующая вкладка
-
- Shift+F2
- Shift+F2
+
+ Ctrl+Tab
+ Ctrl+Tab
-
- Clear Bookmarks
- Очистить закладки
+
+ Previous Tab
+ Предыдущая вкладка
-
- Invert Bookmarks
- Инвертировать закладки
+
+ Ctrl+Shift+Tab
+ Ctrl+Shift+Tab
-
- Next Tab
- Next Tab
+
+ Fold Level 1
+ Свернуть первый уровень
-
- Ctrl+Tab
- Ctrl+Tab
+
+ Alt+1
+ Alt+1
-
- Previous Tab
- Previous Tab
+
+ Fold Level 2
+ Свернуть второй уровень
-
- Ctrl+Shift+Tab
- Ctrl+Shift+Tab
+
+ Alt+2
+ Alt+2
-
- Fold Level 1
- Fold Level 1
+
+ Fold Level 3
+ Свернуть третий уровень
-
- Alt+1
- Alt+1
+
+ Alt+3
+ Alt+3
-
- Fold Level 2
- Fold Level 2
+
+ Fold Level 4
+ Свернуть четвёртый уровень
-
- Alt+2
- Alt+2
+
+ Alt+4
+ Alt+4
-
- Fold Level 3
- Fold Level 3
+
+ Unfold Level 1
+ Развернуть первый уровень
-
- Alt+3
- Alt+3
+
+ Alt+Shift+1
+ Alt+Shift+1
-
- Fold Level 4
- Fold Level 4
+
+ Unfold Level 2
+ Развернуть второй уровень
-
- Alt+4
- Alt+4
+
+ Alt+Shift+2
+ Alt+Shift+2
-
- Unfold Level 1
- Unfold Level 1
+
+ Unfold Level 3
+ Развернуть третий уровень
-
- Alt+Shift+1
- Alt+Shift+1
+
+ Alt+Shift+3
+ Alt+Shift+3
-
- Unfold Level 2
- Unfold Level 2
+
+ Unfold Level 4
+ Развернуть четвёртый уровень
-
- Alt+Shift+2
- Alt+Shift+2
+
+ Alt+Shift+4
+ Alt+Shift+4
-
- Unfold Level 3
- Unfold Level 3
+
+ Fold All
+ Свернуть все
-
- Alt+Shift+3
- Alt+Shift+3
+
+ Alt+0
+ Alt+0
-
- Unfold Level 4
- Unfold Level 4
+
+ Unfold All
+ Развернуть все
-
- Alt+Shift+4
- Alt+Shift+4
+
+ Alt+Shift+0
+ Alt+Shift+0
-
- Fold All
- Fold All
+
+ Fold Level 5
+ Свернуть пятый уровень
-
- Alt+0
- Alt+0
+
+ Alt+5
+ Alt+5
-
- Unfold All
- Unfold All
+
+ Fold Level 6
+ Свернуть шестой уровень
-
- Alt+Shift+0
- Alt+Shift+0
+
+ Alt+6
+ Alt+6
-
- Fold Level 5
- Fold Level 5
+
+ Fold Level 7
+ Свернуть седьмой уровень
-
- Alt+5
- Alt+5
+
+ Alt+7
+ Alt+7
-
- Fold Level 6
- Fold Level 6
+
+ Fold Level 8
+ Свернуть восьмой уровень
-
- Alt+6
- Alt+6
+
+ Alt+8
+ Alt+8
-
- Fold Level 7
- Fold Level 7
+
+ Fold Level 9
+ Свернуть девятый уровень
-
- Alt+7
- Alt+7
+
+ Alt+9
+ Alt+9
-
- Fold Level 8
- Fold Level 8
+
+ Unfold Level 5
+ Развернуть пятый уровень
-
- Alt+8
- Alt+8
+
+ Alt+Shift+5
+ Alt+Shift+5
-
- Fold Level 9
- Fold Level 9
+
+ Unfold Level 6
+ Развернуть шестой уровень
-
- Alt+9
- Alt+9
+
+ Alt+Shift+6
+ Alt+Shift+6
-
- Unfold Level 5
- Unfold Level 5
+
+ Unfold Level 7
+ Развернуть седьмой уровень
-
- Alt+Shift+5
- Alt+Shift+5
+
+ Alt+Shift+7
+ Alt+Shift+7
-
- Unfold Level 6
- Unfold Level 6
+
+ Unfold Level 8
+ Развернуть восьмой уровень
-
- Alt+Shift+6
- Alt+Shift+6
+
+ Alt+Shift+8
+ Alt+Shift+8
-
- Unfold Level 7
- Unfold Level 7
+
+ Unfold Level 9
+ Развернуть девятый уровень
-
- Alt+Shift+7
- Alt+Shift+7
+
+ Alt+Shift+9
+ Alt+Shift+9
-
- Unfold Level 8
- Unfold Level 8
+
+
+ Toggle Overtype
+ Toggle Overtype
-
- Alt+Shift+8
- Alt+Shift+8
+
+ Ins
+ Ins
-
- Unfold Level 9
- Unfold Level 9
+
+ Debug Info...
+ Debug Info...
-
- Alt+Shift+9
- Alt+Shift+9
+
+ Cut Bookmarked Lines
+ Cut Bookmarked Lines
-
-
- Toggle Overtype
- Toggle Overtype
+
+ Copy Bookmarked Lines
+ Copy Bookmarked Lines
-
- Ins
- Ins
+
+ Delete Bookmarked Lines
+ Delete Bookmarked Lines
-
- Debug Info...
- Debug Info...
+
+ Mark Style 1
+ Mark Style 1
-
- Cut Bookmarked Lines
- Cut Bookmarked Lines
+
+ Mark Style 2
+ Mark Style 2
-
- Copy Bookmarked Lines
- Copy Bookmarked Lines
+
+ Clear Style 1
+ Clear Style 1
-
- Delete Bookmarked Lines
- Delete Bookmarked Lines
+
+ Clear Style 2
+ Clear Style 2
-
- Mark Style 1
- Mark Style 1
+
+ Mark Style 3
+ Mark Style 3
-
- Mark Style 2
- Mark Style 2
+
+ Clear Style 3
+ Clear Style 3
-
- Clear Style 1
- Clear Style 1
+
+
+ Clear All Styles
+ Clear All Styles
-
- Clear Style 2
- Clear Style 2
+
+ Remove Duplicate Lines
+ Remove Duplicate Lines
-
- Mark Style 3
- Mark Style 3
+
+ Remove Consecutive Duplicate Lines
+ Remove Consecutive Duplicate Lines
-
- Clear Style 3
- Clear Style 3
+
+ Sort Lines Ascending
+
-
-
- Clear All Styles
- Clear All Styles
+
+ Sort Lines Descending
+
-
- Remove Duplicate Lines
- Remove Duplicate Lines
+
+ Sort Lines Ascending (Case-Insensitive)
+
-
- Remove Consecutive Duplicate Lines
- Remove Consecutive Duplicate Lines
+
+ Sort Lines Descending (Case-Insensitive)
+
-
- Go to line
- Перейти к строке
+
+ Sort Lines by Length Ascending
+
-
- Line Number (1 - %1)
- Номер строки (1 - %1)
+
+ Sort Lines by Length Descending
+
-
- Stop Recording
- Остановить запись
+
+ Reverse Line Order
+
-
- Debug Info
- Debug Info
+
+ Go to line
+ Перейти к строке
-
- New %1
- Новый %1
+
+ Line Number (1 - %1)
+ Номер строки (1 - %1)
-
- Create File
- Создать файл
+
+ Stop Recording
+ Остановить запись
-
- <b>%1</b> does not exist. Do you want to create it?
- <b>%1</b> не существует. Хотите создать его?
+
+ Debug Info
+ Debug Info
-
-
- Save file <b>%1</b>?
- Сохранить файл <b>%1</b>?
+
+ New %1
+ Новый %1
-
-
- Save File
- Сохранить файл
+
+ Create File
+ Создать файл
-
- Open Folder as Workspace
- Открыть папку как Проект
+
+ <b>%1</b> does not exist. Do you want to create it?
+ <b>%1</b> не существует. Хотите создать его?
-
-
- Reload File
- Перезагрузить файл
+
+
+ Save file <b>%1</b>?
+ Сохранить файл <b>%1</b>?
-
- Are you sure you want to reload <b>%1</b>? Any unsaved changes will be lost.
- Уверены, что хотите перезагрузить <b>%1</b>? Все несохраненные изменения будут потеряны.
+
+
+ Save File
+ Сохранить файл
-
- Save a Copy As
- Сохранить копию как
+
+ Open Folder as Workspace
+ Открыть папку как Проект
-
-
- Rename
- Переименовать
+
+
+ Reload File
+ Перезагрузить файл
-
- Name:
- Имя:
+
+ Are you sure you want to reload <b>%1</b>? Any unsaved changes will be lost.
+ Уверены, что хотите перезагрузить <b>%1</b>? Все несохраненные изменения будут потеряны.
-
- Delete File
- Удалить файл
+
+ Save a Copy As
+ Сохранить копию как
-
- Are you sure you want to move <b>%1</b> to the trash?
- Вы действительно хотите переместить <b>%1</b> в корзину?
+
+
+ Rename
+ Переименовать
-
- Error Deleting File
- Ошибка при удалении файла
+
+ Name:
+ Имя:
-
- Something went wrong deleting <b>%1</b>?
- Что-то пошло не так при удалении <b>%1</b>?
+
+ Delete File
+ Удалить файл
-
- Administrator
- Администратор
+
+ Are you sure you want to move <b>%1</b> to the trash?
+ Вы действительно хотите переместить <b>%1</b> в корзину?
-
- <b>%1</b> has been modified by another program. Do you want to reload it?
- <b>%1</b> has been modified by another program. Do you want to reload it?
+
+ Error Deleting File
+ Ошибка при удалении файла
-
- Read error
- Read error
+
+ Something went wrong deleting <b>%1</b>?
+ Что-то пошло не так при удалении <b>%1</b>?
-
- Write error
- Write error
+
+ Administrator
+ Администратор
-
- Fatal error
- Fatal error
+
+ <b>%1</b> has been modified by another program. Do you want to reload it?
+ <b>%1</b> has been modified by another program. Do you want to reload it?
-
- Resource error
- Resource error
+
+ Read error
+ Read error
-
- Open error
- Open error
+
+ Write error
+ Write error
-
- Abort error
- Abort error
+
+ Fatal error
+ Fatal error
-
- Timeout error
- Timeout error
+
+ Resource error
+ Resource error
-
- Unspecified error
- Unspecified error
+
+ Open error
+ Open error
-
- Remove error
- Remove error
+
+ Abort error
+ Abort error
-
- Rename error
- Rename error
+
+ Timeout error
+ Timeout error
-
- Position error
- Position error
+
+ Unspecified error
+ Unspecified error
-
- Resize error
- Resize error
+
+ Remove error
+ Remove error
-
- Permissions error
- Permissions error
+
+ Rename error
+ Rename error
-
- Copy error
- Copy error
+
+ Position error
+ Position error
-
- Unknown error (%1)
- Unknown error (%1)
+
+ Resize error
+ Resize error
-
- Error Saving File
- Ошибка при сохранении файла
+
+ Permissions error
+ Permissions error
-
- An error occurred when saving <b>%1</b><br><br>Error: %2
- Произошла ошибка при сохранении <b>%1</b><br><br>Ошибка: %2
+
+ Copy error
+ Copy error
-
- Zoom: %1%
- Масштаб: %1%
+
+ Unknown error (%1)
+ Unknown error (%1)
-
- No updates are available at this time.
- В настоящее время обновлений нет.
+
+ Error Saving File
+ Ошибка при сохранении файла
-
-
+
+
+ An error occurred when saving <b>%1</b><br><br>Error: %2
+ Произошла ошибка при сохранении <b>%1</b><br><br>Ошибка: %2
+
+
+
+ Zoom: %1%
+ Масштаб: %1%
+
+
+
+ No updates are available at this time.
+ В настоящее время обновлений нет.
+
+
+
PreferencesDialog
-
- Preferences
- Настройки
+
+ Preferences
+ Настройки
+
+
+
+ Unsaved сhanges
+ Несохраненные изменения
+
+
+ Default title
+ Название по-умолчанию
+
+
+ Unsaved Changes
+ Несохраненные изменения
+
+
+
+ You have unsaved changes.
+Do you want to save them before closing?
+ Сохранить внесенные правки?
+
+
+ Show menu bar
+ Показать строку меню
+
+
+ Show toolbar
+ Показать панель инструментов
+
+
+ Show status bar
+ Показать строку состояния
+
+
+ Restore previous session
+ Восстанавливать предыдущую сессию
+
+
+ Unsaved changes
+ Несохраненные изменения
+
+
+ Temporary files
+ Временные файлы
+
+
+ Recenter find/replace dialog when opened
+ Recenter find/replace dialog when opened
+
+
+ Combine search results
+ Комбинировать результаты поиска
+
+
+ Translation:
+ Перевод:
+
+
+ Exit on last tab closed
+ Exit on last tab closed
+
+
+ Default Font
+ Default Font
+
+
+ Font
+ Font
+
+
+ Font Size
+ Font Size
+
+
+ pt
+ pt
+
+
+ Default Line Endings
+ Default Line Endings
+
+
+ Highlight URLs
+ Highlight URLs
+
+
+ Show Line Numbers
+ Show Line Numbers
+
+
+ Default Directory
+ Default Directory
+
+
+ Follow Current Document
+ Follow Current Document
+
+
+ Last Used Directory
+ Last Used Directory
+
+
+ ...
+ ...
+
+
+ TextLabel
+ TextLabel
+
+
+ An application restart is required to apply certain settings.
+ Для применения определенных настроек требуется перезапуск приложения.
+
+
+ Warning
+ Предупреждение
+
+
+ This feature is experimental and it should not be considered safe for critically important work. It may lead to possible data loss. Use at your own risk.
+ Эта функция является экспериментальной, и ее не следует считать безопасной для критически важной работы. Это может привести к возможной потере данных. Используйте на свой риск.
+
+
+ System Default
+ System Default
+
+
+ Windows (CR LF)
+ Windows (CR LF)
+
+
+ Linux (LF)
+ Linux (LF)
-
- Show menu bar
- Показать строку меню
+ Macintosh (CR)
+ Macintosh (CR)
-
- Show toolbar
- Показать панель инструментов
+ <System Default>
+ <Использовать системный>
+
+
+ QObject
-
- Show status bar
- Показать строку состояния
+
+ List All Tabs
+ Показать перечень вкладок
-
- Restore previous session
- Восстанавливать предыдущую сессию
+
+ Detach Group
+ Отделить группу
-
- Unsaved changes
- Несохраненные изменения
+
+ Minimize
+ Свернуть
-
- Temporary files
- Временные файлы
+
+ Close Tab
+ Закрыть вкладку
-
- Recenter find/replace dialog when opened
- Recenter find/replace dialog when opened
+
+ Default directory
+ Каталог по-умолчанию
-
- Combine search results
- Комбинировать результаты поиска
+
+ Current document directory
+ Каталог активного документа
-
- Translation:
- Перевод:
+
+ Last used directory
+ Последний использованный каталог
-
- Exit on last tab closed
- Exit on last tab closed
+
+ Selected directory:
+ Выбранный каталог:
-
- Default Font
- Default Font
+
+ Selected directory path here...
+ Путь к выбранному каталогу...
-
- Font
- Font
+
+ Open directory select dialog
+ Открыть окно выбора каталога
-
- Font Size
- Font Size
+
+ Not exists
+ Не существует
-
- pt
- pt
+
+ Not a directory
+ Не каталог
-
- Default Line Endings
- Default Line Endings
+
+ No write access
+ Нет прав на запись
-
- Highlight URLs
- Highlight URLs
+
+ Please, use absolute path
+ Пожалуйста, используйте полный путь
-
- Show Line Numbers
- Show Line Numbers
+
+ Select default directory
+ Выбор каталога по-умолчанию
-
-
- Default Directory
- Default Directory
+
+ Restore previous session
+ Восстанавливать предыдущую сессию
-
- Follow Current Document
- Follow Current Document
+
+ Unsaved changes
+ Несохраненные изменения
-
- Last Used Directory
- Last Used Directory
+
+ Temporary files
+ Временные файлы
-
- ...
- ...
+
+ Like in system
+ Как в системе
-
- TextLabel
- TextLabel
+
+ System default
+ Окончания строк
+ Системные
-
- An application restart is required to apply certain settings.
- Для применения определенных настроек требуется перезапуск приложения.
+ <System>
+ <Системный>
-
- Warning
- Предупреждение
+ <System default>
+ <Системные>
-
- This feature is experimental and it should not be considered safe for critically important work. It may lead to possible data loss. Use at your own risk.
- Эта функция является экспериментальной, и ее не следует считать безопасной для критически важной работы. Это может привести к возможной потере данных. Используйте на свой риск.
+ <System Language>
+ <Системный>
-
- System Default
- System Default
+
+ Language:
+ Язык:
-
- Windows (CR LF)
- Windows (CR LF)
+ System Default
+ Окончания строк
+ Системные
-
- Linux (LF)
- Linux (LF)
+
+ Windows (CR LF)
+ Windows (CR LF)
-
- Macintosh (CR)
- Macintosh (CR)
+
+ Unix (LF)
+ Unix (LF)
-
- <System Default>
- <Использовать системный>
+
+ Macintosh (CR)
+ Macintosh (CR)
-
-
+
+
+ Default line endings:
+ Окончания строк по-умолчанию:
+
+
+
+ Recenter find/replace dialog when opened
+ Центрировать окно поиска/замены при открытии
+
+
+
+ Combine search results
+ Комбинировать результаты поиска
+
+
+
+ Exit on last tab closed
+ Выход после закрытия последней вкладки
+
+
+
+ Behavior
+ Поведение
+
+
+
+ Application restart required to apply changes.
+ Требуется перезапуск приложения.
+
+
+ Window
+ Главное окно
+
+
+
+ Main window
+ Главное окно
+
+
+
+ Show menu bar
+ Показать строку меню
+
+
+
+ Show toolbar
+ Показать панель инструментов
+
+
+
+ Show status bar
+ Показать строку состояния
+
+
+
+ Font
+ Шрифт
+
+
+
+ Family:
+ Семейство:
+
+
+
+ Size:
+ Размер:
+
+
+
+ Editor
+ Редактор
+
+
+
+ Highlight URLs
+ Подсвечивать ссылки
+
+
+
+ Show line numbers
+ Показывать номера строк
+
+
+ Show Line Numbers
+ Показывать номера строк
+
+
+
+ Appearance
+ Внешний вид
+
+
+
QuickFindWidget
-
- Frame
- Фрейм
+
+ Frame
+ Фрейм
-
- Find...
- Поиск...
+
+ Find...
+ Поиск...
-
- Match case
- Учитывать регистр
+
+ Match case
+ Учитывать регистр
-
- Aa
- Aa
+
+ Aa
+ Aa
-
- Match whole word
- Искать целые слова
+
+ Match whole word
+ Искать целые слова
-
- |A|
- |A|
+
+ |A|
+ |A|
-
- Use regular expression
- Используйте регулярное выражение
+
+ Use regular expression
+ Используйте регулярное выражение
-
- . *
- . *
+
+ . *
+ . *
-
- Alt+E
- Alt+E
+
+ Alt+E
+ Alt+E
-
- %L1/%L2
- %L1/%L2
+
+ %L1/%L2
+ %L1/%L2
-
-
+
+
SearchResultsDock
-
- Search Results
- Результаты поиска
+
+ Search Results
+ Результаты поиска
+
+
+
+ Copy Results to Clipboard
+ Copy Results to Clipboard
+
+
+
+ Collapse All
+ Свернуть все
+
+
+
+ Expand All
+ Развернуть все
+
+
+
+ Delete Entry
+ Удалить запись
+
+
+
+ Delete All
+ Удалить все
+
+
+
+ Updater
+
+
+ Would you like to download the update now?
+
+
+
+
+ Would you like to download the update now?<br />This is a mandatory update, exiting now will close the application.
+
+
+
+
+ <strong>Change log:</strong><br/>%1
+
+
+
+
+ Version %1 of %2 has been released!
+
+
+
+
+ No updates are available for the moment
+
+
+
+
+ Congratulations! You are running the latest version of %1
+
+
+
+
+ Window
+
+
+ QSimpleUpdater Example
+
+
+
+
+ <h1><i>QSimpleUpdater</i></h1>
+
+
+
+
+ <i>A simpler way to update your Qt applications...</i>
+
+
+
+
+ Updater Options
+
+
+
+
+ 0.1
+
+
+
+
+ Write a version string...
+
+
+
+
+ Set installed version (latest version is 1.0)
+
+
+
+
+ Do not use the QSU library to read the appcast
+
+
+
+
+ Notify me when an update is available
+
+
+
+
+ Show all notifications
+
+
+
+
+ Enable integrated downloader
+
+
+
+
+ Mandatory Update
+
+
+
+
+ Changelog
+
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'.Lucida Grande UI'; font-size:13pt;">Click "Check for Updates" to update this field...</span></p></body></html>
+
+
+
+
+ Reset Fields
+
+
+
+
+ Close
+ Закрыть
+
+
+
+ Check for Updates
+
+
+
+
+ ads::CAutoHideTab
+
+
+ Detach
+
+
+
+
+ Pin To...
+
+
+
+
+ Top
+
+
+
+
+ Left
+
+
+
+
+ Right
+
+
+
+
+ Bottom
+
+
+
+
+ Unpin (Dock)
+
+
+
+
+ Close
+ Закрыть
+
+
+
+ ads::CDockAreaTitleBar
+
+
+ Detach
+
+
+
+
+ Detach Group
+ Отделить группу
+
+
+
+
+ Unpin (Dock)
+
+
+
+
+
+ Pin Group
+
+
+
+
+ Pin Group To...
+
+
+
+
+ Top
+
+
+
+
+ Left
+
+
+
+
+ Right
+
+
+
+
+ Bottom
+
+
+
+
+
+ Minimize
+ Свернуть
+
+
+
+
+
+ Close
+ Закрыть
+
+
+
+
+ Close Group
+
+
+
+
+ Close Other Groups
+
+
+
+
+ Pin Active Tab (Press Ctrl to Pin Group)
+
+
+
+
+ Close Active Tab
+
+
+
+
+ ads::CDockManager
+
+
+ Show View
+
+
+
+
+ ads::CDockWidgetTab
+
+
+ Detach
+
+
+
+
+ Pin
+
+
+
+
+ Pin To...
+
+
+
+
+ Top
+
-
- Copy Results to Clipboard
- Copy Results to Clipboard
+
+ Left
+
-
- Collapse All
- Свернуть все
+
+ Right
+
-
- Expand All
- Развернуть все
+
+ Bottom
+
-
- Delete Entry
- Удалить запись
+
+ Close
+ Закрыть
-
- Delete All
- Удалить все
+
+ Close Others
+
-
+
diff --git a/i18n/NotepadNext_uk.ts b/i18n/NotepadNext_uk.ts
index 415fdda89..6a997a10a 100644
--- a/i18n/NotepadNext_uk.ts
+++ b/i18n/NotepadNext_uk.ts
@@ -1,2299 +1,3046 @@
-
-
+
+
+ AuthenticateDialog
+
+
+ Dialog
+
+
+
+
+ Please provide the user name and password for the download location.
+
+
+
+
+ &User name:
+
+
+
+
+ &Password:
+
+
+
+
ColumnEditorDialog
-
- Column Mode
- Створення стовпця
+
+ Column Mode
+ Створення стовпця
-
- Text
- Текст
+
+ Text
+ Текст
-
- Numbers
- Числа
+
+ Numbers
+ Числа
-
- Start:
- Початок:
+
+ Start:
+ Початок:
-
- Step:
- Крок:
+
+ Step:
+ Крок:
-
-
+
+
DebugLogDock
-
- Debug Log
- Журнал налагодження
+
+ Debug Log
+ Журнал налагодження
+
+
+
+ Downloader
+
+
+
+ Updater
+
+
+
+
+
+
+ Downloading updates
+
+
+
+
+ Time remaining: 0 minutes
+
+
+
+
+ Open
+
+
+
+
+
+ Stop
+
+
+
+
+
+ Time remaining
+
+
+
+
+ unknown
+
+
+
+
+ Error
+
+
+
+
+ Cannot find downloaded update!
+
+
+
+
+ Close
+ Закрити
+
+
+
+ Download complete!
+
+
+
+
+ The installer will open separately
+
+
+
+
+ Click "OK" to begin installing the update
+
+
+
+
+ In order to install the update, you may need to quit the application.
+
+
+
+
+ In order to install the update, you may need to quit the application. This is a mandatory update, exiting now will close the application.
+
+
+
+
+ Click the "Open" button to apply the update
+
+
+
+
+ Are you sure you want to cancel the download?
+
+
+
+
+ Are you sure you want to cancel the download? This is a mandatory update, exiting now will close the application
+
+
+
+
+
+ %1 bytes
+
+
+
+
+
+ %1 KB
+
+
+
+
+
+ %1 MB
+
+
+
+
+ of
+
+
+
+
+ Downloading Updates
+
+
+
+
+ Time Remaining
+
-
-
+
+
+ Unknown
+
+
+
+
+ about %1 hours
+
+
+
+
+ about one hour
+
+
+
+
+ %1 minutes
+
+
+
+
+ 1 minute
+
+
+
+
+ %1 seconds
+
+
+
+
+ 1 second
+
+
+
+
EditorInfoStatusBar
-
- Length: %L1 Lines: %L2
- Розмір: %L1 Рядків: %L2
+
+ Length: %L1 Lines: %L2
+ Розмір: %L1 Рядків: %L2
-
- Sel: N/A
- Обрано: N/A
+
+ Sel: N/A
+ Обрано: N/A
-
- Sel: %L1 | %L2
- Обрано: %L1 | %L2
+
+ Sel: %L1 | %L2
+ Обрано: %L1 | %L2
-
- Ln: %L1 Col: %L2
- Рядок: %L1 Стовпець: %L2
+
+ Ln: %L1 Col: %L2
+ Рядок: %L1 Стовпець: %L2
-
- Macintosh (CR)
- Macintosh (CR)
+
+ Macintosh (CR)
+ Macintosh (CR)
-
- Windows (CR LF)
- Windows (CR LF)
+
+ Windows (CR LF)
+ Windows (CR LF)
-
- Unix (LF)
- Unix (LF)
+
+ Unix (LF)
+ Unix (LF)
-
- ANSI
- ANSI
+
+ ANSI
+ ANSI
-
- UTF-8
- UTF-8
+
+ UTF-8
+ UTF-8
-
- UTF-8 BOM
- UTF-8 BOM
+
+ UTF-8 BOM
+ UTF-8 BOM
-
- UTF-16LE BOM
- UTF-16LE BOM
+
+ UTF-16LE BOM
+ UTF-16LE BOM
-
- UTF-16BE BOM
- UTF-16BE BOM
+
+ UTF-16BE BOM
+ UTF-16BE BOM
-
- OVR
- This is a short abbreviation to indicate characters will be replaced when typing
- OVR
+
+ OVR
+ This is a short abbreviation to indicate characters will be replaced when typing
+ OVR
-
- INS
- This is a short abbreviation to indicate characters will be inserted when typing
- INS
+
+ INS
+ This is a short abbreviation to indicate characters will be inserted when typing
+ INS
-
-
+
+
EditorInspectorDock
-
- Editor Inspector
- Аналізатор редактору
+
+ Editor Inspector
+ Аналізатор редактору
-
- Position Information
- Інформація про позицію
+
+ Position Information
+ Інформація про позицію
-
- Current Position
- Поточна позиція
+
+ Current Position
+ Поточна позиція
-
- Current Position (x, y)
- Поточна позиція (x, y)
+
+ Current Position (x, y)
+ Поточна позиція (x, y)
-
- Column
- Стовпець
+
+ Column
+ Стовпець
-
- Current Style
- Поточний стиль
+
+ Current Style
+ Поточний стиль
-
- Current Line
- Поточний рядок
+
+ Current Line
+ Поточний рядок
-
- Line Length
- Розмір рядка
+
+ Line Length
+ Розмір рядка
-
- Line End Position
- Позиція кінця рядка
+
+ Line End Position
+ Позиція кінця рядка
-
- Line Indentation
- Відступ рядка
+
+ Line Indentation
+ Відступ рядка
-
- Line Indent Position
- Позиція відступу рядка
+
+ Line Indent Position
+ Позиція відступу рядка
-
- Selection Information
- Інформація про виділення
+
+ Selection Information
+ Інформація про виділення
-
- Mode
- Режим
+
+ Mode
+ Режим
-
- Is Rectangle
- Прямокутне виділення ?
+
+ Is Rectangle
+ Прямокутне виділення ?
-
- Selection Empty
- Пусте виділення ?
+
+ Selection Empty
+ Пусте виділення ?
-
- Main Selection
- Головне виділення
+
+ Main Selection
+ Головне виділення
-
- # of Selections
- # виділень
+
+ # of Selections
+ # виділень
-
- Multiple Selections
- Множинне виділення
+
+ Multiple Selections
+ Множинне виділення
-
- Document Information
- Інформація про документ
+
+ Document Information
+ Інформація про документ
-
- Length
- Довжина
+
+ Length
+ Довжина
-
- Line Count
- Кількісь рядків
+
+ Line Count
+ Кількісь рядків
-
- View Information
- Інформація про видиму область
+
+ View Information
+ Інформація про видиму область
-
- Lines on Screen
- Макс. кількість рядків на екрані
+
+ Lines on Screen
+ Макс. кількість рядків на екрані
-
- First Visible Line
- Перший видимий рядок
+
+ First Visible Line
+ Перший видимий рядок
-
- X Offset
- Зміщення по осі Х
+
+ X Offset
+ Зміщення по осі Х
-
- Fold Information
- Інформація про блок
+
+ Fold Information
+ Інформація про блок
-
- Visible From Doc Line
- Visible From Doc Line
+
+ Visible From Doc Line
+ Visible From Doc Line
-
- Doc Line From Visible
- Doc Line From Visible
+
+ Doc Line From Visible
+ Doc Line From Visible
-
- Fold Level
- Рівень блоку
+
+ Fold Level
+ Рівень блоку
-
- Is Fold Header
- Початок блоку ?
+
+ Is Fold Header
+ Початок блоку ?
-
- Fold Parent
- Початок блоку
+
+ Fold Parent
+ Початок блоку
-
- Last Child
- Кінець блоку
+
+ Last Child
+ Кінець блоку
-
- Contracted Fold Next
- Contracted Fold Next
+
+ Contracted Fold Next
+ Contracted Fold Next
-
- Caret
- Каретка
+
+ Caret
+ Каретка
-
- Anchor
- Якір
+
+ Anchor
+ Якір
-
- Caret Virtual Space
- Віртуальний простір каретки
+
+ Caret Virtual Space
+ Віртуальний простір каретки
-
- Anchor Virtual Space
- Віртуальний простір якору
+
+ Anchor Virtual Space
+ Віртуальний простір якору
-
-
+
+
FileList
-
- File List
- Список файлів
+
+ File List
+ Список файлів
-
- ...
- ...
+
+ ...
+ ...
-
- Sort by File Name
- Сортувати за іменем файлу
+
+ Sort by File Name
+ Сортувати за іменем файлу
-
-
+
+
FindReplaceDialog
-
-
-
- Find
- Шукати
+
+
+
+ Find
+ Шукати
-
- Search Mode
- Режим пошуку
+
+ Search Mode
+ Режим пошуку
-
- &Normal
- З&а замовчуванням
+
+ &Normal
+ З&а замовчуванням
-
- E&xtended (\n, \r, \t, \0, \x...)
- Р&озширений(\n, \r, \t, \0, \x...)
+
+ E&xtended (\n, \r, \t, \0, \x...)
+ Р&озширений(\n, \r, \t, \0, \x...)
-
- Re&gular expression
- Р&егулярні вирази
+
+ Re&gular expression
+ Р&егулярні вирази
-
- &. matches newline
- &. - новий рядок
+
+ &. matches newline
+ &. - новий рядок
-
- Transparenc&y
- &Прозорість вікна
+
+ Transparenc&y
+ &Прозорість вікна
-
- On losing focus
- При втраті фокусу
+
+ On losing focus
+ При втраті фокусу
-
- Always
- Завжди
+
+ Always
+ Завжди
-
- Coun&t
- &Кількість
+
+ Coun&t
+ &Кількість
-
- &Replace
- &Замінити
+
+ &Replace
+ &Замінити
-
- Replace &All
- Замінити &всі
+
+ Replace &All
+ Замінити &всі
-
- Replace All in &Opened Documents
- За&мінити всі у відкритих документах
+
+ Replace All in &Opened Documents
+ За&мінити всі у відкритих документах
-
- Find All in All &Opened Documents
- З&найти всі у всіх відкритих документах
+
+ Find All in All &Opened Documents
+ З&найти всі у всіх відкритих документах
-
- Find All in Current Document
- Знайти всі у поточному документі
+
+ Find All in Current Document
+ Знайти всі у поточному документі
-
- Close
- Закрити
+
+ Close
+ Закрити
-
- &Find:
- &Шукати:
+
+ &Find:
+ &Шукати:
-
- Replace:
- Замінити:
+
+ Replace:
+ Замінити:
-
- Backward direction
- Зворотній напрям
+
+ Backward direction
+ Зворотній напрям
-
- Match &whole word only
- Ш&укати ціле слово
+
+ Match &whole word only
+ Ш&укати ціле слово
-
- Match &case
- Враховувати рег&істр
+
+ Match &case
+ Враховувати рег&істр
-
- Wra&p Around
- &Циклічний пошук
+
+ Wra&p Around
+ &Циклічний пошук
-
- Replace
- Замінити
+
+ Replace
+ Замінити
-
-
- Replaced %Ln matches
-
- Замінено %Ln співпадінь
- Replaced %Ln matches
- Replaced %Ln matches
- Replaced %Ln matches
-
+
+
+ Replaced %Ln matches
+
+ Замінено %Ln співпадінь
+ Replaced %Ln matches
+ Replaced %Ln matches
+
-
- The end of the document has been reached. Found 1st occurrence from the top.
- Досягнуто кінець документу. Знайдено 1 збіг.
+
+ The end of the document has been reached. Found 1st occurrence from the top.
+ Досягнуто кінець документу. Знайдено 1 збіг.
-
- No matches found.
- Нічого не знайдено.
+
+ No matches found.
+ Нічого не знайдено.
-
- 1 occurrence was replaced
- Був замінений 1 збіг
+
+ 1 occurrence was replaced
+ Був замінений 1 збіг
-
- No more occurrences were found
- Більше збігів не знайдено
+
+ No more occurrences were found
+ Більше збігів не знайдено
-
- Found %Ln matches
-
- Знайдено %Ln співпадінь
- Found %Ln matches
- Found %Ln matches
- Found %Ln matches
-
-
-
-
+
+ Found %Ln matches
+
+ Знайдено %Ln співпадінь
+ Found %Ln matches
+ Found %Ln matches
+
+
+
+
FolderAsWorkspaceDock
-
- Folder as Workspace
- Каталог як робочий простір
+
+ Folder as Workspace
+ Каталог як робочий простір
-
-
+
+
HexViewerDock
-
- Hex Viewer
- HEX-переглядач
+ Hex Viewer
+ HEX-переглядач
-
-
+
+
LanguageInspectorDock
-
- Language Inspector
- Аналізатор синтаксису
+
+ Language Inspector
+ Аналізатор синтаксису
-
- Language:
- Синтаксис:
+
+ Language:
+ Синтаксис:
-
- Lexer:
- Lexer:
+
+ Lexer:
+ Lexer:
-
- Properties:
- Властивості:
+
+ Properties:
+ Властивості:
-
- Property
- Властивість
+
+ Property
+ Властивість
-
- Type
- Тип
+
+ Type
+ Тип
-
-
- Description
- Опис
+
+
+ Description
+ Опис
-
- Value
- Значення
+
+ Value
+ Значення
-
- Keywords:
- Ключові слова:
+
+ Keywords:
+ Ключові слова:
-
- ID
- ID
+
+ ID
+ ID
-
- Styles:
- Стилі:
+
+ Styles:
+ Стилі:
-
- TextLabel
- Текстове поле
+
+ TextLabel
+ Текстове поле
-
- Position %1 Style %2
- Позиція: %1 Стиль: %2
+
+ Position %1 Style %2
+ Позиція: %1 Стиль: %2
-
-
+
+
LuaConsoleDock
-
- Lua Console
- Консоль Lua
+
+ Lua Console
+ Консоль Lua
-
-
+
+
MacroEditorDialog
-
- Macro Editor
- Редактор макросів
+
+ Macro Editor
+ Редактор макросів
-
- Name
- Назва
+
+ Name
+ Назва
-
- Shortcut
- Скорочення
+
+ Shortcut
+ Скорочення
-
- Steps:
- Операції:
+
+ Steps:
+ Операції:
-
- Insert Macro Step
- Вставити операцію
+
+ Insert Macro Step
+ Вставити операцію
-
- Delete Selected Macro Step
- Видалити операцію
+
+ Delete Selected Macro Step
+ Видалити операцію
-
- Move Selected Macro Step Up
- Перемістити операцію вгору
+
+ Move Selected Macro Step Up
+ Перемістити операцію вгору
-
- Move Selected Macro Step Down
- Перемістити операцію вниз
+
+ Move Selected Macro Step Down
+ Перемістити операцію вниз
-
- Copy Selected Macro
- Копіювати макрос
+
+ Copy Selected Macro
+ Копіювати макрос
-
- Delete Selected Macro
- Видалити макрос
+
+ Delete Selected Macro
+ Видалити макрос
-
- Delete Macro
- Видалити макрос
+
+ Delete Macro
+ Видалити макрос
-
- Are you sure you want to delete <b>%1</b>?
- Ви дійсно хочете видалити <b>%1</b>?
+
+ Are you sure you want to delete <b>%1</b>?
+ Ви дійсно хочете видалити <b>%1</b>?
-
- (Copy)
- (копіювати)
+
+ (Copy)
+ (копіювати)
-
-
+
+
MacroRunDialog
-
- Run a Macro Multiple Times
- Багаторазове виконання макросу
+
+ Run a Macro Multiple Times
+ Багаторазове виконання макросу
-
- Macro:
- Макрос:
+
+ Macro:
+ Макрос:
-
- Run Until End of File
- Виконувати до кінця файлу
+
+ Run Until End of File
+ Виконувати до кінця файлу
-
- Execute...
- Виконати...
+
+ Execute...
+ Виконати...
-
- times
- разів
+
+ times
+ разів
-
- Run
- Виконати
+
+ Run
+ Виконати
-
- Cancel
- Скасувати
+
+ Cancel
+ Скасувати
-
-
+
+
MacroSaveDialog
-
- Save Macro
- Збереження макросу
+
+ Save Macro
+ Збереження макросу
-
- Name:
- Назва:
+
+ Name:
+ Назва:
-
- Shortcut:
- Скорочення:
+
+ Shortcut:
+ Скорочення:
-
- OK
- OK
+
+ OK
+ OK
-
- Cancel
- Скасувати
+
+ Cancel
+ Скасувати
-
-
+
+
MacroStepTableModel
-
- Name
- Назва
+
+ Name
+ Назва
-
- Text
- Текст
+
+ Text
+ Текст
-
-
+
+
MainWindow
-
- Notepad Next[*]
- Notepad Next[*]
+
+ Notepad Next[*]
+ Notepad Next[*]
+
+
+
+ +
+ +
+
+
+
+ &File
+ &Файл
-
- +
- +
+
+ Close More
+ Закрити
-
- &File
- &Файл
+
+ &Recent Files
+ &Останні файли
-
- Close More
- Закрити
+
+
+ Export As
+ Експортувати як
-
- &Recent Files
- &Останні файли
+
+ &Edit
+ &Редагування
-
-
- Export As
- Експортувати як
+
+ Copy More
+ Копіювати
-
- &Edit
- &Редагування
+
+ Indent
+ Відступ
-
- Copy More
- Копіювати
+
+ EOL Conversion
+ Перетворення символу кінця рядку (EOL)
-
- Indent
- Відступ
+
+ Convert Case
+ Змінити регістр
-
- EOL Conversion
- Перетворення символу кінця рядку (EOL)
+
+ Line Operations
+ Операції з рядками
-
- Convert Case
- Змінити регістр
+
+ Comment/Uncomment
+ Закоментувати/розкоментувати
-
- Line Operations
- Операції з рядками
+
+ Copy As
+ Копіювати як
-
- Comment/Uncomment
- Закоментувати/розкоментувати
+
+ Encoding/Decoding
+ Зашифрувати/Розшифрувати
-
- Copy As
- Копіювати як
+
+ Search
+ По&шук
-
- Encoding/Decoding
- Зашифрувати/Розшифрувати
+
+ Bookmarks
+ Закладки
-
- Search
- По&шук
+
+ Mark All Occurrences
+ Позначити всі збіги
-
- Bookmarks
- Закладки
+
+ Clear Marks
+ Очистити позначки
-
- Mark All Occurrences
- Позначити всі збіги
+
+ &View
+ &Вид
-
- Clear Marks
- Очистити позначки
+
+ &Zoom
+ &Масштаб
-
- &View
- &Вид
+
+ Show Symbol
+ Показувати символи
-
- &Zoom
- &Масштаб
+
+ Fold Level
+ Згорнути рівень
-
- Show Symbol
- Показувати символи
+
+ Unfold Level
+ Розгорнути рівень
-
- Fold Level
- Згорнути рівень
+
+ Language
+ &Синтаксис
-
- Unfold Level
- Розгорнути рівень
+
+ Settings
+ &Параметри
-
- Language
- &Синтаксис
+
+ Macro
+ &Макрос
-
- Settings
- &Параметри
+
+ Help
+ &Довідка
-
- Macro
- &Макрос
+
+ Encoding
+ Набір символів
-
- Help
- &Довідка
+
+ Main Tool Bar
+ Головна панель інструментів
-
- Encoding
- Набір символів
+
+ &New
+ &Новий
-
- Main Tool Bar
- Головна панель інструментів
+
+ Create a new file
+ Створити новий файл
-
- &New
- &Новий
+
+ Ctrl+N
+ Ctrl+N
-
- Create a new file
- Створити новий файл
+
+ &Open...
+ &Відкрити...
-
- Ctrl+N
- Ctrl+N
+
+ Ctrl+O
+ Ctrl+O
-
- &Open...
- &Відкрити...
+
+ &Save
+ &Зберегти
-
- Ctrl+O
- Ctrl+O
+
+ Save
+ Зберегти
-
- &Save
- &Зберегти
+
+ Ctrl+S
+ Ctrl+S
-
- Save
- Зберегти
+
+ E&xit
+ Ви&йти
-
- Ctrl+S
- Ctrl+S
+
+ &Undo
+ &Відмінити операцію
-
- E&xit
- Ви&йти
+
+ Ctrl+Z
+ Ctrl+Z
-
- &Undo
- &Відмінити операцію
+
+ &Redo
+ &Повторити операцію
-
- Ctrl+Z
- Ctrl+Z
+
+ Ctrl+Y
+ Ctrl+Y
-
- &Redo
- &Повторити операцію
+
+ Cu&t
+ В&ирізати
-
- Ctrl+Y
- Ctrl+Y
+
+ Ctrl+X
+ Ctrl+X
-
- Cu&t
- В&ирізати
+
+ &Copy
+ &Копіювати
-
- Ctrl+X
- Ctrl+X
+
+ Ctrl+C
+ Ctrl+C
-
- &Copy
- &Копіювати
+
+ &Paste
+ В&ставити
-
- Ctrl+C
- Ctrl+C
+
+ Ctrl+V
+ Ctrl+V
-
- &Paste
- В&ставити
+
+ &Delete
+ Ви&далити
-
- Ctrl+V
- Ctrl+V
+
+ Del
+ Del
-
- &Delete
- Ви&далити
+
+ Copy Full Path
+ Копіювати повний шлях
-
- Del
- Del
+
+ Copy File Name
+ Копіювати назву файлу
-
- Copy Full Path
- Копіювати повний шлях
+
+ Copy File Directory
+ Копіювати назву каталогу
-
- Copy File Name
- Копіювати назву файлу
+
+ &Close
+ За&крити
-
- Copy File Directory
- Копіювати назву каталогу
+
+ Close the current file
+ Закрити поточний файл
-
- &Close
- За&крити
+
+ Ctrl+W
+ Ctrl+W
-
- Close the current file
- Закрити поточний файл
+
+ Save &As...
+ З&берегти як...
-
- Ctrl+W
- Ctrl+W
+
+ Ctrl+Alt+S
+ Ctrl+Alt+S
-
- Save &As...
- З&берегти як...
+
+ Save a Copy As...
+ Зберегти копію як...
-
- Ctrl+Alt+S
- Ctrl+Alt+S
+
+ Sav&e All
+ Зб&ерегти все
-
- Save a Copy As...
- Зберегти копію як...
+
+ Ctrl+Shift+S
+ Ctrl+Shift+S
-
- Sav&e All
- Зб&ерегти все
+
+ Select A&ll
+ &Обрати всі
-
- Ctrl+Shift+S
- Ctrl+Shift+S
+
+ Ctrl+A
+ Ctrl+A
-
- Select A&ll
- &Обрати всі
+
+ Increase Indent
+ Збільшити відступ
-
- Ctrl+A
- Ctrl+A
+
+ Decrease Indent
+ Зменшити відступ
-
- Increase Indent
- Збільшити відступ
+
+ Rename...
+ Перейменувати...
-
- Decrease Indent
- Зменшити відступ
+
+ Re&load
+ &Перезавантажити
-
- Rename...
- Перейменувати...
+
+ Windows (CR LF)
+ Windows (CR LF)
-
- Re&load
- &Перезавантажити
+
+ Unix (LF)
+ Unix (LF)
-
- Windows (CR LF)
- Windows (CR LF)
+
+ Macintosh (CR)
+ Macintosh (CR)
-
- Unix (LF)
- Unix (LF)
+
+ UPPER CASE
+ ВЕРХНІЙ РЕГІСТР
-
- Macintosh (CR)
- Macintosh (CR)
+
+ Convert text to upper case
+ Перетворити в ВЕРХНІЙ РЕГІСТР
-
- UPPER CASE
- ВЕРХНІЙ РЕГІСТР
+
+ lower case
+ нижній регістр
-
- Convert text to upper case
- Перетворити в ВЕРХНІЙ РЕГІСТР
+
+ Convert text to lower case
+ Перетворити в нижній регістр
-
- lower case
- нижній регістр
+
+ Duplicate Current Line
+ Дублювати поточний рядок
-
- Convert text to lower case
- Перетворити в нижній регістр
+
+ Alt+Down
+ Alt+Down
-
- Duplicate Current Line
- Дублювати поточний рядок
+
+ Split Lines
+ Розділити рядки
-
- Alt+Down
- Alt+Down
+
+ Join Lines
+ Об'єднати рядки
-
- Split Lines
- Розділити рядки
+
+ Ctrl+J
+ Ctrl+J
-
- Join Lines
- Об'єднати рядки
+
+ Move Selected Lines Up
+ Перемістити поточний рядок вверх
-
- Ctrl+J
- Ctrl+J
+
+ Ctrl+Shift+Up
+ Ctrl+Shift+Up
-
- Move Selected Lines Up
- Перемістити поточний рядок вверх
+
+ Move Selected Lines Down
+ Перемістити поточний рядок вниз
-
- Ctrl+Shift+Up
- Ctrl+Shift+Up
+
+ Ctrl+Shift+Down
+ Ctrl+Shift+Down
-
- Move Selected Lines Down
- Перемістити поточний рядок вниз
+
+ Clos&e All
+ Зак&рити все
-
- Ctrl+Shift+Down
- Ctrl+Shift+Down
+
+ Close All files
+ Закрити всі файли
-
- Clos&e All
- Зак&рити все
+
+ Ctrl+Shift+W
+ Ctrl+Shift+W
-
- Close All files
- Закрити всі файли
+
+ Close All Except Active Document
+ Закрити всі документи окрім поточного
-
- Ctrl+Shift+W
- Ctrl+Shift+W
+
+ Close All to the Left
+ Закрити всі ліворуч
-
- Close All Except Active Document
- Закрити всі документи окрім поточного
+
+ Close All to the Right
+ Закрити всі праворуч
-
- Close All to the Left
- Закрити всі ліворуч
+
+ Zoom &In
+ Ма&сштаб +
-
- Close All to the Right
- Закрити всі праворуч
+
+ Ctrl++
+ Ctrl++
-
- Zoom &In
- Ма&сштаб +
+
+ Zoom &Out
+ &Масштаб -
-
- Ctrl++
- Ctrl++
+
+ Ctrl+-
+ Ctrl+-
-
- Zoom &Out
- &Масштаб -
+
+ Reset Zoom
+ Масштаб за замовчуванням
-
- Ctrl+-
- Ctrl+-
+
+ Ctrl+0
+ Ctrl+0
-
- Reset Zoom
- Масштаб за замовчуванням
+
+ About Qt
+ Про Qt
-
- Ctrl+0
- Ctrl+0
+
+ About Notepad Next
+ Про Notepad Next
-
- About Qt
- Про Qt
+
+ Show Whitespace
+ Показувати пробіл
-
- About Notepad Next
- Про Notepad Next
+
+ Show End of Line
+ Показувати кінець рядку
-
- Show Whitespace
- Показувати пробіл
+
+ Show All Characters
+ Показувати всі символи
-
- Show End of Line
- Показувати кінець рядку
+
+ Show Indent Guide
+ Показувати лінії відступу
-
- Show All Characters
- Показувати всі символи
+
+ Show Wrap Symbol
+ Показувати символ переносу
-
- Show Indent Guide
- Показувати лінії відступу
+
+ Word Wrap
+ Перенесення слів
-
- Show Wrap Symbol
- Показувати символ переносу
+
+ Restore Recently Closed File
+ Відновити щойно закритий файл
-
- Word Wrap
- Перенесення слів
+
+ Ctrl+Shift+T
+ Ctrl+Shift+T
-
- Restore Recently Closed File
- Відновити щойно закритий файл
+
+ Open All Recent Files
+ Відкрити ві нещодавні файли
-
- Ctrl+Shift+T
- Ctrl+Shift+T
+
+ Clear Recent Files List
+ Очистити список нещодавніх файлів
-
- Open All Recent Files
- Відкрити ві нещодавні файли
+
+ &Find...
+ &Знайти...
-
- Clear Recent Files List
- Очистити список нещодавніх файлів
+
+ Ctrl+F
+ Ctrl+F
-
- &Find...
- &Знайти...
+
+ Find in Files...
+ Знайти в файлах...
-
- Ctrl+F
- Ctrl+F
+
+ Find &Next
+ Знайти &наступний
-
- Find in Files...
- Знайти в файлах...
+
+ F3
+ F3
-
- Find &Next
- Знайти &наступний
+
+ Find &Previous
+ Знайти &попередній
-
- F3
- F3
+
+ Shift+F3
+
-
- Find &Previous
- Знайти &попередній
+
+ &Replace...
+ З&амінити...
-
- &Replace...
- З&амінити...
+
+ Ctrl+H
+ Ctrl+H
-
- Ctrl+H
- Ctrl+H
+
+ Full Screen
+ Повноекранний режим
-
- Full Screen
- Повноекранний режим
+
+ F11
+ F11
-
- F11
- F11
+
+
+ Start Recording
+ Почати запис
-
-
- Start Recording
- Почати запис
+
+ Playback
+ Виконати
-
- Playback
- Виконати
+
+ Ctrl+Shift+P
+ Ctrl+Shift+P
-
- Ctrl+Shift+P
- Ctrl+Shift+P
+
+ Save Current Recorded Macro...
+ Зберегти щойно записаний макрос...
-
- Save Current Recorded Macro...
- Зберегти щойно записаний макрос...
+
+ Run a Macro Multiple Times...
+ Виконати макрос багато разів...
-
- Run a Macro Multiple Times...
- Виконати макрос багато разів...
+
+ Preferences...
+ Налаштування...
-
- Preferences...
- Налаштування...
+
+ Quick Find
+ Швидкий пошук
-
- Quick Find
- Швидкий пошук
+
+ Ctrl+Alt+I
+ Ctrl+Alt+I
-
- Ctrl+Alt+I
- Ctrl+Alt+I
+
+ Select Next Instance
+ Виділити схожі вирази
-
- Select Next Instance
- Виділити схожі вирази
+
+ Ctrl+D
+ Ctrl+D
-
- Ctrl+D
- Ctrl+D
+
+ Move to Trash...
+ Перемістити до смітника...
-
- Move to Trash...
- Перемістити до смітника...
+
+ Move to Trash
+ Перемістити до смітника
-
- Move to Trash
- Перемістити до смітника
+
+ Check for Updates...
+ Перевірити оновлення...
-
- Check for Updates...
- Перевірити оновлення...
+
+ &Go to Line...
+ П&ерейти до рядку...
-
- &Go to Line...
- П&ерейти до рядку...
+
+ Ctrl+G
+ Ctrl+G
-
- Ctrl+G
- Ctrl+G
+
+ Print...
+ Друк...
-
- Print...
- Друк...
+
+ Ctrl+P
+ Ctrl+P
-
- Ctrl+P
- Ctrl+P
+
+ Open Folder as Workspace...
+ Відкрити каталог як робочий простір...
-
- Open Folder as Workspace...
- Відкрити каталог як робочий простір...
+
+ Toggle Single Line Comment
+ Однорядковий коментар
-
- Toggle Single Line Comment
- Однорядковий коментар
+
+ Ctrl+/
+ Ctrl+/
-
- Ctrl+/
- Ctrl+/
+
+ Single Line Comment
+ Закоментувати один рядок
-
- Single Line Comment
- Закоментувати один рядок
+
+ Ctrl+K
+ Ctrl+K
-
- Ctrl+K
- Ctrl+K
+
+ Single Line Uncomment
+ Розкоментувати один рядок
-
- Single Line Uncomment
- Розкоментувати один рядок
+
+ Ctrl+Shift+K
+ Ctrl+Shift+K
-
- Ctrl+Shift+K
- Ctrl+Shift+K
+
+ Edit Macros...
+ Редагувати макрос...
-
- Edit Macros...
- Редагувати макрос...
+
+ This is not currently implemented
+ Ця можливість ще не реалізована
-
- This is not currently implemented
- Ця можливість ще не реалізована
+
+ Column Mode...
+ Створити стовпець...
-
- Column Mode...
- Створити стовпець...
+
+ Export as HTML...
+ Експортувати як HTML...
-
- Export as HTML...
- Експортувати як HTML...
+
+ Export as RTF...
+ Експортувати як RTF...
-
- Export as RTF...
- Експортувати як RTF...
+
+ Copy as HTML
+ Копіювати як HTML
-
- Copy as HTML
- Копіювати як HTML
+
+ Copy as RTF
+ Копіювати як RTF
-
- Copy as RTF
- Копіювати як RTF
+
+ Base 64 Encode
+ Зашифрувати Base 64
-
- Base 64 Encode
- Зашифрувати Base 64
+
+ URL Encode
+ Зашифрувати URL
-
- URL Encode
- Зашифрувати URL
+
+ Base 64 Decode
+ Розшифрувати Base 64
-
- Base 64 Decode
- Розшифрувати Base 64
+
+ URL Decode
+ Розшифрувати URL
-
- URL Decode
- Розшифрувати URL
+
+ Copy URL
+ Копіювати URL
-
- Copy URL
- Копіювати URL
+
+ Remove Empty Lines
+ Видалити пусті рядки
-
- Remove Empty Lines
- Видалити пусті рядки
+
+
+ Show in Explorer
+ Показати в файловому менеджері
-
-
- Show in Explorer
- Показати в файловому менеджері
+
+ Open %1 Here
+ Відкрити %1 тут
-
- Open %1 Here
- Відкрити %1 тут
+
+ Toggle Bookmark
+ Додати/видалити закладку
-
- Toggle Bookmark
- Додати/видалити закладку
+
+ Ctrl+F2
+ Ctrl+F2
-
- Ctrl+F2
- Ctrl+F2
+
+ Next Bookmark
+ Наступна закладка
-
- Next Bookmark
- Наступна закладка
+
+ F2
+ F2
-
- F2
- F2
+
+ Previous Bookmark
+ Попередня закладка
-
- Previous Bookmark
- Попередня закладка
+
+ Shift+F2
+ Shift+F2
-
- Shift+F2
- Shift+F2
+
+ Clear Bookmarks
+ Очистити закладки
-
- Clear Bookmarks
- Очистити закладки
+
+ Invert Bookmarks
+ Інвертувати закладки
-
- Invert Bookmarks
- Інвертувати закладки
+
+ Next Tab
+ Наступна вкладка
-
- Next Tab
- Наступна вкладка
+
+ Ctrl+Tab
+ Ctrl+Tab
-
- Ctrl+Tab
- Ctrl+Tab
+
+ Previous Tab
+ Попередня вкладка
-
- Previous Tab
- Попередня вкладка
+
+ Ctrl+Shift+Tab
+ Ctrl+Shift+Tab
-
- Ctrl+Shift+Tab
- Ctrl+Shift+Tab
+
+ Fold Level 1
+ Згорнути рівень 1
-
- Fold Level 1
- Згорнути рівень 1
+
+ Alt+1
+ Alt+1
-
- Alt+1
- Alt+1
+
+ Fold Level 2
+ Згорнути рівень 2
-
- Fold Level 2
- Згорнути рівень 2
+
+ Alt+2
+ Alt+2
-
- Alt+2
- Alt+2
+
+ Fold Level 3
+ Згорнути рівень 3
-
- Fold Level 3
- Згорнути рівень 3
+
+ Alt+3
+ Alt+3
-
- Alt+3
- Alt+3
+
+ Fold Level 4
+ Згорнути рівень 4
-
- Fold Level 4
- Згорнути рівень 4
+
+ Alt+4
+ Alt+4
-
- Alt+4
- Alt+4
+
+ Unfold Level 1
+ Розгорнути рівень 1
-
- Unfold Level 1
- Розгорнути рівень 1
+
+ Alt+Shift+1
+ Alt+Shift+1
-
- Alt+Shift+1
- Alt+Shift+1
+
+ Unfold Level 2
+ Розгорнути рівень 2
-
- Unfold Level 2
- Розгорнути рівень 2
+
+ Alt+Shift+2
+ Alt+Shift+2
-
- Alt+Shift+2
- Alt+Shift+2
+
+ Unfold Level 3
+ Розгорнути рівень 3
-
- Unfold Level 3
- Розгорнути рівень 3
+
+ Alt+Shift+3
+ Alt+Shift+3
-
- Alt+Shift+3
- Alt+Shift+3
+
+ Unfold Level 4
+ Розгорнути рівень 4
-
- Unfold Level 4
- Розгорнути рівень 4
+
+ Alt+Shift+4
+ Alt+Shift+4
-
- Alt+Shift+4
- Alt+Shift+4
+
+ Fold All
+ Згорнути всі
-
- Fold All
- Згорнути всі
+
+ Alt+0
+ Alt+0
-
- Alt+0
- Alt+0
+
+ Unfold All
+ Розгорнути всі
-
- Unfold All
- Розгорнути всі
+
+ Alt+Shift+0
+ Alt+Shift+0
-
- Alt+Shift+0
- Alt+Shift+0
+
+ Fold Level 5
+ Згорнути рівень 5
-
- Fold Level 5
- Згорнути рівень 5
+
+ Alt+5
+ Alt+5
-
- Alt+5
- Alt+5
+
+ Fold Level 6
+ Згорнути рівень 6
-
- Fold Level 6
- Згорнути рівень 6
+
+ Alt+6
+ Alt+6
-
- Alt+6
- Alt+6
+
+ Fold Level 7
+ Згорнути рівень 7
-
- Fold Level 7
- Згорнути рівень 7
+
+ Alt+7
+ Alt+7
-
- Alt+7
- Alt+7
+
+ Fold Level 8
+ Згорнути рівень 8
-
- Fold Level 8
- Згорнути рівень 8
+
+ Alt+8
+ Alt+8
-
- Alt+8
- Alt+8
+
+ Fold Level 9
+ Згорнути рівень 9
-
- Fold Level 9
- Згорнути рівень 9
+
+ Alt+9
+ Alt+9
-
- Alt+9
- Alt+9
+
+ Unfold Level 5
+ Розгорнути рівень 5
-
- Unfold Level 5
- Розгорнути рівень 5
+
+ Alt+Shift+5
+ Alt+Shift+5
-
- Alt+Shift+5
- Alt+Shift+5
+
+ Unfold Level 6
+ Розгорнути рівень 6
-
- Unfold Level 6
- Розгорнути рівень 6
+
+ Alt+Shift+6
+ Alt+Shift+6
-
- Alt+Shift+6
- Alt+Shift+6
+
+ Unfold Level 7
+ Розгорнути рівень 7
-
- Unfold Level 7
- Розгорнути рівень 7
+
+ Alt+Shift+7
+ Alt+Shift+7
-
- Alt+Shift+7
- Alt+Shift+7
+
+ Unfold Level 8
+ Розгорнути рівень 8
-
- Unfold Level 8
- Розгорнути рівень 8
+
+ Alt+Shift+8
+ Alt+Shift+8
-
- Alt+Shift+8
- Alt+Shift+8
+
+ Unfold Level 9
+ Розгорнути рівень 9
-
- Unfold Level 9
- Розгорнути рівень 9
+
+ Alt+Shift+9
+ Alt+Shift+9
-
- Alt+Shift+9
- Alt+Shift+9
+
+
+ Toggle Overtype
+ Toggle Overtype
-
-
- Toggle Overtype
- Toggle Overtype
+
+ Ins
+ Ins
-
- Ins
- Ins
+
+ Debug Info...
+ Інформація про налагодження...
-
- Debug Info...
- Інформація про налагодження...
+
+ Cut Bookmarked Lines
+ Вирізати рядки з закладок
-
- Cut Bookmarked Lines
- Вирізати рядки з закладок
+
+ Copy Bookmarked Lines
+ Копіювати рядки з закладок
-
- Copy Bookmarked Lines
- Копіювати рядки з закладок
+
+ Delete Bookmarked Lines
+ Видалити рядки з закладок
-
- Delete Bookmarked Lines
- Видалити рядки з закладок
+
+ Mark Style 1
+ Позначити стилем 1
-
- Mark Style 1
- Позначити стилем 1
+
+ Mark Style 2
+ Позначити стилем 2
-
- Mark Style 2
- Позначити стилем 2
+
+ Clear Style 1
+ Очистити стиль 1
-
- Clear Style 1
- Очистити стиль 1
+
+ Clear Style 2
+ Очистити стиль 2
-
- Clear Style 2
- Очистити стиль 2
+
+ Mark Style 3
+ Позначити стилем 3
-
- Mark Style 3
- Позначити стилем 3
+
+ Clear Style 3
+ Очистити стиль 3
-
- Clear Style 3
- Очистити стиль 3
+
+
+ Clear All Styles
+ Очистити всі стилі
-
-
- Clear All Styles
- Очистити всі стилі
+
+ Remove Duplicate Lines
+ Remove Duplicate Lines
-
- Remove Duplicate Lines
- Remove Duplicate Lines
+
+ Remove Consecutive Duplicate Lines
+ Remove Consecutive Duplicate Lines
-
- Remove Consecutive Duplicate Lines
- Remove Consecutive Duplicate Lines
+
+ Sort Lines Ascending
+
-
- Go to line
- Перейти до рядку
+
+ Sort Lines Descending
+
-
- Line Number (1 - %1)
- Номер рядку (1 - %1)
+
+ Sort Lines Ascending (Case-Insensitive)
+
-
- Stop Recording
- Зупинити запис
+
+ Sort Lines Descending (Case-Insensitive)
+
-
- Debug Info
- Інформація про налагодження
+
+ Sort Lines by Length Ascending
+
-
- New %1
- Новий %1
+
+ Sort Lines by Length Descending
+
-
- Create File
- Створити файл
+
+ Reverse Line Order
+
-
- <b>%1</b> does not exist. Do you want to create it?
- <b>%1</b> не існує. Бажаєте створити його ?
+
+ Go to line
+ Перейти до рядку
-
-
- Save file <b>%1</b>?
- Зберегти файл <b>%1</b>?
+
+ Line Number (1 - %1)
+ Номер рядку (1 - %1)
-
-
- Save File
- Зберегти файл
+
+ Stop Recording
+ Зупинити запис
-
- Open Folder as Workspace
- Відкрити каталог як робочий простір
+
+ Debug Info
+ Інформація про налагодження
-
-
- Reload File
- Перезавантажити файл
+
+ New %1
+ Новий %1
-
- Are you sure you want to reload <b>%1</b>? Any unsaved changes will be lost.
- Ви дійсно хочете перезавантажити файл<b>%1</b>? Всі не збережені зміни будут втрачені.
+
+ Create File
+ Створити файл
-
- Save a Copy As
- Зберегти копію як
+
+ <b>%1</b> does not exist. Do you want to create it?
+ <b>%1</b> не існує. Бажаєте створити його ?
-
-
- Rename
- Перейменувати
+
+
+ Save file <b>%1</b>?
+ Зберегти файл <b>%1</b>?
-
- Name:
- Назва:
+
+
+ Save File
+ Зберегти файл
-
- Delete File
- Видалити файл
+
+ Open Folder as Workspace
+ Відкрити каталог як робочий простір
-
- Are you sure you want to move <b>%1</b> to the trash?
- Ви дійсно хочете перемістити файл <b>%1</b> до смітника ?
+
+
+ Reload File
+ Перезавантажити файл
-
- Error Deleting File
- Помилка видалення файлу
+
+ Are you sure you want to reload <b>%1</b>? Any unsaved changes will be lost.
+ Ви дійсно хочете перезавантажити файл<b>%1</b>? Всі не збережені зміни будут втрачені.
-
- Something went wrong deleting <b>%1</b>?
- Під час видалення щось пішло не так <b>%1</b>?
+
+ Save a Copy As
+ Зберегти копію як
-
- Administrator
- Адміністратор
+
+
+ Rename
+ Перейменувати
-
- <b>%1</b> has been modified by another program. Do you want to reload it?
- <b>%1</b> був змінений. Бажаєте завантажити актуальну версію?
+
+ Name:
+ Назва:
-
- Read error
- Read error
+
+ Delete File
+ Видалити файл
-
- Write error
- Write error
+
+ Are you sure you want to move <b>%1</b> to the trash?
+ Ви дійсно хочете перемістити файл <b>%1</b> до смітника ?
-
- Fatal error
- Fatal error
+
+ Error Deleting File
+ Помилка видалення файлу
-
- Resource error
- Resource error
+
+ Something went wrong deleting <b>%1</b>?
+ Під час видалення щось пішло не так <b>%1</b>?
-
- Open error
- Open error
+
+ Administrator
+ Адміністратор
-
- Abort error
- Abort error
+
+ <b>%1</b> has been modified by another program. Do you want to reload it?
+ <b>%1</b> був змінений. Бажаєте завантажити актуальну версію?
-
- Timeout error
- Timeout error
+
+ Read error
+ Read error
-
- Unspecified error
- Unspecified error
+
+ Write error
+ Write error
-
- Remove error
- Remove error
+
+ Fatal error
+ Fatal error
-
- Rename error
- Rename error
+
+ Resource error
+ Resource error
-
- Position error
- Position error
+
+ Open error
+ Open error
-
- Resize error
- Resize error
+
+ Abort error
+ Abort error
-
- Permissions error
- Permissions error
+
+ Timeout error
+ Timeout error
-
- Copy error
- Copy error
+
+ Unspecified error
+ Unspecified error
-
- Unknown error (%1)
- Unknown error (%1)
+
+ Remove error
+ Remove error
-
- Error Saving File
- Помилка збереження файлу
+
+ Rename error
+ Rename error
-
- An error occurred when saving <b>%1</b><br><br>Error: %2
- Під час збереження виникла помилка<b>%1</b><br><br>Помилка: %2
+
+ Position error
+ Position error
-
- Zoom: %1%
- Масштаб: %1%
+
+ Resize error
+ Resize error
-
- No updates are available at this time.
- На цю мить не має ніяких оновлень.
+
+ Permissions error
+ Permissions error
-
-
+
+
+ Copy error
+ Copy error
+
+
+
+ Unknown error (%1)
+ Unknown error (%1)
+
+
+
+ Error Saving File
+ Помилка збереження файлу
+
+
+
+ An error occurred when saving <b>%1</b><br><br>Error: %2
+ Під час збереження виникла помилка<b>%1</b><br><br>Помилка: %2
+
+
+
+ Zoom: %1%
+ Масштаб: %1%
+
+
+
+ No updates are available at this time.
+ На цю мить не має ніяких оновлень.
+
+
+
PreferencesDialog
-
- Preferences
- Налаштування
+
+ Preferences
+ Налаштування
+
+
+
+ Unsaved сhanges
+ Незбережені зміни
+
+
+
+ You have unsaved changes.
+Do you want to save them before closing?
+ Зберегти внесені зміни?
+
+
+ Show menu bar
+ Показувати панель меню
+
+
+ Show toolbar
+ Показувати панель інструментів
+
+
+ Show status bar
+ Показувати рядок стану
+
+
+ Restore previous session
+ Відновлювати попередній сеанс
+
+
+ Unsaved changes
+ Не збережені зміни
+
+
+ Temporary files
+ Тимчасові файли
+
+
+ Recenter find/replace dialog when opened
+ Центрувати вікно пошуку/заміни під час його відкриття
+
+
+ Combine search results
+ Об'єднувати результати пошуку
+
+
+ Translation:
+ Локалізація:
+
+
+ Exit on last tab closed
+ Закривати програму при закритті останньої вкладки
+
+
+ Default Font
+ Шрифт за замовчуванням
+
+
+ Font
+ Шрифт
+
+
+ Font Size
+ Розмір
+
+
+ pt
+ pt
+
+
+ Default Line Endings
+ Символ кінця рядку за замовчуванням
+
+
+ Highlight URLs
+ Підкреслювати посилання URL
+
+
+ Show Line Numbers
+ Показувати кількість рядків
+
+
+ Default Directory
+ Default Directory
+
+
+ Follow Current Document
+ Follow Current Document
+
+
+ Last Used Directory
+ Last Used Directory
+
+
+ ...
+ ...
+
+
+ TextLabel
+ Текстове поле
+
+
+ An application restart is required to apply certain settings.
+ Для застосування деяких змін потрібно перезапустити програму.
+
+
+ Warning
+ Попередження
+
+
+ This feature is experimental and it should not be considered safe for critically important work. It may lead to possible data loss. Use at your own risk.
+ Ця функція є експериментальною, тому її не можна вважати безпечною. Її використання може призвести до втрати даних. Використовуйте цю опцію на власний розсуд.
+
+
+ System Default
+ Системний
+
+
+ Windows (CR LF)
+ Windows (CR LF)
+
+
+ Linux (LF)
+ Linux (LF)
+
+
+ Macintosh (CR)
+ Macintosh (CR)
-
- Show menu bar
- Показувати панель меню
+ <System Default>
+ <Мова системи>
+
+
+ QObject
-
- Show toolbar
- Показувати панель інструментів
+
+ List All Tabs
+ Перелік всіх вкладок
-
- Show status bar
- Показувати рядок стану
+
+ Detach Group
+ Відокремити групу
-
- Restore previous session
- Відновлювати попередній сеанс
+
+ Minimize
+ Згорнути
-
- Unsaved changes
- Не збережені зміни
+
+ Close Tab
+ Закрити вкладку
-
- Temporary files
- Тимчасові файли
+
+ Default directory
+ Каталог за замовчуванням
-
- Recenter find/replace dialog when opened
- Центрувати вікно пошуку/заміни під час його відкриття
+
+ Current document directory
+ Поточний каталог документу
-
- Combine search results
- Об'єднувати результати пошуку
+
+ Last used directory
+ Останній використаний каталог
-
- Translation:
- Локалізація:
+
+ Selected directory:
+ Обраний каталог:
-
- Exit on last tab closed
- Закривати програму при закритті останньої вкладки
+
+ Selected directory path here...
+ Шлях до обраного каталогу...
-
- Default Font
- Шрифт за замовчуванням
+
+ Open directory select dialog
+ Відкрити вікно вибору каталогу
-
- Font
- Шрифт
+
+ Not exists
+ Не існує
-
- Font Size
- Розмір
+
+ Not a directory
+ Не є каталогом
-
- pt
- pt
+
+ No write access
+ Немає дозволу на запис
-
- Default Line Endings
- Символ кінця рядку за замовчуванням
+
+ Please, use absolute path
+ Будь ласка, використовуйте повний шлях
-
- Highlight URLs
- Підкреслювати посилання URL
+
+ Select default directory
+ Вибрати каталог за замовчуванням
-
- Show Line Numbers
- Показувати кількість рядків
+
+ Restore previous session
+ Відновлювати попередній сеанс
-
-
- Default Directory
- Default Directory
+
+ Unsaved changes
+ Незбережені зміни
-
- Follow Current Document
- Follow Current Document
+
+ Temporary files
+ Тимчасові файли
-
- Last Used Directory
- Last Used Directory
+
+ Like in system
+ Як у системі
-
- ...
- ...
+
+ System default
+ Окінчення рядків
+ Системні
-
- TextLabel
- Текстове поле
+ <System>
+ <Системна>
-
- An application restart is required to apply certain settings.
- Для застосування деяких змін потрібно перезапустити програму.
+ <System default>
+ <Системні>
-
- Warning
- Попередження
+ <System Language>
+ <Системна>
-
- This feature is experimental and it should not be considered safe for critically important work. It may lead to possible data loss. Use at your own risk.
- Ця функція є експериментальною, тому її не можна вважати безпечною. Її використання може призвести до втрати даних. Використовуйте цю опцію на власний розсуд.
+
+ Language:
+ Мова:
-
- System Default
- Системний
+ System Default
+ Системний
-
- Windows (CR LF)
- Windows (CR LF)
+
+ Windows (CR LF)
+ Windows (CR LF)
-
- Linux (LF)
- Linux (LF)
+
+ Unix (LF)
+ Unix (LF)
-
- Macintosh (CR)
- Macintosh (CR)
+
+ Macintosh (CR)
+ Macintosh (CR)
-
- <System Default>
- <Мова системи>
+
+ Default line endings:
+ Символ кінця рядку за замовчуванням:
-
-
+
+
+ Recenter find/replace dialog when opened
+ Центрувати вікно пошуку/заміни під час відкриття
+
+
+
+ Combine search results
+ Об'єднувати результати пошуку
+
+
+
+ Exit on last tab closed
+ Закривати програму при закритті останньої вкладки
+
+
+
+ Behavior
+ Поведінка
+
+
+
+ Application restart required to apply changes.
+ Потребує перезапуск додатку.
+
+
+ Window
+ Головне вікно
+
+
+
+ Main window
+ Головне вікно
+
+
+
+ Show menu bar
+ Показувати панель меню
+
+
+
+ Show toolbar
+ Показувати панель інструментів
+
+
+
+ Show status bar
+ Показувати рядок стану
+
+
+
+ Font
+ Шрифт
+
+
+
+ Family:
+ Сімейство:
+
+
+
+ Size:
+ Розмір:
+
+
+
+ Editor
+ Редактор
+
+
+
+ Highlight URLs
+ Підсвічувати посилання
+
+
+
+ Show line numbers
+ Показувати номера рядків
+
+
+ Show Line Numbers
+ Показувати номера рядків
+
+
+
+ Appearance
+ Зовнішній вигляд
+
+
+
QuickFindWidget
-
- Frame
- Рама
+
+ Frame
+ Рама
-
- Find...
- Шукати...
+
+ Find...
+ Шукати...
-
- Match case
- Чутливість до регістру
+
+ Match case
+ Чутливість до регістру
-
- Aa
- Aa
+
+ Aa
+ Aa
-
- Match whole word
- Шукати ціле слово
+
+ Match whole word
+ Шукати ціле слово
-
- |A|
- |A|
+
+ |A|
+ |A|
-
- Use regular expression
- Використовувати регулярний вираз
+
+ Use regular expression
+ Використовувати регулярний вираз
-
- . *
- . *
+
+ . *
+ . *
-
- Alt+E
- Alt+E
+
+ Alt+E
+ Alt+E
-
- %L1/%L2
- %L1/%L2
+
+ %L1/%L2
+ %L1/%L2
-
-
+
+
SearchResultsDock
-
- Search Results
- Результати пошуку
+
+ Search Results
+ Результати пошуку
+
+
+
+ Copy Results to Clipboard
+ Копіювати результати до буферу обміну
+
+
+
+ Collapse All
+ Згорнути все
+
+
+
+ Expand All
+ Розгорнути все
+
+
+
+ Delete Entry
+ Видалити запис
+
+
+
+ Delete All
+ Видалити все
+
+
+
+ Updater
+
+
+ Would you like to download the update now?
+
+
+
+
+ Would you like to download the update now?<br />This is a mandatory update, exiting now will close the application.
+
+
+
+
+ <strong>Change log:</strong><br/>%1
+
+
+
+
+ Version %1 of %2 has been released!
+
+
+
+
+ No updates are available for the moment
+
+
+
+
+ Congratulations! You are running the latest version of %1
+
+
+
+
+ Window
+
+
+ QSimpleUpdater Example
+
+
+
+
+ <h1><i>QSimpleUpdater</i></h1>
+
+
+
+
+ <i>A simpler way to update your Qt applications...</i>
+
+
+
+
+ Updater Options
+
+
+
+
+ 0.1
+
+
+
+
+ Write a version string...
+
+
+
+
+ Set installed version (latest version is 1.0)
+
+
+
+
+ Do not use the QSU library to read the appcast
+
+
+
+
+ Notify me when an update is available
+
+
+
+
+ Show all notifications
+
+
+
+
+ Enable integrated downloader
+
+
+
+
+ Mandatory Update
+
+
+
+
+ Changelog
+
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'.Lucida Grande UI'; font-size:13pt;">Click "Check for Updates" to update this field...</span></p></body></html>
+
+
+
+
+ Reset Fields
+
+
+
+
+ Close
+ Закрити
+
+
+
+ Check for Updates
+
+
+
+
+ ads::CAutoHideTab
+
+
+ Detach
+
+
+
+
+ Pin To...
+
+
+
+
+ Top
+
+
+
+
+ Left
+
+
+
+
+ Right
+
+
+
+
+ Bottom
+
+
+
+
+ Unpin (Dock)
+
+
+
+
+ Close
+ Закрити
+
+
+
+ ads::CDockAreaTitleBar
+
+
+ Detach
+
+
+
+
+ Detach Group
+ Відокремити групу
+
+
+
+
+ Unpin (Dock)
+
+
+
+
+
+ Pin Group
+
+
+
+
+ Pin Group To...
+
+
+
+
+ Top
+
+
+
+
+ Left
+
+
+
+
+ Right
+
+
+
+
+ Bottom
+
+
+
+
+
+ Minimize
+ Згорнути
+
+
+
+
+
+ Close
+ Закрити
+
+
+
+
+ Close Group
+
+
+
+
+ Close Other Groups
+
+
+
+
+ Pin Active Tab (Press Ctrl to Pin Group)
+
+
+
+
+ Close Active Tab
+
+
+
+
+ ads::CDockManager
+
+
+ Show View
+
+
+
+
+ ads::CDockWidgetTab
+
+
+ Detach
+
+
+
+
+ Pin
+
+
+
+
+ Pin To...
+
+
+
+
+ Top
+
-
- Copy Results to Clipboard
- Копіювати результати до буферу обміну
+
+ Left
+
-
- Collapse All
- Згорнути все
+
+ Right
+
-
- Expand All
- Розгорнути все
+
+ Bottom
+
-
- Delete Entry
- Видалити запис
+
+ Close
+ Закрити
-
- Delete All
- Видалити все
+
+ Close Others
+
-
+
diff --git a/src/ApplicationSettings.cpp b/src/ApplicationSettings.cpp
index 17def0ca6..0fcdfe222 100644
--- a/src/ApplicationSettings.cpp
+++ b/src/ApplicationSettings.cpp
@@ -18,6 +18,7 @@
#include "ApplicationSettings.h"
+#include
#include
#include
@@ -36,8 +37,45 @@ ApplicationSetting name{#group "/" #name, default};\
ApplicationSettings::ApplicationSettings(QObject *parent)
- : QSettings{parent}
+ : QSettings(parent)
+{ }
+
+ApplicationSettings::ApplicationSettings(QTemporaryFile *tempFile, QObject *parent)
+ : QSettings(tempFile->fileName(), QSettings::NativeFormat, parent)
+{
+ tempFile->setParent(this);
+}
+
+void ApplicationSettings::fillFrom(ApplicationSettings *other)
+{
+ if (!other) return;
+
+ const auto meta = metaObject();
+
+ for (auto i = meta->propertyOffset(); i < meta->propertyCount(); ++i)
+ {
+ const auto property = meta->property(i);
+
+ if (property.isWritable() && property.isReadable())
+ property.write(this, property.read(other));
+ }
+}
+
+bool ApplicationSettings::isEquals(ApplicationSettings *other) const
{
+ if (!other) return false;
+
+ const auto meta = metaObject();
+
+ for (auto i = meta->propertyOffset(); i < meta->propertyCount(); ++i)
+ {
+ const auto property = meta->property(i);
+
+ if (property.read(this) != property.read(other))
+ return false;
+ }
+
+ return true;
}
CREATE_SETTING(Gui, ShowMenuBar, showMenuBar, bool, true)
diff --git a/src/ApplicationSettings.h b/src/ApplicationSettings.h
index cd4089801..7dfe75303 100644
--- a/src/ApplicationSettings.h
+++ b/src/ApplicationSettings.h
@@ -26,6 +26,7 @@
#include
#include
+class QTemporaryFile;
template
class ApplicationSetting
@@ -53,39 +54,54 @@ class ApplicationSetting
};
-#define DEFINE_SETTING(name, lname, type)\
-public:\
- type lname() const;\
-public slots:\
- void set##name(type lname);\
-Q_SIGNAL\
- void lname##Changed(type lname);\
-
+#define DEFINE_SETTING(name, lname, type) \
+ Q_PROPERTY(type lname READ lname WRITE set##name NOTIFY lname##Changed FINAL) \
+ public: \
+ type lname() const; \
+ public slots: \
+ void set##name(type lname); \
+ Q_SIGNAL \
+ void lname##Changed(type lname);
class ApplicationSettings : public QSettings
{
Q_OBJECT
-
public:
- explicit ApplicationSettings(QObject *parent = nullptr);
-
- enum DefaultDirectoryBehaviorEnum {
+ enum DefaultDirectoryBehaviorEnum
+ {
FollowCurrentDocument,
RememberLastUsed,
HardCoded
};
Q_ENUM(DefaultDirectoryBehaviorEnum)
+public:
+ explicit ApplicationSettings(QObject *parent = nullptr);
+
+ /**
+ * @brief Create temporary instance with default settings.
+ * @param tempFile Temporary file instance to be used.
+ * @warning Ensure tempFile->open() was called before passing it.
+ * @note The instance takes ownership of tempFile.
+ */
+ ApplicationSettings(QTemporaryFile *tempFile, QObject *parent = nullptr);
+
+ inline void copyTo(ApplicationSettings *other) const {
+ other->fillFrom(const_cast(this));
+ }
+ void fillFrom(ApplicationSettings *other);
+ bool isEquals(ApplicationSettings *other) const;
+
template
- T get(const char *key, const T &defaultValue) const
+ inline T get(const char *key, const T &defaultValue) const
{ return value(QLatin1String(key), defaultValue).template value(); }
template
- T get(const ApplicationSetting &setting) const
+ inline T get(const ApplicationSetting &setting) const
{ return get(setting.key(), setting.getDefault()); }
template
- void set(const ApplicationSetting &setting, const T &value)
+ inline void set(const ApplicationSetting &setting, const T &value)
{ setValue(QLatin1String(setting.key()), value); }
DEFINE_SETTING(ShowMenuBar, showMenuBar, bool)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2bc1f9fa4..020a17e32 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -125,6 +125,17 @@ qt_add_executable(NotepadNext
decorators/SurroundSelection.h
decorators/URLFinder.cpp
decorators/URLFinder.h
+ dialogs/Preferences/PreferencesCategoryListModel.cpp
+ dialogs/Preferences/PreferencesCategoryListModel.h
+ dialogs/Preferences/BehaviorCategoryItem.cpp
+ dialogs/Preferences/BehaviorCategoryItem.h
+ dialogs/Preferences/PreferencesViewUtils.h
+ dialogs/Preferences/PreferencesCategoryItem.h
+ dialogs/Preferences/PreferencesCategoryItemT.h
+ dialogs/Preferences/AppearanceCategoryItem.cpp
+ dialogs/Preferences/AppearanceCategoryItem.h
+ dialogs/PreferencesDialog.cpp
+ dialogs/PreferencesDialog.h
dialogs/ColumnEditorDialog.cpp
dialogs/ColumnEditorDialog.h
dialogs/ColumnEditorDialog.ui
@@ -143,9 +154,9 @@ qt_add_executable(NotepadNext
dialogs/MainWindow.cpp
dialogs/MainWindow.h
dialogs/MainWindow.ui
- dialogs/PreferencesDialog.cpp
- dialogs/PreferencesDialog.h
- dialogs/PreferencesDialog.ui
+
+
+
docks/DebugLogDock.cpp
docks/DebugLogDock.h
docks/DebugLogDock.ui
diff --git a/src/dialogs/MainWindow.cpp b/src/dialogs/MainWindow.cpp
index 8f4930e41..447f58db2 100644
--- a/src/dialogs/MainWindow.cpp
+++ b/src/dialogs/MainWindow.cpp
@@ -716,12 +716,22 @@ MainWindow::MainWindow(NotepadNextApplication *app) :
languageActionGroup->setExclusive(true);
connect(ui->actionPreferences, &QAction::triggered, this, [=] {
- PreferencesDialog *pd = findChild(QString(), Qt::FindDirectChildrenOnly);
+ auto pd = findChild(QString(), Qt::FindDirectChildrenOnly);
if (pd == Q_NULLPTR) {
pd = new PreferencesDialog(app->getSettings(), this);
}
+ pd->resize(700, 400);
+ pd->setGeometry(
+ QStyle::alignedRect(
+ Qt::LeftToRight,
+ Qt::AlignCenter,
+ pd->size(),
+ geometry()
+ )
+ );
+
pd->show();
pd->raise();
pd->activateWindow();
diff --git a/src/dialogs/Preferences/AppearanceCategoryItem.cpp b/src/dialogs/Preferences/AppearanceCategoryItem.cpp
new file mode 100644
index 000000000..d088f5091
--- /dev/null
+++ b/src/dialogs/Preferences/AppearanceCategoryItem.cpp
@@ -0,0 +1,131 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "AppearanceCategoryItem.h"
+#include "PreferencesViewUtils.h"
+#include "ApplicationSettings.h"
+
+using namespace Preferences;
+
+namespace
+{
+ inline QGroupBox *WindowAppearanceView(ApplicationSettings *settings)
+ {
+ const auto group = new QGroupBox(QObject::tr("Main window"));
+
+ const auto layout = new QVBoxLayout(group);
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Show menu bar"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(showMenuBar, ShowMenuBar)
+ ));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Show toolbar"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(showToolBar, ShowToolBar)
+ ));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Show status bar"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(showStatusBar, ShowStatusBar)
+ ));
+ layout->setContentsMargins(MARGINS_6);
+ layout->setSpacing(SPACING_6);
+
+ return group;
+ }
+
+ inline QGroupBox *FontAppearanceView(ApplicationSettings *settings)
+ {
+ const auto group = new QGroupBox(QObject::tr("Font"));
+
+ const auto familyCombo = new QFontComboBox;
+ familyCombo->setMinimumWidth(120);
+
+ const auto sizeCombo = new QComboBox;
+ sizeCombo->addItems({
+ "4", "6", "8", "9", "10",
+ "11", "12", "14", "16", "18",
+ "20", "22", "24", "26", "28",
+ "36", "48", "72"
+ });
+ sizeCombo->setValidator(new QIntValidator(4, 200, sizeCombo));
+ sizeCombo->setEditable(true);
+
+ const auto wheelSuppressor = new WheelEventSuppressFilter(group);
+ wheelSuppressor->setupFor(familyCombo);
+ wheelSuppressor->setupFor(sizeCombo);
+
+ const auto layout = new QHBoxLayout(group);
+ layout->addWidget(new QLabel(QObject::tr("Family:")));
+ layout->addWidget(familyCombo, 1);
+ layout->addSpacing(3);
+ layout->addWidget(new QLabel(QObject::tr("Size:")));
+ layout->addWidget(sizeCombo);
+ layout->setContentsMargins(MARGINS_6);
+ layout->setSpacing(3);
+
+ familyCombo->setCurrentFont(QFont(settings->fontName()));
+ sizeCombo->setCurrentText(QString("%1").arg(settings->fontSize()));
+
+ QObject::connect(familyCombo, &QFontComboBox::currentFontChanged,
+ settings, [settings](const QFont &font) {
+ settings->setFontName(font.family());
+ });
+ QObject::connect(settings, &ApplicationSettings::fontNameChanged,
+ familyCombo, [familyCombo](const QString &fontName){
+ familyCombo->setCurrentFont(QFont(fontName));
+ });
+
+ QObject::connect(sizeCombo, &QComboBox::currentTextChanged,
+ settings, [settings](const QString &value) {
+ settings->setFontSize(value.toInt());
+ });
+ QObject::connect(settings, &ApplicationSettings::fontSizeChanged,
+ sizeCombo, [sizeCombo](int size) {
+ sizeCombo->setCurrentText(QString("%1").arg(size));
+ });
+
+ return group;
+ }
+
+ inline QGroupBox *EditorAppearanceView(ApplicationSettings *settings)
+ {
+ const auto group = new QGroupBox(QObject::tr("Editor"));
+
+ const auto layout = new QVBoxLayout(group);
+ layout->addWidget(FontAppearanceView(settings));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Highlight URLs"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(urlHighlighting, URLHighlighting)
+ ));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Show line numbers"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(showLineNumbers, ShowLineNumbers)
+ ));
+ layout->setContentsMargins(MARGINS_6);
+ layout->setSpacing(SPACING_6);
+
+ return group;
+ }
+}
+
+QWidget *AppearanceCategoryItem::contentView(ApplicationSettings *settings) const
+{
+ const auto widget = new QWidget;
+ const auto layout = new QVBoxLayout(widget);
+
+ layout->addWidget(WindowAppearanceView(settings));
+ layout->addWidget(EditorAppearanceView(settings));
+ layout->addStretch(1);
+ layout->setContentsMargins(MARGINS_6);
+ layout->setSpacing(SPACING_6);
+
+ return widget;
+}
diff --git a/src/dialogs/Preferences/AppearanceCategoryItem.h b/src/dialogs/Preferences/AppearanceCategoryItem.h
new file mode 100644
index 000000000..10dde6436
--- /dev/null
+++ b/src/dialogs/Preferences/AppearanceCategoryItem.h
@@ -0,0 +1,17 @@
+#ifndef APPEARANCECATEGORYITEM_H
+#define APPEARANCECATEGORYITEM_H
+
+#include "PreferencesCategoryItem.h"
+
+class AppearanceCategoryItem : public PreferencesCategoryItem
+{
+public:
+ AppearanceCategoryItem() = default;
+ virtual ~AppearanceCategoryItem() = default;
+
+ virtual QString title() const override { return QObject::tr("Appearance"); }
+ virtual QString iconPath() const override { return "://icons/paintbrush.svg"; }
+ virtual QWidget *contentView(ApplicationSettings *settings) const override;
+};
+
+#endif // APPEARANCECATEGORYITEM_H
diff --git a/src/dialogs/Preferences/BehaviorCategoryItem.cpp b/src/dialogs/Preferences/BehaviorCategoryItem.cpp
new file mode 100644
index 000000000..10f032c4f
--- /dev/null
+++ b/src/dialogs/Preferences/BehaviorCategoryItem.cpp
@@ -0,0 +1,293 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "NotepadNextApplication.h"
+#include "PreferencesViewUtils.h"
+#include "BehaviorCategoryItem.h"
+#include "TranslationManager.h"
+#include "ScintillaNext.h"
+
+using namespace Preferences;
+
+namespace
+{
+ const QLatin1StringView PathStyleValid("QLineEdit { border: 1px solid #2ecc71; }");
+ const QLatin1StringView PathStyleInvalid("QLineEdit { border: 1px solid #e74c3c; }");
+
+ inline QGroupBox *DefaultFolderView(ApplicationSettings *settings)
+ {
+ using BehaviourEnum = ApplicationSettings::DefaultDirectoryBehaviorEnum;
+
+ const auto group = new QGroupBox(QObject::tr("Default directory"));
+
+ const auto layout = new QVBoxLayout(group);
+
+ const auto currentRadio = new QRadioButton(QObject::tr("Current document directory"));
+ const auto lastUsedRadio = new QRadioButton(QObject::tr("Last used directory"));
+ const auto selectedRadio = new QRadioButton(QObject::tr("Selected directory:"));
+
+ const auto buttonGroup = new QButtonGroup(group);
+ buttonGroup->addButton(currentRadio, ApplicationSettings::FollowCurrentDocument);
+ buttonGroup->addButton(lastUsedRadio, ApplicationSettings::RememberLastUsed);
+ buttonGroup->addButton(selectedRadio, ApplicationSettings::HardCoded);
+
+ const auto selectedPathEdit = new QLineEdit;
+ selectedPathEdit->setClearButtonEnabled(true);
+ selectedPathEdit->setPlaceholderText(QObject::tr("Selected directory path here..."));
+#if QT_CONFIG(completer)
+ selectedPathEdit->setCompleter(
+ FilesystemCompliter(
+ selectedPathEdit,
+ Qt::CaseInsensitive,
+ QCompleter::PopupCompletion
+ )
+ );
+#endif
+
+ const auto pathBrowseButton = new QPushButton;
+ pathBrowseButton->setIcon(qApp->style()->standardIcon(QStyle::SP_DirIcon));
+ pathBrowseButton->setToolTip(QObject::tr("Open directory select dialog"));
+
+ const auto setPathInputEnabled = [selectedPathEdit, pathBrowseButton](bool state) {
+ selectedPathEdit->setEnabled(state);
+ pathBrowseButton->setEnabled(state);
+ };
+
+ const auto selectedLayout = new QHBoxLayout;
+ selectedLayout->addWidget(selectedRadio);
+ selectedLayout->addWidget(selectedPathEdit, 1);
+ selectedLayout->addWidget(pathBrowseButton);
+ selectedLayout->setContentsMargins(MARGINS_0);
+ selectedLayout->setSpacing(SPACING_3);
+
+ layout->addWidget(currentRadio);
+ layout->addWidget(lastUsedRadio);
+ layout->addLayout(selectedLayout);
+ layout->setContentsMargins(MARGINS_6);
+ layout->setSpacing(SPACING_6);
+
+ {// Load actual path
+ const auto selectedPath = QDir::toNativeSeparators(settings->defaultDirectory());
+ if (!selectedPath.isEmpty())
+ selectedPathEdit->setText(selectedPath);
+ else
+ selectedPathEdit->setText(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
+ }
+
+ QObject::connect(selectedPathEdit, &QLineEdit::textChanged,
+ settings, [selectedPathEdit, settings](const QString &text) {
+ QFileInfo checkDir(text);
+ QString toolTip;
+ QString style;
+
+ if (!text.isEmpty())
+ {
+ bool checks = checkDir.exists()
+ && checkDir.isDir()
+ && checkDir.isWritable();
+ if (checks)
+ {
+ style = PathStyleValid;
+ settings->setDefaultDirectory(text);
+ }
+ else
+ {
+ QStringList whys;
+
+ if (!checkDir.exists())
+ whys += QObject::tr("Not exists");
+ if (!checkDir.isDir())
+ whys += QObject::tr("Not a directory");
+ if (!checkDir.isWritable())
+ whys += QObject::tr("No write access");
+
+ toolTip = whys.join(" | ");
+
+ style = PathStyleInvalid;
+ }
+ }
+ else
+ toolTip = QObject::tr("Please, use absolute path");
+
+ selectedPathEdit->setStyleSheet(style);
+ selectedPathEdit->setToolTip(toolTip);
+ });
+ QObject::connect(pathBrowseButton, &QPushButton::clicked,
+ group, [group, selectedPathEdit]() {
+ const auto selected = QFileDialog::getExistingDirectory(
+ group,
+ QObject::tr("Select default directory"),
+ selectedPathEdit->text(),
+ QFileDialog::ShowDirsOnly
+ | QFileDialog::DontResolveSymlinks
+ );
+ if (!selected.isEmpty())
+ selectedPathEdit->setText(selected);
+ });
+
+ QObject::connect(buttonGroup, &QButtonGroup::idClicked,
+ settings, [settings, setPathInputEnabled](int id) {
+ setPathInputEnabled(id == BehaviourEnum::HardCoded);
+ settings->setDefaultDirectoryBehavior((BehaviourEnum)id);
+ });
+ QObject::connect(settings, &ApplicationSettings::defaultDirectoryBehaviorChanged,
+ buttonGroup, [buttonGroup, setPathInputEnabled](BehaviourEnum value) {
+ const auto button = buttonGroup->button(value);
+ const QSignalBlocker block(buttonGroup); // Prevent ss-loop
+ if (button) button->click();
+ setPathInputEnabled(value == BehaviourEnum::HardCoded);
+ });
+
+ // Load current selection AFTER QObject::connect's
+ const auto checkableRadio = buttonGroup->button(settings->defaultDirectoryBehavior());
+ if (checkableRadio) checkableRadio->click();
+
+ return group;
+ }
+
+ inline QGroupBox *PreviousSessionView(ApplicationSettings *settings)
+ {
+ const auto group = new QGroupBox(QObject::tr("Restore previous session"));
+ group->setCheckable(true);
+
+ const auto layout = new QVBoxLayout(group);
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Unsaved changes"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(restoreUnsavedFiles, RestoreUnsavedFiles)
+ ));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Temporary files"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(restoreTempFiles, RestoreTempFiles)
+ ));
+ layout->setContentsMargins(MARGINS_6);
+ layout->setSpacing(SPACING_6);
+
+ group->setChecked(settings->restorePreviousSession());
+
+ QObject::connect(settings, &ApplicationSettings::restorePreviousSessionChanged,
+ group, &QGroupBox::setChecked);
+ QObject::connect(group, &QGroupBox::toggled,
+ settings, &ApplicationSettings::setRestorePreviousSession);
+
+ return group;
+ }
+
+ inline QGridLayout *AppLanguageView(ApplicationSettings *settings)
+ {
+ const auto app = qobject_cast(qApp);
+
+ const auto languageCombo = new QComboBox;
+ languageCombo->addItem(QObject::tr("Like in system"), QStringLiteral(""));
+ for (const auto &languageData : app->getTranslationManager()->availableTranslations())
+ {
+ QLocale locale(languageData);
+ const auto languageTitle = TranslationManager::FormatLocaleTerritoryAndLanguage(locale);
+ languageCombo->addItem(languageTitle, languageData);
+ }
+
+ const auto wheelSuppressor = new WheelEventSuppressFilter(languageCombo);
+ wheelSuppressor->setupFor(languageCombo);
+
+ const auto restartNotification = new RestartRequiredLabel;
+
+ const auto layout = new QGridLayout;
+ layout->addWidget(new QLabel(QObject::tr("Language:")), 0, 0);
+ layout->addWidget(languageCombo, 0, 1);
+ layout->addWidget(restartNotification, 1, 0, 1, 2);
+ layout->setColumnStretch(1, 1);
+ layout->setContentsMargins(MARGINS_0);
+ layout->setSpacing(SPACING_3);
+
+ const auto setComboByData = [languageCombo](const QString &data) {
+ const auto index = languageCombo->findData(data);
+ languageCombo->setCurrentIndex(index >= 0 ? index : 0);
+ };
+
+ setComboByData(settings->translation());
+
+ QObject::connect(languageCombo, QOverload::of(&QComboBox::currentIndexChanged),
+ settings, [settings, languageCombo](int index) {
+ settings->setTranslation(languageCombo->itemData(index).toString());
+ });
+ QObject::connect(settings, &ApplicationSettings::translationChanged,
+ languageCombo, setComboByData);
+
+ return layout;
+ }
+
+ inline QHBoxLayout *EOLTypeView(ApplicationSettings *settings)
+ {
+ const auto eolCombo = new QComboBox;
+ eolCombo->addItem(QObject::tr("System default"), QString(""));
+ eolCombo->addItem(QObject::tr("Windows (CR LF)"), ScintillaNext::eolModeToString(SC_EOL_CRLF));
+ eolCombo->addItem(QObject::tr("Unix (LF)"), ScintillaNext::eolModeToString(SC_EOL_LF));
+ eolCombo->addItem(QObject::tr("Macintosh (CR)"), ScintillaNext::eolModeToString(SC_EOL_CR));
+
+ const auto wheelSuppressor = new WheelEventSuppressFilter(eolCombo);
+ wheelSuppressor->setupFor(eolCombo);
+
+ const auto layout = new QHBoxLayout;
+ layout->addWidget(new QLabel(QObject::tr("Default line endings:")));
+ layout->addWidget(eolCombo, 1);
+ layout->setContentsMargins(MARGINS_0);
+ layout->setSpacing(SPACING_3);
+
+ const auto setComboByData = [eolCombo](const QString &data) {
+ const auto index = eolCombo->findData(data);
+ eolCombo->setCurrentIndex(index >= 0 ? index : 0);
+ };
+
+ setComboByData(settings->defaultEOLMode());
+
+ QObject::connect(eolCombo, QOverload::of(&QComboBox::currentIndexChanged),
+ settings, [settings, eolCombo](int index) {
+ settings->setDefaultEOLMode(eolCombo->itemData(index).toString());
+ });
+ QObject::connect(settings, &ApplicationSettings::defaultEOLModeChanged,
+ eolCombo, setComboByData);
+
+ return layout;
+ }
+}
+
+QWidget *BehaviorCategoryItem::contentView(ApplicationSettings *settings) const
+{
+ const auto widget = new QWidget;
+ const auto layout = new QVBoxLayout(widget);
+
+ layout->addLayout(AppLanguageView(settings));
+ layout->addWidget(PreviousSessionView(settings));
+ layout->addWidget(DefaultFolderView(settings));
+ layout->addLayout(EOLTypeView(settings));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Recenter find/replace dialog when opened"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(centerSearchDialog, CenterSearchDialog)
+ ));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Combine search results"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(combineSearchResults, CombineSearchResults)
+ ));
+ layout->addWidget(CreateCheckBox(
+ QObject::tr("Exit on last tab closed"),
+ settings,
+ PREFERENCES_BIND_PROPERTY(exitOnLastTabClosed, ExitOnLastTabClosed)
+ ));
+ layout->addStretch(1);
+ layout->setContentsMargins(MARGINS_6);
+ layout->setSpacing(SPACING_6);
+
+ return widget;
+}
diff --git a/src/dialogs/Preferences/BehaviorCategoryItem.h b/src/dialogs/Preferences/BehaviorCategoryItem.h
new file mode 100644
index 000000000..3e9f6c10c
--- /dev/null
+++ b/src/dialogs/Preferences/BehaviorCategoryItem.h
@@ -0,0 +1,17 @@
+#ifndef BEHAVIORCATEGORYITEM_H
+#define BEHAVIORCATEGORYITEM_H
+
+#include "PreferencesCategoryItem.h"
+
+class BehaviorCategoryItem : public PreferencesCategoryItem
+{
+public:
+ BehaviorCategoryItem() = default;
+ virtual ~BehaviorCategoryItem() = default;
+
+ virtual QString title() const override { return QObject::tr("Behavior"); }
+ virtual QString iconPath() const override { return "://icons/audio-waveform.svg"; }
+ virtual QWidget *contentView(ApplicationSettings *settings) const override;
+};
+
+#endif // BEHAVIORCATEGORYITEM_H
diff --git a/src/dialogs/Preferences/PreferencesCategoryItem.h b/src/dialogs/Preferences/PreferencesCategoryItem.h
new file mode 100644
index 000000000..61bc5d777
--- /dev/null
+++ b/src/dialogs/Preferences/PreferencesCategoryItem.h
@@ -0,0 +1,20 @@
+#ifndef PREFERENCESCATEGORYITEM_H
+#define PREFERENCESCATEGORYITEM_H
+
+#include
+
+class ApplicationSettings;
+
+class PreferencesCategoryItem
+{
+public:
+ PreferencesCategoryItem() = default;
+ virtual ~PreferencesCategoryItem() = default;
+
+ virtual QString title() const = 0;
+ virtual QString iconPath() const = 0;
+ /// @warning Caller becomes owner.
+ virtual QWidget *contentView(ApplicationSettings *settings) const = 0;
+};
+
+#endif // PREFERENCESCATEGORYITEM_H
diff --git a/src/dialogs/Preferences/PreferencesCategoryItemT.h b/src/dialogs/Preferences/PreferencesCategoryItemT.h
new file mode 100644
index 000000000..60fc3a52e
--- /dev/null
+++ b/src/dialogs/Preferences/PreferencesCategoryItemT.h
@@ -0,0 +1,26 @@
+#ifndef PREFERENCESCATEGORYITEMT_H
+#define PREFERENCESCATEGORYITEMT_H
+
+#include "PreferencesCategoryItem.h"
+
+template
+class PreferencesCategoryItemT : public PreferencesCategoryItem
+{
+public:
+ PreferencesCategoryItemT(const QString &title, const QString &icon)
+ : PreferencesCategoryItem(), mTitle(title), mIcon(icon)
+ { }
+ virtual ~PreferencesCategoryItemT() = default;
+
+ inline virtual QString title() const override { return mTitle; }
+ inline virtual QString iconPath() const override { return mIcon; }
+ inline virtual T *contentView(ApplicationSettings *settings) const override {
+ return new T(settings);
+ }
+
+private:
+ QString mTitle;
+ QString mIcon;
+};
+
+#endif // PREFERENCESCATEGORYITEMT_H
diff --git a/src/dialogs/Preferences/PreferencesCategoryListModel.cpp b/src/dialogs/Preferences/PreferencesCategoryListModel.cpp
new file mode 100644
index 000000000..e63f87164
--- /dev/null
+++ b/src/dialogs/Preferences/PreferencesCategoryListModel.cpp
@@ -0,0 +1,64 @@
+#include "PreferencesCategoryListModel.h"
+
+namespace
+{
+ using ItemPtr = std::unique_ptr;
+
+ constexpr unsigned int RowHeight = 32;
+}
+
+PreferencesCategoryListModel::PreferencesCategoryListModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+ mItems.reserve(5);
+}
+
+QVariant PreferencesCategoryListModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid() || index.row() >= mItems.size())
+ return {};
+
+ const auto &item = mItems.at(index.row());
+
+ switch (role)
+ {
+ case Qt::DisplayRole:
+ return item->title();
+ case Qt::DecorationRole:
+ return QIcon(item->iconPath());
+ case Qt::SizeHintRole:
+ return QSize(0, RowHeight);
+ case Qt::TextAlignmentRole:
+ return Qt::AlignVCenter;
+ }
+
+ return {};
+}
+
+void PreferencesCategoryListModel::addCategory(PreferencesCategoryItem *category, int row)
+{
+ if (row < 0 || row > mItems.size())
+ row = mItems.size();
+
+ beginInsertRows(index(row), row, row + 1);
+ mItems.insert(mItems.cbegin() + row, std::move(ItemPtr(category)));
+ endInsertRows();
+}
+
+void PreferencesCategoryListModel::removeCategory(int row)
+{
+ if (row < 0 || row >= mItems.size())
+ return;
+
+ beginRemoveRows(index(row), row, row + 1);
+ mItems.erase(mItems.cbegin() + row);
+ endRemoveRows();
+}
+
+PreferencesCategoryItem *PreferencesCategoryListModel::category(int row) const
+{
+ if (row < 0 || row >= mItems.size())
+ return nullptr;
+
+ return mItems.at(row).get();
+}
diff --git a/src/dialogs/Preferences/PreferencesCategoryListModel.h b/src/dialogs/Preferences/PreferencesCategoryListModel.h
new file mode 100644
index 000000000..aab51889f
--- /dev/null
+++ b/src/dialogs/Preferences/PreferencesCategoryListModel.h
@@ -0,0 +1,34 @@
+#ifndef PREFERENCESCATEGORYLISTMODEL_H
+#define PREFERENCESCATEGORYLISTMODEL_H
+
+#include
+#include
+
+#include "PreferencesCategoryItem.h"
+
+class PreferencesCategoryListModel : public QAbstractListModel
+{
+public:
+ explicit PreferencesCategoryListModel(QObject *parent = nullptr);
+ virtual ~PreferencesCategoryListModel() = default;
+
+ inline virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override {
+ return mItems.size();
+ }
+
+ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+
+ /**
+ * @param item Specific item.
+ * @param pos Item position. -1 will append to the end.
+ * @note takes ownership of the item.
+ */
+ void addCategory(PreferencesCategoryItem *category, int row = -1);
+ void removeCategory(int row);
+ PreferencesCategoryItem *category(int row) const;
+
+private:
+ std::vector> mItems;
+};
+
+#endif // PREFERENCESCATEGORYLISTMODEL_H
diff --git a/src/dialogs/Preferences/PreferencesViewUtils.h b/src/dialogs/Preferences/PreferencesViewUtils.h
new file mode 100644
index 000000000..5810593bc
--- /dev/null
+++ b/src/dialogs/Preferences/PreferencesViewUtils.h
@@ -0,0 +1,134 @@
+#ifndef PREFERENCESVIEWUTILS_H
+#define PREFERENCESVIEWUTILS_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#define PREFERENCES_BIND_PROPERTY(name, Name) \
+ &ApplicationSettings::name, \
+ &ApplicationSettings::set##Name, \
+ &ApplicationSettings::name##Changed
+
+namespace Preferences
+{
+ inline const QMargins MARGINS_0;
+ inline const QMargins MARGINS_6(6, 6, 6, 6);
+
+ inline const int SPACING_0(0);
+ inline const int SPACING_3(3);
+ inline const int SPACING_6(6);
+
+ class WheelEventSuppressFilter : public QObject
+ {
+ public:
+ explicit WheelEventSuppressFilter(QObject *parent = nullptr)
+ : QObject(parent) { }
+
+ inline void setupFor(QWidget *widget)
+ {
+ widget->installEventFilter(this);
+ widget->setFocusPolicy(Qt::ClickFocus);
+ }
+
+ inline virtual bool eventFilter(QObject *obj, QEvent *event) override
+ {
+ if (event->type() == QEvent::Wheel)
+ {
+ const auto widget = qobject_cast(obj);
+ if (widget && !widget->hasFocus())
+ {
+ event->ignore();
+ return true;
+ }
+ }
+
+ return QObject::eventFilter(obj, event);
+ }
+ };
+
+ class RestartRequiredLabel : public QWidget
+ {
+ public:
+ RestartRequiredLabel(QWidget *parent = nullptr)
+ : QWidget(parent)
+ {
+ const auto iconSize = qApp->style()->pixelMetric(QStyle::PM_SmallIconSize);
+
+ const auto icon = new QLabel;
+ icon->setPixmap(
+ qApp->style()->standardIcon(
+ QStyle::SP_MessageBoxInformation
+ ).pixmap(iconSize, iconSize)
+ );
+
+ mLabel = new QLabel(QObject::tr("Application restart required to apply changes."));
+ mLabel->setWordWrap(true);
+
+ auto infoFont = mLabel->font();
+ infoFont.setPointSize(infoFont.pointSize() - 1);
+ infoFont.setItalic(true);
+ mLabel->setFont(infoFont);
+
+ const auto layout = new QHBoxLayout(this);
+ layout->addWidget(icon, 0, Qt::AlignTop);
+ layout->addWidget(mLabel, 1);
+ layout->setContentsMargins(9, 0, 3, 6);
+ layout->setSpacing(SPACING_3);
+ }
+
+ inline const QLabel *label() const {
+ return mLabel;
+ }
+
+ private:
+ QLabel *mLabel = nullptr;
+ };
+
+#if QT_CONFIG(completer)
+ inline QCompleter *FilesystemCompliter(QObject *parent,
+ Qt::CaseSensitivity caseSensivity = Qt::CaseInsensitive,
+ QCompleter::CompletionMode completionMode = QCompleter::InlineCompletion,
+ const QDir::Filters &filters = QDir::AllDirs | QDir::NoDotAndDotDot)
+ {
+ const auto fsModel = new QFileSystemModel(parent);
+ fsModel->setRootPath("");
+ fsModel->setFilter(filters);
+
+ const auto completer = new QCompleter(fsModel, parent);
+ completer->setCompletionMode(completionMode);
+ completer->setCaseSensitivity(caseSensivity);
+
+ return completer;
+ }
+#endif
+
+ template
+ inline QCheckBox *CreateCheckBox(const QString &title,
+ ApplicationSettings *settings,
+ G getter, S setter, N notifier,
+ const QString &toolTip = QString())
+ {
+ const auto checkBox = new QCheckBox(title);
+
+ if (!toolTip.isEmpty())
+ checkBox->setToolTip(toolTip);
+
+ checkBox->setChecked(std::bind(getter, settings)());
+
+ QObject::connect(settings, notifier, checkBox, &QCheckBox::setChecked);
+ QObject::connect(checkBox, &QCheckBox::toggled, settings, setter);
+
+ return checkBox;
+ }
+}
+
+#endif // PREFERENCESVIEWUTILS_H
diff --git a/src/dialogs/PreferencesDialog.cpp b/src/dialogs/PreferencesDialog.cpp
index 54296f482..24c0be238 100644
--- a/src/dialogs/PreferencesDialog.cpp
+++ b/src/dialogs/PreferencesDialog.cpp
@@ -1,200 +1,239 @@
-/*
- * This file is part of Notepad Next.
- * Copyright 2019 Justin Dailey
- *
- * Notepad Next 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 3 of the License, or
- * (at your option) any later version.
- *
- * Notepad Next 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 Notepad Next. If not, see .
- */
-
-
-#include "PreferencesDialog.h"
-#include "NotepadNextApplication.h"
-#include "TranslationManager.h"
-#include "ui_PreferencesDialog.h"
-#include "ScintillaNext.h"
-
-#include
-#include
+#include
+#include
+#include
#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "Preferences/PreferencesCategoryListModel.h"
+#include "Preferences/AppearanceCategoryItem.h"
+#include "Preferences/BehaviorCategoryItem.h"
+#include "PreferencesDialog.h"
+#include "ApplicationSettings.h"
-PreferencesDialog::PreferencesDialog(ApplicationSettings *settings, QWidget *parent) :
- QDialog(parent, Qt::Tool),
- ui(new Ui::PreferencesDialog),
- settings(settings)
+namespace
{
- ui->setupUi(this);
-
- QIcon icon = style()->standardIcon(QStyle::SP_MessageBoxInformation);
- QPixmap pixmap = icon.pixmap(QSize(16, 16));
- ui->labelAppRestartIcon->setPixmap(pixmap);
- ui->labelAppRestartIcon->hide();
- ui->labelAppRestart->hide();
-
- MapSettingToCheckBox(ui->checkBoxMenuBar, &ApplicationSettings::showMenuBar, &ApplicationSettings::setShowMenuBar, &ApplicationSettings::showMenuBarChanged);
- MapSettingToCheckBox(ui->checkBoxToolBar, &ApplicationSettings::showToolBar, &ApplicationSettings::setShowToolBar, &ApplicationSettings::showToolBarChanged);
- MapSettingToCheckBox(ui->checkBoxStatusBar, &ApplicationSettings::showStatusBar, &ApplicationSettings::setShowStatusBar, &ApplicationSettings::showStatusBarChanged);
- MapSettingToCheckBox(ui->checkBoxRecenterSearchDialog, &ApplicationSettings::centerSearchDialog, &ApplicationSettings::setCenterSearchDialog, &ApplicationSettings::centerSearchDialogChanged);
-
- MapSettingToGroupBox(ui->gbxRestorePreviousSession, &ApplicationSettings::restorePreviousSession, &ApplicationSettings::setRestorePreviousSession, &ApplicationSettings::restorePreviousSessionChanged);
- connect(ui->gbxRestorePreviousSession, &QGroupBox::toggled, this, [=](bool checked) {
- if (!checked) {
- ui->checkBoxUnsavedFiles->setChecked(false);
- ui->checkBoxRestoreTempFiles->setChecked(false);
- }
- else {
- QMessageBox::warning(this, tr("Warning"), tr("This feature is experimental and it should not be considered safe for critically important work. It may lead to possible data loss. Use at your own risk."));
- }
- });
-
- MapSettingToCheckBox(ui->checkBoxUnsavedFiles, &ApplicationSettings::restoreUnsavedFiles, &ApplicationSettings::setRestoreUnsavedFiles, &ApplicationSettings::restoreUnsavedFilesChanged);
- MapSettingToCheckBox(ui->checkBoxRestoreTempFiles, &ApplicationSettings::restoreTempFiles, &ApplicationSettings::setRestoreTempFiles, &ApplicationSettings::restoreTempFilesChanged);
-
- MapSettingToCheckBox(ui->checkBoxCombineSearchResults, &ApplicationSettings::combineSearchResults, &ApplicationSettings::setCombineSearchResults, &ApplicationSettings::combineSearchResultsChanged);
-
- populateTranslationComboBox();
- connect(ui->comboBoxTranslation, QOverload::of(&QComboBox::currentIndexChanged), this, [=](int index) {
- settings->setTranslation(ui->comboBoxTranslation->itemData(index).toString());
- showApplicationRestartRequired();
- });
-
- MapSettingToCheckBox(ui->checkBoxExitOnLastTabClosed, &ApplicationSettings::exitOnLastTabClosed, &ApplicationSettings::setExitOnLastTabClosed, &ApplicationSettings::exitOnLastTabClosedChanged);
+ using ListModel = PreferencesCategoryListModel;
- ui->fcbDefaultFont->setCurrentFont(QFont(settings->fontName()));
- connect(ui->fcbDefaultFont, &QFontComboBox::currentFontChanged, this, [=](const QFont &f) {
- settings->setFontName(f.family());
- });
- connect(settings, &ApplicationSettings::fontNameChanged, this, [=](QString fontName){
- ui->fcbDefaultFont->setCurrentFont(QFont(fontName));
- });
-
- ui->spbDefaultFontSize->setValue(settings->fontSize());
- connect(ui->spbDefaultFontSize, QOverload::of(&QSpinBox::valueChanged), settings, &ApplicationSettings::setFontSize);
- connect(settings, &ApplicationSettings::fontSizeChanged, ui->spbDefaultFontSize, &QSpinBox::setValue);
+ inline QFont ContentTitleFont() noexcept
+ {
+ auto font = QApplication::font("QLabel");
+ font.setPointSize(16);
+ font.setBold(true);
+ return font;
+ }
+}
- ui->comboBoxLineEndings->addItem(tr("System Default"), QString(""));
- ui->comboBoxLineEndings->addItem(tr("Windows (CR LF)"), ScintillaNext::eolModeToString(SC_EOL_CRLF));
- ui->comboBoxLineEndings->addItem(tr("Linux (LF)"), ScintillaNext::eolModeToString(SC_EOL_LF));
- ui->comboBoxLineEndings->addItem(tr("Macintosh (CR)"), ScintillaNext::eolModeToString(SC_EOL_CR));
+struct PreferencesDialog::PreferencesDialogPrivate
+{
+public:
+ inline bool hasUnsavedChanges() const {
+ return (settings.backup) ? !settings.actual->isEquals(settings.backup) : false;
+ }
+ inline void makeSettingsBackup() {
+ if (settings.backup) settings.backup->fillFrom(settings.actual);
+ }
+ inline void makeSettingsRestore() {
+ if (settings.backup) settings.actual->fillFrom(settings.backup);
+ }
+ inline void makeSettingsReset() const
+ {
+ std::unique_ptr tempSettings(createTemporarySettings(nullptr));
+ if (tempSettings) settings.actual->fillFrom(tempSettings.get());
+ }
- // Select the current one
- int index = ui->comboBoxLineEndings->findData(settings->defaultEOLMode());
- ui->comboBoxLineEndings->setCurrentIndex(index == -1 ? 0 : index);
+ inline ApplicationSettings *createTemporarySettings(QObject *parent) const
+ {
+ auto tempFile = std::make_unique();
- connect(ui->comboBoxLineEndings, QOverload::of(&QComboBox::currentIndexChanged), this, [=](int index) {
- settings->setDefaultEOLMode(ui->comboBoxLineEndings->itemData(index).toString());
- });
- connect(settings, &ApplicationSettings::defaultEOLModeChanged, this, [=](QString defaultEOLMode) {
- int index = ui->comboBoxLineEndings->findData(defaultEOLMode);
- ui->comboBoxLineEndings->setCurrentIndex(index == -1 ? 0 : index);
- });
+ if (!tempFile->open())
+ {
+ qWarning() << "Unable to create temporary file:"
+ << tempFile->errorString();
+ return nullptr;
+ }
- MapSettingToCheckBox(ui->checkBoxHighlightURLs, &ApplicationSettings::urlHighlighting, &ApplicationSettings::setURLHighlighting, &ApplicationSettings::urlHighlightingChanged);
- MapSettingToCheckBox(ui->checkBoxShowLineNumbers, &ApplicationSettings::showLineNumbers, &ApplicationSettings::setShowLineNumbers, &ApplicationSettings::showLineNumbersChanged);
+ return new ApplicationSettings(tempFile.release(), parent);
+ }
+public: /* Logic */
+ struct {
+ /// @brief Actual settings populated in-app.
+ ApplicationSettings *actual = nullptr;
+ /// @brief Settings backup on latest show event.
+ ApplicationSettings *backup = nullptr;
+ } settings;
- QButtonGroup *buttonGroup = new QButtonGroup(this);
- buttonGroup->addButton(ui->radioFollowCurrentDirectory, ApplicationSettings::FollowCurrentDocument);
- buttonGroup->addButton(ui->radioLastUsedDirectory, ApplicationSettings::RememberLastUsed);
- buttonGroup->addButton(ui->radioHardCoded, ApplicationSettings::HardCoded);
+public: /* View */
+ QGridLayout *mainLayout = nullptr;
- connect(buttonGroup, &QButtonGroup::idClicked, this, [=](int id) {
- ApplicationSettings::DefaultDirectoryBehaviorEnum e = static_cast(id);
- settings->setDefaultDirectoryBehavior(e);
- });
+ struct {
+ QListView *listView = nullptr;
+ ListModel *model = nullptr;
+ } category;
- connect(ui->radioHardCoded, &QRadioButton::toggled, this, [=](bool checked){
- ui->btnSelectHardCodedPath->setEnabled(checked);
- ui->txtHardCodedPath->setEnabled(checked);
- });
+ struct {
+ QWidget *widget = nullptr;
+ QVBoxLayout *layout = nullptr;
- connect(ui->btnSelectHardCodedPath, &QToolButton::clicked, this, [=]() {
- QString dir = QFileDialog::getExistingDirectory(this, tr("Default Directory"));
- if (dir.isEmpty()) return; // user cancelled
+ QLabel *title = nullptr;
+ QScrollArea *viewport = nullptr;
+ } content;
- settings->setDefaultDirectory(QDir::fromNativeSeparators(dir));
- ui->txtHardCodedPath->setText(QDir::toNativeSeparators(dir));
- });
+ QDialogButtonBox *controlsBox = nullptr;
+};
- connect(ui->txtHardCodedPath, &QLineEdit::editingFinished, this, [=]() {
- QString dir = ui->txtHardCodedPath->text();
- settings->setDefaultDirectory(QDir::fromNativeSeparators(dir));
- ui->txtHardCodedPath->setText(QDir::toNativeSeparators(dir));
+PreferencesDialog::PreferencesDialog(ApplicationSettings *settings, QWidget *parent)
+ : QDialog(parent, Qt::Tool),
+ p(new PreferencesDialogPrivate)
+{
+ setWindowTitle(tr("Preferences"));
+
+ p->settings.actual = settings;
+ p->settings.backup = p->createTemporarySettings(this);
+
+ // Category
+ p->category.listView = new QListView;
+ p->category.listView->setFixedWidth(180);
+
+ p->category.model = new ListModel(p->category.listView);
+ p->category.model->addCategory(new BehaviorCategoryItem);
+ p->category.model->addCategory(new AppearanceCategoryItem);
+
+ p->category.listView->setModel(p->category.model);
+
+ // Content
+ p->content.title = new QLabel;
+ p->content.title->setFont(ContentTitleFont());
+
+ p->content.viewport = new QScrollArea;
+
+ p->content.widget = new QWidget;
+ p->content.widget->setSizePolicy(
+ QSizePolicy::Expanding,
+ QSizePolicy::Expanding
+ );
+
+ p->content.layout = new QVBoxLayout(p->content.widget);
+ p->content.layout->setContentsMargins(0, 0, 0, 0);
+ p->content.layout->addWidget(p->content.title);
+ p->content.layout->addWidget(p->content.viewport);
+
+ // Controls
+ p->controlsBox = new QDialogButtonBox(Qt::Horizontal);
+ p->controlsBox->setStandardButtons(
+ QDialogButtonBox::RestoreDefaults
+ | QDialogButtonBox::Ok
+ | QDialogButtonBox::Cancel
+ );
+
+ // Main assembly
+ p->mainLayout = new QGridLayout(this);
+ p->mainLayout->addWidget(p->category.listView, 0, 0, 2, 1);
+ p->mainLayout->addWidget(p->content.widget, 0, 1);
+ p->mainLayout->addWidget(p->controlsBox, 1, 1);
+
+ connect(p->category.listView->selectionModel(), &QItemSelectionModel::currentRowChanged,
+ this, &PreferencesDialog::onCategoryChanged);
+
+ connect(p->controlsBox, &QDialogButtonBox::clicked,
+ this, [this](QAbstractButton *button) {
+ switch (p->controlsBox->buttonRole(button))
+ {
+ case QDialogButtonBox::ResetRole: onResetClicked(); break;
+ case QDialogButtonBox::AcceptRole: onOkClicked(); break;
+ case QDialogButtonBox::RejectRole: onCancelClicked(); break;
+ default: break;
+ }
});
- if (auto b = buttonGroup->button(settings->defaultDirectoryBehavior())) {
- b->setChecked(true);
- }
-
- if (settings->defaultDirectoryBehavior() == ApplicationSettings::HardCoded) {
- ui->txtHardCodedPath->setText((QDir::toNativeSeparators(settings->defaultDirectory())));
- }
- else {
- ui->txtHardCodedPath->setText(QString());
- }
+ // Force switch to first category
+ QMetaObject::invokeMethod(this, [this](){
+ p->category.listView->setCurrentIndex(p->category.model->index(0));
+ }, Qt::QueuedConnection);
}
PreferencesDialog::~PreferencesDialog()
{
- delete ui;
+ delete p;
}
-void PreferencesDialog::showApplicationRestartRequired() const
+void PreferencesDialog::showEvent(QShowEvent *event)
{
- ui->labelAppRestartIcon->show();
- ui->labelAppRestart->show();
+ p->makeSettingsBackup();
+ QDialog::showEvent(event);
}
-template
-void PreferencesDialog::MapSettingToCheckBox(QCheckBox *checkBox, Func1 getter, Func2 setter, Func3 notifier) const
+void PreferencesDialog::closeEvent(QCloseEvent *event)
{
- // Get the value and set the checkbox state
- checkBox->setChecked(std::bind(getter, settings)());
+ if (isVisible() && p->hasUnsavedChanges())
+ {
+ const auto reply = QMessageBox::question(
+ this,
+ tr("Unsaved сhanges"),
+ tr("You have unsaved changes.\n"
+ "Do you want to save them before closing?"),
+ QMessageBox::Save
+ | QMessageBox::Discard
+ | QMessageBox::Cancel
+ );
+
+ switch (reply)
+ {
+ case QMessageBox::Cancel:
+ event->ignore();
+ return;
+ case QMessageBox::Discard:
+ p->makeSettingsRestore();
+ [[fallthrough]];
+ case QMessageBox::Save:
+ p->settings.actual->sync();
+ break;
+ default:
+ break;
+ }
+ }
- // Set up two way connection
- connect(settings, notifier, checkBox, &QCheckBox::setChecked);
- connect(checkBox, &QCheckBox::toggled, settings, setter);
+ QDialog::closeEvent(event);
}
-template
-void PreferencesDialog::MapSettingToGroupBox(QGroupBox *groupBox, Func1 getter, Func2 setter, Func3 notifier) const
+void PreferencesDialog::onCategoryChanged(const QModelIndex &index)
{
- // Get the value and set the checkbox state
- groupBox->setChecked(std::bind(getter, settings)());
+ if (!index.isValid()) return;
- // Set up two way connection
- connect(settings, notifier, groupBox, &QGroupBox::setChecked);
- connect(groupBox, &QGroupBox::toggled, settings, setter);
+ const auto item = p->category.model->category(index.row());
+ if (!item) return;
+
+ p->content.title->setText(item->title());
+ p->content.viewport->setWidget(item->contentView(p->settings.actual));
+ p->content.viewport->widget()->setSizePolicy(
+ QSizePolicy::Expanding, QSizePolicy::Expanding
+ );
+ p->content.viewport->setWidgetResizable(true);
}
-void PreferencesDialog::populateTranslationComboBox()
+void PreferencesDialog::onOkClicked()
{
- NotepadNextApplication *app = qobject_cast(qApp);
-
- // Add the system default at the top
- ui->comboBoxTranslation->addItem(tr(""), QStringLiteral(""));
+ p->settings.actual->sync();
+ accept();
+}
- // TODO: sort this list and keep the system default at the top
- for (const auto &localeName : app->getTranslationManager()->availableTranslations())
- {
- QLocale locale(localeName);
- const QString localeDisplay = TranslationManager::FormatLocaleTerritoryAndLanguage(locale);
- ui->comboBoxTranslation->addItem(localeDisplay, localeName);
- }
+void PreferencesDialog::onCancelClicked()
+{
+ close();
+}
- // Select the current one
- int index = ui->comboBoxTranslation->findData(settings->translation());
- if (index != -1) {
- ui->comboBoxTranslation->setCurrentIndex(index);
- }
+void PreferencesDialog::onResetClicked()
+{
+ p->makeSettingsReset();
}
diff --git a/src/dialogs/PreferencesDialog.h b/src/dialogs/PreferencesDialog.h
index 985a9b8b4..09b0c9926 100644
--- a/src/dialogs/PreferencesDialog.h
+++ b/src/dialogs/PreferencesDialog.h
@@ -1,58 +1,31 @@
-/*
- * This file is part of Notepad Next.
- * Copyright 2019 Justin Dailey
- *
- * Notepad Next 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 3 of the License, or
- * (at your option) any later version.
- *
- * Notepad Next 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 Notepad Next. If not, see .
- */
-
-
#ifndef PREFERENCESDIALOG_H
#define PREFERENCESDIALOG_H
-#include "ApplicationSettings.h"
-
#include
-#include
-#include
-
-namespace Ui {
-class PreferencesDialog;
-}
-class Settings;
+class ApplicationSettings;
class PreferencesDialog : public QDialog
{
Q_OBJECT
-
public:
- PreferencesDialog(ApplicationSettings *settings, QWidget *parent = 0);
- ~PreferencesDialog();
-
- void showApplicationRestartRequired() const;
+ PreferencesDialog(ApplicationSettings *settings, QWidget *parent = nullptr);
+ virtual ~PreferencesDialog();
-private:
- Ui::PreferencesDialog *ui;
- ApplicationSettings *settings;
+protected:
+ virtual void showEvent(QShowEvent *event) override;
+ virtual void closeEvent(QCloseEvent *event) override;
- template
- void MapSettingToCheckBox(QCheckBox *checkBox, Func1 getter, Func2 setter, Func3 notifier) const;
+private slots:
+ void onCategoryChanged(const QModelIndex &index);
- template
- void MapSettingToGroupBox(QGroupBox *groupBox, Func1 getter, Func2 setter, Func3 notifier) const;
+ void onOkClicked();
+ void onCancelClicked();
+ void onResetClicked();
- void populateTranslationComboBox();
+private:
+ struct PreferencesDialogPrivate;
+ PreferencesDialogPrivate *p;
};
#endif // PREFERENCESDIALOG_H
diff --git a/src/dialogs/PreferencesDialog.ui b/src/dialogs/PreferencesDialog.ui
deleted file mode 100644
index 2d98c2230..000000000
--- a/src/dialogs/PreferencesDialog.ui
+++ /dev/null
@@ -1,342 +0,0 @@
-
-
- PreferencesDialog
-
-
-
- 0
- 0
- 803
- 597
-
-
-
- Preferences
-
-
- -
-
-
- true
-
-
-
-
- 0
- -99
- 769
- 644
-
-
-
-
-
-
-
-
-
-
- Show menu bar
-
-
-
- -
-
-
- Show toolbar
-
-
-
- -
-
-
- Show status bar
-
-
-
- -
-
-
- Restore previous session
-
-
- true
-
-
- false
-
-
-
-
-
-
- Unsaved changes
-
-
-
- -
-
-
- Temporary files
-
-
-
-
-
-
-
-
- -
-
-
- Recenter find/replace dialog when opened
-
-
-
- -
-
-
- Combine search results
-
-
-
- -
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
-
-
- -
-
-
- Translation:
-
-
-
-
-
- -
-
-
- Exit on last tab closed
-
-
-
- -
-
-
-
-
-
- Default Font
-
-
-
-
-
-
- Font
-
-
-
- -
-
-
- -
-
-
- Font Size
-
-
-
- -
-
-
- pt
-
-
- 2
-
-
- 48
-
-
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
- -
-
-
-
-
-
- Default Line Endings
-
-
-
- -
-
-
-
-
- -
-
-
- Highlight URLs
-
-
-
- -
-
-
- Show Line Numbers
-
-
-
- -
-
-
- Default Directory
-
-
-
-
-
-
- Follow Current Document
-
-
-
- -
-
-
- Last Used Directory
-
-
-
- -
-
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
- ...
-
-
-
-
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- TextLabel
-
-
-
- -
-
-
-
- true
-
-
-
- An application restart is required to apply certain settings.
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Ok
-
-
-
-
-
-
-
-
-
-
- buttonBox
- accepted()
- PreferencesDialog
- accept()
-
-
- 792
- 586
-
-
- 157
- 274
-
-
-
-
- buttonBox
- rejected()
- PreferencesDialog
- reject()
-
-
- 792
- 586
-
-
- 286
- 274
-
-
-
-
-
diff --git a/src/icons/audio-waveform.svg b/src/icons/audio-waveform.svg
new file mode 100644
index 000000000..17d3bb76b
--- /dev/null
+++ b/src/icons/audio-waveform.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/paintbrush.svg b/src/icons/paintbrush.svg
new file mode 100644
index 000000000..078adf1da
--- /dev/null
+++ b/src/icons/paintbrush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources.qrc b/src/resources.qrc
index d373be086..1b1192573 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -42,5 +42,7 @@
icons/application_osx_terminal.png
icons/folder_go.png
icons/wrapindicator.png
+ icons/audio-waveform.svg
+ icons/paintbrush.svg