Создание менеджера конфигурации Celestia

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    736,47 Кб
  • Опубликовано:
    2014-05-10
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание менеджера конфигурации Celestia














Создание менеджера конфигурации Celestia

ДИПЛОМНАЯ РАБОТА














СОДЕРЖАНИЕ

Введение

. Аналитическая часть

.1 Описание предметной области

.2 Анализ подходов и методов решения задачи

.3 Разработка индивидуального (технического) задания

. Специальная часть

.1 Обоснование и выбор программных средств обеспечения проектирования и разработки структуры классов

.2 Математические методы и специальные алгоритмы решения

задачи. Оценка сложности алгоритма решения задачи

.3. Обоснование и выбор средств разработки, обоснование  и выбор платформы

. Проектная часть

.1 Информационное обеспечение

.1.1 Описание входной, выходной и промежуточной (расчетной) информации

.1.2 Проектирование и обоснование выбора структуры данных

.2 Программное обеспечение

.2.1 Функциональная схема ПО

.2.2 Структурная схема и описание программных модулей. Структура классов

.2.3 Разработка экранного интерфейса программы

.2.4 Схема взаимосвязи (взаимодействия) программных модулей

.2.5 Разработка и отладка программных модулей

.2.6 Тестирование ПО

. Документация

.1 Описание технических требований к условиям эксплуатации программного продукта (модуля)

.2 Программа и методика испытаний

.3 Руководство программиста и пользователя

.4 Расчет надежности программного продукта (модуля)

. Экономическая часть

Основные результаты

Заключение

Литература

Приложение 1. Текст программы

ВВЕДЕНИЕ

celestia конфигурация программный алгоритм

Celestia - свободная трёхмерная астрономическая программа, созданная на языке программирования C++, для платформ Microsoft Windows, Linux и Mac OS X. Создана Крисом Лорелом и доступна на условиях GNU General Public License (Универсальная Общественная Лицензия). Программа, основываясь на Каталоге Гиппарха, позволяет пользователю рассматривать объекты размерами от искусственных спутников до полных галактик в трёх измерениях, используя технологию OpenGL. В отличие от большинства других виртуальных планетариев, пользователь может свободно путешествовать по Вселенной. НАСА и ЕКА используют Celestia в образовательных программах, а также как интерфейс для программ анализа траекторий.

Проектируемый программный продукт является инструментом для широкой конфигурации Celestia, управления особо важными дополнениями, а также для настройки вспомогательного Lua-интерфейса. Программный продукт будет разработан в виде программы для ОС Windows и его использование значительно облегчит русскоязычным пользователям конфигурацию Celestia, а также обеспечит новые возможности по управлению отображением космических объектов. Разработанная программа будет распространяться в сети Интернет для бесплатного скачивания.

Цель работы: разработка Менеджера конфигурации Celestia, который даст пользователям простой и понятный интерфейс с широкими возможностями для конфигурации Celestia, Lua-инструментов, а также управления отображением космических объектов.

Для достижения поставленной цели были поставлены следующие задачи:

•Изучить синтаксис и назначение конфигурационного файла Celestia, а также конфигурационных файлов Lua-инструментов;

Изучить синтаксис файлов описания космических объектов для Celestia;

•Спроектировать интерфейс будущей программы;

•Выбрать среду разработки;

•Разработать программу «Менеджер конфигурации Celestia»

•Провести тестирование и отладку программного обеспечения;

1. АНАЛИТИЧЕСКАЯ ЧАСТЬ

.1 Описание предметной области

Определенные настройки присутствуют в самой программе Celestia, однако этого недостаточно, поэтому разработчики предусмотрели специальный конфигурационный файл «celestia.cfg», в котором можно изменить множество дополнительных параметров. В этом файле указаны пути к файлам каталогов стандартных объектов (звезды, планеты, спутники, кометы и астероиды). Также там указаны имена файлов-текстур для звезд разного спектрального класса, названия сценария, выполняемого при запуске программы, демонстрационного сценария, названия папок для дополнений, названия шрифтов, курсор и многие параметры, отвечающие за рендеринг космического пространства. Все эти параметры пользователи могут настроить под свои нужны.

Для космического симулятора Celestia существует дополнительный графический интерфейс «Lua Educational Tools», настройки которого расположены в собственном конфигурационном файле «config.lua». В этом файле пользователи могут изменить цветовую схему графического интерфейса, отображение при старте отдельных элементов интерфейса, настроить формат даты, положение компаса и выполнить некоторые другие настройки.

Синтаксис конфигурационных файлов естественно англоязычный, все пояснения, которые в них находятся тоже англоязычные. Обычные пользователи, любители астрономии, испытывают трудности в конфигурировании Celestia и Lua Edu Tools, поскольку недостаточно хорошо знают английский язык. Это стало первой причиной рождения идеи моей дипломной работы.

На просторах Сети можно найти множество дополнений для Celestia. Это могут быть космические аппараты, планеты, астероиды, звезды, а также модели отдельных явлений. При установке большого количества дополнений в программу, ее работа может замедлиться, а некоторые дополнения вообще не всегда могут быть удобны в силу своей специфики.

После обдумывания этих неудобств, было решено создать некий конфигуратор, с помощью которого пользователи смогут легко менять настройки Celestia, Lua Edu Tools, а также управлять отображением определенных дополнений.

.2 Анализ подходов и методов решения задачи

В комплект со многими крупными программами и играми идут специальные конфигураторы, которые позволяют изменять много дополнительных параметров.

Конфигураторы могут иметь 3 вида интерфейса:

Командная строка

Графический интерфейс

Графический интерфейс со встроенной командной строкой

Синтаксис команд, которые необходимо вводить в командной строке должен быть англоязычным, а это снова возвращает нас к проблеме понимания иностранного языка простыми пользователями.

Графический интерфейс представляет собой некую оболочку, которую пользователь видит при запуске конфигуратора. По сути - это привычное для нас приложение, имеющее окно, в котором могут быть расположены надписи, поля ввода, картинки, чек-боксы, кнопки и прочие общепринятые элементы интерфейса. Именно этот интерфейс я взял за основу при разработке своей дипломной работы.

Менеджер конфигурации Celestia является конфигуратором с графическим интерфейсом. Представляет собой окно со списком параметров, размещенных на разных вкладках, в зависимости от их типа и принадлежности. Навигация в виде вкладок очень удобна и проста как для пользователей, так и для разработчика, так как используется всего одно окно приложения. Все параметры и элементы интерфейса в программе расположены аккуратно и симметрично. Надписи понятные и грамотные.

.3 Разработка индивидуального (технического) задания

Наименование работы: «Разработка Менеджера конфигурации Celestia»

Основанием для разработки программы для конфигурации симулятора Вселенной стало открытие мною проекта «Celestia в России», который занимается поддержкой и адаптированием Celestia для русскоязычных пользователей.

Исполнителем разработки программы является Кузнецов Александр.

Целью работы является создание конфигуратора, который даст пользователям простой и понятный интерфейс с широкими возможностями для настройки Celestia, Lua-инструментов, а также управления отображением космических объектов.

В связи с поставленной целью, готовый программный продукт должен был обладать следующими возможностями:

Изменение основных параметров Celestia

Изменение основных параметров Lua Edu Tools

Управление отображением в настоящем времени большинства известных космических аппаратов, прекративших свое существование

Управление отображением сомнительных или спорных с точки зрения науки дополнений

Импорт, экспорт настроек, а также восстановление исходных настроек

Возможность самостоятельного перевода приложения на другие языки (локализация)

Приятный и простой в управлении для пользователя интерфейс.

Стадии и этапы разработки

Стадия разработки

Этап и краткое содержание работ

Исполнитель

Сроки выполнения

Чем заканчивается этап




Начало

Окончание


Начало

Изучение синтаксиса конфигурационных файлов

Кузнецов Александр

21/04/2014

21/04/2014

Создание списка параметров, которые будет редактировать Менеджер конфигурации

Процесс создания Менеджера конфигурации Celestia

Создание макета (интерфейса) программы

Кузнецов Александр

21/04/2014

22/04/2014

Полностью готовая к программированию форма приложения


Реализация функционала вкладок «Основные» и «Объекты и время»

Кузнецов Александр

22/04/2014

24/04/2014

Готовы и протестированы все функции перечисленных вкладок программы


Реализация функционала вкладок «Lua-инструменты» и «Управление настройками»

Кузнецов Александр

25/04/2014

27/04/2014

Готовы и протестированы все функции перечисленных вкладок программы


Разработка поддержки локализации программы

Кузнецов Александр

28/04/2014

02/05/2014

Программа переведена на английский язык, тем самым протестирована локализация

Итог

Публикация Менеджера конфигурации Celestia на сайте проекта

Кузнецов Александр

03/05/2014

04/05/2014

Включение программы в комплект новой сборки Celestia EP v3.0


Требования к программе и программному обеспечению

Для работоспособности данной программы нам потребуется:

•Манипулятор типа мышь

•Процессор Intel Pentium II и выше

•Оперативной памяти не менее 128 Mb

•Любая 32-битная ОС семейства Windows

•Любая установленная версия космического симулятора Celestia

Технико-экономические показатели

Ориентировочной экономической эффективностью Менеджера конфигурации Celestia является простой в управлении и восприятии для пользователя интерфейс, быстрое редактирование и сохранение необходимых параметров, возможность восстановить исходные настройки в случае ошибок пользователя.

Данная программа востребована и бесплатна. Предполагаемой годовой потребностью программы составляет тот процент пользователей Интернета, который интересуется астрономией и космическими симуляторами. Экономическими преимуществами разработки выступают дешевизна, эффективность и быстрота в управлении, доступность любому пользователю сети интернет.

2. Специальная часть

.1 Обоснование и выбор программных средств обеспечения проектирования и разработки структуры классов

Для разработки программного продукта - Менеджера конфигурации Celestia, был использован язык программирования C++.++ - компилируемый статически типизированный язык программирования общего назначения. Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование и обобщённое программирование. C++ обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником - языком C, - наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр).

Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие.

2.2 Математические методы и специальные алгоритмы решения задачи. Оценка сложности алгоритма решения задачи

Менеджер Конфигурации предназначен для упрощения глубокой настройки Celestia ее пользователям, поэтому его работа заключается в загрузке содержимого конфигурационных файлов, отображения текущих значений параметров и сохранении изменений, внесенных пользователями в графическом интерфейсе конфигуратора. Более подробно конфигурационные файлы описаны в проектной части.

Для реализации данной задачи, создавались строковые переменные, содержащие имя каждого параметра. При запуске Менеджера конфигурации, в переменные типа TStringList, предназначенные для массива строк, по очереди загружается содержимое конфигурационных файлов. Затем происходит получение значений каждого параметра и их запись в соответствующие поля графического интерфейса конфигуратора. Получение значений производится при помощи функции Pos, которая ищет позицию имени определенного параметра в содержимом файла конфигурации. Далее отбрасывается имя параметра, пробелы, кавычки, и мы получаем значение параметра. После того, как Менеджер конфигурации вывел значения всех параметров в поля графического интерфейса, происходит очистка переменных TSTringList для экономии расхода памяти.

После того, как пользователь сделал изменения в значениях параметров, он нажимает кнопку «Сохранить» на той вкладке, на которой делал изменения. Обработчик данной кнопки снова загружает содержимое конфигурационного файла в переменную, далее аналогично происходит поиск позиций имен параметров, только теперь программа не выводит значения на экран, а по очереди записывает новые значения параметров в файл конфигурации. После успешной записи значений, пользователю выводится сообщение об успешном сохранении настроек, а переменные очищаются.

При восстановлении исходных настроек, происходит замена значений в полях графического интерфейса конфигуратора на стандартные (заложенные для этой функции изначально), затем автоматическое нажатие кнопок сохранения на всех вкладках с блокировкой сообщений об успешном сохранении настроек. Вместо него выводится сообщение об успешном восстановлении исходных настроек.

Подобный метод поиска необходимых значений в текстовых файлах называется парсингом или разбором содержимого текстовых файлов. Вся моя дипломная работа построена на этом методе. Однако для локализации, а также импорта и экспорта настроек я использовал упрощенный вариант парсинга - ini файлы, поскольку не вижу необходимости изобретать велосипед. Для ini файлов в C++ Builder XE3 предусмотрен специальный подключаемый заголовочный файл, включающий в себя все необходимые функции для создания, чтения и удаления ini файлов. Практически во всех программах ini файлы используются для хранения каких-либо данных программы.

В моем случае при экспорте настроек создается .cfg файл (тот же ini, просто выбрано другое расширение) с именами и значениями параметров, чтобы впоследствии этот файл можно было импортировать и получить все сохраненные значения.

Локализация построена также на методе ini файлов, только расширение у них теперь .lng (от слова language). При запуске, Менеджер конфигурации ищет lng файл текущей локализации, затем читает его и устанавливает локализованные значения для всех элементов интерфейса программы (надписи, сообщения и прочее).

2.3 Обоснование и выбор средств разработки, обоснование и выбор платформы

Платформой для Менеджера конфигурации Celestia послужили полученные знания языка программирования C++.

Как уже описано выше, существует множество реализаций языка C++. Для разработки своей дипломной работы, была выбрана среда разработки Embarcadero C++ Builder XE3, поскольку она имеет множество отличий от устаревшей Borland C++ Builder 6, которой нас обучают в колледже:

Обновлен интерфейс, стало намного удобнее писать код, управлять формой, компонентами и их свойствами

Бинарные файлы приложений сохраняются в подпапке, что исключает засорение корневой папки исходного кода «мусорными» файлами

Добавлены новые компоненты (сетевые и др.)

Добавлена поддержка Юникода, которая понадобилась мне при разработке дипломной работы

Добавлена поддержка изображений с прозрачным фоном *.png

И множество других изменений, которые здесь не уместятся.

3. Проектная часть

.1 Информационное обеспечение

.1.1 Описание входной, выходной и промежуточной (расчетной) информации

Приложение запускается единственным исполняемым файлом Celestia_Config_Manager.exe. Этот файл должен находиться в корневой директории любой версии космического симулятора Celestia, поскольку управляет данными в составе Celestia. Используемые в программе входные данные представляют собой файлы конфигурации Celestia, Lua-инструментов и файлы описания дополнений. На экран при этом выводятся значения различных параметров для редактирования.

Данные, находящиеся в файлах конфигурации имеют следующие типы:- целочисленное значение- значение с плавающей запятой- строковое значение- логическое значение

Таблица параметров основного конфигурационного файла Celestia «celestia.cfg»:

Параметр

Тип

Описание

ExtrasDirectories

String

Указывает название папок с дополнениями

OrbitPathSamplePoints

Integer

Указывает кол-во точек, по которым рисуются орбиты объектов

RingSystemSections

Integer

Указывает кол-во сегментов, по которым рисуются кольца вокруг планет

Cursor

String

Указывает название курсора, используемого в Celestia

ScriptScreenshotDirectory

String

Указывает папку для сохранения скриншотов из .celx сценариев

ScriptSystemAccessPolicy

String

Указывает действие при обнаружении потенциально опасных действий в .celx сценариях

InitScript

String

Стартовый сценарий

DemoScript

String

Демонстрационный сценарий

RotateAcceleration

Float

Указывает скорость вращения камеры наблюдателя

MouseRotationSensitivity

Float

Указывает чувствительность мыши при вращении


Таблица параметров основного конфигурационного файла Lua Universal Tools «config.lua»:

Параметр

Тип

Описание

show_lua_universal_tools_v2

Bool

Включать панель при старте Celestia

enable_info

Bool

Информацию об объектах

enable_coordinates

Bool

Координаты объектов

enable_magnification

Bool

Режим «Увеличение»

enable_HR

Bool

Диаграмма Герцшпрунга-Рассела

enable_Kepler_param

Bool

Кеплеровы данные

enable_virtual_pad

Bool

Включать джойстик

enable_compass

Bool

Включать компас

show_local_time

Bool

Показывать местное время

center_compass

Bool

Компас по центру

alt_azimuthal_mode

Bool

Режим Альт-Азимут

date_format

String

Формат даты

custom_goto_duration

Integer

Длительность перелета к объекту

cFrameFill

Float

Цвет рамки

cDisplFill

Float

Цвет текста

cPanelFill

Float

Цвет фона панелей


Все указанные параметры редактируются Менеджером конфигурации.

Таблица файлов, входящих в проект:

Наименование

Обозначение

Примечание

Celestia_Config_Manager.cbproj

Файл проекта

Связывает все файлы приложения

Celestia_Config_Manager.cpp

Файл модуля

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

Celestia_Config_ManagerPCH1.h

Файл модуля

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

Celestia_Config_Manager_Icon.ico

Иконка

Иконка программы

Celestia_Config_Manager.res

Файл ресурсов

Содержит пиктограммы, версию и т.д.

Unit1.cpp

Программный модуль для MainForm

Определяет функциональность формы

Unit1.dfm

Файл для MainForm

Список свойств компонентов формы

Unit1.h

Файл модуля для MainForm

Текст модулей с MainForm

manager\links.ini

INI файл

Содержит обновляемые ссылки

manager\language\Russian.lng

Языковой файл

Содержит строки русскоязычного перевода программы

manager\language\English.lng

Языковой файл

Содержит строки англоязычного перевода программы

manager\help\ Russian.chm

Файл справки

Русскоязычная справка по программе


.1.2 Проектирование и обоснование выбора структуры данных

Менеджер конфигурации Celestia спроектирован для работы непосредственно с файлами космического симулятора, являющимися для него источником данных, своего рода базой данных. В связи с этим, при разработке конфигуратора, было необходимо учитывать синтаксис и структуру этих файлов, поскольку изменять их нельзя - это вызовет сбой в работе космического симулятора.

Обсуждать структуру данных в конфигурационных файлах Celestia и Lua-инструментов я считаю неприемлемым, она задумана разработчиками и таковой останется, но, на мой взгляд, выбранная разработчиками Celestia структура обладает следующими достоинствами:

Возможность комментировать строки

Подробное описание каждого параметра

Разделение параметров по категории применения

.2 Программное обеспечение

.2.1 Функциональная схема ПО

На функциональной схеме Менеджера конфигурации Celestia орошо продемонстрировано взаимодействие всех модулей программы.

.2.2 Структурная схема и описание программных модулей.


