Проект Simple Tracker. Часть 1: требования к проекту

Qt, Iscander Che, C++, Simple Tracker

Проект реализует простой трекер задач, в первую очередь, для программных проектов, хранящихся в Subversion. Рассчитываю использовать его только у себя. Если возникнет интерес у читателей данного ресурса, постараюсь доработать код до возможности более универсального использования и выложу проект на GitHub.

Использование Subversion (далее – SVN) для хранения кода продиктовано тем, что кроме исходных текстов программ под SVN заточен самописный набор скриптов для архивации прочих документов.

Проект появился из необходимости отслеживать собственные работы. Анализ аналогов показал, что для использования имеющихся бесплатных трекеров требуется установка и настройка дополнительного программного обеспечения, как то: полноценный веб-сервер и сервер баз данных; Python и некоторое количество дополнительных скриптов. Поскольку мне трекер необходим только для локального контроля собственных работ, такие затраты показались излишними. Кроме того, это необходимая мне практика по программированию.

Для реализации проекта выбрана клиент-серверная архитектура на основе QLocalSocket, т.к. необходимо связать два независимо работающих компонента – SVN и собственно трекер.

Трекер должен:

  • запускаться при старте системы;
  • иметь серверную часть и визуальный интерфейс.

Клиент трекера должен запускаться при коммите в SVN изменений проекта по pre-commit-хуку. Клиент трекера должен передать серверу наименование проекта, номер закрываемой задачи и номер ревизии. В свою очередь, сервер должен принять эти данные и перевести задачу в состояние «закрыта».

Данные по закрытию задачи вводит пользователь в комментарий к коммиту в следующем формате:

<произвольный текст> #{номер закрываемой задачи} <произвольный текст>

Остальные данные присваивает клиент.

Интерфейс трекера

Интерфейс трекера должен иметь имеет следующий вид.

В левой части находится группа «Управление проектами». Она состоит из следующих элементов:

  • список проектов;
  • кнопки «Новый проект», «Архивировать проект», «Открыть архив».

В правой части находится группа «Управление задачами». Она состоит из следующих элементов:

  • список задач;
  • выпадающий список «Состояние задачи», имеет три значения: «не активна», «в работе», «закрыта»;
  • кнопки «Новая задача», «Редактировать задачу», «Удалить задачу».

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

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

Нажатие кнопки «Новый проект» открывает диалоговое окно создания проекта.

В текстовое поле ввода пользователь должен ввести название проекта. В зависимости от положения радиопереключателя «СКВ» (Система Контроля Версий) вводимое название может содержать следующие символы:

  • «без системы контроля версий» - любые символы;
  • «под системой контроля версий» - только символы латинского алфавита без пробелов, включая символ подчёркивания.

Проект без СКВ в списке проектов помечается буквой «М» в скобках (от англ. manual – вручную) перед наименованием проекта.

Кнопка «Архивировать проект» позволяет архивировать проект, у которого закрыты все задачи. Если у проекта закрыты не все задачи, трекер выдаёт соответствующее предупреждение и прерывает архивирование проекта. Если у проекта закрыты все задачи и нажата кнопка «Архивировать проект», то наименование проекта исключается из списка проектов в основном интерфейсе трекера после согласия пользователя с соответствующим предупреждением.

Кнопка «Открыть архив» позволяет открыть архивированный проект и загрузить связанный с ним список задач.

По нажатию кнопки «ОК» отмеченные проекты должны появиться в списке проектов основного окна трекера. Архивированные ранее проекты отмечаются в списке проектов буквой «А» в скобках перед наименованием проекта.

Управление задачами

Если не выделено ни одной задачи, выпадающий список «Состояние задачи», кнопки «Редактировать задачу» и «Удалить задачу» заблокированы. Если выделена задача, то эти элементы доступны. Кроме того, выпадающий список «Состояние задачи» устанавливается на значение, указанное в таблице. Если выделена задача в состоянии «закрыта», выпадающий список «Состояние задачи», кнопки «Редактировать задачу» и «Удалить задачу» также заблокированы.

В зависимости от состояния задачи строка в таблице задач окрашивается в соответствующий цвет:

  • не активна – белый цвет (254, 254, 254);
  • в работе – жёлтый цвет (255, 254, 4);
  • закрыта – зелёный цвет (143, 210, 68).

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

По нажатию кнопки «Новая задача» открывается диалоговое окно ввода / редактирования задачи.

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

  • bug – исправление ошибки;
  • feature – разработка новой функции;
  • issue – отработка внешнего запроса;
  • milestone – плановый выпуск новой версии.

