Anchor-annotator 0.4.0__py3-none-any.whl → 0.6.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.6.0.dist-info}/METADATA +1 -1
- Anchor_annotator-0.6.0.dist-info/RECORD +22 -0
- anchor/_version.py +2 -2
- anchor/main.py +180 -68
- anchor/models.py +34 -18
- anchor/plot.py +302 -119
- anchor/resources_rc.py +6656 -4801
- anchor/settings.py +178 -93
- 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 +145 -112
- anchor/workers.py +29 -1
- Anchor_annotator-0.4.0.dist-info/RECORD +0 -22
- {Anchor_annotator-0.4.0.dist-info → Anchor_annotator-0.6.0.dist-info}/LICENSE +0 -0
- {Anchor_annotator-0.4.0.dist-info → Anchor_annotator-0.6.0.dist-info}/WHEEL +0 -0
- {Anchor_annotator-0.4.0.dist-info → Anchor_annotator-0.6.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.6.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=2JKwcA-YQ0okV2N-gwTWy_n51igWrPcsKQFm0cnqsvw,411
|
4
|
+
anchor/command_line.py,sha256=EucG805HyWk_zkMO9RXv9Yj0I0JVdDLZb1_DX2_ISjM,503
|
5
|
+
anchor/db.py,sha256=ef4lO6HtCKoxC9CorIc0ZbPxKpjHa576a0ZIBOWNU9E,4956
|
6
|
+
anchor/main.py,sha256=t4vREjcD_qj5362wDchCFcA4ecBBfcTAjmC_Ok0P1yM,126411
|
7
|
+
anchor/models.py,sha256=tYtj_doI9LokNOo624b1OmVLTFpIdKBVPfAzCO90ou4,96315
|
8
|
+
anchor/plot.py,sha256=t1LZ-BsmCJlz3v4zyyCoPm42N_jP0ic8w4hXI8DGVkg,112449
|
9
|
+
anchor/resources_rc.py,sha256=tzJHrJw3MpjAlnj-DtCmaR4A8gAaLF966XEXs5HNIjc,8464375
|
10
|
+
anchor/settings.py,sha256=4ucr440O7wJhkatP1a2eK6lVGRgkVh2UUI2zs-JDlno,51883
|
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=q_yfANJ68zvZ5t-4vF8hMHmLFHGp6GCHPSDesdw9iJA,158420
|
17
|
+
anchor/workers.py,sha256=YhJ2EEeqzi3xu2NYPdFrYzgnWcyXhFtjnjxgwfeLSqo,172456
|
18
|
+
Anchor_annotator-0.6.0.dist-info/LICENSE,sha256=C0oIsblENEgWQ7XMNdYoXyXsIA5wa3YF0I9lK3H7A1s,1076
|
19
|
+
Anchor_annotator-0.6.0.dist-info/METADATA,sha256=DuhOE6l8IrlLxszFmFjWfy_FVy3VhzaTQ66K2aAylN8,1500
|
20
|
+
Anchor_annotator-0.6.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
21
|
+
Anchor_annotator-0.6.0.dist-info/top_level.txt,sha256=wX6ZKxImGRZKFQjs3f6XYw_TfbAp6Xs3SmbLfLbFAJ0,7
|
22
|
+
Anchor_annotator-0.6.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
|
)
|
@@ -120,6 +123,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
120
123
|
self.media_player = MediaPlayer(self)
|
121
124
|
self.media_player.playbackStateChanged.connect(self.handleAudioState)
|
122
125
|
self.media_player.audioReady.connect(self.file_loaded)
|
126
|
+
self.media_player.playingChanged.connect(self.update_play_button)
|
123
127
|
self.media_player.timeChanged.connect(
|
124
128
|
self.ui.utteranceDetailWidget.plot_widget.audio_plot.update_play_line
|
125
129
|
)
|
@@ -342,14 +346,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
342
346
|
session.commit()
|
343
347
|
|
344
348
|
def file_loaded(self, ready):
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
self.ui.playAct.setChecked(False)
|
351
|
-
self.ui.muteAct.setChecked(False)
|
352
|
-
self.ui.muteAct.setEnabled(False)
|
349
|
+
self.ui.playAct.setEnabled(ready)
|
350
|
+
self.ui.muteAct.setEnabled(ready)
|
351
|
+
|
352
|
+
def update_play_button(self, playing):
|
353
|
+
self.ui.playAct.setChecked(playing)
|
353
354
|
|
354
355
|
def corpus_changed(self, clean):
|
355
356
|
if clean:
|
@@ -827,9 +828,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
827
828
|
self.ui.lockEditAct.toggled.connect(self.toggle_lock)
|
828
829
|
self.ui.exportFilesAct.setEnabled(True)
|
829
830
|
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
831
|
self.ui.muteAct.triggered.connect(self.update_mute_status)
|
834
832
|
self.volume_slider = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal, self)
|
835
833
|
self.volume_slider.setMaximum(100)
|
@@ -868,9 +866,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
868
866
|
self.ui.selectMappingFileAct.triggered.connect(self.change_custom_mapping)
|
869
867
|
|
870
868
|
self.undo_act = self.undo_group.createUndoAction(self, "Undo")
|
871
|
-
self.undo_act.setIcon(QtGui.QIcon("
|
869
|
+
self.undo_act.setIcon(QtGui.QIcon.fromTheme("edit-undo"))
|
872
870
|
self.redo_act = self.undo_group.createRedoAction(self, "Redo")
|
873
|
-
self.redo_act.setIcon(QtGui.QIcon("
|
871
|
+
self.redo_act.setIcon(QtGui.QIcon.fromTheme("edit-redo"))
|
874
872
|
self.ui.menuEdit.addAction(self.undo_act)
|
875
873
|
self.ui.menuEdit.addAction(self.redo_act)
|
876
874
|
self.undo_group.setActiveStack(self.corpus_undo_stack)
|
@@ -1851,6 +1849,54 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1851
1849
|
|
1852
1850
|
def refresh_style_sheets(self):
|
1853
1851
|
self.setStyleSheet(self.settings.style_sheet)
|
1852
|
+
self.styleSheetChanged.emit(self.settings.style_sheet)
|
1853
|
+
self.ui.utteranceDetailWidget.plot_widget.refresh_theme()
|
1854
|
+
QtGui.QIcon.setThemeName("anchor_light")
|
1855
|
+
if self.settings.theme_preset == "Native":
|
1856
|
+
dark_mode = (
|
1857
|
+
QtGui.QGuiApplication.styleHints().colorScheme() == QtCore.Qt.ColorScheme.Dark
|
1858
|
+
)
|
1859
|
+
if dark_mode:
|
1860
|
+
QtGui.QIcon.setThemeName("anchor_dark")
|
1861
|
+
if False:
|
1862
|
+
self.ui.playAct.setIcon(
|
1863
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.MediaPlaybackStart)
|
1864
|
+
)
|
1865
|
+
self.ui.muteAct.setIcon(
|
1866
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.AudioVolumeMuted)
|
1867
|
+
)
|
1868
|
+
self.ui.zoomInAct.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ZoomIn))
|
1869
|
+
self.ui.zoomOutAct.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ZoomOut))
|
1870
|
+
self.ui.zoomToSelectionAct.setIcon(
|
1871
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ZoomFitBest)
|
1872
|
+
)
|
1873
|
+
self.ui.mergeUtterancesAct.setIcon(
|
1874
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.InputGaming)
|
1875
|
+
)
|
1876
|
+
self.ui.splitUtterancesAct.setIcon(
|
1877
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ViewFullscreen)
|
1878
|
+
)
|
1879
|
+
self.ui.deleteUtterancesAct.setIcon(
|
1880
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.EditDelete)
|
1881
|
+
)
|
1882
|
+
self.ui.exportFilesAct.setIcon(
|
1883
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.DocumentSave)
|
1884
|
+
)
|
1885
|
+
self.ui.lockEditAct.setIcon(
|
1886
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.SystemLockScreen)
|
1887
|
+
)
|
1888
|
+
self.ui.getHelpAct.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.HelpAbout))
|
1889
|
+
self.ui.reportBugAct.setIcon(
|
1890
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.MailForward)
|
1891
|
+
)
|
1892
|
+
self.ui.alignUtteranceAct.setIcon(
|
1893
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.FormatTextUnderline)
|
1894
|
+
)
|
1895
|
+
self.ui.cancelCorpusLoadAct.setIcon(
|
1896
|
+
QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.ProcessStop)
|
1897
|
+
)
|
1898
|
+
self.undo_act.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.EditUndo))
|
1899
|
+
self.redo_act.setIcon(QtGui.QIcon.fromTheme(QtGui.QIcon.ThemeIcon.EditRedo))
|
1854
1900
|
|
1855
1901
|
def refresh_corpus_history(self):
|
1856
1902
|
self.ui.loadRecentCorpusMenu.clear()
|
@@ -1869,8 +1915,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1869
1915
|
self.ui.loadRecentCorpusMenu.addAction(a)
|
1870
1916
|
|
1871
1917
|
def refresh_settings(self):
|
1872
|
-
self.
|
1873
|
-
self.styleSheetChanged.emit(self.settings.style_sheet)
|
1918
|
+
self.refresh_style_sheets()
|
1874
1919
|
self.refresh_shortcuts()
|
1875
1920
|
self.corpus_model.set_limit(self.settings.value(self.settings.RESULTS_PER_PAGE))
|
1876
1921
|
self.dictionary_model.set_limit(self.settings.value(self.settings.RESULTS_PER_PAGE))
|
@@ -1880,6 +1925,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1880
1925
|
self.ui.dictionaryWidget.refresh_settings()
|
1881
1926
|
self.ui.speakerWidget.refresh_settings()
|
1882
1927
|
self.media_player.refresh_settings()
|
1928
|
+
self.ui.utteranceDetailWidget.plot_widget.refresh()
|
1883
1929
|
|
1884
1930
|
def download_language_model(self):
|
1885
1931
|
self.download_worker.set_params(
|
@@ -2285,6 +2331,10 @@ class DetailedMessageBox(QtWidgets.QDialog): # pragma: no cover
|
|
2285
2331
|
self.ui = Ui_ErrorDialog()
|
2286
2332
|
self.ui.setupUi(self)
|
2287
2333
|
self.settings = AnchorSettings()
|
2334
|
+
icon = QtGui.QIcon.fromTheme("emblem-important")
|
2335
|
+
size = self.ui.iconLabel.size()
|
2336
|
+
self.ui.iconLabel.setPixmap(icon.pixmap(size))
|
2337
|
+
self.setWindowIcon(icon)
|
2288
2338
|
self.ui.detailed_message.setText(detailed_message)
|
2289
2339
|
self.ui.buttonBox.report_bug_button.clicked.connect(self.reportBug.emit)
|
2290
2340
|
self.ui.buttonBox.rejected.connect(self.reject)
|
@@ -2300,6 +2350,14 @@ class ManagerDialog(QtWidgets.QDialog):
|
|
2300
2350
|
self.ui.setupUi(self)
|
2301
2351
|
self.ui.tabWidget.setCurrentIndex(0)
|
2302
2352
|
self.settings = AnchorSettings()
|
2353
|
+
QtGui.QIcon.setThemeName("anchor_light")
|
2354
|
+
if self.settings.theme_preset == "Native":
|
2355
|
+
dark_mode = (
|
2356
|
+
QtGui.QGuiApplication.styleHints().colorScheme() == QtCore.Qt.ColorScheme.Dark
|
2357
|
+
)
|
2358
|
+
if dark_mode:
|
2359
|
+
QtGui.QIcon.setThemeName("anchor_dark")
|
2360
|
+
|
2303
2361
|
self.model_manager = model_manager
|
2304
2362
|
|
2305
2363
|
self.db_engine = db_engine
|
@@ -2381,33 +2439,10 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2381
2439
|
self.ui.setupUi(self)
|
2382
2440
|
self.settings = AnchorSettings()
|
2383
2441
|
|
2384
|
-
self.
|
2442
|
+
self.initial_theme = self.settings.current_theme
|
2385
2443
|
|
2386
|
-
self.
|
2387
|
-
self.ui.
|
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
|
-
)
|
2405
|
-
|
2406
|
-
self.ui.mainTextColorEdit.set_color(self.settings.value(self.settings.MAIN_TEXT_COLOR))
|
2407
|
-
self.ui.selectedTextColorEdit.set_color(
|
2408
|
-
self.settings.value(self.settings.SELECTED_TEXT_COLOR)
|
2409
|
-
)
|
2410
|
-
self.ui.errorColorEdit.set_color(self.settings.value(self.settings.ERROR_COLOR))
|
2444
|
+
self.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
|
2445
|
+
self.ui.errorColorEdit.colorChanged.connect(self.update_theme)
|
2411
2446
|
|
2412
2447
|
self.ui.fontEdit.set_font(self.settings.font)
|
2413
2448
|
|
@@ -2456,6 +2491,11 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2456
2491
|
self.settings.value(self.settings.TIME_DIRECTION)
|
2457
2492
|
)
|
2458
2493
|
)
|
2494
|
+
self.ui.visibleSpeakerComboBox.setCurrentIndex(
|
2495
|
+
self.ui.visibleSpeakerComboBox.findText(
|
2496
|
+
str(self.settings.value(self.settings.TIER_MAX_SPEAKERS))
|
2497
|
+
)
|
2498
|
+
)
|
2459
2499
|
|
2460
2500
|
self.ui.dynamicRangeEdit.setValue(self.settings.value(self.settings.SPEC_DYNAMIC_RANGE))
|
2461
2501
|
self.ui.specMaxTimeEdit.setText(str(self.settings.value(self.settings.SPEC_MAX_TIME)))
|
@@ -2472,6 +2512,11 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2472
2512
|
self.ui.frameLengthEdit.setValue(self.settings.value(self.settings.PITCH_FRAME_LENGTH))
|
2473
2513
|
self.ui.penaltyEdit.setText(str(self.settings.value(self.settings.PITCH_PENALTY_FACTOR)))
|
2474
2514
|
self.ui.pitchDeltaEdit.setText(str(self.settings.value(self.settings.PITCH_DELTA_PITCH)))
|
2515
|
+
self.ui.presetThemeEdit.setCurrentIndex(
|
2516
|
+
self.ui.presetThemeEdit.findText(str(self.settings.value(self.settings.THEME_PRESET)))
|
2517
|
+
)
|
2518
|
+
self.ui.presetThemeEdit.currentIndexChanged.connect(self.update_preset_theme)
|
2519
|
+
self.ui.presetThemeEdit.currentIndexChanged.connect(self.update_theme)
|
2475
2520
|
|
2476
2521
|
self.ui.audioDeviceEdit.clear()
|
2477
2522
|
for o in QtMultimedia.QMediaDevices.audioOutputs():
|
@@ -2486,6 +2531,82 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2486
2531
|
# self.setFont(self.settings.font)
|
2487
2532
|
# self.setStyleSheet(self.settings.style_sheet)
|
2488
2533
|
|
2534
|
+
def set_theme(self, theme):
|
2535
|
+
self.ui.primaryBaseEdit.set_color(theme[self.settings.PRIMARY_BASE_COLOR])
|
2536
|
+
self.ui.primaryLightEdit.set_color(theme[self.settings.PRIMARY_LIGHT_COLOR])
|
2537
|
+
self.ui.primaryDarkEdit.set_color(theme[self.settings.PRIMARY_DARK_COLOR])
|
2538
|
+
self.ui.primaryVeryLightEdit.set_color(theme[self.settings.PRIMARY_VERY_LIGHT_COLOR])
|
2539
|
+
self.ui.primaryVeryDarkEdit.set_color(theme[self.settings.PRIMARY_VERY_DARK_COLOR])
|
2540
|
+
|
2541
|
+
self.ui.accentBaseEdit.set_color(theme[self.settings.ACCENT_BASE_COLOR])
|
2542
|
+
self.ui.accentLightEdit.set_color(theme[self.settings.ACCENT_LIGHT_COLOR])
|
2543
|
+
self.ui.accentDarkEdit.set_color(theme[self.settings.ACCENT_DARK_COLOR])
|
2544
|
+
self.ui.accentVeryLightEdit.set_color(theme[self.settings.ACCENT_VERY_LIGHT_COLOR])
|
2545
|
+
self.ui.accentVeryDarkEdit.set_color(theme[self.settings.ACCENT_VERY_DARK_COLOR])
|
2546
|
+
|
2547
|
+
self.ui.mainTextColorEdit.set_color(theme[self.settings.MAIN_TEXT_COLOR])
|
2548
|
+
self.ui.selectedTextColorEdit.set_color(theme[self.settings.SELECTED_TEXT_COLOR])
|
2549
|
+
self.ui.errorColorEdit.set_color(theme[self.settings.ERROR_COLOR])
|
2550
|
+
|
2551
|
+
def update_preset_theme(self):
|
2552
|
+
theme = self.ui.presetThemeEdit.currentText()
|
2553
|
+
self.ui.primaryBaseEdit.setEnabled(False)
|
2554
|
+
self.ui.primaryLightEdit.setEnabled(False)
|
2555
|
+
self.ui.primaryDarkEdit.setEnabled(False)
|
2556
|
+
self.ui.primaryVeryLightEdit.setEnabled(False)
|
2557
|
+
self.ui.primaryVeryDarkEdit.setEnabled(False)
|
2558
|
+
self.ui.accentBaseEdit.setEnabled(False)
|
2559
|
+
self.ui.accentLightEdit.setEnabled(False)
|
2560
|
+
self.ui.accentDarkEdit.setEnabled(False)
|
2561
|
+
self.ui.accentVeryLightEdit.setEnabled(False)
|
2562
|
+
self.ui.accentVeryDarkEdit.setEnabled(False)
|
2563
|
+
self.ui.mainTextColorEdit.setEnabled(False)
|
2564
|
+
self.ui.selectedTextColorEdit.setEnabled(False)
|
2565
|
+
self.ui.errorColorEdit.setEnabled(False)
|
2566
|
+
if theme == "MFA":
|
2567
|
+
self.set_theme(self.settings.mfa_theme)
|
2568
|
+
self.settings.set_mfa_theme()
|
2569
|
+
elif theme != "Native":
|
2570
|
+
self.ui.primaryBaseEdit.setEnabled(True)
|
2571
|
+
self.ui.primaryLightEdit.setEnabled(True)
|
2572
|
+
self.ui.primaryDarkEdit.setEnabled(True)
|
2573
|
+
self.ui.primaryVeryLightEdit.setEnabled(True)
|
2574
|
+
self.ui.primaryVeryDarkEdit.setEnabled(True)
|
2575
|
+
self.ui.accentBaseEdit.setEnabled(True)
|
2576
|
+
self.ui.accentLightEdit.setEnabled(True)
|
2577
|
+
self.ui.accentDarkEdit.setEnabled(True)
|
2578
|
+
self.ui.accentVeryLightEdit.setEnabled(True)
|
2579
|
+
self.ui.accentVeryDarkEdit.setEnabled(True)
|
2580
|
+
self.ui.mainTextColorEdit.setEnabled(True)
|
2581
|
+
self.ui.selectedTextColorEdit.setEnabled(True)
|
2582
|
+
self.ui.errorColorEdit.setEnabled(True)
|
2583
|
+
|
2584
|
+
def update_theme(self):
|
2585
|
+
preset_theme = self.ui.presetThemeEdit.currentText()
|
2586
|
+
self.settings.setValue(self.settings.THEME_PRESET, preset_theme)
|
2587
|
+
if preset_theme != "Native":
|
2588
|
+
self.settings.set_theme(self.current_theme)
|
2589
|
+
else:
|
2590
|
+
self.settings.themeUpdated.emit()
|
2591
|
+
|
2592
|
+
@property
|
2593
|
+
def current_theme(self):
|
2594
|
+
return {
|
2595
|
+
AnchorSettings.MAIN_TEXT_COLOR: self.ui.mainTextColorEdit.color,
|
2596
|
+
AnchorSettings.SELECTED_TEXT_COLOR: self.ui.selectedTextColorEdit.color,
|
2597
|
+
AnchorSettings.ERROR_COLOR: self.ui.errorColorEdit.color,
|
2598
|
+
AnchorSettings.PRIMARY_BASE_COLOR: self.ui.primaryBaseEdit.color,
|
2599
|
+
AnchorSettings.PRIMARY_LIGHT_COLOR: self.ui.primaryLightEdit.color,
|
2600
|
+
AnchorSettings.PRIMARY_DARK_COLOR: self.ui.primaryDarkEdit.color,
|
2601
|
+
AnchorSettings.PRIMARY_VERY_LIGHT_COLOR: self.ui.primaryVeryLightEdit.color,
|
2602
|
+
AnchorSettings.PRIMARY_VERY_DARK_COLOR: self.ui.primaryVeryDarkEdit.color,
|
2603
|
+
AnchorSettings.ACCENT_BASE_COLOR: self.ui.accentBaseEdit.color,
|
2604
|
+
AnchorSettings.ACCENT_LIGHT_COLOR: self.ui.accentLightEdit.color,
|
2605
|
+
AnchorSettings.ACCENT_DARK_COLOR: self.ui.accentDarkEdit.color,
|
2606
|
+
AnchorSettings.ACCENT_VERY_LIGHT_COLOR: self.ui.accentVeryLightEdit.color,
|
2607
|
+
AnchorSettings.ACCENT_VERY_DARK_COLOR: self.ui.accentVeryDarkEdit.color,
|
2608
|
+
}
|
2609
|
+
|
2489
2610
|
def accept(self) -> None:
|
2490
2611
|
config.NUM_JOBS = self.ui.numJobsEdit.value()
|
2491
2612
|
config.USE_MP = self.ui.useMpCheckBox.isChecked()
|
@@ -2524,32 +2645,8 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2524
2645
|
self.settings.setValue(
|
2525
2646
|
self.settings.PITCH_DELTA_PITCH, float(self.ui.pitchDeltaEdit.text())
|
2526
2647
|
)
|
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)
|
2648
|
+
preset_theme = self.ui.presetThemeEdit.currentText()
|
2649
|
+
self.settings.setValue(self.settings.THEME_PRESET, preset_theme)
|
2553
2650
|
|
2554
2651
|
self.settings.setValue(self.settings.FONT, self.ui.fontEdit.font.toString())
|
2555
2652
|
|
@@ -2605,11 +2702,26 @@ class OptionsDialog(QtWidgets.QDialog):
|
|
2605
2702
|
self.settings.setValue(
|
2606
2703
|
self.settings.TIME_DIRECTION, self.ui.timeDirectionComboBox.currentText()
|
2607
2704
|
)
|
2705
|
+
self.settings.setValue(
|
2706
|
+
self.settings.TIER_MAX_SPEAKERS, int(self.ui.visibleSpeakerComboBox.currentText())
|
2707
|
+
)
|
2608
2708
|
self.settings.sync()
|
2609
|
-
|
2709
|
+
if preset_theme != "Native":
|
2710
|
+
self.settings.set_theme(self.current_theme)
|
2711
|
+
else:
|
2712
|
+
self.settings.themeUpdated.emit()
|
2713
|
+
super().accept()
|
2714
|
+
|
2715
|
+
def reject(self):
|
2716
|
+
self.settings.set_theme(self.initial_theme)
|
2717
|
+
self.settings.sync()
|
2718
|
+
super().reject()
|
2610
2719
|
|
2611
2720
|
|
2612
2721
|
class Application(QtWidgets.QApplication):
|
2722
|
+
def __init__(self, *args, **kwargs):
|
2723
|
+
super().__init__(*args, **kwargs)
|
2724
|
+
|
2613
2725
|
def setActiveWindow(self, act):
|
2614
2726
|
super().setActiveWindow(act)
|
2615
2727
|
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):
|