Модуль локализации - получает англоязычный идентификатор языка системы, на которой запущена программа, затем ищет в папке manager\language файл с названием, равным этому идентификатору и расширением .lng. В этом файле содержится перевод всех надписей, строк и сообщений, используемых в программе на соответствующий язык. Если файла перевода для данного языка нет, загружается язык по умолчанию - английский.

Модуль обработки параметров - получает версию Celestia, установленной у пользователя, затем поочередно загружает конфигурационные файлы, получает значения параметров и выводит на экран. От версии Celestia зависит расположение определенных конфигурационных файлов или дополнений.

Модуль сохранения параметров - сохраняет значения параметров обратно в конфигурационные файлы.

Модуль управления настройками - содержит 3 функции: экспорт, импорт и восстановление исходных настроек. Экспорт настроек сохраняет текущие значения всех параметров в .cfg файл. Этот cfg файл можно импортировать на другом ПК или после переустановке ОС, чтобы получить предпочитаемые настройки. При восстановлении исходных настроек для всех параметров установятся значения по умолчанию - т.е. те, которые были при первом запуске космического симулятора.

.2.3 Разработка экранного интерфейса программы

Экранный интерфейс программы во многом определяет удобство работы пользователя и является одним из важных факторов, влияющих на эффективность его труда. Программа, выполняющая все возложенные на нее функции, обладающая высоким быстродействием может быть полностью непригодной для работы из-за неприемлемого интерфейса с пользователем.

Наиболее практичными и удобными с точки зрения пользователя можно считать системы, имеющие экранный интерфейс, построенный на основе системы окон.

Для пользователей Менеджера конфигурации Celestia разработан простой и удобный интерфейс в виде одного окна, разделенного на 5 вкладок, в которых расположены элементы редактирования параметров (поля, выпадающие списки, чек-боксы и радио-кнопки), а также различные пояснения к ним. Общий стиль оформления приложения соответствуюет интерфейсу окон Windows, т.е. на разных версиях Windows (XP, 7, 8) стиль программы будет отличаться.

3.2.4 Схема взаимосвязи (взаимодействия) программных модулей.

3.2.5 Разработка и отладка программных модулей

Разработка Менеджера конфигурации Celestia происходила поэтапно: сначала был разработан макет интерфейса, затем был по очереди реализован функционал каждой вкладки. Естественно работа каждой вкладки была тщательно протестирована на предмет ошибок. После этого, было принято решение оптимизировать некоторые программные модули, с целью уменьшения расхода памяти, ускорения работы программы и сокращения количества строк исходного кода. Эта идея появилась после тщательного изучения кода своей же программы, после чего было выявлено, что некоторые операции можно реализовать более просто и более правильно с точки зрения программирования. И в самом конце была начата разработка локализации, являющейся достаточно сложной задачей, поскольку затрагивает абсолютно все программные модули.

Первым модулем, который был оптимизирован, стала вкладка «Объекты и время». В обработчиках проверки и сохранения настроек для дополнений и космических аппаратов, находились поочередные проверки наличия дополнений и проверка параметра Ending у космических аппаратов. Эти проверки представляют собой следующее:

Проверка наличия папки с дополнением

Выставление чек-боксу галочки в зависимости от наличия дополнения у пользователя

Вывод ссылки для скачивания некоторых дополнений при их отсутствии

Загрузка содержимого ssc файла и проверка параметра Ending (для космических аппаратов)

В коде программы для каждого объекта были написаны подобные операции. Было решено оптимизировать обработчик, написав универсальные функции проверки дополнений и проверки космических аппаратов с входными параметрами: адрес к папке дополнения, адрес к ssc файлу (для космических аппаратов) и название чек-бокса.

В итоге, получилось 2 небольшие функции, и их вызов в обработчике для дополнений и космических аппаратов, при этом код обработчика сократился на ~300 строк. То же самое было проделано и для операций сохранения параметров дополнений и космических аппаратов.

Далее был изучен модуль «Восстановление исходных настроек». Его обработчик включал в себя операции, подобные тем, что выполняются при сохранении настроек каждой вкладки, за исключением того, что значения параметров устанавливаются на заданные по умолчанию.

Для его оптимизации, была создана логическая переменная и условие, отключающее сообщение об успешном сохранении настроек (кнопки «Сохранить») в необходимом случае. Затем был полностью очищен обработчик восстановления исходных настроек, и написан код, который устанавливает значения по умолчанию в графическом интерфейсе, затем устанавливает значение истины для логической переменной и просто по очереди выполняет программное нажатие кнопок «Сохранить».

В итоге код программы уменьшился еще на ~200 строк, к тому же при добавлении новых объектов или параметров на любые вкладки в будущем, мне больше не придется писать новые операции для восстановления исходных настроек - нужно будет лишь добавить одну строчку установки значения по умолчанию для нового параметра.

Некоторые правки были внесены также в импорт и экспорт настроек, операции установки значений реализованы аналогично восстановлению исходных настроек, за исключением источника данных.

В последнюю очередь была реализована локализация приложения. Для этого планировалось использовать ini файлы и класс для работы с ними, называемый TIniFile. Однако обнаружилось, что он не поддерживает Юникод, а значит, невозможно будет сделать корректный вывод иностранных символов. Для этого был использован класс TMemIniFile, у которого более широкие возможности.

Локализация реализована следующим образом:

Создан файл English.lng, в котором содержатся языковые строки на английском языке

Реализовано получение англоязычного идентификатора языка ОС пользователя, например Russian, English и т.д.

Реализована загрузка языковых строк из соответствующего языку файла локализации и установка всем элементам интерфейса локализованных надписей.

В случае отсутствия локализованного файла, загружаются англоязычные надписи.

Создан файл Russian.lng

Справка по программе перенесена в папку manager\help и именуется аналогично файлам локализации, за исключением расширения.

Итогом стала возможность локализации приложения на любой язык всем пользователям, знающим английский. Для локализации необходимо скопировать файл English.lng, переименовать его под свой язык, выполнить перевод всех строк на свой родной язык в текстовом редакторе.

.2.6 Тестирование ПО

В процессе тестирования программного продукта, ставилась цель проверить работоспособность программы на различных версиях Celestia и Celestia EP, корректную локализацию, отсутствие ошибок и их возникновения.

Основными операциями при тестировании Менеджера конфигурации Celestia являлись: изменение и сохранение параметров на каждой вкладке, запуск Менеджера с включенным и выключенным Интернетом для проверки функции загрузки ссылок с сервера.

После запуска программы на Celestia 1.6.1, мы видим:

 

Как видите, на вкладке «Объекты и время» недоступны практически все объекты. Причиной является их отсутствие в стандартном дистрибутиве Celestia 1.6.1.

инструменты также отсутствуют в стандартной комплектации космического симулятора.

Итак, мы открываем файл celestia.cfg и видим, например:


Изменяем в Менеджере пару значений:


Видим, что в файле значения также изменились:


Из этого можно сделать вывод, что Менеджер конфигурации Celestia корректно работает на Celestia 1.6.1. Теперь протестируем программу на Celestia EP v3.0.

После запуска программы на Celestia 1.6.1, мы видим:



Как видите, на вкладке «Объекты и время» все объекты стали доступны, потому что они входят в комплект расширенной сборки Celestia EP v3.0.


В комплект Celestia EP v3.0 также входит Lua Universal Tools, поэтому для редактирования стали доступны определенные параметры.

Итак, мы открываем файл config.lua:


Изменяем в Менеджере, например цветовую схему:


В файле видим изменения:

Таким образом, мы протестировали продукт на двух разных версиях космического симулятора Celestia, увидели его корректную работу и отсутствие ошибок.

4. Документация

.1 Описание технических требований к условиям эксплуатации программного продукта (модуля)

Для работоспособности данной программы нам потребуется:

•Манипулятор типа мышь

•Процессор Intel Pentium II и выше

•Оперативной памяти не менее 128 Mb

•Любая 32-битная ОС семейства Windows

•Любая установленная версия космического симулятора Celestia

.2 Программа и методика испытаний

Объектом испытания является, данная дипломная работа, которая представляет собой конфигуратор для космического симулятора Celestia. Программа может применяться абсолютно любыми пользователями Celestia. Программа позволяет редактировать множество дополнительных параметров Celestia, Lua-инструментов, а также управлять отображением различных объектов, включая космические аппараты.

Целью испытания стало, как и для любого программного продукта - корректное выполнение своих функций. Для этого необходимо осуществить проверку программы. Проверка программы - это проверка правильности реализации заданного алгоритма путем выполнения программы на вычислительной технике (ЕСПД).

Требования к программе. Программа должна легко запускаться. По нажатию кнопок, программа должна выполнять соответствующие действия. Входные данные программы - это конфигурационные файлы Celestia и Lua-инструментов, а также ssc файлы дополнений. Выходными данными является вывод на экран значений необходимых параметров из этих файлов. Если полученные результаты не имеют отклонений, то программа работает правильно. Проверка программы представляет собой тестирование. Тест - это последовательность наборов исходных данных, которые подаются на вход изделия и соответствующие им эталоны правильных результатов, которые должны быть получены на выходе.

Средства и порядок испытаний. Минимальный набор технических и программных средств используемых во время испытаний: манипулятор типа мышь, процессор Intel Pentium II и выше, не менее 128 Mb ОЗУ, любая 32-битная ОС семейства Windows, любая установленная версия космического симулятора Celestia.

Методы испытаний. Методом проверки корректности работы программы является тестирование. По результатам проведенного тестирования можно сказать, что программа работает корректно.

.3 Руководство программиста

Назначение и условия применения программы

В Celestia, как и в любой другой программе присутствуют настройки, однако их бывает недостаточно, поэтому разработчики предусмотрели специальный конфигурационный файл «celestia.cfg», в котором можно изменить множество дополнительных параметров. Все эти параметры пользователи могут настроить под свои нужны.

Для космического симулятора Celestia существует дополнительный графический интерфейс «Lua Educational Tools», настройки которого расположены в собственном конфигурационном файле «config.lua».

Синтаксис конфигурационных файлов естественно англоязычный, все пояснения, которые в них находятся тоже англоязычные. Обычные пользователи, любители астрономии, испытывают трудности в конфигурировании Celestia и Lua Edu Tools, поскольку недостаточно хорошо знают английский язык. Это стало первой причиной рождения идеи моей дипломной работы.

На просторах Сети можно найти множество дополнений для Celestia. Это могут быть космические аппараты, планеты, астероиды, звезды, а также модели отдельных явлений. При установке большого количества дополнений в программу, ее работа может замедлиться, а некоторые дополнения вообще не всегда могут быть удобны в силу своей специфики.

Обдумав эти неудобства, было решено создать некий конфигуратор, с помощью которого пользователи смогут легко менять настройки Celestia, Lua Edu Tools, а также управлять отображением определенных дополнений.

.Технические характеристики

.1. Постановка задачи.

Целью работы является создание конфигуратора, который даст пользователям простой и понятный интерфейс с широкими возможностями для настройки Celestia, Lua-инструментов, а также управления отображением космических объектов.

В связи с поставленной целью, готовый программный продукт должен был обладать следующими возможностями:

Изменение основных параметров Celestia

Изменение основных параметров Lua Edu Tools

Управление отображением в настоящем времени большинства известных космических аппаратов, прекративших свое существование

Управление отображением сомнительных или спорных с точки зрения науки дополнений

Импорт, экспорт настроек, а также восстановление исходных настроек

Возможность самостоятельного перевода приложения на другие языки (локализация)

Приятный и простой в управлении для пользователя интерфейс.

.2. Описание алгоритма.

Общий алгоритм выполнения программы, можно представить в виде структурной схемы изображенной на рис. 1.

Словесно эту схему можно описать как следующую последовательность действий:

Основные настройки

Папки дополнений

Сценарии

Курсор и др. параметры

Сохранение настроек

Настройки объектов и времени

Отображение отдельных объектов

Отображение космических аппаратов

Сохранение настроек

Настройки Lua-инструментов

Автоматический показ элементов Lua Edu Tools

Цветовая схема и др. параметры

Сохранение настроек

Управление настройками

Импорт настроек

Экспорт настроек

Восстановление исходных настроек

. Общие сведения

Менеджер конфигурации Celestia является конфигуратором с графическим интерфейсом. Представляет собой окно со списком параметров, размещенных на разных вкладках, в зависимости от их типа и принадлежности. Навигация в виде вкладок очень удобна и проста как для пользователей, так и для разработчика, так как используется всего одно окно приложения. Все параметры и элементы интерфейса в программе расположены аккуратно и симметрично. Надписи понятные и грамотные.

Функциональное назначение.

Менеджер конфигурации Celestia предназначен для простой, но в то же время глубокой настройки космического симулятора Celestia, его дополнений и дополнительного инструмента Lua Edu Tools (Lua Universal Tools).

Исходный код.

Поскольку космический симулятор Celestia является бесплатной программой с открытым исходным кодом, по окончанию разработки данного программного продукта, исходный код данной дипломной работы стал открытым для всех пользователей сети Интернет.

Исходный код Менеджера конфигурации находится в репозитории по адресу: <https://bitbucket.org/Alexell/celestia-config-manager>

Используемые технические средства.

Для работоспособности данной программы нам потребуется:

•Манипулятор типа мышь

•Процессор Intel Pentium II и выше

•Оперативной памяти не менее 128 Mb

•Любая 32-битная ОС семейства Windows

•Лбая установленная версия космического симулятора Celestia

Вызов и загрузка.

Приложение запускается единственным исполняемым файлом Celestia_Config_Manager.exe. Этот файл должен находиться в корневой директории любой версии космического симулятора Celestia, поскольку управляет данными в составе Celestia.

Входные данные.

Используемые в программе входные данные представляют собой файлы конфигурации Celestia, Lua-инструментов и файлы описания дополнений. На экран при этом выводятся значения различных параметров для редактирования.

.1 Организация входных и выходных данных

В моей дипломной работе ввод данных реализован с помощью визуальных компонентов (VCL), добавленных на форму. Это поля ввода (Edit), выпадающие списки (ComboBox), радио-кнопки (RadioButton) и чек-боксы (CheckBox).

Вывод данных происходит в те же компоненты графического интерфейса, поскольку приложение является конфигуратором.

. Удаление программы

Необходимость удалить Менеджер конфигурации Celestia может возникнуть всего по трем причинам: либо пользователь больше в нем не нуждается, либо хочет обновить его, либо хочет переустановить Celestia.

Все программы удаляются одинаково: заходим в меню Пуск->Все программы и ищем папку с названием нужной нам программы или разработчика, раскрываем ее и внутри всегда есть пункт «Удаление программы». Он может называться по-разному, в зависимости от языка программы и от производителя. Удаление происходит с помощью деинсталлятора, который удаляет все файлы программы, очищает записи реестра, связанные с ней. Любую программу можно так же удалить через меню «Установка и удаление программ», иногда это бывает гораздо удобнее.

А чтобы обновить Менеджер, совсем необязательно его удалять: достаточно просто скачать с нашего сайта архив с программой и распаковать в корневую папку Celestia. При распаковке, все необходимые файлы будут заменены на новые.

Руководство пользователя

Назначение программы

В Celestia, как и в любой другой программе присутствуют настройки, однако их бывает недостаточно, поэтому разработчики предусмотрели специальный конфигурационный файл «celestia.cfg», в котором можно изменить множество дополнительных параметров. Все эти параметры пользователи могут настроить под свои нужны.

Для космического симулятора Celestia существует дополнительный графический интерфейс «Lua Educational Tools», настройки которого расположены в собственном конфигурационном файле «config.lua».

Синтаксис конфигурационных файлов естественно англоязычный, все пояснения, которые в них находятся тоже англоязычные. Обычные пользователи, любители астрономии, испытывают трудности в конфигурировании Celestia и Lua Edu Tools, поскольку недостаточно хорошо знают английский язык. Это стало первой причиной рождения идеи моей дипломной работы.

На просторах Сети можно найти множество дополнений для Celestia. Это могут быть космические аппараты, планеты, астероиды, звезды, а также модели отдельных явлений. При установке большого количества дополнений в программу, ее работа может замедлиться, а некоторые дополнения вообще не всегда могут быть удобны в силу своей специфики.

Обдумав эти неудобства, было решено создать некий конфигуратор, с помощью которого пользователи смогут легко менять настройки Celestia, Lua Edu Tools, а также управлять отображением определенных дополнений.

.Технические характеристики

Для работоспособности данной программы, требуется:

•Манипулятор типа мышь

•Процессор Intel Pentium II и выше

•Оперативной памяти не менее 128 Mb

•Любая 32-битная ОС семейства Windows

•Любая установленная версия космического симулятора Celestia

. Общие сведения

Менеджер конфигурации Celestia является конфигуратором с графическим интерфейсом. Представляет собой окно со списком параметров, размещенных на разных вкладках, в зависимости от их типа и принадлежности. Навигация в виде вкладок очень удобна и проста как для пользователей, так и для разработчика, так как используется всего одно окно приложения. Все параметры и элементы интерфейса в программе расположены аккуратно и симметрично. Надписи понятные и грамотные.

Функциональное назначение.

Менеджер конфигурации Celestia предназначен для простой, но в то же время глубокой настройки космического симулятора Celestia, его дополнений и дополнительного инструмента Lua Edu Tools (Lua Universal Tools).

.4 Расчет надежности программного продукта (модуля)

Имя модуля: Локализация;

Имя вызывающего модуля: главный модуль;

Входные параметры: языковые lng файлы;

Выполняемые функции: обработка языковых файлов, отображение локализованных надписей и сообщений программы;

Выходные данные: локализованные надписи, ссылки и сообщения;

Особенности: отображение локализованной программы для языка пользователя.

Имя модуля: Основные настройки;

Имя вызывающего модуля: главный модуль;

Входные параметры: конфигурационный файл celestia.cfg;

Выполняемые функции: отображение и изменение параметров основного файла celestia.cfg.

Выходные данные: измененный файл celestia.cfg;

Особенности: выводит на экран текущие значения параметров; сохраняет измененные параметры в конфигурационный файл.

Имя модуля: Настройки объектов и времени;

Имя вызывающего модуля: главный модуль;

Входные параметры: ssc файлы описания объектов;

Выполняемые функции: отображение состояния объектов и его изменение по запросу пользователя;

Выходные данные: измененные ssc файлы описания объектов;

Особенности: выводит на экран текущее состояние объектов; сохраняет измененное состояние для каждого объекта в соответствующий ssc файл.

Имя модуля: Lua-инструменты;

Имя вызывающего модуля: главный модуль;

Входные параметры: файл конфигурации config.lua;

Выполняемые функции: отображение и изменение параметров конфигурационного файла config.lua;

Выходные данные: измененный файл конфигурации config.lua;

Особенности: выводит на экран текущие значения параметров; сохраняет измененные параметры в конфигурационный файл.

Имя модуля: Управление настройками;

Имя вызывающего модуля: главный модуль;

Входные параметры: все конфигурационные и ssc файлы, используемые другими модулями;

Выполняемые функции: импорт, экспорт и восстановление исходных настроек;

Выходные данные: все измененные конфигурационные и ssc файлы, используемые другими модулями; обновленные значения параметров на экране программы;

Особенности: выполняет импорт настроек из конфигурационного файла, экспорт или восстановление исходных настроек по запросу пользователя.

5. Экономическая часть

Основные результаты

Затраты на создание программного продукта складываются из расходов по оплате труда разработчика программы и расходов по оплате машинного времени при отладке программы:

ЗСПП= ЗЗПСПП+ ЗМЕСПП+ ЗОБЩ,

где

ЗСПП - затраты на создание программного продукта;

ЗЗПСПП - затраты на оплату труда разработчика программы;

ЗМЕСПП - затраты на оплату машинного времени;

ЗОБЩ - общие затраты.

Таким образом, получим:

ЗСПП=389,8 +7191,6+2062,5+14292=23 935,9 руб.

Расходы на оплату труда разработчика программы.

Расходы на оплату труда разработчика программы определяются путем умножения трудоёмкости создания программного продукта на среднюю часовую оплату программиста (с учётом коэффициента отчислений на социальные нужды):

ЗЗПСПП = t*Тчас.

Таким образом, получим:

ЗЗПСПП = 38,98*10=389,8 руб.

Расчёт трудоёмкости создания программного продукта.

Трудоёмкость разработки программного продукта можно определить следующим образом:

= tИ+ tА+ tБ+ tП+ tД+ tОТ

гдеИ - затраты труда на подготовку описания задачи;А - затраты труда на разработку алгоритма решения задачи;Б - затраты труда на разработку структурной схемы алгоритма решения задачи;П - затраты труда на составление программы по готовой структурной схеме;Д - затраты труда на подготовку документации задачи;ОТ - затраты труда на отладку программы на ЭВМ при комплексной отладке задачи;

Составляющие затрат, в свою очередь можно вычислить через условное число операторов Q. Например, в нашем случае число операторов в отлаженной программе Q = 2030.

Таким образом, получим:

= 40,6+10,15+10,15+10,15+8,87+38=117,92 чел/час.

Расчёт затрат труда на подготовку описания.

Оценить затраты труда на подготовку описания задачи не возможно, т.к. это связано с творческим характером работы, вместо этого оценим затраты труда на изучение описания задачи с учётом уточнения описания и квалификации программиста определяются:

И = Q*B / (250…350*K),АОТ - затраты труда на отладку программы на ЭВМ при автономной отладке одной задачи;- коэффициент увеличения затрат труда вследствие недостаточного описания задачи, уточнений и некоторой не доработки, 1, 2...5;- коэффициент квалификации разработчика, для работающих до 2 лет, K = 0, 8;

В связи с тем, что при изучении описания данной задачи потребовалось много уточнений и доработок в описании коэффициент B принимаем равным 4.

Таким образом, получим:

И = 2030*4/(250*0,8)=40,6 чел/час.

Расчёт затрат труда на разработку алгоритма.

Затраты труда на разработку алгоритма решения задачи:

А = 2030/(250*0,8)=10,15 чел/час.

Расчёт затрат труда на разработку структурной схемы.

Затраты труда на разработку структурной схемы алгоритма решения задачи вычислим следующим образом:

Б =2030/(250*0,8)= 10,15 чел/час.

Расчёт затрат труда на составление программы.

Затраты труда на составление программы по готовой структурной схеме:

П = 2030/(250*0,8)= 10,15 чел/час.

Расчёт затрат труда на отладку программы.

Затраты труда на отладку программы на ЭВМ при комплексной отладке задачи:

АОТ = 2030/(100*0,8)=25,37 чел/час.

Отсюда

ОТ = 1,5*36,84 = 1,5*25,37= 38 чел/час.

Расчёт затрат труда на подготовку документации.

Затраты труда на подготовку документации по задаче определяются:

Д = tДP+ tДO,

гдеДP - затраты труда на подготовку материалов в рукописи;ДО - затраты на редактирование, печать и оформление документации.

Таким образом, получим:

Д = 5,07+3,8=8,87 чел/час.ДР = 2030/ (500*0,8) =5,07 чел/час;ДО = 0,75*5,07= 3,8 чел/час.

Итак, общую трудоёмкость программного продукта можем рассчитать:

= 40,6+10,15+10,15+10,15+8,87+38=117,92 чел/час.

Расчёт средней зарплаты программиста.

Средняя зарплата программиста в современных рыночных условиях может варьироваться в широком диапазоне. Для примера расчёта возьмём среднюю часовую оплату труда, которая Tчас = составляет 10 руб. /час, что составляет 1660 руб. /мес. при 8-ми часовом рабочем дне и 5-ти дневной рабочей неделе. Затраты на оплату труда программиста состоят из зарплаты программиста и отчислений на социальные нужды. Отчисления на социальные нужды включают в себя: пенсионный фонд, медстрах, соцстрах, фонд занятости, сбор на образование.

Итого отчисления на социальные нужды составляют 34%. Отсюда затраты на оплату труда программиста составляют:

ЗЗПСПП = 117,92*10*1,34 = 1580,128 руб.

Затраты на оплату машинного времени.

Затраты на оплату машинного времени при отладке программы определяются путём умножения фактического времени отладки программы на цену машино-часа арендного времени:

ЗМЕСПП = Счас * tЭВМ.

Таким образом, получим:

ЗМЕСПП = 182,9*39,32=7191,6 руб.

Расчёт фактического времени отладки.

Фактическое время отладки вычислим по формуле:

ЭВМ = tП+ tДО+ tОТ ;

Таким образом, получим:ЭВМ = 10,15+3,8+25,37=39,32 часа.

Расчёт цены машино-часа.

Цену машино-часа найдём по формуле:

Счас = ЗЭВМ / ТЭВМ

Таким образом, получим:

Счас = 326 445,71/1784=182,9 руб.

Расчёт годового фонда времени работы ПЭВМ IBM PC AT.

Общее количество дней в году - 365.

Число праздничных и выходных дней - 116.

Рабочих недель - 52.

Время простоя в профилактических работах определяется как еженедельная профилактика по 4 часа.

Итого годовой фонд рабочего времени ПЭВМ составляет:

ЭВМ = 8*(365-116)-52*4 = 1784 часа.

Расчёт полных затрат на эксплуатацию ЭВМ.

Полные затраты на эксплуатацию ЭВМ можно определить по формуле:

ЗЭВМ = (ЗЗП+ ЗАМ+ ЗЭП+ ЗЕМ+ ЗТР+ ЗПР),

где

ЗЗП - годовые издержки на заработную плату обслуживающего персонала, руб./год;

ЗАМ - годовые издержки на амортизацию, руб./год;

ЗЭП - годовые издержки на электроэнергию, потребляемую ЭВМ, руб./год;

ЗЕМ - годовые издержки на вспомогательные материалы, руб./год;

ЗТР - затраты на текущий ремонт компьютера, руб./год;

ЗПР - годовые издержки на прочие и накладные расходы, руб./год.

Таким образом, получим:

ЗЭВМ =321600+2062,5+1381,212+165+825+412,50=326 445,71 руб.

Амортизационные отчисления.

Сумма годовых амортизационных отчислений определяется по формуле:

ЗАМ=СБАЛ*НАМ

где

СБАЛ - балансовая стоимость компьютера,

НАМ - норма амортизации.

Таким образом, получим:

ЗАМ=16500*0,125=2062,5 руб.

Согласно постановления совета министров СССР от 22 октября 1990 года № 1072 «О единых нормах амортизационных отчислений на полное восстановление основных фондов народного хозяйства СССР» НАМ =12,5%. Балансовая стоимость ПЭВМ включает отпускную цену, расходы на транспортировку, монтаж оборудования и его наладку:

СБАЛ = СРЫН+ЗУСТ,

где

СРЫН - рыночная стоимость компьютера, руб./шт.,

ЗУСТ - затраты на доставку и установку компьютера, руб./шт.

Таким образом, получим:

СБАЛ = 15000+1500=16500 руб/шт.

Компьютер, на котором велась работа, был приобретен по цене СРЫН= 15000, затраты на установку и наладку составили примерно 10% от стоимости компьютера:

ЗУСТ = 10%*СРЫН

Таким образом, получим:

ЗУСТ = 0,1*15000=1500 руб.

СБАЛ = 15000+1500=16500 руб/шт.

ЗАМ = 16500*0,125=2062,5 руб/год.

Расчёт затрат на электроэнергию.

Стоимость электроэнергии, потребляемой за год, определяется по формуле:

ЗЭЛ = РЭВМ*ТЭВМ*СЭЛ*А,

где

Рэвм - суммарная мощность ЭВМ,

Сэл - стоимость 1кВт*ч электроэнергии,

А - коэффициент интенсивного использования мощности машины.

Согласно техническому паспорту ЭВМ Рэвм = 0,45 кВт, стоимость 1кВт/ч. электроэнергии для предприятий Сэл = 3,48 руб., интенсивность использования машины А=0,98.

Тогда расчётное значение затрат на электроэнергию:

ЗЭЛ = 0,45*900*3,48*0,98=1381,212 руб.

Расчёт затрат на текущий ремонт.

Затраты на текущий и профилактический ремонт принимаются равными 5% от стоимости ЭВМ:

ЗТР=0,05*СБАЛ

Таким образом, получим:

ЗТР=0,05*16500=825 руб.

Расчёт затрат на вспомогательные материалы.

Затраты на материалы, необходимые для обеспечения нормальной работы ПЭВМ составляют около 1% от стоимости ЭВМ:

ЗЕМ= 0,01*16500 = 165 руб.

Прочие затраты по эксплуатации ПЭВМ.

Прочие косвенные затраты, связанные с эксплуатацией ПЭВМ, состоят из амортизационных отчислений на здания, стоимости услуг сторонних организаций и составляют 5% от стоимости ЭВМ:

ЗПР= 0,05*16500 = 825 руб.

Годовые издержки на заработную плату обслуживающего персонала.

Издержки на заработную плату обслуживающего персонала складываются из основной заработной платы, дополнительной и отчислений на заработную плату:

Ззп = ЗОСНЗП+ЗДОПЗП+ЗОТЧЗП

Таким образом, получим:

Ззп = 150000+90000+81600=321600 руб.

Сумма основной заработной платы определяется исходя из общей численности работающих в штате:

ЗОСНЗП = 12*∑ЗiОКЛ

где

ЗiОКЛ - тарифная ставка i-го работника в мес. руб.;

В штат обслуживающего персонала должны входить инженер-электронщик с месячным окладом 15000 руб. и электрослесарь с окладом 10000 руб.

Тогда, учитывая, что данный персонал обслуживает 2 машин, имеет издержки на основную заработную плату обслуживающего персонала, составят:

ЗОСНЗП = 12*(15000+10000)=300000 руб.

Сумма дополнительной заработной платы составляет 60% от основной заработной платы:

ЗДОПЗП = 0,6*300000 = 180000 руб.

Сумма отчислений на социальные нужды составляет 34% от суммы дополнительной и основной заработных плат:

ЗОТЧЗП = 0,34*(300000+180000) = 163200 руб.

Тогда годовые издержки на заработную плату обслуживающего персонала составят:

ЗЗП = 300000+180000+163200=643200 руб.

Полные затраты на эксплуатацию ЭВМ в течение года составят:

ЗЭВМ = 643200 +2062,5+1381,212+165+825+825 = 648 457,712 руб.

Тогда цена машино-часа арендуемого времени составит:

СЧАС = 648 451,712 /1784 = 363,48.

А затраты на оплату машинного времени составят:

ЗМЕСПП = 363,48*39,32= 14292 руб.

Расчёт общих расходов.

Общие расходы это расходы на освещение, отопление, коммунальные услуги и т.п.

Общие затраты на создание программного продукта составят:

ЗСПП= 389,8 +7191,6+2062,5+14292=23 935,9 руб.

Можно сделать следующие выводы:

В результате расчета, затраты на создание данного программного продукта составили 23 935,9 руб. Снизить затраты на создание можно, например, используя следующие методы: повысить эффективность работы программиста, путем использования более современных ЭВМ; при этом, а также при бережном и аккуратном отношении к компьютерной технике автоматически уменьшатся затраты на ремонт, а значит и необходимость привлечения дополнительного обслуживающего персонала будет гораздо реже. Можно сократить количество компьютерной техники, для работы программиста. В связи с тем, что три четверти расходов идут на оплату труда программиста, возможно, уменьшить его заработную плату, или уменьшить необходимое количество программистов, создающих программу. Можно сократить оклад инженера-электронщика и электрослесаря или объединить их обязанности в должности одного работника.

Заключение

В процессе дипломного проектирования было разработано программное обеспечение конфигурирующее космический симулятор Celestia, и ее дополнения. Данное ПО описано в проектной части и приложении данной работы.

Рассчитанные показатели экономической эффективности данной разработки говорят о целесообразности вложения денежных средств в ее реализацию и внедрение.

Внедрение данной программы призвано облегчить работу астрономов-любителей и обычных пользователей Celestia, а их количество во всем мире очень большое. Для реализации программной части информационной системы выбран язык программирования С++.

Итогом выполнения дипломной работы послужила разработка бксплатного программного продукта с открытым исходным кодом, позволяющего редактировать множество дополнительных параметров Celestia, Lua-инструментов, а также управлять отображением различных объектов, включая космические аппараты.

Для удобства также реализован импорт и экспорт всех параметров в специальный конфигурационный файл.

Список использованной литературы

1. Виснадул, Б.Д. Гагарина, Л. Г. Кокорева, Е.В. Технология разработки программных продуктов - 2008.

. Рудаков, А.В. Технология разработки программных продуктов - 2006.

. ГОСТ 19.202-78 - Требования к содержанию и оформлению - 1980.

. ГОСТ 19.402-78 - Описание программы - 1980.

Приложение 1

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

Unit1.h

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ComCtrls.hpp>

#include <Buttons.hpp>

#include <ExtCtrls.hpp>

#include <jpeg.hpp>

#include <CheckLst.hpp>

#include <Vcl.Dialogs.hpp>

#include <IdBaseComponent.hpp>

#include <IdComponent.hpp>

#include <IdHTTP.hpp>

#include <IdTCPClient.hpp>

#include <IdTCPConnection.hpp>

#include <Vcl.Imaging.pngimage.hpp>

#include <Vcl.Menus.hpp>

//---------------------------------------------------------------------------TMainForm : public TForm

