Anchor-annotator 0.4.0__py3-none-any.whl → 0.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {Anchor_annotator-0.4.0.dist-info → Anchor_annotator-0.5.0.dist-info}/METADATA +1 -1
- Anchor_annotator-0.5.0.dist-info/RECORD +22 -0
- anchor/_version.py +2 -2
- anchor/main.py +174 -60
- anchor/models.py +34 -18
- anchor/plot.py +304 -119
- anchor/resources_rc.py +6475 -4801
- anchor/settings.py +177 -92
- anchor/ui_error_dialog.py +15 -16
- anchor/ui_main_window.py +40 -612
- anchor/ui_preferences.py +75 -44
- anchor/undo.py +0 -1
- anchor/widgets.py +74 -92
- anchor/workers.py +27 -1
- Anchor_annotator-0.4.0.dist-info/RECORD +0 -22
- {Anchor_annotator-0.4.0.dist-info → Anchor_annotator-0.5.0.dist-info}/LICENSE +0 -0
- {Anchor_annotator-0.4.0.dist-info → Anchor_annotator-0.5.0.dist-info}/WHEEL +0 -0
- {Anchor_annotator-0.4.0.dist-info → Anchor_annotator-0.5.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: Anchor_annotator
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.5.0
|
4
4
|
Summary: Anchor annotator is a program for inspecting corpora for the Montreal Forced Aligner and correcting transcriptions and pronunciations.
|
5
5
|
Home-page: https://github.com/MontrealCorpusTools/Anchor-annotator
|
6
6
|
Author: Montreal Corpus Tools
|
@@ -0,0 +1,22 @@
|
|
1
|
+
anchor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
+
anchor/__main__.py,sha256=5ufG8lcx2x1am-04xI991AG7saJd24dxPw5JzjmB878,45
|
3
|
+
anchor/_version.py,sha256=aeBju2l8GTMwAhIRG_c2Q_oVPFacRkZZwGtxmvFCGPQ,411
|
4
|
+
anchor/command_line.py,sha256=EucG805HyWk_zkMO9RXv9Yj0I0JVdDLZb1_DX2_ISjM,503
|
5
|
+
anchor/db.py,sha256=ef4lO6HtCKoxC9CorIc0ZbPxKpjHa576a0ZIBOWNU9E,4956
|
6
|
+
anchor/main.py,sha256=ZJKMVgh1yFnuqcoCSSDXFWqmw5hxLcoQbA0JaNSK61Y,126473
|
7
|
+
anchor/models.py,sha256=tYtj_doI9LokNOo624b1OmVLTFpIdKBVPfAzCO90ou4,96315
|
8
|
+
anchor/plot.py,sha256=yNveJ6O52621xC5ggUhFeeSxFp-HWD8D3XVnBWc6vtE,112516
|
9
|
+
anchor/resources_rc.py,sha256=ad0TsmUT4851Rh4oWpwefIJ9Ijqhg3gwX8cnaRX_90w,8460639
|
10
|
+
anchor/settings.py,sha256=jyqvKYo2ZMeZkU7D6qmLxkF8xvnJsYh7eyk5_kQMKxY,51884
|
11
|
+
anchor/ui_corpus_manager.py,sha256=e3ybOd4UdYarrLBATxI8vIFnioa4R_BHrbsEz5mJ5eA,8564
|
12
|
+
anchor/ui_error_dialog.py,sha256=HKbjGT_jtdb9jfn9THQMbl1fmcdWyjYDazM4hCwZ5Yo,3931
|
13
|
+
anchor/ui_main_window.py,sha256=q7dsxdvjhMy-W_7qEqV9EalWUZsca1OwfdrU0EVz8d0,36574
|
14
|
+
anchor/ui_preferences.py,sha256=g3tcjAMFKIAqUJNEke7ww4LkdeTFA1zb8_lrhF6k5fo,43271
|
15
|
+
anchor/undo.py,sha256=HUrTT8N-y1jFrSBX4wSNSGF3G0YiBeKUqKJQQg1qffI,32919
|
16
|
+
anchor/widgets.py,sha256=iadb6GgR2Q-1eTdle_IPaMyEnkOBXMqBvjC1U6pWtJo,156787
|
17
|
+
anchor/workers.py,sha256=rjUWKyRJ-NiZpGvgYgoNi5M9ESoMFXpd7zgnx-f0WBY,172378
|
18
|
+
Anchor_annotator-0.5.0.dist-info/LICENSE,sha256=C0oIsblENEgWQ7XMNdYoXyXsIA5wa3YF0I9lK3H7A1s,1076
|
19
|
+
Anchor_annotator-0.5.0.dist-info/METADATA,sha256=2ochFmVpqLnnTKHb15k3R4BRxNH2wrrwdZDO0NJFjUg,1500
|
20
|
+
Anchor_annotator-0.5.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
21
|
+
Anchor_annotator-0.5.0.dist-info/top_level.txt,sha256=wX6ZKxImGRZKFQjs3f6XYw_TfbAp6Xs3SmbLfLbFAJ0,7
|
22
|
+
Anchor_annotator-0.5.0.dist-info/RECORD,,
|
anchor/_version.py
CHANGED
anchor/main.py
CHANGED
@@ -103,6 +103,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
103
103
|
self.status_indicator.setFixedWidth(self.ui.statusbar.height())
|
104
104
|
self.ui.statusbar.addPermanentWidget(self.status_indicator, 0)
|
105
105
|
self.settings = AnchorSettings()
|
106
|
+
self.settings.themeUpdated.connect(self.refresh_style_sheets)
|
107
|
+
self.style_hints = QtGui.QGuiApplication.styleHints()
|
108
|
+
self.style_hints.colorSchemeChanged.connect(self.refresh_style_sheets)
|
106
109
|
self.model_manager = ModelManager(
|
107
110
|
token=self.settings.value(AnchorSettings.GITHUB_TOKEN), ignore_cache=True
|
108
111
|
)
|
@@ -827,9 +830,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
827
830
|
self.ui.lockEditAct.toggled.connect(self.toggle_lock)
|
828
831
|
self.ui.exportFilesAct.setEnabled(True)
|
829
832
|
self.ui.exportFilesAct.triggered.connect(self.export_files)
|
830
|
-
self.ui.showAllSpeakersAct.triggered.connect(
|
831
|
-
self.ui.utteranceDetailWidget.plot_widget.update_show_speakers
|
832
|
-
)
|
833
833
|
self.ui.muteAct.triggered.connect(self.update_mute_status)
|
834
834
|
self.volume_slider = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal, self)
|
835
835
|
self.volume_slider.setMaximum(100)
|
@@ -868,9 +868,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
868
868
|
self.ui.selectMappingFileAct.triggered.connect(self.change_custom_mapping)
|
869
869
|
|
870
870
|
self.undo_act = self.undo_group.createUndoAction(self, "Undo")
|
871
|
-
self.undo_act.setIcon(QtGui.QIcon("
|
871
|
+
self.undo_act.setIcon(QtGui.QIcon.fromTheme("edit-undo"))
|
872
872
|
self.redo_act = self.undo_group.createRedoAction(self, "Redo")
|
873
|
-
self.redo_act.setIcon(QtGui.QIcon("
|
873
|
+
self.redo_act.setIcon(QtGui.QIcon.fromTheme("edit-redo"))
|
874
874
|
self.ui.menuEdit.addAction(self.undo_act)
|
875
875
|
self.ui.menuEdit.addAction(self.redo_act)
|
876
876
|
self.undo_group.setActiveStack(self.corpus_undo_stack)
|
@@ -1851,6 +1851,54 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1851
1851
|
|
1852
1852
|
def refresh_style_sheets(self):
|
1853
1853
|
self.setStyleSheet(self.settings.style_sheet)
|
1854
|
+
self.styleSheetChanged.emit(self.settings.style_sheet)
|
1855
|
+
self.ui.utteranceDetailWidget.plot_widget.refresh_theme()
|
1856
|
+
QtGui.QIcon.setThemeName("anchor_light")
|
1857
|
+
if self.settings.theme_preset == "Native":
|
1858
|
+
dark_mode = (
|
1859
|
+
QtGui.QGuiApplication.styleHints().colorScheme() == QtCore.Qt.ColorScheme.Dark
|
1860
|
+
)
|
1861
|
+
if dark_mode:
|
1862
|
+
QtGui.QIcon.setThemeName("anchor_dark")
|
1863
|
+
if False:
|
1864
|
+
self.ui.playAct.setIcon(
|
1865
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.MediaPlaybackStart)
|
1866
|
+
)
|
1867
|
+
self.ui.muteAct.setIcon(
|
1868
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.AudioVolumeMuted)
|
1869
|
+
)
|
1870
|
+
self.ui.zoomInAct.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ZoomIn))
|
1871
|
+
self.ui.zoomOutAct.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ZoomOut))
|
1872
|
+
self.ui.zoomToSelectionAct.setIcon(
|
1873
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ZoomFitBest)
|
1874
|
+
)
|
1875
|
+
self.ui.mergeUtterancesAct.setIcon(
|
1876
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.InputGaming)
|
1877
|
+
)
|
1878
|
+
self.ui.splitUtterancesAct.setIcon(
|
1879
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ViewFullscreen)
|
1880
|
+
)
|
1881
|
+
self.ui.deleteUtterancesAct.setIcon(
|
1882
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.EditDelete)
|
1883
|
+
)
|
1884
|
+
self.ui.exportFilesAct.setIcon(
|
1885
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.DocumentSave)
|
1886
|
+
)
|
1887
|
+
self.ui.lockEditAct.setIcon(
|
1888
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.SystemLockScreen)
|
1889
|
+
)
|
1890
|
+
self.ui.getHelpAct.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.HelpAbout))
|
1891
|
+
self.ui.reportBugAct.setIcon(
|
1892
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.MailForward)
|
1893
|
+
)
|
1894
|
+
self.ui.alignUtteranceAct.setIcon(
|
1895
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.FormatTextUnderline)
|
1896
|
+
)
|
1897
|
+
self.ui.cancelCorpusLoadAct.setIcon(
|
1898
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ProcessStop)
|
1899
|
+
)
|
1900
|
+
self.undo_act.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.EditUndo))
|
1901
|
+
self.redo_act.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.EditRedo))
|
1854
1902
|
|
1855
1903
|
def refresh_corpus_history(self):
|
1856
1904
|
self.ui.loadRecentCorpusMenu.clear()
|
@@ -1869,8 +1917,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1869
1917
|
self.ui.loadRecentCorpusMenu.addAction(a)
|
1870
1918
|
|
1871
1919
|
def refresh_settings(self):
|
1872
|
-
self.
|
1873
|
-
self.styleSheetChanged.emit(self.settings.style_sheet)
|
1920
|
+
self.refresh_style_sheets()
|
1874
1921
|
self.refresh_shortcuts()
|
1875
1922
|
self.corpus_model.set_limit(self.settings.value(self.settings.RESULTS_PER_PAGE))
|
1876
1923
|
self.dictionary_model.set_limit(self.settings.value(self.settings.RESULTS_PER_PAGE))
|
@@ -1880,6 +1927,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1880
1927
|
self.ui.dictionaryWidget.refresh_settings()
|
1881
1928
|
self.ui.speakerWidget.refresh_settings()
|
1882
1929
|
self.media_player.refresh_settings()
|
1930
|
+
self.ui.utteranceDetailWidget.plot_widget.refresh()
|
1883
1931
|
|
1884
1932
|
def download_language_model(self):
|
1885
1933
|
self.download_worker.set_params(
|
@@ -2285,6 +2333,10 @@ class DetailedMessageBox(QtWidgets.QDialog): # pragma: no cover
|
|
2285
2333
|
self.ui = Ui_ErrorDialog()
|
2286
2334
|
self.ui.setupUi(self)
|
2287
2335
|
self.settings = AnchorSettings()
|
2336
|
+
icon = QtGui.QIcon.fromTheme("emblem-important")
|
2337
|
+
size = self.ui.iconLabel.size()
|
2338
|
+
self.ui.iconLabel.setPixmap(icon.pixmap(size))
|
2339
|
+
self.setWindowIcon(icon)
|
2288
2340
|
self.ui.detailed_message.setText(detailed_message)
|
2289
2341
|
self.ui.buttonBox.report_bug_button.clicked.connect(self.reportBug.emit)
|
2290
2342
|
self.ui.buttonBox.rejected.connect(self.reject)
|
@@ -2300,6 +2352,14 @@ class ManagerDialog(QtWidgets.QDialog):
|
|
2300
2352
|
self.ui.setupUi(self)
|
2301
2353
|
self.ui.tabWidget.setCurrentIndex(0)
|
2302
2354
|
self.settings = AnchorSettings()
|
2355
|
+
QtGui.QIcon.setThemeName("anchor_light")
|
2356
|
+
if self.settings.theme_preset == "Native":
|
2357
|
+
dark_mode = (
|
2358
|
+
QtGui.QGuiApplication.styleHints().colorScheme() == QtCore.Qt.ColorScheme.Dark
|
2359
|
+
)
|
2360
|
+
if dark_mode:
|
2361
|
+
QtGui.QIcon.setThemeName("anchor_dark")
|
2362
|
+
|
2303
2363
|
self.model_manager = model_manager
|
2304
2364
|
|
2305
2365
|
self.db_engine = db_engine
|
@@ -2381,33 +2441,10 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2381
2441
|
self.ui.setupUi(self)
|
2382
2442
|
self.settings = AnchorSettings()
|
2383
2443
|
|
2384
|
-
self.
|
2385
|
-
|
2386
|
-
self.ui.primaryBaseEdit.set_color(self.settings.value(self.settings.PRIMARY_BASE_COLOR))
|
2387
|
-
self.ui.primaryLightEdit.set_color(self.settings.value(self.settings.PRIMARY_LIGHT_COLOR))
|
2388
|
-
self.ui.primaryDarkEdit.set_color(self.settings.value(self.settings.PRIMARY_DARK_COLOR))
|
2389
|
-
self.ui.primaryVeryLightEdit.set_color(
|
2390
|
-
self.settings.value(self.settings.PRIMARY_VERY_LIGHT_COLOR)
|
2391
|
-
)
|
2392
|
-
self.ui.primaryVeryDarkEdit.set_color(
|
2393
|
-
self.settings.value(self.settings.PRIMARY_VERY_DARK_COLOR)
|
2394
|
-
)
|
2395
|
-
|
2396
|
-
self.ui.accentBaseEdit.set_color(self.settings.value(self.settings.ACCENT_BASE_COLOR))
|
2397
|
-
self.ui.accentLightEdit.set_color(self.settings.value(self.settings.ACCENT_LIGHT_COLOR))
|
2398
|
-
self.ui.accentDarkEdit.set_color(self.settings.value(self.settings.ACCENT_DARK_COLOR))
|
2399
|
-
self.ui.accentVeryLightEdit.set_color(
|
2400
|
-
self.settings.value(self.settings.ACCENT_VERY_LIGHT_COLOR)
|
2401
|
-
)
|
2402
|
-
self.ui.accentVeryDarkEdit.set_color(
|
2403
|
-
self.settings.value(self.settings.ACCENT_VERY_DARK_COLOR)
|
2404
|
-
)
|
2444
|
+
self.initial_theme = self.settings.current_theme
|
2405
2445
|
|
2406
|
-
self.
|
2407
|
-
self.ui.
|
2408
|
-
self.settings.value(self.settings.SELECTED_TEXT_COLOR)
|
2409
|
-
)
|
2410
|
-
self.ui.errorColorEdit.set_color(self.settings.value(self.settings.ERROR_COLOR))
|
2446
|
+
self.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
|
2447
|
+
self.ui.errorColorEdit.colorChanged.connect(self.update_theme)
|
2411
2448
|
|
2412
2449
|
self.ui.fontEdit.set_font(self.settings.font)
|
2413
2450
|
|
@@ -2456,6 +2493,11 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2456
2493
|
self.settings.value(self.settings.TIME_DIRECTION)
|
2457
2494
|
)
|
2458
2495
|
)
|
2496
|
+
self.ui.visibleSpeakerComboBox.setCurrentIndex(
|
2497
|
+
self.ui.visibleSpeakerComboBox.findText(
|
2498
|
+
str(self.settings.value(self.settings.TIER_MAX_SPEAKERS))
|
2499
|
+
)
|
2500
|
+
)
|
2459
2501
|
|
2460
2502
|
self.ui.dynamicRangeEdit.setValue(self.settings.value(self.settings.SPEC_DYNAMIC_RANGE))
|
2461
2503
|
self.ui.specMaxTimeEdit.setText(str(self.settings.value(self.settings.SPEC_MAX_TIME)))
|
@@ -2472,6 +2514,11 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2472
2514
|
self.ui.frameLengthEdit.setValue(self.settings.value(self.settings.PITCH_FRAME_LENGTH))
|
2473
2515
|
self.ui.penaltyEdit.setText(str(self.settings.value(self.settings.PITCH_PENALTY_FACTOR)))
|
2474
2516
|
self.ui.pitchDeltaEdit.setText(str(self.settings.value(self.settings.PITCH_DELTA_PITCH)))
|
2517
|
+
self.ui.presetThemeEdit.setCurrentIndex(
|
2518
|
+
self.ui.presetThemeEdit.findText(str(self.settings.value(self.settings.THEME_PRESET)))
|
2519
|
+
)
|
2520
|
+
self.ui.presetThemeEdit.currentIndexChanged.connect(self.update_preset_theme)
|
2521
|
+
self.ui.presetThemeEdit.currentIndexChanged.connect(self.update_theme)
|
2475
2522
|
|
2476
2523
|
self.ui.audioDeviceEdit.clear()
|
2477
2524
|
for o in QtMultimedia.QMediaDevices.audioOutputs():
|
@@ -2486,6 +2533,82 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2486
2533
|
# self.setFont(self.settings.font)
|
2487
2534
|
# self.setStyleSheet(self.settings.style_sheet)
|
2488
2535
|
|
2536
|
+
def set_theme(self, theme):
|
2537
|
+
self.ui.primaryBaseEdit.set_color(theme[self.settings.PRIMARY_BASE_COLOR])
|
2538
|
+
self.ui.primaryLightEdit.set_color(theme[self.settings.PRIMARY_LIGHT_COLOR])
|
2539
|
+
self.ui.primaryDarkEdit.set_color(theme[self.settings.PRIMARY_DARK_COLOR])
|
2540
|
+
self.ui.primaryVeryLightEdit.set_color(theme[self.settings.PRIMARY_VERY_LIGHT_COLOR])
|
2541
|
+
self.ui.primaryVeryDarkEdit.set_color(theme[self.settings.PRIMARY_VERY_DARK_COLOR])
|
2542
|
+
|
2543
|
+
self.ui.accentBaseEdit.set_color(theme[self.settings.ACCENT_BASE_COLOR])
|
2544
|
+
self.ui.accentLightEdit.set_color(theme[self.settings.ACCENT_LIGHT_COLOR])
|
2545
|
+
self.ui.accentDarkEdit.set_color(theme[self.settings.ACCENT_DARK_COLOR])
|
2546
|
+
self.ui.accentVeryLightEdit.set_color(theme[self.settings.ACCENT_VERY_LIGHT_COLOR])
|
2547
|
+
self.ui.accentVeryDarkEdit.set_color(theme[self.settings.ACCENT_VERY_DARK_COLOR])
|
2548
|
+
|
2549
|
+
self.ui.mainTextColorEdit.set_color(theme[self.settings.MAIN_TEXT_COLOR])
|
2550
|
+
self.ui.selectedTextColorEdit.set_color(theme[self.settings.SELECTED_TEXT_COLOR])
|
2551
|
+
self.ui.errorColorEdit.set_color(theme[self.settings.ERROR_COLOR])
|
2552
|
+
|
2553
|
+
def update_preset_theme(self):
|
2554
|
+
theme = self.ui.presetThemeEdit.currentText()
|
2555
|
+
self.ui.primaryBaseEdit.setEnabled(False)
|
2556
|
+
self.ui.primaryLightEdit.setEnabled(False)
|
2557
|
+
self.ui.primaryDarkEdit.setEnabled(False)
|
2558
|
+
self.ui.primaryVeryLightEdit.setEnabled(False)
|
2559
|
+
self.ui.primaryVeryDarkEdit.setEnabled(False)
|
2560
|
+
self.ui.accentBaseEdit.setEnabled(False)
|
2561
|
+
self.ui.accentLightEdit.setEnabled(False)
|
2562
|
+
self.ui.accentDarkEdit.setEnabled(False)
|
2563
|
+
self.ui.accentVeryLightEdit.setEnabled(False)
|
2564
|
+
self.ui.accentVeryDarkEdit.setEnabled(False)
|
2565
|
+
self.ui.mainTextColorEdit.setEnabled(False)
|
2566
|
+
self.ui.selectedTextColorEdit.setEnabled(False)
|
2567
|
+
self.ui.errorColorEdit.setEnabled(False)
|
2568
|
+
if theme == "MFA":
|
2569
|
+
self.set_theme(self.settings.mfa_theme)
|
2570
|
+
self.settings.set_mfa_theme()
|
2571
|
+
elif theme != "Native":
|
2572
|
+
self.ui.primaryBaseEdit.setEnabled(True)
|
2573
|
+
self.ui.primaryLightEdit.setEnabled(True)
|
2574
|
+
self.ui.primaryDarkEdit.setEnabled(True)
|
2575
|
+
self.ui.primaryVeryLightEdit.setEnabled(True)
|
2576
|
+
self.ui.primaryVeryDarkEdit.setEnabled(True)
|
2577
|
+
self.ui.accentBaseEdit.setEnabled(True)
|
2578
|
+
self.ui.accentLightEdit.setEnabled(True)
|
2579
|
+
self.ui.accentDarkEdit.setEnabled(True)
|
2580
|
+
self.ui.accentVeryLightEdit.setEnabled(True)
|
2581
|
+
self.ui.accentVeryDarkEdit.setEnabled(True)
|
2582
|
+
self.ui.mainTextColorEdit.setEnabled(True)
|
2583
|
+
self.ui.selectedTextColorEdit.setEnabled(True)
|
2584
|
+
self.ui.errorColorEdit.setEnabled(True)
|
2585
|
+
|
2586
|
+
def update_theme(self):
|
2587
|
+
preset_theme = self.ui.presetThemeEdit.currentText()
|
2588
|
+
self.settings.setValue(self.settings.THEME_PRESET, preset_theme)
|
2589
|
+
if preset_theme != "Native":
|
2590
|
+
self.settings.set_theme(self.current_theme)
|
2591
|
+
else:
|
2592
|
+
self.settings.themeUpdated.emit()
|
2593
|
+
|
2594
|
+
@property
|
2595
|
+
def current_theme(self):
|
2596
|
+
return {
|
2597
|
+
AnchorSettings.MAIN_TEXT_COLOR: self.ui.mainTextColorEdit.color,
|
2598
|
+
AnchorSettings.SELECTED_TEXT_COLOR: self.ui.selectedTextColorEdit.color,
|
2599
|
+
AnchorSettings.ERROR_COLOR: self.ui.errorColorEdit.color,
|
2600
|
+
AnchorSettings.PRIMARY_BASE_COLOR: self.ui.primaryBaseEdit.color,
|
2601
|
+
AnchorSettings.PRIMARY_LIGHT_COLOR: self.ui.primaryLightEdit.color,
|
2602
|
+
AnchorSettings.PRIMARY_DARK_COLOR: self.ui.primaryDarkEdit.color,
|
2603
|
+
AnchorSettings.PRIMARY_VERY_LIGHT_COLOR: self.ui.primaryVeryLightEdit.color,
|
2604
|
+
AnchorSettings.PRIMARY_VERY_DARK_COLOR: self.ui.primaryVeryDarkEdit.color,
|
2605
|
+
AnchorSettings.ACCENT_BASE_COLOR: self.ui.accentBaseEdit.color,
|
2606
|
+
AnchorSettings.ACCENT_LIGHT_COLOR: self.ui.accentLightEdit.color,
|
2607
|
+
AnchorSettings.ACCENT_DARK_COLOR: self.ui.accentDarkEdit.color,
|
2608
|
+
AnchorSettings.ACCENT_VERY_LIGHT_COLOR: self.ui.accentVeryLightEdit.color,
|
2609
|
+
AnchorSettings.ACCENT_VERY_DARK_COLOR: self.ui.accentVeryDarkEdit.color,
|
2610
|
+
}
|
2611
|
+
|
2489
2612
|
def accept(self) -> None:
|
2490
2613
|
config.NUM_JOBS = self.ui.numJobsEdit.value()
|
2491
2614
|
config.USE_MP = self.ui.useMpCheckBox.isChecked()
|
@@ -2524,32 +2647,8 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2524
2647
|
self.settings.setValue(
|
2525
2648
|
self.settings.PITCH_DELTA_PITCH, float(self.ui.pitchDeltaEdit.text())
|
2526
2649
|
)
|
2527
|
-
|
2528
|
-
self.settings.setValue(self.settings.
|
2529
|
-
self.settings.setValue(self.settings.PRIMARY_LIGHT_COLOR, self.ui.primaryLightEdit.color)
|
2530
|
-
self.settings.setValue(self.settings.PRIMARY_DARK_COLOR, self.ui.primaryDarkEdit.color)
|
2531
|
-
self.settings.setValue(
|
2532
|
-
self.settings.PRIMARY_VERY_LIGHT_COLOR, self.ui.primaryVeryLightEdit.color
|
2533
|
-
)
|
2534
|
-
self.settings.setValue(
|
2535
|
-
self.settings.PRIMARY_VERY_DARK_COLOR, self.ui.primaryVeryDarkEdit.color
|
2536
|
-
)
|
2537
|
-
|
2538
|
-
self.settings.setValue(self.settings.ACCENT_BASE_COLOR, self.ui.accentBaseEdit.color)
|
2539
|
-
self.settings.setValue(self.settings.ACCENT_LIGHT_COLOR, self.ui.accentLightEdit.color)
|
2540
|
-
self.settings.setValue(self.settings.ACCENT_DARK_COLOR, self.ui.accentDarkEdit.color)
|
2541
|
-
self.settings.setValue(
|
2542
|
-
self.settings.ACCENT_VERY_LIGHT_COLOR, self.ui.accentVeryLightEdit.color
|
2543
|
-
)
|
2544
|
-
self.settings.setValue(
|
2545
|
-
self.settings.ACCENT_VERY_DARK_COLOR, self.ui.accentVeryDarkEdit.color
|
2546
|
-
)
|
2547
|
-
|
2548
|
-
self.settings.setValue(self.settings.MAIN_TEXT_COLOR, self.ui.mainTextColorEdit.color)
|
2549
|
-
self.settings.setValue(
|
2550
|
-
self.settings.SELECTED_TEXT_COLOR, self.ui.selectedTextColorEdit.color
|
2551
|
-
)
|
2552
|
-
self.settings.setValue(self.settings.ERROR_COLOR, self.ui.errorColorEdit.color)
|
2650
|
+
preset_theme = self.ui.presetThemeEdit.currentText()
|
2651
|
+
self.settings.setValue(self.settings.THEME_PRESET, preset_theme)
|
2553
2652
|
|
2554
2653
|
self.settings.setValue(self.settings.FONT, self.ui.fontEdit.font.toString())
|
2555
2654
|
|
@@ -2605,11 +2704,26 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2605
2704
|
self.settings.setValue(
|
2606
2705
|
self.settings.TIME_DIRECTION, self.ui.timeDirectionComboBox.currentText()
|
2607
2706
|
)
|
2707
|
+
self.settings.setValue(
|
2708
|
+
self.settings.TIER_MAX_SPEAKERS, int(self.ui.visibleSpeakerComboBox.currentText())
|
2709
|
+
)
|
2608
2710
|
self.settings.sync()
|
2609
|
-
|
2711
|
+
if preset_theme != "Native":
|
2712
|
+
self.settings.set_theme(self.current_theme)
|
2713
|
+
else:
|
2714
|
+
self.settings.themeUpdated.emit()
|
2715
|
+
super().accept()
|
2716
|
+
|
2717
|
+
def reject(self):
|
2718
|
+
self.settings.set_theme(self.initial_theme)
|
2719
|
+
self.settings.sync()
|
2720
|
+
super().reject()
|
2610
2721
|
|
2611
2722
|
|
2612
2723
|
class Application(QtWidgets.QApplication):
|
2724
|
+
def __init__(self, *args, **kwargs):
|
2725
|
+
super().__init__(*args, **kwargs)
|
2726
|
+
|
2613
2727
|
def setActiveWindow(self, act):
|
2614
2728
|
super().setActiveWindow(act)
|
2615
2729
|
act.styleSheetChanged.connect(self.setStyleSheet)
|
anchor/models.py
CHANGED
@@ -505,7 +505,13 @@ class FileUtterancesModel(QtCore.QAbstractListModel):
|
|
505
505
|
normalized_text = ""
|
506
506
|
speaker_id = None
|
507
507
|
channel = None
|
508
|
+
prev_index = None
|
508
509
|
for old_utt in sorted(utterances, key=lambda x: x.begin):
|
510
|
+
index = self.reversed_indices[old_utt.id]
|
511
|
+
if prev_index is not None:
|
512
|
+
if index - prev_index != 1:
|
513
|
+
return
|
514
|
+
prev_index = index
|
509
515
|
if speaker_id is None:
|
510
516
|
speaker_id = old_utt.speaker_id
|
511
517
|
if channel is None:
|
@@ -567,7 +573,7 @@ class FileSelectionModel(QtCore.QItemSelectionModel):
|
|
567
573
|
channelChanged = QtCore.Signal()
|
568
574
|
resetView = QtCore.Signal()
|
569
575
|
viewChanged = QtCore.Signal(object, object)
|
570
|
-
selectionAudioChanged = QtCore.Signal()
|
576
|
+
selectionAudioChanged = QtCore.Signal(object)
|
571
577
|
currentUtteranceChanged = QtCore.Signal()
|
572
578
|
speakerRequested = QtCore.Signal(object)
|
573
579
|
|
@@ -606,6 +612,9 @@ class FileSelectionModel(QtCore.QItemSelectionModel):
|
|
606
612
|
self.model().utterancesReady.connect(self.finalize_set_new_file)
|
607
613
|
self.viewChanged.connect(self.load_audio_selection)
|
608
614
|
self.model().selectionRequested.connect(self.update_selected_utterances)
|
615
|
+
self.view_change_timer = QtCore.QTimer()
|
616
|
+
self.view_change_timer.setInterval(50)
|
617
|
+
self.view_change_timer.timeout.connect(self.send_selection_update)
|
609
618
|
|
610
619
|
def selected_utterances(self):
|
611
620
|
utts = []
|
@@ -728,22 +737,21 @@ class FileSelectionModel(QtCore.QItemSelectionModel):
|
|
728
737
|
self.waveformReady.emit()
|
729
738
|
|
730
739
|
def select_audio(self, begin, end):
|
731
|
-
if end is not None and end - begin < 0.
|
740
|
+
if end is not None and end - begin < 0.05:
|
732
741
|
end = None
|
733
742
|
self.selected_min_time = begin
|
734
743
|
self.selected_max_time = end
|
735
744
|
if self.selected_min_time != self.min_time:
|
736
|
-
self.selectionAudioChanged.emit()
|
745
|
+
self.selectionAudioChanged.emit(False)
|
737
746
|
|
738
|
-
def request_start_time(self, start_time):
|
747
|
+
def request_start_time(self, start_time, update=False):
|
739
748
|
if start_time >= self.max_time:
|
740
749
|
return
|
741
750
|
if start_time < self.min_time:
|
742
751
|
return
|
743
752
|
self.selected_min_time = start_time
|
744
753
|
self.selected_max_time = None
|
745
|
-
|
746
|
-
self.selectionAudioChanged.emit()
|
754
|
+
self.selectionAudioChanged.emit(update)
|
747
755
|
|
748
756
|
def set_current_channel(self, channel):
|
749
757
|
if channel == self.selected_channel:
|
@@ -813,7 +821,21 @@ class FileSelectionModel(QtCore.QItemSelectionModel):
|
|
813
821
|
|
814
822
|
def zoom_to_selection(self):
|
815
823
|
if self.selected_min_time is not None and self.selected_max_time is not None:
|
816
|
-
self.
|
824
|
+
begin = self.selected_min_time
|
825
|
+
end = self.selected_max_time
|
826
|
+
elif len(self.selectedRows(0)) > 0:
|
827
|
+
m = self.model()
|
828
|
+
begin = 100000
|
829
|
+
end = 0
|
830
|
+
for index in self.selectedRows(0):
|
831
|
+
u = m.utterances[index.row()]
|
832
|
+
if u.begin < begin:
|
833
|
+
begin = u.begin
|
834
|
+
if u.end > end:
|
835
|
+
end = u.end
|
836
|
+
else:
|
837
|
+
return
|
838
|
+
self.set_view_times(begin, end)
|
817
839
|
|
818
840
|
def update_from_slider(self, value):
|
819
841
|
if not self.max_time:
|
@@ -821,16 +843,6 @@ class FileSelectionModel(QtCore.QItemSelectionModel):
|
|
821
843
|
cur_window = self.max_time - self.min_time
|
822
844
|
self.set_view_times(value, value + cur_window)
|
823
845
|
|
824
|
-
def update_selection_audio(self, begin, end):
|
825
|
-
if begin < self.min_time:
|
826
|
-
begin = self.min_time
|
827
|
-
if end > self.max_time:
|
828
|
-
end = self.max_time
|
829
|
-
self.selected_min_time = begin
|
830
|
-
self.selected_max_time = end
|
831
|
-
if self.selected_min_time != self.min_time:
|
832
|
-
self.selectionAudioChanged.emit()
|
833
|
-
|
834
846
|
def visible_utterances(self) -> typing.List[Utterance]:
|
835
847
|
file_utts = []
|
836
848
|
if not self.model().file:
|
@@ -866,6 +878,10 @@ class FileSelectionModel(QtCore.QItemSelectionModel):
|
|
866
878
|
and not self.min_time <= self.selected_max_time <= self.max_time
|
867
879
|
):
|
868
880
|
self.selected_max_time = None
|
881
|
+
self.view_change_timer.start()
|
882
|
+
|
883
|
+
def send_selection_update(self):
|
884
|
+
self.view_change_timer.stop()
|
869
885
|
self.viewChanged.emit(self.min_time, self.max_time)
|
870
886
|
|
871
887
|
def set_current_file(self, file_id, begin, end, utterance_id, speaker_id, force_update=False):
|
@@ -971,7 +987,7 @@ class CorpusSelectionModel(QtCore.QItemSelectionModel):
|
|
971
987
|
self.currentRowChanged.connect(self.switch_utterance)
|
972
988
|
# self.selectionChanged.connect(self.update_selection_audio)
|
973
989
|
# self.selectionChanged.connect(self.update_selection_audio)
|
974
|
-
self.model().newResults.connect(self.check_selection)
|
990
|
+
# self.model().newResults.connect(self.check_selection)
|
975
991
|
self.model().unlockCorpus.connect(self.fileChanged.emit)
|
976
992
|
|
977
993
|
def set_current_utterance(self, utterance_id):
|