[longomatch/rework] WPI
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch/rework] WPI
- Date: Sun, 18 Aug 2013 13:40:04 +0000 (UTC)
commit c131900047c6148be213031d8b7d3fa28ec5e62b
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Sun Aug 18 15:38:14 2013 +0200
WPI
LongoMatch.Addins/AddinsManager.cs | 4 +-
.../GUI/{IMainWindow.cs => IAnalysisWindow.cs} | 30 +-
LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs | 2 +-
LongoMatch.Core/Interfaces/GUI/IMainController.cs | 42 ++
.../Interfaces/GUI/IProjectOptionsController.cs | 34 +
LongoMatch.Core/LongoMatch.Core.mdp | 4 +-
LongoMatch.GUI/Gui/Component/AnalysisComponent.cs | 594 +++++++++++++++++
.../Gui/Component/SubcategoiesTagsEditor.cs | 131 ++++
LongoMatch.GUI/Gui/GUIToolkit.cs | 4 +-
LongoMatch.GUI/Gui/MainWindow.cs | 668 +-------------------
LongoMatch.GUI/LongoMatch.GUI.mdp | 2 +
.../LongoMatch.Gui.Component.AnalysisComponent.cs | 7 +
...goMatch.Gui.Component.SubcategoiesTagsEditor.cs | 197 ++++++
LongoMatch.GUI/gtk-gui/gui.stetic | 379 ++++++------
LongoMatch.GUI/gtk-gui/objects.xml | 29 +
LongoMatch.Services/LongoMatch.Services.mdp | 1 +
LongoMatch.Services/Services/Core.cs | 4 +-
LongoMatch.Services/Services/EventsManager.cs | 2 +-
LongoMatch.Services/Services/GameUnitsManager.cs | 4 +-
LongoMatch.Services/Services/HotKeysManager.cs | 2 +-
LongoMatch.Services/Services/PlaylistManager.cs | 2 +-
.../Services/ProjectOptionsManager.cs | 91 +++
LongoMatch.Services/Services/ProjectsManager.cs | 41 ++-
23 files changed, 1410 insertions(+), 864 deletions(-)
---
diff --git a/LongoMatch.Addins/AddinsManager.cs b/LongoMatch.Addins/AddinsManager.cs
index 1be19be..a6be4f8 100644
--- a/LongoMatch.Addins/AddinsManager.cs
+++ b/LongoMatch.Addins/AddinsManager.cs
@@ -48,7 +48,7 @@ namespace LongoMatch.Addins
}
}
- public void LoadExportProjectAddins(IMainWindow mainWindow) {
+ public void LoadExportProjectAddins(IAnalysisWindow mainWindow) {
foreach (IExportProject exportProject in
AddinManager.GetExtensionObjects<IExportProject> ()) {
try {
mainWindow.AddExportEntry(exportProject.GetMenuEntryName(),
exportProject.GetMenuEntryShortName(),
@@ -60,7 +60,7 @@ namespace LongoMatch.Addins
}
}
- public void LoadImportProjectAddins(IMainWindow mainWindow) {
+ public void LoadImportProjectAddins(IAnalysisWindow mainWindow) {
foreach (IImportProject importProject in
AddinManager.GetExtensionObjects<IImportProject> ()) {
try{
mainWindow.AddImportEntry(importProject.GetMenuEntryName(),
importProject.GetMenuEntryShortName(),
diff --git a/LongoMatch.Core/Interfaces/GUI/IMainWindow.cs b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
similarity index 78%
rename from LongoMatch.Core/Interfaces/GUI/IMainWindow.cs
rename to LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
index c6bc27e..6e7ab93 100644
--- a/LongoMatch.Core/Interfaces/GUI/IMainWindow.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IAnalysisWindow.cs
@@ -25,7 +25,7 @@ using LongoMatch.Store.Templates;
namespace LongoMatch.Interfaces.GUI
{
- public interface IMainWindow
+ public interface IAnalysisWindow
{
/* Tags */
event NewTagHandler NewTagEvent;
@@ -49,25 +49,6 @@ namespace LongoMatch.Interfaces.GUI
/* Snapshots */
event SnapshotSeriesHandler SnapshotSeriesEvent;
- /* Projects */
- event SaveProjectHandler SaveProjectEvent;
- event NewProjectHandler NewProjectEvent;
- event OpenProjectHandler OpenProjectEvent;
- event CloseOpenendProjectHandler CloseOpenedProjectEvent;
- event ImportProjectHandler ImportProjectEvent;
- event ExportProjectHandler ExportProjectEvent;
-
- /* Managers */
- event ManageJobsHandler ManageJobsEvent;
- event ManageTeamsHandler ManageTeamsEvent;
- event ManageCategoriesHandler ManageCategoriesEvent;
- event ManageProjects ManageProjectsEvent;
- event ManageDatabases ManageDatabasesEvent;
- event EditPreferences EditPreferencesEvent;
-
- /* Stats */
- event ShowProjectStats ShowProjectStatsEvent;
-
/* Game Units events */
event GameUnitHandler GameUnitEvent;
event UnitChangedHandler UnitChanged;
@@ -77,16 +58,19 @@ namespace LongoMatch.Interfaces.GUI
event KeyHandler KeyPressed;
- /* Convert Video Files */
- event ConvertVideoFilesHandler ConvertVideoFilesEvent;
-
void SetProject(Project project, ProjectType projectType, CaptureSettings props, PlaysFilter
filter);
+ void CloseOpenedProject ();
void AddPlay(Play play);
void UpdateSelectedPlay (Play play);
void UpdateCategories (Categories categories);
void DeletePlays (List<Play> plays);
void UpdateGameUnits (GameUnitsList gameUnits);
+ bool Fullscreen {set;}
+ bool WidgetsVisible {set;}
+ bool PlaylistVisible {set;}
+ VideoAnalysisMode AnalysisMode {set;}
+
IRenderingStateBar RenderingStateBar{get;}
IPlayer Player{get;}
ICapturer Capturer{get;}
diff --git a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
index e6af4d1..10e4ee6 100644
--- a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
@@ -30,7 +30,7 @@ namespace LongoMatch.Interfaces.GUI
{
public interface IGUIToolkit
{
- IMainWindow MainWindow {get;}
+ IAnalysisWindow MainWindow {get;}
Version Version {get;}
/* Messages */
diff --git a/LongoMatch.Core/Interfaces/GUI/IMainController.cs
b/LongoMatch.Core/Interfaces/GUI/IMainController.cs
new file mode 100644
index 0000000..e10a33f
--- /dev/null
+++ b/LongoMatch.Core/Interfaces/GUI/IMainController.cs
@@ -0,0 +1,42 @@
+//
+// Copyright (C) 2013 Andoni Morales Alastruey
+//
+// 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 2 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, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+
+namespace LongoMatch.Interfaces.GUI
+{
+ public interface IMainController
+ {
+ /* Projects */
+ event NewProjectHandler NewProjectEvent;
+ event OpenProjectHandler OpenProjectEvent;
+ event ImportProjectHandler ImportProjectEvent;
+ event ExportProjectHandler ExportProjectEvent;
+
+ /* Managers */
+ event ManageJobsHandler ManageJobsEvent;
+ event ManageTeamsHandler ManageTeamsEvent;
+ event ManageCategoriesHandler ManageCategoriesEvent;
+ event ManageProjects ManageProjectsEvent;
+ event ManageDatabases ManageDatabasesEvent;
+ event EditPreferences EditPreferencesEvent;
+
+ /* Convert Video Files */
+ event ConvertVideoFilesHandler ConvertVideoFilesEvent;
+ }
+}
+
diff --git a/LongoMatch.Core/Interfaces/GUI/IProjectOptionsController.cs
b/LongoMatch.Core/Interfaces/GUI/IProjectOptionsController.cs
new file mode 100644
index 0000000..e9b8582
--- /dev/null
+++ b/LongoMatch.Core/Interfaces/GUI/IProjectOptionsController.cs
@@ -0,0 +1,34 @@
+//
+// Copyright (C) 2013 Andoni Morales Alastruey
+//
+// 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 2 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, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+
+namespace LongoMatch.Interfaces.GUI
+{
+ public interface IProjectOptionsController
+ {
+ event SaveProjectHandler SaveProjectEvent;
+ event CloseOpenendProjectHandler CloseOpenedProjectEvent;
+ event ShowFullScreenHandler ShowFullScreenEvent;
+ event PlaylistVisibiltyHandler PlaylistVisibilityEvent;
+ event AnalysisWidgetsVisibilityHandler AnalysisWidgetsVisibilityEvent;
+ event AnalysisModeChangedHandler AnalysisModeChangedEvent;
+ event ShowProjectStats ShowProjectStatsEvent;
+ event TagSubcategoriesChangedHandler TagSubcategoriesChangedEvent;
+ }
+}
+
diff --git a/LongoMatch.Core/LongoMatch.Core.mdp b/LongoMatch.Core/LongoMatch.Core.mdp
index e2d0055..eb0276c 100644
--- a/LongoMatch.Core/LongoMatch.Core.mdp
+++ b/LongoMatch.Core/LongoMatch.Core.mdp
@@ -74,7 +74,7 @@
<File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IRenderingStateBar.cs" />
<File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IPlayer.cs" />
<File subtype="Code" buildaction="Compile" name="Handlers/Multimedia.cs" />
- <File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IMainWindow.cs" />
+ <File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IAnalysisWindow.cs" />
<File subtype="Code" buildaction="Compile" name="Interfaces/GUI/ICapturer.cs" />
<File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IPlaylistWidget.cs" />
<File subtype="Directory" buildaction="Compile" name="Interfaces" />
@@ -107,6 +107,8 @@
<File subtype="Code" buildaction="Compile" name="Common/EncodingQuality.cs" />
<File subtype="Code" buildaction="Compile" name="Common/Gettext.cs" />
<File subtype="Code" buildaction="Compile" name="Common/Exceptions.cs" />
+ <File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IMainController.cs" />
+ <File subtype="Code" buildaction="Compile" name="Interfaces/GUI/IProjectOptionsController.cs" />
</Contents>
<References>
<ProjectReference type="Gac" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
new file mode 100644
index 0000000..07e4690
--- /dev/null
+++ b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
@@ -0,0 +1,594 @@
+//
+// Copyright (C) 2013 Andoni Morales Alastruey
+//
+// 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 2 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, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+using LongoMatch.Interfaces.GUI;
+
+namespace LongoMatch.Gui.Component
+{
+ [System.ComponentModel.ToolboxItem(true)]
+ public partial class AnalysisComponent : Gtk.Bin, IAnalysisWindow
+ {
+ /* Tags */
+ public event NewTagHandler NewTagEvent;
+ public event NewTagStartHandler NewTagStartEvent;
+ public event NewTagStopHandler NewTagStopEvent;
+ public event PlaySelectedHandler PlaySelectedEvent;
+ public event NewTagAtFrameHandler NewTagAtFrameEvent;
+ public event TagPlayHandler TagPlayEvent;
+ public event PlaysDeletedHandler PlaysDeletedEvent;
+ public event TimeNodeChangedHandler TimeNodeChanged;
+ public event PlayCategoryChangedHandler PlayCategoryChanged;
+
+ /* Playlist */
+ public event RenderPlaylistHandler RenderPlaylistEvent;
+ public event PlayListNodeAddedHandler PlayListNodeAddedEvent;
+ public event PlayListNodeSelectedHandler PlayListNodeSelectedEvent;
+ public event OpenPlaylistHandler OpenPlaylistEvent;
+ public event NewPlaylistHandler NewPlaylistEvent;
+ public event SavePlaylistHandler SavePlaylistEvent;
+
+ /* Snapshots */
+ public event SnapshotSeriesHandler SnapshotSeriesEvent;
+
+ /* Game Units events */
+ public event GameUnitHandler GameUnitEvent;
+ public event UnitChangedHandler UnitChanged;
+ public event UnitSelectedHandler UnitSelected;
+ public event UnitsDeletedHandler UnitDeleted;
+ public event UnitAddedHandler UnitAdded;
+
+ public event KeyHandler KeyPressed;
+
+ static Project openedProject;
+ ProjectType projectType;
+ TimeNode selectedTimeNode;
+ TimeLineWidget timeline;
+ bool gameUnitsActionVisible, detachedPlayer;
+ GameUnitsTimelineWidget guTimeline;
+ IGUIToolkit guiToolKit;
+ Gtk.Window playerWindow;
+
+ public AnalysisComponent ()
+ {
+ this.Build ();
+ projectType = ProjectType.None;
+
+ timeline = new TimeLineWidget();
+ downbox.PackStart(timeline, true, true, 0);
+
+ guTimeline = new GameUnitsTimelineWidget ();
+ downbox.PackStart(guTimeline, true, true, 0);
+
+ playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
+ playercapturer.SetLogo(System.IO.Path.Combine(Config.ImagesDir,"background.png"));
+ playercapturer.LogoMode = true;
+ playercapturer.Tick += OnTick;
+ playercapturer.Detach += DetachPlayer;
+ playercapturer.Logo = System.IO.Path.Combine(Config.ImagesDir,"background.png");
+ playercapturer.CaptureFinished += (sender, e) => {CloseCaptureProject();};
+
+ buttonswidget.Mode = TagMode.Predifined;
+ ConnectSignals();
+ ConnectMenuSignals();
+
+ postagger.SetMode (false);
+ }
+
+ public IPlayer Player{
+ get {
+ return playercapturer;
+ }
+ }
+
+ public ICapturer Capturer{
+ get {
+ return playercapturer;
+ }
+ }
+
+ public IPlaylistWidget Playlist{
+ get {
+ return playlist;
+ }
+ }
+
+ public ITemplatesService TemplatesService {
+ set {
+ playsSelection.TemplatesService = value;
+ }
+ }
+
+ public void AddPlay(Play play) {
+ playsSelection.AddPlay(play);
+ timeline.AddPlay(play);
+ timeline.QueueDraw();
+ }
+
+ public void UpdateSelectedPlay (Play play) {
+ selectedTimeNode = play;
+ timeline.SelectedTimeNode = play;
+ postagger.LoadPlay (play, false);
+ SetTagsBoxVisibility (true);
+ notes.Play= play;
+ }
+
+ public void UpdateCategories (Categories categories) {
+ buttonswidget.Categories = openedProject.Categories;
+ }
+
+ public void DeletePlays (List<Play> plays) {
+ playsSelection.RemovePlays(plays);
+ timeline.RemovePlays(plays);
+ timeline.QueueDraw();
+ }
+
+ public void UpdateGameUnits (GameUnitsList gameUnits) {
+ gameUnitsActionVisible = gameUnits != null && gameUnits.Count > 0;
+ GameUnitsViewAction.Sensitive = gameUnitsActionVisible;
+ if (gameUnits == null) {
+ gameunitstaggerwidget1.Visible = false;
+ return;
+ }
+ gameunitstaggerwidget1.Visible = true;
+ gameunitstaggerwidget1.GameUnits = gameUnits;
+ }
+
+ private void ConnectSignals() {
+ /* Adding Handlers for each event */
+
+ /* Connect new mark event */
+ buttonswidget.NewMarkEvent += EmitNewTag;;
+ buttonswidget.NewMarkStartEvent += EmitNewTagStart;
+ buttonswidget.NewMarkStopEvent += EmitNewTagStop;
+ timeline.NewMarkEvent += EmitNewTagAtFrame;
+
+ /* Connect TimeNodeChanged events */
+ timeline.TimeNodeChanged += EmitTimeNodeChanged;
+ notes.TimeNodeChanged += EmitTimeNodeChanged;
+
+ /* Connect TimeNodeDeleted events */
+ playsSelection.PlaysDeleted += EmitPlaysDeleted;
+ timeline.TimeNodeDeleted += EmitPlaysDeleted;
+
+ /* Connect TimeNodeSelected events */
+ playsSelection.PlaySelected += OnTimeNodeSelected;
+ timeline.TimeNodeSelected += OnTimeNodeSelected;
+
+ /* Connect TimeNodeChangedEvent */
+ playsSelection.TimeNodeChanged += EmitTimeNodeChanged;
+
+ /* Connect PlayCategoryChanged events */
+ playsSelection.PlayCategoryChanged += EmitPlayCategoryChanged;
+
+ /* Connect playlist events */
+ playlist.PlayListNodeSelected += EmitPlayListNodeSelected;
+ playlist.NewPlaylistEvent += EmitNewPlaylist;
+ playlist.OpenPlaylistEvent += EmitOpenPlaylist;
+ playlist.SavePlaylistEvent += EmitSavePlaylist;
+
+ /* Connect PlayListNodeAdded events */
+ playsSelection.PlayListNodeAdded += OnPlayListNodeAdded;
+ timeline.PlayListNodeAdded += OnPlayListNodeAdded;
+
+ /* Connect tags events */
+ playsSelection.TagPlay += EmitTagPlay;
+ timeline.TagPlay += EmitTagPlay;
+
+ /* Connect SnapshotSeries events */
+ playsSelection.SnapshotSeries += EmitSnapshotSeries;
+ timeline.SnapshotSeries += EmitSnapshotSeries;
+
+ playlist.RenderPlaylistEvent += EmitRenderPlaylist;
+ playsSelection.RenderPlaylist += EmitRenderPlaylist;
+ timeline.RenderPlaylist += EmitRenderPlaylist;
+
+ /* Game Units event */
+ gameunitstaggerwidget1.GameUnitEvent += EmitGameUnitEvent;
+ guTimeline.UnitAdded += EmitUnitAdded;;
+ guTimeline.UnitDeleted += EmitUnitDeleted;
+ guTimeline.UnitSelected += EmitUnitSelected;
+ guTimeline.UnitChanged += EmitUnitChanged;
+
+ playercapturer.Error += OnMultimediaError;
+ playercapturer.SegmentClosedEvent += OnSegmentClosedEvent;
+
+ KeyPressEvent += (o, args) => (EmitKeyPressed(o, (int)args.Event.Key,
(int)args.Event.State));
+ }
+
+ void DetachPlayer (bool detach) {
+ if (detach == detachedPlayer)
+ return;
+
+ detachedPlayer = detach;
+
+ if (detach) {
+ EventBox box;
+ Log.Debug("Detaching player");
+
+ playerWindow = new Gtk.Window(Constants.SOFTWARE_NAME);
+ playerWindow.Icon = Stetic.IconLoader.LoadIcon(this, "longomatch",
IconSize.Button);
+ playerWindow.DeleteEvent += (o, args) => DetachPlayer(false);
+ box = new EventBox();
+
+ box.KeyPressEvent += (o, args) => OnKeyPressEvent(args.Event);
+ playerWindow.Add(box);
+
+ box.Show();
+ playerWindow.Show();
+
+ playercapturer.Reparent(box);
+ buttonswidget.Visible = true;
+ timeline.Visible = true;
+ if (Config.UseGameUnits) {
+ guTimeline.Visible = true;
+ gameunitstaggerwidget1.Visible = true;
+ }
+ videowidgetsbox.Visible = false;
+ } else {
+ ToggleAction action;
+
+ Log.Debug("Attaching player again");
+ videowidgetsbox.Visible = true;
+ playercapturer.Reparent(this.videowidgetsbox);
+ playerWindow.Destroy();
+
+ if (ManualTaggingViewAction.Active)
+ action = ManualTaggingViewAction;
+ else if (TimelineViewAction.Active)
+ action = TimelineViewAction;
+ else if (GameUnitsViewAction.Active)
+ action = GameUnitsViewAction;
+ else
+ action = TaggingViewAction;
+ OnViewToggled(action, new EventArgs());
+ }
+ playercapturer.Detached = detach;
+ }
+
+ public void SetProject(Project project, ProjectType projectType, CaptureSettings props,
PlaysFilter filter)
+ {
+ bool isLive = false;
+
+ /* Update tabs labels */
+ var desc = project.Description;
+
+ ExportProjectAction1.Sensitive = true;
+
+ if(projectType == ProjectType.FileProject) {
+ playercapturer.LogoMode = false;
+ timeline.SetProject (project, filter);
+ guTimeline.Project = project;
+
+ } else {
+ isLive = true;
+ if(projectType == ProjectType.FakeCaptureProject) {
+ playercapturer.Type = CapturerType.Fake;
+ playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Capturer;
+ } else {
+ playercapturer.Mode =
PlayerCapturerBin.PlayerOperationMode.PreviewCapturer;
+ }
+ }
+
+ openedProject = project;
+ this.projectType = projectType;
+
+ filter.FilterUpdated += OnFilterUpdated;
+ playsSelection.SetProject(project, isLive, filter);
+ buttonswidget.Categories = project.Categories;
+ postagger.LoadBackgrounds (openedProject.Categories.FieldBackground,
+ openedProject.Categories.HalfFieldBackground,
+ openedProject.Categories.GoalBackground);
+ ShowWidgets();
+ }
+
+ void SetPlaylistVisibility (bool visible) {
+ if (visible) {
+ righthbox.Visible = true;
+ playlist.Visible = true;
+ } else {
+ playlist.Visible = false;
+ if (!tagsvbox.Visible)
+ righthbox.Visible = false;
+ }
+ }
+
+ void SetTagsBoxVisibility (bool visible) {
+ if (visible) {
+ righthbox.Visible = true;
+ tagsvbox.Visible = true;
+ } else {
+ tagsvbox.Visible = false;
+ if (!playlist.Visible)
+ righthbox.Visible = false;
+ }
+ }
+
+ private void CloseCaptureProject() {
+ if(projectType == ProjectType.CaptureProject ||
+ projectType == ProjectType.URICaptureProject) {
+ playercapturer.Close();
+ playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
+ EmitSaveProject();
+ } else if(projectType == ProjectType.FakeCaptureProject) {
+ EmitCloseOpenedProject(true);
+ }
+ }
+
+ private void ResetGUI() {
+ bool playlistVisible = playlist.Visible;
+ playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
+ playercapturer.LogoMode = true;
+ ClearWidgets();
+ HideWidgets();
+ SetPlaylistVisibility (playlistVisible);
+ SetTagsBoxVisibility (false);
+ selectedTimeNode = null;
+ if (detachedPlayer)
+ DetachPlayer(false);
+ }
+
+ private void ShowWidgets() {
+ leftbox.Show();
+ if(TaggingViewAction.Active || ManualTaggingViewAction.Active) {
+ buttonswidget.Show();
+ gameunitstaggerwidget1.Show();
+ } else if (TimelineViewAction.Active) {
+ timeline.Show();
+ } else if (GameUnitsViewAction.Active) {
+ gameunitstaggerwidget1.Show();
+ guTimeline.Show();
+ }
+ }
+
+ private void HideWidgets() {
+ leftbox.Hide();
+ SetTagsBoxVisibility (false);
+ buttonswidget.Hide();
+ timeline.Hide();
+ gameunitstaggerwidget1.Hide();
+ guTimeline.Hide();
+ }
+
+ private void ClearWidgets() {
+ buttonswidget.Categories = null;
+ playsSelection.Clear();
+ }
+
+ protected override bool OnKeyPressEvent(EventKey evnt)
+ {
+ Gdk.Key key = evnt.Key;
+ Gdk.ModifierType modifier = evnt.State;
+ bool ret;
+
+ ret = base.OnKeyPressEvent(evnt);
+
+ if(openedProject == null && !playercapturer.Opened)
+ return ret;
+
+ if(projectType != ProjectType.CaptureProject &&
+ projectType != ProjectType.URICaptureProject &&
+ projectType != ProjectType.FakeCaptureProject) {
+ switch(key) {
+ case Constants.SEEK_FORWARD:
+ if(modifier == Constants.STEP)
+ playercapturer.StepForward();
+ else
+ playercapturer.SeekToNextFrame(selectedTimeNode != null);
+ break;
+ case Constants.SEEK_BACKWARD:
+ if(modifier == Constants.STEP)
+ playercapturer.StepBackward();
+ else
+ playercapturer.SeekToPreviousFrame(selectedTimeNode != null);
+ break;
+ case Constants.FRAMERATE_UP:
+ playercapturer.FramerateUp();
+ break;
+ case Constants.FRAMERATE_DOWN:
+ playercapturer.FramerateDown();
+ break;
+ case Constants.TOGGLE_PLAY:
+ playercapturer.TogglePlay();
+ break;
+ }
+ } else {
+ switch(key) {
+ case Constants.TOGGLE_PLAY:
+ playercapturer.TogglePause();
+ break;
+ }
+ }
+ return ret;
+ }
+
+ protected virtual void OnTimeNodeSelected(Play play)
+ {
+ SetTagsBoxVisibility (true);
+ if (PlaySelectedEvent != null)
+ PlaySelectedEvent(play);
+ }
+
+ protected virtual void OnSegmentClosedEvent()
+ {
+ SetTagsBoxVisibility (false);
+ timeline.SelectedTimeNode = null;
+ selectedTimeNode = null;
+ }
+
+ protected virtual void OnTick(object o, long currentTime, long streamLength,
+ float currentPosition, bool seekable)
+ {
+ if(currentTime != 0 && timeline != null && openedProject != null) {
+ uint frame = (uint)(currentTime * openedProject.Description.File.Fps / 1000);
+ timeline.CurrentFrame = frame;
+ guTimeline.CurrentFrame = frame;
+ }
+ gameunitstaggerwidget1.CurrentTime = new Time{MSeconds = (int)currentTime};
+ }
+
+ protected virtual void OnUpdate(Version version, string URL) {
+ LongoMatch.Gui.Dialog.UpdateDialog updater = new LongoMatch.Gui.Dialog.UpdateDialog();
+ updater.Fill(version, URL);
+ updater.TransientFor = this;
+ updater.Run();
+ updater.Destroy();
+ }
+
+ protected virtual void OnDrawingToolActionToggled(object sender, System.EventArgs e)
+ {
+ drawingtoolbox1.Visible = DrawingToolAction.Active;
+ drawingtoolbox1.DrawingVisibility = DrawingToolAction.Active;
+ }
+
+ protected override bool OnDeleteEvent(Gdk.Event evnt)
+ {
+ CloseAndQuit();
+ return true;
+ }
+
+ protected virtual void OnMultimediaError(object o, string message)
+ {
+ MessagesHelpers.ErrorMessage (this,
+ Catalog.GetString("The following error happened and" +
+ " the current project will be closed:")+"\n" + message);
+ EmitCloseOpenedProject(true);
+ }
+
+ protected virtual void OnFilterUpdated()
+ {
+ }
+
+
+ private void EmitPlaySelected(Play play)
+ {
+ if (PlaySelectedEvent != null)
+ PlaySelectedEvent(play);
+ }
+
+ private void EmitTimeNodeChanged(TimeNode tNode, object val)
+ {
+ if (TimeNodeChanged != null)
+ TimeNodeChanged(tNode, val);
+ }
+
+ private void EmitPlaysDeleted(List<Play> plays)
+ {
+ if (PlaysDeletedEvent != null)
+ PlaysDeletedEvent(plays);
+ }
+
+ protected virtual void EmitPlayCategoryChanged(Play play, Category cat)
+ {
+ if(PlayCategoryChanged != null)
+ PlayCategoryChanged(play, cat);
+ }
+
+ private void OnPlayListNodeAdded(Play play)
+ {
+ if (PlayListNodeAddedEvent != null)
+ PlayListNodeAddedEvent(play);
+ }
+
+ private void EmitPlayListNodeSelected(PlayListPlay plNode)
+ {
+ if (PlayListNodeSelectedEvent != null)
+ PlayListNodeSelectedEvent(plNode);
+ }
+
+ private void EmitSnapshotSeries(Play play) {
+ if (SnapshotSeriesEvent != null)
+ SnapshotSeriesEvent (play);
+ }
+
+ private void EmitNewTagAtFrame(Category category, int frame) {
+ if (NewTagAtFrameEvent != null)
+ NewTagAtFrameEvent(category, frame);
+ }
+
+ private void EmitNewTag(Category category) {
+ if (NewTagEvent != null)
+ NewTagEvent(category);
+ }
+
+ private void EmitNewTagStart() {
+ if (NewTagStartEvent != null)
+ NewTagStartEvent ();
+ }
+
+ private void EmitNewTagStop(Category category) {
+ if (NewTagStopEvent != null)
+ NewTagStopEvent (category);
+ }
+
+ private void EmitRenderPlaylist(IPlayList playlist) {
+ if (RenderPlaylistEvent != null)
+ RenderPlaylistEvent(playlist);
+ }
+
+ private void EmitTagPlay(Play play) {
+ if (TagPlayEvent != null)
+ TagPlayEvent (play);
+ }
+
+ private void EmitNewPlaylist() {
+ if (NewPlaylistEvent != null)
+ NewPlaylistEvent();
+ }
+
+ private void EmitOpenPlaylist() {
+ if (OpenPlaylistEvent != null)
+ OpenPlaylistEvent();
+ }
+
+ private void EmitSavePlaylist() {
+ if (SavePlaylistEvent != null)
+ SavePlaylistEvent();
+ }
+
+ private void EmitGameUnitEvent(GameUnit gameUnit, GameUnitEventType eType) {
+ if (GameUnitEvent != null)
+ GameUnitEvent(gameUnit, eType);
+ }
+
+ private void EmitUnitAdded(GameUnit gameUnit, int frame) {
+ if (UnitAdded != null)
+ UnitAdded(gameUnit, frame);
+ }
+
+ private void EmitUnitDeleted(GameUnit gameUnit, List<TimelineNode> units) {
+ if (UnitDeleted != null)
+ UnitDeleted(gameUnit, units);
+ }
+
+ private void EmitUnitSelected(GameUnit gameUnit, TimelineNode unit) {
+ if (UnitSelected != null)
+ UnitSelected(gameUnit, unit);
+ }
+
+ private void EmitUnitChanged(GameUnit gameUnit, TimelineNode unit, Time time) {
+ if (UnitChanged != null)
+ UnitChanged(gameUnit, unit, time);
+ }
+
+ private void EmitKeyPressed(object sender, int key, int modifier) {
+ if (KeyPressed != null)
+ KeyPressed(sender, key, modifier);
+ }
+ }
+}
+
diff --git a/LongoMatch.GUI/Gui/Component/SubcategoiesTagsEditor.cs
b/LongoMatch.GUI/Gui/Component/SubcategoiesTagsEditor.cs
new file mode 100644
index 0000000..47374f6
--- /dev/null
+++ b/LongoMatch.GUI/Gui/Component/SubcategoiesTagsEditor.cs
@@ -0,0 +1,131 @@
+//
+// Copyright (C) 2013 Andoni Morales Alastruey
+//
+// 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 2 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, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+using LongoMatch.Store;
+using System.Collections.Generic;
+using Gdk;
+using Gtk;
+
+namespace LongoMatch.Gui.Component
+{
+ [System.ComponentModel.ToolboxItem(true)]
+ public partial class SubcategoiesTagsEditor : Gtk.Bin
+ {
+ TagSubCategory template;
+ Dictionary<string, Widget> tagsDict;
+ Color templateExistsColor;
+
+ public SubcategoiesTagsEditor ()
+ {
+ this.Build ();
+ Gdk.Color.Parse("red", ref templateExistsColor);
+ tagsDict = new Dictionary<string, Widget>();
+ addtagbutton.Clicked += OnAddTag;
+ tagentry.Activated += OnAddTag;
+ nameentry.Changed += OnNameChanged;
+ multicheckbutton.Toggled += OnMultiToggled;
+ fastcheckbutton.Toggled += OnFastToggled;
+ TemplatesNames = new List<string>();
+ }
+
+ public List<string> TemplatesNames {
+ get;
+ set;
+ }
+
+ public TagSubCategory Template {
+ set{
+ template = value;
+ nameentry.Text = template.Name;
+ fastcheckbutton.Active = template.FastTag;
+ multicheckbutton.Active = template.AllowMultiple;
+
+ foreach (string tag in template)
+ AddTag(tag, false);
+ }
+ get {
+ return template;
+ }
+ }
+
+ public bool CheckName {
+ set;
+ get;
+ }
+
+ private void RemoveTag (string tag) {
+ tagsbox.Remove(tagsDict[tag]);
+ tagsDict.Remove(tag);
+ template.Remove(tag);
+ }
+
+ private void AddTag(string tag, bool update) {
+ HBox box;
+ Label label;
+ Button button;
+
+ if (tagsDict.ContainsKey(tag))
+ return;
+
+ box = new HBox();
+ label = new Label(tag);
+ label.Justify = Justification.Left;
+ button = new Button("gtk-delete");
+ button.Clicked += delegate {
+ RemoveTag(tag);
+ };
+ box.PackStart(label, true, false, 0);
+ box.PackStart(button, false, false, 0);
+
+ tagsbox.PackStart(box, false, false, 0);
+ box.ShowAll();
+
+ tagsDict.Add(tag, box);
+ if (update)
+ template.Add(tag);
+ }
+
+ protected virtual void OnNameChanged (object sender, EventArgs e)
+ {
+ if ((CheckName && TemplatesNames.Contains(nameentry.Text)) ||
+ nameentry.Text == "") {
+ nameentry.ModifyText(StateType.Normal, templateExistsColor);
+ } else {
+ nameentry.ModifyText(StateType.Normal);
+ template.Name = nameentry.Text;
+ }
+ }
+
+ protected virtual void OnMultiToggled (object sender, System.EventArgs e)
+ {
+ template.AllowMultiple = multicheckbutton.Active;
+ }
+
+ protected virtual void OnFastToggled (object sender, System.EventArgs e)
+ {
+ template.FastTag = fastcheckbutton.Active;
+
+ }
+
+ protected virtual void OnAddTag (object sender, System.EventArgs e)
+ {
+ AddTag(tagentry.Text, true);
+ }
+ }
+}
+
diff --git a/LongoMatch.GUI/Gui/GUIToolkit.cs b/LongoMatch.GUI/Gui/GUIToolkit.cs
index ebb7800..d37594c 100644
--- a/LongoMatch.GUI/Gui/GUIToolkit.cs
+++ b/LongoMatch.GUI/Gui/GUIToolkit.cs
@@ -40,7 +40,7 @@ namespace LongoMatch.Gui
public class GUIToolkit: IGUIToolkit
{
static GUIToolkit instance;
- IMainWindow mainWindow;
+ IAnalysisWindow mainWindow;
public GUIToolkit (Version version)
{
@@ -56,7 +56,7 @@ namespace LongoMatch.Gui
}
}
- public IMainWindow MainWindow{
+ public IAnalysisWindow MainWindow{
get {
return mainWindow;
}
diff --git a/LongoMatch.GUI/Gui/MainWindow.cs b/LongoMatch.GUI/Gui/MainWindow.cs
index 330682d..24195b1 100644
--- a/LongoMatch.GUI/Gui/MainWindow.cs
+++ b/LongoMatch.GUI/Gui/MainWindow.cs
@@ -42,70 +42,34 @@ namespace LongoMatch.Gui
{
[System.ComponentModel.Category("LongoMatch")]
[System.ComponentModel.ToolboxItem(false)]
- public partial class MainWindow : Gtk.Window, IMainWindow
+ public partial class MainWindow : Gtk.Window, IMainController, IProjectOptionsController
{
-
- /* Tags */
- public event NewTagHandler NewTagEvent;
- public event NewTagStartHandler NewTagStartEvent;
- public event NewTagStopHandler NewTagStopEvent;
- public event PlaySelectedHandler PlaySelectedEvent;
- public event NewTagAtFrameHandler NewTagAtFrameEvent;
- public event TagPlayHandler TagPlayEvent;
- public event PlaysDeletedHandler PlaysDeletedEvent;
- public event TimeNodeChangedHandler TimeNodeChanged;
- public event PlayCategoryChangedHandler PlayCategoryChanged;
-
- /* Playlist */
- public event RenderPlaylistHandler RenderPlaylistEvent;
- public event PlayListNodeAddedHandler PlayListNodeAddedEvent;
- public event PlayListNodeSelectedHandler PlayListNodeSelectedEvent;
- public event OpenPlaylistHandler OpenPlaylistEvent;
- public event NewPlaylistHandler NewPlaylistEvent;
- public event SavePlaylistHandler SavePlaylistEvent;
-
- /* Video Converter */
- public event ConvertVideoFilesHandler ConvertVideoFilesEvent;
-
- /* Snapshots */
- public event SnapshotSeriesHandler SnapshotSeriesEvent;
-
- /* Projects */
- public event SaveProjectHandler SaveProjectEvent;
+ /* IMainController */
public event NewProjectHandler NewProjectEvent;
public event OpenProjectHandler OpenProjectEvent;
- public event CloseOpenendProjectHandler CloseOpenedProjectEvent;
public event ImportProjectHandler ImportProjectEvent;
public event ExportProjectHandler ExportProjectEvent;
- public event ShowProjectStats ShowProjectStatsEvent;
+ public event QuitApplicationHandler QuitApplicationEvent;
- /* Managers */
public event ManageJobsHandler ManageJobsEvent;
public event ManageTeamsHandler ManageTeamsEvent;
public event ManageCategoriesHandler ManageCategoriesEvent;
public event ManageProjects ManageProjectsEvent;
public event ManageDatabases ManageDatabasesEvent;
public event EditPreferences EditPreferencesEvent;
+ public event ConvertVideoFilesHandler ConvertVideoFilesEvent;
- /* Game Units events */
- public event GameUnitHandler GameUnitEvent;
- public event UnitChangedHandler UnitChanged;
- public event UnitSelectedHandler UnitSelected;
- public event UnitsDeletedHandler UnitDeleted;
- public event UnitAddedHandler UnitAdded;
+ /* IProjectOptionsController */
+ public event SaveProjectHandler SaveProjectEvent;
+ public event CloseOpenendProjectHandler CloseOpenedProjectEvent;
+ public event ShowProjectStats ShowProjectStatsEvent;
+ public event ShowFullScreenHandler ShowFullScreenEvent;
+ public event PlaylistVisibiltyHandler PlaylistVisibilityEvent;
+ public event AnalysisWidgetsVisibilityHandler AnalysisWidgetsVisibilityEvent;
+ public event AnalysisModeChangedHandler AnalysisModeChangedEvent;
+ public event TagSubcategoriesChangedHandler TagSubcategoriesChangedEvent;
- public event KeyHandler KeyPressed;
-
- private static Project openedProject;
- private ProjectType projectType;
- private TimeNode selectedTimeNode;
-
- TimeLineWidget timeline;
- bool gameUnitsActionVisible;
- GameUnitsTimelineWidget guTimeline;
IGUIToolkit guiToolKit;
- Gtk.Window playerWindow;
- bool detachedPlayer;
#region Constructors
public MainWindow(IGUIToolkit guiToolkit) :
@@ -114,30 +78,11 @@ namespace LongoMatch.Gui
Screen screen;
this.Build();
- Title = Constants.SOFTWARE_NAME;
-
this.guiToolKit = guiToolkit;
-
- projectType = ProjectType.None;
-
- timeline = new TimeLineWidget();
- downbox.PackStart(timeline, true, true, 0);
-
- guTimeline = new GameUnitsTimelineWidget ();
- downbox.PackStart(guTimeline, true, true, 0);
-
+ Title = Constants.SOFTWARE_NAME;
TagSubcategoriesAction.Active = !Config.FastTagging;
+ projectType = ProjectType.None;
- playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
- playercapturer.SetLogo(System.IO.Path.Combine(Config.ImagesDir,"background.png"));
- playercapturer.LogoMode = true;
- playercapturer.Tick += OnTick;
- playercapturer.Detach += DetachPlayer;
-
- playercapturer.Logo = System.IO.Path.Combine(Config.ImagesDir,"background.png");
- playercapturer.CaptureFinished += (sender, e) => {CloseCaptureProject();};
-
- buttonswidget.Mode = TagMode.Predifined;
ConnectSignals();
ConnectMenuSignals();
@@ -152,77 +97,17 @@ namespace LongoMatch.Gui
false);
screen = Display.Default.DefaultScreen;
this.Resize(screen.Width * 80 / 100, screen.Height * 80 / 100);
- postagger.SetMode (false);
}
#endregion
#region Plubic Methods
- public void AddPlay(Play play) {
- playsSelection.AddPlay(play);
- timeline.AddPlay(play);
- timeline.QueueDraw();
- }
-
- public void UpdateSelectedPlay (Play play) {
- selectedTimeNode = play;
- timeline.SelectedTimeNode = play;
- postagger.LoadPlay (play, false);
- SetTagsBoxVisibility (true);
- notes.Play= play;
- }
-
- public void UpdateCategories (Categories categories) {
- buttonswidget.Categories = openedProject.Categories;
- }
-
- public void DeletePlays (List<Play> plays) {
- playsSelection.RemovePlays(plays);
- timeline.RemovePlays(plays);
- timeline.QueueDraw();
- }
-
public IRenderingStateBar RenderingStateBar{
get {
return renderingstatebar1;
}
}
- public IPlayer Player{
- get {
- return playercapturer;
- }
- }
-
- public ICapturer Capturer{
- get {
- return playercapturer;
- }
- }
-
- public IPlaylistWidget Playlist{
- get {
- return playlist;
- }
- }
-
- public ITemplatesService TemplatesService {
- set {
- playsSelection.TemplatesService = value;
- }
- }
-
- public void UpdateGameUnits (GameUnitsList gameUnits) {
- gameUnitsActionVisible = gameUnits != null && gameUnits.Count > 0;
- GameUnitsViewAction.Sensitive = gameUnitsActionVisible;
- if (gameUnits == null) {
- gameunitstaggerwidget1.Visible = false;
- return;
- }
- gameunitstaggerwidget1.Visible = true;
- gameunitstaggerwidget1.GameUnits = gameUnits;
- }
-
public void AddExportEntry (string name, string shortName, Action<Project, IGUIToolkit>
exportAction) {
MenuItem parent = (MenuItem)
this.UIManager.GetWidget("/menubar1/ToolsAction/ExportProjectAction1");
@@ -253,68 +138,8 @@ namespace LongoMatch.Gui
private void ConnectSignals() {
/* Adding Handlers for each event */
-
- /* Connect new mark event */
- buttonswidget.NewMarkEvent += EmitNewTag;;
- buttonswidget.NewMarkStartEvent += EmitNewTagStart;
- buttonswidget.NewMarkStopEvent += EmitNewTagStop;
- timeline.NewMarkEvent += EmitNewTagAtFrame;
-
- /* Connect TimeNodeChanged events */
- timeline.TimeNodeChanged += EmitTimeNodeChanged;
- notes.TimeNodeChanged += EmitTimeNodeChanged;
-
- /* Connect TimeNodeDeleted events */
- playsSelection.PlaysDeleted += EmitPlaysDeleted;
- timeline.TimeNodeDeleted += EmitPlaysDeleted;
-
- /* Connect TimeNodeSelected events */
- playsSelection.PlaySelected += OnTimeNodeSelected;
- timeline.TimeNodeSelected += OnTimeNodeSelected;
-
- /* Connect TimeNodeChangedEvent */
- playsSelection.TimeNodeChanged += EmitTimeNodeChanged;
-
- /* Connect PlayCategoryChanged events */
- playsSelection.PlayCategoryChanged += EmitPlayCategoryChanged;
-
- /* Connect playlist events */
- playlist.PlayListNodeSelected += EmitPlayListNodeSelected;
- playlist.NewPlaylistEvent += EmitNewPlaylist;
- playlist.OpenPlaylistEvent += EmitOpenPlaylist;
- playlist.SavePlaylistEvent += EmitSavePlaylist;
-
- /* Connect PlayListNodeAdded events */
- playsSelection.PlayListNodeAdded += OnPlayListNodeAdded;
- timeline.PlayListNodeAdded += OnPlayListNodeAdded;
-
- /* Connect tags events */
- playsSelection.TagPlay += EmitTagPlay;
- timeline.TagPlay += EmitTagPlay;
-
- /* Connect SnapshotSeries events */
- playsSelection.SnapshotSeries += EmitSnapshotSeries;
- timeline.SnapshotSeries += EmitSnapshotSeries;
-
- playlist.RenderPlaylistEvent += EmitRenderPlaylist;
- playsSelection.RenderPlaylist += EmitRenderPlaylist;
- timeline.RenderPlaylist += EmitRenderPlaylist;
-
renderingstatebar1.ManageJobs += (e, o) => {EmitManageJobs();};
-
openAction.Activated += (sender, e) => {EmitSaveProject();};
-
- /* Game Units event */
- gameunitstaggerwidget1.GameUnitEvent += EmitGameUnitEvent;
- guTimeline.UnitAdded += EmitUnitAdded;;
- guTimeline.UnitDeleted += EmitUnitDeleted;
- guTimeline.UnitSelected += EmitUnitSelected;
- guTimeline.UnitChanged += EmitUnitChanged;
-
- playercapturer.Error += OnMultimediaError;
- playercapturer.SegmentClosedEvent += OnSegmentClosedEvent;
-
- KeyPressEvent += (o, args) => (EmitKeyPressed(o, (int)args.Event.Key,
(int)args.Event.State));
}
private void ConnectMenuSignals() {
@@ -330,142 +155,22 @@ namespace LongoMatch.Gui
ShowProjectStatsAction.Activated += (sender, e) => {EmitShowProjectStats();};
}
- void DetachPlayer (bool detach) {
- if (detach == detachedPlayer)
- return;
-
- detachedPlayer = detach;
-
- if (detach) {
- EventBox box;
- Log.Debug("Detaching player");
-
- playerWindow = new Gtk.Window(Constants.SOFTWARE_NAME);
- playerWindow.Icon = Stetic.IconLoader.LoadIcon(this, "longomatch",
IconSize.Button);
- playerWindow.DeleteEvent += (o, args) => DetachPlayer(false);
- box = new EventBox();
-
- box.KeyPressEvent += (o, args) => OnKeyPressEvent(args.Event);
- playerWindow.Add(box);
-
- box.Show();
- playerWindow.Show();
-
- playercapturer.Reparent(box);
- buttonswidget.Visible = true;
- timeline.Visible = true;
- if (Config.UseGameUnits) {
- guTimeline.Visible = true;
- gameunitstaggerwidget1.Visible = true;
- }
- videowidgetsbox.Visible = false;
- } else {
- ToggleAction action;
-
- Log.Debug("Attaching player again");
- videowidgetsbox.Visible = true;
- playercapturer.Reparent(this.videowidgetsbox);
- playerWindow.Destroy();
-
- if (ManualTaggingViewAction.Active)
- action = ManualTaggingViewAction;
- else if (TimelineViewAction.Active)
- action = TimelineViewAction;
- else if (GameUnitsViewAction.Active)
- action = GameUnitsViewAction;
- else
- action = TaggingViewAction;
- OnViewToggled(action, new EventArgs());
- }
- playercapturer.Detached = detach;
- }
-
public void SetProject(Project project, ProjectType projectType, CaptureSettings props,
PlaysFilter filter)
{
- bool isLive = false;
-
- /* Update tabs labels */
- var desc = project.Description;
-
ExportProjectAction1.Sensitive = true;
if(projectType == ProjectType.FileProject) {
Title = System.IO.Path.GetFileNameWithoutExtension(desc.File.FilePath) +
" - " + Constants.SOFTWARE_NAME;
- playercapturer.LogoMode = false;
- timeline.SetProject (project, filter);
- guTimeline.Project = project;
-
} else {
Title = Constants.SOFTWARE_NAME;
- isLive = true;
- if(projectType == ProjectType.FakeCaptureProject) {
- playercapturer.Type = CapturerType.Fake;
- playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Capturer;
- } else {
- playercapturer.Mode =
PlayerCapturerBin.PlayerOperationMode.PreviewCapturer;
- }
}
-
- openedProject = project;
- this.projectType = projectType;
-
- filter.FilterUpdated += OnFilterUpdated;
- playsSelection.SetProject(project, isLive, filter);
- buttonswidget.Categories = project.Categories;
- MakeActionsSensitive(true,projectType);
- postagger.LoadBackgrounds (openedProject.Categories.FieldBackground,
- openedProject.Categories.HalfFieldBackground,
- openedProject.Categories.GoalBackground);
- ShowWidgets();
+ MakeActionsSensitive(true, projectType);
}
- void SetPlaylistVisibility (bool visible) {
- if (visible) {
- righthbox.Visible = true;
- playlist.Visible = true;
- } else {
- playlist.Visible = false;
- if (!tagsvbox.Visible)
- righthbox.Visible = false;
- }
- }
-
- void SetTagsBoxVisibility (bool visible) {
- if (visible) {
- righthbox.Visible = true;
- tagsvbox.Visible = true;
- } else {
- tagsvbox.Visible = false;
- if (!playlist.Visible)
- righthbox.Visible = false;
- }
- }
-
- private void CloseCaptureProject() {
- if(projectType == ProjectType.CaptureProject ||
- projectType == ProjectType.URICaptureProject) {
- playercapturer.Close();
- playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
- EmitSaveProject();
- } else if(projectType == ProjectType.FakeCaptureProject) {
- EmitCloseOpenedProject(true);
- }
- }
-
private void ResetGUI() {
- bool playlistVisible = playlist.Visible;
Title = Constants.SOFTWARE_NAME;
- playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
- playercapturer.LogoMode = true;
- ClearWidgets();
- HideWidgets();
- SetPlaylistVisibility (playlistVisible);
- SetTagsBoxVisibility (false);
- selectedTimeNode = null;
MakeActionsSensitive(false, projectType);
- if (detachedPlayer)
- DetachPlayer(false);
}
private void MakeActionsSensitive(bool sensitive, ProjectType projectType) {
@@ -481,72 +186,6 @@ namespace LongoMatch.Gui
SaveProjectAction.Sensitive = sensitive2;
}
- private void ShowWidgets() {
- leftbox.Show();
- if(TaggingViewAction.Active || ManualTaggingViewAction.Active) {
- buttonswidget.Show();
- gameunitstaggerwidget1.Show();
- } else if (TimelineViewAction.Active) {
- timeline.Show();
- } else if (GameUnitsViewAction.Active) {
- gameunitstaggerwidget1.Show();
- guTimeline.Show();
- }
- }
-
- private void HideWidgets() {
- leftbox.Hide();
- SetTagsBoxVisibility (false);
- buttonswidget.Hide();
- timeline.Hide();
- gameunitstaggerwidget1.Hide();
- guTimeline.Hide();
- }
-
- private void ClearWidgets() {
- buttonswidget.Categories = null;
- playsSelection.Clear();
- }
-
- private bool PromptCloseProject() {
- int res;
- EndCaptureDialog dialog;
-
- if(openedProject == null)
- return true;
-
- if(projectType == ProjectType.FileProject) {
- MessageDialog md = new MessageDialog(this, DialogFlags.Modal,
- MessageType.Question,
ButtonsType.OkCancel,
- Catalog.GetString("Do you want to close
the current project?"));
- res = md.Run();
- md.Destroy();
- if(res == (int)ResponseType.Ok) {
- EmitCloseOpenedProject(true);
- return true;
- }
- return false;
- }
-
- /* Capture project */
- dialog = new EndCaptureDialog();
- dialog.TransientFor = (Gtk.Window)this.Toplevel;
- res = dialog.Run();
- dialog.Destroy();
-
- /* Close project wihtout saving */
- if(res == (int)EndCaptureResponse.Quit) {
- EmitCloseOpenedProject(false);
- return true;
- } else if(res == (int)EndCaptureResponse.Save) {
- /* Close and save project */
- EmitCloseOpenedProject(true);
- return true;
- } else
- /* Continue with the current project */
- return false;
- }
-
private void CloseAndQuit() {
if(!PromptCloseProject())
return;
@@ -561,16 +200,14 @@ namespace LongoMatch.Gui
#region File
protected virtual void OnNewActivated(object sender, System.EventArgs e)
{
- if(!PromptCloseProject())
- return;
- EmitNewProject();
+ if (NewProjectEvent != null)
+ NewProjectEvent();
}
protected virtual void OnOpenActivated(object sender, System.EventArgs e)
{
- if(!PromptCloseProject())
- return;
- EmitOpenProject();
+ if(OpenProjectEvent != null)
+ OpenProjectEvent();
}
#endregion
@@ -597,42 +234,26 @@ namespace LongoMatch.Gui
#region View
protected void OnTagSubcategoriesActionToggled (object sender, System.EventArgs e)
{
- Config.FastTagging = !TagSubcategoriesAction.Active;
+ if (TagSubcategoriesChangedEvent != null)
+ TagSubcategoriesChangedEvent (!TagSubcategoriesAction.Active);
}
protected virtual void OnFullScreenActionToggled(object sender, System.EventArgs e)
{
- playercapturer.FullScreen = (sender as Gtk.ToggleAction).Active;
+ if (ShowFullScreenEvent != null)
+ ShowFullScreenEvent ((sender as Gtk.ToggleAction).Active);
}
protected virtual void OnPlaylistActionToggled(object sender, System.EventArgs e)
{
- bool visible = (sender as Gtk.ToggleAction).Active;
- SetPlaylistVisibility (visible);
- playsSelection.PlayListLoaded=visible;
+ if (PlaylistVisibilityEvent != null)
+ PlaylistVisibilityEvent ((sender as Gtk.ToggleAction).Active);
}
protected virtual void OnHideAllWidgetsActionToggled(object sender, System.EventArgs e)
{
- ToggleAction action = sender as ToggleAction;
-
- if(openedProject == null)
- return;
-
- leftbox.Visible = !action.Active;
- timeline.Visible = !action.Active && TimelineViewAction.Active;
- buttonswidget.Visible = !action.Active &&
- (TaggingViewAction.Active || ManualTaggingViewAction.Active);
- if (Config.UseGameUnits) {
- guTimeline.Visible = !action.Visible && GameUnitsViewAction.Active;
- gameunitstaggerwidget1.Visible = !action.Active &&
(GameUnitsViewAction.Active ||
- TaggingViewAction.Active || ManualTaggingViewAction.Active);
- }
- if(action.Active) {
- SetTagsBoxVisibility (false);
- } else {
- if (selectedTimeNode != null)
- SetTagsBoxVisibility (true);
+ if (AnalysisWidgetsVisibilityEvent != null) {
+ AnalysisWidgetsVisibilityEvent ((sender as ToggleAction).Active);
}
}
@@ -655,6 +276,7 @@ namespace LongoMatch.Gui
buttonswidget.Mode = TagMode.Predifined;
}
#endregion
+
#region Help
protected virtual void OnHelpAction1Activated(object sender, System.EventArgs e)
{
@@ -681,109 +303,6 @@ namespace LongoMatch.Gui
#endregion
- protected override bool OnKeyPressEvent(EventKey evnt)
- {
- Gdk.Key key = evnt.Key;
- Gdk.ModifierType modifier = evnt.State;
- bool ret;
-
- ret = base.OnKeyPressEvent(evnt);
-
- if(openedProject == null && !playercapturer.Opened)
- return ret;
-
- if(projectType != ProjectType.CaptureProject &&
- projectType != ProjectType.URICaptureProject &&
- projectType != ProjectType.FakeCaptureProject) {
- switch(key) {
- case Constants.SEEK_FORWARD:
- if(modifier == Constants.STEP)
- playercapturer.StepForward();
- else
- playercapturer.SeekToNextFrame(selectedTimeNode != null);
- break;
- case Constants.SEEK_BACKWARD:
- if(modifier == Constants.STEP)
- playercapturer.StepBackward();
- else
- playercapturer.SeekToPreviousFrame(selectedTimeNode != null);
- break;
- case Constants.FRAMERATE_UP:
- playercapturer.FramerateUp();
- break;
- case Constants.FRAMERATE_DOWN:
- playercapturer.FramerateDown();
- break;
- case Constants.TOGGLE_PLAY:
- playercapturer.TogglePlay();
- break;
- }
- } else {
- switch(key) {
- case Constants.TOGGLE_PLAY:
- playercapturer.TogglePause();
- break;
- }
- }
- return ret;
- }
-
- protected virtual void OnTimeNodeSelected(Play play)
- {
- SetTagsBoxVisibility (true);
- if (PlaySelectedEvent != null)
- PlaySelectedEvent(play);
- }
-
- protected virtual void OnSegmentClosedEvent()
- {
- SetTagsBoxVisibility (false);
- timeline.SelectedTimeNode = null;
- selectedTimeNode = null;
- }
-
- protected virtual void OnTick(object o, long currentTime, long streamLength,
- float currentPosition, bool seekable)
- {
- if(currentTime != 0 && timeline != null && openedProject != null) {
- uint frame = (uint)(currentTime * openedProject.Description.File.Fps / 1000);
- timeline.CurrentFrame = frame;
- guTimeline.CurrentFrame = frame;
- }
- gameunitstaggerwidget1.CurrentTime = new Time{MSeconds = (int)currentTime};
- }
-
- protected virtual void OnUpdate(Version version, string URL) {
- LongoMatch.Gui.Dialog.UpdateDialog updater = new LongoMatch.Gui.Dialog.UpdateDialog();
- updater.Fill(version, URL);
- updater.TransientFor = this;
- updater.Run();
- updater.Destroy();
- }
-
- protected virtual void OnDrawingToolActionToggled(object sender, System.EventArgs e)
- {
- drawingtoolbox1.Visible = DrawingToolAction.Active;
- drawingtoolbox1.DrawingVisibility = DrawingToolAction.Active;
- }
-
- protected override bool OnDeleteEvent(Gdk.Event evnt)
- {
- CloseAndQuit();
- return true;
- }
-
- protected virtual void OnMultimediaError(object o, string message)
- {
- MessagesHelpers.ErrorMessage (this,
- Catalog.GetString("The following error happened and" +
- " the current project will be closed:")+"\n" + message);
- EmitCloseOpenedProject(true);
- }
-
- protected virtual void OnFilterUpdated()
- {
- }
#endregion
#region Events
@@ -794,93 +313,14 @@ namespace LongoMatch.Gui
EditPreferencesEvent();
}
- private void EmitPlaySelected(Play play)
- {
- if (PlaySelectedEvent != null)
- PlaySelectedEvent(play);
- }
-
- private void EmitTimeNodeChanged(TimeNode tNode, object val)
- {
- if (TimeNodeChanged != null)
- TimeNodeChanged(tNode, val);
- }
-
- private void EmitPlaysDeleted(List<Play> plays)
- {
- if (PlaysDeletedEvent != null)
- PlaysDeletedEvent(plays);
- }
-
- protected virtual void EmitPlayCategoryChanged(Play play, Category cat)
- {
- if(PlayCategoryChanged != null)
- PlayCategoryChanged(play, cat);
- }
-
- private void OnPlayListNodeAdded(Play play)
- {
- if (PlayListNodeAddedEvent != null)
- PlayListNodeAddedEvent(play);
- }
-
- private void EmitPlayListNodeSelected(PlayListPlay plNode)
- {
- if (PlayListNodeSelectedEvent != null)
- PlayListNodeSelectedEvent(plNode);
- }
-
- private void EmitSnapshotSeries(Play play) {
- if (SnapshotSeriesEvent != null)
- SnapshotSeriesEvent (play);
- }
-
- private void EmitNewTagAtFrame(Category category, int frame) {
- if (NewTagAtFrameEvent != null)
- NewTagAtFrameEvent(category, frame);
- }
-
- private void EmitNewTag(Category category) {
- if (NewTagEvent != null)
- NewTagEvent(category);
- }
-
- private void EmitNewTagStart() {
- if (NewTagStartEvent != null)
- NewTagStartEvent ();
- }
-
- private void EmitNewTagStop(Category category) {
- if (NewTagStopEvent != null)
- NewTagStopEvent (category);
- }
-
- private void EmitRenderPlaylist(IPlayList playlist) {
- if (RenderPlaylistEvent != null)
- RenderPlaylistEvent(playlist);
- }
-
- private void EmitTagPlay(Play play) {
- if (TagPlayEvent != null)
- TagPlayEvent (play);
- }
-
private void EmitSaveProject() {
if (SaveProjectEvent != null)
SaveProjectEvent(openedProject, projectType);
}
- private void EmitNewProject() {
- if (NewProjectEvent != null)
- NewProjectEvent();
- }
-
private void EmitCloseOpenedProject(bool save) {
if (CloseOpenedProjectEvent != null)
CloseOpenedProjectEvent(save);
- openedProject = null;
- projectType = ProjectType.None;
- ResetGUI();
}
private void EmitImportProject(string name, string filterName, string filter,
@@ -889,11 +329,6 @@ namespace LongoMatch.Gui
ImportProjectEvent(name, filterName, filter, func, requiresNewFile);
}
- private void EmitOpenProject() {
- if(OpenProjectEvent != null)
- OpenProjectEvent();
- }
-
private void EmitExportProject() {
if(ExportProjectEvent != null)
ExportProjectEvent();
@@ -925,51 +360,6 @@ namespace LongoMatch.Gui
if (ManageDatabasesEvent != null)
ManageDatabasesEvent();
}
-
- private void EmitNewPlaylist() {
- if (NewPlaylistEvent != null)
- NewPlaylistEvent();
- }
-
- private void EmitOpenPlaylist() {
- if (OpenPlaylistEvent != null)
- OpenPlaylistEvent();
- }
-
- private void EmitSavePlaylist() {
- if (SavePlaylistEvent != null)
- SavePlaylistEvent();
- }
-
- private void EmitGameUnitEvent(GameUnit gameUnit, GameUnitEventType eType) {
- if (GameUnitEvent != null)
- GameUnitEvent(gameUnit, eType);
- }
-
- private void EmitUnitAdded(GameUnit gameUnit, int frame) {
- if (UnitAdded != null)
- UnitAdded(gameUnit, frame);
- }
-
- private void EmitUnitDeleted(GameUnit gameUnit, List<TimelineNode> units) {
- if (UnitDeleted != null)
- UnitDeleted(gameUnit, units);
- }
-
- private void EmitUnitSelected(GameUnit gameUnit, TimelineNode unit) {
- if (UnitSelected != null)
- UnitSelected(gameUnit, unit);
- }
-
- private void EmitUnitChanged(GameUnit gameUnit, TimelineNode unit, Time time) {
- if (UnitChanged != null)
- UnitChanged(gameUnit, unit, time);
- }
-
- private void EmitKeyPressed(object sender, int key, int modifier) {
- if (KeyPressed != null)
- KeyPressed(sender, key, modifier);
- }
#endregion
}
}
diff --git a/LongoMatch.GUI/LongoMatch.GUI.mdp b/LongoMatch.GUI/LongoMatch.GUI.mdp
index b51c721..d3441b4 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.mdp
+++ b/LongoMatch.GUI/LongoMatch.GUI.mdp
@@ -193,6 +193,8 @@
<File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.StatsViewer.cs" />
<File subtype="Code" buildaction="Compile" name="Gui/Component/Stats/GameViewer.cs" />
<File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.GameViewer.cs" />
+ <File subtype="Code" buildaction="Compile" name="Gui/Component/AnalysisComponent.cs" />
+ <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs"
/>
</Contents>
<References>
<ProjectReference type="Gac" localcopy="True" refto="atk-sharp, Version=2.12.0.0, Culture=neutral,
PublicKeyToken=35e10195dab3c99f" />
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
new file mode 100644
index 0000000..af1ac72
--- /dev/null
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
@@ -0,0 +1,7 @@
+
+namespace LongoMatch.Gui.Component
+{
+ public partial class AnalysisComponent
+ {
+ }
+}
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.SubcategoiesTagsEditor.cs
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.SubcategoiesTagsEditor.cs
new file mode 100644
index 0000000..01e9e0a
--- /dev/null
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.SubcategoiesTagsEditor.cs
@@ -0,0 +1,197 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace LongoMatch.Gui.Component
+{
+ public partial class SubcategoiesTagsEditor
+ {
+ private global::Gtk.VBox vbox2;
+ private global::Gtk.Table table1;
+ private global::Gtk.CheckButton fastcheckbutton;
+ private global::Gtk.Label label1;
+ private global::Gtk.CheckButton multicheckbutton;
+ private global::Gtk.Entry nameentry;
+ private global::Gtk.Frame frame1;
+ private global::Gtk.Alignment GtkAlignment2;
+ private global::Gtk.VBox vbox3;
+ private global::Gtk.ScrolledWindow scrolledwindow1;
+ private global::Gtk.VBox tagsbox;
+ private global::Gtk.HBox hbox1;
+ private global::Gtk.Entry tagentry;
+ private global::Gtk.Button addtagbutton;
+ private global::Gtk.Button deletebutton;
+ private global::Gtk.Label GtkLabel4;
+
+ protected virtual void Build ()
+ {
+ global::Stetic.Gui.Initialize (this);
+ // Widget LongoMatch.Gui.Component.SubcategoiesTagsEditor
+ global::Stetic.BinContainer.Attach (this);
+ this.Name = "LongoMatch.Gui.Component.SubcategoiesTagsEditor";
+ // Container child
LongoMatch.Gui.Component.SubcategoiesTagsEditor.Gtk.Container+ContainerChild
+ this.vbox2 = new global::Gtk.VBox ();
+ this.vbox2.Name = "vbox2";
+ this.vbox2.Spacing = 6;
+ // Container child vbox2.Gtk.Box+BoxChild
+ this.table1 = new global::Gtk.Table (((uint)(2)), ((uint)(2)), false);
+ this.table1.Name = "table1";
+ this.table1.RowSpacing = ((uint)(6));
+ this.table1.ColumnSpacing = ((uint)(6));
+ // Container child table1.Gtk.Table+TableChild
+ this.fastcheckbutton = new global::Gtk.CheckButton ();
+ this.fastcheckbutton.TooltipMarkup = "When this option is selected, the subcategory
can be tagged right after creating a new play";
+ this.fastcheckbutton.CanFocus = true;
+ this.fastcheckbutton.Name = "fastcheckbutton";
+ this.fastcheckbutton.Label = global::Mono.Unix.Catalog.GetString ("Quick tag");
+ this.fastcheckbutton.Active = true;
+ this.fastcheckbutton.DrawIndicator = true;
+ this.fastcheckbutton.UseUnderline = true;
+ this.table1.Add (this.fastcheckbutton);
+ global::Gtk.Table.TableChild w1 = ((global::Gtk.Table.TableChild)(this.table1
[this.fastcheckbutton]));
+ w1.TopAttach = ((uint)(1));
+ w1.BottomAttach = ((uint)(2));
+ w1.LeftAttach = ((uint)(1));
+ w1.RightAttach = ((uint)(2));
+ w1.XOptions = ((global::Gtk.AttachOptions)(4));
+ w1.YOptions = ((global::Gtk.AttachOptions)(4));
+ // Container child table1.Gtk.Table+TableChild
+ this.label1 = new global::Gtk.Label ();
+ this.label1.Name = "label1";
+ this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("Subcategory name:");
+ this.table1.Add (this.label1);
+ global::Gtk.Table.TableChild w2 = ((global::Gtk.Table.TableChild)(this.table1
[this.label1]));
+ w2.YOptions = ((global::Gtk.AttachOptions)(4));
+ // Container child table1.Gtk.Table+TableChild
+ this.multicheckbutton = new global::Gtk.CheckButton ();
+ this.multicheckbutton.TooltipMarkup = "This options allows you to select multiple
tags instead of just one";
+ this.multicheckbutton.CanFocus = true;
+ this.multicheckbutton.Name = "multicheckbutton";
+ this.multicheckbutton.Label = global::Mono.Unix.Catalog.GetString ("Allow multiple
selections");
+ this.multicheckbutton.Active = true;
+ this.multicheckbutton.DrawIndicator = true;
+ this.multicheckbutton.UseUnderline = true;
+ this.table1.Add (this.multicheckbutton);
+ global::Gtk.Table.TableChild w3 = ((global::Gtk.Table.TableChild)(this.table1
[this.multicheckbutton]));
+ w3.TopAttach = ((uint)(1));
+ w3.BottomAttach = ((uint)(2));
+ w3.XOptions = ((global::Gtk.AttachOptions)(4));
+ w3.YOptions = ((global::Gtk.AttachOptions)(4));
+ // Container child table1.Gtk.Table+TableChild
+ this.nameentry = new global::Gtk.Entry ();
+ this.nameentry.CanFocus = true;
+ this.nameentry.Name = "nameentry";
+ this.nameentry.Text = global::Mono.Unix.Catalog.GetString ("Goal type");
+ this.nameentry.IsEditable = true;
+ this.nameentry.InvisibleChar = '•';
+ this.table1.Add (this.nameentry);
+ global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table1
[this.nameentry]));
+ w4.LeftAttach = ((uint)(1));
+ w4.RightAttach = ((uint)(2));
+ w4.YOptions = ((global::Gtk.AttachOptions)(4));
+ this.vbox2.Add (this.table1);
+ global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.table1]));
+ w5.Position = 0;
+ w5.Expand = false;
+ w5.Fill = false;
+ // Container child vbox2.Gtk.Box+BoxChild
+ this.frame1 = new global::Gtk.Frame ();
+ this.frame1.Name = "frame1";
+ this.frame1.ShadowType = ((global::Gtk.ShadowType)(1));
+ // Container child frame1.Gtk.Container+ContainerChild
+ this.GtkAlignment2 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
+ this.GtkAlignment2.Name = "GtkAlignment2";
+ this.GtkAlignment2.LeftPadding = ((uint)(12));
+ // Container child GtkAlignment2.Gtk.Container+ContainerChild
+ this.vbox3 = new global::Gtk.VBox ();
+ this.vbox3.Name = "vbox3";
+ this.vbox3.Spacing = 6;
+ // Container child vbox3.Gtk.Box+BoxChild
+ this.scrolledwindow1 = new global::Gtk.ScrolledWindow ();
+ this.scrolledwindow1.CanFocus = true;
+ this.scrolledwindow1.Name = "scrolledwindow1";
+ // Container child scrolledwindow1.Gtk.Container+ContainerChild
+ global::Gtk.Viewport w6 = new global::Gtk.Viewport ();
+ w6.ShadowType = ((global::Gtk.ShadowType)(0));
+ // Container child GtkViewport.Gtk.Container+ContainerChild
+ this.tagsbox = new global::Gtk.VBox ();
+ this.tagsbox.Name = "tagsbox";
+ this.tagsbox.Spacing = 6;
+ w6.Add (this.tagsbox);
+ this.scrolledwindow1.Add (w6);
+ this.vbox3.Add (this.scrolledwindow1);
+ global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.vbox3
[this.scrolledwindow1]));
+ w9.Position = 0;
+ // Container child vbox3.Gtk.Box+BoxChild
+ this.hbox1 = new global::Gtk.HBox ();
+ this.hbox1.Name = "hbox1";
+ this.hbox1.Spacing = 6;
+ // Container child hbox1.Gtk.Box+BoxChild
+ this.tagentry = new global::Gtk.Entry ();
+ this.tagentry.CanFocus = true;
+ this.tagentry.Name = "tagentry";
+ this.tagentry.Text = global::Mono.Unix.Catalog.GetString ("Penalty");
+ this.tagentry.IsEditable = true;
+ this.tagentry.InvisibleChar = '•';
+ this.hbox1.Add (this.tagentry);
+ global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox1
[this.tagentry]));
+ w10.Position = 0;
+ // Container child hbox1.Gtk.Box+BoxChild
+ this.addtagbutton = new global::Gtk.Button ();
+ this.addtagbutton.CanFocus = true;
+ this.addtagbutton.Name = "addtagbutton";
+ this.addtagbutton.UseUnderline = true;
+ // Container child addtagbutton.Gtk.Container+ContainerChild
+ global::Gtk.Alignment w11 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+ // Container child GtkAlignment.Gtk.Container+ContainerChild
+ global::Gtk.HBox w12 = new global::Gtk.HBox ();
+ w12.Spacing = 2;
+ // Container child GtkHBox.Gtk.Container+ContainerChild
+ global::Gtk.Image w13 = new global::Gtk.Image ();
+ w13.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-add",
global::Gtk.IconSize.Menu);
+ w12.Add (w13);
+ // Container child GtkHBox.Gtk.Container+ContainerChild
+ global::Gtk.Label w15 = new global::Gtk.Label ();
+ w15.LabelProp = global::Mono.Unix.Catalog.GetString ("Add tag");
+ w15.UseUnderline = true;
+ w12.Add (w15);
+ w11.Add (w12);
+ this.addtagbutton.Add (w11);
+ this.hbox1.Add (this.addtagbutton);
+ global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.hbox1
[this.addtagbutton]));
+ w19.Position = 1;
+ w19.Expand = false;
+ w19.Fill = false;
+ this.vbox3.Add (this.hbox1);
+ global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.hbox1]));
+ w20.Position = 1;
+ w20.Expand = false;
+ w20.Fill = false;
+ // Container child vbox3.Gtk.Box+BoxChild
+ this.deletebutton = new global::Gtk.Button ();
+ this.deletebutton.CanFocus = true;
+ this.deletebutton.Name = "deletebutton";
+ this.deletebutton.UseStock = true;
+ this.deletebutton.UseUnderline = true;
+ this.deletebutton.Label = "gtk-remove";
+ this.vbox3.Add (this.deletebutton);
+ global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.vbox3
[this.deletebutton]));
+ w21.Position = 2;
+ w21.Expand = false;
+ w21.Fill = false;
+ this.GtkAlignment2.Add (this.vbox3);
+ this.frame1.Add (this.GtkAlignment2);
+ this.GtkLabel4 = new global::Gtk.Label ();
+ this.GtkLabel4.Name = "GtkLabel4";
+ this.GtkLabel4.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Tags</b>");
+ this.GtkLabel4.UseMarkup = true;
+ this.frame1.LabelWidget = this.GtkLabel4;
+ this.vbox2.Add (this.frame1);
+ global::Gtk.Box.BoxChild w24 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.frame1]));
+ w24.Position = 1;
+ this.Add (this.vbox2);
+ if ((this.Child != null)) {
+ this.Child.ShowAll ();
+ }
+ this.Hide ();
+ }
+ }
+}
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 3d28dcf..ad3e5c2 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -1915,194 +1915,7 @@
</packing>
</child>
<child>
- <widget class="Gtk.HPaned" id="hpaned">
- <property name="MemberName" />
- <property name="CanFocus">True</property>
- <property name="Position">243</property>
- <child>
- <widget class="Gtk.VBox" id="leftbox">
- <property name="MemberName" />
- <property name="Visible">False</property>
- <property name="Spacing">6</property>
- <child>
- <widget class="LongoMatch.Gui.Component.PlaysSelectionWidget" id="playsSelection">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Resize">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.HPaned" id="hpaned1">
- <property name="MemberName" />
- <property name="CanFocus">True</property>
- <property name="Position">952</property>
- <child>
- <widget class="Gtk.VBox" id="downbox">
- <property name="MemberName" />
- <property name="Spacing">6</property>
- <child>
- <widget class="Gtk.HBox" id="videowidgetsbox">
- <property name="MemberName" />
- <property name="Spacing">6</property>
- <child>
- <widget class="LongoMatch.Gui.Component.DrawingToolBox" id="drawingtoolbox1">
- <property name="MemberName" />
- <property name="Visible">False</property>
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">True</property>
- <property name="Expand">False</property>
- <property name="Fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="LongoMatch.Gui.PlayerCapturerBin" id="playercapturer">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- <property name="Detached">False</property>
- <property name="ExpandLogo">False</property>
- <property name="Rate">0</property>
- </widget>
- <packing>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">False</property>
- </packing>
- </child>
- <child>
- <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
- <property name="MemberName" />
- <property name="Visible">False</property>
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- <property name="Expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="LongoMatch.Gui.Component.GameUnitsTagger" id="gameunitstaggerwidget1">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">2</property>
- <property name="AutoSize">False</property>
- <property name="Expand">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Resize">False</property>
- <property name="Shrink">False</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.HBox" id="righthbox">
- <property name="MemberName" />
- <property name="WidthRequest">100</property>
- <property name="Visible">False</property>
- <property name="Spacing">6</property>
- <child>
- <widget class="Gtk.VBox" id="tagsvbox">
- <property name="MemberName" />
- <property name="WidthRequest">100</property>
- <property name="Visible">False</property>
- <property name="Spacing">6</property>
- <child>
- <widget class="LongoMatch.Gui.Component.PlaysCoordinatesTagger" id="postagger">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">True</property>
- </packing>
- </child>
- <child>
- <widget class="Gtk.Frame" id="notesframe">
- <property name="MemberName" />
- <property name="ShadowType">None</property>
- <child>
- <widget class="Gtk.Alignment" id="GtkAlignment22">
- <property name="MemberName" />
- <property name="Xalign">0</property>
- <property name="Yalign">0</property>
- <property name="LeftPadding">12</property>
- <child>
- <widget class="LongoMatch.Gui.Component.NotesWidget" id="notes">
- <property name="MemberName" />
- <property name="Events">ButtonPressMask</property>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="Gtk.Label" id="GtkLabel31">
- <property name="MemberName" />
- <property name="LabelProp"
translatable="yes"><b>Notes</b></property>
- <property name="UseMarkup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Position">0</property>
- <property name="AutoSize">False</property>
- </packing>
- </child>
- <child>
- <widget class="LongoMatch.Gui.Component.PlayListWidget" id="playlist">
- <property name="MemberName" />
- <property name="WidthRequest">100</property>
- <property name="Visible">False</property>
- <property name="Events">ButtonPressMask</property>
- </widget>
- <packing>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Resize">False</property>
- <property name="Shrink">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Shrink">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="Position">1</property>
- <property name="AutoSize">False</property>
- </packing>
+ <placeholder />
</child>
<child>
<widget class="Gtk.Statusbar" id="statusbar1">
@@ -9235,4 +9048,194 @@ Defining <b> Game Units </b> will help you during the analysis to in
</widget>
</child>
</widget>
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.AnalysisComponent" design-size="1524 648">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <child>
+ <widget class="Gtk.HPaned" id="hpaned">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Position">233</property>
+ <child>
+ <widget class="Gtk.VBox" id="leftbox">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="LongoMatch.Gui.Component.PlaysSelectionWidget" id="playsSelection">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Resize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.HPaned" id="hpaned1">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Position">1160</property>
+ <child>
+ <widget class="Gtk.VBox" id="downbox">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.HBox" id="videowidgetsbox">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="LongoMatch.Gui.Component.DrawingToolBox" id="drawingtoolbox1">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.PlayerCapturerBin" id="playercapturer">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ <property name="Detached">False</property>
+ <property name="ExpandLogo">False</property>
+ <property name="Rate">0</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.GameUnitsTagger" id="gameunitstaggerwidget1">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">2</property>
+ <property name="AutoSize">False</property>
+ <property name="Expand">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Resize">False</property>
+ <property name="Shrink">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.HBox" id="righthbox">
+ <property name="MemberName" />
+ <property name="WidthRequest">100</property>
+ <property name="Visible">False</property>
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.VBox" id="tagsvbox">
+ <property name="MemberName" />
+ <property name="WidthRequest">100</property>
+ <property name="Visible">False</property>
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="LongoMatch.Gui.Component.PlaysCoordinatesTagger" id="postagger">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Frame" id="notesframe">
+ <property name="MemberName" />
+ <property name="ShadowType">None</property>
+ <child>
+ <widget class="Gtk.Alignment" id="GtkAlignment22">
+ <property name="MemberName" />
+ <property name="Xalign">0</property>
+ <property name="Yalign">0</property>
+ <property name="LeftPadding">12</property>
+ <child>
+ <widget class="LongoMatch.Gui.Component.NotesWidget" id="notes">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="GtkLabel31">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes"><b>Notes</b></property>
+ <property name="UseMarkup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="LongoMatch.Gui.Component.PlayListWidget" id="playlist">
+ <property name="MemberName" />
+ <property name="WidthRequest">100</property>
+ <property name="Visible">False</property>
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Resize">False</property>
+ <property name="Shrink">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Shrink">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
</stetic-interface>
\ No newline at end of file
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index c1e2f0b..d4204a3 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -419,4 +419,33 @@
<itemgroups />
<signals />
</object>
+ <object type="LongoMatch.Gui.Component.AnalysisComponent" palette-category="General"
allow-children="false" base-type="Gtk.Bin">
+ <itemgroups />
+ <signals>
+ <itemgroup label="IAnalysisWindow Signals">
+ <signal name="NewTagEvent" />
+ <signal name="NewTagStartEvent" />
+ <signal name="NewTagStopEvent" />
+ <signal name="PlaySelectedEvent" />
+ <signal name="NewTagAtFrameEvent" />
+ <signal name="TagPlayEvent" />
+ <signal name="PlaysDeletedEvent" />
+ <signal name="TimeNodeChanged" />
+ <signal name="PlayCategoryChanged" />
+ <signal name="RenderPlaylistEvent" />
+ <signal name="PlayListNodeAddedEvent" />
+ <signal name="PlayListNodeSelectedEvent" />
+ <signal name="OpenPlaylistEvent" />
+ <signal name="NewPlaylistEvent" />
+ <signal name="SavePlaylistEvent" />
+ <signal name="SnapshotSeriesEvent" />
+ <signal name="GameUnitEvent" />
+ <signal name="UnitChanged" />
+ <signal name="UnitSelected" />
+ <signal name="UnitDeleted" />
+ <signal name="UnitAdded" />
+ <signal name="KeyPressed" />
+ </itemgroup>
+ </signals>
+ </object>
</objects>
\ No newline at end of file
diff --git a/LongoMatch.Services/LongoMatch.Services.mdp b/LongoMatch.Services/LongoMatch.Services.mdp
index aa92697..27e459d 100644
--- a/LongoMatch.Services/LongoMatch.Services.mdp
+++ b/LongoMatch.Services/LongoMatch.Services.mdp
@@ -31,6 +31,7 @@
<File subtype="Directory" buildaction="Compile" name="Services" />
<File subtype="Code" buildaction="Compile" name="Services/DataBaseManager.cs" />
<File subtype="Code" buildaction="Compile" name="Services/MigrationsManager.cs" />
+ <File subtype="Code" buildaction="Compile" name="Services/ProjectOptionsManager.cs" />
</Contents>
<References>
<ProjectReference type="Gac" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.Services/Services/Core.cs b/LongoMatch.Services/Services/Core.cs
index 6925b06..cc9d89d 100644
--- a/LongoMatch.Services/Services/Core.cs
+++ b/LongoMatch.Services/Services/Core.cs
@@ -39,7 +39,7 @@ namespace LongoMatch.Services
static GameUnitsManager guManager;
static PlaylistManager plManager;
static RenderingJobsManager videoRenderer;
- static IMainWindow mainWindow;
+ static IAnalysisWindow mainWindow;
static IGUIToolkit guiToolkit;
public static void Init()
@@ -107,7 +107,7 @@ namespace LongoMatch.Services
projectsManager.OpenedProjectChanged += OnOpenedProjectChanged;
}
- public static void BindEvents(IMainWindow mainWindow) {
+ public static void BindEvents(IAnalysisWindow mainWindow) {
mainWindow.EditPreferencesEvent += () => {guiToolkit.OpenPreferencesEditor();};
}
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index 4d9acdc..e1ca37a 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -47,7 +47,7 @@ namespace LongoMatch.Services
PlaysFilter filter;
IGUIToolkit guiToolkit;
- IMainWindow mainWindow;
+ IAnalysisWindow mainWindow;
IPlayer player;
ICapturer capturer;
IRenderingJobsManager renderer;
diff --git a/LongoMatch.Services/Services/GameUnitsManager.cs
b/LongoMatch.Services/Services/GameUnitsManager.cs
index 6969168..36c3840 100644
--- a/LongoMatch.Services/Services/GameUnitsManager.cs
+++ b/LongoMatch.Services/Services/GameUnitsManager.cs
@@ -26,14 +26,14 @@ namespace LongoMatch.Services
{
public class GameUnitsManager
{
- IMainWindow mainWindow;
+ IAnalysisWindow mainWindow;
IPlayer player;
Project openedProject;
Dictionary<GameUnit, Time> gameUnitsStarted;
ushort fps;
- public GameUnitsManager (IMainWindow mainWindow, IPlayer player)
+ public GameUnitsManager (IAnalysisWindow mainWindow, IPlayer player)
{
this.mainWindow = mainWindow;
this.player = player;
diff --git a/LongoMatch.Services/Services/HotKeysManager.cs b/LongoMatch.Services/Services/HotKeysManager.cs
index 7b3bc31..0010edb 100644
--- a/LongoMatch.Services/Services/HotKeysManager.cs
+++ b/LongoMatch.Services/Services/HotKeysManager.cs
@@ -40,7 +40,7 @@ namespace LongoMatch.Services
Dictionary<HotKey, Category> dic;
bool ignoreKeys;
- public HotKeysManager(IMainWindow mainWindow)
+ public HotKeysManager(IAnalysisWindow mainWindow)
{
dic = new Dictionary<HotKey,Category>();
mainWindow.KeyPressed += KeyListener;
diff --git a/LongoMatch.Services/Services/PlaylistManager.cs b/LongoMatch.Services/Services/PlaylistManager.cs
index d7760d0..e704194 100644
--- a/LongoMatch.Services/Services/PlaylistManager.cs
+++ b/LongoMatch.Services/Services/PlaylistManager.cs
@@ -70,7 +70,7 @@ namespace LongoMatch.Services
}
}
- private void BindEvents(IMainWindow mainWindow, IPlayer player) {
+ private void BindEvents(IAnalysisWindow mainWindow, IPlayer player) {
/* Track loaded element */
mainWindow.PlaySelectedEvent += (p) => {selectedTimeNode = p;};
player.SegmentClosedEvent += () => {selectedTimeNode = null;};
diff --git a/LongoMatch.Services/Services/ProjectOptionsManager.cs
b/LongoMatch.Services/Services/ProjectOptionsManager.cs
new file mode 100644
index 0000000..851d272
--- /dev/null
+++ b/LongoMatch.Services/Services/ProjectOptionsManager.cs
@@ -0,0 +1,91 @@
+//
+// Copyright (C) 2013 Andoni Morales Alastruey
+//
+// 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 2 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, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+
+namespace LongoMatch.Services.Services
+{
+ public class ProjectOptionsManager
+ {
+ public ProjectOptionsManager ()
+ {
+ }
+
+ protected void OnTagSubcategoriesActionToggled (object sender, System.EventArgs e)
+ {
+ if (TagSubcategoriesChangedEvent != null)
+ TagSubcategoriesChangedEvent (!TagSubcategoriesAction.Active);
+ Config.FastTagging = !TagSubcategoriesAction.Active;
+ }
+
+ protected virtual void OnFullScreenActionToggled(object sender, System.EventArgs e)
+ {
+ playercapturer.FullScreen = (sender as Gtk.ToggleAction).Active;
+ }
+
+ protected virtual void OnPlaylistActionToggled(object sender, System.EventArgs e)
+ {
+ bool visible = (sender as Gtk.ToggleAction).Active;
+ SetPlaylistVisibility (visible);
+ playsSelection.PlayListLoaded=visible;
+ }
+
+ protected virtual void OnHideAllWidgetsActionToggled(object sender, System.EventArgs e)
+ {
+ ToggleAction action = sender as ToggleAction;
+
+ if(openedProject == null)
+ return;
+
+ leftbox.Visible = !action.Active;
+ timeline.Visible = !action.Active && TimelineViewAction.Active;
+ buttonswidget.Visible = !action.Active &&
+ (TaggingViewAction.Active || ManualTaggingViewAction.Active);
+ if (Config.UseGameUnits) {
+ guTimeline.Visible = !action.Visible && GameUnitsViewAction.Active;
+ gameunitstaggerwidget1.Visible = !action.Active &&
(GameUnitsViewAction.Active ||
+ TaggingViewAction.Active || ManualTaggingViewAction.Active);
+ }
+ if(action.Active) {
+ SetTagsBoxVisibility (false);
+ } else {
+ if (selectedTimeNode != null)
+ SetTagsBoxVisibility (true);
+ }
+ }
+
+ protected virtual void OnViewToggled(object sender, System.EventArgs e)
+ {
+ ToggleAction action = sender as Gtk.ToggleAction;
+
+ if (!action.Active)
+ return;
+
+ buttonswidget.Visible = action == ManualTaggingViewAction || sender ==
TaggingViewAction;
+ timeline.Visible = action == TimelineViewAction;
+ if (Config.UseGameUnits) {
+ guTimeline.Visible = action == GameUnitsViewAction;
+ gameunitstaggerwidget1.Visible = buttonswidget.Visible || guTimeline.Visible;
+ }
+ if(action == ManualTaggingViewAction)
+ buttonswidget.Mode = TagMode.Free;
+ else
+ buttonswidget.Mode = TagMode.Predifined;
+ }
+ }
+}
+
diff --git a/LongoMatch.Services/Services/ProjectsManager.cs b/LongoMatch.Services/Services/ProjectsManager.cs
index e3f0ff8..1899d4e 100644
--- a/LongoMatch.Services/Services/ProjectsManager.cs
+++ b/LongoMatch.Services/Services/ProjectsManager.cs
@@ -38,7 +38,7 @@ namespace LongoMatch.Services
IGUIToolkit guiToolkit;
IMultimediaToolkit multimediaToolkit;
- IMainWindow mainWindow;
+ IAnalysisWindow mainWindow;
public ProjectsManager(IGUIToolkit guiToolkit, IMultimediaToolkit multimediaToolkit) {
this.multimediaToolkit = multimediaToolkit;
@@ -259,6 +259,45 @@ namespace LongoMatch.Services
fChooser.Destroy();
}*/
+ private bool PromptCloseProject() {
+ int res;
+ EndCaptureDialog dialog;
+
+ if(openedProject == null)
+ return true;
+
+ if(projectType == ProjectType.FileProject) {
+ MessageDialog md = new MessageDialog(this, DialogFlags.Modal,
+ MessageType.Question,
ButtonsType.OkCancel,
+ Catalog.GetString("Do you want to close
the current project?"));
+ res = md.Run();
+ md.Destroy();
+ if(res == (int)ResponseType.Ok) {
+ EmitCloseOpenedProject(true);
+ return true;
+ }
+ return false;
+ }
+
+ /* Capture project */
+ dialog = new EndCaptureDialog();
+ dialog.TransientFor = (Gtk.Window)this.Toplevel;
+ res = dialog.Run();
+ dialog.Destroy();
+
+ /* Close project wihtout saving */
+ if(res == (int)EndCaptureResponse.Quit) {
+ EmitCloseOpenedProject(false);
+ return true;
+ } else if(res == (int)EndCaptureResponse.Save) {
+ /* Close and save project */
+ EmitCloseOpenedProject(true);
+ return true;
+ } else
+ /* Continue with the current project */
+ return false;
+ }
+
private void CreateThumbnails(Project project) {
IFramesCapturer capturer;
IBusyDialog dialog;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]