Skip to content

Commit 57c455d

Browse files
committed
(upd) selection options
1 parent c7f237a commit 57c455d

File tree

8 files changed

+171
-95
lines changed

8 files changed

+171
-95
lines changed

Changelog.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2025-01-06 -- v0.9.8
2+
-- Added "Select All," "Unselect All," and "Invert Selection" options to the Options menu.
3+
14
2024-12-28 -- v0.9.7
25
-- Fixed layout issue
36

negar_gui/Ui_mwin.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,12 @@ def setupUi(self, MainWindow):
429429
icon25.addPixmap(QtGui.QPixmap(":/images/icons/save.svg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
430430
self.actionSave.setIcon(icon25)
431431
self.actionSave.setObjectName("actionSave")
432+
self.actionSelect_All = QtGui.QAction(parent=MainWindow)
433+
self.actionSelect_All.setObjectName("actionSelect_All")
434+
self.actionUnselect_All = QtGui.QAction(parent=MainWindow)
435+
self.actionUnselect_All.setObjectName("actionUnselect_All")
436+
self.actionInvert_Selection = QtGui.QAction(parent=MainWindow)
437+
self.actionInvert_Selection.setObjectName("actionInvert_Selection")
432438
self.menuFile.addAction(self.actionOpen)
433439
self.menuFile.addAction(self.actionSave)
434440
self.menuFile.addAction(self.actionExport)
@@ -456,6 +462,10 @@ def setupUi(self, MainWindow):
456462
self.menuOptions.addSeparator()
457463
self.menuOptions.addAction(self.actionExaggerating_ZWNJ)
458464
self.menuOptions.addAction(self.actionTrim_Leading_Trailing_Whitespaces)
465+
self.menuOptions.addSeparator()
466+
self.menuOptions.addAction(self.actionSelect_All)
467+
self.menuOptions.addAction(self.actionUnselect_All)
468+
self.menuOptions.addAction(self.actionInvert_Selection)
459469
self.menuLanguage.addAction(self.actionPersian)
460470
self.menuLanguage.addAction(self.actionEnglish)
461471
self.menuSetting.addAction(self.menuOptions.menuAction())
@@ -581,6 +591,9 @@ def retranslateUi(self, MainWindow):
581591
self.action_Auto.setText(_translate("MainWindow", "&Auto"))
582592
self.actionSave.setText(_translate("MainWindow", "&Save"))
583593
self.actionSave.setShortcut(_translate("MainWindow", "Ctrl+S"))
594+
self.actionSelect_All.setText(_translate("MainWindow", "Select All"))
595+
self.actionUnselect_All.setText(_translate("MainWindow", "Unselect All"))
596+
self.actionInvert_Selection.setText(_translate("MainWindow", "Invert Selection"))
584597

585598

586599
if __name__ == "__main__":

negar_gui/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import platform
22
from pathlib import Path
33

4-
__version__ = "0.9.7"
4+
__version__ = "0.9.8"
55

66
APPDATA = "AppData/Roaming/" if platform.system() == "Windows" else "."
77
SETTING_FILE = Path.home() / f"{APPDATA}negar-gui/settings.toml"

negar_gui/main.py

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,28 @@ def __init__(self, parent=None):
285285
# Checks for new release
286286
Thread(target=lambda: asyncio.run(self.updateCheck()), daemon=True).start()
287287

288+
self.options_action_menu = (
289+
self.actionFix_Dashes,
290+
self.actionFix_three_dots,
291+
self.actionFix_English_quotes,
292+
self.actionFix_hamzeh,
293+
self.actionUse_Persian_yeh_to_show_hamzeh,
294+
self.actionFix_spacing_braces_and_quotes,
295+
self.actionFix_Arabic_numbers,
296+
self.actionFix_English_numbers,
297+
self.actionFix_non_Persian_chars,
298+
self.actionFix_prefix_spacing,
299+
self.actionFix_prefix_separating,
300+
self.actionFix_suffix_spacing,
301+
self.actionFix_suffix_separating,
302+
self.actionFix_aggressive_punctuation,
303+
self.actionCleanup_kashidas,
304+
self.actionCleanup_extra_marks,
305+
self.actionCleanup_spacing,
306+
self.actionTrim_Leading_Trailing_Whitespaces,
307+
self.actionExaggerating_ZWNJ,
308+
)
309+
288310
async def updateCheck(self):
289311
nurl = "https://raw.github.com/shahinism/python-negar/master/negar/constants.py"
290312
ngurl = "https://raw.github.com/javadr/negar-gui/master/negar_gui/constants.py"
@@ -377,28 +399,8 @@ def connectSlots(self):
377399
self.actionReport_Bugs.triggered.connect(
378400
lambda: QDesktopServices.openUrl(QUrl("https://github.com/javadr/negar-gui/issues")),
379401
)
380-
381-
for menu_item in (
382-
self.actionFix_Dashes,
383-
self.actionFix_three_dots,
384-
self.actionFix_English_quotes,
385-
self.actionFix_hamzeh,
386-
self.actionUse_Persian_yeh_to_show_hamzeh,
387-
self.actionFix_spacing_braces_and_quotes,
388-
self.actionFix_Arabic_numbers,
389-
self.actionFix_English_numbers,
390-
self.actionFix_non_Persian_chars,
391-
self.actionFix_prefix_spacing,
392-
self.actionFix_prefix_separating,
393-
self.actionFix_suffix_spacing,
394-
self.actionFix_suffix_separating,
395-
self.actionFix_aggressive_punctuation,
396-
self.actionCleanup_kashidas,
397-
self.actionCleanup_extra_marks,
398-
self.actionCleanup_spacing,
399-
self.actionTrim_Leading_Trailing_Whitespaces,
400-
self.actionExaggerating_ZWNJ,
401-
):
402+
# connecting the option menu items to their handlers
403+
for menu_item in self.options_action_menu:
402404
menu_item.triggered.connect(lambda: (self.option_control(), self.autoedit_handler()))
403405

404406
self.actionUntouchable_Words.triggered.connect(
@@ -464,6 +466,26 @@ def connectSlots(self):
464466
self.input_editor.verticalScrollBar().valueChanged.connect(self._sync_inout_scroll)
465467
self.output_editor.verticalScrollBar().valueChanged.connect(self._sync_inout_scroll)
466468

469+
def check(value: bool):
470+
return lambda: (
471+
[checkbox.setChecked(value) for checkbox in self.options_action_menu],
472+
self.option_control(),
473+
self.autoedit_handler(),
474+
)
475+
476+
self.actionSelect_All.triggered.connect(check(True))
477+
self.actionUnselect_All.triggered.connect(check(False))
478+
self.actionInvert_Selection.triggered.connect(
479+
lambda: (
480+
[
481+
checkbox.setChecked(not checkbox.isChecked())
482+
for checkbox in self.options_action_menu
483+
],
484+
self.option_control(),
485+
self.autoedit_handler(),
486+
)
487+
)
488+
467489
####################### SLOTs ###############################
468490
def _sync_inout_scroll(self, value):
469491
max_in_scroll = self.input_editor.verticalScrollBar().maximum()
@@ -492,6 +514,7 @@ def full_screen_input_slot(self):
492514

493515
# Change GridLayout Orientation
494516
def _grid_layout(self, layout="h"):
517+
assert layout in ("v", "h"), "Layout must be 'v' or 'h'"
495518
if layout == "v":
496519
self.gridLayout.setHorizontalSpacing(5)
497520
elif layout == "h":
@@ -788,7 +811,10 @@ def autoedit_handler(self):
788811
else:
789812
self.edit_btn.setEnabled(True)
790813
# This line will disconnect autoedit signal and will disable autoamtic edit option
791-
self.input_editor.textChanged.disconnect(self.edit_text)
814+
try:
815+
self.input_editor.textChanged.disconnect(self.edit_text)
816+
except:
817+
pass
792818
self._set_font_size()
793819

794820
def _set_font_size(self):

negar_gui/mwin.ui

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,10 @@
502502
<addaction name="separator"/>
503503
<addaction name="actionExaggerating_ZWNJ"/>
504504
<addaction name="actionTrim_Leading_Trailing_Whitespaces"/>
505+
<addaction name="separator"/>
506+
<addaction name="actionSelect_All"/>
507+
<addaction name="actionUnselect_All"/>
508+
<addaction name="actionInvert_Selection"/>
505509
</widget>
506510
<widget class="QMenu" name="menuLanguage">
507511
<property name="title">
@@ -1064,6 +1068,21 @@
10641068
<string>Ctrl+S</string>
10651069
</property>
10661070
</action>
1071+
<action name="actionSelect_All">
1072+
<property name="text">
1073+
<string>Select All</string>
1074+
</property>
1075+
</action>
1076+
<action name="actionUnselect_All">
1077+
<property name="text">
1078+
<string>Unselect All</string>
1079+
</property>
1080+
</action>
1081+
<action name="actionInvert_Selection">
1082+
<property name="text">
1083+
<string>Invert Selection</string>
1084+
</property>
1085+
</action>
10671086
</widget>
10681087
<tabstops>
10691088
<tabstop>output_editor</tabstop>

negar_gui/ts/fa-main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
<context>
55
<name>Dialog</name>
66
<message>
7-
<location filename="../main.py" line="361"/>
7+
<location filename="../main.py" line="384"/>
88
<source>About Negar</source>
99
<translation>درباره نگار</translation>
1010
</message>
1111
<message>
12-
<location filename="../main.py" line="245"/>
12+
<location filename="../main.py" line="246"/>
1313
<source>Close</source>
1414
<translation>بستن</translation>
1515
</message>

0 commit comments

Comments
 (0)