{

__published:// IDE-managed Components

TPageControl *PageControl1;

TTabSheet *MainTab;

TTabSheet *ObjectTab;

TTabSheet *LuaTab;

TTabSheet *AboutTab;

TGroupBox *GroupBox1;

TEdit *EditDir1;

TEdit *Edit3;

TBitBtn *BitBtn1;

TBitBtn *BitBtn2;

TGroupBox *GroupBox2;

TCheckBox *CheckBox1;

TCheckBox *CheckBox2;

TCheckBox *CheckBox4;

TGroupBox *GroupBox3;

TCheckBox *CheckBox5;

TCheckBox *CheckBox6;

TCheckBox *CheckBox7;

TCheckBox *CheckBox8;

TBitBtn *BitBtn3;

TEdit *Edit2;

TLabel *LabelCelestia;

TLabel *LabelLink2;

TLabel *LabelDirComment;

TLabel *Label5;

TLabel *Label6;

TLabel *LabelAbout;

TLabel *Label1;

TLabel *Label2;

TGroupBox *GroupBox4;

TImage *Image2;

TImage *Image3;

TImage *Image4;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TRadioButton *RadioButton3;

TEdit *EditDir2;

TEdit *EditDir3;

TTabSheet *SettingTab;

TGroupBox *GroupBox5;

TButton *ButtonDir1;

TButton *ButtonDir2;

TButton *ButtonDir3;

TLabel *LabelDir1;

TLabel *LabelDir2;

TLabel *LabelDir3;

TLabel *Label3;

TLabel *Label4;

TLabel *Label10;

TCheckBox *CheckBox10;

TLabel *Label11;

TLabel *Label12;

TLabel *Label14;

TLabel *Label16;

TLabel *Label19;

TEdit *Edit5;

TGroupBox *GroupBox7;

TButton *Button1;

TEdit *EditScreenDir;

TComboBox *ComboBox1;

TEdit *EditStartScript;

TLabel *Label22;

TEdit *EditDemoScript;

TLabel *Label23;

TLabel *Label21;

TLabel *Label20;

TLabel *Label24;

TLabel *Label25;

TCheckBox *CheckBox11;

TCheckBox *CheckBox12;

TCheckBox *CheckBox13;

TScrollBar *ScrollBar1;

TScrollBar *ScrollBar2;

TEdit *Edit1;

TLabel *Label26;

TLabel *Label27;

TGroupBox *GroupBox8;

TCheckBox *CheckBox14;

TLabel *Label28;

TEdit *Edit4;

TLabel *Label29;

TComboBox *ComboBox2;

TCheckBox *CheckBox15;

TCheckBox *CheckBox16;

TCheckBox *CheckBox17;

TRadioGroup *RadioGroup1;

TCheckBox *CheckBox18;

TCheckBox *CheckBox19;*GroupBox6;*CheckBox21;*PlayerEdit;*Button2;*GroupBox9;*GroupBox10;*GroupBox11;*Label9;*BitBtn4;*Label17;*Button3;*Button4;*Label18;*PlayerDialog;*Page1;*Page2;*CheckBox9;*CheckBox3;*CheckBox22;*PageControl2;*CheckBox20;*CheckBox23;*CheckBox24;*CheckBox25;*CheckBox26;*CheckBox27;*CheckBox28;*CheckBox29;*CheckBox30;*CheckBox31;*CheckBox32;*Label30;*CheckBox33;*CheckBox34;*CheckBox35;*CheckBox36;*CheckBox37;*CheckBox38;*CheckBox39;*CheckBox40;*CheckBox41;*CheckBox42;*CheckBox43;*CheckBox44;*CheckBox45;*CheckBox46;*CheckBox47;*CheckBox48;*CheckBox49;*CheckBox50;*CheckBox51;*CheckBox52;*CheckBox53;*CheckBox54;*CheckBox55;*CheckBox56;*Label31;*CheckBox57;*CheckBox58;*CheckBox59;*CheckBox60;*CheckBox61;*ImportDialog;*Label32;*ExportDialog;*Label8;*Label13;*GroupBox12;*Link1;*Link2;*Link3;*Link4;*Web;*Image5;*Image6;*Image7;*Image8;*Label15;*Label33;*CheckBox62;*GroupBox13;*CheckBox63;*PopMenu;*Hlp;

void __fastcall LabelLink2Click(TObject *Sender);

void __fastcall LabelLink2MouseLeave(TObject *Sender);

void __fastcall BitBtn1Click(TObject *Sender);

void __fastcall BitBtn3Click(TObject *Sender);

void __fastcall BitBtn2Click(TObject *Sender);

void __fastcall Edit2KeyPress(TObject *Sender, char &Key);

void __fastcall Edit3KeyPress(TObject *Sender, char &Key);

void __fastcall Edit2Click(TObject *Sender);

void __fastcall Edit3Click(TObject *Sender);

void __fastcall BitBtn4Click(TObject *Sender);

void __fastcall FormShow(TObject *Sender);

void __fastcall RadioButton1Click(TObject *Sender);

void __fastcall RadioButton2Click(TObject *Sender);

void __fastcall RadioButton3Click(TObject *Sender);

void __fastcall Edit2Change(TObject *Sender);

void __fastcall Edit3Change(TObject *Sender);

void __fastcall ButtonDir1Click(TObject *Sender);

void __fastcall ButtonDir2Click(TObject *Sender);

void __fastcall ButtonDir3Click(TObject *Sender);

void __fastcall Image2Click(TObject *Sender);

void __fastcall Image3Click(TObject *Sender);

void __fastcall Image4Click(TObject *Sender);

void __fastcall Label10MouseLeave(TObject *Sender);

void __fastcall Label10Click(TObject *Sender);

void __fastcall Label14MouseLeave(TObject *Sender);

void __fastcall Label14Click(TObject *Sender);__fastcall Label16MouseLeave(TObject *Sender);__fastcall Label16Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Edit5Change(TObject *Sender);

void __fastcall Edit5Click(TObject *Sender);

void __fastcall Edit5KeyPress(TObject *Sender, char &Key);

void __fastcall ScrollBar1Change(TObject *Sender);

void __fastcall ScrollBar2Change(TObject *Sender);

void __fastcall Edit1Change(TObject *Sender);

void __fastcall Edit1Click(TObject *Sender);

void __fastcall Edit4Change(TObject *Sender);

void __fastcall Edit4Click(TObject *Sender);

void __fastcall Edit4KeyPress(TObject *Sender, char &Key);

void __fastcall CheckBox16Click(TObject *Sender);__fastcall Button2Click(TObject *Sender);__fastcall CheckBox22Click(TObject *Sender);__fastcall Button3Click(TObject *Sender);__fastcall Label32MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Label32MouseLeave(TObject *Sender);__fastcall Label32Click(TObject *Sender);__fastcall Label16MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Label14MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall LabelLink2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Label10MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Button4Click(TObject *Sender);__fastcall Label8MouseLeave(TObject *Sender);__fastcall Label8MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Label8Click(TObject *Sender);__fastcall Label13MouseLeave(TObject *Sender);__fastcall Label13MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Label13Click(TObject *Sender);__fastcall Link1MouseLeave(TObject *Sender);__fastcall Link1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Link1Click(TObject *Sender);__fastcall Link2MouseLeave(TObject *Sender);__fastcall Link2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Link2Click(TObject *Sender);__fastcall Link3MouseLeave(TObject *Sender);__fastcall Link3MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Link3Click(TObject *Sender);__fastcall Link4MouseLeave(TObject *Sender);__fastcall Link4MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Link4Click(TObject *Sender);__fastcall Label15MouseLeave(TObject *Sender);__fastcall Label15MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Label15Click(TObject *Sender);__fastcall Label33MouseLeave(TObject *Sender);__fastcall Label33MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);__fastcall Label33Click(TObject *Sender);__fastcall HlpClick(TObject *Sender);:// User declarations:// User declarations

__fastcall TMainForm(TComponent* Owner);__fastcall GetVer(String FileName);ObjectProv(String PodFolder, String Folder, String SSC, TCheckBox *Check);ObjectSave(String PodFolder, String Folder, TCheckBox *Check);ObjectVos(String PodFolder, String Folder, String SSC, TCheckBox *Check, bool extras);EndingProv(String Dir, String Folder, String SSC, TCheckBox *Check);EndingSave(String Dir, String Folder, String SSC, TCheckBox *Check);EndingVos(String Dir, String Folder, String SSC, TCheckBox *Check);CheckAll(bool checked);HSatRingsProv(String Path, TCheckBox *Check);HSatRingsSave(String Path, TCheckBox *Check);

};

//---------------------------------------------------------------------------PACKAGE TMainForm *MainForm;

//---------------------------------------------------------------------------

#endif.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "FileCtrl.hpp"

#include "IniFiles.hpp"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"* EP;* Settings;* Links;* Lang;startfolder,AutoSave;S[7], sl;LuaAdr;Link[4];CelestiaVersion;Language,LanguageFile;LinkLocale[15];StringsLocale[15];MessegesLocale[15];

TMainForm *MainForm;

//---------------------------------------------------------------------------

////////////////////////////////////////////////////////////////////////////////

// ПРОВЕРКИ ПРИ СТАРТЕ //

////////////////////////////////////////////////////////////////////////////////

__fastcall TMainForm::TMainForm(TComponent* Owner)

: TForm(Owner)

{

//ЗАГРУЗКА ЛОКАЛИЗАЦИИ_t charlang[255];lc = GetSystemDefaultLCID();(lc,LOCALE_SENGLANGUAGE,charlang,sizeof(charlang));= charlang;=ExtractFilePath(Application->ExeName)+"manager\\language\\"+Language+".lng";= new TMemIniFile(LanguageFile);>Title=Lang->ReadString("Strings","AppName","Celestia Config Manager")+" v"+GetVer(Application->ExeName);>Caption=Application->Title;

//Вкладка "Основные"->Caption=Lang->ReadString("Main","Label19","You are using:")+" ";->Caption=Lang->ReadString("Main","Label32","Download new version");[1]=Lang->ReadString("Links","Link1","http://sourceforge.net/projects/celestia/files/Celestia-win32-bin/");>Filter=Lang->ReadString("Strings","EIDialogFilter","Configuration files")+"|*.cfg";>Filter=Lang->ReadString("Strings","EIDialogFilter","Configuration files")+"|*.cfg";>Filter=Lang->ReadString("Strings","PlayerDialogFilter","Executable files")+"|*.exe";>Caption=Lang->ReadString("Main","MainTab","Main");->Caption=Lang->ReadString("Main","GroupBox1","Extras directories");->Caption=Lang->ReadString("Main","LabelDir1","Standard addons directory (default)");->Caption=Lang->ReadString("Main","LabelDir2","Addons directory (default)");->Caption=Lang->ReadString("Main","LabelDir3","Personal addons directory (optional)");>Caption=Lang->ReadString("Main","LabelDirComment","There are addons folders for the program. You can add or change folders which Celestia will look for installed addons.");->Caption=Lang->ReadString("Main","Label5","How many sample points use to render orbit paths:");->Caption=Lang->ReadString("Main","Label1","Allowed values: from 80 to 400");->Caption=Lang->ReadString("Main","Label6","Number of segments in which ring systems are rendered:");->Caption=Lang->ReadString("Main","Label2","Allowed values: from 100 to 2000");->Caption=Lang->ReadString("Main","GroupBox4","Cursor in Celestia");->Caption=Lang->ReadString("Main","RadioButton1","Crosshair");->Caption=Lang->ReadString("Main","RadioButton2","Inverted crosshair");->Caption=Lang->ReadString("Main","RadioButton3","Arrow");->Caption=Lang->ReadString("Main","GroupBox7","Scripts");->Caption=Lang->ReadString("Main","Label20","Script screenshot directory");->Caption=Lang->ReadString("Main","Label21","Script system access policy");->Items->Add(Lang->ReadString("Strings","ComboBox1Item1","Ask"));->Items->Add(Lang->ReadString("Strings","ComboBox1Item2","Allow"));->Items->Add(Lang->ReadString("Strings","ComboBox1Item3","Deny"));->Caption=Lang->ReadString("Main","Label22","Init script");->Caption=Lang->ReadString("Main","Label23","Demonstration script");->Caption=Lang->ReadString("Main","Label24","Speed of rotation of observer's camera, when holding keyboard arrows <- or ->");->Caption=Lang->ReadString("Main","Label26","Note: This parameter affects the camera rotation speed in 'Planetarium' mode, being near planet surface.");->Caption=Lang->ReadString("Main","Label25","Mouse rotation sensitivity:");->Caption=Lang->ReadString("Main","Label27","Note: The value 0.0 disables this function.");->Caption=Lang->ReadString("Main","GroupBox6","Incidental music Celestia EP v2.0");->Caption=Lang->ReadString("Main","CheckBox21","Enabled");>EditLabel->Caption=Lang->ReadString("Main","PlayerEdit","Path to your media player (required):");>Caption=Lang->ReadString("Main","Help","Help");->Caption=Lang->ReadString("Strings","SaveButton","Save");

//Вкладка "Объекты и время">Caption=Lang->ReadString("ObjectsTime","ObjectTab","Objects and time");->Caption=Lang->ReadString("ObjectsTime","GroupBox2","Show");->Caption=Lang->ReadString("ObjectsTime","CheckBox1","Sun flares");->Caption=Lang->ReadString("ObjectsTime","CheckBox2","Jupiter rings");->Caption=Lang->ReadString("ObjectsTime","CheckBox10","Mars Features (pack by Leserg)");[2]=Lang->ReadString("Links","Link2","http://en.celestiaproject.ru/?p=82");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox17","Kuiper Belt");[3]=Lang->ReadString("Links","Link3","http://en.celestiaproject.ru/?p=76");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox18","Dynamic clouds of Jupiter");[4]=Lang->ReadString("Links","Link4","http://en.celestiaproject.ru/?p=53");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox19","Io 3D volcanoes");->Caption=Lang->ReadString("ObjectsTime","CheckBox20","Space lift");[5]=Lang->ReadString("Links","Link5","http://en.celestiaproject.ru/?p=89");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox61","Oort Cloud");[6]=Lang->ReadString("Links","Link6","http://en.celestiaproject.ru/?p=85");->Caption=Lang->ReadString("Strings","Download","Download");->Caption=Lang->ReadString("ObjectsTime","CheckBox62","Highlight the particles of Saturn rings (only Celestia EP v3.0)");

//Космические аппараты->Caption=Lang->ReadString("ObjectsTime","GroupBox5","Spacecrafts, which doesn't exists anymore");->Caption=Lang->ReadString("ObjectsTime","Page1","Page 1");->Caption=Lang->ReadString("ObjectsTime","Page2","Page 2");->Caption=Lang->ReadString("Spacecrafts","CheckBox9","Mir");->Caption=Lang->ReadString("Spacecrafts","CheckBox3","Galileo");->Caption=Lang->ReadString("Spacecrafts","CheckBox23","Cassini-Huygens");->Caption=Lang->ReadString("Spacecrafts","CheckBox24","Satellite 1");->Caption=Lang->ReadString("Spacecrafts","CheckBox25","Satellite 2");->Caption=Lang->ReadString("Spacecrafts","CheckBox26","Satellite 3");->Caption=Lang->ReadString("Spacecrafts","CheckBox27","Salyut 7");->Caption=Lang->ReadString("Spacecrafts","CheckBox28","Mariner");->Caption=Lang->ReadString("Spacecrafts","CheckBox29","Venus Express");->Caption=Lang->ReadString("Spacecrafts","CheckBox30","Chandra X-Ray Observatory");->Caption=Lang->ReadString("Spacecrafts","CheckBox31","Corot");->Caption=Lang->ReadString("Spacecrafts","CheckBox32","Herschel");->Caption=Lang->ReadString("Spacecrafts","CheckBox33","Voyager 1 and 2");->Caption=Lang->ReadString("Spacecrafts","CheckBox34","New Horizons");->Caption=Lang->ReadString("Spacecrafts","CheckBox35","Spitzer");->Caption=Lang->ReadString("Spacecrafts","CheckBox36","ISO");->Caption=Lang->ReadString("Spacecrafts","CheckBox37","Envisat");->Caption=Lang->ReadString("Spacecrafts","CheckBox38","AMSAT-OSCAR 7");->Caption=Lang->ReadString("Spacecrafts","CheckBox39","Apollo 10 and 11");->Caption=Lang->ReadString("Spacecrafts","CheckBox40","Dawn");->Caption=Lang->ReadString("Spacecrafts","CheckBox41","Deep Impact");->Caption=Lang->ReadString("Spacecrafts","CheckBox42","Giotto");->Caption=Lang->ReadString("Spacecrafts","CheckBox43","Helios 1 and 2");->Caption=Lang->ReadString("Spacecrafts","CheckBox44","ICE");->Caption=Lang->ReadString("Spacecrafts","CheckBox45","Luna and Lunokhod");->Caption=Lang->ReadString("Spacecrafts","CheckBox46","LRO");->Caption=Lang->ReadString("Spacecrafts","CheckBox47","Magellan");->Caption=Lang->ReadString("Spacecrafts","CheckBox48","Mars Express");->Caption=Lang->ReadString("Spacecrafts","CheckBox49","MGS");->Caption=Lang->ReadString("Spacecrafts","CheckBox50","MRO");->Caption=Lang->ReadString("Spacecrafts","CheckBox51","Messenger");->Caption=Lang->ReadString("Spacecrafts","CheckBox52","Nozomi");->Caption=Lang->ReadString("Spacecrafts","CheckBox53","Phoenix Lander");->Caption=Lang->ReadString("Spacecrafts","CheckBox54","Pioneers");->Caption=Lang->ReadString("Spacecrafts","CheckBox55","Planck");->Caption=Lang->ReadString("Spacecrafts","CheckBox56","Rosetta");->Caption=Lang->ReadString("Spacecrafts","CheckBox57","Ulysses");->Caption=Lang->ReadString("Spacecrafts","CheckBox58","Venera");->Caption=Lang->ReadString("Spacecrafts","CheckBox59","Viking");->Caption=Lang->ReadString("Spacecrafts","CheckBox60","Zond 3");->Caption=Lang->ReadString("Spacecrafts","CheckBox22","Select all");->Caption=Lang->ReadString("Strings","SaveButton","Save");

//Вкладка "Lua-инструменты"->Caption=Lang->ReadString("LuaTools","CheckBox4","Show at Celestia startup");->Caption=Lang->ReadString("LuaTools","GroupBox3","Show automatically");->Caption=Lang->ReadString("LuaTools","CheckBox5","Information about objects");->Caption=Lang->ReadString("LuaTools","CheckBox6","Coordinates");->Caption=Lang->ReadString("LuaTools","CheckBox11","Magnification mode");->Caption=Lang->ReadString("LuaTools","CheckBox12","H-R Diagram");->Caption=Lang->ReadString("LuaTools","CheckBox7","Keplerian params");->Caption=Lang->ReadString("LuaTools","CheckBox13","Virtual pad");->Caption=Lang->ReadString("LuaTools","CheckBox8","Compass");->Caption=Lang->ReadString("LuaTools","GroupBox13","Objects from the addons catalog");->Caption=Lang->ReadString("LuaTools","CheckBox63","Asteroid Belt");->Caption=Lang->ReadString("LuaTools","GroupBox8","Advanced settings");->Caption=Lang->ReadString("LuaTools","CheckBox14","Show local time");->Caption=Lang->ReadString("LuaTools","CheckBox15","Center compass");->Caption=Lang->ReadString("LuaTools","CheckBox16","Alt-azimuth mode disabled");->Caption=Lang->ReadString("LuaTools","Label29","Date format:");->Items->Add(Lang->ReadString("Strings","ComboBox2Item1","Country default"));->Items->Add(Lang->ReadString("Strings","ComboBox2Item2","dd/mm/yyyy"));->Items->Add(Lang->ReadString("Strings","ComboBox2Item3","mm/dd/yyyy"));->Items->Add(Lang->ReadString("Strings","ComboBox2Item4","yyyy/mm/dd"));->Caption=Lang->ReadString("LuaTools","Label28","Custom goto duration");->Caption=Lang->ReadString("LuaTools","RadioGroup1","Color scheme");->Items->Add(Lang->ReadString("Strings","RadioGroup1Item1","Colorless transparent"));->Items->Add(Lang->ReadString("Strings","RadioGroup1Item2","Translucent blue"));->Items->Add(Lang->ReadString("Strings","RadioGroup1Item3","Green translucent"));->Items->Add(Lang->ReadString("Strings","RadioGroup1Item4","Purple translucent"));->Caption=" "+Lang->ReadString("LuaTools","Label11","Lua Tools not found!");->Caption=Lang->ReadString("Strings","Download","Download")+":";->Caption=Lang->ReadString("Links","Link7","http://en.celestiaproject.ru/?cat=29");[7]=Lang->ReadString("Links","Link7","http://en.celestiaproject.ru/?cat=29");->Caption=Lang->ReadString("Strings","SaveButton","Save");

//Вкладка "Управление настройками">Caption=Lang->ReadString("ManageSettings","SettingsTab","Manage settings");->Caption=Lang->ReadString("ManageSettings","GroupBox9","Import settings");->Caption=Lang->ReadString("ManageSettings","Label17","It is possible to import a file with settings, which was exported earlier. You'll get the exact configuration, which was exported.");->Caption=Lang->ReadString("ManageSettings","Button3","Select file to import");->Caption=Lang->ReadString("ManageSettings","GroupBox10","Export settings");->Caption=Lang->ReadString("ManageSettings","Label18","It is possible to export settings to a file. It's convenient, if you'd have to reinstall Celestia or the entire operating system, and the default settings are not for you.");->Caption=Lang->ReadString("ManageSettings","Button4","Export settings to file");->Caption=Lang->ReadString("ManageSettings","GroupBox11","Restore default settings");->Caption=Lang->ReadString("ManageSettings","Label9","When restoring an original settings, default values are applied to all Celestia parameters, Lua-tools and addons.");->Caption=Lang->ReadString("ManageSettings","BitBtn4","Perform recovery");

//Вкладка "О программе">Caption=Lang->ReadString("About","AboutTab","About");->Caption=Lang->ReadString("About","Label7","Configuration manager was developed for Celestia 1.6.1, Celestia Educational and Celestia Extended Pack. It's designed to make Celestia configuration precise, and for managing its addons. It supports most of the spacecrafts, and following Lua-tools: Lua Edu Tools v1.2 beta 8, Lua Edu Tools v1.2 beta 9, Lua Universal Tools v1.0 and Lua Universal Tools v2.0.");->Caption=Lang->ReadString("About","Label3","Thanks to: Sergey Leonov a.k.a Leserg for testing of the first version and useful tips; Artyom Volgin a.k.a Zemlyanin for ideas on functionality and testing of all versions.");>Caption=Lang->ReadString("About","LabelCelestia","Celestia in Russia")+":";->Caption=Lang->ReadString("About","Label4","Discussion")+":";->Caption=Lang->ReadString("About","Label10","on shatters.net/forum");[8]=Lang->ReadString("Links","Link8","#"); //ссылка на тему англоязычного форума (форум недоступен)->Caption=Lang->ReadString("About","GroupBox12","Recommended downloads")+":";

//Оставшиеся строки[1]=Lang->ReadString("Strings","Unknown","unknown");[2]=" "+Lang->ReadString("Strings","Outdated","(outdated)");[3]=Lang->ReadString("Strings","Version","Version");[4]=Lang->ReadString("Strings","NoNetwork","No Internet connection");[5]=" "+Lang->ReadString("Strings","LUT2Notice","In Lua Universal Tools v2.0 some parameters are not used.");[6]=Lang->ReadString("Strings","LuaTools","Lua Tools");[7]=Lang->ReadString("Strings","ExtrasDir","Choose folder with the addons for Celestia")+":";[8]=Lang->ReadString("Strings","ScreenDir","Choose folder to save screenshots")+":";[9]=Lang->ReadString("Strings","AltAzimuthOn","Alt-azimuth mode enabled");[10]=Lang->ReadString("Strings","AltAzimuthOff","Alt-azimuth mode disabled");[11]=Lang->ReadString("Strings","NoLocalizedHelp","Help file in your language not found. Open Help in English?");

//Сообщения[1]=Lang->ReadString("Messages","Message1","To run the utility, place it in the root directory of Celestia.");[2]=Lang->ReadString("Messages","Message2","Invalid value!");[3]=Lang->ReadString("Messages","Message3","Invalid addons folder! The first field must be specified.");[4]=Lang->ReadString("Messages","Message4","The 'Init script' must be specified!");[5]=Lang->ReadString("Messages","Message5","The 'Demo script' must be specified!");[6]=Lang->ReadString("Messages","Message6","Settings were saved successfully!");[7]=Lang->ReadString("Messages","Message7","Do you really want to restore default settings?");[8]=Lang->ReadString("Messages","Message8","Default settings were restored successfully!");[9]=Lang->ReadString("Messages","Message9","Settings were imported successfully!");[10]=Lang->ReadString("Messages","Message10","Settings were successfully exported to a file");

//ПРОВЕРКА РАСПОЛОЖЕНИЯ ПРОГРАММЫ(FileExists(ExtractFilePath(Application->ExeName)+"celestia.cfg") && FileExists(ExtractFilePath(Application->ExeName)+"celestia.exe") || FileExists(ExtractFilePath(Application->ExeName)+"celestia161-ED.exe") || FileExists(ExtractFilePath(Application->ExeName)+"Celestia EP.exe"))

{= true;(ExtractFilePath(Application->ExeName)+ "temp");->Caption="|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|";->Caption="|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|";

}

{(Application->MessageBox(MessegesLocale[1].c_str(), Application->Title.c_str(), MB_OK | MB_ICONEXCLAMATION)==MB_OK)

{= false;

}

}

}

