Compare commits
No commits in common. "b6fb6ca7d43348510b9c03934b8431fb5af88b82" and "a08cf6a682be32a3adbceb6d93e0c62f22ca4b28" have entirely different histories.
b6fb6ca7d4
...
a08cf6a682
2 changed files with 6 additions and 149 deletions
147
mainwindow.cpp
147
mainwindow.cpp
|
|
@ -1,10 +1,6 @@
|
|||
#include <eismultiplexer.h>
|
||||
#include <QMessageBox>
|
||||
#include <QMessageBox>
|
||||
#include <set>
|
||||
#include <QFileDialog>
|
||||
#include <QTextStream>
|
||||
#include <QFile>
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "triggerwidget.h"
|
||||
|
|
@ -12,9 +8,7 @@
|
|||
MainWindow::MainWindow(QWidget *parent):
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow),
|
||||
codeEditor(this),
|
||||
currentFilePath(""),
|
||||
isFileModified(false)
|
||||
codeEditor(this)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
enumerateDevices();
|
||||
|
|
@ -29,22 +23,7 @@ MainWindow::MainWindow(QWidget *parent):
|
|||
|
||||
ui->codeLayout->addWidget(&codeEditor);
|
||||
|
||||
// Set up keyboard shortcuts
|
||||
ui->actionOpen->setShortcut(QKeySequence::Open);
|
||||
ui->actionSave->setShortcut(QKeySequence::Save);
|
||||
ui->actionSave_As->setShortcut(QKeySequence::SaveAs);
|
||||
ui->actionQuit->setShortcut(QKeySequence::Quit);
|
||||
|
||||
connect(ui->actionQuit, &QAction::triggered, this, [this]() {close();});
|
||||
connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::onActionOpenTriggered);
|
||||
connect(ui->actionSave, &QAction::triggered, this, &MainWindow::onActionSaveTriggered);
|
||||
connect(ui->actionSave_As, &QAction::triggered, this, &MainWindow::onActionSaveAsTriggered);
|
||||
|
||||
// Connect text changed signal to track modifications
|
||||
connect(&codeEditor, &QTextEdit::textChanged, this, [this]() {
|
||||
isFileModified = true;
|
||||
updateStatus();
|
||||
});
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
|
|
@ -52,90 +31,6 @@ MainWindow::~MainWindow()
|
|||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::updateStatus()
|
||||
{
|
||||
if (!currentFilePath.isEmpty()) {
|
||||
QString status = "EisMultiplexer-Qt";
|
||||
status = QString("%1").arg(currentFilePath);
|
||||
if (isFileModified) {
|
||||
status += " - [Unsaved Changes]";
|
||||
}
|
||||
ui->statusbar->showMessage(status);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::onActionOpenTriggered()
|
||||
{
|
||||
QString filePath = QFileDialog::getOpenFileName(this, tr("Open Python Script"),
|
||||
"",
|
||||
tr("Python Files (*.py);;All Files (*)"));
|
||||
|
||||
if (filePath.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QFile file(filePath);
|
||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
QMessageBox::warning(this, tr("Error"), tr("Could not open file: %1").arg(filePath));
|
||||
return;
|
||||
}
|
||||
|
||||
QTextStream in(&file);
|
||||
QString content = in.readAll();
|
||||
file.close();
|
||||
|
||||
codeEditor.setPlainText(content);
|
||||
currentFilePath = filePath;
|
||||
isFileModified = false;
|
||||
updateStatus();
|
||||
}
|
||||
|
||||
void MainWindow::onActionSaveTriggered()
|
||||
{
|
||||
if (currentFilePath.isEmpty()) {
|
||||
onActionSaveAsTriggered();
|
||||
return;
|
||||
}
|
||||
|
||||
QFile file(currentFilePath);
|
||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||
QMessageBox::warning(this, tr("Error"), tr("Could not save file: %1").arg(currentFilePath));
|
||||
return;
|
||||
}
|
||||
|
||||
QTextStream out(&file);
|
||||
out << codeEditor.toPlainText();
|
||||
file.close();
|
||||
|
||||
isFileModified = false;
|
||||
updateStatus();
|
||||
}
|
||||
|
||||
void MainWindow::onActionSaveAsTriggered()
|
||||
{
|
||||
QString filePath = QFileDialog::getSaveFileName(this, tr("Save Python Script"),
|
||||
"",
|
||||
tr("Python Files (*.py);;All Files (*)"));
|
||||
|
||||
if (filePath.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QFile file(filePath);
|
||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||
QMessageBox::warning(this, tr("Error"), tr("Could not save file: %1").arg(filePath));
|
||||
return;
|
||||
}
|
||||
|
||||
QTextStream out(&file);
|
||||
out << codeEditor.toPlainText();
|
||||
file.close();
|
||||
|
||||
currentFilePath = filePath;
|
||||
isFileModified = false;
|
||||
updateStatus();
|
||||
}
|
||||
|
||||
void MainWindow::enumerateDevices()
|
||||
{
|
||||
size_t count = 0;
|
||||
|
|
@ -219,47 +114,17 @@ void MainWindow::enumerateDevices()
|
|||
ui->statusbar->showMessage("Ready");
|
||||
|
||||
free(serials);
|
||||
generateExample();
|
||||
}
|
||||
|
||||
void MainWindow::generateExample()
|
||||
{
|
||||
QString example =
|
||||
"# This is an example script to show you how\n# to drive eismultiplexer using the python api\n"
|
||||
"import eismultiplexer as multi\n"
|
||||
"from time import sleep\n\n"
|
||||
"# First initalize the device(s)\n";
|
||||
"import eismultiplexer\n\n"
|
||||
"from time import sleep";
|
||||
|
||||
std::set<uint16_t> serials;
|
||||
for (size_t i = 0; i < channels.size(); ++i)
|
||||
serials.insert(channels[i]->getDeviceSerial());
|
||||
|
||||
size_t i = 0;
|
||||
for (uint16_t serial : serials)
|
||||
for (const auto& channel : channels)
|
||||
{
|
||||
example.append(QString("multiplexer_") + QString::number(i) + " multi.Multiplexer(serial=" + QString::number(serial) + ")\n");
|
||||
++i;
|
||||
}
|
||||
|
||||
example.append("\nprint('\\nListing the nummber of channels per unit')\n");
|
||||
for (size_t i = 0; i < serials.size(); ++i)
|
||||
{
|
||||
QString printLine = "print(f'Found unit with serial number {" + QString::number(channels[i]->getDeviceSerial()) + "} and {multiplexer_" + QString::number(i) + ".getChannelCount()} channels')\n";
|
||||
example.append(printLine);
|
||||
}
|
||||
|
||||
example.append("\nprint('Connecting the first and second channel on the first unit')\n");
|
||||
example.append("multiplexer_0.connectChannel(multi.Channel.A)\n");
|
||||
example.append("multiplexer_0.connectChannel(multi.Channel.B)\n\n");
|
||||
example.append("print('Waiting for half a second for something to happen')\n");
|
||||
example.append("sleep(0.5)\n\n");
|
||||
example.append("print('Disconnect first channel')\n");
|
||||
example.append("multiplexer_0.disconnectChannel(multi.Channel.A)\n\n");
|
||||
example.append("print('Waiting up to 5000 milliseconds for a trigger')\n");
|
||||
example.append("multiplexer_0.setTriggerState(0, multi.TriggerState.INPUT)\n");
|
||||
example.append("multiplexer_0.waitTrigger(0, multi.TriggerState.HIGHLEVEL, 5000)\n\n");
|
||||
example.append("print('Disconnecting all channels')\n");
|
||||
example.append("multiplexer_0.clear()\n");
|
||||
codeEditor.setText(example);
|
||||
example.append(QString("eismultiplexer"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,17 +34,9 @@ public:
|
|||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
private slots:
|
||||
void onActionOpenTriggered();
|
||||
void onActionSaveTriggered();
|
||||
void onActionSaveAsTriggered();
|
||||
|
||||
private:
|
||||
void enumerateDevices();
|
||||
void generateExample();
|
||||
void updateStatus();
|
||||
QString currentFilePath;
|
||||
bool isFileModified;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue