--- a/src/FingersDance.Control.Screen/UserControlScreen.xaml.cs Tue Nov 10 13:47:58 2009 +0100
+++ b/src/FingersDance.Control.Screen/UserControlScreen.xaml.cs Thu Nov 12 16:15:19 2009 +0100
@@ -8,6 +8,7 @@
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
+using System.Xml.Linq;
using FingersDance.Control.ListVideo;
using FingersDance.Control.SessionInput;
using FingersDance.ViewModels;
@@ -22,7 +23,10 @@
public event EventHandler UC_Screen_NewCutting;
private MainViewModel _mainViewModel;
public Cutting Cutting;
- private List<Project> existingProjects = new List<Project>();
+
+ private String videoName;
+ private String videoPath;
+
User User = new User();
public UserControlScreen(int id, MainViewModel mvmodel)
@@ -69,7 +73,9 @@
try
{
//1 renseigner la video choisie au screen et créer un nouveau projet à partir de ce chemin vidéo
- _mainViewModel.CreateProject(((UserControlListVideo)sender).VideoName, ((UserControlListVideo)sender).path);
+ videoName = ((UserControlListVideo)sender).VideoName;
+ videoPath = ((UserControlListVideo)sender).path;
+ _mainViewModel.CreateProject(videoName, videoPath);
//2-Supression du UC List Video
LayoutRoot.Children.Remove((UserControlListVideo)sender);
OpenProjectList();
@@ -86,7 +92,14 @@
{
try
{
- existingProjects = LoadProjects(_mainViewModel.Project.VideoPath);
+ // We get all the ldt/project files from the current directory...
+ List<String> existingProjects = new List<String>();
+ foreach (String filename in Directory.GetFiles("./"))
+ {
+ if (filename.Substring(filename.Length-4).ToLower()==".ldt")
+ existingProjects.Add(filename.Substring(2, filename.Length - 6));
+ }
+ // ... and display them the the select box UserControlListProject
UserControlListProject listProject = new UserControlListProject(existingProjects);
listProject.Name = "ListProject";
LayoutRoot.Children.Add(listProject);
@@ -100,25 +113,6 @@
}
}
- private List<Project> LoadProjects(string name)
- {
- // Does nothing because for the moment we do not load sessions when we know the video path, we just create a new session
- try
- {
- List<Project> lp = new List<Project>();
- foreach (String filename in Directory.GetFiles("./"))
- {
- if (filename.Substring(filename.Length-4).ToLower()==".ldt")
- lp.Add(new Project(filename.Substring(2,filename.Length - 6), "", ""));
- }
- return lp;
- }
- catch (Exception)
- {
- return new List<Project>();
- }
- }
-
void listProject_EH_ListProject_ContactDown(object sender, EventArgs e)
{
try
@@ -133,15 +127,35 @@
}
else
{
- foreach (Project elt in existingProjects)
+ // ((UserControlListProject)sender).SelectedItem is the name of the selected project
+ // Now we load the xml/ldt file to load all its datas (cuttings, annotations...)
+ XDocument loadedLdt = XDocument.Load(((UserControlListProject)sender).SelectedItem + ".ldt");
+ Project loadedProject = new Project(videoName, videoPath);
+ loadedProject.Name = loadedLdt.Root.Element("project").Attribute("title").Value;
+ loadedProject.Description = loadedLdt.Root.Element("project").Attribute("abstract").Value;
+ loadedProject.Cuttings = new List<Cutting>();
+ XElement cuttingsParentNode = loadedLdt.Root.Element("annotations").Element("content");
+ foreach (XElement cuttingNode in cuttingsParentNode.Elements())
{
- if (elt.Name.Equals(((UserControlListProject)sender).SelectedItem))
+ List<Annotation> la = new List<Annotation>();
+ foreach (XElement annotNode in cuttingNode.Element("elements").Elements())
{
- _mainViewModel.Project.Project = elt;
- OpenProject();
- return;
+ String aId = annotNode.Attribute("id").Value;
+ float begin = (float)annotNode.Attribute("begin");
+ float dur = (float)annotNode.Attribute("dur");
+ String gt = annotNode.Element("gestureType").Value;
+ String colorString = annotNode.Attribute("color").Value; // is type 0xRRGGBB
+ Byte r = Convert.ToByte(colorString.Substring(2, 2), 16);
+ Byte g = Convert.ToByte(colorString.Substring(4, 2), 16);
+ Byte b = Convert.ToByte(colorString.Substring(6, 2), 16);
+ Color c = Color.FromRgb(r, g, b);
+ la.Add(new Annotation(aId, begin, dur, gt, c));
}
+ loadedProject.Cuttings.Add(new Cutting(cuttingNode.Attribute("id").Value,cuttingNode.Element("title").Value,la));
}
+ // We define the loaded project as the current session's project.
+ _mainViewModel.Project = new ProjectViewModel(loadedProject);
+ OpenProject();
}
}
catch (Exception)
@@ -159,7 +173,7 @@
//MainViewModel.Project.Alias = ((UserControlNewProjectForm)sender).Alias;
//MainViewModel.Project.Email = ((UserControlNewProjectForm)sender).Email;
_mainViewModel.Project.Description = ((UserControlNewProjectForm)sender).Description;
- _mainViewModel.Project.Name = ((UserControlNewProjectForm)sender).SessionName.Trim();
+ _mainViewModel.Project.Name = ((UserControlNewProjectForm)sender).ProjectName.Trim();
//2-Suppression UCSession Input
@@ -178,6 +192,7 @@
{
try
{
+ // We display the list of cuttings available for the current project
UserControlListCutting listCuttings = new UserControlListCutting(_mainViewModel.Project.CuttingsDict);
listCuttings.Name = "listCuttings";
LayoutRoot.Children.Add(listCuttings);
@@ -198,6 +213,7 @@
LayoutRoot.Children.Remove((UserControlListCutting)sender);
if (((UserControlListCutting)sender).SelectedItem.Equals("New Cutting"))
{
+ // "New Uutting" was was selected -> we display the form
UserControlNewCuttingForm newCutting = new UserControlNewCuttingForm(User);
newCutting.Name = "newCutting";
LayoutRoot.Children.Add(newCutting);
@@ -205,14 +221,11 @@
}
else
{
- foreach(KeyValuePair<string, Cutting> elt in _mainViewModel.Project.CuttingsDict)
- if (elt.Key.Equals(((UserControlListCutting)sender).SelectedItem))
- {
- Cutting = elt.Value;
- if (UC_Screen_NewCutting != null)
- UC_Screen_NewCutting(this, new EventArgs());
- return;
- }
+ // An already existing project was clicked -> we load the selected project from the dictionnary
+ Cutting = _mainViewModel.Project.CuttingsDict[((UserControlListCutting)sender).SelectedItem];
+ if (UC_Screen_NewCutting != null)
+ UC_Screen_NewCutting(this, new EventArgs());
+ return;
}
}
catch (Exception)
@@ -228,6 +241,7 @@
try
{
LayoutRoot.Children.Remove((UserControlNewCuttingForm)sender);
+ // The new cutting form sent the cutting instance so we can dispatch the event UC_Screen_NewCutting
Cutting = ((UserControlNewCuttingForm)sender).Cutting;
if (UC_Screen_NewCutting != null)
UC_Screen_NewCutting(this, new EventArgs());