//True, если комманда c1 строго более важна чем f2, форма f2 закрывается при выполнени c1 public static bool Greater(this ReporterCommand c1, ReporterCommand f2) { switch (c1) { case ReporterCommand.PutLinks: case ReporterCommand.DeleteLinks: case ReporterCommand.Update: case ReporterCommand.LinksList: case ReporterCommand.ClearCells: case ReporterCommand.ShapeLibrary: return(f2 == ReporterCommand.Report || f2 == ReporterCommand.LiveReport || f2 == ReporterCommand.Video || f2 == ReporterCommand.ArchivesRanges || f2 == ReporterCommand.Intervals || f2 == ReporterCommand.AbsoluteEdit || f2 == ReporterCommand.HandInput); case ReporterCommand.Setup: return(f2 == ReporterCommand.Report || f2 == ReporterCommand.LiveReport || f2 == ReporterCommand.Video || f2 == ReporterCommand.ArchivesRanges || f2 == ReporterCommand.Intervals || f2 == ReporterCommand.AbsoluteEdit || f2 == ReporterCommand.HandInput || f2 == ReporterCommand.PutLinks || f2 == ReporterCommand.LinksList || f2 == ReporterCommand.FindLinks || f2 == ReporterCommand.LinksTemplate || f2 == ReporterCommand.FilterParams || f2 == ReporterCommand.LinkProperties || f2 == ReporterCommand.ShapeLibrary); case ReporterCommand.LiveReport: case ReporterCommand.Video: return(f2 == ReporterCommand.Report || f2 == ReporterCommand.Intervals || f2 == ReporterCommand.AbsoluteEdit); case ReporterCommand.Report: return(f2 == ReporterCommand.Intervals || f2 == ReporterCommand.AbsoluteEdit); case ReporterCommand.Intervals: return(f2 == ReporterCommand.AbsoluteEdit || f2 == ReporterCommand.Report || f2 == ReporterCommand.LiveReport || f2 == ReporterCommand.Video); case ReporterCommand.AbsoluteEdit: return(f2 == ReporterCommand.Intervals || f2 == ReporterCommand.Report || f2 == ReporterCommand.LiveReport || f2 == ReporterCommand.Video); } return(false); }
public Command StartAtom(ReporterCommand form) { if (form.ToStringHistory() == null) { return(Start()); } return(StartLog(form.ToStringHistory(), "", Code, Code, true)); }
//Какую запись об открытии формы нужно добавлять в History, если null, то никакую public static string ToStringHistory(this ReporterCommand c) { if (c == ReporterCommand.DeleteLinks || c == ReporterCommand.AppInfo || c == ReporterCommand.FilterParams || c == ReporterCommand.LinkProperties || c == ReporterCommand.HandInputValues) { return(null); } if (c == ReporterCommand.Update || c == ReporterCommand.CopyServerReport || c == ReporterCommand.ClearCells) { return("Запуск комманды " + c); } return("Открытие формы " + c); }
//Запускает комманду и возвращает новую заданную форму, если такая есть public static Form RunReporterCommand(ReporterCommand c) { if (!IsActivated) { return(null); } if (c.OneForAllBooks() || ActiveBook == null) { return(CommonBook.RunCommandReporter(c)); } return(ActiveBook.RunCommandReporter(c)); }
//Вызывается при закрытии заданной формы form, close - закрывать форму прямо здесь в процедуре public void CloseForm(ReporterCommand form, bool close = false) { if (Forms.ContainsKey(form)) { var fform = Forms[form]; Forms.Remove(form); var list = (from f in Forms where f.Key.IsChildOf(form) select f.Key).ToList(); foreach (var ff in list) { CloseForm(ff, true); } using (StartAtom("Закрытие формы " + form)) { try { if (close) { fform.Close(); } switch (form) { case ReporterCommand.PutLinks: UpdateDataFile(false, true); Workbook.Save(); break; case ReporterCommand.Setup: SysPage.PutValue("LastSetup", DateTime.Now.ToString()); Workbook.Save(); UpdateDataFile(true); LoadSetup(); break; case ReporterCommand.AbsoluteEdit: AddEvent("Запись абсолютных значений в архив"); foreach (var project in UsedProjects.Values) { project.Archive.WriteAbsoluteEdit(project.AbsoluteEditValues.Values.Where(hip => !hip.Value.IsEmpty()).ToList()); } break; } } catch (Exception ex) { AddError("Ошибка при закрытии формы", ex, form.ToString()); } } } }
//Закрывает заданную форму, close - закрывать форму прямо здесь в процедуре public static void CloseForm(ReporterCommand form, bool close = false) { if (!IsActivated) { return; } if (form.OneForAllBooks()) { CommonBook.CloseForm(form, close); } else if (ActiveBook != null) { ActiveBook.CloseForm(form, close); } }
//True, если форма f1 вызывется только из f2 и если f1 должна закрываться при закрытии f2 public static bool IsChildOf(this ReporterCommand f1, ReporterCommand f2) { switch (f2) { case ReporterCommand.PutLinks: return(f1 == ReporterCommand.FindLinks || f1 == ReporterCommand.LinksTemplate || f1 == ReporterCommand.FilterParams || f1 == ReporterCommand.LinkProperties); case ReporterCommand.GroupReports: return(f1 == ReporterCommand.GroupReportEdit); case ReporterCommand.Report: case ReporterCommand.Video: return(f1 == ReporterCommand.ArchivesRanges); case ReporterCommand.HandInput: return(f1 == ReporterCommand.HandInputValues); case ReporterCommand.Intervals: return(f1 == ReporterCommand.FilterIntervals); } return(false); }
//True, если комманда c1 строго менее важна чем форма f2, с1 нельзя выполнить, когда открыта f2 public static bool Less(this ReporterCommand c1, ReporterCommand f2) { switch (c1) { case ReporterCommand.Create: return(false); case ReporterCommand.Setup: return(f2 == ReporterCommand.Create || f2 == ReporterCommand.ClearCells); case ReporterCommand.PutLinks: case ReporterCommand.DeleteLinks: case ReporterCommand.Update: case ReporterCommand.LinksList: case ReporterCommand.ShapeLibrary: return(f2 == ReporterCommand.Create || f2 == ReporterCommand.Setup || f2 == ReporterCommand.ClearCells); case ReporterCommand.Report: case ReporterCommand.GroupReports: return(f2 == ReporterCommand.LiveReport || f2 == ReporterCommand.Video || f2 == ReporterCommand.Create || f2 == ReporterCommand.Setup || f2 == ReporterCommand.PutLinks || f2 == ReporterCommand.LinksList || f2 == ReporterCommand.ClearCells || f2 == ReporterCommand.ShapeLibrary); case ReporterCommand.LiveReport: case ReporterCommand.Video: case ReporterCommand.Intervals: case ReporterCommand.SaveReport: case ReporterCommand.HandInput: case ReporterCommand.AbsoluteEdit: return(f2 == ReporterCommand.Create || f2 == ReporterCommand.Setup || f2 == ReporterCommand.PutLinks || f2 == ReporterCommand.LinksList || f2 == ReporterCommand.ClearCells || f2 == ReporterCommand.ShapeLibrary); case ReporterCommand.CopyServerReport: return(f2 == ReporterCommand.Create || f2 == ReporterCommand.Setup || f2 == ReporterCommand.PutLinks || f2 == ReporterCommand.LinksList || f2 == ReporterCommand.ShapeLibrary || f2 == ReporterCommand.Report || f2 == ReporterCommand.LiveReport || f2 == ReporterCommand.Video || f2 == ReporterCommand.Intervals || f2 == ReporterCommand.AbsoluteEdit || f2 == ReporterCommand.HandInput); case ReporterCommand.GroupReportEdit: return(f2 != ReporterCommand.GroupReports); } return(false); }
//Открывает новую заданную форму public Form RunCommandReporter(ReporterCommand c) { if (Forms.ContainsKey(c) && Forms[c] != null) { var fm = Forms[c]; if (!fm.Visible) { fm.Show(); } if (fm.WindowState == FormWindowState.Minimized) { fm.WindowState = FormWindowState.Normal; } fm.Focus(); return(fm); } if (!c.OneForAllBooks() && IsReportForming) { return(null); } if (c.NeedCheckReport() && !SysPage.IsInfoTask()) { MessageReportError("Да запуска команды необходимо открыть отчет InfoTask"); return(null); } Form f = null; using (StartAtom(c)) { try { AddEvent("Закрытие лишних форм"); var less = new Dictionary <ReporterCommand, Form>(); var great = new Dictionary <ReporterCommand, Form>(); foreach (var k in Forms) { if (c.Greater(k.Key)) { less.Add(k.Key, k.Value); } if (c.Less(k.Key)) { great.Add(k.Key, k.Value); } } var cForms = GeneralRep.CommonBook.Forms; foreach (var k in cForms) { if (c.Less(k.Key)) { great.Add(k.Key, k.Value); } } if (great.Count > 0) { string smess = ""; foreach (var g in great) { smess += (smess != "" ? "," : "") + " Форма " + g.Key.ToFormName(); } smess = "Команда не может быть выполнена, пока открыты:" + smess + ". Закрыть формы?"; if (!MessageReportQuestion(smess)) { return(null); } } foreach (var k in less) { k.Value.Close(); if (Forms.ContainsKey(k.Key)) { Forms.Remove(k.Key); } if (cForms.ContainsKey(k.Key)) { cForms.Remove(k.Key); } } foreach (var k in great) { GeneralRep.CloseForm(k.Key, true); } if (c == ReporterCommand.PutLinks || c == ReporterCommand.ShapeLibrary || c == ReporterCommand.Report || c == ReporterCommand.LiveReport || c == ReporterCommand.Intervals || c == ReporterCommand.AbsoluteEdit || c == ReporterCommand.LinksList) { UpdateDataFile(false); } System.Windows.Forms.Application.EnableVisualStyles(); switch (c) { case ReporterCommand.GroupReports: f = new FormGroupReports(); break; case ReporterCommand.GroupReportEdit: f = new FormGroupReportEdit(); break; case ReporterCommand.Create: f = new FormCreate(); break; case ReporterCommand.Setup: f = new FormSetup(); break; case ReporterCommand.CopyServerReport: CopyServerReport(); break; case ReporterCommand.PutLinks: using (Start()) LoadCurTemplate(); LastChangeLinks = DateTime.Now; f = new FormPutLinks(); break; case ReporterCommand.FilterParams: f = new FormFiltersParams(); break; case ReporterCommand.LinkProperties: f = new FormLinkProperties(); break; case ReporterCommand.FindLinks: f = new FormFindLinks(); break; case ReporterCommand.LinksTemplate: f = new FormLinksTemplate(); break; case ReporterCommand.DeleteLinks: DeleteLinks(); LastChangeLinks = DateTime.Now; break; case ReporterCommand.ClearCells: Forms.Add(ReporterCommand.ClearCells, null); UsedFileToMemory(); ClearAllCells(); Forms.Remove(ReporterCommand.ClearCells); break; case ReporterCommand.ShapeLibrary: f = new FormShapeLibrary(); break; case ReporterCommand.Report: UsedFileToMemory(); PrepareController(); f = new FormReport(); break; case ReporterCommand.LiveReport: UsedFileToMemory(); PrepareController(); f = new FormLiveReport(); break; case ReporterCommand.Video: UsedFileToMemory(); PrepareController(); f = new FormVideo(); break; case ReporterCommand.ArchivesRanges: f = new FormArchivesRanges(); break; case ReporterCommand.Intervals: UsedFileToMemory(); if (FormInf == null || FormToDir || FormToFile) { MessageReportError("Сохранение в журнал возможно только при формировании отчета непосредственно в бланк отчета (задается в настройках)"); } else { PrepareArchive(); f = new FormIntervals(); } break; case ReporterCommand.FilterIntervals: f = new FormFiltersIntervals(); break; case ReporterCommand.SaveReport: if (CanSaveReport()) { f = new FormSaveReport(); } break; case ReporterCommand.AbsoluteEdit: UsedFileToMemory(); AddEvent("Чтение абсолютных значений из архива"); foreach (var project in UsedProjects.Values) { project.AbsoluteEditValues = project.Archive.ReadAbsoluteEdit(project.Code, false); } f = new FormAbsoluteEdit(); break; case ReporterCommand.Update: UpdateDataFile(true); if (!Command.IsError) { MessageReport("Ссылки были обновлены"); } break; case ReporterCommand.LinksList: f = new FormLinksList(); break; case ReporterCommand.AppInfo: f = new FormAppInfo(); break; } if (f != null) { if (!c.OneForAllBooks()) { f.Text += " (" + Code + ")"; } Forms.Add(c, f); f.Show(); } } catch (Exception ex) { AddError("Ошибка при открытии формы", ex, c.ToString()); } if (Command != null && Command.IsError) { foreach (var ff in Forms) { if (ff.Key != ReporterCommand.LinkProperties && ff.Value != null && ff.Value.Visible) { ff.Value.Activate(); break; } } ShowError(); } } return(f); }
//True, если при выполнении комманды нужно проверять, что активная книга является отчетом public static bool NeedCheckReport(this ReporterCommand f) { return(f == ReporterCommand.Report || f == ReporterCommand.LiveReport || f == ReporterCommand.Video || f == ReporterCommand.Setup || f == ReporterCommand.PutLinks || f == ReporterCommand.DeleteLinks || f == ReporterCommand.Update || f == ReporterCommand.ClearCells || f == ReporterCommand.Update || f == ReporterCommand.AbsoluteEdit || f == ReporterCommand.LinksList || f == ReporterCommand.ShapeLibrary || f == ReporterCommand.HandInputValues || f == ReporterCommand.SaveReport || f == ReporterCommand.Intervals || f == ReporterCommand.CopyServerReport); }
//True, если форма открывается одна на все книги public static bool OneForAllBooks(this ReporterCommand f) { return(f == ReporterCommand.Create || f == ReporterCommand.GroupReports || f == ReporterCommand.GroupReportEdit || f == ReporterCommand.AppInfo); }
//Переводит ReporterCommand в название формы, если форма есть public static string ToFormName(this ReporterCommand f) { switch (f) { case ReporterCommand.AbsoluteEdit: return("редактирования абсолютных значений"); case ReporterCommand.AppInfo: return("информации о программе"); case ReporterCommand.ArchivesRanges: return("диапазонов провайдеров"); case ReporterCommand.Create: return("создания отчета"); case ReporterCommand.FilterParams: return("фильтрации списка параметров"); case ReporterCommand.FilterIntervals: return("фильтрации журнала отчетов"); case ReporterCommand.FindLinks: return("поиска ссылок на выбранный параметр"); case ReporterCommand.GroupReports: return("списка групповых отчетов"); case ReporterCommand.GroupReportEdit: return("редактирования группового отчета"); case ReporterCommand.HandInput: return("списка парамтров ручного ввода"); case ReporterCommand.HandInputValues: return("значений парамтра ручного ввода"); case ReporterCommand.Intervals: return("списка интервалов журнала отчетов"); case ReporterCommand.LinkProperties: return("свойств ссылки"); case ReporterCommand.LinksTemplate: return("редактирования шаблонов установки ссылок"); case ReporterCommand.PutLinks: return("установки ссылок"); case ReporterCommand.Report: return("формирования отчетов"); case ReporterCommand.LiveReport: return("динамических отчетов"); case ReporterCommand.Video: return("видеомагнитофона"); case ReporterCommand.SaveReport: return("сохранения в журнал"); case ReporterCommand.Setup: return("настройки отчета"); case ReporterCommand.LinksList: return("списка ссылок"); case ReporterCommand.ShapeLibrary: return("свойств библиотечной фигуры"); } return(""); }