diff --git a/po/POTFILES b/po/POTFILES index ee70410..560b1d3 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -1,5 +1,15 @@ data/io.github.nokse22.asciidraw.desktop.in data/io.github.nokse22.asciidraw.metainfo.xml.in -src/gtk/help-overlay.ui +data/ui/window.ui src/main.py src/window.py +src/tools/eraser.py +src/tools/filled_rectangle.py +src/tools/freehand.py +src/tools/line.py +src/tools/picker.py +src/tools/rectangle.py +src/tools/select.py +src/tools/table.py +src/tools/text.py +src/tools/tree.py \ No newline at end of file diff --git a/po/template.pot b/po/template.pot new file mode 100644 index 0000000..aed8ea4 --- /dev/null +++ b/po/template.pot @@ -0,0 +1,224 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-16 10:50+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/io.github.nokse22.asciidraw.desktop.in:3 +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:3 src/main.py:166 +msgid "ASCII Draw" +msgstr "" + +#: data/io.github.nokse22.asciidraw.desktop.in:9 +msgid "GNOME;GTK;Draw;Graphics;Art;" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:7 +msgid "Draw using ASCII characters" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:9 +msgid "" +"This app lets you draw diagrams, tables, treeview and more using ASCII " +"characters. There are many stiles to choose from and multiple tools " +"available to use:" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:12 +msgid "Freehand Brush" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:13 src/tools/line.py:107 +msgid "Freehand Line" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:14 +msgid "Straight Line" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:15 +msgid "Straight Arrow" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:16 +#: src/tools/rectangle.py:119 +msgid "Rectangle" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:17 +#: src/tools/filled_rectangle.py:119 +msgid "Filled Rectangle" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:18 +msgid "Text with FIGlet fonts" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:19 src/tools/table.py:107 +msgid "Table" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:20 +msgid "Tree View" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:21 src/tools/eraser.py:84 +msgid "Eraser" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:22 +msgid "Character Picker" +msgstr "" + +#: data/io.github.nokse22.asciidraw.metainfo.xml.in:26 +msgid "Nokse" +msgstr "" + +#: data/ui/window.ui:94 data/ui/window.ui:205 data/ui/window.ui:249 +msgid "Enter" +msgstr "" + +#: data/ui/window.ui:188 +msgid "First line divided" +msgstr "" + +#: data/ui/window.ui:189 +msgid "Divide each row" +msgstr "" + +#: data/ui/window.ui:190 +msgid "Not divided" +msgstr "" + +#: data/ui/window.ui:321 +msgid "Cartesian" +msgstr "" + +#: data/ui/window.ui:322 +msgid "Step" +msgstr "" + +#: data/ui/window.ui:323 src/tools/freehand.py:85 +msgid "Freehand" +msgstr "" + +#: data/ui/window.ui:350 +msgid "Line" +msgstr "" + +#: data/ui/window.ui:416 +msgid "Extended latin" +msgstr "" + +#: data/ui/window.ui:596 src/window.py:492 +msgid "Save" +msgstr "" + +#: data/ui/window.ui:660 +msgid "Change size" +msgstr "" + +#: data/ui/window.ui:816 +msgid "Clear Canvas" +msgstr "" + +#: data/ui/window.ui:822 +msgid "New Palette" +msgstr "" + +#: data/ui/window.ui:826 +msgid "New Palette From Canvas" +msgstr "" + +#: data/ui/window.ui:832 +msgid "Keyboard Shortcuts" +msgstr "" + +#: data/ui/window.ui:836 +msgid "About ASCII Draw" +msgstr "" + +#: data/ui/window.ui:850 +msgid "Save As" +msgstr "" + +#: data/ui/window.ui:856 +msgid "Open" +msgstr "" + +#: data/ui/window.ui:860 +msgid "New Canvas" +msgstr "" + +#: src/main.py:119 +msgid "Clear" +msgstr "" + +#: src/main.py:176 +msgid "translator-credits" +msgstr "" + +#: src/window.py:442 +msgid "Open File" +msgstr "" + +#: src/window.py:483 +msgid "Save Changes?" +msgstr "" + +#: src/window.py:484 +msgid "You have unsaved changes, do you want to save them?" +msgstr "" + +#: src/window.py:490 +msgid "Cancel" +msgstr "" + +#: src/window.py:491 +msgid "Discard" +msgstr "" + +#: src/window.py:513 +msgid "Save File" +msgstr "" + +#: src/window.py:514 +msgid "drawing.txt" +msgstr "" + +#: src/window.py:541 +msgid "Saved successfully" +msgstr "" + +#: src/window.py:649 +msgid "Undo" +msgstr "" + +#: src/tools/line.py:160 +msgid "Cartesian Line" +msgstr "" + +#: src/tools/line.py:163 +msgid "Step Line" +msgstr "" + +#: src/tools/select.py:104 +msgid "Move" +msgstr "" + +#: src/tools/text.py:144 +msgid "Text" +msgstr "" diff --git a/src/canvas.py b/src/canvas.py index e1e6630..f6d95e5 100644 --- a/src/canvas.py +++ b/src/canvas.py @@ -69,6 +69,7 @@ def __init__(self, _styles, _flip): self.drag_gesture = Gtk.GestureDrag() self.drag_gesture.set_propagation_phase(Gtk.PropagationPhase.CAPTURE) + self.drag_gesture.set_button(0) self.drawing_area.add_controller(self.drag_gesture) self.click_gesture = Gtk.GestureClick() @@ -219,6 +220,11 @@ def get_selected_char(self): return self.primary_char return self.secondary_char + def get_unselected_char(self): + if not self._primary_selected: + return self.primary_char + return self.secondary_char + def draw_text(self, start_x, start_y, text, transparent, draw): if text == "": return _layer = self.drawing if draw else self.preview @@ -304,6 +310,13 @@ def draw_at(self, x, y): self.undo_changes[0].add_change(x, y, prev_char) self.drawing[int(y)][int(x)] = self.get_selected_char() + def draw_inverted_at(self, x, y): + if y >= len(self.drawing) or x >= len(self.drawing[0]) or x < 0 or y < 0: + return + prev_char = self.get_char_at(x, y) + self.undo_changes[0].add_change(x, y, prev_char) + self.drawing[int(y)][int(x)] = self.get_unselected_char() + def draw_primary_at(self, x, y, draw): _layer = self.drawing if draw else self.preview diff --git a/src/main.py b/src/main.py index a99deac..b6455d9 100644 --- a/src/main.py +++ b/src/main.py @@ -36,7 +36,7 @@ def __init__(self): super().__init__(application_id='io.github.nokse22.asciidraw', flags=Gio.ApplicationFlags.DEFAULT_FLAGS) - self.create_action('quit', lambda *_: self.quit(), ['q']) + # self.create_action('quit', self.on_quit, ['q']) self.create_action('about', self.on_about_action) self.create_action('preferences', self.on_preferences_action) @@ -116,7 +116,7 @@ def on_new_palette_action(self, *args): self.win.show_new_palette_window() def on_clear_canvas_action(self, *args): - self.win.canvas.add_undo_action("Clear") + self.win.canvas.add_undo_action(_("Clear")) self.win.canvas.clear_canvas() def on_open_palette_folder_action(self, *args): @@ -196,29 +196,33 @@ def create_action(self, name, callback, shortcuts=None): self.set_accels_for_action(f"app.{name}", shortcuts) def on_shutdown(self, *args): - print("help") - dialog = Adw.MessageDialog( - heading="Login", - body="A valid password is needed to continue", - close_response="cancel", + dialog = Gtk.MessageDialog( + # heading=_("Save Changes"), + # body="A valid password is needed to continue", + # close_response="cancel", modal=True, transient_for=self.win, ) - dialog.add_response("cancel", "Cancel") - dialog.add_response("login", "Login") + # dialog.add_response("cancel", _("Cancel")) + # dialog.add_response("discard", _("Discard")) + # dialog.add_response("save", _("Save")) - dialog.set_response_appearance("login", Adw.ResponseAppearance.SUGGESTED) + # dialog.set_response_appearance("discard", Adw.ResponseAppearance.DESTRUCTIVE) + # dialog.set_response_appearance("save", Adw.ResponseAppearance.SUGGESTED) - entry = Gtk.PasswordEntry(show_peek_icon=True) - dialog.set_extra_child(entry) + # entry = Gtk.Entry() + # dialog.set_extra_child(entry) - dialog.choose(None, self.on_response_selected_advanced) + # dialog.choose(None, self.on_response_selected_advanced) + # dialog.choose_finish(task) - dialog.show() + dialog.run() - def on_response_selected_advanced(self, *args): - pass + print(quit) + + def on_response_selected_advanced(self, dialog, task, *args): + response = dialog.choose_finish(task) def select_rectangle_tool(self, widget, _): self.win.select_rectangle_tool() diff --git a/src/tools/__init__.py b/src/tools/__init__.py index f6eaa08..ab46d30 100644 --- a/src/tools/__init__.py +++ b/src/tools/__init__.py @@ -5,7 +5,6 @@ from .text import Text from .table import Table from .select import Select -from .freehand_line import FreehandLine from .picker import Picker from .eraser import Eraser from .tree import Tree diff --git a/src/tools/eraser.py b/src/tools/eraser.py index 406c664..10738e3 100644 --- a/src/tools/eraser.py +++ b/src/tools/eraser.py @@ -81,7 +81,7 @@ def on_drag_begin(self, gesture, start_x, start_y): self.start_x = start_x self.start_y = start_y - self.canvas.add_undo_action("Ereser") + self.canvas.add_undo_action(_("Eraser")) def on_drag_follow(self, gesture, end_x, end_y): if not self._active: return diff --git a/src/tools/filled_rectangle.py b/src/tools/filled_rectangle.py index 767fbe2..92c500d 100644 --- a/src/tools/filled_rectangle.py +++ b/src/tools/filled_rectangle.py @@ -69,6 +69,8 @@ def on_drag_begin(self, gesture, start_x, start_y): def on_drag_follow(self, gesture, end_x, end_y): if not self._active: return + button = gesture.get_current_button() + start_x_char = self.start_x // self.x_mul start_y_char = self.start_y // self.y_mul @@ -93,13 +95,19 @@ def on_drag_follow(self, gesture, end_x, end_y): height = - height start_y_char -= height height += 1 - self.draw_filled_rectangle(start_x_char, start_y_char, width, height, False) + + if button == 1: + self.draw_filled_rectangle(start_x_char, start_y_char, width, height, False) + elif button == 3: + self.draw_inverted_filled_rectangle(start_x_char, start_y_char, width, height, False) def on_drag_end(self, gesture, delta_x, delta_y): if not self._active: return self.canvas.clear_preview() + button = gesture.get_current_button() + start_x_char = self.start_x // self.x_mul start_y_char = self.start_y // self.y_mul width = int((delta_x + self.start_x) // self.x_mul - start_x_char) @@ -108,7 +116,7 @@ def on_drag_end(self, gesture, delta_x, delta_y): self.prev_x = 0 self.prev_y = 0 - self.canvas.add_undo_action("Filled Rectangle") + self.canvas.add_undo_action(_("Filled Rectangle")) if width < 0: width = -width @@ -118,7 +126,11 @@ def on_drag_end(self, gesture, delta_x, delta_y): height = - height start_y_char -= height height += 1 - self.draw_filled_rectangle(start_x_char, start_y_char, width, height, True) + + if button == 1: + self.draw_filled_rectangle(start_x_char, start_y_char, width, height, True) + elif button == 3: + self.draw_inverted_filled_rectangle(start_x_char, start_y_char, width, height, True) def on_click_pressed(self, click, arg, x, y): if not self._active: return @@ -158,3 +170,30 @@ def draw_filled_rectangle(self, start_x_char, start_y_char, width, height, draw) self.canvas.update() else: self.canvas.update_preview() + + def draw_inverted_filled_rectangle(self, start_x_char, start_y_char, width, height, draw): + + for x in range(width): + self.canvas.draw_secondary_at(start_x_char + x, start_y_char, draw) + + # Draw the bottom border + for x in range(width): + self.canvas.draw_secondary_at(start_x_char + x, start_y_char + height - 1, draw) + + # Draw the left border (avoid filling the corners) + for y in range(1, height - 1): + self.canvas.draw_secondary_at(start_x_char, start_y_char + y, draw) + + # Draw the right border (avoid filling the corners) + for y in range(1, height - 1): + self.canvas.draw_secondary_at(start_x_char + width - 1, start_y_char + y, draw) + + # Fill the inside of the rectangle + for y in range(1, height - 1): + for x in range(1, width - 1): + self.canvas.draw_primary_at(start_x_char + x, start_y_char + y, draw) + + if draw: + self.canvas.update() + else: + self.canvas.update_preview() diff --git a/src/tools/freehand.py b/src/tools/freehand.py index 57bbb00..67b36e1 100644 --- a/src/tools/freehand.py +++ b/src/tools/freehand.py @@ -82,11 +82,13 @@ def on_drag_begin(self, gesture, start_x, start_y): self.start_x = start_x self.start_y = start_y - self.canvas.add_undo_action("Freehand") + self.canvas.add_undo_action(_("Freehand")) def on_drag_follow(self, gesture, end_x, end_y): if not self._active: return + button = gesture.get_current_button() + start_x_char = self.start_x // self.x_mul start_y_char = self.start_y // self.y_mul @@ -99,8 +101,8 @@ def on_drag_follow(self, gesture, end_x, end_y): x_coord = (self.start_x + self.end_x)//self.x_mul y_coord = (self.start_y + self.end_y)//self.y_mul for delta in self.brush_sizes[int(self._size - 1)]: - # self.canvas.set_char_at(x_coord + delta[0], y_coord + delta[1], self.char, True) - self.canvas.draw_at(x_coord + delta[0], y_coord + delta[1]) + if button == 1: self.canvas.draw_at(x_coord + delta[0], y_coord + delta[1]) + elif button == 3: self.canvas.draw_inverted_at(x_coord + delta[0], y_coord + delta[1]) self.canvas.update() def on_drag_end(self, gesture, delta_x, delta_y): diff --git a/src/tools/freehand_line.py b/src/tools/freehand_line.py deleted file mode 100644 index 75cb040..0000000 --- a/src/tools/freehand_line.py +++ /dev/null @@ -1,167 +0,0 @@ -# text.py -# -# Copyright 2023 Nokse -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# SPDX-License-Identifier: GPL-3.0-or-later - -from gi.repository import Adw -from gi.repository import Gtk -from gi.repository import Gdk, Gio, GObject - -import math - -class FreehandLine(GObject.GObject): - def __init__(self, _canvas, *args, **kwargs): - super().__init__(*args, **kwargs) - self.canvas = _canvas - - self._active = False - self._style = 0 - - self.canvas.drag_gesture.connect("drag-begin", self.on_drag_begin) - self.canvas.drag_gesture.connect("drag-update", self.on_drag_follow) - self.canvas.drag_gesture.connect("drag-end", self.on_drag_end) - - self.flip = False - self.start_x = 0 - self.start_y = 0 - - self.x_mul = 12 - self.y_mul = 24 - - self.end_x = 0 - self.end_y = 0 - - self.prev_char = "" - self.prev_char_pos = [] - self.prev_pos = [] - - @GObject.Property(type=bool, default=False) - def active(self): - return self._active - - @active.setter - def active(self, value): - self._active = value - self.notify('active') - - @GObject.Property(type=str, default='#') - def style(self): - return self._style - - @style.setter - def style(self, value): - self._style = value - self.notify('style') - - def on_drag_begin(self, gesture, start_x, start_y): - if not self._active: return - self.start_x = start_x - self.start_y = start_y - - if self.flip: - if self.drawing_area_width == 0: - self.update_area_width() - self.start_x = self.drawing_area_width - self.start_x - - start_x_char = self.start_x // self.x_mul - start_y_char = self.start_y // self.y_mul - - self.canvas.add_undo_action("Freehand Line") - self.prev_char_pos = [start_x_char, start_y_char] - - def on_drag_follow(self, gesture, end_x, end_y): - if not self._active: return - if self.flip: - end_x = - end_x - start_x_char = self.start_x // self.x_mul - start_y_char = self.start_y // self.y_mul - - width = int((end_x + self.start_x) // self.x_mul - start_x_char) - height = int((end_y + self.start_y) // self.y_mul - start_y_char) - - self.end_x = width * self.x_mul - self.end_y = height * self.y_mul - - self.draw_free_line(start_x_char + width, start_y_char + height) - - def on_drag_end(self, gesture, delta_x, delta_y): - if not self._active: return - - self.prev_char = "" - self.prev_char_pos = [] - self.prev_pos = [] - - def draw_free_line(self, new_x, new_y): - pos = [new_x, new_y] - if self.prev_pos == [] or pos == self.prev_pos: - self.prev_pos = [new_x, new_y] - return - pos = [new_x, new_y] - direction = [int(pos[0] - self.prev_pos[0]), int(pos[1] - self.prev_pos[1])] - dir2 = direction - direction = self.normalize_vector(direction) - prev_direction = [int(self.prev_pos[0] - self.prev_char_pos[0]), - int(self.prev_pos[1] - self.prev_char_pos[1])] - - if direction == [1, 0] or direction == [-1, 0]: - self.canvas.set_char_at(new_x, new_y, self.canvas.bottom_horizontal(), True) - elif direction == [0, 1] or direction == [0, -1]: - self.canvas.set_char_at(new_x, new_y, self.canvas.right_vertical(), True) - - # ["─", "─", "│", "│", "┌", "┐", "┘","└", "┼", "├", "┤", "┴","┬", "▲", "▼", "►", "◄"], - - if direction == [1, 0]: - if dir2 != direction: - self.canvas.horizontal_line(new_y, new_x - dir2[0], dir2[0], self.canvas.bottom_horizontal(), True) - if prev_direction == [0, -1]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.top_left(), True) - elif prev_direction == [0, 1]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.bottom_left(), True) - else: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.bottom_horizontal(), True) - elif direction == [-1, 0]: - if prev_direction == [0, -1]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.top_right(), True) - elif prev_direction == [0, 1]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.bottom_right(), True) - else: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.bottom_horizontal(), True) - - if direction == [0, -1]: - if prev_direction == [1, 0]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.bottom_right(), True) - elif prev_direction == [-1, 0]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.bottom_left(), True) - else: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.right_vertical(), True) - elif direction == [0, 1]: - if prev_direction == [1, 0]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.top_right(), True) - elif prev_direction == [-1, 0]: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.top_left(), True) - else: - self.canvas.set_char_at(self.prev_pos[0], self.prev_pos[1], self.canvas.right_vertical(), True) - - self.prev_char_pos = [self.prev_pos[0], self.prev_pos[1]] - self.prev_pos = [new_x, new_y] - - def normalize_vector(self, vector): - magnitude = math.sqrt(vector[0]**2 + vector[1]**2) - if magnitude == 0: - return [0, 0] # Avoid division by zero - normalized = [round(vector[0] / magnitude), round(vector[1] / magnitude)] - return normalized diff --git a/src/tools/line.py b/src/tools/line.py index f7193cb..91e1dbf 100644 --- a/src/tools/line.py +++ b/src/tools/line.py @@ -104,7 +104,7 @@ def on_drag_begin(self, gesture, start_x, start_y): self.start_x = start_x self.start_y = start_y if self._line_type == 2: - self.canvas.add_undo_action("Freehand Line") + self.canvas.add_undo_action(_("Freehand Line")) start_x_char = start_x // self.x_mul start_y_char = start_y // self.y_mul self.prev_prev_pos = [start_x_char, start_y_char] @@ -157,10 +157,10 @@ def on_drag_end(self, gesture, delta_x, delta_y): self.prev_y = 0 if self._line_type == 0: - self.canvas.add_undo_action("Cartesian Line") + self.canvas.add_undo_action(_("Cartesian Line")) self.draw_line(start_x_char, start_y_char, width, height, self.line_direction, True) elif self._line_type == 1: - self.canvas.add_undo_action("Step Line") + self.canvas.add_undo_action(_("Step Line")) self.draw_step_line(start_x_char, start_y_char, width, height, True) elif self._line_type == 2: self.prev_char = "" diff --git a/src/tools/rectangle.py b/src/tools/rectangle.py index 5f78e32..bae0265 100644 --- a/src/tools/rectangle.py +++ b/src/tools/rectangle.py @@ -116,7 +116,7 @@ def on_drag_end(self, gesture, delta_x, delta_y): self.prev_x = 0 self.prev_y = 0 - self.canvas.add_undo_action("Rectangle") + self.canvas.add_undo_action(_("Rectangle")) if width < 0: width = -width diff --git a/src/tools/select.py b/src/tools/select.py index 8dcd5f5..0f62cae 100644 --- a/src/tools/select.py +++ b/src/tools/select.py @@ -101,7 +101,7 @@ def on_drag_begin(self, gesture, this_x, this_y): and this_y_char < (start_y_char + height)): self.is_dragging = True - self.canvas.add_undo_action("Move") + self.canvas.add_undo_action(_("Move")) for y in range(1, int(height)): for x in range(1, int(width)): diff --git a/src/tools/table.py b/src/tools/table.py index 40105aa..87e3269 100644 --- a/src/tools/table.py +++ b/src/tools/table.py @@ -104,7 +104,7 @@ def on_click_released(self, click, arg, x, y): self.preview_table() def insert_table(self): - self.canvas.add_undo_action("Table") + self.canvas.add_undo_action(_("Table")) self.draw_table(self._table_type, True) self.canvas.update() diff --git a/src/tools/text.py b/src/tools/text.py index 1a35958..2366bbd 100644 --- a/src/tools/text.py +++ b/src/tools/text.py @@ -141,7 +141,7 @@ def on_click_released(self, click, arg, x, y): pass def insert_text(self): - self.canvas.add_undo_action("Text") + self.canvas.add_undo_action(_("Text")) self.canvas.clear_preview() text = self._text diff --git a/src/window.py b/src/window.py index 7788df9..578271b 100644 --- a/src/window.py +++ b/src/window.py @@ -460,7 +460,7 @@ def on_open_file_response(self, dialog, response): except IOError: print(f"Error reading {path}.") - def on_save_changes_message_response(self, _dialog, task, callback=None): + def on_save_changes_message_response(self, dialog, task, callback=None): response = _dialog.choose_finish(task) print(f'Selected "{response}" response.') match response: @@ -480,16 +480,16 @@ def new_canvas(self): def save_changes_message(self, callback=None): dialog = Adw.MessageDialog( - heading="Save Changes?", - body="You have unsaved changes, do you want to save them?", + heading=_("Save Changes?"), + body=_("You have unsaved changes, do you want to save them?"), close_response="cancel", modal=True, transient_for=self, ) - dialog.add_response("cancel", "Cancel") - dialog.add_response("discard", "Discard") - dialog.add_response("save", "Save") + dialog.add_response("cancel", _("Cancel")) + dialog.add_response("discard", _("Discard")) + dialog.add_response("save", _("Save")) dialog.set_response_appearance("discard", Adw.ResponseAppearance.DESTRUCTIVE) dialog.set_response_appearance("save", Adw.ResponseAppearance.SUGGESTED) @@ -646,7 +646,7 @@ def new_palette_from_canvas(self): def on_undo_added(self, widget, undo_name): self.undo_button.set_sensitive(True) - self.undo_button.set_tooltip_text(_("Undo ") + undo_name) + self.undo_button.set_tooltip_text(_("Undo") + " " + undo_name) @Gtk.Template.Callback("on_tree_text_inserted") def on_tree_text_inserted(self, buffer, loc, text, length):