mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-07 07:23:43 +00:00
PC Application: partial firmware update dialog
This commit is contained in:
parent
8c8749accd
commit
07ba714f1f
134 changed files with 13954 additions and 7 deletions
84
Software/PC_Application/Menu/menu.cpp
Normal file
84
Software/PC_Application/Menu/menu.cpp
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
#include "menu.h"
|
||||
#include <QKeyEvent>
|
||||
#include "menuaction.h"
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
Menu::Menu(QStackedLayout &layout, QString name)
|
||||
: name(name),
|
||||
m_containingLayout(layout)
|
||||
{
|
||||
m_layout = new QVBoxLayout;
|
||||
setLayout(m_layout);
|
||||
m_widgetCount = 0;
|
||||
setFixedSize(180, 800);
|
||||
parent = nullptr;
|
||||
layout.addWidget(this);
|
||||
if(name.length() > 0) {
|
||||
auto back = new MenuAction(name, MenuAction::ArrowType::Left);
|
||||
back->setStyleSheet("background-color:lightblue;");
|
||||
connect(back, &MenuAction::triggered, this, &Menu::leave);
|
||||
addItem(back);
|
||||
}
|
||||
}
|
||||
|
||||
void Menu::addItem(MenuItem *i)
|
||||
{
|
||||
if(m_widgetCount >= maxWidgets) {
|
||||
throw runtime_error("Menu already at maximum capacity");
|
||||
}
|
||||
m_layout->addWidget(i, 1);
|
||||
items.push_back(i);
|
||||
m_widgetCount++;
|
||||
}
|
||||
|
||||
void Menu::addMenu(Menu *m)
|
||||
{
|
||||
auto menuLabel = new MenuAction(m->name, MenuAction::ArrowType::Right);
|
||||
submenus.push_back(SubmenuEntry(menuLabel, m, m_widgetCount));
|
||||
connect(menuLabel, &MenuAction::triggered, [=]() {
|
||||
m->m_containingLayout.setCurrentWidget(m);
|
||||
});
|
||||
addItem(menuLabel);
|
||||
m->parent = this;
|
||||
}
|
||||
|
||||
void Menu::finalize()
|
||||
{
|
||||
m_layout->addStretch(maxWidgets - m_widgetCount);
|
||||
}
|
||||
|
||||
void Menu::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
// check if softkey pressed
|
||||
int index = -1;
|
||||
switch(event->key()) {
|
||||
case Qt::Key_F1: index = 0; break;
|
||||
case Qt::Key_F2: index = 1; break;
|
||||
case Qt::Key_F3: index = 2; break;
|
||||
case Qt::Key_F4: index = 3; break;
|
||||
case Qt::Key_F5: index = 4; break;
|
||||
case Qt::Key_F6: index = 5; break;
|
||||
case Qt::Key_F7: index = 6; break;
|
||||
case Qt::Key_F8: index = 7; break;
|
||||
}
|
||||
if(index >= 0) {
|
||||
auto w = m_layout->itemAt(index);
|
||||
w->widget()->setFocus();
|
||||
items[index]->userSelected();
|
||||
event->accept();
|
||||
} else if(event->key() == Qt::Key_Escape) {
|
||||
leave();
|
||||
event->accept();
|
||||
}
|
||||
}
|
||||
|
||||
void Menu::leave()
|
||||
{
|
||||
if(parent) {
|
||||
// got a parent menu
|
||||
parent->m_containingLayout.setCurrentWidget(parent);
|
||||
}
|
||||
}
|
||||
|
||||
41
Software/PC_Application/Menu/menu.h
Normal file
41
Software/PC_Application/Menu/menu.h
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#ifndef MENU_H
|
||||
#define MENU_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QStackedLayout>
|
||||
#include "menuitem.h"
|
||||
#include "menuaction.h"
|
||||
|
||||
class Menu : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Menu(QStackedLayout &layout, QString name = QString());
|
||||
void addItem(MenuItem *i);
|
||||
void addMenu(Menu *m);
|
||||
void finalize();
|
||||
signals:
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent *event) override;
|
||||
private:
|
||||
void leave();
|
||||
class SubmenuEntry {
|
||||
public:
|
||||
SubmenuEntry(MenuAction *label, Menu *menu, int index) :
|
||||
label(label), menu(menu), index(index){};
|
||||
MenuAction *label;
|
||||
Menu *menu;
|
||||
int index;
|
||||
};
|
||||
static constexpr int maxWidgets = 12;
|
||||
QVBoxLayout *m_layout;
|
||||
Menu *parent;
|
||||
const QString name;
|
||||
QStackedLayout &m_containingLayout;
|
||||
std::vector<SubmenuEntry> submenus;
|
||||
std::vector<MenuItem*> items;
|
||||
int m_widgetCount;
|
||||
};
|
||||
|
||||
#endif // MENU_H
|
||||
65
Software/PC_Application/Menu/menuaction.cpp
Normal file
65
Software/PC_Application/Menu/menuaction.cpp
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
#include "menuaction.h"
|
||||
|
||||
#include <QLabel>
|
||||
#include <QStyle>
|
||||
#include <QSizePolicy>
|
||||
|
||||
MenuAction::MenuAction(const QString &l, MenuAction::ArrowType arrow)
|
||||
{
|
||||
subline = nullptr;
|
||||
auto label = new QLabel(l, this);
|
||||
label->setAlignment(Qt::AlignCenter);
|
||||
auto labelLayout = new QHBoxLayout();
|
||||
if(arrow == ArrowType::Left) {
|
||||
auto lIcon = new QLabel(this);
|
||||
lIcon->setPixmap(style()->standardIcon(QStyle::SP_ArrowLeft).pixmap(16));
|
||||
lIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
labelLayout->addWidget(lIcon);
|
||||
}
|
||||
labelLayout->addWidget(label);
|
||||
if(arrow == ArrowType::Right) {
|
||||
auto lIcon = new QLabel(this);
|
||||
lIcon->setPixmap(style()->standardIcon(QStyle::SP_ArrowRight).pixmap(16));
|
||||
lIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
labelLayout->addWidget(lIcon);
|
||||
}
|
||||
layout.addLayout(labelLayout);
|
||||
setLayout(&layout);
|
||||
}
|
||||
|
||||
void MenuAction::AddSubline(const QString &l)
|
||||
{
|
||||
if(!subline) {
|
||||
subline = new QLabel(this);
|
||||
subline->setAlignment(Qt::AlignCenter);
|
||||
layout.addWidget(subline);
|
||||
}
|
||||
QFont f( "Arial", 8);
|
||||
subline->setFont( f);
|
||||
subline->setText(l);
|
||||
}
|
||||
|
||||
void MenuAction::RemoveSubline()
|
||||
{
|
||||
if(subline) {
|
||||
layout.removeWidget(subline);
|
||||
delete subline;
|
||||
subline = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void MenuAction::userSelected()
|
||||
{
|
||||
emit triggered();
|
||||
}
|
||||
|
||||
void MenuAction::mouseReleaseEvent(QMouseEvent *me)
|
||||
{
|
||||
setFrameStyle(QFrame::Raised | QFrame::Panel);
|
||||
MenuItem::mouseReleaseEvent(me);
|
||||
}
|
||||
|
||||
void MenuAction::mousePressEvent(QMouseEvent *)
|
||||
{
|
||||
setFrameStyle(QFrame::Sunken | QFrame::Panel);
|
||||
}
|
||||
33
Software/PC_Application/Menu/menuaction.h
Normal file
33
Software/PC_Application/Menu/menuaction.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef MENULABEL_H
|
||||
#define MENULABEL_H
|
||||
|
||||
#include "menuitem.h"
|
||||
#include <QVBoxLayout>
|
||||
#include <QLabel>
|
||||
|
||||
class MenuAction : public MenuItem
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum class ArrowType {
|
||||
None,
|
||||
Left,
|
||||
Right,
|
||||
};
|
||||
|
||||
MenuAction(const QString &l, ArrowType arrow = ArrowType::None);
|
||||
void AddSubline(const QString &l);
|
||||
void RemoveSubline();
|
||||
signals:
|
||||
void triggered();
|
||||
public slots:
|
||||
void userSelected() override;
|
||||
private:
|
||||
QVBoxLayout layout;
|
||||
QLabel *subline;
|
||||
protected:
|
||||
void mouseReleaseEvent(QMouseEvent *me) override;
|
||||
void mousePressEvent(QMouseEvent *me) override;
|
||||
};
|
||||
|
||||
#endif // MENULABEL_H
|
||||
36
Software/PC_Application/Menu/menubool.cpp
Normal file
36
Software/PC_Application/Menu/menubool.cpp
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#include "menubool.h"
|
||||
|
||||
#include <QLabel>
|
||||
|
||||
MenuBool::MenuBool(QString name, bool defaultValue)
|
||||
{
|
||||
auto label = new QLabel(name, this);
|
||||
label->setAlignment(Qt::AlignCenter);
|
||||
layout.addWidget(label);
|
||||
sw = new ToggleSwitch(this, defaultValue);
|
||||
layout.addWidget(sw);
|
||||
setLayout(&layout);
|
||||
connect(sw, &ToggleSwitch::toggled, this, &MenuBool::valueChanged);
|
||||
sw->setFocusPolicy(Qt::NoFocus);
|
||||
}
|
||||
|
||||
void MenuBool::setValue(bool value)
|
||||
{
|
||||
sw->setState(value);
|
||||
}
|
||||
|
||||
void MenuBool::userSelected()
|
||||
{
|
||||
sw->toggle();
|
||||
}
|
||||
|
||||
void MenuBool::mouseReleaseEvent(QMouseEvent *me)
|
||||
{
|
||||
setFrameStyle(QFrame::Raised | QFrame::Panel);
|
||||
MenuItem::mouseReleaseEvent(me);
|
||||
}
|
||||
|
||||
void MenuBool::mousePressEvent(QMouseEvent *)
|
||||
{
|
||||
setFrameStyle(QFrame::Sunken | QFrame::Panel);
|
||||
}
|
||||
28
Software/PC_Application/Menu/menubool.h
Normal file
28
Software/PC_Application/Menu/menubool.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#ifndef MENUBOOL_H
|
||||
#define MENUBOOL_H
|
||||
|
||||
#include <QObject>
|
||||
#include "menuitem.h"
|
||||
#include <QVBoxLayout>
|
||||
#include "CustomWidgets/toggleswitch.h"
|
||||
|
||||
class MenuBool : public MenuItem
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MenuBool(QString name, bool defaultValue = false);
|
||||
|
||||
signals:
|
||||
void valueChanged(bool value);
|
||||
public slots:
|
||||
void setValue(bool value);
|
||||
void userSelected() override;
|
||||
protected:
|
||||
void mouseReleaseEvent(QMouseEvent *me) override;
|
||||
void mousePressEvent(QMouseEvent *me) override;
|
||||
private:
|
||||
QVBoxLayout layout;
|
||||
ToggleSwitch *sw;
|
||||
};
|
||||
|
||||
#endif // MENUBOOL_H
|
||||
17
Software/PC_Application/Menu/menuitem.cpp
Normal file
17
Software/PC_Application/Menu/menuitem.cpp
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include "menuitem.h"
|
||||
|
||||
#include <QMouseEvent>
|
||||
|
||||
MenuItem::MenuItem() : QFrame()
|
||||
{
|
||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
//setStyleSheet("*:focus {background: lightblue}");
|
||||
setFocusPolicy(Qt::StrongFocus);
|
||||
setFrameStyle(QFrame::Raised | QFrame::Panel);
|
||||
}
|
||||
|
||||
void MenuItem::mouseReleaseEvent(QMouseEvent *me)
|
||||
{
|
||||
userSelected();
|
||||
me->accept();
|
||||
}
|
||||
20
Software/PC_Application/Menu/menuitem.h
Normal file
20
Software/PC_Application/Menu/menuitem.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef MENUITEM_H
|
||||
#define MENUITEM_H
|
||||
|
||||
#include <QFrame>
|
||||
|
||||
class MenuItem : public QFrame
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MenuItem();
|
||||
|
||||
public slots:
|
||||
virtual void userSelected(){};
|
||||
|
||||
protected:
|
||||
void mouseReleaseEvent(QMouseEvent *me) override;
|
||||
|
||||
};
|
||||
|
||||
#endif // MENUITEM_H
|
||||
46
Software/PC_Application/Menu/menuvalue.cpp
Normal file
46
Software/PC_Application/Menu/menuvalue.cpp
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
#include "menuvalue.h"
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <math.h>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include "valueinput.h"
|
||||
#include <QMouseEvent>
|
||||
#include "unit.h"
|
||||
#include <QDoubleValidator>
|
||||
|
||||
using namespace std;
|
||||
|
||||
MenuValue::MenuValue(QString name, double defaultValue, QString unit, QString prefixes, int precision)
|
||||
: name(name)
|
||||
{
|
||||
if(prefixes.indexOf(' ') < 0) {
|
||||
throw runtime_error("Prefix string must contain space");
|
||||
}
|
||||
auto layout = new QVBoxLayout;
|
||||
auto label = new QLabel(name, this);
|
||||
label->setAlignment(Qt::AlignCenter);
|
||||
layout->addWidget(label);
|
||||
lvalue = new SIUnitEdit(unit, prefixes, precision);
|
||||
// pass on signal
|
||||
connect(lvalue, &SIUnitEdit::valueChanged, this, &MenuValue::valueChanged);
|
||||
layout->addWidget(lvalue);
|
||||
setValue(defaultValue);
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
void MenuValue::setValue(double value)
|
||||
{
|
||||
lvalue->setValue(value);
|
||||
}
|
||||
|
||||
void MenuValue::setValueQuiet(double value)
|
||||
{
|
||||
lvalue->setValueQuiet(value);
|
||||
}
|
||||
|
||||
void MenuValue::userSelected()
|
||||
{
|
||||
lvalue->setFocus();
|
||||
//startInputDialog();
|
||||
}
|
||||
26
Software/PC_Application/Menu/menuvalue.h
Normal file
26
Software/PC_Application/Menu/menuvalue.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef MENUVALUE_H
|
||||
#define MENUVALUE_H
|
||||
|
||||
#include "menuitem.h"
|
||||
#include <QLabel>
|
||||
#include <CustomWidgets/siunitedit.h>
|
||||
|
||||
class MenuValue : public MenuItem
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MenuValue(QString name, double defaultValue = 0.0, QString unit = QString(), QString prefixes = " ", int precision = 0);
|
||||
|
||||
signals:
|
||||
void valueChanged(double value);
|
||||
public slots:
|
||||
void setValue(double value);
|
||||
// same as setValue, except that no valueChanged signal is emitted
|
||||
void setValueQuiet(double value);
|
||||
void userSelected() override;
|
||||
private:
|
||||
SIUnitEdit *lvalue;
|
||||
const QString name;
|
||||
};
|
||||
|
||||
#endif // MENUVALUE_H
|
||||
Loading…
Add table
Add a link
Reference in a new issue