コード例 #1
0
        public static void Save(string filename, VM vm)
        {
            XmlSerializer formatter         = new XmlSerializer(typeof(ApplicationStateSerialized));
            ApplicationStateSerialized sets = new ApplicationStateSerialized(vm, filename);

            using (FileStream fs = new FileStream(filename, FileMode.Create))
            {
                formatter.Serialize(fs, sets);
            }
        }
コード例 #2
0
        private static void ValidateSets(ApplicationStateSerialized sets)
        {
            string ErrorsReport = "";
            //удалим видео которые не найдены
            int c = sets.Players.Count;

            for (int i = 0; i < c; i++)
            {
                if (!File.Exists(sets.Players[i].filename))
                {
                    sets.Players.Remove(sets.Players[i]);
                    ErrorsReport += @"Видео не найдено: " + sets.Players[i].filename + "\n";
                    c--;
                }
            }

            if (sets.IsExcelConnected && !File.Exists(sets.ExcelBookFilename))
            {
                ErrorsReport         += @"Excel-файл не найден: " + sets.ExcelBookFilename + "\n";
                sets.IsExcelConnected = false;
            }
            double w = SystemParameters.PrimaryScreenWidth;
            double h = SystemParameters.PrimaryScreenHeight;

            if (sets.Position.Width < 100 ||
                sets.Position.Height < 100 ||
                (sets.Position.Left + sets.Position.Width < 0) ||
                (sets.Position.Top + sets.Position.Height < 0) ||
                (sets.Position.Top + sets.Position.Height < 0) ||
                (sets.Position.Top + sets.Position.Height < 0) ||
                (sets.Position.Left > w) ||
                (sets.Position.Top > h) ||
                (sets.Position.Top < 0))
            {
                ErrorsReport += "Главное окно расположено некорректно (судя по сохраненному файлу - где-то за пределами экрана)\n";
                sets.Position = new Rect(0, 0, w, h);
            }

            int PlayerId = 0;

            foreach (var v in sets.Players)
            {
                PlayerId++;
                if (v.Position.Width < 50 ||
                    v.Position.Height < 50 ||
                    (v.Position.Left + sets.Position.Width < 0) ||
                    (v.Position.Top + sets.Position.Height < 0) ||
                    (v.Position.Top + sets.Position.Height < 0) ||
                    (v.Position.Top + sets.Position.Height < 0) ||
                    (v.Position.Top < 0))
                {
                    ErrorsReport += "Окно проигрывателя файла " + Path.GetFileName(v.filename) + " расположено некорректно\n";
                    v.Position    = new Rect(0 + PlayerId * 50, 0 + PlayerId * 50, 300, 400);
                }
            }

            foreach (var v in sets.Players)
            {
                if (v.CurTime < TimeSpan.Zero)
                {
                    v.CurTime = TimeSpan.Zero;
                }
                if (v.CurTime + v.TimeShift > v.Duration)
                {
                    v.CurTime = TimeSpan.Zero;
                }
                if (v.CurTime + v.TimeShift < TimeSpan.Zero)
                {
                    v.TimeShift = TimeSpan.Zero;
                }
            }
        }
コード例 #3
0
        private static void RestoreViewModel(ApplicationStateSerialized sets, VM vm)
        {
            vm.MainWindow.Left        = sets.Position.Left;
            vm.MainWindow.Top         = sets.Position.Top;
            vm.MainWindow.Width       = sets.Position.Width;
            vm.MainWindow.Height      = sets.Position.Height;
            vm.MainWindow.WindowState = sets.WindowState;

            //готовим перечень файлов...
            string[] filenames = new string[sets.Players.Count];
            for (int i = 0; i < sets.Players.Count; i++)
            {
                if (Settings.stateFilesRestorePathType == "Absolute")
                {
                    filenames[i] = sets.Players[i].filename;
                }
                else
                {
                    filenames[i] = Path.GetFullPath(Path.Combine(sets.TargetDirectory, sets.Players[i].relativeFilename)); //преобразование относительного пути в абсолютный
                }
            }

            //... и зон размещения проигрывателей для ...
            Rect[] areas = new Rect[sets.Players.Count];
            for (int i = 0; i < sets.Players.Count; i++)
            {
                areas[i] = sets.Players[i].Position;
            }
            //... открытия
            vm.OpenVideos(filenames, areas);

            //Назначаем лидера синхронизации
            int SyncLeadId = 0;

            foreach (var v in sets.Players)
            {
                if (v.IsSyncLeader)
                {
                    SyncLeadId = sets.Players.IndexOf(v);
                }
            }
            vm.SyncLeadPlayer = vm.videoPlayerVMs[SyncLeadId];

            //Устанавливаем подрегулировку громкости
            vm.ShiftVolume = sets.ShiftVolume;

            ToolsTimer.Delay(() =>
            {
                //переводим все видео на нужный момент
                foreach (VideoPlayerVM v in vm.videoPlayerVMs)
                {
                    v.CurTime = sets.Players[vm.videoPlayerVMs.IndexOf(v)].CurTime;
                    v.SyncronizationShiftVM.ShiftTime = sets.Players[vm.videoPlayerVMs.IndexOf(v)].TimeShift;
                }

                //Устанавливаем всем нужную громкость
                foreach (VideoPlayerVM v in vm.videoPlayerVMs)
                {
                    v.SelfVolume = sets.Players[vm.videoPlayerVMs.IndexOf(v)].SelfVolume;
                }

                //Устанавливаем везде нужный зум
                foreach (VideoPlayerVM v in vm.videoPlayerVMs)
                {
                    Rect ZoomedArea = sets.Players[vm.videoPlayerVMs.IndexOf(v)].ZoomedArea;

                    if (ZoomedArea.Width > 10 && ZoomedArea.Height > 10 && ZoomedArea.Left + ZoomedArea.Width > 0 && ZoomedArea.Height + ZoomedArea.Top > 0)
                    {
                        v.SetZoom(ZoomedArea);
                    }
                    v.Body.VLC.OnResize();
                }
            }, TimeSpan.FromSeconds(2));
        }