При выделенной строке в таблице задач и состоянии задачи «не активна» или «в работе» доступны кнопки «Редактировать задачу» и «Удалить задачу».
По нажатию кнопки «Редактировать задачу» открывается диалоговое окно ввода / редактирования задачи, показанное выше.
По нажатию кнопки «Удалить задачу» пользователь должен подтвердить удаление задачи.

Дата и ревизия присваиваются автоматически при закрытии задачи. В случае закрытия задачи вручную (для обоих видов проектов, с СКВ и без СКВ) в поле «Ревизия» указывается «manual».

Настройки трекера

При первом запуске трекер предлагает пользователю настроить путь к папке проектов.

В случае нажатия кнопки «Отмена» пользователю будут доступны для создания только проекты без СКВ.

По нажатию кнопки «…» открывается стандартное диалоговое окно выбора папки.

По нажатию кнопки закрытия окна основного интерфейса трекер сворачивается в трей.

Из трея доступно контекстное меню со следующими командами:

  • «Открыть трекер»;
  • «Путь к проектам»
  • «Выход».

По команде «Открыть трекер» открывается основной интерфейс трекера.
По команде «Путь к проектам» открывается диалоговое окно настройки пути к проектам. В случае, если:

  • путь ещё не настроен (при первом запуске трекера была нажата кнопка «Отмена»), пользователь может воспользоваться всеми элементами диалогового окна;
  • путь настроен, заблокированы все элементы, кроме кнопки «ОК»; при наведении курсора на текстовое поле ввода выводится всплывающая подсказка с полным путём к папке проектов.

По команде «Выход» приложение полностью закрывается.

Заключение

  • Описаны основные требования к проекту.
  • Разработаны прототипы интерфейсов.
  • Определена основная логика работы приложения.
10% refund of hotel reservation amount on Booking
10% refund of hotel reservation amount on Booking
We offer a link with a 10% return on the amount of the order when booking a hotel through Booking

Прикольно. Это такая локальная Jira получается?

А если добавить функционал по редактированию коммитов и веток, то получится базовая реализация TortoiseSVN. Только кроссплатформенная...

Редактирование веток и коммитов - чересчур. Это надо подключать API самого SVN. Я заглянул туда и понял, что пока рановато...
Да, похоже на Jira, только я её не рассматривал. Ориентировался на Mantiss, Bugzilla и Trac.

Ясно)) А можно ещё переписать на QML и используя Web Assembly показывать прямо в браузере. Тогда может быть многопользовательский вариант системы.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
AS
July 22, 2019, 4:32 p.m.
Aleksandr Spiridonov

C++ - Test 001. The first program and data types

  • Result:46points,
  • Rating points-6
AS
July 22, 2019, 4:21 p.m.
Aleksandr Spiridonov

Qt - Test 001. Signals and slots

  • Result:73points,
  • Rating points1
July 22, 2019, 10 a.m.
Pavel K.

C++ - Test 006. Enumerations

  • Result:50points,
  • Rating points-4
Last comments
July 21, 2019, 6:03 a.m.
Evgenij Legotskoj

да, наверное, 32-х разрядную поддержку уже давно поа было выкинуть. К слову, у вас много проектов под Android? Часто много где вижу вопросы о том, пишет ли кто-то вообще на Qt под мобильные сист…
July 20, 2019, 2:41 p.m.
Andrej Jankovich

Очень полезная информация, увы уже выкинул поддержку 32 битных бедняг.
July 20, 2019, 9:31 a.m.
Mihailll

Вот так qDebug()<<"position:"<<event->scenePos();
July 20, 2019, 8:49 a.m.
Mihailll

Добрый день. Как можно узнать координату на графической сцене при отпускании клавиши мыши?
Now discuss on the forum
July 22, 2019, 10:50 a.m.
Pavel K.

Благодарю.Буду пробовать.
July 22, 2019, 10:10 a.m.
Pavel K.

Скорее всего в коде не правильно потоки используются. на форуме пишут кое что интересное - https://stackoverflow.com/questions/18112027/qt-5-1-qml-property-through-threads
July 22, 2019, 3:58 a.m.
Evgenij Legotskoj

Добрый день! Нужен совет сообщества по разработке функционала проверки орфографии. Одна из идей - добавить проверку орфографии при наборе текста статей. Полагаю, что наиболее аде…
July 22, 2019, 3:01 a.m.
Evgenij Legotskoj

Возможно, если при сохранении файла установить права доступа на файл. Что-то такое должно быть у QFile
Looking for a Job?
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB