From 5390a032fc29fcb79924cabbe9905e5f9676adbf Mon Sep 17 00:00:00 2001 From: GenevensiS <66968533+G-e-n-e-v-e-n-s-i-S@users.noreply.github.com> Date: Sun, 28 Dec 2025 16:49:51 +0100 Subject: [PATCH] add strikethrough --- data/ch-s.mse-locale/locale | 16 +++++++- data/ch-t.mse-locale/locale | 16 +++++++- data/da.mse-locale/locale | 16 +++++++- data/de.mse-locale/locale | 15 +++++-- data/en.mse-locale/locale | 9 ++++- data/es.mse-locale/locale | 16 +++++++- data/fr.mse-locale/locale | 9 ++++- data/it.mse-locale/locale | 19 ++++++--- data/jp.mse-locale/locale | 16 +++++++- data/ko.mse-locale/locale | 16 +++++++- data/pl.mse-locale/locale | 16 +++++++- data/pt-br.mse-locale/locale | 21 ++++++---- data/ru.mse-locale/locale | 16 +++++++- resource/tool/bold.png | Bin 113 -> 4607 bytes resource/tool/dark_bold.png | Bin 4241 -> 4623 bytes resource/tool/dark_card_link.png | Bin 0 -> 4703 bytes resource/tool/dark_italic.png | Bin 4237 -> 4568 bytes resource/tool/dark_reminder.png | Bin 4223 -> 4594 bytes resource/tool/dark_strikethrough.png | Bin 0 -> 4634 bytes resource/tool/dark_symbol.png | Bin 4380 -> 4606 bytes resource/tool/dark_underline.png | Bin 4318 -> 4578 bytes resource/tool/italic.png | Bin 132 -> 4562 bytes resource/tool/reminder.png | Bin 99 -> 4584 bytes resource/tool/strikethrough.png | Bin 0 -> 4622 bytes resource/tool/symbol.png | Bin 318 -> 4589 bytes resource/tool/underline.png | Bin 4305 -> 4572 bytes resource/win32_res.rc | 3 ++ src/data/font.cpp | 47 +++++++++++++--------- src/data/font.hpp | 3 +- src/gui/control/card_list.cpp | 2 +- src/gui/set/cards_panel.cpp | 15 ++++--- src/gui/set/set_info_panel.cpp | 11 ++++-- src/gui/value/text.cpp | 8 +++- src/render/text/element.cpp | 57 ++++++++++++++------------- src/script/functions/export.cpp | 14 ++++++- src/util/window_id.hpp | 1 + 36 files changed, 275 insertions(+), 87 deletions(-) create mode 100644 resource/tool/dark_card_link.png create mode 100644 resource/tool/dark_strikethrough.png create mode 100644 resource/tool/strikethrough.png diff --git a/data/ch-s.mse-locale/locale b/data/ch-s.mse-locale/locale index bdbaad4d..f24d2685 100644 --- a/data/ch-s.mse-locale/locale +++ b/data/ch-s.mse-locale/locale @@ -86,6 +86,8 @@ menu: bold: 粗体 Ctrl+B italic: 斜体 Ctrl+I underline: 强调 Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: 符号 Ctrl+M reminder text: 提示文本 Ctrl+R insert symbol: 插入符号 @@ -225,6 +227,8 @@ help: bold: 将所选文字设为粗体 italic: 将所选文字设为斜体 underline: 为选定的文本添加下划线 + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: 将所选文字改成符号 reminder text: 对选择的关键词显示提示文本 @@ -459,6 +463,8 @@ tooltip: bold: 粗体 italic: 斜体 underline: 强调 + #TODO: Localize + strikethrough: Strikethrough symbols: 系列符号 reminder text: 提示文本 @@ -989,9 +995,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -999,7 +1013,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/ch-t.mse-locale/locale b/data/ch-t.mse-locale/locale index 11503d1d..410f7eaf 100644 --- a/data/ch-t.mse-locale/locale +++ b/data/ch-t.mse-locale/locale @@ -86,6 +86,8 @@ menu: bold: 粗體 Ctrl+B italic: 斜體 Ctrl+I underline: 強調 Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: 符號 Ctrl+M reminder text: 提示文本 Ctrl+R insert symbol: 插入符號 @@ -225,6 +227,8 @@ help: bold: 將所選文字設為粗體 italic: 將所選文字設為斜體 underline: 為選定的文字新增底線 + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: 將所選文字改成符號 reminder text: 對選擇的關鍵詞顯示提示文本 @@ -457,6 +461,8 @@ tooltip: bold: 粗體 italic: 斜體 underline: 強調 + #TODO: Localize + strikethrough: Strikethrough symbols: 系列符號 reminder text: 提示文本 @@ -987,9 +993,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -997,7 +1011,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/da.mse-locale/locale b/data/da.mse-locale/locale index fdab988e..4d4cd093 100644 --- a/data/da.mse-locale/locale +++ b/data/da.mse-locale/locale @@ -90,6 +90,8 @@ menu: bold: &Fed Ctrl+B italic: &Kursiv Ctrl+I underline: &Understrege Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: &Symboler Ctrl+M reminder text: &Nøgleordspåmindelser Ctrl+R insert symbol: I&ndsæt Symbol @@ -231,6 +233,8 @@ help: bold: Gør den valgte tekst fed italic: Gør den valgte tekst kursiv underline: Gør den markerede tekst understreget + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: Teksten er som Magic-symboler reminder text: Viser huskeregler i teksten @@ -468,6 +472,8 @@ tooltip: bold: Fed italic: Kursiv underline: Understrege + #TODO: Localize + strikethrough: Strikethrough symbols: Symboler reminder text: Huskeregler @@ -1011,9 +1017,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -1021,7 +1035,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/de.mse-locale/locale b/data/de.mse-locale/locale index 6f5440ab..f9c8b1b5 100644 --- a/data/de.mse-locale/locale +++ b/data/de.mse-locale/locale @@ -81,6 +81,7 @@ menu: bold: &Fett Ctrl+B italic: &Kursiv Ctrl+I underline: Unterstreichen Ctrl+U + strikethrough: Durchgestrichen symbols: &Symbole Ctrl+M reminder text: Reminder-Text Ctrl+R insert symbol: Sy&mbol einfügen @@ -212,9 +213,10 @@ help: remove keyword: Löscht die markierte Fähigkeit # format menu - bold: Formatiert den Text Fett - italic: Formatiert den Text Kursiv - underline: Unterstreicht den ausgewählten Text + bold: Markierten Text fett formatieren + italic: Markierten Text kursiv formatieren + underline: Markierten Text unterstreichen + strikethrough: Markierten Text durchstreichen symbols: Formatiert den Text als Symbol reminder text: Zeige den Reminder-Text für die gewählte Fähigkeit an @@ -443,6 +445,7 @@ tooltip: bold: Fett italic: Krusiv underline: Unterstreichen + strikethrough: Durchstreichen symbols: Symbole reminder text: Reminder-Text @@ -943,16 +946,20 @@ error: # image import import not found: Datei nicht gefunden: '%s' can't import image without set: Vor dem Importieren muss zuerst eine Edition gespeichert oder geladen werden: '%s' + can't download image without set: Vor dem Herunterladen muss zuerst eine Edition gespeichert oder geladen werden: '%s' can't create file stream: Datei konnte nicht erstellt werden: '%s' can't write image to set: Bild konnte nicht ins Edition geschrieben werden: '%s' can't import image: Bild konnte nicht importiert werden: '%s' + can't download image: Bild konnte nicht heruntergeladen werden: '%s' + import not image: Dateipfad verweist nicht auf ein Bild: '%s' + download not image: URL verweist nicht auf ein Bild: '%s' # card creation no field with name: %s-Feld mit dem Namen '%s' konnte nicht gefunden werden. styling data not map: Der angegebene Wert für '%s_data' ist keine Zuordnungstabelle. styling data without stylesheet: Ein Wert für '%s_data' wurde angegeben, bevor ein Stil festgelegt wurde. cant set value: Der Kartenwert '%s' kann nicht festgelegt werden, da er nicht den richtigen Typ hat. - cant set image value: Bildwert kann nur mit einem relativen Dateinamen aus dem Paket oder mit der Funktion 'import_image' festgelegt werden (im Feld '%s'). + cant set image value: Bildwert kann nur mit einem relativen Dateinamen aus dem Paket oder mit die Funktionen 'import_image'/'download_image' festgelegt werden (im Feld '%s'). cant set symbol value: Symbolwert kann nur mit einem relativen Dateinamen aus dem Paket festgelegt werden (im Feld '%s'). add card csv file not found: Die CSV- oder TSV-Datei konnte nicht gefunden oder geladen werden. add card csv file malformed: Die CSV- oder TSV-Datei ist fehlerhaft. Die Zeile '%s' enthält nicht die gleiche Anzahl von Einträgen wie die erste Zeile. diff --git a/data/en.mse-locale/locale b/data/en.mse-locale/locale index 7302d616..0e49efd3 100644 --- a/data/en.mse-locale/locale +++ b/data/en.mse-locale/locale @@ -81,6 +81,7 @@ menu: bold: &Bold Ctrl+B italic: &Italic Ctrl+I underline: &Underline Ctrl+U + strikethrough: Strikethrough symbols: &Symbols Ctrl+M reminder text: &Reminder Text Ctrl+R insert symbol: I&nsert Symbol @@ -215,6 +216,7 @@ help: bold: Makes the selected text bold italic: Makes the selected text italic underline: Makes the selected text underlined + strikethrough: Makes the selected text struck through symbols: Draws the selected text with symbols reminder text: Show reminder text for the selected keyword @@ -444,6 +446,7 @@ tooltip: bold: Bold italic: Italic underline: Underline + strikethrough: Strikethrough symbols: Symbols reminder text: Reminder Text @@ -947,16 +950,20 @@ error: # image import import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + can't download image: Failed to download image: '%s' + import not image: Filepath does not point to an image: '%s' + download not image: URL does not point to an image: '%s' # card creation no field with name: Could not find %s field named '%s' styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/es.mse-locale/locale b/data/es.mse-locale/locale index 8b04b66f..f389319f 100644 --- a/data/es.mse-locale/locale +++ b/data/es.mse-locale/locale @@ -86,6 +86,8 @@ menu: bold: &Negrita Ctrl+B italic: &Cursiva Ctrl+I underline: &Subrayado Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: &Símbolos Ctrl+M reminder text: &Texto recordatorio Ctrl+R insert symbol: I&nsertar símbolo @@ -225,6 +227,8 @@ help: bold: Pone el texto seleccionado en negrita italic: Pone el texto seleccionado en cursiva underline: Pone el texto seleccionado en subrayado + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: Dibuja el texto seleccionado con símbolos reminder text: Muestra el texto recordatorio de la Palabra Clave seleccionada @@ -459,6 +463,8 @@ tooltip: bold: Negrita italic: Cursiva underline: Subrayado + #TODO: Localize + strikethrough: Strikethrough symbols: Símbolos reminder text: Texto recordatorio @@ -990,9 +996,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -1000,7 +1014,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/fr.mse-locale/locale b/data/fr.mse-locale/locale index 9baee0d8..c20f2100 100644 --- a/data/fr.mse-locale/locale +++ b/data/fr.mse-locale/locale @@ -81,6 +81,7 @@ menu: bold: &Gras Ctrl+B italic: &Italique Ctrl+I underline: Souligné Ctrl+U + strikethrough: Barré symbols: &Symboles Ctrl+M reminder text: &Texte de rappel Ctrl+R insert symbol: I&nsérer un Symbole @@ -215,6 +216,7 @@ help: bold: Mettre le texte sélectionné en gras italic: Mettre le texte sélectionné en italique underline: Souligner le texte sélectionné + strikethrough: Barrer le texte sélectionné symbols: Mettre le texte selectionné en symboles reminder text: Afficher le texte de rappel pour le Mot-clef sélectionné @@ -444,6 +446,7 @@ tooltip: bold: Gras italic: Italique underline: Souligné + strikethrough: Barré symbols: Symboles reminder text: Texte de rappel @@ -944,16 +947,20 @@ error: # image import import not found: Fichier non trouvé: '%s' can't import image without set: Vous devez d'abord sauver ou ouvrir un Set avant d'importer le fichier: '%s' + can't download image without set: Vous devez d'abord sauver ou ouvrir un Set avant de télécharger le fichier: '%s' can't create file stream: Échec de la création du fichier: '%s' can't write image to set: Échec de la sauvegarde de l'image dans le Set: '%s' can't import image: Échec de l'import de l'image: '%s' + can't download image: Échec du téléchargement de l'image: '%s' + import not image: Le chemin ne contient pas une image: '%s' + download not image: L'URL ne contient pas une image: '%s' # card creation no field with name: Impossible de trouver le champ de %s nommé '%s' styling data not map: La valeur donnée pour « %s_data » n'est pas un dictionnaire styling data without stylesheet: Valeur donnée pour « %s_data » avant la définition d'un Style cant set value: Impossible de définir la valeur de la carte '%s', son type est incorrect - cant set image value: On ne peut définir la valeur d'une image qu'avec un nom de fichier relatif depuis le package, ou avec la fonction import_image (dans le champ '%s') + cant set image value: On ne peut définir la valeur d'une image qu'avec un nom de fichier relatif depuis le package, ou avec les fonctions import_image/download_image (dans le champ '%s') cant set symbol value: On ne peut définir la valeur d'un symbol qu'avec un nom de fichier relatif depuis le package (dans le champ '%s') add card csv file not found: Impossible de trouver ou charger le fichier CSV ou TSV spécifié add card csv file malformed: Fichier CSV ou TSV malformé, la rangée '%s' n'a pas le même nombre d'entrées que la première rangée diff --git a/data/it.mse-locale/locale b/data/it.mse-locale/locale index e7f041c6..3b34506a 100644 --- a/data/it.mse-locale/locale +++ b/data/it.mse-locale/locale @@ -80,7 +80,8 @@ menu: format: F&ormato bold: &Grassetto Ctrl+B italic: &Corsivo Ctrl+I - underline: &Sottolineare Ctrl+U + underline: &Sottolineato Ctrl+U + strikethrough: Barrato symbols: &Simboli Ctrl+M reminder text: &Promemoria Ctrl+R insert symbol: I&nserisci Simbolo @@ -212,9 +213,10 @@ help: remove keyword: Cancella la parola-chiave selezionata # format menu - bold: Applica il grassetto al testo selezionato - italic: Applica il corsivo al testo selezionato - underline: Sottolinea il testo selezionato + bold: Imposta il testo selezionato in grassetto + italic: Imposta il testo selezionato in corsivo + underline: Imposta il testo selezionato sottolineato + strikethrough: Imposta il testo selezionato barrato symbols: Trasforma il testo selezionato in simboli reminder text: Mostra promemoria per la parola-chiave selezionata @@ -443,7 +445,8 @@ tooltip: # format toolbar bold: Grassetto italic: Corsivo - underline: Sottolineare + underline: Sottolineato + strikethrough: Barrato symbols: Simboli reminder text: Promemoria @@ -944,16 +947,20 @@ error: # image import import not found: File non trovato: '%s' can't import image without set: È necessario salvare o caricare un set prima di importare il file: '%s' + can't download image without set: È necessario salvare o caricare un set prima di scaricare il file: '%s' can't create file stream: Impossibile creare il file: '%s' can't write image to set: Impossibile scrivere l'immagine nel set: '%s' can't import image: Impossibile importare l'immagine: '%s' + can't download image: Impossibile scaricare l'immagine: '%s' + import not image: Il percorso del file non punta a un'immagine: '%s' + download not image: L'URL non punta a un'immagine: '%s' # card creation no field with name: Impossibile trovare il campo di %s denominato '%s' styling data not map: Il valore specificato per '%s_data' non è un array associativo styling data without stylesheet: Valore specificato per '%s_data' prima dell'impostazione di un stile cant set value: Impossibile impostare il valore della carta '%s', non è del tipo corretto - cant set image value: È possibile impostare il valore dell'immagine solo con un nome file relativo dall'interno del pacchetto, o con la funzione import_image, nel campo denominato '%s' + cant set image value: È possibile impostare il valore dell'immagine solo con un nome file relativo dall'interno del pacchetto, o con le funzioni import_image/download_image, nel campo denominato '%s' cant set symbol value: È possibile impostare il valore del simbolo solo con un nome file relativo dall'interno del pacchetto, nel campo denominato '%s' add card csv file not found: Impossibile trovare o caricare il file CSV o TSV add card csv file malformed: File CSV o TSV non valido, la riga '%s' non ha lo stesso numero di voci della prima riga diff --git a/data/jp.mse-locale/locale b/data/jp.mse-locale/locale index 99feaa2e..24c66937 100644 --- a/data/jp.mse-locale/locale +++ b/data/jp.mse-locale/locale @@ -86,6 +86,8 @@ menu: bold: &太字 Ctrl+B italic: &斜体 Ctrl+I underline: 下線 Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: &記号 Ctrl+M reminder text: &注釈文 Ctrl+R insert symbol: 記号の挿入 @@ -225,6 +227,8 @@ help: bold: 選択したテキストを太字(ボールド体)にします。 italic: 選択したテキストを斜体(イタリック体)にします。 underline: 選択したテキストに下線を付けます + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: 選択したテキストをマナ・シンボルなどのシンボルにします。 reminder text: 選ばれたキーワード能力のための注釈文を表示させます。 @@ -458,6 +462,8 @@ tooltip: bold: 太字 italic: 斜体 underline: 下線 + #TODO: Localize + strikethrough: Strikethrough symbols: シンボル reminder text: 注釈文 @@ -990,9 +996,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -1000,7 +1014,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/ko.mse-locale/locale b/data/ko.mse-locale/locale index 8c8013f8..38cfcc4b 100644 --- a/data/ko.mse-locale/locale +++ b/data/ko.mse-locale/locale @@ -86,6 +86,8 @@ menu: bold: &굵게 Ctrl+B italic: &기울임꼴 Ctrl+I underline: &밑줄 Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: &기호 Ctrl+M reminder text: 키워드 설명 Ctrl+R insert symbol: 기호 삽입 @@ -225,6 +227,8 @@ help: bold: 선택한 텍스트를 굵게 만듭니다. italic: 선택한 텍스트를 이탤릭체로 만듭니다. underline: 선택한 텍스트에 밑줄을 그어줍니다. + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: 선택한 텍스트를 기호로 변환 reminder text: 선택한 키워드에 대한 알림 텍스트 표시 @@ -464,6 +468,8 @@ tooltip: bold: 용감한 italic: 이탤릭체 underline: 밑줄 + #TODO: Localize + strikethrough: Strikethrough symbols: 기호 reminder text: 알림 텍스트 @@ -996,9 +1002,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -1006,7 +1020,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/pl.mse-locale/locale b/data/pl.mse-locale/locale index 88166590..900c7767 100644 --- a/data/pl.mse-locale/locale +++ b/data/pl.mse-locale/locale @@ -98,6 +98,8 @@ menu: italic: &Kursywa Ctrl+I #TODO: Localize underline: &Underline Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: &Symbole Ctrl+M reminder text: &Tekst przypomnienia Ctrl+R insert symbol: &Wstaw symbol @@ -246,6 +248,8 @@ help: italic: Pochyla zaznaczony tekst #TODO: Localize underline: Makes the selected text underlined + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: Rysuje zaznaczony tekst z symbolami reminder text: Pokazuj tekst przypomnienia dla wybranego słowa kluczowego @@ -494,6 +498,8 @@ tooltip: italic: Kursywa #TODO: Localize underline: Underline + #TODO: Localize + strikethrough: Strikethrough symbols: Symbole reminder text: Przypomnienie @@ -1046,9 +1052,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -1056,7 +1070,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/data/pt-br.mse-locale/locale b/data/pt-br.mse-locale/locale index a9038f00..d3093955 100644 --- a/data/pt-br.mse-locale/locale +++ b/data/pt-br.mse-locale/locale @@ -80,7 +80,8 @@ menu: format: F&ormatar bold: &Negrito Ctrl+B italic: &Italico Ctrl+I - underline: &Sublinhada Ctrl+U + underline: &Sublinhado Ctrl+U + strikethrough: Riscado symbols: &Simbolos Ctrl+M reminder text: &Texto Explicativo Ctrl+R insert symbol: I&nserir Símbolo @@ -212,9 +213,10 @@ help: remove keyword: Deleta a Palavra-Chave selecionada da lista. # format menu - bold: Faça o texto selecionado transformar-se em Negrito. - italic: Faça o texto selecionado transformar-se em Itálico. - underline: Torna o texto selecionado sublinhado + bold: Colocar o texto selecionado em negrito + italic: Colocar o texto selecionado em itálico + underline: Colocar o texto selecionado em sublinhado + strikethrough: Colocar o texto selecionado riscado symbols: Transforma uma parte do texto selecionada em simbolos. reminder text: Mostra ou oculta o Texto Explicativo de uma Palavra-Chave selecionado. @@ -444,7 +446,8 @@ tooltip: # format toolbar bold: Negrito italic: Itálico - underline: Sublinhada + underline: Sublinhado + strikethrough: Riscado symbols: Simbolo reminder text: Texto Explicativo @@ -944,17 +947,21 @@ error: # image import import not found: Arquivo não encontrado: '%s' - can't import image without set: É necessário salvar ou carregar uma Edição antes de importar o arquivo: '%s' + can't import image without set: É necessário primeiro salvar ou carregar uma Edição antes de importar o arquivo: '%s' + can't download image without set: É necessário primeiro salvar ou carregar uma Edição antes de baixar o arquivo: '%s' can't create file stream: Falha ao criar o arquivo: '%s' can't write image to set: Falha ao gravar a imagem na Edição: '%s' can't import image: Falha ao importar a imagem: '%s' + can't download image: Falha ao baixar a imagem: '%s' + import not image: O caminho do arquivo não aponta para uma imagem: '%s' + download not image: A URL não aponta para uma imagem: '%s' # card creation no field with name: Não foi possível encontrar o campo de %s chamado '%s' styling data not map: O valor fornecido para '%s_data' não é um vetor associativo styling data without stylesheet: Um valor foi fornecido para '%s_data' antes de um estilo ser definido cant set value: Não é possível definir o valor do cartão '%s', ele não é do tipo correto - cant set image value: É possível definir o valor da imagem apenas com um nome de arquivo relativo de dentro do pacote ou com a função import_image, no campo chamado '%s' + cant set image value: É possível definir o valor da imagem apenas com um nome de arquivo relativo de dentro do pacote ou com as funções import_image/download_image, no campo chamado '%s' cant set symbol value: É possível definir o valor do símbolo apenas com um nome de arquivo relativo de dentro do pacote, no campo chamado '%s' add card csv file not found: Não foi possível encontrar ou carregar o arquivo CSV ou TSV add card csv file malformed: Arquivo CSV ou TSV com formato incorreto, a linha '%s' não possui o mesmo número de entradas que a primeira linha diff --git a/data/ru.mse-locale/locale b/data/ru.mse-locale/locale index 943cc330..d2717a24 100644 --- a/data/ru.mse-locale/locale +++ b/data/ru.mse-locale/locale @@ -88,6 +88,8 @@ menu: italic: Курсив Ctrl+I #TODO: Localize underline: &Underline Ctrl+U + #TODO: Localize + strikethrough: Strikethrough symbols: Символ Ctrl+M reminder text: Текст напоминания Ctrl+R insert symbol: Вставить символ @@ -237,6 +239,8 @@ help: italic: Сделать выделенный текст курсивом #TODO: Localize underline: Makes the selected text underlined + #TODO: Localize + strikethrough: Makes the selected text struck through symbols: Отрисовать выделенный текст символами reminder text: Показать текст напоминания для выбранного ключевого слова @@ -482,6 +486,8 @@ tooltip: italic: Курсив #TODO: Localize underline: Underline + #TODO: Localize + strikethrough: Strikethrough symbols: Символ reminder text: Текст напоминания @@ -1039,9 +1045,17 @@ error: #TODO: Localize Section import not found: File not found: '%s' can't import image without set: Must first save or load a set file before importing file: '%s' + #TODO: Localize + can't download image without set: Must first save or load a set file before downloading file: '%s' can't create file stream: Failed to create file stream: '%s' can't write image to set: Failed to write image to set: '%s' can't import image: Failed to import image: '%s' + #TODO: Localize + can't download image: Failed to download image: '%s' + #TODO: Localize + import not image: Filepath does not point to an image: '%s' + #TODO: Localize + download not image: URL does not point to an image: '%s' # card creation #TODO: Localize Section @@ -1049,7 +1063,7 @@ error: styling data not map: Given value for '%s_data' is not a map styling data without stylesheet: Given value for '%s_data' before a stylesheet was set cant set value: Can not set card value '%s', it is not of the right type - cant set image value: Can only set image value with a relative filename from within the package, or with the import_image function, in field named '%s' + cant set image value: Can only set image value with a relative filename from within the package, or with the import_image/download_image functions, in field named '%s' cant set symbol value: Can only set symbol value with a relative filename from within the package, in field named '%s' add card csv file not found: Could not find or load the CSV or TSV file add card csv file malformed: CSV or TSV file malformed, row '%s' does not have the same number of entries as the first row diff --git a/resource/tool/bold.png b/resource/tool/bold.png index 4cbcf7c3ce92d6cc3190319e4713357fff5a76e3..6cadcb118b500c6e4559cade9bc8af612b071fa7 100644 GIT binary patch literal 4607 zcmeHKdsGzH86R2%#XueiA&N4t$x$P-Gdug59a%QOF0j#+4Xg-0g0nMscPH%bEV~0N znnvaLz(f&DVoo_U^|V$oRBHpRFIqsQRdY;;_K|3#U@+QKq9HUI6Ro|oywjZ1!)g7G z-7`Bg-~GPd_kF+nyZ7wfYF&~Q9W^})L6B&3wlNppACs=h5%4#u{{aJUr`FgC#9XEv z_4x${?*^z?;R7fL@(u(EUi4U3#GFJQ`S$v>h3T_WPL$lZXg=OvZOBVsy4Q4~)ZMdl z?CtLl6n&HVYrt&97Nf@`Pg(YI#TOe>ms0JIuP_dc_AM!~U3 zA79w+QNQ%hm%p9zWfH%xc75+Gn?4&P^oDu1nT{?$y5rEy=3U!kX_v0)S2b5so{msi^>5YG|HQ_N0b%5JB zMNw1`7y07j&n2XtBIYada=?>;FA|IHe9`xn{A^Rp2lsWA&wt3R&w099`N^RwZIx4t z{iHv&q-yEYo4&3Op4~n534?!C+1>4dkC_e5&D&Nw-lmMnyVe%mWbzfZs|h8>7u08; z{8GN4{xH?}n}~n>?e$i|`ltMNSMGZ%^NB^-v!fp;r#Jj8V(JUa)wzo~m!Z2mDR7VX zpXqt0vX%`iZKz2!e4TXf=3kP}Ek17E5Z?K~ektkGwl;aE_u}n4zxEu?K^`c5zbL)` zRXlOWyr!wqRK332({=S&*J6lo_AJ`mll@9v`u^~ipMI!~TVK0kwd>sH2by+V zh(xniVONmIEp5ghzx!AHW&KB&F10%8`}Yx&_V;%#-xr1;F-v)Lls^|BBy4WA`5E<-~uVzFLUV6mbZf*+tNxk^r8rXXKN%2K1y z6hG&nbB&pU5b#YebBUsl#_{sdjTo4dS{VXt*0k1e`Gz7;E$NNhC?oc}%ivu_CK-U1wsu+_p%WSa@M@SSn zd5QebQSjRY!L64`MWIsU@UR6gD2@>sBO?L`3j3lJBu!E_g_>3pG^t!bC}?7ozrgX1 zivQ*>$-7*whT3Y67i z6s4drg<5B)RBBF1*}>Ry|A+PzBsQW5)lhpWxU?Y-O=b%IAJaYHFlq;dv<%qb&I~tt ze0ZlH}|9;DkuHrW`CLcVPnl99I z#!}Btek!f=d_i*|ecE&M#5Lc#mC=vh+uVPx9>0EP$D9tNu;ZJK@N;C^jFT-5A2qj; zhvKI1H@}_UH+gO_`sJ45hDq(eHP&@whZ^5NwExTWI zH`J|ub<4f7uIX29^e$|lcl~~wAx3|y@bn65p|R%8L;YkspWYdLH=?L-{*~^zy`|Mz mzx-kA-4C1>ug=u}ahoCQjP*9LKwbgcLd>Qm#)IjrEB_625qRPN delta 83 zcmeybTsT3+*TU1qF{I*Fa)QLC2EpF{^Ig8qV9IDScqGWotmd`%fXiD01rffUCA%5~ neJ|Iqs&33YaQUD{LIMLr!(29j8%N~D8Gyjk)z4*}Q$iB}tSum* diff --git a/resource/tool/dark_bold.png b/resource/tool/dark_bold.png index 5f815bedafe8f0fc3b0936f5bf5edf51f33fe336..83c583c178a290ef5d0789d96152cec73a9a4504 100644 GIT binary patch delta 1165 zcmZXPX-ty`0EYV^Py|;61C~i_VRhQc*M3L8qjg=OD`G_ju^ggIz7wip$Ynqsg}Msj z1#~kLkFljw9MPafA?gA;T@~ESW?cTpdN_4#0O?9=R4zK&{rpCWW3C)u`6R>o?6P z65pKCBi@mBCr?5x%(CsCsrlhRcgp1)P3^@4ltX zx>e<9A^ng02z4P1BE|JHnihX+zp&zLzvFSl+)1Upsp4gSi{$x`cBmK7H~eODDn<3R z99uILUYi;${30+)9DNaz!z<&tS@|!*){eY*`C8HLJa=P4ZC!GcEsdA$MlF9dRuC1L z1bA@xv)qa#neFX?qV~FgAYESi#?f8*-BelTww-JEL!=>c@8;AYDj7BnigOJsu=ZK6 z6blYClMSbQpWe5(LJ7B%Pp&x!xERWS-OD%N&dJw?~40p zYc&HD)>nn;-b%)Y?nYi)YB_5x^X_<0yCe_V+7umM_PiN6k=-0Gc#m%Qsc_HHsiA0z*(WjN9El**X}} zAfyS#G$^D|VGAHw13?k~QmM2kdxK_K4r}I%4O9WAjX*pW&Hre7m2bIB&7%-Tums4{ zCe&n#Y2cEjOIWF z!x0w7c@(87&&Vi(5%9l%cTV7_mkoDN&2g^A`UQ;xSs2?T;3qaoTvUOi@q z*LhJhY<=PrfwGt=KOk=V!`_c#8{hb@3omQBJLmlD7O6ZE4EEaY2Po^ho_uWEg8N@> z)HMt~?PVS@-;G+H%<($oUI5Vj@_>XXz40;TuK=CG1$^5fV^YQeabv+~|NWI4c5W@N z-4a?;lD=j-px?A{@?Bz7@Z-43#O}1jc}-i%KZ645z8Si*KjRbge7Slw#kjgISDr!h z%Z$fN$$S4UeioE@y;X2&y?|x+tST)RNb@H9e#a-}Bc;E%#=^vaMUm6@YM-dhzo=7N Z=p9ft-|yb8^v^w+0%Oc_!*P9v^&iiY)g1r; delta 939 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 literal 0 HcmV?d00001 diff --git a/resource/tool/dark_italic.png b/resource/tool/dark_italic.png index 789c0d0246004b3b8ec75b18cf7ecf6b6142098e..b1ec46a1a21ae43b12e9a630c0cf98cd2d66a26f 100644 GIT binary patch delta 1108 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 y8ORb%%z$$xa0F(F0<-ArV37VEva0000%gUz! delta 898 zcmV-|1AYARBmW?fBmu#ZB_V$UAqf2U6g>h0Djdh{+N3w=@rw)FtZgT893B~wG+xg~ zx=mo_#HC5qTEW1|irs{OqaU1s4~_s%vE1q~8j=(jN5Qq=;KyRs!Nplu2UkH5`~YzmoD^N8#Q!CQ7BL#<}FMz%#=}Ha$-qCKgLw zEO#+08!GWMaYRuy$`^7jE1b7DtJOMd-;=*ERM1v3T&FpP1eTCQ3L<3GQ9%_JVzg?c zm`Kxp+`~WW_*3MP$yEU(#{z0lAvu2VKlt6PS)7`Gbdy4Hp!dbLKgNN;F3@V&_V=-E zw@v{6GjOGK{Iw=9`$>AEqeYH@!ENB;x}(W^z~v4w@}x_K-v9@Pz(k3%*FD}H?C$N~GwuF<0HcUw3?98L`)&U4B$sbsa9f4Bz`0)kdSGLL}Ib2#J+pSXPTJ~)A}EG zb9cMX`#itrd4BKjdFS>yOGa8m*rG55K_X1)#w_?dTl&lhh2OCQ4*~o+Q<{@2W`Ppa z?Q!vfokPVfZVu)A0*@g6YYt0Nn4GS-TJJ z?i$#>Cry?%^WfgkD^&|?R`u}7LUqKxrMuoc^0;%zy~vJtMAu*WYH&m1Wjs!s{pH-6 zOx>TG)}9@>x9r@nc7KOy-`Z-qhxV(hWheAeJ+JrBr;6KuOlS7)CXZj*|5@H%hb!~r zX#+cFkfC>ZZ#QqiQ4Ne|?v33@huDl{aHr-(aI{&i<#?43SC-=`tTweRQDDVm*{@rSFCV{Z_|(vG{d%*F9vVVO+B49ecQgb+BG(B}U%BQrG~;r}0qe4Ia=*h3 zg@+&siGDX=Hgh6sh`M!t74r3WfAi50_nhX?QJ}6&M80lh}$dG{M92 zbe3`DFa*3aV1=USrWJ~kk`j4|O78O56iU5buOLVTN#f80_ik~Dz>hnFaNE+;Bs0;|g>8ZZp5qa*b>+-CDAywf|(0^~#C2X2K@PAD7>#rO!Xm|6@$h70<^ z2yYG?Q$-f%b@@CDms-p@#UV;XA6H=y`%$Cszi2|G8 za0j9w*%LfPfgdAlLT%DYpq=rB!0=Jr3Em^U2b`go*-RTewuYL0!s%j zm7E3;B(K34lGWpCQm4g%MytgshP0~mBteiGejJp^=@o&K;Up*sE*Btg;3*x$GJsHygUIvqpIAAF& zPOucnib% zE#(LfE?Wc=pGufQuTp9CYOPwj9&=jHdAv}I5~`ArtAZ=i#?Y`GNG*_*3IPHUup2tX z!vWFd$#J>t223gnl_E!%&2XStAOa&0IS2~-qLm~~QaMTutx?k&)p9~f6XX0{tiW&i zZ{E`Qpb5cEPZzu}|CWF$I8)hNQSdH!YZn5;grb45paBzX!3&BxHc%(T3NA5)z-i;) z`7tcm5xejMV$ky{LZf4KIB!*PxSHUVxK#y}#jqNs6#y%z1>ZyWx_Ge!c(^1R3MceAq>3h$G)ZELN8cVC4Mt@pbhwVxL#^wq6s}i6 z)dLN~Q)&%hNqtZQqvZV$?I}roOcCml_7W7*fjF|635x&N?x4fC6BN=Cw84`Z9`uUQ zlYW>lSnH#F4a@9Nra;lDB$MKIimoZTCdI&{oTt<^Mc1Sln3VIBy8dr;g^fKca!&XM zuS9whM11SuQ)H-hb(#@*D7}xocl1SQndwg7=tYq5dD15YsjON6jWW?>PL+K*D<)E_ zb^i9k&!FjZlQAiW`perNDp&1FnmxVq6Ex3cv}dKpJ9aIzw6;AqBUyfXe!L?)H@9QP zoHvZ$%*MjBhp?ZfXT`m`C%fi;%J#<==5}nmaPpM~m)1IGCtlSRv8nNN#?9O2lU*`h zOkHi(FEj-+Hs6yr}NAhChJ{ zn|)2^R{hIYeKEa!ZLEIVwr9S0r{L=Q+io!B8@_4JJ9lYl`k{}$s6TtR<^t>(F{Nf0 J>yn=?`#14NhD`tf literal 0 HcmV?d00001 diff --git a/resource/tool/dark_symbol.png b/resource/tool/dark_symbol.png index 24ae74ec2b42042f7a32ee89f478f5847e49d4d5..4b9a2d15a533bffe2ef97f6049766d4e0ce04eb9 100644 GIT binary patch delta 1147 zcmZXPYfKXd0LNP>6i_=Kp%g+amf}L-;NI6eQ=wQZ9U!7WI)uSpuLYtYFP~)=Q1s>l z!3x_54xKn*6~e3rhGe2)M(|ZpHUtI~8Qau>%rH6`JT1U_Oxit_TTm<=i2bIYF`QL;h1etbv(Kmcjz1D`|;?a#Kyt! z6R!Q<{(pEY&ugm=v_UN!Yy?o@;Jx z;Ii$vb!V)Vb8Z8wpq(}LLuVe(!Ef$g3r#bbBI3UI;Ijx$w!bj^tybkD(6A7y(T*Iu zetvh^;nH^lkJYnI1CEa+<=}By#pD|E#tN};9anH?OUl*b;@seb;F8jw#EjmXV?Ci6 zJ>_++3XdiiVVKw|3VF~*wR)6{2)XMcb-&93-iHQW<)%hjrIQoNi6MT3^>(~1R8(JW zU{AY4sX9;LCo94ws!lKv+7@f@%75jXI`e93I;7jy{&1cw`REZ_6e}-7%)c~q1eZ<# zXJ4<+eIULgbcbR!zW8aok z==r9dZG5PNq2-!tE3wZ!rkkerLV=cmQsjP`)d zy0NUtku@^fX6-U{{3-(9)(o|1}o6q%6a65`h&YhCl>?S;k$m!yuS~ z74Z;8p%8^2K_Endpv=S1&u?E=4i&SD%{1;;(**{l3|^E_|65xuu1Dph5dkrRB>*FX z7yuMBLI8s-rs-J>VrZH%;52JlFWf4GAqs|Np_W!xMoywAgX{GyK)~c8#Lyr>GB^Vm zAaF67AyFe^ScJ492nPOph}kNI8EyifVo9-uzZ^0z^%VvBKaj3X?2+e zP29UY#&3QS#w%OkR;`X4>J_X$Rk`X0u2W38Z!kUA^u+W$ojqP>t-JTY8~hxtK(Xw# zJ2D5SefR;x=LNF88KiyR;brCK>O!}d!`w`GU;3wzof;K$bJ_Hq%u6!-!nt?P3wPai zLH!)JEvTvOU{*-wRKvq_JW7dRZGP@C0N400D$)LqkwWLqi~Na&Km7 zY-Iodc$|HaJxIeq9K~N#rBy0|b`WvMP@UREMI5DyMX*rX3avVrT>1q~8j=(jN5Qq= z;KyRs!Nplu2UkH5`~ZJ(7n~Gbq{ROvg%&X$9QWhhy~o`6^Clb#w-LQx^h-Wq}o%23% zn3W}k_?$Ru&;^Mfxh}i>#<}FMz%#=}Ha$-qCKgLwEO#+08!CVCG;u^xHOd!qE-Re3 zIIGniARSlF3y8BgX=2 zP$4;f@IUz7ty!F!bdy4Hp!dbLKgNN;F3@V&_V=-Ew@v{6GjOGK{Iw=9`$>AEqeYH@ z!ENB;x}(W^z~w^@F!H2JhU7?onnJM%yr0oG<$>W_pnuKnt-X)a2OvvbE#CkKhrmRM zve!M{9qjJy-!tw0egLD0a=OAv<5~a!4R*7J0!IQQVKO*4HDO|8EoM14V=Xi_G&3z? zIb<*`VKFr`FlA#nG&D9glko%}BsDNGVl+5qWi4hnF=Z_@GGaI_IAvpGEoC$~WHDke zVqr32HaDBxE-@GBY_hW-VklFkvk;IW{*fVKiYlEoL-gVKg&iGiEYjHgx88-uf<7~z=t2dAx+3>=gt{sMyWqdk|dO6$yMh4 zs_6T^3WDHr$lF!XbzS9o-tPpC<0xYcFZa!|3=yI4d%CWpZClRs1Z&_p4nA4el{8JC z3yY#)o@c(Ju4`^xKaOKW4+qMCqwZ13W_nl!F wzQSP`vMdYM+SdYO3{BHK4T=a+6ruhXA0p1KRJysG5&!@I07*qoM6N<$f-eTfb^rhX diff --git a/resource/tool/dark_underline.png b/resource/tool/dark_underline.png index 85cd8fdb72e4b929e6cf395cb4cd78222e02dbae..c9b2653aae5f67bb3b30fbfdd02fc4c7ec8b77f5 100644 GIT binary patch delta 1114 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 delta 115 zcmcbl+`>3PB8Q2Yfq@}uuJ|V)#Tnoe;(Fk~0U)!Xp<$Px(S0C`u_VYZn8D%MjWi%f z)6>N~#4G5b^1&N`D$zprrk=dP@{T^99WWn9&>Iw_RM5}LS-Y!%2%bkH; zNo|Y~LK;K-XzY--RdAS@frELJaMZ6XXf@Dn$>-& z?$-$Yr8DCw?zBldSODmpi?%RG z<>uNfxw#`5p*-r>Z#9}f$xiw0>cYIONzw&1!g1TGgRds7O)pB{Sk+ZrdhS?nm$I~L z%kIPa*!|O`SxJpD#i_lS8q~Y-!fz%c=a= zT;N3SyBoJMQRNL=QnK!)e%<$n^o}JhmKPuC9CCE0{^jUVMW^?|KkhbpK3FChQu+6k z4-O;|cP*98jd`^jE_-^eeAsy6`J-RRi2J)2SNEEKQn&C|j~w~M8C~Lrt$e-}&s`D2YT?#Gwu=u`Zz*pGN^$ zp93mF9zSY5i6kQ{`=79>%57vnW=|v9O9zW|Ws$ZCI`^05P>ftswBc5LZFT zGh?xg0PCa+O!>nQ=*=iE6$C%6R0e}VMNp;i1zbwfU@#~NN=Z>T(!lw3UIBz~FP|nt zL@-Q{X9ApG;Cx<8!~_msxnPvb(Ktj>3ESVHOY{$`J4?Nd=+wc$DKUcp zfeZ)qtrol;4XUyL^1ku_1M@1NS4bNV!7`)v{_=o3oDRzDsXEJit{AjTv%HxQi20L=jB zWqm<@Y{|}fV4(m+K1t-lpi-&SD$1bI>vUsE#W295UKCMDLZQ-zSH!~5C>=yC5IYqC zgykq3IyV4;;0xG&KDSXW28D^1qsvw_P%IFD2?!8@qP%F5qA9(d)X-`JO_1{mk|xIK z`&iDo?!Re^7FAUZ`xI~Ff8NruGlTOaM+jwCUD^9o)fneiR*ijvgTCnKR$uvqh? z*WyxSU*2EkPbY4(w#}PW`~K|C>u+Yi=a|mUYvQZl zexbOfjcocNZO1+=&7BahO@1TVcw<_ysdi;m)yL;$+b+)vRa<)a>AR{k%UXXXymBO4 z+TT-j@6LtO@p)I`VlTEokwTc&$vw6?ZgQzQ`LmClN!M-`d3#lZvmUGaY<@zuJ4!&& OODuUyP5T$F+4wKE2yyTL delta 69 zcmaE%oIF9rUdz+PF{I*Fa)LzJ1AEo1f0L61g_rs*>ty^taZX3KudO&wv%``sC#gjY Y3`&!D|I6QXD`NlxPgg&ebxsLQ0IX#hUjP6A diff --git a/resource/tool/strikethrough.png b/resource/tool/strikethrough.png new file mode 100644 index 0000000000000000000000000000000000000000..d853b6da7fcdbf103ac5a47412b5b150e49c7e8e GIT binary patch literal 4622 zcmeHKeNYtV8DAO&fd!j_)2|;N^U&C11#40;tdL zwR0|j3hR9U1wqb^Ai);5IVI*CI{j4lR_*)`o;k~Rv>5+&W?vJ+t^A$-Y_Y3-OZlDd zS1U5`sznD2EJq_(9oqYXDq&e&OS6HiQ3<>BKYa7dPtUyn>tkDQCHELIb6gj`#ti#C zuG;L~_rA>9F%Y>?qCBy|+=F(>4@A^|o4D)f7mv&D*PImgT@C|m;rynJFT8VF`iTW7iV{~QmQ`HIbAEcJ{R-~9vg2TbI_mh; zh~!zdG15Q2M>j;3wMJB)YCYH?`N?B^QGMlCtqt)HI<=iQ!%}N6SnBYYBYOe6>uItu ze`ds**cWG~d_XKBbF;wnd{UaXn+Y_flK$+y4cKW8>Owrnr3?^Ej%f3+dMlgT43w`UjWvK1Gf|601Z z`dxMH$?z|4>~12=*YZvj9G;W@Y^Gs;bSyRZ$bs-_*)J(_mb1>}wzhcw5$FG?{b<=v zTUhat9dXHh@sB$HoOo&ZDdXlTmj|rZqdX1%Z zwfd?}ZSL0F@6~>^q4|p#;-3dIx3n8x-JAORDUJI-QO(@6^X0Y9OZSh}y?!+U%~*}y zLLy#k*6lg*nf9jkFW0X(Iq3d=grfc3mtQ&@h9EI3IViAv({kG8bxRr6YX#Dv+Xt10 zAW6wVA7fhw1k?%~oJT8paH>gya;#SJbA^d8`O<)sGnD#4Zs`h(t#qAD!%C8uMkNJl z2;c?+g9hC$4^IcRk`OKpe~V^Zf`(j#by`Wj$&99X{Q#9qKYytmkI1Nsu+5fa8iu(pwSU$Ng6YKOJqzy;jUm4{i$aVay5Ci6&yNP&ZM`$AEW z>~Wp~XCEbNTy5e?sGYHe!0-{=ao)qdhn%68$wceCwqmh7qfRRk^V6)?#<6thCkYe` zLD?0Ujbb&JoKh(XwspKj(rY0x` zlan$HrUq69v&!rwVYjggrGgv-k>%&0DjC<em4WRlXEi;fcrd-P!5rBI>l_%N+>BYYB9SQ!43o98Q?suH^7fB zSvWVy6&R6E5~k3|WGb~>u2RSpvQeiz;OC(hMO2cI%9NoMabsxM4y2Y5l?nkucGwM_ z<_C=6^;^7NmsTPcg^H0Q%O-fBSVmxUi~t}g?29HTno?Ux1+7rh6t$QjX=04Om*wp1 z|C_gXe9)x9O*e2n%)dTl8az|EplI-J@YcnJ4ik!ojs?xw23z2n62OM)gjj=1HYek8 z060H}1Uqc!zDEoiyNpn%SQTcs$^a%O>?G6yR2Gy0X=NBIP%_^^=e>3z!1zIm1M&#D zf&vY3g)SW0szu|g2{?hc50Em9P-BF~Ldj@~gp^6}C*K~Uw#xx22N)b-N=y!vP@ozG z>=9_JR)vx!7}h$z-2b6HlEOw6As=op2^R%M_{gLm z;!B*VPw+J)vnQAVLQf`{5WkajP0}?X1}5Y@sjf-7Cd9ymoF~=wf1@jE^jQ&j;2*pI zd=mUw!=A_RDKgxenV~}l#COfy zPQ3Jwbo&j|0@AFHT{#a5)hRr}49x$+)lbL+OgsH)@9(J|7p z)ZGScxh^HsR=&04jSheKYfYuGk6Qf?`qjNlZfSbgRF%Kn*cu_5Ui4;ZUwBjg?U}2$ zlPMZ~O~uT4$_7cx!b6db8SgBpW_=0m*-Pp-Pklu{=cy!*vHrPx&b9MWG{R(8NOExut~(IU!gmmy0+}!ENg;y literal 0 HcmV?d00001 diff --git a/resource/tool/symbol.png b/resource/tool/symbol.png index 2ea3275cee633b4b0be34cd266de0e7df78a56dd..6f5ce8462430a809a467bb83410207c4e99cc874 100644 GIT binary patch literal 4589 zcmeHKeN+_J6f6^+1S(2FgqXnIa3w{mXB3eR#+)Y47{CryG+qaRwJgq?DSJdFkw|8m@{NV)K1;l&N2A}QD|Z08eOO~H5eh*- z?)7=>yc5cWRbD8ELEbKr1ix@uGGmX)rysicTy13JkJCSPA3XkTd0RKzZgwqD#Hu*s z(cznGj&?}%X0|?ep;eW<_vs7Kt7G!-#pNLrtwztS8-&|*SViHt=l;3%(f=alFs7JvJ!3U2OrHanEKu?Xj%Q%ef_0z z`QYq4S@QD(WZl)4diC_i-`Oe}H`UD!{O#nAj$~~e7L3=YonE?ZZZ(^HSt5y8$7g3- zOxf9^386H$)HWOPKbW8RVOdd5bG-B?4Z?3MEA~DgzcO`cYW@1&;)>6X4D{j^y)W(9 zua|Y+C(VfOh*f@afY~prKPPQCcy7nv6+iqIPubgW`P}}bZw3v6XCtyYKC*Vr0_xE=@nA^7{6yv*cYWdCxi6nL@j~cARyog~vE+ybR zHmD4`yr}aelC+GV7qFF3klUbxcN-Mn9PC!edCs8tsm4s0z1gsW&#&>pqMF54wx*J$ zIYmagEG@_&02dU1Jm_+|{Y=oH2;nm5Srp?6c}PX5G$=~U7J0VE2jyy|T1j9zLB5(& zq|4-KKF-b*8goY=(3?R~AqZXu#{+?YGN4j=d=8wXX&NUeoT4zKf%#Xt1rWsC{>Ma! zFoqHOSs(8ec#m5yVgj3|N-!uCXk9)UpUZ1DkHNeBBP<|3@F4Kwq>{j0E_}R&U&yIO zAR_^NuZ7==<`gf4eovK;g*nyGEj%_Jf@8<*y;VMEC>@T)p%c20svmhJC%DWrnJr@$ zA_WfKuVXMUOOh$u3^v`e} zmgktzBMCKtpzIoqr8pW>Q#vgMG+HgDXDOSCrU-)4*vCPc+hSFO}4WlL*QvU=&GQ>E2 z569bA{WooKeB^22qUZB|YCo!7}br#EMNE-k)s0H6a_j~L@0Qg|0 z1M!HsLJbjI`N3^njqJoJ@+}DY~ZUniK<*Ql9FrDY_=bz@(I?y6gW&m+bCY z5xUVIyZ|~0rth2f8ahQr+ZN^-C3nQ{w)c0oAju4G{xZKr5)&t05t7y|2}mdvOy(Tv zSNA8zraWA|{TT}q?Kc@St@_`#H9jR+*+7TDEd-(q5x~BH^GG*z>YrncSa`uS#X#GF;|N$t^?p8U!giPN;3s~>%P-_?!3 z6r?ZrtQeXWjNJWoLP;cBuJFhj&puTTYrm@}30BKK_Y{`znWZCQ4H z!Qs#G#HVZ4{tWM|8H#qc=N@i(MOl_U++>|QRBBoqH*5Kt$1_|p57hnYYTKH?Qz==x V(ygy1_M#jlrkusb&aCqKe*?!1ZGiv) delta 291 zcmV+;0o?xWBfbKVB!3BTNLh0L01FZT01FZU(%pXi00009bVXQnLvL+uWo~o;0EsG% z1^@s6+et)0RCt`lk+BMcFc^d*=q`w>AUcXT2!h}!f)AqL>g24OPWl4Qj*7c)b|pWw zv_+d%hYm+BA^*o+!nSQ=S9EDu2jXmUSKw$A2*-Ny0qO=K!{CgE5A> zt`Ac@Oxw2beIG#(APhr9Q3P3*37{wntz5dUqw6~CCMe62I^Qq9D@{|Z>ng4=31R7Bmu>dB_Dr54#OY}yYq@YA&CQo=g_s2_Jcitp`=wi%@VE?BR3>% zpZ6<0281NG@Z$CltBaDf}#Tr2^f*{l22Rt`u5iBO^9q@ zkTX!`02n7HbT`CVV1AL2T@Q39I41Fh{M*xk^ab1JSr}!d>@|_?A%8`Y76&_sbjVO$ zw2KyTELALmh0<1N)xqS_FKE(`q_{W=t_24_7OM^}&bm6d3WDGVh`ZpV=prTlFDbN$ z@!+^0@9sVB-T^|Z##FN}4yc-CWReLnUsx3fUJ*bTLBudAF;h=v7jy6&U-$6w^)AY@ zywCkPf=bb3fKMcjGk@K%h&PC5H!Yp>K5>XuB!&2#c*>v)5Yb{2J76Dzc5hLR?YXf{|kZb*PXWKlmT~?$#{LOn_H7#OhWi>5hHZ^8qWH&T4Wn^QM zF9oO$Ha0mkGBh$WH90ggGB%Ut1#LeuGCDFiR53L=Gc!6gF)J`JIxsLI3LqdLcx`Yx zO>bmrW_d(mbY(pvGB7eVIx#XjGB{K*H99jhIy5mWFfp@{1_}X_yarq(HfCXAWHmTB zEi`2`Vl6abVK^;0GBPtQGB;y6V>V(rWHw|slRO7W4KXq;GB{K*H99jhIyAGA2Wbcd ze&cMilm8Dfe+(QBAu4|w6!QQ80H;YrK~y-)?b1&Q!9g4a@DD#0Ha3nS2XO#5a0qUp z9K;Q5$<9I~#f}4zDBb=``)~nX&ygB57%hzPzzcehe%syh17$gk0hm) zFhe^Y=2NC=;5p7IZI4ytc^U9A{sGSc$H2u5f8oXNNj#t!3N*;j)~LqAbXhK_pn(%c z;lwh!*rN09SqYjLVuJ<7XoWWZ7P-LHFZWOG0oQLYa05ngBP>P`BIN)8002ovPDHLk FV1n@urT+i` delta 876 zcmV-y1C#vRBhev{BmuyYB_Ds=4Z|P|{Pz?c!7qpzhcv0w4LW{J>{OxcNgU^g4rAC~ z&j;KFm=v@uR$Hy;(58*M3&TJ^m{1SS08cUH;ZtBwiQf{T)$Bj>gp(6>SLI@4_bjY) zp=tWtml4M$W1^wAG-_!i90f{)9^b;+Y`K16-EoG+fkA5X*gx^&+uMJNzaz}Mkf5_j zjR9nw0@7XB!EH2pLwBa&H1mc0+tUen1J@>54NDMfmjD0(glR)VP)S2WAaHVTW@&6? z004NLeUUv#!$2IxUsI)3DuQ+pamY}e+C@birHVzcP}&NuI+$Gg1x*@~6cNR+(z{%mJ!q8R|p zC58B$IBL)Zi66NxyZpwvDJc?(N?*?f!lMqlj|4!b#&=000ekvxWkS0wg$NV>eK z{5gaZKL~*@$x9&N*R;hI9ja8@hhM&e)X|tV#VMQP54O8S^aecCp90R2H_2b)_zrZA z78fkSTg3^Nxq0*iQecJ&A`aN0`TFbT4Z5Cl1L_WTDidUxm6Qko0000& fontFil bool Font::update(Context& ctx) { bool changes = false; - changes |= name .update(ctx); - changes |= italic_name .update(ctx); - changes |= size .update(ctx); - changes |= weight .update(ctx); - changes |= style .update(ctx); - changes |= underline .update(ctx); - changes |= color .update(ctx); + changes |= name .update(ctx); + changes |= italic_name .update(ctx); + changes |= size .update(ctx); + changes |= weight .update(ctx); + changes |= style .update(ctx); + changes |= underline .update(ctx); + changes |= strikethrough .update(ctx); + changes |= color .update(ctx); changes |= shadow_color .update(ctx); changes |= shadow_displacement_x.update(ctx); changes |= shadow_displacement_y.update(ctx); @@ -100,20 +102,21 @@ bool Font::update(Context& ctx) { return changes; } void Font::initDependencies(Context& ctx, const Dependency& dep) const { - name .initDependencies(ctx, dep); - italic_name .initDependencies(ctx, dep); - size .initDependencies(ctx, dep); - weight .initDependencies(ctx, dep); - style .initDependencies(ctx, dep); - underline .initDependencies(ctx, dep); - color .initDependencies(ctx, dep); + name .initDependencies(ctx, dep); + italic_name .initDependencies(ctx, dep); + size .initDependencies(ctx, dep); + weight .initDependencies(ctx, dep); + style .initDependencies(ctx, dep); + underline .initDependencies(ctx, dep); + strikethrough .initDependencies(ctx, dep); + color .initDependencies(ctx, dep); shadow_color .initDependencies(ctx, dep); shadow_displacement_x.initDependencies(ctx, dep); shadow_displacement_y.initDependencies(ctx, dep); shadow_blur .initDependencies(ctx, dep); } -FontP Font::make(int add_flags, bool add_underline, String const* other_family, Color const* other_color, double const* other_size) const { +FontP Font::make(int add_flags, bool add_underline, bool add_strikethrough, String const* other_family, Color const* other_color, double const* other_size) const { FontP f(new Font(*this)); f->flags |= add_flags; if (add_flags & FONT_CODE_STRING) { @@ -134,6 +137,9 @@ FontP Font::make(int add_flags, bool add_underline, String const* other_family, if (add_underline) { f->underline = true; } + if (add_strikethrough) { + f->strikethrough = true; + } if (other_color) { f->color = *other_color; } @@ -156,13 +162,16 @@ wxFont Font::toWxFont(double scale) const { if (flags & FONT_CODE) { if (size_i < 2) { - return wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, weight_i, underline(), _("Courier New")); + font = wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, weight_i, underline(), _("Courier New")); + if (strikethrough()) font.MakeStrikethrough(); + return font; } else { font = wxFont(size_i, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, weight_i, underline(), _("Courier New")); } } else if (name().empty()) { font = *wxNORMAL_FONT; - font.SetPointSize(size > 1 ? size_i : int(scale * font.GetPointSize())); + font.SetPointSize(size > 1 ? size_i : int(scale * font.GetPointSize())); + if (strikethrough()) font.MakeStrikethrough(); return font; } else if (flags & FONT_ITALIC && !italic_name().empty()) { font = wxFont(size_i, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, weight_i, underline(), italic_name()); @@ -179,7 +188,8 @@ wxFont Font::toWxFont(double scale) const { // make it independent of screen dpi, always use 96 dpi // TODO: do something more sensible, and more portable font.SetPixelSize(wxSize(0, -(int)(scale*size*96.0/72.0 + 0.5) )); - #endif + #endif + if (strikethrough()) font.MakeStrikethrough(); return font; } @@ -189,6 +199,7 @@ IMPLEMENT_REFLECTION_NO_SCRIPT(Font) { REFLECT(weight); REFLECT(style); REFLECT(underline); + REFLECT(strikethrough); REFLECT(italic_name); REFLECT(color); REFLECT(scale_down_to); diff --git a/src/data/font.hpp b/src/data/font.hpp index 6fa6ddc7..3ac836c9 100644 --- a/src/data/font.hpp +++ b/src/data/font.hpp @@ -38,6 +38,7 @@ public: Scriptable size; ///< Size of the font Scriptable weight, style; ///< Weight and style of the font (bold/italic) Scriptable underline; ///< Underlined? + Scriptable strikethrough; ///< Struck through? double scale_down_to; ///< Smallest size to scale down to double max_stretch; ///< How much should the font be stretched before scaling down? Scriptable color; ///< Color to use @@ -67,7 +68,7 @@ public: } /// Add style to a font, and optionally change the font family, color and size - FontP make(int add_flags, bool add_underline, String const* other_family, Color const* other_color, double const* other_size) const; + FontP make(int add_flags, bool add_underline, bool add_strikethrough, String const* other_family, Color const* other_color, double const* other_size) const; /// Convert this font to a wxFont wxFont toWxFont(double scale) const; diff --git a/src/gui/control/card_list.cpp b/src/gui/control/card_list.cpp index b9f91e80..b068d6b4 100644 --- a/src/gui/control/card_list.cpp +++ b/src/gui/control/card_list.cpp @@ -650,7 +650,7 @@ void CardListBase::onContextMenu(wxContextMenuEvent&) { m.AppendSeparator(); add_menu_item_tr(&m, ID_CARD_ADD, "card_add", "add card"); add_menu_item_tr(&m, ID_CARD_REMOVE, "card_del", "remove card"); - add_menu_item_tr(&m, ID_CARD_LINK, "card_link", "link card"); + add_menu_item_tr(&m, ID_CARD_LINK, settings.darkModePrefix() + "card_link", "link card"); PopupMenu(&m); } } diff --git a/src/gui/set/cards_panel.cpp b/src/gui/set/cards_panel.cpp index 6763c4d7..d2d1f684 100644 --- a/src/gui/set/cards_panel.cpp +++ b/src/gui/set/cards_panel.cpp @@ -136,7 +136,7 @@ CardsPanel::CardsPanel(Window* parent, int id) add_menu_item(menuCard, ID_CARD_ADD_JSON, "card_add_multiple", _MENU_("add card json") + _(" "), _HELP_("add card json")); add_menu_item_tr(menuCard, ID_CARD_ADD, "card_add", "add_card"); add_menu_item(menuCard, ID_CARD_REMOVE, "card_del", _MENU_("remove card")+_(" "), _HELP_("remove card")); - add_menu_item(menuCard, ID_CARD_LINK, "card_link", _MENU_("link card") + _(" "), _HELP_("link card")); + add_menu_item(menuCard, ID_CARD_LINK, settings.darkModePrefix() + "card_link", _MENU_("link card") + _(" "), _HELP_("link card")); add_menu_item(menuCard, ID_CARD_AND_LINK_COPY, "card_copy", _MENU_("copy card and links") + _(" "), _HELP_("copy card and links")); add_menu_item(menuCard, ID_CARD_BULK, "card_modify_multiple", _MENU_("bulk modify") + _(" "), _HELP_("bulk modify")); menuCard->AppendSeparator(); @@ -153,7 +153,8 @@ CardsPanel::CardsPanel(Window* parent, int id) menuFormat = new wxMenu(); add_menu_item_tr(menuFormat, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", wxITEM_CHECK); add_menu_item_tr(menuFormat, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_STRIKETHROUGH, settings.darkModePrefix() + "strikethrough", "strikethrough", wxITEM_CHECK); add_menu_item_tr(menuFormat, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", wxITEM_CHECK); add_menu_item_tr(menuFormat, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", wxITEM_CHECK); menuFormat->AppendSeparator(); @@ -286,14 +287,15 @@ void CardsPanel::initUI(wxToolBar* tb, wxMenuBar* mb) { // Toolbar add_tool_tr(tb, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", false, wxITEM_CHECK); add_tool_tr(tb, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_STRIKETHROUGH, settings.darkModePrefix() + "strikethrough", "strikethrough", false, wxITEM_CHECK); add_tool_tr(tb, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", false, wxITEM_CHECK); add_tool_tr(tb, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", false, wxITEM_CHECK); tb->AddSeparator(); toolAddCard = add_tool_tr(tb, ID_CARD_ADD, "card_add", "add_card", false, wxITEM_DROPDOWN); tb->SetDropdownMenu(ID_CARD_ADD, makeAddCardsSubmenu(true)); add_tool_tr(tb, ID_CARD_REMOVE, "card_del", "remove_card"); - add_tool_tr(tb, ID_CARD_LINK, "card_link", "link_card"); + add_tool_tr(tb, ID_CARD_LINK, settings.darkModePrefix() + "card_link", "link_card"); tb->AddSeparator(); add_tool_tr(tb, ID_CARD_ROTATE, "card_rotate", "rotate_card", false, wxITEM_DROPDOWN); auto menuRotate = new wxMenu(); @@ -322,6 +324,7 @@ void CardsPanel::destroyUI(wxToolBar* tb, wxMenuBar* mb) { tb->DeleteTool(ID_FORMAT_BOLD); tb->DeleteTool(ID_FORMAT_ITALIC); tb->DeleteTool(ID_FORMAT_UNDERLINE); + tb->DeleteTool(ID_FORMAT_STRIKETHROUGH); tb->DeleteTool(ID_FORMAT_SYMBOL); tb->DeleteTool(ID_FORMAT_REMINDER); tb->DeleteTool(ID_CARD_ADD); @@ -364,7 +367,7 @@ void CardsPanel::onUpdateUI(wxUpdateUIEvent& ev) { case ID_CARD_REMOVE: ev.Enable(card_list->canDelete()); break; case ID_CARD_LINK: ev.Enable(card_list->canLink()); break; case ID_CARD_AND_LINK_COPY: ev.Enable(card_list->canCopy()); break; - case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { + case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_STRIKETHROUGH: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { if (focused_control(this) == ID_EDITOR) { ev.Enable(editor->canFormat(ev.GetId())); ev.Check (editor->hasFormat(ev.GetId())); @@ -472,7 +475,7 @@ void CardsPanel::onCommand(int id) { case ID_SELECT_COLUMNS: { card_list->selectColumns(); } - case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { + case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_STRIKETHROUGH: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { if (focused_control(this) == ID_EDITOR) { editor->doFormat(id); } diff --git a/src/gui/set/set_info_panel.cpp b/src/gui/set/set_info_panel.cpp index 87bd6dac..74d550a3 100644 --- a/src/gui/set/set_info_panel.cpp +++ b/src/gui/set/set_info_panel.cpp @@ -36,7 +36,8 @@ void SetInfoPanel::initUI(wxToolBar* tb, wxMenuBar* mb) { // Toolbar add_tool_tr(tb, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", false, wxITEM_CHECK); add_tool_tr(tb, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_STRIKETHROUGH, settings.darkModePrefix() + "strikethrough", "strikethrough", false, wxITEM_CHECK); add_tool_tr(tb, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", false, wxITEM_CHECK); add_tool_tr(tb, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", false, wxITEM_CHECK); tb->Realize(); @@ -44,7 +45,8 @@ void SetInfoPanel::initUI(wxToolBar* tb, wxMenuBar* mb) { auto menuFormat = new wxMenu(); add_menu_item_tr(menuFormat, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", wxITEM_CHECK); add_menu_item_tr(menuFormat, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_STRIKETHROUGH, settings.darkModePrefix() + "strikethrough", "strikethrough", wxITEM_CHECK); add_menu_item_tr(menuFormat, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", wxITEM_CHECK); add_menu_item_tr(menuFormat, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", wxITEM_CHECK); mb->Insert(2, menuFormat, _MENU_("format")); @@ -57,6 +59,7 @@ void SetInfoPanel::destroyUI(wxToolBar* tb, wxMenuBar* mb) { tb->DeleteTool(ID_FORMAT_BOLD); tb->DeleteTool(ID_FORMAT_ITALIC); tb->DeleteTool(ID_FORMAT_UNDERLINE); + tb->DeleteTool(ID_FORMAT_STRIKETHROUGH); tb->DeleteTool(ID_FORMAT_SYMBOL); tb->DeleteTool(ID_FORMAT_REMINDER); // Menus @@ -65,7 +68,7 @@ void SetInfoPanel::destroyUI(wxToolBar* tb, wxMenuBar* mb) { void SetInfoPanel::onUpdateUI(wxUpdateUIEvent& ev) { switch (ev.GetId()) { - case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { + case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_STRIKETHROUGH: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { ev.Enable(editor->canFormat(ev.GetId())); ev.Check (editor->hasFormat(ev.GetId())); break; @@ -75,7 +78,7 @@ void SetInfoPanel::onUpdateUI(wxUpdateUIEvent& ev) { void SetInfoPanel::onCommand(int id) { switch (id) { - case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { + case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_STRIKETHROUGH: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { editor->doFormat(id); break; } diff --git a/src/gui/value/text.cpp b/src/gui/value/text.cpp index 69638db5..2ca9b3ff 100644 --- a/src/gui/value/text.cpp +++ b/src/gui/value/text.cpp @@ -805,7 +805,7 @@ bool TextValueEditor::doDelete() { bool TextValueEditor::canFormat(int type) const { switch (type) { - case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: + case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_UNDERLINE: case ID_FORMAT_STRIKETHROUGH: return !style().always_symbol && style().allow_formating; case ID_FORMAT_SYMBOL: return !style().always_symbol && style().allow_formating && style().symbol_font.valid(); @@ -825,6 +825,8 @@ bool TextValueEditor::hasFormat(int type) const { return is_in_tag(value().value(), _(":"), tag_start); if (colon < pos - 1 && text.GetChar(colon) == _(':')) { @@ -303,6 +305,7 @@ private: (code_kw > 0 ? FONT_CODE_KW : FONT_NORMAL) | (code_string > 0 ? FONT_CODE_STRING : FONT_NORMAL), underline > 0, + strikethrough > 0, fonts.empty() ? nullptr : &fonts.back(), param > 0 || param_ref > 0 ? ¶m_colors[(param_id++) % param_colors_count] diff --git a/src/script/functions/export.cpp b/src/script/functions/export.cpp index bd143d3b..acc079ae 100644 --- a/src/script/functions/export.cpp +++ b/src/script/functions/export.cpp @@ -218,6 +218,7 @@ String to_html(const String& str_in, const SymbolFontP& symbol_font, double symb Tag bold (_(""), _("")), italic(_(""), _("")), underline(_(""), _("")), + strikethrough(_(""), _("")), symbol(_(""), _("")); TagStack tags; String symbols; @@ -237,6 +238,10 @@ String to_html(const String& str_in, const SymbolFontP& symbol_font, double symb tags.open(ret, underline); } else if (is_substr(str, i, _("/u"))) { tags.close(ret, underline); + } else if (is_substr(str, i, _("strike"))) { + tags.open(ret, strikethrough); + } else if (is_substr(str, i, _("/strike"))) { + tags.close(ret, strikethrough); } else if (is_substr(str, i, _("sym"))) { tags.open (ret, symbol); } else if (is_substr(str, i, _("/sym"))) { @@ -312,8 +317,9 @@ String to_bbcode(const String& str_in) { String str = remove_tag_contents(str_in,_("