Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
182.89 Кб
Скачать

Приложение б

Текст программы главного окна приложения

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace Clock2JavaToCS

{

public partial class MainWindow : Window

{

public Clock Clock2;

public MainWindow()

{

try {

InitializeComponent();

Clock2 = new Clock();

AddChild(Clock2.ParrentCanvas);

}

catch (Exception E) {

MessageBox.Show(E.Message);

App.Current.Shutdown();

}

}

}

}

Приложение в

Текст программы класса ClockConfig

public class ClockConfig

{

static private string ConfigFileName = "Config.xml";

static public string FileName { get { return ConfigFileName; } }

private string FilePath ="";

public string FileDirectory { get { return FilePath; } }

//настройки приложения по умолчанию

static public double defaultR = 150;

static public Visibility DefaultVisibleDate = Visibility.Visible;

static public Visibility DefaultVisibleSeconds = Visibility.Visible;

static public Visibility DefaultVisibleDigClock = Visibility.Visible;

static public Brush DefaultColor = Brushes.LightBlue;

//Имена элементов Xml

private string sParrentElement = "CLOCK_APP";

private string sParamClock = "CLOCK";

private string sParamDate = "DATE";

private string sParamDigitalClock = "DIGITAL_CLOCK";

//имена атрибутов Xml элементов

private string sAtribVISIBLE = "VISIBLE";

private string sAtribSECONDSVISIBLE = "SECONDS_VISIBLE";

private string sAtribRADIUS = "R";

private string sAtribCOLOR = "COLOR";

public ClockConfig() {

FilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\" + ConfigFileName;

}

private void GetXmlElement(XmlElement RootXmlElement, ref XmlNode _Node, string NameNode) {

_Node = RootXmlElement.SelectSingleNode(NameNode);

if (_Node==null)

throw new EConfig("Ошибка чтения файла конфигурации приложения");

}

private string GetAtributeOfXmlEl(XmlNode _Node, string AtributeName) {

XmlNode xmlNode = _Node.SelectSingleNode("@" + AtributeName);

if (xmlNode == null)

throw new EConfig("Ошибка чтения файла конфигурации приложения: для настройки '" + _Node.Name + "' отсутствует значение '" + AtributeName + "'. Пожалуйста обратитесь за помощью к разработчику.");

return xmlNode.Value;

}

static public void SetDefaultConfig(ref Clock _Clock)

{

//**********************************************

//настройки приложения по умолчанию

//**********************************************

try {

_Clock.SetSizeClock(defaultR);

_Clock.TBDate.Visibility = DefaultVisibleDate;

_Clock.TBTime.Visibility = DefaultVisibleDigClock;

_Clock.SecondsArrow.Visibility = DefaultVisibleSeconds;

_Clock.SetColor(DefaultColor);

return;

}

catch (Exception E) {

throw new EConfig("Неизвестная ошибка файла конфигурации приложения. Пожалуйста обратитесь за помощью к разработчику. " + E.Message);

}

}

public void LoadConfig(ref Clock _Clock, bool bDefault=false) {

//**********************************************

//чтение настроек приложения из файла

//**********************************************

XmlDocument document;

if ((!File.Exists(FilePath))||bDefault) {

SetDefaultConfig(ref _Clock);

return;

//throw new Exception("Отсутствует файл настроек приложения. Пожалуйста обратитесь за помощью к разработчику.");

};

try {

document = new XmlDocument();

document.Load(FilePath);

XmlElement xmlElement = document.DocumentElement;

if (xmlElement.Name != sParrentElement)

throw new EConfig("Ошибка формата файла настроеек!");

Visibility ElementVisible;

XmlNode _xmlNode = null;

//**********************************************

//настройка отображения даты

//**********************************************

GetXmlElement(xmlElement, ref _xmlNode, sParamDate);

if (Visibility.TryParse(GetAtributeOfXmlEl(_xmlNode, sAtribVISIBLE), true, out ElementVisible))

_Clock.TBDate.Visibility = ElementVisible;

else

throw new EConfig("Ошибка задания настроек отображения элементов приложения! Пожалуйста обратитесь за помощью к разработчику.");

//**********************************************

//настройка цифровых часов

//**********************************************

GetXmlElement(xmlElement, ref _xmlNode, sParamDigitalClock);

if ( Visibility.TryParse(GetAtributeOfXmlEl(_xmlNode, sAtribVISIBLE), true, out ElementVisible))

_Clock.TBTime.Visibility = ElementVisible;

else

throw new EConfig("Ошибка задания настроек отображения элементов приложения! Пожалуйста обратитесь за помощью к разработчику.");

//**********************************************

//настройка элементов аналоговых часов

//**********************************************

GetXmlElement(xmlElement, ref _xmlNode, sParamClock);

if (Visibility.TryParse(GetAtributeOfXmlEl(_xmlNode, sAtribSECONDSVISIBLE), true, out ElementVisible))

_Clock.SecondsArrow.Visibility = ElementVisible;

else

throw new EConfig("Ошибка задания настроек отображения элементов приложения! Пожалуйста обратитесь за помощью к разработчику.");

//**********************************************

//настройка размеров

//**********************************************

_Clock.SetSizeClock(double.Parse(GetAtributeOfXmlEl(_xmlNode, sAtribRADIUS)));

//**********************************************

//настройка цвета

//**********************************************

BrushConverter _brushConverter = new BrushConverter();

;

_Clock.SetColor((_brushConverter.ConvertFromString(GetAtributeOfXmlEl(_xmlNode, sAtribCOLOR)))as Brush);

//**********************************************

}

catch (EConfig E) {

document = null;

throw E;

}

catch (Exception E) {

document = null;

throw new EConfig("Неизвестная ошибка файла конфигурации приложения. Пожалуйста обратитесь за помощью к разработчику. "+E.Message);

}

}

public void SaveConfig(Clock _Clock)

{

if (File.Exists(FilePath))

{

try {

File.Delete(FilePath);

}

catch (Exception E) {

throw new EConfig("Приложение не может получить доступ к файлу настроеек, убедитесь что файл не используется другими программами и " +

"повторите попытку. ("+E.Message+")");

}

}

XmlDocument document;

try {

document = new XmlDocument();

XmlElement parentElement = document.CreateElement(sParrentElement);

XmlElement subElement = document.CreateElement(sParamClock);

subElement.SetAttribute(sAtribRADIUS, _Clock.Radius.ToString());

subElement.SetAttribute(sAtribSECONDSVISIBLE, _Clock.SecondsArrow.Visibility.ToString().ToUpper());

subElement.SetAttribute(sAtribCOLOR, _Clock.CircleOfDial.Fill.ToString().ToUpper());

parentElement.AppendChild(subElement);

subElement = document.CreateElement(sParamDate);

subElement.SetAttribute(sAtribVISIBLE, _Clock.TBDate.Visibility.ToString().ToUpper());

parentElement.AppendChild(subElement);

subElement = document.CreateElement(sParamDigitalClock);

subElement.SetAttribute(sAtribVISIBLE, _Clock.TBTime.Visibility.ToString().ToUpper());

parentElement.AppendChild(subElement);

document.AppendChild(parentElement);

document.Save(FilePath);

}

catch (Exception E) {

document = null;

throw new EConfig("Неизвестная ошибка файла конфигурации приложения. Пожалуйста обратитесь за помощью к разработчику. " + E.Message);

}

}

}

public class EConfig: Exception

{

public EConfig(string _Message): base(_Message)

{

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]