Небольшой отчёт о проделанной работе
-
-
Перед написанием нового аппаратного журнала я поставил перед собой цель при реализации GUI для Windows не использовать сторонние элементы управления (далее "контролы"). Когда в проекте используются собственноручно написанные «контролы» - это «пластелин», который в дальнейшем избавит от многих проблем. Так сказать – всё в моих руках. Процесс довольно трудоемкий и не простой. Пришлось дорабатывать практически все «контролы» из Windows Forms и было написано немало новых «контролов», а что-то из стандартных было переписано заново (например кнопка Button, CheckBox и др.). При написании «контролов» мной была использована технология визуальных стилей, которая позволяет раскрасить все мои «контролы» в любые цвета. Все окна в моём проекте наследуются от моего класса RsForm, который является потомком стандартного класса Form. Далее мной был с нуля (безо всяких идей со стороны и заимствования чужого кода) написан Docking – интерфейс, который позволяет закреплять окна внутри других окон. Docking – интерфейс я писал с нуля два раза. Второй раз оказался более продуманным, компактным и стабильным. Закрепляемые окна RsDockingForm являются потомками RsForm. В них полностью переделана рамка и заголовок окна. И всё это также поддерживает визуальные стили.
Затем встал вопрос о системе управления трансивером. Есть, конечно, OmniRig и его можно вполне использовать, но только на Windows. Этот вариант для меня снова не подошёл. Я попросил исходный код OmniRig у её автора. Код OmniRig был мной переписан с Delphi на C# с некоторыми улучшениями. Например, стало возможно управлять трансивером через сетевые подключения, была увеличена скорость «отклика» на команды, интервал опроса сократился до 10 мс и др. В общем, и OmniRig оказался в моих руках, но уже в виде моего OmniRig.NET. Далее мной был написан глобус земли с использованием OpenGL. Здесь пришлось попотеть с математическими / геометрическими расчётами и формулами.
Это была большая и сложная работа. Особенно для новичка в программировании на C#
. Теперь я перешёл непосредственно к написанию аппаратного журнала Logger.NET.
Для хранения небольших по объёму данных и настроек я выбрал XML – формат. Для хранения больших объёмов данных мной была выбрана СУБД SQLite, как наиболее компактная, кроссплатформенная, с неплохими возможностями и открытым исходным кодом. Например, в одной таблице этой базы данных может храниться 2^64 записей. Теперь, когда я написал функционал по созданию журналов и сохранению новых QSO, меня порадовала неплохая скорость работы моего «творения»
. Для отображения QSO в визуальной таблице был использован виртуальный режим, при котором, в таблицу из базы данных загружается только та часть данных, которая отображается в данный момент. Это многократно увеличило скорость отображения QSO даже при количестве QSO в базе данных (в журнале) свыше 1 млн. Все журналы я решил хранить в одной таблице. Для каждой группы QSO относящейся к конкретному журналу создаётся свой уникальный идентификатор, по которому производится выбор данных для отображения в таблице. Это увеличило скорость выбора данных. Например, в логе с количеством QSO 10000 проверка на повторы происходит практически мгновенно (даже, быстрее чем в моём старом Logger XP). В тестовом программном цикле 100000 новых QSO добавляются в базу данных чуть больше чем за 4 мин. Наверно, здесь следует отдать должное и технологии ADO.NET.
Много ещё чего было сделано, что простому пользователю не заметно… То ли ещё будет. Дай Бог, чтобы всё задуманное было мной реализовано!