//---------------------------------------------------------------------------

//Функция получения версии exe файла__fastcall TMainForm::GetVer(String FileName)

{

String Version;

DWORD h;

DWORD Size = GetFileVersionInfoSize(FileName.c_str(), &h);

if (Size == 0)

{= StringsLocale[1].c_str();

return Version;

}

TCHAR *buf;

buf = (TCHAR *)GlobalAlloc(GMEM_FIXED, Size);

if (GetFileVersionInfo(FileName.c_str(), h, Size, buf) != 0)

{ValueBuf;

UINT Len;

if (VerQueryValue(buf, L"\\", &(void *)ValueBuf, &Len) != 0)= String().sprintf(L"%d.%d.%d",

HIWORD(ValueBuf->dwFileVersionMS),(ValueBuf->dwFileVersionMS),

HIWORD(ValueBuf->dwFileVersionLS),(ValueBuf->dwFileVersionLS));

}

GlobalFree(buf);Version;

}

//---------------------------------------------------------------------------__fastcall TMainForm::FormShow(TObject *Sender)

{(!startfolder)>Terminate();

{

//Включаем видимость формы>AlphaBlend=false;

//Считывание версии Celestia(FileExists(ExtractFilePath(Application->ExeName)+"celestia161-ED.exe"))="Celestia 1.6.1 Educational";

{(FileExists(ExtractFilePath(Application->ExeName)+"\\documents\\"+"Информация о Celestia EP v3.0.pdf"))

{="Celestia Extended Pack v3.0";->Enabled=true;

}(FileExists(ExtractFilePath(Application->ExeName)+"\\documents\\"+"Информация о Celestia EP v2.0.pdf"))

{="Celestia Extended Pack v2.0";->Visible=true;

}(FileExists(ExtractFilePath(Application->ExeName)+"Информация о Celestia EP v1.1.txt"))="Celestia Extended Pack v1.1";(FileExists(ExtractFilePath(Application->ExeName)+"Информация о Celestia EP.txt"))="Celestia Extended Pack v1.0";

}(CelestiaVersion!="")->Caption=Label19->Caption+CelestiaVersion;

{

//Проверка версии Celestia->Caption=Label19->Caption+"Celestia "+GetVer(ExtractFilePath(Application->ExeName)+"celestia.exe");(GetVer(ExtractFilePath(Application->ExeName)+"celestia.exe")!="1.6.1")

{->Caption=Label19->Caption+StringsLocale[2];->Visible=true;

}

}

//Авторская защита>Caption="© Alexell\n"+StringsLocale[3]+": "+GetVer(Application->ExeName)+" (28.04.2014)";->Caption="www.celestiaproject.ru";

//Установка прокси для режима Debug

#ifdef _DEBUG

Web->ProxyParams->BasicAuthentication=true;>ProxyParams->ProxyServer="192.168.200.110";>ProxyParams->ProxyPort=3128;>ProxyParams->ProxyUsername="sunduk";>ProxyParams->ProxyPassword="gbplf";

#endif

//Блок ссылок "Рекомендуем скачать"*TMP = new TStringList;

{(Language=="Russian")>Text=Web->Get("http://files.celestiaproject.ru/config_manager/links_ru.ini");>Text=Web->Get("http://files.celestiaproject.ru/config_manager/links_en.ini");>SaveToFile(ExtractFilePath(Application->ExeName)+"manager\\"+"links.ini");

}(...){}TMP;= new TIniFile(ExtractFilePath(Application->ExeName)+"manager\\"+"links.ini");->Caption=Links->ReadString("Link1","Caption",StringsLocale[4]);->Caption=Links->ReadString("Link2","Caption",StringsLocale[4]);->Caption=Links->ReadString("Link3","Caption",StringsLocale[4]);->Caption=Links->ReadString("Link4","Caption",StringsLocale[4]);[1]=Links->ReadString("Link1","URL",StringsLocale[4]);[2]=Links->ReadString("Link2","URL",StringsLocale[4]);[3]=Links->ReadString("Link3","URL",StringsLocale[4]);[4]=Links->ReadString("Link4","URL",StringsLocale[4]);

delete Links;

//ПРОВЕРКА ВКЛАДКИ "ОСНОВНЫЕ"

TStringList *MainProv=new TStringList;*DirList=new TStringList;OrbitP="OrbitPathSamplePoints ";RingsP="RingSystemSections ";op;rp;OrbitDigit="";RingDigit="";>LoadFromFile(ExtractFilePath(Application->ExeName) + "celestia.cfg");

//Считывание папок с дополнениями[3]=ExtractFilePath(Application->ExeName);>LoadFromFile(S[3]+"celestia.cfg");(int i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("ExtrasDirectories")>0) && (DirList->Strings[i][1] != '#'))

{[0]=""; S[1]=""; S[2]="";cr, kaw=0 ;=DirList->Strings[i];((cr=sl.Pos("["))>0)(;cr<=sl.Length();cr++)

{(sl[cr]=='"') kaw++; else(kaw%2==1) S[3&(kaw/2)] += sl[cr] ;(sl[cr]==']') break ;

}->Text = S[0];->Text = S[1];

EditDir3->Text = S[2];

}

//Считывание точек орбит

for (int i=0;i<MainProv->Count;i++)((op=MainProv->Strings[i].Pos(OrbitP))>0)(int k=op;k<=MainProv->Strings[i].Length();k++)(isdigit(MainProv->Strings[i][k]))+=MainProv->Strings[i][k];

Edit2->Text=OrbitDigit;

//Считывание сегментов колец

for (int i=0;i<MainProv->Count;i++)((rp=MainProv->Strings[i].Pos(RingsP))>0)(int k=rp;k<=MainProv->Strings[i].Length();k++)(isdigit(MainProv->Strings[i][k]))+=MainProv->Strings[i][k];->Text=RingDigit;

//Считывание курсора(int i=0;i<MainProv->Count;i++)

{(MainProv->Strings[i].Pos(" Cursor \""))

{(MainProv->Strings[i]==" Cursor \"crosshair\"")

{->Checked=true;->Checked=false;->Checked=false;

}(MainProv->Strings[i]==" Cursor \"inverting crosshair\"")

{->Checked=false;->Checked=true;->Checked=false;

}(MainProv->Strings[i]==" Cursor \"arrow\"")

{->Checked=false;->Checked=false;->Checked=true;

}

}

}

//Проверка папки скриншотов[3]=ExtractFilePath(Application->ExeName);>LoadFromFile(S[3]+"celestia.cfg");(int i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("ScriptScreenshotDirectory")>0) && (DirList->Strings[i][1] != '#'))

{[4]="";(DirList->Strings[i]==" ScriptScreenshotDirectory \"\"")[4]="";

{cr;=DirList->Strings[i];((cr=sl.Pos("\""))>0)(;cr<=sl.Length();cr++)

{(sl[cr]=='"')[4] += sl[cr+1];

{(sl[cr+1]=='"') break ;S[4] += sl[cr+1];

}

}

}>Text = S[4];

}

//Проверка параметра ScriptSystemAccessPolicy(int i=0;i<MainProv->Count;i++)

{(MainProv->Strings[i].Pos(" ScriptSystemAccessPolicy"))

{(MainProv->Strings[i]==" ScriptSystemAccessPolicy \"ask\"")->ItemIndex=0;(MainProv->Strings[i]==" ScriptSystemAccessPolicy \"allow\"")->ItemIndex=1;(MainProv->Strings[i]==" ScriptSystemAccessPolicy \"deny\"")->ItemIndex=2;

}

}

//Проверка стартового скрипта[3]=ExtractFilePath(Application->ExeName);[5]="";>LoadFromFile(S[3]+"celestia.cfg");(int i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("InitScript")>0) && (DirList->Strings[i][1] != '#'))

{cr;=DirList->Strings[i];((cr=sl.Pos("\""))>0)(;cr<=sl.Length();cr++)

{(sl[cr]=='"')[5] += sl[cr+1];

{(sl[cr+1]=='"') break ;S[5] += sl[cr+1];

}

}>Text = S[5];

}

//Проверка Demo сценария[3]=ExtractFilePath(Application->ExeName);[6]="";>LoadFromFile(S[3]+"celestia.cfg");(int i=0;i<DirList->Count;i++)((DirList->Strings[i].Pos("DemoScript")>0) && (DirList->Strings[i][1] != '#'))

{cr;=DirList->Strings[i];((cr=sl.Pos("\""))>0)(;cr<=sl.Length();cr++)

{(sl[cr]=='"')[6] += sl[cr+1];

{(sl[cr+1]=='"') break ;S[6] += sl[cr+1];

}

}>Text = S[6];

}

//Считывание скорости вращенияRotateP=" RotateAcceleration ";RotateDigit="";(int i=0;i<MainProv->Count;i++)(op=MainProv->Strings[i].Pos(RotateP)>0)(int k=22;k<=MainProv->Strings[i].Length();k++)(MainProv->Strings[i][k]=='.');+=MainProv->Strings[i][k];->Text=RotateDigit;->Position=StrToInt(Edit5->Text);

//Считывание чувствительности мышиMouseRotP=" MouseRotationSensitivity ";MouseDigit="";pos,postemp;.DecimalSeparator='.';(int i=0;i<MainProv->Count;i++)

{(MainProv->Strings[i].Pos(MouseRotP)>0)

{(int k=27;k<=MainProv->Strings[i].Length();k++)+=MainProv->Strings[i][k];

}

}->Text=MouseDigit;=StrToFloat(MouseDigit);=postemp*10;->Position=pos;.DecimalSeparator=',';

//Проверка музыкального проигрывателя для Celestia EP v2.0

if(GroupBox6->Visible==true)

{= new TIniFile(ExtractFilePath(Application->ExeName)+"celestia_ep.ini");(EP->ReadString("Settings","Music","")=="true")->Checked=true;->Checked=false;>Text=EP->ReadString("Settings","Player","");EP;

}MainProv;DirList;

//-------------------------

//ПРОВЕРКА ВКЛАДКИ "ОБЪЕКТЫ И ВРЕМЯ"

//Проверка Солнечных вспышек(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\sun\\","sun_flares","sun flares.ssc",CheckBox1);("extras\\","sun_flares","sun flares.ssc",CheckBox1);

//Проверка колец Юпитера(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

ObjectProv("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","Jupiter Rings","Jupiter.ssc",CheckBox2);("extras\\","Jupiter Rings","Jupiter.ssc",CheckBox2);

//Проверка Достопримечательностей Марса(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

ObjectProv("data\\solar-system\\planets-&-moons\\mars\\","Mars Surface Features","Mars Features.ssc",CheckBox10);("extras\\Solar System\\Planet\\Mars\\","Mars Surface Features","Mars Features.ssc",CheckBox10);

//Проверка Пояса Койпера(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\","kuiper-belt","Kuiper_Belt.ssc",CheckBox17);

ObjectProv("extras\\","Kuiper_Belt","Kuiper_Belt.ssc",CheckBox17);

//Проверка Динамической атмосферы Юпитера(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

ObjectProv("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","JupClouds","JupClouds.ssc",CheckBox18);("extras\\","Jupiter_Clouds","JupClouds.ssc",CheckBox18);

//Проверка вулканов Ио(Label19->Caption.Pos("Celestia Extended Pack v1.0")) //недочет в самой сборке("extras\\","iovolcanoes\\iovolcanoes","volcanoes.ssc",CheckBox19);

{(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

ObjectProv("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","iovolcanoes","volcanoes.ssc",CheckBox19);("extras\\","iovolcanoes","volcanoes.ssc",CheckBox19);

}

//Космический лифт(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\fiction-objects\\","space-lift","Space Lift.ssc",CheckBox20);("extras\\","Space Lift","Space Lift.ssc",CheckBox20);

//Облако Оорта(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\","oort-cloud","OC.dsc",CheckBox61);("extras\\","Oort_Cloud","OC.dsc",CheckBox61);

//Подсветка частиц колец Сатурна("data\\solar-system\\planets-&-moons\\saturn\\saturn-rings-model\\models\\saturn-ring-element.cmod", CheckBox62);

//Проверка Ending у космических аппаратов(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "mir", "mir.ssc", CheckBox9);("extras-standard\\", "mir", "mir.ssc", CheckBox9);

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingProv("data\\spacecrafts\\jupiter-missions\\", "galileo", "galileo.ssc", CheckBox3);

//else

//EndingProv("extras-standard\\", "galileo", "galileo.ssc", CheckBox3);

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingProv("data\\spacecrafts\\saturn-missions\\", "cassini", "cassini.ssc", CheckBox23);

//else

//EndingProv("extras\\", "Cassini-Huygens", "cassini_huygens.ssc", CheckBox23);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Sputnik 1", "sputnik-1.ssc", CheckBox24);("extras\\", "Sputnik 1", "sputnik-1.ssc", CheckBox24);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Spoutnik 2", "Spoutnik.ssc", CheckBox25);("extras\\", "Spoutnik 2", "Spoutnik.ssc", CheckBox25);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Sputnik 3", "Spoutnik3.ssc", CheckBox26);

EndingProv("extras\\", "Sputnik 3", "Spoutnik3.ssc", CheckBox26);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Salyut7", "JACKsalyut7.ssc", CheckBox27);("extras\\", "", "JACKsalyut7.ssc", CheckBox27);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "Mariner2", "JACKmariner2-xyz.ssc", CheckBox28);("extras\\", "Mariner2", "JACKmariner2-xyz.ssc", CheckBox28);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Mariner9", "mariner 9.ssc", CheckBox28);("extras\\", "Mariner9", "mariner 9.ssc", CheckBox28);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "venus_express", "venus_express.ssc", CheckBox29);("extras\\", "venus_express", "venus_express.ssc", CheckBox29);

//EndingProv("extras\\", "Chandra X-Ray Observatory", "chandra.ssc", CheckBox30); нет информации об Ending'е

//EndingProv("extras\\", "Corot", "Corot.ssc", CheckBox31); нет информации об Ending'е

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingProv("data\\spacecrafts\\space-observatories\\", "herschel", "herschel.ssc", CheckBox32);

//else

//EndingProv("extras\\", "herschel", "herschel.ssc", CheckBox32);

//EndingProv("extras\\", "Voyager", "voyager.ssc", CheckBox33); нет информации об Ending'е(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\kuiper-belt-missions\\", "new_horizons_jpg_v2_small", "new_horizons.ssc", CheckBox34);("extras\\", "new_horizons_jpg_v2_small", "new_horizons.ssc", CheckBox34);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Spitzer", "JACKspitzer-xyz.ssc", CheckBox35);("extras\\", "Spitzer", "JACKspitzer-xyz.ssc", CheckBox35);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "ISO", "JACKiso.ssc", CheckBox36);("extras\\", "ISO", "JACKiso.ssc", CheckBox36);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "envisat", "envisat.ssc", CheckBox37);("extras\\", "envisat", "envisat.ssc", CheckBox37);

//EndingProv("extras\\", "ao7", "AO7.ssc", CheckBox38); нет информации об Ending'е

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingProv("data\\spacecrafts\\moon-missions\\", "apollo10", "apollo10.ssc", CheckBox39);

//else

//EndingProv("extras\\", "apollo10", "apollo10.ssc", CheckBox39);

//

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingProv("data\\spacecrafts\\moon-missions\\", "Apollo_11", "apollo.ssc", CheckBox39);

//else

//EndingProv("extras\\", "Apollo_11", "apollo.ssc", CheckBox39);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\main-belt-missions\\", "Dawn", "dawn.ssc", CheckBox40);("extras\\", "Dawn", "dawn.ssc", CheckBox40);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "DeepImpact", "DeepImpact.ssc", CheckBox41);("extras\\", "DeepImpact", "DeepImpact.ssc", CheckBox41);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "Giotto", "JACKgiottoflyby-xyz-ssc.ssc", CheckBox42);("extras\\", "Giotto", "JACKgiottoflyby-xyz-ssc.ssc", CheckBox42);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\sun-missions\\", "Helios", "JACKheliosSolarProbe-xyz.ssc", CheckBox43);("extras\\", "Helios", "JACKheliosSolarProbe-xyz.ssc", CheckBox43);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "ice", "ice-xyz.ssc", CheckBox44);("extras\\", "ice", "ice-xyz.ssc", CheckBox44);

//EndingProv("extras\\", "lunarlanders", "lunarlandingsites.ssc", CheckBox45); нет информации об Ending'е

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingProv("data\\spacecrafts\\moon-missions\\", "lro", "lro.ssc", CheckBox46);

//else

//EndingProv("extras\\", "lro", "lro.ssc", CheckBox46);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "Magellan-full", "JACKmagellan_venus.ssc", CheckBox47);("extras\\", "Magellan-full", "JACKmagellan_venus.ssc", CheckBox47);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Mars Express", "mars express.ssc", CheckBox48);("extras\\", "Mars Express", "mars express.ssc", CheckBox48);

//EndingProv("extras\\", "EC_MGSf", "MGS.ssc", CheckBox49); нет информации об Ending'е

//EndingProv("extras\\", "Mars Reconaissance Orbiter", "MRO.ssc", CheckBox50); нет информации об Ending'е

//EndingProv("extras\\", "messenger", "messenger.ssc", CheckBox51); нет информации об Ending'е(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Nozomi", "JACKplanet-bfull-xyz.ssc", CheckBox52);("extras\\", "Nozomi", "JACKplanet-bfull-xyz.ssc", CheckBox52);

//EndingProv("extras\\", "phoenix_lander", "phoenix_lander.ssc", CheckBox53); нет информации об Ending'е(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\interplanetary-missions\\", "Pioneers", "JACKearly_pioneers-xyz.ssc", CheckBox54);("extras\\", "Pioneers", "JACKearly_pioneers-xyz.ssc", CheckBox54);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "planck", "planck.ssc", CheckBox55);("extras\\", "planck", "planck.ssc", CheckBox55);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "planck", "planck_fov.ssc", CheckBox55);("extras\\", "planck", "planck_fov.ssc", CheckBox55);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "rosetta_brianj", "rosetta.ssc", CheckBox56);("extras\\", "rosetta_brianj", "rosetta.ssc", CheckBox56);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "Ulysses-full", "JACKulysses-xyz.ssc", CheckBox57);("extras\\", "Ulysses-full", "JACKulysses-xyz.ssc", CheckBox57);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "Venera", "JACKveneraUSSR-xyz.ssc", CheckBox58);("extras\\", "Venera", "JACKveneraUSSR-xyz.ssc", CheckBox58);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Viking-full", "viking.ssc", CheckBox59);("extras\\", "Viking-full", "viking.ssc", CheckBox59);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\interplanetary-missions\\", "Zond 3", "JACKzondUSSR-xyz.ssc", CheckBox60);("extras\\", "Zond 3", "JACKzondUSSR-xyz.ssc", CheckBox60);

//ПРОВЕРКА LUA-ИНСТРУМЕНТОВShowP="";

String ShowInf="enable_info = ";ShowCoord="enable_coordinates = ";ShowKep="enable_Kepler_param = ";ShowComp="enable_compass = ";SelectCockpit="cockpitTexture = ";Zoom="enable_magnification = ";HR="enable_HR = ";Navi="enable_virtual_pad = ";LP="";LocalTime="show_local_time = ";CompasCenter="center_compass = ";AltAzim="alt_azimuthal_mode = ";CustomDuration="custom_goto_duration = ";

String DigitDur="";

//Проверка версии Lua-инструментов

if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

{="\lua-applications\\lua_universal_tools_v2\\";>Caption="Lua Universal Tools v2.0";="show_lua_universal_tools_v2 = ";->Height=281;->Visible=true;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Caption=" "+StringsLocale[5];->Visible=true;

}

{(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_universal_tools_v2\\"+"config.lua"))

{="\extras\\lua_universal_tools_v2\\";>Caption="Lua Universal Tools v2.0";="show_lua_universal_tools_v2 = ";->Height=281;->Visible=true;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Caption=" "+StringsLocale[5];->Visible=true;

}(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_universal_tools\\"+"config.lua"))

{="\extras\\lua_universal_tools\\";>Caption="Lua Universal Tools v1.0";="show_lua_universal_tools = ";->Height=281;->Visible=true;

}

{(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_edu_tools\\"+"config.lua"))

{="\extras\\lua_edu_tools\\";>Caption="Lua Edu Tools v1.2 beta 8";="show_lua_edu_tools = ";

}(FileExists(ExtractFilePath(Application->ExeName)+"\extras\\lua_edu_tools-b9\\"+"config.lua"))

{="\extras\\lua_edu_tools-b9\\";>Caption="Lua Edu Tools v1.2 beta 9";="show_lua_edu_tools = ";

}

}(LuaAdr=="")

{="none";>Caption=StringsLocale[6];

//Перечисляем все компоненты страницы для деактивации

CheckBox4->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Enabled=false;->Visible=true;->Visible=true;->Visible=true;;

}

}*Lua=new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"config.lua");

//Отображение панели(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(ShowP))=Lua->Strings[i];(LP.Pos(ShowP+"true"))->Checked=true;->Checked=false;

}

//Отображение информации(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(ShowInf))=Lua->Strings[i];(LP=="enable_info = true" || LP==" enable_info = true")->Checked=true;->Checked=false;

}

//Отображение координат(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(ShowCoord))=Lua->Strings[i];(LP=="enable_coordinates = true" || LP==" enable_coordinates = true")->Checked=true;->Checked=false;

}

