private List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > getActionsFromCheckBoxes(Panel panel) { List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > retVal = new List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> >(); List <CheckBox> cbList = panel.Children.OfType <CheckBox>().ToList(); foreach (CheckBox item in cbList) { if ((item.IsChecked ?? false) && (item.Tag != null)) { KeyValuePair <OrderStatusEnum, OrderStatusEnum> actionPair = KDSModeHelper.GetStatusPairFromIntPair(item.Tag.ToString()); if (actionPair.Key != OrderStatusEnum.None) { retVal.Add(actionPair); } } } return((retVal.Count == 0) ? null : retVal); }
// выбор роли КДСа // для предопредл.роли отобразить флажки и дизаблить private void rbKDSMode_Checked(object sender, RoutedEventArgs e) { RadioButton rbChecked = (RadioButton)sender; KDSModeEnum kdsMode; if (Enum.TryParse <KDSModeEnum>(rbChecked.Tag.ToString(), out kdsMode)) { KDSModeStates kdsStates = KDSModeHelper.DefinedKDSModes[kdsMode]; // установить флажки состояний foreach (CheckBox item in pnlStates.Children.OfType <CheckBox>()) { OrderStatusEnum eStatus = (OrderStatusEnum)Convert.ToInt32(item.Tag); item.IsChecked = (kdsStates.AllowedStates.Contains(eStatus)); } // установить флажки действий KeyValuePair <OrderStatusEnum, OrderStatusEnum> kvp; foreach (CheckBox item in pnlActions.Children.OfType <CheckBox>()) { if (item.Tag != null) { kvp = KDSModeHelper.GetStatusPairFromIntPair(item.Tag.ToString()); item.IsChecked = ((kvp.Key != OrderStatusEnum.None) && (kdsStates.AllowedActions.Contains(kvp))); } } if (kdsMode == KDSModeEnum.Special) { pnlStates.IsEnabled = true; pnlActions.IsEnabled = true; } else { pnlStates.IsEnabled = false; pnlActions.IsEnabled = false; } } } // method
public static void Main(string[] args) { // splash Splasher.Splash = new SplashScreen(); Splasher.ShowSplash(); //for (int i = 0; i < 5000; i += 1) //{ // MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i)); // Thread.Sleep(1); //} // таймаут запуска приложения string cfgValue = CfgFileHelper.GetAppSetting("StartTimeout"); int startTimeout = 0; if (cfgValue != null) { startTimeout = cfgValue.ToInt(); } if (startTimeout != 0) { for (int i = startTimeout; i > 0; i--) { MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд."); System.Threading.Thread.Sleep(1000); } } // текст в MessageListener.Instance прибинден к текстовому полю на сплэше MessageListener.Instance.ReceiveMessage("Инициализация журнала событий..."); AppLib.InitAppLogger(); AppLib.WriteLogInfoMessage("************ Start KDS Client (WPF) *************"); // установить текущий каталог на папку с приложением string curDir = System.IO.Directory.GetCurrentDirectory(); if (curDir.Last() != '\\') { curDir += "\\"; } string appDir = AppEnvironment.GetAppDirectory(); if (curDir != appDir) { AppLib.WriteLogInfoMessage("Текущий каталог изменен на папку приложения: " + appDir); System.IO.Directory.SetCurrentDirectory(appDir); } // защита PSW-файлом MessageListener.Instance.ReceiveMessage("Проверка лицензии..."); bool isLoyalClient = false; //isLoyalClient = ((args != null) && args.Contains("-autoGenLicence")); // ключ реестра HKLM\Software\Integra\autoGenLicence = 01 (binary) if (isLoyalClient == false) { isLoyalClient = RegistryHelper.IsExistsAutoGenLicenceKey(); } pswLib.CheckProtectedResult checkProtectedResult; if (pswLib.Hardware.IsCurrentAppProtected("KDSWPFClient", out checkProtectedResult, null, isLoyalClient) == false) { string errMsg = string.Format("{0}{1}{1}{2}", checkProtectedResult.LogMessage, Environment.NewLine, checkProtectedResult.CustomMessage); appExit(2, errMsg); } MessageListener.Instance.ReceiveMessage("Получение версии приложения..."); AppLib.WriteLogInfoMessage("Инициализация KDS-клиента..."); // проверка наличия уникального имени клиента в конфиг-файле cfgValue = CfgFileHelper.GetAppSetting("KDSClientName"); if (cfgValue.IsNull() == true) { cfgValue = "Не указано имя КДС-клиента в файле AppSettings.config."; appExit(3, cfgValue); } if (cfgValue.Equals("uniqClientName", StringComparison.OrdinalIgnoreCase)) { #if (Release == false) && (DEBUG == false) cfgValue = "Измените имя КДС-клиента в файле AppSettings.config"; appExit(3, cfgValue); #endif } KDSWPFClient.App app = new KDSWPFClient.App(); WpfHelper.SetAppGlobalValue("KDSClientName", cfgValue); App.ClientName = System.Convert.ToString(WpfHelper.GetAppGlobalValue("KDSClientName")); AppLib.WriteLogInfoMessage(" - имя КДС-клиента: {0}", App.ClientName); // информация о файлах и сборках AppLib.WriteLogInfoMessage(" - файл: {0}, Version {1}", AppEnvironment.GetAppFullFile(), AppEnvironment.GetAppVersion()); ITSAssemblyInfo asmInfo = new ITSAssemblyInfo("IntegraLib"); AppLib.WriteLogInfoMessage(" - Integra lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version); asmInfo = new ITSAssemblyInfo("IntegraWPFLib"); AppLib.WriteLogInfoMessage(" - Integra WPF lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version); MessageListener.Instance.ReceiveMessage("Получение параметров окружения..."); AppLib.WriteLogInfoMessage(AppEnvironment.GetEnvironmentString()); getAppLayout(); // настройка приложения MessageListener.Instance.ReceiveMessage("Получение параметров приложения..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif app.InitializeComponent(); // определенные в app.xaml setAppGlobalValues(); // для хранения в свойствах приложения (из config-файла или др.) AppLib.WriteLogInfoMessage("App settings from config file: " + CfgFileHelper.GetAppSettingsFromConfigFile()); // создать каналы AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - START"); AppDataProvider dataProvider = new AppDataProvider(); try { MessageListener.Instance.ReceiveMessage("Создание канала получения данных..."); #if !DEBUG System.Threading.Thread.Sleep(1000); #endif dataProvider.CreateGetChannel(); MessageListener.Instance.ReceiveMessage("Создание канала установки данных..."); #if !DEBUG System.Threading.Thread.Sleep(1000); #endif dataProvider.CreateSetChannel(); AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - FINISH"); } catch (Exception) { AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage); } // и получить словари и настройки от службы MessageListener.Instance.ReceiveMessage("Получаю словари и настройки от службы KDSService..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - START"); if (dataProvider.SetDictDataFromService() == false) { // КДСы могут быть уже запущены, а служба еще нет! AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage); //if (splashScreen != null) splashScreen.Close(TimeSpan.FromMinutes(10)); //MessageBox.Show("Ошибка получения словарей от службы KDSService:" + Environment.NewLine + dataProvider.ErrorMessage, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ ПРИЛОЖЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); //Environment.Exit(2); } else { AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - FINISH"); } WpfHelper.SetAppGlobalValue("AppDataProvider", dataProvider); // прочитать из config-а и сохранить в свойствах приложения режим КДС MessageListener.Instance.ReceiveMessage("Получаю из config-файла режим работы КДС..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif KDSModeHelper.Init(); // создать и сохранить в свойствах приложения служебные окна (ColorLegend, StateChange) MessageListener.Instance.ReceiveMessage("Создаю служебные окна..."); #if !DEBUG System.Threading.Thread.Sleep(500); #endif WpfHelper.SetAppGlobalValue("ColorLegendWindow", new ColorLegend()); // окно легенды // окно изменения статуса WpfHelper.SetAppGlobalValue("StateChangeWindow", new StateChange()); // основное окно приложения MessageListener.Instance.ReceiveMessage("Инициализация окна приложения..."); #if !DEBUG System.Threading.Thread.Sleep(1000); #endif MainWindow mainWindow = new MainWindow(args); app.MainWindow = mainWindow; app.Run(mainWindow); if (dataProvider != null) { dataProvider.Dispose(); dataProvider = null; } AppLib.WriteLogInfoMessage("************ End KDS Client (WPF) *************"); } // Main()
} // method private void btnSave_Click(object sender, RoutedEventArgs e) { // *** получить напрямую новые значения *** // новые значения из списков _cfgValKeeper.PutNewValueDirectly("depUIDs", getIsViewDepIds()); // роль КДС из контролов KDSModeEnum eMode = getKDSModeFromRadioButtons(); if (eMode != KDSModeEnum.None) { _cfgValKeeper.PutNewValueDirectly("KDSMode", eMode.ToString()); string sStates, sActions; if (eMode == KDSModeEnum.Special) { // получить новые объектные значения разрешений List <OrderStatusEnum> newAllowedStates = getStatesFromCheckBoxes(pnlStates); List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > newAllowedActions = getActionsFromCheckBoxes(pnlActions); sStates = KDSModeHelper.StatesListToString(newAllowedStates); if (sStates == null) { sStates = ""; } sActions = KDSModeHelper.ActionsListToString(newAllowedActions); if (sActions == null) { sActions = ""; } } else { sStates = ""; sActions = ""; } // записать их новые значения в кипер _cfgValKeeper.PutNewValueDirectly("KDSModeSpecialStates", sStates); _cfgValKeeper.PutNewValueDirectly("KDSModeSpecialActions", sActions); } _cfgValKeeper.PutNewValueDirectly("NewOrderAudioAttention", (string)cbxSelectAudio.SelectedValue); // *** получить новые значения из контролов *** _cfgValKeeper.PutNewValueFromControls(); // собрать словарь новых значений _appNewSettings = _cfgValKeeper.GetNewValuesDict(); // сделаны ли какие-нибудь изменения? if (_appNewSettings.Count > 0) { string errMsg = null; string sBuf; if (CfgFileHelper.SaveAppSettings(_appNewSettings, out errMsg)) // сохранить в config-файле (все в символьном виде) { // для объектов, взятых из AppProps, сохранить туда _cfgValKeeper.SaveToAppProps(); // для некоторых значений может понадобиться преобразование типов для сохранения в App.Properties if (_appNewSettings.ContainsKey("KDSMode") && (_appNewSettings["KDSMode"].IsNull() == false)) { if (Enum.TryParse <KDSModeEnum>(_appNewSettings["KDSMode"], out eMode)) { KDSModeHelper.CurrentKDSMode = eMode; } } // особые состояния и действия хранятся не в App.Properties, а в четвертом элементе KDSModeStates и в config-e !! if (_appNewSettings.ContainsKey("KDSModeSpecialStates")) { sBuf = _appNewSettings["KDSModeSpecialStates"]; KDSModeStates modeStates = KDSModeHelper.DefinedKDSModes[KDSModeEnum.Special]; modeStates.StringToAllowedStates(sBuf); modeStates.CreateUserStateSets(); } if (_appNewSettings.ContainsKey("KDSModeSpecialActions")) { sBuf = _appNewSettings["KDSModeSpecialActions"]; KDSModeHelper.DefinedKDSModes[KDSModeEnum.Special].StringToAllowedActions(sBuf); } MessageBox.Show("Настройки успешно сохранены в config-файле!", "Сохранение настроек в config-файле", MessageBoxButton.OK, MessageBoxImage.Information); } else { MessageBox.Show("Ошибка сохранения настроек приложения:" + Environment.NewLine + "\t" + errMsg, "Сохранение настроек в config-файле", MessageBoxButton.OK, MessageBoxImage.Error); } } this.DialogResult = true; }