- •1 Постановка задачи 6
- •Введение
- •1 Постановка задачи
- •2 Теоретический раздел
- •3 Обзор предметной области
- •3.1 Апплет Clock2.Java
- •3.2 Обзор исходного кода Clock2.Java
- •4. Инструкция программиста
- •4.1. Бизнес-логика приложения в пользовательском классе
- •4.1.1. Поля и свойства Clock
- •4.1.2. Конструкторы класса Clock
- •4.1.3. Методы класса Clock
- •4.2. Визуализация текущей даты и времени
- •4.3. Сохранение текущего состояния приложения в файл и чтение из файла
- •4.3.1. Поля и свойства пользовательского класса ClockConfig
- •4.3.2. Конструкторы пользовательского класса ClockConfig
- •4.3.3. Методы пользовательского класса ClockConfig
- •5. Инструкция Пользователя
- •5.1. Запуск приложения
- •5.2. Основные элементы приложения
- •5.3. Управление главным окном приложения
- •5.4. Настройка приложения
- •Приложение а
- •Приложение б
- •Приложение в
- •Приложение г
- •Приложение д
- •Приложение е
- •Список использованных источников
Приложение б
Текст программы главного окна приложения
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)
{
}
}
}