//Режим "Увеличение"(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Zoom))=Lua->Strings[i];(LP=="enable_magnification = true" || LP==" enable_magnification = true")->Checked=true;->Checked=false;

}

//Диаграмма Г-Р(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(HR))=Lua->Strings[i];(LP=="enable_HR = true" || LP==" enable_HR = true")->Checked=true;->Checked=false;

}

//Отображение Кеплеровых параметров(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(ShowKep))=Lua->Strings[i];(LP=="enable_Kepler_param = true" || LP==" enable_Kepler_param = true")->Checked=true;->Checked=false;

}

//Джойстик(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Navi))=Lua->Strings[i];(LP=="enable_virtual_pad = true" || LP==" enable_virtual_pad = true")->Checked=true;->Checked=false;

}

//Отображение компаса(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(ShowComp))=Lua->Strings[i];(LP=="enable_compass = true" || LP==" enable_compass = true")->Checked=true;->Checked=false;

}

//Пояс астероидов*Addon = new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"\\adds\\Asteroid_Belt\\"+"Asteroid_Belt.ssc");(Addon->Text.Pos("Visible true"))->Checked=true;->Checked=false;Addon;

//Показывать местное время(int i=0;i<Lua->Count;i++)

}

//Компас по центру(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(CompasCenter))=Lua->Strings[i];(LP=="center_compass = true" || LP==" center_compass = true")->Checked=true;->Checked=false;

}

//Режим Альт-Азимут(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(AltAzim))=Lua->Strings[i];(LP=="alt_azimuthal_mode = true" || LP==" alt_azimuthal_mode = true")

{->Checked=true;->Caption=StringsLocale[9];

}

{->Checked=false;->Caption=StringsLocale[10];

}

}

//Формат даты(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos("date_format = "))=Lua->Strings[i];(LP=="date_format = \"country_default\"" || LP==" date_format = \"country_default\"")->ItemIndex=0;(LP=="date_format = \"day/month/year\"" || LP==" date_format = \"day/month/year\"")->ItemIndex=1;(LP=="date_format = \"month/day/year\"" || LP==" date_format = \"month/day/year\"")->ItemIndex=2;(LP=="date_format = \"year/month/day\"" || LP==" date_format = \"year/month/day\"")

ComboBox2->ItemIndex=3;

}

//Скорость перелета к объекту

for (int i=0;i<Lua->Count;i++)((op=Lua->Strings[i].Pos(CustomDuration))>0)(int k=op;k<=Lua->Strings[i].Length();k++)(isdigit(Lua->Strings[i][k]))+=Lua->Strings[i][k];->Text=DigitDur;

//Цветовые схемы(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(" cFrameFill = "))(Lua->Strings[i]==" cFrameFill = {0, 0 , 0, 0}")->ItemIndex=0;(Lua->Strings[i]==" cFrameFill = {0, 0 , 0.5, 0.4}")->ItemIndex=1;(Lua->Strings[i]==" cFrameFill = {0.2, 0.4 , 0.3, 0.4}")->ItemIndex=2;(Lua->Strings[i]==" cFrameFill = {0.4, 0.3, 0.6, 0.4}")->ItemIndex=3;

}Lua;

}

}

//---------------------------------------------------------------------------

////////////////////////////////////////////////////////////////////////////////

// СОХРАНЕНИЕ НАСТРОЕК //

////////////////////////////////////////////////////////////////////////////////

//ОСНОВНЫЕ__fastcall TMainForm::BitBtn1Click(TObject *Sender)

{*Main=new TStringList;Orbit=" OrbitPathSamplePoints ";Rings=" RingSystemSections ";>LoadFromFile(ExtractFilePath(Application->ExeName) + "celestia.cfg");

//Точки орбит и кольца планет(Edit2->Text!="" && StrToInt(Edit2->Text)>=80 && StrToInt(Edit2->Text)<=400)

{(Edit3->Text!="" && StrToInt(Edit3->Text)>=100 && StrToInt(Edit3->Text)<=2000)

{(int i=0;i<Main->Count;i++)

{(Main->Strings[i].Pos(Orbit))>Strings[i]=" OrbitPathSamplePoints "+Edit2->Text;(Main->Strings[i].Pos(Rings))>Strings[i]=" RingSystemSections "+Edit3->Text;

}

}

{>MessageBox(MessegesLocale[2].c_str(), Application->Title.c_str(), MB_OK | MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;

}

}

{>MessageBox(MessegesLocale[2].c_str(), Application->Title.c_str(), MB_OK | MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;

}

//Папки с дополнениями(int i=0;i<Main->Count;i++)((Main->Strings[i].Pos("ExtrasDirectories")>0) && (Main->Strings[i][1] != '#'))

{[0]=""; S[1]=""; S[2]="";= Main->Strings[i]; // " "n,k, dl ;(EditDir1->Text.Length() >0)[0]=StringReplace(EditDir1->Text,"\\","/",TReplaceFlags()<< rfReplaceAll);(EditDir2->Text.Length() >0)[1]=StringReplace(EditDir2->Text,"\\","/",TReplaceFlags()<< rfReplaceAll);(EditDir3->Text.Length() >0)[2]=StringReplace(EditDir3->Text,"\\","/",TReplaceFlags()<< rfReplaceAll);((n=Main->Strings[i].Pos("["))>0)

{=sl.SubString(1,n) ;(S[0].Length()) sl=sl+ " \""+S[0] ;(S[1].Length()) sl=sl+"\" \""+S[1] ;(S[2].Length()) sl=sl+"\" \""+S[2] ;=sl+"\" ]";>Strings[i]=sl;;

}

}(EditDir1->Text=="")>MessageBox(MessegesLocale[3].c_str(), Application->Title.c_str(), MB_OK | MB_ICONERROR);

//Курсор(RadioButton1->Checked)

{(int i=0;i<Main->Count;i++)

{(Main->Strings[i].Pos(" Cursor \""))>Strings[i]=" Cursor \"crosshair\"";

}

}(RadioButton2->Checked)

{(int i=0;i<Main->Count;i++)

{(Main->Strings[i].Pos(" Cursor \""))>Strings[i]=" Cursor \"inverting crosshair\"";

}

}(RadioButton3->Checked)

{(int i=0;i<Main->Count;i++)

{(Main->Strings[i].Pos(" Cursor \""))>Strings[i]=" Cursor \"arrow\"";

}

}

//Директория скриншотовn;(int i=0;i<Main->Count;i++)((Main->Strings[i].Pos("ScriptScreenshotDirectory")>0) && (Main->Strings[i][1] != '#'))

{[4]="";= Main->Strings[i]; // " "(EditScreenDir->Text.Length() >0)[4]=StringReplace(EditScreenDir->Text,"\\","/",TReplaceFlags()<< rfReplaceAll);((n=Main->Strings[i].Pos("\""))>0)

{=sl.SubString(1,n) ;(S[4].Length()) sl=sl+S[4] ;=sl+"\"";>Strings[i]=sl;;

}

}

//Параметр ScriptSystemAccessPolicy(int i=0;i<Main->Count;i++)

{(Main->Strings[i].Pos(" ScriptSystemAccessPolicy"))

{(ComboBox1->ItemIndex==0)>Strings[i]=" ScriptSystemAccessPolicy \"ask\"";(ComboBox1->ItemIndex==1)>Strings[i]=" ScriptSystemAccessPolicy \"allow\"";(ComboBox1->ItemIndex==2)>Strings[i]=" ScriptSystemAccessPolicy \"deny\"";

}

}

//Стартовый сценарий(int i=0;i<Main->Count;i++)((Main->Strings[i].Pos("InitScript")>0) && (Main->Strings[i][1] != '#'))

{[5]="";= Main->Strings[i]; // " "(EditStartScript->Text.Length() >0)[5]=StringReplace(EditStartScript->Text,"\\","/",TReplaceFlags()<< rfReplaceAll);

{>MessageBox(MessegesLocale[4].c_str(), Application->Title.c_str(), MB_OK | MB_ICONERROR);;

}((n=Main->Strings[i].Pos("\""))>0)

{=sl.SubString(1,n) ;(S[5].Length()) sl=sl+S[5] ;=sl+"\"";>Strings[i]=sl;;

}

}

//Demo сценарий(int i=0;i<Main->Count;i++)((Main->Strings[i].Pos("DemoScript")>0) && (Main->Strings[i][1] != '#'))

{[6]="";= Main->Strings[i]; // " "(EditDemoScript->Text.Length() >0)[6]=StringReplace(EditDemoScript->Text,"\\","/",TReplaceFlags()<< rfReplaceAll);

{>MessageBox(MessegesLocale[5].c_str(), Application->Title.c_str(), MB_OK | MB_ICONERROR);;

}((n=Main->Strings[i].Pos("\""))>0)

{=sl.SubString(1,n) ;(S[6].Length()) sl=sl+S[6] ;=sl+"\"";>Strings[i]=sl;;

}

}

//Скорость вращения(Edit5->Text!="" && StrToInt(Edit5->Text)>=5 && StrToInt(Edit5->Text)<=400)

{(int i=0;i<Main->Count;i++)

{(Main->Strings[i].Pos(" RotateAcceleration "))>Strings[i]=" RotateAcceleration "+Edit5->Text+".0";

}

}

{>MessageBox(MessegesLocale[2].c_str(), Application->Title.c_str(), MB_OK | MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;

}

//Чувствительность мыши.DecimalSeparator='.';(int i=0;i<Main->Count;i++)

{(Main->Strings[i].Pos(" MouseRotationSensitivity "))>Strings[i]=" MouseRotationSensitivity "+Edit1->Text;

}.DecimalSeparator=',';>SaveToFile(ExtractFilePath(Application->ExeName)+"celestia.cfg");

delete Main;

//Музыкальный проигрыватель для Celestia EP v2.0

if(GroupBox6->Visible==true)

{= new TIniFile(ExtractFilePath(Application->ExeName)+"celestia_ep.ini");(CheckBox21->Checked==true)>WriteString("Settings","Music","true");>WriteString("Settings","Music","false");>WriteString("Settings","Player",PlayerEdit->Text);EP;

}(AutoSave==false)>MessageBox(MessegesLocale[6].c_str(), Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);

}

//ОБЪЕКТЫ И ВРЕМЯ__fastcall TMainForm::BitBtn2Click(TObject *Sender)

{

//Солнечные вспышки(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\sun\\","sun_flares",CheckBox1);("extras\\","sun_flares",CheckBox1);

//Кольца Юпитера(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","Jupiter Rings",CheckBox2);("extras\\","Jupiter Rings",CheckBox2);

//Достопримечательности Марса(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\planets-&-moons\\mars\\","Mars Surface Features",CheckBox10);("extras\\Solar System\\Planet\\Mars\\","Mars Surface Features",CheckBox10);

//Пояс Койпера(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\","kuiper-belt",CheckBox17);("extras\\","Kuiper_Belt",CheckBox17);

//Динамическая атмосфера Юпитера(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","JupClouds",CheckBox18);("extras\\","Jupiter_Clouds",CheckBox18);

//Вулканы Ио(Label19->Caption.Pos("Celestia Extended Pack v1.0")) //недочет в самой сборке("extras\\","iovolcanoes\\iovolcanoes",CheckBox19);

{(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\planets-&-moons\\jupiter-&-moons\\","iovolcanoes",CheckBox19);("extras\\","iovolcanoes",CheckBox19);

}

//Космический лифт(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\fiction-objects\\","space-lift",CheckBox20);("extras\\","Space Lift",CheckBox20);

//Облако Оорта(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\solar-system\\","oort-cloud",CheckBox61);("extras\\","Oort_Cloud",CheckBox61);

//Подсветка частиц колец Сатурна("data\\solar-system\\planets-&-moons\\saturn\\saturn-rings-model\\models\\saturn-ring-element.cmod", CheckBox62);

//Космические аппараты...(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "mir", "mir.ssc", CheckBox9);("extras-standard\\", "mir", "mir.ssc", CheckBox9);

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingSave("data\\spacecrafts\\jupiter-missions\\", "galileo", "galileo.ssc", CheckBox3);

//else

//EndingSave("extras-standard\\", "galileo", "galileo.ssc", CheckBox3);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\saturn-missions\\", "cassini", "cassini.ssc", CheckBox23);("extras\\", "Cassini-Huygens", "cassini_huygens.ssc", CheckBox23);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Sputnik 1", "sputnik-1.ssc", CheckBox24);("extras\\", "Sputnik 1", "sputnik-1.ssc", CheckBox24);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Spoutnik 2", "Spoutnik.ssc", CheckBox25);("extras\\", "Spoutnik 2", "Spoutnik.ssc", CheckBox25);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Sputnik 3", "Spoutnik3.ssc", CheckBox26);("extras\\", "Sputnik 3", "Spoutnik3.ssc", CheckBox26);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Salyut7", "JACKsalyut7.ssc", CheckBox27);("extras\\", "", "JACKsalyut7.ssc", CheckBox27);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "Mariner2", "JACKmariner2-xyz.ssc", CheckBox28);("extras\\", "Mariner2", "JACKmariner2-xyz.ssc", CheckBox28);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Mariner9", "mariner 9.ssc", CheckBox28);("extras\\", "Mariner9", "mariner 9.ssc", CheckBox28);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "venus_express", "venus_express.ssc", CheckBox29);("extras\\", "venus_express", "venus_express.ssc", CheckBox29);

//EndingSave("extras\\", "Chandra X-Ray Observatory", "chandra.ssc", CheckBox30); нет информации об Ending'е

//EndingSave("extras\\", "Corot", "Corot.ssc", CheckBox31); нет информации об Ending'е

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingSave("data\\spacecrafts\\space-observatories\\", "herschel", "herschel.ssc", CheckBox32);

//else

//EndingSave("extras\\", "herschel", "herschel.ssc", CheckBox32);

//EndingSave("extras\\", "Voyager", "voyager.ssc", CheckBox33); нет информации об Ending'е(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\kuiper-belt-missions\\", "new_horizons_jpg_v2_small", "new_horizons.ssc", CheckBox34);("extras\\", "new_horizons_jpg_v2_small", "new_horizons.ssc", CheckBox34);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "Spitzer", "JACKspitzer-xyz.ssc", CheckBox35);("extras\\", "Spitzer", "JACKspitzer-xyz.ssc", CheckBox35);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "ISO", "JACKiso.ssc", CheckBox36);("extras\\", "ISO", "JACKiso.ssc", CheckBox36);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\near-earth-missions\\", "envisat", "envisat.ssc", CheckBox37);("extras\\", "envisat", "envisat.ssc", CheckBox37);

//EndingSave("extras\\", "ao7", "AO7.ssc", CheckBox38); нет информации об Ending'е

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingSave("data\\spacecrafts\\moon-missions\\", "apollo10", "apollo10.ssc", CheckBox39);

//else

//EndingSave("extras\\", "apollo10", "apollo10.ssc", CheckBox39);

//

//if(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

//EndingSave("data\\spacecrafts\\moon-missions\\", "Apollo_11", "apollo.ssc", CheckBox39);

//else

//EndingSave("extras\\", "Apollo_11", "apollo.ssc", CheckBox39);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\main-belt-missions\\", "Dawn", "dawn.ssc", CheckBox40);("extras\\", "Dawn", "dawn.ssc", CheckBox40);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "DeepImpact", "DeepImpact.ssc", CheckBox41);("extras\\", "DeepImpact", "DeepImpact.ssc", CheckBox41);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "Giotto", "JACKgiottoflyby-xyz-ssc.ssc", CheckBox42);("extras\\", "Giotto", "JACKgiottoflyby-xyz-ssc.ssc", CheckBox42);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\sun-missions\\", "Helios", "JACKheliosSolarProbe-xyz.ssc", CheckBox43);("extras\\", "Helios", "JACKheliosSolarProbe-xyz.ssc", CheckBox43);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "ice", "ice-xyz.ssc", CheckBox44);("extras\\", "ice", "ice-xyz.ssc", CheckBox44);

//EndingSave("extras\\", "lunarlanders", "lunarlandingsites.ssc", CheckBox45); нет информации об Ending'е(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\moon-missions\\", "lro", "lro.ssc", CheckBox46);("extras\\", "lro", "lro.ssc", CheckBox46);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "Magellan-full", "JACKmagellan_venus.ssc", CheckBox47);("extras\\", "Magellan-full", "JACKmagellan_venus.ssc", CheckBox47);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Mars Express", "mars express.ssc", CheckBox48);("extras\\", "Mars Express", "mars express.ssc", CheckBox48);

//EndingSave("extras\\", "EC_MGSf", "MGS.ssc", CheckBox49); нет информации об Ending'е

//EndingSave("extras\\", "Mars Reconaissance Orbiter", "MRO.ssc", CheckBox50); нет информации об Ending'е

//EndingSave("extras\\", "messenger", "messenger.ssc", CheckBox51); нет информации об Ending'е(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Nozomi", "JACKplanet-bfull-xyz.ssc", CheckBox52);("extras\\", "Nozomi", "JACKplanet-bfull-xyz.ssc", CheckBox52);

//EndingSave("extras\\", "phoenix_lander", "phoenix_lander.ssc", CheckBox53); нет информации об Ending'е(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\interplanetary-missions\\", "Pioneers", "JACKearly_pioneers-xyz.ssc", CheckBox54);("extras\\", "Pioneers", "JACKearly_pioneers-xyz.ssc", CheckBox54);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "planck", "planck.ssc", CheckBox55);("extras\\", "planck", "planck.ssc", CheckBox55);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "planck", "planck_fov.ssc", CheckBox55);("extras\\", "planck", "planck_fov.ssc", CheckBox55);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\cometary-missions\\", "rosetta_brianj", "rosetta.ssc", CheckBox56);("extras\\", "rosetta_brianj", "rosetta.ssc", CheckBox56);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\space-observatories\\", "Ulysses-full", "JACKulysses-xyz.ssc", CheckBox57);("extras\\", "Ulysses-full", "JACKulysses-xyz.ssc", CheckBox57);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\venus-missions\\", "Venera", "JACKveneraUSSR-xyz.ssc", CheckBox58);("extras\\", "Venera", "JACKveneraUSSR-xyz.ssc", CheckBox58);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\mars-missions\\", "Viking-full", "viking.ssc", CheckBox59);("extras\\", "Viking-full", "viking.ssc", CheckBox59);(Label19->Caption.Pos("Celestia Extended Pack v3.0"))("data\\spacecrafts\\interplanetary-missions\\", "Zond 3", "JACKzondUSSR-xyz.ssc", CheckBox60);("extras\\", "Zond 3", "JACKzondUSSR-xyz.ssc", CheckBox60);(AutoSave==false)>MessageBox(MessegesLocale[6].c_str(), Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);

}

//LUA-ИНСТРУМЕНТЫ__fastcall TMainForm::BitBtn3Click(TObject *Sender)

{Show;(LuaTab->Caption.Pos("Lua Universal Tools v1.0"))="show_lua_universal_tools = ";

{(LuaTab->Caption.Pos("Lua Universal Tools v2.0"))="show_lua_universal_tools_v2 = ";="show_lua_edu_tools = ";

}Info="enable_info = ";Coordinates="enable_coordinates = ";Kepler="enable_Kepler_param = ";Compass="enable_compass = ";Cockpit="cockpitTexture = ";Zoom="enable_magnification = ";HR="enable_HR = ";Navi="enable_virtual_pad = ";LocalTime="show_local_time = ";CenterCompass="center_compass = ";AltAzim="alt_azimuthal_mode = ";CustomDuration="custom_goto_duration = ";DigitDur="";*Lua=new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"config.lua");

//Показывать панель(CheckBox4->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Show))>Strings[i]=Show+"true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Show))>Strings[i]=Show+"false";

}

}

//Инфо об обьекте(CheckBox5->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Info))>Strings[i]="enable_info = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Info))>Strings[i]="enable_info = false";

}

}

//Координаты(CheckBox6->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Coordinates))>Strings[i]="enable_coordinates = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Coordinates))>Strings[i]="enable_coordinates = false";

}

}

//Режим "Увеличение"(CheckBox11->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Zoom))>Strings[i]="enable_magnification = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Zoom))>Strings[i]="enable_magnification = false";

}

}

//Диаграмма Г-Р(CheckBox12->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(HR))>Strings[i]="enable_HR = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(HR))>Strings[i]="enable_HR = false";

}

}

//Кеплеровы параметры(CheckBox7->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Kepler))>Strings[i]="enable_Kepler_param = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Kepler))>Strings[i]="enable_Kepler_param = false";

}

}

//Джойстик(CheckBox13->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Navi))>Strings[i]="enable_virtual_pad = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Navi))>Strings[i]="enable_virtual_pad = false";

}

}

//Компас(CheckBox8->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Compass))>Strings[i]="enable_compass = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(Compass))>Strings[i]="enable_compass = false";

}

}

//Пояс астероидов*Addon = new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+LuaAdr+"\\adds\\Asteroid_Belt\\"+"Asteroid_Belt.ssc");(CheckBox63->Checked==true)>Text=StringReplace(Addon->Text,"Visible false","Visible true",TReplaceFlags()<< rfReplaceAll);>Text=StringReplace(Addon->Text,"Visible true","Visible false",TReplaceFlags()<< rfReplaceAll);>SaveToFile(ExtractFilePath(Application->ExeName)+LuaAdr+"\\adds\\Asteroid_Belt\\"+"Asteroid_Belt.ssc");Addon;

//Показывать местное время(CheckBox14->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(LocalTime))>Strings[i]="show_local_time = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(LocalTime))>Strings[i]="show_local_time = false";

}

}

//Компасс по центру(CheckBox15->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(CenterCompass))>Strings[i]="center_compass = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(CenterCompass))>Strings[i]="center_compass = false";

}

}

//Режим Альт-Азимут(CheckBox16->Checked)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(AltAzim))>Strings[i]="alt_azimuthal_mode = true";

}

}

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(AltAzim))>Strings[i]="alt_azimuthal_mode = false";

}

}

//Формат даты(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos("date_format = "))

{(ComboBox2->ItemIndex==0)>Strings[i]="date_format = \"country_default\"";(ComboBox2->ItemIndex==1)>Strings[i]="date_format = \"day/month/year\"";(ComboBox2->ItemIndex==2)>Strings[i]="date_format = \"month/day/year\"";(ComboBox2->ItemIndex==3)>Strings[i]="date_format = \"year/month/day\"";

}

}

//Длительность перелета к объекту(Edit4->Text!="" && StrToInt(Edit4->Text)>=0 && StrToInt(Edit4->Text)<=20)

{(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(CustomDuration))>Strings[i]="custom_goto_duration = "+Edit4->Text;

}

}

{>MessageBox(MessegesLocale[2].c_str(), Application->Title.c_str(), MB_OK | MB_ICONERROR);->Color=clRed;->Font->Color=clWhite;;

}

//Цветовая схема(int i=0;i<Lua->Count;i++)

{(Lua->Strings[i].Pos(" cFrameFill = "))

{(RadioGroup1->ItemIndex==0)

{>Strings[i]=" cFrameFill = {0, 0 , 0, 0}";>Strings[i+1]=" cDisplFill = {0, 0 , 0, 0}";>Strings[i+2]="";

}(RadioGroup1->ItemIndex==1)

{>Strings[i]=" cFrameFill = {0, 0 , 0.5, 0.4}";>Strings[i+1]=" cDisplFill = {0, 0.5, 0.5, 0.4}";>Strings[i+2]=" cPanelFill = {0.05, 0.1 , 0.1, 0.9}";

}(RadioGroup1->ItemIndex==2)

{>Strings[i]=" cFrameFill = {0.2, 0.4 , 0.3, 0.4}";>Strings[i+1]=" cDisplFill = {0, 0.3, 0.7, 0.4}";>Strings[i+2]="";

}(RadioGroup1->ItemIndex==3)

{>Strings[i]=" cFrameFill = {0.4, 0.3, 0.6, 0.4}";>Strings[i+1]=" cDisplFill = {0, 0.5, 0.5, 0.4}";>Strings[i+2]="";

}

}

}>SaveToFile(ExtractFilePath(Application->ExeName)+LuaAdr+"config.lua");

delete Lua;(AutoSave==false)>MessageBox(MessegesLocale[6].c_str(), Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);

}

//О ПРОГРАММЕ__fastcall TMainForm::LabelLink2Click(TObject *Sender)

{(Handle, NULL, L"http://www.celestiaproject.ru", NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::LabelLink2MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline;

}__fastcall TMainForm::LabelLink2MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------

__fastcall TMainForm::Edit2KeyPress(TObject *Sender, char &Key)

{(Key >='0' && Key <='9' || Key==VK_BACK);=0;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit3KeyPress(TObject *Sender, char &Key)

{(Key >='0' && Key <='9' || Key==VK_BACK);=0;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit2Click(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit3Click(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------

////////////////////////////////////////////////////////////////////////////////

// ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ ПО УМОЛЧАНИЮ //

////////////////////////////////////////////////////////////////////////////////__fastcall TMainForm::BitBtn4Click(TObject *Sender)

{(Application->MessageBox(MessegesLocale[7].c_str(), Application->Title.c_str(), MB_YESNO | MB_ICONQUESTION)==IDYES)

{

//Для того, чтобы при выполнении кнопок "Сохранить" не выскакивало сообщение

AutoSave=true;

//Основные(Label19->Caption.Pos("Celestia Extended Pack v3.0"))

{->Text="data";->Text="lua-applications";->Text="extras";

}

{->Text="extras-standard";->Text="extras";->Text="";

}->Text="100";->Text="100";->Checked=true;>Text="";->ItemIndex=0;(Label19->Caption.Pos("Celestia Extended Pack v3.0"))>Text="start.celx";>Text="start.cel";>Text="demo.cel";->Text="120";->Position=120;->Text="1.0";->Position=10;->Click();

//Объекты и время->State=0;->State=1;->State=1;->State=0;->State=1;->State=0;->State=0;->State=0;->State=0;

//Космические аппараты->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->Click();

//LUA-инструменты(Label11->Visible==false) //если Lua-инструменты установлены

{->State=1;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=0;->State=1;->State=0;->State=0;->ItemIndex=0;->Text="15";(LuaTab->Caption.Pos("Lua Universal Tools"))->ItemIndex=1;->Click();

}=false;>MessageBox(MessegesLocale[8].c_str(), Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);

}

}

//---------------------------------------------------------------------------__fastcall TMainForm::RadioButton1Click(TObject *Sender)

{->Checked=false;->Checked=false;

}

//---------------------------------------------------------------------------__fastcall TMainForm::RadioButton2Click(TObject *Sender)

{->Checked=false;->Checked=false;

}

//---------------------------------------------------------------------------__fastcall TMainForm::RadioButton3Click(TObject *Sender)

{->Checked=false;->Checked=false;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit2Change(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit3Change(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::ButtonDir1Click(TObject *Sender)

{[0] = S[3];(SelectDirectory(StringsLocale[7].c_str(), L"", S[0]))->Text = S[0] ;

}

//---------------------------------------------------------------------------__fastcall TMainForm::ButtonDir2Click(TObject *Sender)

{[1] = S[3];(SelectDirectory(StringsLocale[7].c_str(), L"", S[1]))->Text = S[1] ;

}

//---------------------------------------------------------------------------__fastcall TMainForm::ButtonDir3Click(TObject *Sender)

{[2] = S[3];(SelectDirectory(StringsLocale[7].c_str(), "", S[2]))

EditDir3->Text = S[2] ;

}

//---------------------------------------------------------------------------

//Обработка клика по картинкам курсоров

void __fastcall TMainForm::Image2Click(TObject *Sender)

{->Checked=true;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Image3Click(TObject *Sender)

{->Checked=true;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Image4Click(TObject *Sender)

{->Checked=true;

}

//---------------------------------------------------------------------------

//Запрет редактирования полей папок

void __fastcall TMainForm::Label10MouseLeave(TObject *Sender)

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label10MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label10Click(TObject *Sender)

{(Handle, NULL, LinkLocale[8].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label14MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label14MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label14Click(TObject *Sender)

{(Handle, NULL, LinkLocale[7].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label16MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------

__fastcall TMainForm::Label16MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label16Click(TObject *Sender)

{(Handle, NULL, LinkLocale[2].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Button1Click(TObject *Sender)

{(SelectDirectory(StringsLocale[8].c_str(), "", S[4]))>Text = S[4] ;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit5Change(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit5Click(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit5KeyPress(TObject *Sender, char &Key)

{(Key >='0' && Key <='9' || Key==VK_BACK);=0;

}

//---------------------------------------------------------------------------__fastcall TMainForm::ScrollBar1Change(TObject *Sender)

{->Text=ScrollBar1->Position;

}

//---------------------------------------------------------------------------__fastcall TMainForm::ScrollBar2Change(TObject *Sender)

{pos, tmpp;st;.DecimalSeparator='.';=ScrollBar2->Position;=pos/10;=FloatToStrF(tmpp,ffFixed,2,1);->Text=st;.DecimalSeparator=',';

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit1Change(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit1Click(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit4Change(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit4Click(TObject *Sender)

{->Color=clWindow;->Font->Color=clWindowText;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Edit4KeyPress(TObject *Sender, char &Key)

{(Key >='0' && Key <='9' || Key==VK_BACK);=0;

}

//---------------------------------------------------------------------------__fastcall TMainForm::CheckBox16Click(TObject *Sender)

{(CheckBox16->Checked)->Caption=StringsLocale[9];->Caption=StringsLocale[10];

}

//---------------------------------------------------------------------------__fastcall TMainForm::Button2Click(TObject *Sender)

{(PlayerDialog->Execute())

{

PlayerEdit->Text=PlayerDialog->FileName;

}

}

//---------------------------------------------------------------------------__fastcall TMainForm::CheckBox22Click(TObject *Sender)

{(CheckBox22->Checked==true)(true);(false);

}

//---------------------------------------------------------------------------

////////////////////////////////////////////////////////////////////////////////

// НОВЫЕ ФУНКЦИИ //

////////////////////////////////////////////////////////////////////////////////

//Проверка вкладки Объекты и времяTMainForm::ObjectProv(String PodFolder, String Folder, String SSC, TCheckBox *Check)

{(FileExists(ExtractFilePath(Application->ExeName)+PodFolder+Folder+"\\"+SSC) || FileExists(ExtractFilePath(Application->ExeName)+"temp\\"+Folder+"\\"+SSC))

{>Enabled=true;(FileExists(ExtractFilePath(Application->ExeName)+PodFolder+Folder+"\\"+SSC))>Checked=true;>Checked=false;

}

{>Checked=false;>Enabled=false;

//Добавляем ссылки на скачивание(Check==CheckBox10) //Достопримечательности Марса

Label16->Visible=true;(Check==CheckBox17) //Пояс Койпера->Visible=true;(Check==CheckBox18) //Динамическая модель атмосферы Юпитера->Visible=true;(Check==CheckBox61) //Облако Оорта->Visible=true;(Check==CheckBox20) //Космический Лифт

Label15->Visible=true;

}

}

//Сохранение настроек вкладки Объекты и время

void TMainForm::ObjectSave(String PodFolder, String Folder, TCheckBox *Check)

{path1,path2;(Check->Checked==true)

{=ExtractFilePath(Application->ExeName)+"temp\\"+Folder;=ExtractFilePath(Application->ExeName)+PodFolder+Folder;(path1.w_str(), path2.w_str(), MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING);

}

{=ExtractFilePath(Application->ExeName)+PodFolder+Folder;=ExtractFilePath(Application->ExeName)+"temp\\"+Folder;(path1.w_str(), path2.w_str(), MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING);

}= NULL;= NULL;

}

//Проверка космических аппаратов

void TMainForm::EndingProv(String Dir, String Folder, String SSC, TCheckBox *Check)

{(FileExists(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC))

{*Ending=new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC);(Ending->Text.Pos("#Ending"))>Checked=true;>Checked=false;Ending;

}>Enabled=false;

}

//Сохранение параметров космических аппаратовTMainForm::EndingSave(String Dir, String Folder, String SSC, TCheckBox *Check)

{(Check->Enabled==true)

{*Ending=new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC);(Check->Checked==true)

{>Text=StringReplace(Ending->Text,"#Ending","Ending",TReplaceFlags()<< rfReplaceAll);>Text=StringReplace(Ending->Text,"Ending","#Ending",TReplaceFlags()<< rfReplaceAll);

}>Text=StringReplace(Ending->Text,"#Ending","Ending",TReplaceFlags()<< rfReplaceAll);>SaveToFile(ExtractFilePath(Application->ExeName)+Dir+Folder+"\\"+SSC);

delete Ending;

}

}

//Выбрать все чекбоксы космических кораблей

void TMainForm::CheckAll(bool checked)

{->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;

//CheckBox30->Checked=checked; нет информации об Ending'е

//CheckBox31->Checked=checked; нет информации об Ending'е->Checked=checked;

//CheckBox33->Checked=checked; нет информации об Ending'е->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;

//CheckBox38->Checked=checked;м->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;

//CheckBox45->Checked=checked; нет информации об Ending'е->Checked=checked;->Checked=checked;->Checked=checked;

//CheckBox49->Checked=checked; нет информации об Ending'е

//CheckBox50->Checked=checked; нет информации об Ending'е

//CheckBox51->Checked=checked; нет информации об Ending'е->Checked=checked;

//CheckBox53->Checked=checked; нет информации об Ending'е->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;->Checked=checked;

}__fastcall TMainForm::Button3Click(TObject *Sender)

{(ImportDialog->Execute())

{

//Для того, чтобы при выполнении кнопок "Сохранить" не выскакивало сообщение

AutoSave=true;

//Основные= new TIniFile(ImportDialog->FileName);->Text=Settings->ReadString("Main","ExtrasDir1","");->Text=Settings->ReadString("Main","ExtrasDir2","");->Text=Settings->ReadString("Main","ExtrasDir3","");->Text=Settings->ReadString("Main","OrbitPathSamplePoints","");->Text=Settings->ReadString("Main","RingSystemSections","");Temp=Settings->ReadString("Main","Cursor","");(Temp=="crosshair")->Checked=true;(Temp=="inverting_crosshair")->Checked=true;(Temp=="arrow")->Checked=true;>Text=Settings->ReadString("Main","ScriptScreenshotDirectory","");->ItemIndex=Settings->ReadInteger("Main","ScriptSystemAccessPolicy",0);>Text=Settings->ReadString("Main","InitScript","");>Text=Settings->ReadString("Main","DemoScript","");->Text=Settings->ReadString("Main","RotateAcceleration","");->Text=Settings->ReadString("Main","MouseRotationSensitivity","");->Click();

//Объекты и время->State=Settings->ReadBool("ObjectsTime","SunFlares",0);->State=Settings->ReadBool("ObjectsTime","JupiterRings",0);->State=Settings->ReadBool("ObjectsTime","MarsSurfaceFeatures",0);->State=Settings->ReadBool("ObjectsTime","KuiperBelt",0);->State=Settings->ReadBool("ObjectsTime","JupiterClouds",0);->State=Settings->ReadBool("ObjectsTime","IoVolcanoes",0);->State=Settings->ReadBool("ObjectsTime","SpaceLift",0);->State=Settings->ReadBool("ObjectsTime","OortCloud",0);->State=Settings->ReadBool("ObjectsTime","HighlightSaturnRings",0);

//Космические аппараты->State=Settings->ReadBool("Spacecrafts","Mir",0);->State=Settings->ReadBool("Spacecrafts","Galileo",0);->State=Settings->ReadBool("Spacecrafts","CassiniHuygens",0);->State=Settings->ReadBool("Spacecrafts","Sputnik1",0);->State=Settings->ReadBool("Spacecrafts","Sputnik2",0);->State=Settings->ReadBool("Spacecrafts","Sputnik3",0);->State=Settings->ReadBool("Spacecrafts","Salyut7",0);->State=Settings->ReadBool("Spacecrafts","Mariner",0);->State=Settings->ReadBool("Spacecrafts","VenusExpress",0);->State=Settings->ReadBool("Spacecrafts","Herschel",0);->State=Settings->ReadBool("Spacecrafts","NewHorizons",0);->State=Settings->ReadBool("Spacecrafts","Spitzer",0);->State=Settings->ReadBool("Spacecrafts","ISO",0);->State=Settings->ReadBool("Spacecrafts","Envisat",0);->State=Settings->ReadBool("Spacecrafts","Apollo",0);->State=Settings->ReadBool("Spacecrafts","Dawn",0);->State=Settings->ReadBool("Spacecrafts","DeepImpact",0);->State=Settings->ReadBool("Spacecrafts","Giotto",0);->State=Settings->ReadBool("Spacecrafts","Helios",0);->State=Settings->ReadBool("Spacecrafts","ICE",0);->State=Settings->ReadBool("Spacecrafts","LRO",0);->State=Settings->ReadBool("Spacecrafts","Magellan",0);->State=Settings->ReadBool("Spacecrafts","MarsExpress",0);->State=Settings->ReadBool("Spacecrafts","Nozomi",0);->State=Settings->ReadBool("Spacecrafts","Pioneers",0);->State=Settings->ReadBool("Spacecrafts","Planck",0);->State=Settings->ReadBool("Spacecrafts","Rosetta",0);->State=Settings->ReadBool("Spacecrafts","Ulysses",0);->State=Settings->ReadBool("Spacecrafts","Venera",0);->State=Settings->ReadBool("Spacecrafts","Viking",0);->State=Settings->ReadBool("Spacecrafts","Zond3",0);->Click();

//LUA-инструменты(Label11->Visible==false) //если Lua-инструменты установлены

{->State=Settings->ReadBool("LuaTools","ShowTools",0);->State=Settings->ReadBool("LuaTools","Info",0);->State=Settings->ReadBool("LuaTools","Coordinates",0);->State=Settings->ReadBool("LuaTools","Magnification",0);->State=Settings->ReadBool("LuaTools","HR",0);->State=Settings->ReadBool("LuaTools","KeplerParam",0);->State=Settings->ReadBool("LuaTools","VirtualPad",0);->State=Settings->ReadBool("LuaTools","Compass",0);->State=Settings->ReadBool("LuaTools","AsteroidBelt",0);->State=Settings->ReadBool("LuaTools","LocalTime",0);->State=Settings->ReadBool("LuaTools","CenterCompass",0);->State=Settings->ReadBool("LuaTools","AltAzimuthal",0);->ItemIndex=Settings->ReadInteger("LuaTools","DateFormat",0);->Text=Settings->ReadString("LuaTools","GotoDuration","");(LuaTab->Caption.Pos("Lua Universal Tools"))->ItemIndex=Settings->ReadInteger("LuaTools","ColorScheme",0);->Click();

}=false;>MessageBox(MessegesLocale[9].c_str(), Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);

}

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label32MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label32MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label32Click(TObject *Sender)

{(Handle, NULL, LinkLocale[1].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Button4Click(TObject *Sender)

{(ExportDialog->Execute())

{

//Основные= new TIniFile(ExportDialog->FileName);>WriteString("Main","ExtrasDir1",EditDir1->Text);>WriteString("Main","ExtrasDir2",EditDir2->Text);>WriteString("Main","ExtrasDir3",EditDir3->Text);>WriteString("Main","OrbitPathSamplePoints",Edit2->Text);>WriteString("Main","RingSystemSections",Edit3->Text);Temp;(RadioButton1->Checked==true)="crosshair";(RadioButton2->Checked==true)="inverting_crosshair";(RadioButton3->Checked==true)="arrow";>WriteString("Main","Cursor",Temp);>WriteString("Main","ScriptScreenshotDirectory",EditScreenDir->Text);>WriteInteger("Main","ScriptSystemAccessPolicy",ComboBox1->ItemIndex);>WriteString("Main","InitScript",EditStartScript->Text);>WriteString("Main","DemoScript",EditDemoScript->Text);>WriteString("Main","RotateAcceleration",Edit5->Text);>WriteString("Main","MouseRotationSensitivity",Edit1->Text);

//Объекты и время>WriteBool("ObjectsTime","SunFlares",CheckBox1->State);>WriteBool("ObjectsTime","JupiterRings",CheckBox2->State);>WriteBool("ObjectsTime","MarsSurfaceFeatures",CheckBox10->State);>WriteBool("ObjectsTime","KuiperBelt",CheckBox17->State);>WriteBool("ObjectsTime","JupiterClouds",CheckBox18->State);>WriteBool("ObjectsTime","IoVolcanoes",CheckBox19->State);>WriteBool("ObjectsTime","SpaceLift",CheckBox20->State);>WriteBool("ObjectsTime","OortCloud",CheckBox61->State);>WriteBool("ObjectsTime","HighlightSaturnRings",CheckBox62->State);

//Космические аппараты>WriteBool("Spacecrafts","Mir",CheckBox9->State);>WriteBool("Spacecrafts","Galileo",CheckBox3->State);>WriteBool("Spacecrafts","CassiniHuygens",CheckBox23->State);>WriteBool("Spacecrafts","Sputnik1",CheckBox24->State);>WriteBool("Spacecrafts","Sputnik2",CheckBox25->State);>WriteBool("Spacecrafts","Sputnik3",CheckBox26->State);>WriteBool("Spacecrafts","Salyut7",CheckBox27->State);>WriteBool("Spacecrafts","Mariner",CheckBox28->State);>WriteBool("Spacecrafts","VenusExpress",CheckBox29->State);>WriteBool("Spacecrafts","Herschel",CheckBox32->State);>WriteBool("Spacecrafts","NewHorizons",CheckBox34->State);>WriteBool("Spacecrafts","Spitzer",CheckBox35->State);>WriteBool("Spacecrafts","ISO",CheckBox36->State);>WriteBool("Spacecrafts","Envisat",CheckBox37->State);>WriteBool("Spacecrafts","Apollo",CheckBox39->State);>WriteBool("Spacecrafts","Dawn",CheckBox40->State);>WriteBool("Spacecrafts","DeepImpact",CheckBox41->State);>WriteBool("Spacecrafts","Giotto",CheckBox42->State);>WriteBool("Spacecrafts","Helios",CheckBox43->State);>WriteBool("Spacecrafts","ICE",CheckBox44->State);>WriteBool("Spacecrafts","LRO",CheckBox46->State);>WriteBool("Spacecrafts","Magellan",CheckBox47->State);>WriteBool("Spacecrafts","MarsExpress",CheckBox48->State);>WriteBool("Spacecrafts","Nozomi",CheckBox52->State);>WriteBool("Spacecrafts","Pioneers",CheckBox54->State);>WriteBool("Spacecrafts","Planck",CheckBox55->State);>WriteBool("Spacecrafts","Rosetta",CheckBox56->State);>WriteBool("Spacecrafts","Ulysses",CheckBox57->State);>WriteBool("Spacecrafts","Venera",CheckBox58->State);>WriteBool("Spacecrafts","Viking",CheckBox59->State);>WriteBool("Spacecrafts","Zond3",CheckBox60->State);

//LUA-инструменты(Label11->Visible==false) //если не установлены

{>WriteBool("LuaTools","ShowTools",CheckBox4->State);>WriteBool("LuaTools","Info",CheckBox5->State);>WriteBool("LuaTools","Coordinates",CheckBox6->State);>WriteBool("LuaTools","Magnification",CheckBox11->State);>WriteBool("LuaTools","HR",CheckBox12->State);>WriteBool("LuaTools","KeplerParam",CheckBox7->State);>WriteBool("LuaTools","VirtualPad",CheckBox13->State);>WriteBool("LuaTools","Compass",CheckBox8->State);>WriteBool("LuaTools","AsteroidBelt",CheckBox63->State);>WriteBool("LuaTools","LocalTime",CheckBox14->State);>WriteBool("LuaTools","CenterCompass",CheckBox15->State);>WriteBool("LuaTools","AltAzimuthal",CheckBox16->State);>WriteInteger("LuaTools","DateFormat",ComboBox2->ItemIndex);>WriteString("LuaTools","GotoDuration",Edit4->Text);(LuaTab->Caption.Pos("Lua Universal Tools"))>WriteInteger("LuaTools","ColorScheme",RadioGroup1->ItemIndex);

}=MessegesLocale[10]+" "+ExportDialog->FileName;>MessageBox(Temp.c_str(), Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);

}

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label8MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label8MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label8Click(TObject *Sender)

{(Handle, NULL, LinkLocale[6].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label13MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label13MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label13Click(TObject *Sender)

{(Handle, NULL, LinkLocale[3].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------

__fastcall TMainForm::Link1MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link1MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link1Click(TObject *Sender)

{(Handle, NULL, Link[1].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link2MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link2MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link2Click(TObject *Sender)

{(Handle, NULL, Link[2].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link3MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link3MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link3Click(TObject *Sender)

{(Handle, NULL, Link[3].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link4MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link4MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline << fsBold;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Link4Click(TObject *Sender)

{(Handle, NULL, Link[4].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label15MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label15MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label15Click(TObject *Sender)

{(Handle, NULL, LinkLocale[5].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label33MouseLeave(TObject *Sender)

{->Font->Style = TFontStyles() >> fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label33MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{->Font->Style = TFontStyles() << fsUnderline;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Label33Click(TObject *Sender)

{(Handle, NULL, LinkLocale[4].c_str(), NULL, NULL, SW_SHOWNORMAL);

}

//---------------------------------------------------------------------------TMainForm::HSatRingsProv(String Path, TCheckBox *Check)

{(FileExists(ExtractFilePath(Application->ExeName)+Path))

{*List = new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Path);(List->Strings[10] == "diffuse 0.46 0.46 0.42" && List->Strings[11] == "opacity 0.008")>Checked=false;>Checked=true;List;

}

{>Checked=false;>Enabled=false;

}

}TMainForm::HSatRingsSave(String Path, TCheckBox *Check)

{(FileExists(ExtractFilePath(Application->ExeName)+Path))

{*List = new TStringList;>LoadFromFile(ExtractFilePath(Application->ExeName)+Path);(Check->Checked==true)

{>Strings[10] = "diffuse 1 0 0";>Strings[11] = "opacity 0.125";

}

{>Strings[10] = "diffuse 0.46 0.46 0.42";>Strings[11] = "opacity 0.008";

}>SaveToFile(ExtractFilePath(Application->ExeName)+Path);List;

}

}__fastcall TMainForm::HlpClick(TObject *Sender)

{HelpFile = ExtractFilePath(Application->ExeName)+"manager\\help\\"+Language+".chm";(FileExists(HelpFile))(Handle, NULL, HelpFile.c_str(), NULL, NULL, SW_SHOWNORMAL);

{(Application->MessageBox(StringsLocale[11].c_str(), Application->Title.c_str(), MB_YESNO | MB_ICONQUESTION)==IDYES)

{= ExtractFilePath(Application->ExeName)+"manager\\help\\English.chm";(Handle, NULL, HelpFile.c_str(), NULL, NULL, SW_SHOWNORMAL);

}

}

}

//---------------------------------------------------------------------------

Похожие работы на - Создание менеджера конфигурации Celestia

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!