Giter Club home page Giter Club logo

rs232terminal's People

Contributors

alxgord avatar

Watchers

James Cloos avatar  avatar  avatar

Forkers

bulsv

rs232terminal's Issues

Ускорение в read/write окнах

class MyPlainTextEdit : public QPlainTextEdit
{
    Q_OBJECT
public:
    MyPlainTextEdit(QWidget *parent = 0) : QPlainTextEdit(parent) {}
    void delLine(int lineNumber)
    {
//        QStringList list = this->toPlainText().split("\n");
//        list.removeAt(lineNumber);
//        this->clear();
//        this->insertPlainText(list.join("\n"));
        QTextCursor cursor = this->textCursor();
        cursor.movePosition(QTextCursor::Start);
        cursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, lineNumber);
        cursor.select(QTextCursor::LineUnderCursor);
        cursor.removeSelectedText();

        this->setTextCursor(cursor);
    }
};

123

  • Режим эхо
  • Перетаскивание макросов
  • Подтверждение удаления
  • Сделать паузу для макросов (сверху справа), по стопу - очередь сначала

Test Drive

  • При активном режиме Echo mode нажимая на кгопку Clear в write lineEdit'е стирается и далее не отображаются передаваемые пакеты, ни с помощью Echo mode, ни с помощью отправки макросов (и по кнопкам и по checkbox'ам).
  • Данные при приёме не укладываются равномерно - появляются дырки.
  • Сделать у макросов кнопку Save неактивной, если в lineEdit'ах нет текста.

Test Drive 2

  • 1. Везде, где определяются сигналы писать их возвращаемый тип. Например:
signals:
    void bPress(int index);
    void cbCheckInterval(int index, bool check);
    void cbCheckPeriod(int index, bool check);
    void editMacros(int index);
  • 2. Убрать "-1"-цы в layout'ах, а в двух случаях заменить на:
WriteLayout->addWidget(m_eLogWrite, 1, 0, 1, 5);
ReadLayout->addWidget(m_eLogRead, 1, 0, 1, 5);
  • 3. Развернуть порядок заполнения combobox'а для DataBits. Сделать так:
buffer << "8" << "7" << "6" << "5";
  • 4. Переместить вызов функции m_cbPort->setEditable(true) сюда:
QStringList buffer;
foreach(QSerialPortInfo portsAvailable, QSerialPortInfo::availablePorts())
{
    buffer << portsAvailable.portName();
}
m_cbPort->addItems(buffer);
m_cbPort->setEditable(true);

Это для того, чтобы в combobox'е был порт, а не пустое поле при первом запуске.

  • 5. Добавить отправку пакетов по Enter (как дубляж кнопки Send).

  • 6. Сделать очень короткие вспышки Tx и Rx, которые синхронизированны с приёмом/отправкой пакетов.

  • 7. Режим эхо должен работать так:

  • Однократный режим

    Время в spinbox'е - 0 мс.

    Сначала передается один пакет (по макросу {только по одному и по нажатию пользователем; если есть макросы с проставленными checkbox'ами, то их нужно снять} или по кнопке Send) и программа ждет ответ. Если ответ совпадает с переданным, то фон строчек переданного и принятого пакетов делается зеленым, а символы пакетов - белыми. Если не совпадает, то фон - красный, символы пакетов - белые.

  • Мноргократный режим

    Время в spinbox'е - отличное от 0 мс.

    Сначала передается один пакет (по макросу {только по одному и по нажатию пользователем; если есть макросы с проставленными checkbox'ами, то их нужно снять} или по кнопке Send) и программа ждет ответ. Если ответ совпадает с переданным, то фон строчек переданного и принятого пакетов делается зеленым, а символы пакетов - белыми. Если не совпадает, то фон - красный, символы пакетов - белые.

    Через промежуток времени, заданный в spinbox'е, после получения ответа тот же пакет снова отправляется.

    И т.д., пока не уберут галочку режима эха.
    Вывести общее количество неправильных ответов в QLabel под Echo mode.

  • 8. Исправить: виджет по ПКМ для конкретного макроса остается, когда приложение закрыто.

  • 9. Исправить: время в макросе по ПКМ от 0 до 99 (просто учесть при выполнении 16 пункта).

  • 10. Добавить spinbox ввода задержки между пакетами. По этой задержке определять начало и конец пакетов.

    При этом, смещение влево (кнопка <--------) - больше не нужно и выравнивание Bytes count - тоже.

  • 11. В главном окне сделать полосу прокрутки, если "минимакросы" (выдвижные) не помещаются.

  • 12. Checkbox'ы Log'ов сделать кнопками с красными кружками (как в старых магнитофонах кнопка записи). При нажатии на кнопку она должна вдавливаться и красный кружок должен менять цвет с красного на серый, пока идет запись. При повторном нажатии запись должна прекращаться и кнопка должна возвращаться в исходное положение, а кружок опять должен стать красным.

  • 13. Добавить возможность сворачивать окно.

  • 14. ASCII формат. Должен быть чувствителен к регистру. Каждый символ - отдельный байт.

    В приемном окне добавить отдельную возможность переключения форматов отображения принимаемых данных: HEX, ASCII и DEC.

    В передающем окне добавить отдельную возможность переключения форматов отображения передавамых данных: HEX, ASCII и DEC.

    Оставить HEX, ASCII и DEC для выбора в каком виде отправляются данные по кнопке Send.

    Например, передается такая последовательность символов:

$PGRMC,A,x.x,hh,x.x,x.x,x.x,x.x,x.x,c,c,2,c*hh

на экране передачи должно быть отображено (при формате HEX в передающем окне):

24 50 52 4D 43 2C 41 2C 78 2E 78 2C 68 68 2C 78 2E 78 2C 78 2E 78 2C 78 2E 78 2C 78 2E 78 2C 78 2E 78 2C 63 2C 63 2C 32 2C 63 2A 68 68
  • 15. Убрать окно макросов доступное по кнопке Macro и саму эту кнопку тоже убрать. Кнопки Add Macros и Load Macroses перенести в QToolBar главного окна.

  • 16. Редактирование макроса по ПКМ сделать основным редактором пакетов вместо окна макросов доступного по кнопке Macro. В него перенести все то, что относится к одному пакету из бывшего окна макросов (кроме кнопок отправки, удаления, а также spinbox'а времени и checkbox'ов Interval и Period - всё это будет в выдвижном виджете). Кнопки Load и Save перенести в QToolBar'ы. Также в QToolBar добавить кнопку Save as...

    Плюс добавить выбор формата ввода макроса: HEX, ASCII или DEC. А именно, после lineEdit'a добавить снизу в три строки отображение текущего набранного пакета в HEX, ASCII и DEC:

    • первая строка должна состоять из QRadiobutton с HEX именем формата, QLabel - для отображения пакета в HEX;

    • вторая строка должна состоять из QRadiobutton с DEC именем формата, QLabel - для отображения пакета в DEC;

    • третья строка должна состоять из QRadiobutton с ASCII именем формата, QLabel - для отображения пакета в ASCII.

      В каждый момент времени только один radiobutton может быть выбран.

      Выбирая конкретный radiobutton - выбирается формат ввода пакета (следовательно формат пакета должен записываться в файл макроса). Если пакет уже был, то выбирая формат отличный от текущего формата (HEX, DEC или ASCII) пакета, пакет должен пересчитываться в новый формат (запоминаться только по требованию пользователя). Выбор radiobutton'ов не запоминается, а считывается из файлов макросов.

TODO

Исправить:

  • 1. Не запоминает состояние после перезапуска:
  • 1.1. Port.
  • 1.2. Baud.
  • 1.3. Bytes count.
  • 1.4. Echo mode (checkbox & spinbox).
  • 1.5. Auto scrolling.
  • 1.6. Send (spinbox).
  • 1.7. Загруженные файлы макросов (названия на кнопках), т. е. всё пишет в главный файл настроек, даже если файлы для пакета существуют.
  • 1.8. Установленные в макросах checkbox'ы.
  • 2. При загрузке программы не активны checkbox'ы и кнопки отправки пакетов, когда в lineEdit'ах есть текст.
  • 3. В Echo mode длина пакетов по строке осталась не корректной.

Ввести:

  • 1. Видимость полосы прокрутки в макросах - всегда.
  • 2. В Echo mode сделать checkbox активным всегда.
  • 3. Добавить шрифт Lucida Console в ресурсы программы (на общих документах есть шрифт).
  • 4. Шрифт в lineEdit'ах макросов - Lucida Console.
  • 5. Фон в lineEdit'ах макросов - черный.
  • 6. Текст в lineEdit'ах макросов - зелёный.
  • 7. Выбор Data bits: 5, 6, 7, 8.
  • 8. Выбор Parity: None, Odd, Even, Mark, Space.
  • 9. Выбор Stop bits: 1, 1.5, 2.
  • 10. Возможность ввода имени com-порта вручную (для Linux систем).
  • 11. Изменить базовый класс главного окна с QWidget на QMainWindow.
  • 12. Переделать архитектуру программы в целом, используя паттерны проектирования.
  • 13. Кнопка загрузить файлы макросов (Load from files). Загрузка макросов из директории с помощью выделения нескольких файлов и последующим созданием виджетов для новых макросов. Старые макросы остаются, при этом, на своих местах, а новые добавляются вниз.
  • 14. В главном окне справа "выдвижной" (по нажатию кнопки - тонкая по горизонтали, по вертикали занимает всю область главного окна справа, с изменяющейся стрелкой: > - при спрятанном окне, < - при видимом окне) виджет управления отправкой макросов с кнопками отправки и checkbox'ами установки времени. Чтобы не открывать каждый раз диалог управления макросами. (См. Бланшет Ж., Саммерфилд М. Qt 4: программирование GUI на C++. Пер. с англ. 2-е изд., доп. - М.: КУДИЦ-ПРЕСС, 2008. - 736 с. , С.31-38 "Изменяющиеся диалоговые окна").
  • 15. Запоминать положение "выдвижного" виджета (виден или нет).
  • 16. В "выдвижном" виджете сделать checkbox - выделить всё (Check all), чтобы выбрать все checkbox'ы макросов.
  • 17. Раздельные режимы представления данных в read/write окнах: HEX, DEC, BIN, BIN-DEC, ASCII (для BIN-DEC и ASCII будет уточнено позднее).
  • 18. Раздельная установка максимального количества строчек в read/write окнах.
  • 19. Сохранение в текстовой файл раздельно содержимого read/write окон (в отличии от п.20 записываются строчки, доступные на данный момент, тогда как в п.20 создается отдельный буфер, в который записываются строчки пока не будет нажата кнопка Stop log).
  • 20. Добавить кнопки для каждого read/write окон Start log & Stop log для записи в файл с именем по умолчанию: YYYYMMDDHHMMSS.log (пример: 20160514212459.log); или под именем, указанным пользователем в диалоге сохранения. Ограничение по времени записи внести в файл настроек (чтобы можно было при необходимости его изменить) равным 10 минут.
  • 21. Выделение и копирование текста в read/write окнах.
  • 22. Если не помещается в read/write окнах пакет в строчку - сделать горизонтальную полосу прокрутки.
  • 23. Сделать возможность перетягивать перегородку между read/write окнами влево-вправо, увеличивая/уменьшая размеры окон по горизонтали.
  • 24. Выборочная установка символа-разделителя (вместо $ по умолчанию).
  • 25. Сделать отдельный поток для передачи/приема данных. Основной поток - для всего остального (интерфейса и т. д.).
  • 26. Сделать режим ASCII-кодов (помимо HEX-режима с $-разделителем), когда пакеты вводятся и отправляются без $-разделителя (будет уточнено позднее).
  • 27. Сделать поддержку скриптов на Python'е: добавить выпадающий список (в Menu Bar'е QMainWindow) со всеми скриптами (элемент списка - имя файла скрипта без расширения), которые находятся в папке Scripts (интерфейс для внедрения скриптов будет уточнён позднее). Скорее всего будут создаваться пакеты и правлила их отправки.

TODO

  • Маска ввода
  • Возможность переключения между периодом и интервалом
  • PlainTextEdit заменить на ListView
  • в ASCII режиме пофиксить single send le

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.