2 * This file is part of Gnome Subtitles.
3 * Copyright (C) 2006-2010 Pedro Castro
5 * Gnome Subtitles is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * Gnome Subtitles is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 using GnomeSubtitles
.Core
;
21 using GnomeSubtitles
.Core
.Command
;
24 using SubLib
.Core
.Domain
;
26 using System
.Globalization
;
28 namespace GnomeSubtitles
.Ui
{
32 /* Constant strings */
33 private string videoTagText
= Catalog
.GetString("Video");
36 private bool viewLineLengthsEnabled
= false;
39 SetToolbarHomogeneity(); //TODO needed until homogeneity definition in glade starts working
40 SetDocumentSensitivity(false);
43 Base
.InitFinished
+= OnBaseInitFinished
;
47 /* Public properties */
49 public float TimingsInputFrameRateActive
{
51 Menu menu
= Base
.GetWidget(WidgetNames
.TimingsInputFrameRateMenu
) as Menu
;
52 foreach (RadioMenuItem menuItem
in menu
.Children
) {
53 if (menuItem
.Active
) {
54 return FrameRateFromMenuItem((menuItem
.Child
as Label
).Text
);
61 public bool ViewLineLengthsEnabled
{
62 get { return viewLineLengthsEnabled; }
68 public void SetCutCopySensitivity (bool sensitivity
) {
69 SetSensitivity(WidgetNames
.EditCut
, sensitivity
);
70 SetSensitivity(WidgetNames
.EditCopy
, sensitivity
);
71 SetSensitivity(WidgetNames
.CutButton
, sensitivity
);
72 SetSensitivity(WidgetNames
.CopyButton
, sensitivity
);
75 public void SetPasteSensitivity (bool sensitivity
) {
76 SetSensitivity(WidgetNames
.EditPaste
, sensitivity
);
77 SetSensitivity(WidgetNames
.PasteButton
, sensitivity
);
80 public void UpdateActiveInputFrameRateMenuItem (bool toggleHandlers
) {
81 float inputFrameRate
= Base
.Document
.Subtitles
.Properties
.OriginalFrameRate
;
83 SetCheckMenuItemActivity(InputFrameRateMenuItem(inputFrameRate
), true, OnTimingsInputFrameRateToggled
);
85 SetCheckMenuItemActivity(InputFrameRateMenuItem(inputFrameRate
), true);
88 /* Note: this method makes the assumption that the OnTimingsVideoFrameRateToggled event handler is connected to the
89 menu item, as it is disconnected and then connected again after changing the active menu item. */
90 public void UpdateActiveVideoFrameRateMenuItem () {
91 float videoFrameRate
= Base
.Document
.Subtitles
.Properties
.CurrentFrameRate
;
92 SetCheckMenuItemActivity(VideoFrameRateMenuItem(videoFrameRate
), true, OnTimingsVideoFrameRateToggled
);
95 public void EnableFindNextPrevious () {
96 SetSensitivity(WidgetNames
.SearchFindNext
, true);
97 SetSensitivity(WidgetNames
.SearchFindPrevious
, true);
100 public void AddFrameRateVideoTag (float frameRate
) {
104 string menuItemName
= FrameRateToMenuItem(frameRate
, "Video");
105 string menuItemText
= GetMenuItemText(menuItemName
);
107 menuItemText
+= " (" + videoTagText
+ ")";
108 SetMenuItemText(menuItemName
, menuItemText
);
111 public void RemoveFrameRateVideoTag () {
112 Menu menu
= Base
.GetWidget(WidgetNames
.TimingsVideoFrameRateMenu
) as Menu
;
113 foreach (Widget child
in menu
.Children
) {
114 if (!(child
is MenuItem
))
117 MenuItem menuItem
= child
as MenuItem
;
118 string text
= GetMenuItemText(menuItem
);
119 string videoTagSuffix
= GetVideoTagSuffix();
121 int tagIndex
= text
.LastIndexOf(videoTagSuffix
);
123 text
= text
.Substring(0, tagIndex
);
124 SetMenuItemText(menuItem
, text
);
130 /* Private members */
132 /// <summary>Sets the sensitivity depending on 1 or more selected subtitles.</summary>
133 /// <param name="sensitivity">Whether the items are set sensitive.</param>
134 private void SetNonZeroSelectionDependentSensitivity (bool sensitivity
) {
135 SetStylesSensitivity(sensitivity
);
136 SetSensitivity(WidgetNames
.EditDeleteSubtitles
, sensitivity
);
137 SetSensitivity(WidgetNames
.DeleteSubtitlesButton
, sensitivity
);
140 /// <summary>Sets the sensitivity depending on exactly 1 selected subtitle.</summary>
141 /// <param name="sensitivity">Whether the items are set sensitive.</param>
142 private void SetOneSelectionDependentSensitivity (bool sensitivity
) {
143 SetVideoSelectionDependentSensitivity(sensitivity
);
146 private void SetSubtitleCountDependentSensitivity (int count
) {
148 SetSensitivity(WidgetNames
.TimingsAdjust
, false);
149 SetSensitivity(WidgetNames
.TimingsShift
, false);
151 else if (count
== 1) {
152 SetSensitivity(WidgetNames
.TimingsAdjust
, false);
153 SetSensitivity(WidgetNames
.TimingsShift
, true);
156 SetSensitivity(WidgetNames
.TimingsAdjust
, true);
157 SetSensitivity(WidgetNames
.TimingsShift
, true);
161 private void SetBlankActivity () {
162 SetCheckMenuItemActivity(WidgetNames
.ToolsAutocheckSpelling
, Base
.SpellLanguages
.Enabled
);
164 /* Set View Line Lengths */
165 this.viewLineLengthsEnabled
= Base
.Config
.PrefsViewLineLengths
;
166 SetCheckMenuItemActivity(WidgetNames
.ViewLineLengths
, this.viewLineLengthsEnabled
);
169 private void SetViewVideoActivity (bool activity
) {
170 SetCheckMenuItemActivity(WidgetNames
.ViewVideo
, activity
);
173 private void SetDocumentSensitivity (bool documentLoaded
) {
174 /* Set Sensitivity that is equal to the document loaded status */
177 SetSensitivity(WidgetNames
.FileSave
, documentLoaded
);
178 SetSensitivity(WidgetNames
.FileSaveAs
, documentLoaded
);
179 SetSensitivity(WidgetNames
.FileHeaders
, documentLoaded
);
180 SetSensitivity(WidgetNames
.FileProperties
, documentLoaded
);
181 SetSensitivity(WidgetNames
.FileTranslationNew
, documentLoaded
);
182 SetSensitivity(WidgetNames
.FileTranslationOpen
, documentLoaded
);
183 SetSensitivity(WidgetNames
.FileClose
, documentLoaded
);
185 SetMenuSensitivity(WidgetNames
.EditInsertSubtitleMenu
, documentLoaded
);
187 SetSensitivity(WidgetNames
.ViewTimes
, documentLoaded
); //TODO always visible
188 SetSensitivity(WidgetNames
.ViewFrames
, documentLoaded
); //TODO always visible
189 SetViewVideoSubtitlesSensitivity();
191 SetSensitivity(WidgetNames
.SearchFind
, documentLoaded
);
192 SetSensitivity(WidgetNames
.SearchReplace
, documentLoaded
);
194 SetSensitivity(WidgetNames
.TimingsSynchronize
, documentLoaded
);
196 SetVideoDocumentLoadedSensitivity(documentLoaded
);
198 SetToolsAutocheckSpellingSensitivity(documentLoaded
);
199 SetSensitivity(WidgetNames
.ToolsSetTextLanguage
, documentLoaded
);
201 SetSensitivity(WidgetNames
.SaveButton
, documentLoaded
);
202 SetSensitivity(WidgetNames
.InsertSubtitleButton
, documentLoaded
);
204 /* Set sensitivity that only applies when the document is not loaded */
206 if (!documentLoaded
) {
208 SetSensitivity(WidgetNames
.EditDeleteSubtitles
, false);
209 SetSensitivity(WidgetNames
.EditUndo
, false);
210 SetSensitivity(WidgetNames
.EditRedo
, false);
211 SetSensitivity(WidgetNames
.EditCut
, false);
212 SetSensitivity(WidgetNames
.EditCopy
, false);
213 SetSensitivity(WidgetNames
.EditPaste
, false);
215 SetSensitivity(WidgetNames
.SearchFindNext
, false);
216 SetSensitivity(WidgetNames
.SearchFindPrevious
, false);
218 SetSensitivity(WidgetNames
.TimingsAdjust
, false);
219 SetSensitivity(WidgetNames
.TimingsShift
, false);
221 SetSensitivity(WidgetNames
.DeleteSubtitlesButton
, false);
222 SetSensitivity(WidgetNames
.UndoButton
, false);
223 SetSensitivity(WidgetNames
.RedoButton
, false);
224 SetSensitivity(WidgetNames
.CutButton
, false);
225 SetSensitivity(WidgetNames
.CopyButton
, false);
226 SetSensitivity(WidgetNames
.PasteButton
, false);
227 /* Common for Format Menu and Toolbar */
228 SetStylesSensitivity(false);
232 private void SetTranslationSensitivity (bool sensitivity
) {
233 SetSensitivity(WidgetNames
.FileTranslationSave
, sensitivity
);
234 SetSensitivity(WidgetNames
.FileTranslationSaveAs
, sensitivity
);
235 SetSensitivity(WidgetNames
.FileTranslationClose
, sensitivity
);
236 SetSensitivity(WidgetNames
.ToolsSetTranslationLanguage
, sensitivity
);
237 SetViewVideoSubtitlesSensitivity();
240 private void SetToolsAutocheckSpellingSensitivity (bool sensitivity
) {
241 SetSensitivity(WidgetNames
.ToolsAutocheckSpelling
, sensitivity
);
244 private void SetFrameRateMenus (bool documentLoaded
) {
245 if (documentLoaded
) {
246 if (Base
.TimingMode
== TimingMode
.Frames
) {
247 UpdateActiveInputFrameRateMenuItem(false);
248 SetMenuSensitivity(WidgetNames
.TimingsInputFrameRateMenu
, true);
249 SetFrameRateMenuHandlers(Base
.GetWidget(WidgetNames
.TimingsInputFrameRateMenu
) as Menu
, true, OnTimingsInputFrameRateToggled
);
251 SetMenuSensitivity(WidgetNames
.TimingsVideoFrameRateMenu
, true);
252 SetFrameRateMenuHandlers(Base
.GetWidget(WidgetNames
.TimingsVideoFrameRateMenu
) as Menu
, true, OnTimingsVideoFrameRateToggled
);
253 UpdateActiveVideoFrameRateMenuItem();
256 UpdateActiveInputFrameRateMenuItem(false);
257 SetMenuSensitivity(WidgetNames
.TimingsInputFrameRateMenu
, false);
259 SetMenuSensitivity(WidgetNames
.TimingsVideoFrameRateMenu
, true);
260 SetFrameRateMenuHandlers(Base
.GetWidget(WidgetNames
.TimingsVideoFrameRateMenu
) as Menu
, true, OnTimingsVideoFrameRateToggled
);
261 UpdateActiveVideoFrameRateMenuItem();
265 SetFrameRateMenuHandlers(Base
.GetWidget(WidgetNames
.TimingsInputFrameRateMenu
) as Menu
, false, OnTimingsInputFrameRateToggled
);
266 SetMenuSensitivity(WidgetNames
.TimingsInputFrameRateMenu
, true);
267 SetFrameRateMenuHandlers(Base
.GetWidget(WidgetNames
.TimingsVideoFrameRateMenu
) as Menu
, false, OnTimingsVideoFrameRateToggled
);
268 SetMenuSensitivity(WidgetNames
.TimingsVideoFrameRateMenu
, false);
272 private void SetStylesActivity (bool bold
, bool italic
, bool underline
) {
273 SetCheckMenuItemActivity(WidgetNames
.EditFormatBold
, bold
, Base
.Handlers
.OnEditFormatBold
);
274 SetCheckMenuItemActivity(WidgetNames
.EditFormatItalic
, italic
, Base
.Handlers
.OnEditFormatItalic
);
275 SetCheckMenuItemActivity(WidgetNames
.EditFormatUnderline
, underline
, Base
.Handlers
.OnEditFormatUnderline
);
276 SetToggleToolButtonActivity(WidgetNames
.BoldButton
, bold
, Base
.Handlers
.OnEditFormatBold
);
277 SetToggleToolButtonActivity(WidgetNames
.ItalicButton
, italic
, Base
.Handlers
.OnEditFormatItalic
);
278 SetToggleToolButtonActivity(WidgetNames
.UnderlineButton
, underline
, Base
.Handlers
.OnEditFormatUnderline
);
281 private void SetActiveTimingMode (TimingMode mode
) {
282 if (mode
== TimingMode
.Times
)
283 SetCheckMenuItemActivity(WidgetNames
.ViewTimes
, true);
285 SetCheckMenuItemActivity(WidgetNames
.ViewFrames
, true);
288 private void SetViewVideoSubtitlesActivity (bool isTextActive
) {
290 SetCheckMenuItemActivity(WidgetNames
.ViewVideoSubtitlesText
, true);
292 SetCheckMenuItemActivity(WidgetNames
.ViewVideoSubtitlesTranslation
, true);
295 private void SetVideoSensitivity (bool sensitivity
) {
296 SetSensitivity(WidgetNames
.VideoClose
, sensitivity
);
297 SetSensitivity(WidgetNames
.VideoPlayPause
, sensitivity
);
298 SetSensitivity(WidgetNames
.VideoRewind
, sensitivity
);
299 SetSensitivity(WidgetNames
.VideoForward
, sensitivity
);
300 SetSensitivity(WidgetNames
.VideoSeekTo
, sensitivity
);
301 SetVideoDocumentLoadedSensitivity(Base
.IsDocumentLoaded
);
303 /* Set video menu dependent sensitivity if there is 1 selected subtitle. */
304 if ((Core
.Base
.Ui
.View
.Selection
.Count
== 1) && sensitivity
)
305 SetVideoSelectionDependentSensitivity(true);
307 SetVideoSelectionDependentSensitivity(false);
310 private void SetStylesSensitivity (bool sensitivity
) {
311 if (Base
.GetWidget(WidgetNames
.EditFormatBold
).Sensitive
!= sensitivity
) {
312 SetSensitivity(WidgetNames
.EditFormatBold
, sensitivity
);
313 SetSensitivity(WidgetNames
.EditFormatItalic
, sensitivity
);
314 SetSensitivity(WidgetNames
.EditFormatUnderline
, sensitivity
);
315 SetSensitivity(WidgetNames
.BoldButton
, sensitivity
);
316 SetSensitivity(WidgetNames
.ItalicButton
, sensitivity
);
317 SetSensitivity(WidgetNames
.UnderlineButton
, sensitivity
);
321 /// <summary>Set the video selection dependent menu items.</summary>
322 /// <param name="sensitivity">Whether to set the menu items sensitive.</param>
323 /// <remarks>The menu items are only set sensitive if the video is loaded.</remarks>
324 private void SetVideoSelectionDependentSensitivity (bool sensitivity
) {
325 if (Core
.Base
.Ui
.Video
.IsLoaded
&& sensitivity
) {//TODO improve this
326 SetSensitivity(WidgetNames
.VideoSeekToSelection
, true);
327 SetSensitivity(WidgetNames
.VideoSetSubtitleStart
, true);
328 SetSensitivity(WidgetNames
.VideoSetSubtitleEnd
, true);
331 SetSensitivity(WidgetNames
.VideoSeekToSelection
, false);
332 SetSensitivity(WidgetNames
.VideoSetSubtitleStart
, false);
333 SetSensitivity(WidgetNames
.VideoSetSubtitleEnd
, false);
337 private void SetViewVideoSubtitlesSensitivity () {
338 bool isVideoLoaded
= (Base
.Ui
!= null) && Base
.Ui
.Video
.IsLoaded
;
339 bool textSensitivity
= isVideoLoaded
&& Base
.IsDocumentLoaded
;
340 bool translationSensitivity
= isVideoLoaded
&& textSensitivity
&& Base
.Document
.IsTranslationLoaded
;
341 SetViewVideoSubtitlesSensitivity(textSensitivity
, translationSensitivity
);
344 private void SetViewVideoSubtitlesSensitivity (bool textSensitivity
, bool translationSensitivity
) {
345 SetSensitivity(WidgetNames
.ViewVideoSubtitlesText
, textSensitivity
);
346 SetSensitivity(WidgetNames
.ViewVideoSubtitlesTranslation
, translationSensitivity
);
349 private void SetVideoDocumentLoadedSensitivity (bool isDocumentLoaded
) {
350 bool sensitivity
= isDocumentLoaded
&& (Base
.Ui
!= null) && Base
.Ui
.Video
.IsLoaded
;
351 SetSensitivity(WidgetNames
.VideoSelectNearestSubtitle
, sensitivity
);
352 SetSensitivity(WidgetNames
.VideoLoopSelectionPlayback
, sensitivity
);
353 SetSensitivity(WidgetNames
.VideoAutoSelectSubtitles
, sensitivity
);
356 private void SetCheckMenuItemActivity (string menuItemName
, bool isActive
) {
357 (Base
.GetWidget(menuItemName
) as CheckMenuItem
).Active
= isActive
;
360 private void SetCheckMenuItemActivity (string menuItemName
, bool isActive
, EventHandler handler
) {
361 CheckMenuItem menuItem
= Base
.GetWidget(menuItemName
) as CheckMenuItem
;
362 menuItem
.Toggled
-= handler
;
363 menuItem
.Active
= isActive
;
364 menuItem
.Toggled
+= handler
;
367 private void SetToggleToolButtonActivity (string toggleToolButtonName
, bool isActive
, EventHandler handler
) {
368 ToggleToolButton toggleToolButton
= Base
.GetWidget(toggleToolButtonName
) as ToggleToolButton
;
369 toggleToolButton
.Toggled
-= handler
;
370 toggleToolButton
.Active
= isActive
;
371 toggleToolButton
.Toggled
+= handler
;
374 private void SetSensitivity (string widgetName
, bool isSensitive
) {
375 Widget widget
= Base
.GetWidget(widgetName
);
377 widget
.Sensitive
= isSensitive
;
380 private void SetMenuSensitivity (string menuName
, bool sensitivity
) {
381 Menu menu
= Base
.GetWidget(menuName
) as Menu
;
382 foreach (Widget widget
in menu
)
383 widget
.Sensitive
= sensitivity
;
386 private void GetGlobalStyles (TreePath
[] paths
, out bool bold
, out bool italic
, out bool underline
) {
387 Ui
.View
.Subtitles subtitles
= Base
.Document
.Subtitles
;
391 foreach (TreePath path
in paths
) {
392 Subtitle subtitle
= subtitles
[path
];
393 if ((bold
== true) && !subtitle
.Style
.Bold
) //bold hasn't been unset
395 if ((italic
== true) && !subtitle
.Style
.Italic
)
397 if ((underline
== true) && !subtitle
.Style
.Underline
)
402 private string InputFrameRateMenuItem (float frameRate
) {
403 return FrameRateToMenuItem(frameRate
, "Input");
406 private string VideoFrameRateMenuItem (float frameRate
) {
407 return FrameRateToMenuItem(frameRate
, "Video");
410 private string FrameRateToMenuItem (float frameRate
, string type
) {
414 else if (frameRate
>= 27)
416 else if (frameRate
>= 25)
418 else if (frameRate
>= 24)
423 return "timings" + type
+ "FrameRate" + rate
;
426 private string GetMenuItemText (string menuItemName
) {
427 MenuItem menuItem
= Base
.GetWidget(menuItemName
) as MenuItem
;
428 return GetMenuItemText(menuItem
);
431 private string GetMenuItemText (MenuItem menuItem
) {
432 Label label
= menuItem
.Child
as Label
;
436 private void SetMenuItemText (string menuItemName
, string text
) {
437 MenuItem menuItem
= Base
.GetWidget(menuItemName
) as MenuItem
;
438 SetMenuItemText(menuItem
, text
);
441 private void SetMenuItemText (MenuItem menuItem
, string text
) {
442 Label label
= menuItem
.Child
as Label
;
446 private string GetVideoTagSuffix () {
447 return " (" + videoTagText
+ ")";
450 private void SetToolbarHomogeneity () {
451 Toolbar toolbar
= Base
.GetWidget(WidgetNames
.Toolbar
) as Toolbar
;
452 Widget
[] toolItems
= toolbar
.Children
;
453 foreach (Widget item
in toolItems
)
454 (item
as ToolItem
).Homogeneous
= false;
457 private void UpdateUndoRedoMessages () {
458 CommandManager commandManager
= Base
.CommandManager
;
460 /* Update undo messages */
461 ToolButton undoButton
= Base
.GetWidget(WidgetNames
.UndoButton
) as ToolButton
;
462 if (commandManager
.CanUndo
) {
463 string undoDescription
= commandManager
.UndoDescription
;
464 SetTooltip(undoButton
, undoDescription
);
465 MenuItem undoMenuItem
= Base
.GetWidget(WidgetNames
.EditUndo
) as MenuItem
;
466 (undoMenuItem
.Child
as Label
).Text
= undoDescription
;
469 ClearTooltip(undoButton
);
471 /* Update redo messages */
472 ToolButton redoButton
= Base
.GetWidget(WidgetNames
.RedoButton
) as ToolButton
;
473 if (commandManager
.CanRedo
) {
474 string redoDescription
= commandManager
.RedoDescription
;
475 SetTooltip(redoButton
, redoDescription
);
476 MenuItem redoMenuItem
= Base
.GetWidget(WidgetNames
.EditRedo
) as MenuItem
;
477 (redoMenuItem
.Child
as Label
).Text
= redoDescription
;
480 ClearTooltip(redoButton
);
483 private void SetTooltip (Widget widget
, string text
) {
484 widget
.TooltipText
= text
;
487 private void ClearTooltip (Widget widget
) {
488 SetTooltip(widget
, null);
491 private float FrameRateFromMenuItem (string menuItem
) {
492 string frameRateText
= menuItem
.Split(' ')[0];
493 NumberFormatInfo invariant
= NumberFormatInfo
.InvariantInfo
;
494 return (float)Convert
.ToDouble(frameRateText
, invariant
);
500 private void OnBaseInitFinished () {
501 Base
.DocumentLoaded
+= OnBaseDocumentLoaded
;
502 Base
.DocumentUnloaded
+= OnBaseDocumentUnloaded
;
503 Base
.VideoLoaded
+= OnBaseVideoLoaded
;
504 Base
.VideoUnloaded
+= OnBaseVideoUnloaded
;
505 Base
.TranslationLoaded
+= OnBaseTranslationLoaded
;
506 Base
.TranslationUnloaded
+= OnBaseTranslationUnloaded
;
507 Base
.Ui
.View
.Selection
.Changed
+= OnSubtitleViewSelectionChanged
;
508 Base
.Ui
.View
.SubtitleCountChanged
+= OnSubtitleViewCountChanged
;
509 Base
.SpellLanguages
.TextLanguageChanged
+= OnSpellLanguagesLanguageChanged
;
510 Base
.SpellLanguages
.TranslationLanguageChanged
+= OnSpellLanguagesLanguageChanged
;
511 Base
.CommandManager
.UndoToggled
+= OnCommandManagerUndoToggled
;
512 Base
.CommandManager
.RedoToggled
+= OnCommandManagerRedoToggled
;
513 Base
.CommandManager
.CommandActivated
+= OnCommandManagerCommandActivated
;
515 (Base
.GetWidget(WidgetNames
.ViewLineLengths
) as CheckMenuItem
).Toggled
+= OnViewLineLengthsToggled
;
518 private void OnBaseDocumentLoaded (Document document
) {
519 SetDocumentSensitivity(true);
520 SetFrameRateMenus(true);
521 SetActiveTimingMode(Base
.TimingMode
);
522 SetCheckMenuItemActivity(WidgetNames
.ToolsAutocheckSpelling
, Base
.SpellLanguages
.Enabled
);
525 private void OnBaseDocumentUnloaded (Document document
) {
526 SetDocumentSensitivity(false);
527 SetFrameRateMenus(false);
530 private void OnBaseVideoLoaded (Uri videoUri
) {
531 SetVideoSensitivity(true);
532 SetViewVideoSubtitlesSensitivity();
533 SetViewVideoActivity(true);
535 if (Base
.Ui
.Video
.HasVideo
) {
536 AddFrameRateVideoTag(Base
.Ui
.Video
.FrameRate
);
540 private void OnBaseVideoUnloaded () {
541 SetVideoSensitivity(false);
542 SetViewVideoSubtitlesSensitivity(false, false);
545 private void OnSubtitleViewCountChanged (int count
) {
546 SetSubtitleCountDependentSensitivity(count
);
549 private void OnBaseTranslationLoaded () {
550 SetTranslationSensitivity(true);
551 UpdateUndoRedoMessages();
554 private void OnBaseTranslationUnloaded () {
555 SetTranslationSensitivity(false);
556 SetViewVideoSubtitlesActivity(true);
557 UpdateUndoRedoMessages();
560 private void OnSubtitleViewSelectionChanged (TreePath
[] paths
, Subtitle subtitle
) {
561 if (subtitle
!= null) {
562 /* One subtitle selected */
563 SetStylesActivity(subtitle
.Style
.Bold
, subtitle
.Style
.Italic
, subtitle
.Style
.Underline
);
564 SetNonZeroSelectionDependentSensitivity(true);
565 SetOneSelectionDependentSensitivity(true);
568 SetOneSelectionDependentSensitivity(false);
570 if (paths
.Length
== 0) {
572 SetNonZeroSelectionDependentSensitivity(false);
573 SetStylesActivity(false, false, false);
576 /* Multiple paths selected */
577 SetNonZeroSelectionDependentSensitivity(true);
578 bool bold
, italic
, underline
;
579 GetGlobalStyles(paths
, out bold
, out italic
, out underline
);
580 SetStylesActivity(bold
, italic
, underline
);
585 private void OnSpellLanguagesLanguageChanged () {
586 SetToolsAutocheckSpellingSensitivity(true);
589 private void OnCommandManagerUndoToggled (object o
, EventArgs args
) {
590 Widget button
= Base
.GetWidget(WidgetNames
.UndoButton
);
591 button
.Sensitive
= !button
.Sensitive
;
593 MenuItem menuItem
= Base
.GetWidget(WidgetNames
.EditUndo
) as MenuItem
;
594 menuItem
.Sensitive
= !menuItem
.Sensitive
;
595 if (!menuItem
.Sensitive
)
596 (menuItem
.Child
as Label
).Text
= Catalog
.GetString("Undo");
599 private void OnCommandManagerRedoToggled (object o
, EventArgs args
) {
600 Widget button
= Base
.GetWidget(WidgetNames
.RedoButton
);
601 button
.Sensitive
= !button
.Sensitive
;
603 MenuItem menuItem
= Base
.GetWidget(WidgetNames
.EditRedo
) as MenuItem
;
604 menuItem
.Sensitive
= !menuItem
.Sensitive
;
605 if (!menuItem
.Sensitive
)
606 (menuItem
.Child
as Label
).Text
= Catalog
.GetString("Redo");
609 private void OnCommandManagerCommandActivated (object o
, CommandActivatedArgs args
) {
610 UpdateUndoRedoMessages();
614 private void OnTimingsInputFrameRateToggled (object o
, EventArgs args
) {
615 RadioMenuItem menuItem
= o
as RadioMenuItem
;
616 if (menuItem
.Active
) {
617 float frameRate
= FrameRateFromMenuItem((menuItem
.Child
as Label
).Text
);
618 Base
.CommandManager
.Execute(new ChangeInputFrameRateCommand(frameRate
));
622 private void OnTimingsVideoFrameRateToggled (object o
, EventArgs args
) {
623 RadioMenuItem menuItem
= o
as RadioMenuItem
;
624 if (menuItem
.Active
) {
625 float frameRate
= FrameRateFromMenuItem((menuItem
.Child
as Label
).Text
);
626 Base
.CommandManager
.Execute(new ChangeVideoFrameRateCommand(frameRate
));
630 private void SetFrameRateMenuHandlers (Menu menu
, bool enable
, EventHandler handler
) {
631 foreach (RadioMenuItem menuItem
in menu
.Children
) {
633 menuItem
.Toggled
+= handler
;
635 menuItem
.Toggled
-= handler
;
639 private void OnViewLineLengthsToggled (object o
, EventArgs args
) {
640 bool newValue
= ((o
as CheckMenuItem
).Active
);
641 if (newValue
!= viewLineLengthsEnabled
) {
642 viewLineLengthsEnabled
= newValue
;
643 Base
.Config
.PrefsViewLineLengths
= newValue
;
644 Base
.Ui
.View
.Refresh();