mirror of
https://github.com/Indy970/QtHPConnect
synced 2024-12-25 21:59:15 +01:00
Update to 5.14
This commit is contained in:
parent
5bfd57be11
commit
0ede818ad6
36 changed files with 9945 additions and 160 deletions
73
.gitignore
vendored
Normal file
73
.gitignore
vendored
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
# This file is used to ignore files which are generated
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*~
|
||||||
|
*.autosave
|
||||||
|
*.a
|
||||||
|
*.core
|
||||||
|
*.moc
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.orig
|
||||||
|
*.rej
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*_pch.h.cpp
|
||||||
|
*_resource.rc
|
||||||
|
*.qm
|
||||||
|
.#*
|
||||||
|
*.*#
|
||||||
|
core
|
||||||
|
!core/
|
||||||
|
tags
|
||||||
|
.DS_Store
|
||||||
|
.directory
|
||||||
|
*.debug
|
||||||
|
Makefile*
|
||||||
|
*.prl
|
||||||
|
*.app
|
||||||
|
moc_*.cpp
|
||||||
|
ui_*.h
|
||||||
|
qrc_*.cpp
|
||||||
|
Thumbs.db
|
||||||
|
*.res
|
||||||
|
*.rc
|
||||||
|
/.qmake.cache
|
||||||
|
/.qmake.stash
|
||||||
|
|
||||||
|
# qtcreator generated files
|
||||||
|
*.pro.user*
|
||||||
|
|
||||||
|
# xemacs temporary files
|
||||||
|
*.flc
|
||||||
|
|
||||||
|
# Vim temporary files
|
||||||
|
.*.swp
|
||||||
|
|
||||||
|
# Visual Studio generated files
|
||||||
|
*.ib_pdb_index
|
||||||
|
*.idb
|
||||||
|
*.ilk
|
||||||
|
*.pdb
|
||||||
|
*.sln
|
||||||
|
*.suo
|
||||||
|
*.vcproj
|
||||||
|
*vcproj.*.*.user
|
||||||
|
*.ncb
|
||||||
|
*.sdf
|
||||||
|
*.opensdf
|
||||||
|
*.vcxproj
|
||||||
|
*vcxproj.*
|
||||||
|
|
||||||
|
# MinGW generated files
|
||||||
|
*.Debug
|
||||||
|
*.Release
|
||||||
|
|
||||||
|
# Python byte code
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
# --------
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
|
162
QtHPConnect.pro
162
QtHPConnect.pro
|
@ -1,173 +1,31 @@
|
||||||
#-------------------------------------------------
|
|
||||||
#
|
|
||||||
# Project created by QtCreator 2019-01-21T20:42:03
|
|
||||||
#
|
|
||||||
#-------------------------------------------------
|
|
||||||
|
|
||||||
QT += core gui
|
QT += core gui
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
TARGET = QtHPConnect
|
CONFIG += c++11
|
||||||
TEMPLATE = app
|
|
||||||
|
|
||||||
# The following define makes your compiler emit warnings if you use
|
# The following define makes your compiler emit warnings if you use
|
||||||
# any feature of Qt which has been marked as deprecated (the exact warnings
|
# any Qt feature that has been marked deprecated (the exact warnings
|
||||||
# depend on your compiler). Please consult the documentation of the
|
# depend on your compiler). Please consult the documentation of the
|
||||||
# deprecated API in order to know how to port your code away from it.
|
# deprecated API in order to know how to port your code away from it.
|
||||||
DEFINES += QT_DEPRECATED_WARNINGS
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
VERSION_MAJOR = HP_MAJOR_VERSION
|
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||||
VERSION_MINOR = HP_MINOR_VERSION
|
|
||||||
VERSION_PATCH = HP_MINOR_PATCH
|
|
||||||
VERSION_BUILD = HP_MINOR_BUILD
|
|
||||||
|
|
||||||
DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR"\
|
|
||||||
"VERSION_MINOR=$$VERSION_MINOR"\
|
|
||||||
"VERSION_PATCH=$$VERSION_PATCH"\
|
|
||||||
"VERSION_BUILD=$$VERSION_BUILD"
|
|
||||||
|
|
||||||
#Target version
|
|
||||||
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_PATCH}$${VERSION_BUILD}
|
|
||||||
|
|
||||||
#QMAKE_CFLAGS += -Wno-unused-parameter -Werror=shadow -Werror=write-strings -Werror=redundant-decls -Werror=format -Werror=format-nonliteral -Werror=date-time -Werror=missing-prototypes -Werror=pointer-arith -Wunreachable-code -Werror=format-security -Werror=declaration-after-statement -Werror=implicit-function-declaration -Werror=return-type -D_FORTIFY_SOURCE=2 -D__LINUX__ -fvisibility=hidden
|
|
||||||
#QMAKE_CXXFLAGS += -include cctype -include cstdlib
|
|
||||||
#QMAKE_CXXFLAGS += -Wno-unused-parameter -Werror=shadow -Werror=write-strings -Werror=redundant-decls -Werror=format -Werror=format-nonliteral -Werror=date-time -Werror=missing-prototypes -Werror=pointer-arith -Wunreachable-code -Werror=format-security -Werror=declaration-after-statement -Werror=implicit-function-declaration -Werror=return-type -D_FORTIFY_SOURCE=2 -D__LINUX__ -fvisibility=hidden
|
|
||||||
|
|
||||||
# You can also make your code fail to compile if you use deprecated APIs.
|
|
||||||
# In order to do so, uncomment the following line.
|
# In order to do so, uncomment the following line.
|
||||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
abstractdata.cpp \
|
|
||||||
cntfilesystemmodel.cpp \
|
|
||||||
datamodel.cpp \
|
|
||||||
errorhandler.cpp \
|
|
||||||
eventthread.cpp \
|
|
||||||
eventtimer.cpp \
|
|
||||||
getnumber.cpp \
|
|
||||||
hp_infodialog.cpp \
|
|
||||||
hp_mdilogwindow.cpp \
|
|
||||||
hp_mditexteditor.cpp \
|
|
||||||
hp_mdivariableedit.cpp \
|
|
||||||
hp_mdiwindow.cpp \
|
|
||||||
hp_settingsdlg.cpp \
|
|
||||||
hpdata.cpp \
|
|
||||||
# hptoolbox.cpp \
|
|
||||||
hptreeitem.cpp \
|
|
||||||
hpusb.cpp \
|
|
||||||
main.cpp \
|
main.cpp \
|
||||||
mainwindow.cpp \
|
mainwindow.cpp
|
||||||
matrixdata.cpp \
|
|
||||||
options.cpp \
|
|
||||||
texteditor.cpp \
|
|
||||||
treemodel.cpp \
|
|
||||||
variableview.cpp \
|
|
||||||
vartablemodel.cpp \
|
|
||||||
libhpcalcs/src/calc_none.c \
|
|
||||||
libhpcalcs/src/calc_prime.c \
|
|
||||||
libhpcalcs/src/error.c \
|
|
||||||
libhpcalcs/src/filetypes.c \
|
|
||||||
libhpcalcs/src/hpcables.c \
|
|
||||||
libhpcalcs/src/hpcalcs.c \
|
|
||||||
libhpcalcs/src/hpfiles.c \
|
|
||||||
libhpcalcs/src/hpopers.c \
|
|
||||||
libhpcalcs/src/link_nul.c \
|
|
||||||
libhpcalcs/src/link_prime_hid.c \
|
|
||||||
libhpcalcs/src/logging.c \
|
|
||||||
libhpcalcs/src/prime_cmd.c \
|
|
||||||
libhpcalcs/src/prime_rpkt.c \
|
|
||||||
libhpcalcs/src/prime_vpkt.c \
|
|
||||||
libhpcalcs/src/type2str.c \
|
|
||||||
libhpcalcs/src/typesprime.c \
|
|
||||||
libhpcalcs/src/utils.c
|
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
hidapi/hidapi.h \
|
mainwindow.h
|
||||||
include/abstractdata.h \
|
|
||||||
include/cntfilesystemmodel.h \
|
|
||||||
include/datamodel.h \
|
|
||||||
include/errorhandler.h \
|
|
||||||
include/eventthread.h \
|
|
||||||
include/eventtimer.h \
|
|
||||||
include/getnumber.h \
|
|
||||||
include/global.h \
|
|
||||||
include/hp_infodialog.h \
|
|
||||||
include/hp_mdilogwindow.h \
|
|
||||||
include/hp_mditexteditor.h \
|
|
||||||
include/hp_mdivariableedit.h \
|
|
||||||
include/hp_mdiwindow.h \
|
|
||||||
include/hp_settingsdlg.h \
|
|
||||||
include/hp_typedef.h \
|
|
||||||
include/hpdata.h \
|
|
||||||
include/hpinterface.h \
|
|
||||||
include/hptreeitem.h \
|
|
||||||
include/hpusb.h \
|
|
||||||
include/main.h \
|
|
||||||
include/mainwindow.h \
|
|
||||||
include/matrixdata.h \
|
|
||||||
include/options.h \
|
|
||||||
include/texteditor.h \
|
|
||||||
include/treemodel.h \
|
|
||||||
include/variableview.h \
|
|
||||||
include/vartablemodel.h \
|
|
||||||
include/version.h \
|
|
||||||
libhpcalcs/include/error.h \
|
|
||||||
libhpcalcs/include/export.h \
|
|
||||||
libhpcalcs/include/filetypes.h \
|
|
||||||
libhpcalcs/include/gettext.h \
|
|
||||||
libhpcalcs/include/hpcables.h \
|
|
||||||
libhpcalcs/include/hpcalcs.h \
|
|
||||||
libhpcalcs/include/hpfiles.h \
|
|
||||||
libhpcalcs/include/hplibs.h \
|
|
||||||
libhpcalcs/include/hpopers.h \
|
|
||||||
libhpcalcs/include/internal.h \
|
|
||||||
libhpcalcs/include/logging.h \
|
|
||||||
libhpcalcs/include/prime_cmd.h \
|
|
||||||
libhpcalcs/include/typesprime.h \
|
|
||||||
libhpcalcs/include/utils.h
|
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
mainwindow.ui \
|
mainwindow.ui
|
||||||
variableview.ui \
|
|
||||||
hp_mdiwindow.ui \
|
|
||||||
getnumber.ui \
|
|
||||||
hp_infodialog.ui \
|
|
||||||
hp_settingsdlg.ui \
|
|
||||||
options.ui
|
|
||||||
|
|
||||||
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../usr/local/lib/release/ -lhpcalcs
|
# Default rules for deployment.
|
||||||
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../usr/local/lib/debug/ -lhpcalcs
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
else:unix: LIBS +=
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
#-L$$PWD/../../../../usr/local/lib/ -lhpcalcs
|
|
||||||
|
|
||||||
INCLUDEPATH += $$PWD/../../../../usr/local/include
|
|
||||||
INCLUDEPATH += $$PWD/include
|
|
||||||
INCLUDEPATH += $$PWD/libhpcalcs/include/
|
|
||||||
INCLUDEPATH += $$PWD/hidapi/
|
|
||||||
|
|
||||||
INCLUDEPATH += /usr/include/libusb-1.0
|
|
||||||
|
|
||||||
|
|
||||||
DEPENDPATH += $$PWD/../../../../usr/local/include
|
|
||||||
|
|
||||||
RESOURCES += \
|
|
||||||
qthpconnect.qrc
|
|
||||||
|
|
||||||
DISTFILES += \
|
|
||||||
model.qmodel \
|
|
||||||
README.md \
|
|
||||||
LICENSE \
|
|
||||||
CHANGELOG.md \
|
|
||||||
NEWS \
|
|
||||||
AUTHORS \
|
|
||||||
Notes \
|
|
||||||
TODO.md
|
|
||||||
../hplp-master/libhpcalcs/tests/test_hpcalcs.c
|
|
||||||
|
|
||||||
unix|win32: LIBS += -lhidapi-libusb
|
|
||||||
|
|
||||||
unix|win32: LIBS += -lusb-1.0
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
|
|
||||||
gsdfgdsfgdsfg
|
|
||||||
dfg
|
|
||||||
dsf
|
|
||||||
gs
|
|
||||||
dfg
|
|
||||||
sdf
|
|
||||||
gsdfgsdf
|
|
21
mainwindow.h
Normal file
21
mainwindow.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QtWidgets/QMainWindow>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class MainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
};
|
||||||
|
#endif // MAINWINDOW_H
|
1180
source/abstractdata.cpp
Normal file
1180
source/abstractdata.cpp
Normal file
File diff suppressed because it is too large
Load diff
577
source/cntfilesystemmodel.cpp
Normal file
577
source/cntfilesystemmodel.cpp
Normal file
|
@ -0,0 +1,577 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <global.h>
|
||||||
|
#include "cntfilesystemmodel.h"
|
||||||
|
#include <QMimeData>
|
||||||
|
#include <QList>
|
||||||
|
#include <QStringListModel>
|
||||||
|
|
||||||
|
#include <hp_mditexteditor.h>
|
||||||
|
#include <hp_infodialog.h>
|
||||||
|
#include <hp_mdivariableedit.h>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QTextCodec>
|
||||||
|
#include <utility>
|
||||||
|
#define FILE_NUM 9
|
||||||
|
|
||||||
|
|
||||||
|
//list of file types and associated icons
|
||||||
|
//Todo fix for all file types
|
||||||
|
const QString contentFileSystemModel::filetype_list[FILE_NUM][2]={{"hpprgm",":/icons/apps_16x16.png"},
|
||||||
|
{"CAS Vars",":/icons/casFolder_16x16.png"},
|
||||||
|
{"Complex",":/icons/complex_16x16.png"},
|
||||||
|
{"hplist",":/icons/list_16x16.png"},
|
||||||
|
{"Matrices",":/icons/table_16x16.png"},
|
||||||
|
{"Notes",":/icons/note_16x16.png"},
|
||||||
|
{"hpprgm",":/icons/program_16x16.png"},
|
||||||
|
{"Real",":/icons/real_16x16.png"},
|
||||||
|
{"Variables",":/icons/varFolder_16x16.png"}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//list of data object types used by contentFileSystemModel
|
||||||
|
const hp_DataType contentFileSystemModel::func_type[FILE_TYPE]={
|
||||||
|
HP_PROG,
|
||||||
|
HP_LIST,
|
||||||
|
HP_MATRIX,
|
||||||
|
HP_NOTE,
|
||||||
|
HP_MAIN};
|
||||||
|
|
||||||
|
/*
|
||||||
|
const std::array<std::pair<hp_DataType,QString>,FILE_TYPE> contentFileSystemModel::file_type{ {0,"hpprgm"},
|
||||||
|
{1,"hplist"},
|
||||||
|
{2,"hpmat"},
|
||||||
|
{3,"hpnote"},
|
||||||
|
{4,""}};
|
||||||
|
*/
|
||||||
|
|
||||||
|
//list of file type suffixes
|
||||||
|
const QString contentFileSystemModel::file_type[FILE_TYPE]{ "hpprgm",
|
||||||
|
"hplist",
|
||||||
|
"hpmat",
|
||||||
|
"hpnote",
|
||||||
|
""};
|
||||||
|
|
||||||
|
|
||||||
|
//condstrutor
|
||||||
|
contentFileSystemModel::contentFileSystemModel(QObject * parent)
|
||||||
|
:QFileSystemModel(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get and pass on the data to be dragged
|
||||||
|
QMimeData* contentFileSystemModel::mimeData(const QModelIndexList &indexes) const
|
||||||
|
{
|
||||||
|
|
||||||
|
QMimeData *mimeDataPtr = new QMimeData();
|
||||||
|
QByteArray mydata;
|
||||||
|
QModelIndex index;
|
||||||
|
hp_DataStruct filedata;
|
||||||
|
|
||||||
|
qDebug()<<"contentFileSystemModel::mimeData";
|
||||||
|
|
||||||
|
foreach(index,indexes) {
|
||||||
|
|
||||||
|
index=indexes.first();
|
||||||
|
// qDebug()<<index.data(Qt::DisplayRole);
|
||||||
|
// QString data;
|
||||||
|
|
||||||
|
QFileInfo info = contentFileSystemModel::fileInfo(index);
|
||||||
|
QFile file(info.absoluteFilePath());
|
||||||
|
|
||||||
|
qDebug()<<info.absoluteFilePath();
|
||||||
|
|
||||||
|
if (file.open(QIODevice::ReadOnly)) {
|
||||||
|
QDataStream in(&file);
|
||||||
|
|
||||||
|
filedata=getFileType(info);
|
||||||
|
|
||||||
|
in.setByteOrder(QDataStream::LittleEndian);
|
||||||
|
qint8 c;
|
||||||
|
|
||||||
|
//read in file
|
||||||
|
in.startTransaction();
|
||||||
|
while(!in.atEnd()) {
|
||||||
|
in>>c;
|
||||||
|
mydata.append(c);
|
||||||
|
}
|
||||||
|
mimeDataPtr->setText(info.baseName());
|
||||||
|
|
||||||
|
|
||||||
|
switch (filedata.type) {
|
||||||
|
|
||||||
|
case HP_PROG:
|
||||||
|
case HP_APP:
|
||||||
|
case HP_MATRIX:
|
||||||
|
case HP_NOTE:
|
||||||
|
case HP_LIST:
|
||||||
|
case HP_VAR: {
|
||||||
|
mimeDataPtr->setData(mimetypes[filedata.type][1],mydata);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_CAS:
|
||||||
|
case HP_MAIN:
|
||||||
|
case HP_COMPLEX:
|
||||||
|
case HP_SCREEN:
|
||||||
|
case HP_REAL: {
|
||||||
|
// no action
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Allow copy to external file managers
|
||||||
|
QList<QUrl> urls;
|
||||||
|
QFileInfo info;
|
||||||
|
QUrl url;
|
||||||
|
foreach(index,indexes) {
|
||||||
|
info = contentFileSystemModel::fileInfo(index);
|
||||||
|
|
||||||
|
url = QUrl::fromLocalFile(info.absoluteFilePath());
|
||||||
|
|
||||||
|
urls.append(url);
|
||||||
|
}
|
||||||
|
mimeDataPtr->setUrls(urls);
|
||||||
|
|
||||||
|
return mimeDataPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set drop actions supported
|
||||||
|
Qt::DropActions contentFileSystemModel::supportedDropActions() const
|
||||||
|
{
|
||||||
|
return Qt::CopyAction | Qt::MoveAction| Qt::TargetMoveAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Not sure that this is neccesary. Item should control this
|
||||||
|
Qt::ItemFlags contentFileSystemModel::flags(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
Qt::ItemFlags defaultFlags = QFileSystemModel::flags(index);
|
||||||
|
|
||||||
|
if (index.isValid())
|
||||||
|
return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | defaultFlags;
|
||||||
|
else
|
||||||
|
return Qt::ItemIsDropEnabled | defaultFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Allow drop in location
|
||||||
|
bool contentFileSystemModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
|
||||||
|
qDebug()<<data->formats();
|
||||||
|
|
||||||
|
if (data->hasUrls()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data->hasText()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Process the drop action
|
||||||
|
bool contentFileSystemModel::dropMimeData(const QMimeData* md_data, Qt::DropAction action, int row,
|
||||||
|
int column, const QModelIndex &parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
qDebug()<<"contentFileSystemModel::DropMineData";
|
||||||
|
|
||||||
|
QSettings appSettings("IRGP","QtHPconnect");
|
||||||
|
QString path=appSettings.value("contentPath").toString();
|
||||||
|
|
||||||
|
QDir dir;
|
||||||
|
dir= rootDirectory();
|
||||||
|
|
||||||
|
if (!dir.exists()) {
|
||||||
|
qWarning()<<tr("Content Path Does not exist: ")<<path;
|
||||||
|
if(!dir.mkpath("."))
|
||||||
|
{
|
||||||
|
qWarning()<<tr("Path could not be created: ")<<path;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action == Qt::IgnoreAction) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check for external file drop
|
||||||
|
if (md_data->hasUrls()) {
|
||||||
|
|
||||||
|
QString name = md_data->text();
|
||||||
|
QList<QUrl> urls = md_data->urls();
|
||||||
|
QUrl url;
|
||||||
|
QString filefrom;
|
||||||
|
QString fileto;
|
||||||
|
|
||||||
|
foreach(url,urls) {
|
||||||
|
filefrom=url.toLocalFile();
|
||||||
|
QFileInfo fileinfo(filefrom);
|
||||||
|
fileto=path+"/"+url.fileName();
|
||||||
|
if(isFileType(fileinfo)) {
|
||||||
|
//consider check to limit unusual file types
|
||||||
|
QFile::copy(filefrom,fileto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//rework
|
||||||
|
QByteArray data_in;
|
||||||
|
QByteArray typeary;
|
||||||
|
QString name = md_data->text();
|
||||||
|
typeary=md_data->data("application/x-type");
|
||||||
|
int type_i=typeary[0];
|
||||||
|
hp_DataType type=static_cast<hp_DataType>(type_i);
|
||||||
|
QString type_str=getFileType(type);
|
||||||
|
name=name+"_2"+"."+type_str;
|
||||||
|
data_in=md_data->data("application/x-qabstractmodeldatalist");
|
||||||
|
QFileInfo fileinfo(path,name);
|
||||||
|
|
||||||
|
qDebug()<<data_in;
|
||||||
|
qDebug()<<fileinfo;
|
||||||
|
|
||||||
|
// QDataStream stream(&encodedData, QIODevice::ReadOnly);
|
||||||
|
|
||||||
|
if (writeFile(fileinfo,data_in)>-1)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//override to return a file object
|
||||||
|
QVariant contentFileSystemModel::data( const QModelIndex &index, int role ) const {
|
||||||
|
|
||||||
|
if( role == Qt::DecorationRole )
|
||||||
|
{
|
||||||
|
QString name = index.data().toString();
|
||||||
|
QFileInfo info = contentFileSystemModel::fileInfo(index);
|
||||||
|
//QFileInfo info(name);
|
||||||
|
|
||||||
|
if((info.isFile()&&(name==info.fileName())))
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i=0;i<FILE_NUM;i++) {
|
||||||
|
if(info.suffix() == filetype_list[i][0])
|
||||||
|
return QPixmap(filetype_list[i][1]);//I pick the icon depending on the extension
|
||||||
|
}
|
||||||
|
return QPixmap(":/icons/file_16x16.png");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QFileSystemModel::data(index, role);
|
||||||
|
}
|
||||||
|
|
||||||
|
//action if file is left clicked
|
||||||
|
void contentFileSystemModel::clickAction(QMdiArea * mdiwin, QModelIndex &index) {
|
||||||
|
openFile(mdiwin,index);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//open a file in the mdi window
|
||||||
|
bool contentFileSystemModel::openFile(QMdiArea * mdiwin, QModelIndex &index) {
|
||||||
|
|
||||||
|
QFileInfo info = contentFileSystemModel::fileInfo(index);
|
||||||
|
return openFile(mdiwin,info);
|
||||||
|
}
|
||||||
|
|
||||||
|
//open a file in the mdi window
|
||||||
|
bool contentFileSystemModel::openFile(QMdiArea * mdiwin,QFileInfo info) {
|
||||||
|
|
||||||
|
hp_mdiTextEdit * hptextedit = nullptr;
|
||||||
|
AbstractData * data=nullptr;
|
||||||
|
|
||||||
|
QString calc;
|
||||||
|
QString name;
|
||||||
|
|
||||||
|
hp_DataType type;
|
||||||
|
hp_Information hpinfo;
|
||||||
|
// hp_infoDialog * hpinfodlg;
|
||||||
|
hp_mdiVariableEdit * hpvaredit=nullptr;
|
||||||
|
|
||||||
|
data = readFile(info);
|
||||||
|
|
||||||
|
if (data!=nullptr) {
|
||||||
|
type=data->getType();
|
||||||
|
switch (type) {
|
||||||
|
case HP_NOTE:
|
||||||
|
case HP_PROG: {
|
||||||
|
if (hptextedit==nullptr)
|
||||||
|
hptextedit = new hp_mdiTextEdit(mdiwin,info, data);
|
||||||
|
if (hptextedit!=nullptr)
|
||||||
|
hptextedit ->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_CAS:
|
||||||
|
case HP_REAL:
|
||||||
|
case HP_COMPLEX:
|
||||||
|
case HP_LIST:
|
||||||
|
case HP_MATRIX: {
|
||||||
|
if (hpvaredit==nullptr) {
|
||||||
|
if (data!=nullptr) {
|
||||||
|
qDebug()<<"Opening Varedit";
|
||||||
|
hpvaredit = new hp_mdiVariableEdit(mdiwin,info,data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hpvaredit!=nullptr)
|
||||||
|
hpvaredit ->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qWarning()<<"Read file return null data";
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
qDebug()<<"ClickAction "<<info.absoluteFilePath();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//delete a file
|
||||||
|
void contentFileSystemModel::deleteFile(QModelIndex &index) {
|
||||||
|
QFileInfo fileinfo = contentFileSystemModel::fileInfo(index);
|
||||||
|
qDebug()<<"deleteFile "<<fileinfo.absoluteFilePath();
|
||||||
|
QFile file(fileinfo.absoluteFilePath());
|
||||||
|
file.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
//rename a file
|
||||||
|
void contentFileSystemModel::renameFile(QModelIndex &index, QString newName) {
|
||||||
|
QFileInfo fileinfo = contentFileSystemModel::fileInfo(index);
|
||||||
|
|
||||||
|
QFile file(fileinfo.absoluteFilePath());
|
||||||
|
QDir dir=fileinfo.absoluteDir();
|
||||||
|
QString newPath;
|
||||||
|
|
||||||
|
newPath=dir.absolutePath()+"/"+newName;
|
||||||
|
|
||||||
|
if (file.rename(newPath)) {
|
||||||
|
qDebug()<<"File rename succesfull";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"File rename failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//read a file and return the resulting data object
|
||||||
|
AbstractData * contentFileSystemModel::readFile(QFileInfo fileinfo) const {
|
||||||
|
|
||||||
|
AbstractData * data=nullptr;
|
||||||
|
hp_DataStruct filedata;
|
||||||
|
QFile file(fileinfo.absoluteFilePath());
|
||||||
|
|
||||||
|
if (file.open(QIODevice::ReadOnly),QFileDevice::AutoCloseHandle) {
|
||||||
|
QDataStream in(&file);
|
||||||
|
// QTextCodec *codec = QTextCodec::codecForName("UTF-16");
|
||||||
|
// in.setCodec(codec);
|
||||||
|
in.setByteOrder(QDataStream::LittleEndian);
|
||||||
|
|
||||||
|
filedata=getFileType(fileinfo);
|
||||||
|
|
||||||
|
switch (filedata.type) {
|
||||||
|
|
||||||
|
case HP_PROG: {
|
||||||
|
qDebug()<<"HP_PROG";
|
||||||
|
data = new Program(filedata.filename, HP_PROG, QStringLiteral(""));
|
||||||
|
data->parseData(in);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_NOTE: {
|
||||||
|
qDebug()<<"HP_NOTE";
|
||||||
|
data = new Notes(filedata.filename, HP_NOTE, QStringLiteral(""));
|
||||||
|
data->parseData(in);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_LIST: {
|
||||||
|
qDebug()<<"HP_LIST";
|
||||||
|
data = new List(filedata.filename, HP_LIST);
|
||||||
|
data->parseData(in);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_MATRIX: {
|
||||||
|
qDebug()<<"HP_MATRIX";
|
||||||
|
data = new Matrix(filedata.filename, HP_MATRIX);
|
||||||
|
data->parseData(in);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//write a file to the directory store
|
||||||
|
int contentFileSystemModel::writeFile(QFileInfo fileinfo, QByteArray data_in) const {
|
||||||
|
|
||||||
|
QFile file(fileinfo.absoluteFilePath());
|
||||||
|
|
||||||
|
if (file.open(QIODevice::ReadWrite)) {
|
||||||
|
QDataStream out(&file);
|
||||||
|
// QTextCodec *codec = QTextCodec::codecForName("UTF-8");
|
||||||
|
// out.setCodec(codec);
|
||||||
|
out.setByteOrder(QDataStream::LittleEndian);
|
||||||
|
|
||||||
|
// quint8 c;
|
||||||
|
// for (int i =0 ;i< data_in.length();i++)
|
||||||
|
// {
|
||||||
|
// c= data_in[i];
|
||||||
|
// out<<(quint8)c;
|
||||||
|
// }
|
||||||
|
// out.writeRawData(data_in,data_in.length());
|
||||||
|
qDebug()<<"Wriiting";
|
||||||
|
qDebug()<<data_in;
|
||||||
|
|
||||||
|
out<<data_in;
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//create a new folder in the contents location
|
||||||
|
bool contentFileSystemModel::createNewFolder(QString foldername) {
|
||||||
|
|
||||||
|
QSettings appSettings("IRGP","QtHPconnect");
|
||||||
|
QString path=appSettings.value("contentPath").toString();
|
||||||
|
|
||||||
|
path=path+foldername;
|
||||||
|
|
||||||
|
QDir dir(path);
|
||||||
|
|
||||||
|
if (!dir.exists()) {
|
||||||
|
if(!dir.mkpath("."))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qDebug()<<"Create new folder pressed"<<path;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//create a new program file
|
||||||
|
bool contentFileSystemModel::createNewProgram(QMdiArea * mdiwin, QString filename) {
|
||||||
|
|
||||||
|
QSettings appSettings("IRGP","QtHPconnect");
|
||||||
|
QString path=appSettings.value("contentPath").toString();
|
||||||
|
QDir dir(path);
|
||||||
|
QFileInfo fileinfo(dir,filename+"."+getFileType(HP_PROG));
|
||||||
|
|
||||||
|
qDebug()<<"Create new program pressed";
|
||||||
|
return openFile(mdiwin,fileinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
//create a new note file
|
||||||
|
bool contentFileSystemModel::createNewNote(QMdiArea * mdiwin,QString filename) {
|
||||||
|
|
||||||
|
QSettings appSettings("IRGP","QtHPconnect");
|
||||||
|
QString path=appSettings.value("contentPath").toString();
|
||||||
|
QDir dir(path);
|
||||||
|
QFileInfo fileinfo(dir,filename+"."+getFileType(HP_NOTE));
|
||||||
|
|
||||||
|
qDebug()<<"Create new program pressed";
|
||||||
|
return openFile(mdiwin,fileinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the file type
|
||||||
|
hp_DataStruct contentFileSystemModel::getFileType(QFileInfo info) const {
|
||||||
|
hp_DataStruct filedata;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
QString suffix;
|
||||||
|
hp_DataType type=HP_MAIN;
|
||||||
|
suffix=info.completeSuffix();
|
||||||
|
for (i=0;i<FILE_TYPE;i++) {
|
||||||
|
if (suffix==file_type[i])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
type=func_type[i];
|
||||||
|
if (type!=HP_MAIN) {
|
||||||
|
filedata.filename=info.completeBaseName();
|
||||||
|
filedata.type=type;
|
||||||
|
}
|
||||||
|
|
||||||
|
return filedata;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the file type
|
||||||
|
bool contentFileSystemModel::isFileType(QFileInfo info) const {
|
||||||
|
hp_DataStruct filedata;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
QString suffix;
|
||||||
|
suffix=info.completeSuffix();
|
||||||
|
for (i=0;i<FILE_TYPE;i++) {
|
||||||
|
if (suffix==file_type[i])
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the file type suffix
|
||||||
|
QString contentFileSystemModel::getFileType(hp_DataType type) const {
|
||||||
|
int i;
|
||||||
|
QString suffix=QStringLiteral("");
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case HP_PROG: {
|
||||||
|
i=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_LIST: {
|
||||||
|
i=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_MATRIX: {
|
||||||
|
i=2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_NOTE: {
|
||||||
|
i=3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: {
|
||||||
|
i=-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i>-1) {
|
||||||
|
suffix=file_type[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
//destructor
|
||||||
|
contentFileSystemModel::~contentFileSystemModel() {
|
||||||
|
qDebug()<<"contentFileSystemModel::delete";
|
||||||
|
}
|
91
source/datamodel.cpp
Normal file
91
source/datamodel.cpp
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "datamodel.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
dataModel::dataModel(QObject *parent)
|
||||||
|
:QAbstractTableModel(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int dataModel::rowCount(const QModelIndex & /*parent*/) const
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dataModel::columnCount(const QModelIndex & /*parent*/) const
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant dataModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
int row = index.row();
|
||||||
|
int col = index.column();
|
||||||
|
// // generate a log message when this method gets called
|
||||||
|
// qDebug() << QString("row %1, col%2, role %3")
|
||||||
|
// .arg(row).arg(col).arg(role);
|
||||||
|
|
||||||
|
switch(role){
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
if (row == 0 && col == 1) return QString("<--left");
|
||||||
|
if (row == 1 && col == 1) return QString("right-->");
|
||||||
|
|
||||||
|
return QString("Row%1, Column%2")
|
||||||
|
.arg(row + 1)
|
||||||
|
.arg(col +1);
|
||||||
|
break;
|
||||||
|
case Qt::FontRole:
|
||||||
|
if (row == 0 && col == 0) //change font only for cell(0,0)
|
||||||
|
{
|
||||||
|
QFont boldFont;
|
||||||
|
boldFont.setBold(true);
|
||||||
|
return boldFont;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Qt::BackgroundRole:
|
||||||
|
|
||||||
|
if (row == 1 && col == 2) //change background only for cell(1,2)
|
||||||
|
{
|
||||||
|
QBrush redBackground(Qt::red);
|
||||||
|
return redBackground;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Qt::TextAlignmentRole:
|
||||||
|
|
||||||
|
if (row == 1 && col == 1) //change text alignment only for cell(1,1)
|
||||||
|
{
|
||||||
|
return Qt::AlignRight + Qt::AlignVCenter;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Qt::CheckStateRole:
|
||||||
|
|
||||||
|
if (row == 1 && col == 0) //add a checkbox to cell(1,0)
|
||||||
|
{
|
||||||
|
return Qt::Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
dataModel::~dataModel() {
|
||||||
|
|
||||||
|
qDebug()<<"dataModel::close";
|
||||||
|
}
|
139
source/errorhandler.cpp
Normal file
139
source/errorhandler.cpp
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "errorhandler.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
errorHandler::errorHandler()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
errorHandler::errorHandler(QObject * parent)
|
||||||
|
{
|
||||||
|
pParent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString errorHandler::getLogFileName()
|
||||||
|
{
|
||||||
|
return QString("hpinterface.log");
|
||||||
|
}
|
||||||
|
|
||||||
|
int errorHandler::writeLog(QString lineToBeLogged)
|
||||||
|
{
|
||||||
|
|
||||||
|
QMutexLocker locker(&m_lineLoggerMutex);
|
||||||
|
QFile fileLog(getLogFileName());
|
||||||
|
|
||||||
|
//doRollLogsIfNeeded(static_cast<qint64>(fileLog.size() + lineToBeLogged.length()));
|
||||||
|
|
||||||
|
// Do not open in append mode but seek() to avoid warning for unseekable
|
||||||
|
// devices, note that if open is made with WriteOnly without Append, the
|
||||||
|
// file gets truncated
|
||||||
|
if (!fileLog.open(QIODevice::ReadWrite | QIODevice::Text))
|
||||||
|
{
|
||||||
|
QTextStream out(stdout);
|
||||||
|
out << "CANNOT OPEN LOG FILE: " << getLogFileName();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// seek() does nothing on sequential devices, this is in essence what QFile
|
||||||
|
// does when Append flag is set in open()
|
||||||
|
if (!fileLog.isSequential())
|
||||||
|
{
|
||||||
|
fileLog.seek(fileLog.size());
|
||||||
|
}
|
||||||
|
QDateTime time(QDateTime::currentDateTime());
|
||||||
|
|
||||||
|
QTextStream out(&fileLog);
|
||||||
|
out << time.toString("yyyy/MM/dd hh:mm:ss") << " "<< lineToBeLogged << endl;
|
||||||
|
|
||||||
|
fileLog.close();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int errorHandler::writeStatus(QString msg)
|
||||||
|
{
|
||||||
|
if (MainWindow *pb = qobject_cast<MainWindow*> (pParent))
|
||||||
|
{
|
||||||
|
pb->writeStatus( msg);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int errorHandler::writeChatter(QString msg)
|
||||||
|
{
|
||||||
|
if (MainWindow *pb = qobject_cast<MainWindow*> (pParent))
|
||||||
|
{
|
||||||
|
pb->writeChatter( msg);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int errorHandler::error(ErrLevel el, int num, QString msg, QString Data=QString())
|
||||||
|
{
|
||||||
|
switch (el) {
|
||||||
|
case L0:
|
||||||
|
writeLog("Abort: "+msg);
|
||||||
|
writeStatus("Abort: "+msg);
|
||||||
|
exit(num);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
writeLog(" "+msg+Data);
|
||||||
|
writeStatus(" "+msg);
|
||||||
|
if (Data=="")
|
||||||
|
writeChatter(" "+msg);
|
||||||
|
else
|
||||||
|
writeChatter(" "+msg+Data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int errorHandler::dump(uint8_t * data, int size)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
QString text = QString("Dump:\n");
|
||||||
|
QString texta = QString("ASCII:\n");
|
||||||
|
j=0;
|
||||||
|
text = text + QString().sprintf("%04d | ",0);
|
||||||
|
for (i=0; i< size; i++)
|
||||||
|
{
|
||||||
|
text = text + QString(" %1 ").arg(QChar(data[i]).unicode(),2,16,QChar('0'));
|
||||||
|
j++;
|
||||||
|
if (j>15) {
|
||||||
|
j=0;
|
||||||
|
text=text+"\n";
|
||||||
|
text = text + QString().sprintf("%04d | ",i+1);
|
||||||
|
}
|
||||||
|
texta = texta +" "+QChar(data[i]).unicode();
|
||||||
|
|
||||||
|
}
|
||||||
|
text = text + "\n";
|
||||||
|
texta = texta + "\n";
|
||||||
|
|
||||||
|
writeLog(text);
|
||||||
|
writeChatter(text);
|
||||||
|
writeLog(texta);
|
||||||
|
writeChatter(texta);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorHandler::~errorHandler() {
|
||||||
|
qDebug()<<"errorHandler:: close";
|
||||||
|
}
|
42
source/eventthread.cpp
Normal file
42
source/eventthread.cpp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "eventthread.h"
|
||||||
|
#include <mainwindow.h>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
EventThread::EventThread(MainWindow * parent):QThread (parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
main=parent;
|
||||||
|
if (main)
|
||||||
|
hpapi=main->getAPI();
|
||||||
|
|
||||||
|
if (hpapi==nullptr)
|
||||||
|
qDebug()<<"hpusb not started";
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventThread::run() {
|
||||||
|
|
||||||
|
qDebug()<<"Event run";
|
||||||
|
// emit startTimer();
|
||||||
|
hpapi->eventHandler();
|
||||||
|
qDebug()<<"Event end";
|
||||||
|
//exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
82
source/eventtimer.cpp
Normal file
82
source/eventtimer.cpp
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "eventtimer.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
EventTimer::EventTimer(MainWindow * main):QObject()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (main)
|
||||||
|
hpapi=main->getAPI();
|
||||||
|
|
||||||
|
if (hpapi==nullptr)
|
||||||
|
qDebug()<<"hpusb not started";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventTimer::timerAction()
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&mutex);
|
||||||
|
|
||||||
|
// qDebug()<<"In Eventhandler";
|
||||||
|
// QThread::msleep(1);
|
||||||
|
|
||||||
|
if(hpapi!=nullptr) {
|
||||||
|
hpapi->eventHandler();
|
||||||
|
}
|
||||||
|
emit tick();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventTimer::start() {
|
||||||
|
timer = new QTimer(this);
|
||||||
|
timer->setInterval(100);
|
||||||
|
// timer->callOnTimeout(SLOT(timerEvent()),Qt::AutoConnection);
|
||||||
|
timer->connect(timer, SIGNAL(timeout()), this, SLOT(timerAction()));
|
||||||
|
// timer->connect(timer, SIGNAL(timeout()), hpapi, SLOT(eventHandler()),Qt::DirectConnection);
|
||||||
|
|
||||||
|
// timer->connect(this, SIGNAL(tick()), this, SLOT(tickEvent()),Qt::AutoConnection);
|
||||||
|
|
||||||
|
timer->connect(this, SIGNAL(stop()), this, SLOT(stopTimer()));
|
||||||
|
timer->start();
|
||||||
|
qDebug()<<"EventTimer::started Timer";
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventTimer::exit() {
|
||||||
|
emit stop();
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventTimer::stopTimer() {
|
||||||
|
qDebug()<<"EventTimer::stop Timer";
|
||||||
|
timer->stop();
|
||||||
|
emit stopped();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventTimer::tickEvent() {
|
||||||
|
qDebug()<<"EventTimer::tickEvent";
|
||||||
|
}
|
||||||
|
|
||||||
|
EventTimer::~EventTimer()
|
||||||
|
{
|
||||||
|
stopTimer();
|
||||||
|
if (timer!=nullptr) {
|
||||||
|
delete timer;
|
||||||
|
timer=nullptr;
|
||||||
|
}
|
||||||
|
qDebug()<<"delete EventTimer";
|
||||||
|
}
|
33
source/getnumber.cpp
Normal file
33
source/getnumber.cpp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "getnumber.h"
|
||||||
|
#include "ui_getnumber.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
getNumber::getNumber(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::getNumber)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
getNumber::~getNumber()
|
||||||
|
{
|
||||||
|
// qDebug()<<"Entering ~getNumber()";
|
||||||
|
delete ui;
|
||||||
|
}
|
91
source/getnumber.ui
Normal file
91
source/getnumber.ui
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>getNumber</class>
|
||||||
|
<widget class="QDialog" name="getNumber">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>427</width>
|
||||||
|
<height>118</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>411</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>88</width>
|
||||||
|
<height>34</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Test</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>getNumber</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>getNumber</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
36
source/hp_infodialog.cpp
Normal file
36
source/hp_infodialog.cpp
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hp_infodialog.h"
|
||||||
|
#include "ui_hp_infodialog.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
hp_infoDialog::hp_infoDialog(QWidget *parent, hp_Information info) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::hp_infoDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
ui->serialnum->setText(info.serialnum);
|
||||||
|
ui->appver->setText(info.appver);
|
||||||
|
ui->oppver->setText(info.osver);
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_infoDialog::~hp_infoDialog()
|
||||||
|
{
|
||||||
|
// qDebug()<<"Entering ~hp_infoDialog()";
|
||||||
|
delete ui;
|
||||||
|
}
|
125
source/hp_infodialog.ui
Normal file
125
source/hp_infodialog.ui
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>hp_infoDialog</class>
|
||||||
|
<widget class="QDialog" name="hp_infoDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>411</width>
|
||||||
|
<height>143</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>HP Information</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<property name="formAlignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="labelapp">
|
||||||
|
<property name="text">
|
||||||
|
<string>Application version:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="appver">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="labelopp">
|
||||||
|
<property name="text">
|
||||||
|
<string>Operational system version:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="oppver">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="labelser">
|
||||||
|
<property name="text">
|
||||||
|
<string>Serial number:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="serialnum">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>hp_infoDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>hp_infoDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
50
source/hp_mdilogwindow.cpp
Normal file
50
source/hp_mdilogwindow.cpp
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hp_mdilogwindow.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
hp_MdiLogWindow::hp_MdiLogWindow(QWidget * parent)
|
||||||
|
:hp_MdiWindow(parent)
|
||||||
|
{
|
||||||
|
setMinimumSize(200,200);
|
||||||
|
setMaximumSize(1000,1000);
|
||||||
|
setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
|
||||||
|
setup();
|
||||||
|
resize(500,400);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_MdiLogWindow::setup() {
|
||||||
|
|
||||||
|
textEdit = new QTextEdit(this);
|
||||||
|
setWidget(textEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextEdit * hp_MdiLogWindow::getEditor() {
|
||||||
|
return textEdit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_MdiLogWindow::show() {
|
||||||
|
textEdit->show();
|
||||||
|
hp_MdiWindow::show();
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_MdiLogWindow::~hp_MdiLogWindow() {
|
||||||
|
|
||||||
|
qDebug()<<"Entering ~hpmdiLogWindow()";
|
||||||
|
|
||||||
|
}
|
202
source/hp_mditexteditor.cpp
Normal file
202
source/hp_mditexteditor.cpp
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <hp_mditexteditor.h>
|
||||||
|
#include <hp_mdiwindow.h>
|
||||||
|
#include <hptreeitem.h>
|
||||||
|
#include <hpdata.h>
|
||||||
|
#include <abstractdata.h>
|
||||||
|
#include <QBoxLayout>
|
||||||
|
#include <QToolBar>
|
||||||
|
#include <QToolButton>
|
||||||
|
|
||||||
|
//Called by the calculator Window
|
||||||
|
hp_mdiTextEdit::hp_mdiTextEdit(QWidget * parent,hpTreeItem * treeItem, AbstractData * calcData)
|
||||||
|
:hp_MdiWindow(parent)
|
||||||
|
{
|
||||||
|
setMinimumSize(200,200);
|
||||||
|
setMaximumSize(1000,1000);
|
||||||
|
setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
|
||||||
|
|
||||||
|
qDebug()<<"hp_mdiTextEdit::hp_mdiTextEdit 1";
|
||||||
|
hptreeitem=treeItem;
|
||||||
|
content=false;
|
||||||
|
data = calcData;
|
||||||
|
|
||||||
|
filename=treeItem->getFileName();
|
||||||
|
calculator=treeItem->getCalculatorName();
|
||||||
|
type=treeItem->getType();
|
||||||
|
|
||||||
|
setup();
|
||||||
|
setWindowTitle(calculator+": "+filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Called by the content window
|
||||||
|
hp_mdiTextEdit::hp_mdiTextEdit(QWidget * parent, QFileInfo filedata, AbstractData * calcData)
|
||||||
|
:hp_MdiWindow (parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
qDebug()<<"hp_mdiTextEdit::hp_mdiTextEdit 2";
|
||||||
|
setMinimumSize(200,200);
|
||||||
|
setMaximumSize(1000,1000);
|
||||||
|
// setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
|
||||||
|
calculator=QStringLiteral("Content: ");
|
||||||
|
content=true;
|
||||||
|
hptreeitem=nullptr;
|
||||||
|
data = calcData;
|
||||||
|
filename=filedata.fileName();
|
||||||
|
file=filedata;
|
||||||
|
type=calcData->getType();
|
||||||
|
setup();
|
||||||
|
setWindowTitle(calculator+filename);
|
||||||
|
resize(450,350);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_mdiTextEdit::setup() {
|
||||||
|
|
||||||
|
QString text;
|
||||||
|
textEdit = new textEditor(this);
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
|
||||||
|
qDebug()<<data->getName();
|
||||||
|
qDebug()<<data->getType();
|
||||||
|
|
||||||
|
if (data->getType()==HP_NOTE) {
|
||||||
|
Notes *note;
|
||||||
|
note=static_cast<Notes *>(data);
|
||||||
|
text=note->getNote();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data->getType()==HP_PROG) {
|
||||||
|
Program *prog;
|
||||||
|
prog=static_cast<Program *>(data);
|
||||||
|
text=prog->getProg();
|
||||||
|
textEdit->setDocumentTitle(prog->getName());
|
||||||
|
}
|
||||||
|
qDebug()<<text;
|
||||||
|
textEdit->setPlainText(text);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"hp_mdiTextEdit::setup - Data Null";
|
||||||
|
}
|
||||||
|
|
||||||
|
QIcon save(":/icons/save_22x22.png");
|
||||||
|
QAction * actionSave= new QAction(save,"Save",this);
|
||||||
|
|
||||||
|
QWidget * top = new QWidget();
|
||||||
|
QBoxLayout * layout = new QVBoxLayout();
|
||||||
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
layout->setSpacing(0);
|
||||||
|
top->setLayout(layout);
|
||||||
|
|
||||||
|
QToolBar * toolbar = new QToolBar("Save");
|
||||||
|
toolbar->addAction(actionSave);
|
||||||
|
|
||||||
|
QToolButton *saveButton=new QToolButton();
|
||||||
|
QMenu * menu = new QMenu(saveButton);
|
||||||
|
menu->addAction(actionSave);
|
||||||
|
layout->setMenuBar(menu);
|
||||||
|
// layout->addWidget(toolbar);
|
||||||
|
// QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
|
// sizePolicy1.setHorizontalStretch(0);
|
||||||
|
// sizePolicy1.setVerticalStretch(0);
|
||||||
|
// sizePolicy1.setHeightForWidth(textEdit->sizePolicy().hasHeightForWidth());
|
||||||
|
// textEdit->setSizePolicy(sizePolicy1);
|
||||||
|
// layout->setSizeConstraint(QLayout::SetNoConstraint);
|
||||||
|
|
||||||
|
layout->addWidget(textEdit);
|
||||||
|
setWidget(top);
|
||||||
|
|
||||||
|
connect(actionSave,SIGNAL(triggered()),this,SLOT(eventSave()));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_mdiTextEdit::eventSave(){
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_mdiTextEdit::save(){
|
||||||
|
|
||||||
|
if(content)
|
||||||
|
return textEdit->save(file);
|
||||||
|
else {
|
||||||
|
return textEdit->save(calculator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_mdiTextEdit::saveAs(){
|
||||||
|
|
||||||
|
if(content)
|
||||||
|
return textEdit->saveAs(file);
|
||||||
|
else {
|
||||||
|
return textEdit->saveAs(calculator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_mdiTextEdit::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (maybeSave()) {
|
||||||
|
event->accept();
|
||||||
|
} else {
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
QMdiSubWindow::closeEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_mdiTextEdit::maybeSave()
|
||||||
|
{
|
||||||
|
if (!textEdit->document()->isModified())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
const QMessageBox::StandardButton ret
|
||||||
|
= QMessageBox::warning(this, tr("MDI"),
|
||||||
|
tr("'%1' has been modified.\n"
|
||||||
|
"Do you want to save your changes?")
|
||||||
|
.arg(file.fileName()),
|
||||||
|
QMessageBox::Save | QMessageBox::Discard
|
||||||
|
| QMessageBox::Cancel);
|
||||||
|
switch (ret) {
|
||||||
|
case QMessageBox::Save:
|
||||||
|
return textEdit->save(file);
|
||||||
|
case QMessageBox::Cancel:
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_mdiTextEdit::show() {
|
||||||
|
|
||||||
|
if (textEdit)
|
||||||
|
textEdit->show();
|
||||||
|
QMdiSubWindow::show();
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_mdiTextEdit::~hp_mdiTextEdit() {
|
||||||
|
|
||||||
|
qDebug()<<"Entering ~hpmdiTextEdit()";
|
||||||
|
if (textEdit!=nullptr)
|
||||||
|
delete textEdit;
|
||||||
|
|
||||||
|
}
|
238
source/hp_mdivariableedit.cpp
Normal file
238
source/hp_mdivariableedit.cpp
Normal file
|
@ -0,0 +1,238 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QBoxLayout>
|
||||||
|
#include <QToolBar>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include "hp_mdivariableedit.h"
|
||||||
|
#include "hptreeitem.h"
|
||||||
|
|
||||||
|
hp_mdiVariableEdit::hp_mdiVariableEdit(QWidget *parent,
|
||||||
|
hpTreeItem * treeItem,
|
||||||
|
hpCalcData * dataStore)
|
||||||
|
: hp_MdiWindow(parent)
|
||||||
|
{
|
||||||
|
setMinimumSize(200,200);
|
||||||
|
setMaximumSize(1000,1000);
|
||||||
|
setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
|
||||||
|
|
||||||
|
hptreeitem=treeItem;
|
||||||
|
hpcalc = dataStore;
|
||||||
|
filename = QStringLiteral("NULL");
|
||||||
|
|
||||||
|
if (hpcalc!=nullptr) {
|
||||||
|
calculator=hpcalc->getCalculatorName();
|
||||||
|
|
||||||
|
if (treeItem!=nullptr) {
|
||||||
|
filename=treeItem->getFileName();
|
||||||
|
type=treeItem->getType();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qWarning()<<"hpcalc is null";
|
||||||
|
}
|
||||||
|
data=hpcalc->getData(filename,type);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qWarning()<<"hpcalc is null";
|
||||||
|
}
|
||||||
|
content=false;
|
||||||
|
setup();
|
||||||
|
|
||||||
|
setWindowTitle(calculator+": "+filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_mdiVariableEdit::hp_mdiVariableEdit(QWidget *parent,
|
||||||
|
QFileInfo fileinfo,
|
||||||
|
AbstractData * data_in)
|
||||||
|
: hp_MdiWindow(parent)
|
||||||
|
{
|
||||||
|
setMinimumSize(200,200);
|
||||||
|
setMaximumSize(1000,1000);
|
||||||
|
setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
|
||||||
|
|
||||||
|
calculator=QStringLiteral("Content: ");
|
||||||
|
content=true;
|
||||||
|
hptreeitem=nullptr;
|
||||||
|
hpcalc = nullptr;
|
||||||
|
file=fileinfo;
|
||||||
|
filename=fileinfo.fileName();
|
||||||
|
|
||||||
|
data = data_in;
|
||||||
|
|
||||||
|
if (data!=nullptr)
|
||||||
|
type=data->getType();
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
|
setWindowTitle(calculator+filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_mdiVariableEdit::setup() {
|
||||||
|
|
||||||
|
if (data!=nullptr) {
|
||||||
|
varmodel = new varTableModel(this,data,filename,type);
|
||||||
|
tableView = new QTableView(this);
|
||||||
|
tableView->setModel(varmodel);
|
||||||
|
|
||||||
|
QIcon save(":/icons/save_22x22.png");
|
||||||
|
QAction * actionSave= new QAction(save,"Save",this);
|
||||||
|
QWidget * top = new QWidget();
|
||||||
|
QBoxLayout * layout = new QVBoxLayout();
|
||||||
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
layout->setSpacing(0);
|
||||||
|
top->setLayout(layout);
|
||||||
|
QToolBar * toolbar = new QToolBar("Save");
|
||||||
|
toolbar->addAction(actionSave);
|
||||||
|
|
||||||
|
QToolButton *saveButton=new QToolButton();
|
||||||
|
QMenu * menu = new QMenu(saveButton);
|
||||||
|
menu->addAction(actionSave);
|
||||||
|
layout->setMenuBar(menu);
|
||||||
|
layout->addWidget(tableView);
|
||||||
|
setWidget(top);
|
||||||
|
|
||||||
|
connect(actionSave,SIGNAL(triggered()),this,SLOT(eventSave()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_mdiVariableEdit::show() {
|
||||||
|
if(tableView!=nullptr)
|
||||||
|
tableView->show();
|
||||||
|
else {
|
||||||
|
qWarning()<<"hp_mdiVariableEdit::show tableView null";
|
||||||
|
}
|
||||||
|
hp_MdiWindow::show();
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_mdiVariableEdit::eventSave(){
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_mdiVariableEdit::save(){
|
||||||
|
|
||||||
|
if (content==true) {
|
||||||
|
return saveFile(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_mdiVariableEdit::saveAs(){
|
||||||
|
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
|
||||||
|
file.absoluteFilePath());
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (content==true) {
|
||||||
|
QFileInfo fileinfo(fileName);
|
||||||
|
return saveFile(fileinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_mdiVariableEdit::saveFile(const QFileInfo fileinfo)
|
||||||
|
{
|
||||||
|
QFile file(fileinfo.absoluteFilePath());
|
||||||
|
if (!file.open(QFile::ReadWrite)) {
|
||||||
|
|
||||||
|
QMessageBox::warning(this, tr("MDI"),
|
||||||
|
tr("Cannot write file %1:\n%2.")
|
||||||
|
.arg(fileinfo.canonicalPath(), file.errorString()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug()<<"Write file";
|
||||||
|
|
||||||
|
//Show busy cursor
|
||||||
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
|
|
||||||
|
QDataStream ds(&file);
|
||||||
|
|
||||||
|
ds.setByteOrder(QDataStream::LittleEndian);
|
||||||
|
varmodel->getData(ds);
|
||||||
|
|
||||||
|
|
||||||
|
//reset busy cursor
|
||||||
|
QApplication::restoreOverrideCursor();
|
||||||
|
varmodel->resetModified();
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool hp_mdiVariableEdit::maybeSave()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (varmodel==nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!varmodel->isModified()) {
|
||||||
|
qDebug()<<"Var not modified";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (content==false) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QMessageBox::StandardButton ret
|
||||||
|
= QMessageBox::warning(this, tr("MDI"),
|
||||||
|
tr("'%1' has been modified.\n"
|
||||||
|
"Do you want to save your changes?")
|
||||||
|
.arg(file.fileName()),
|
||||||
|
QMessageBox::Save | QMessageBox::Discard
|
||||||
|
| QMessageBox::Cancel);
|
||||||
|
switch (ret) {
|
||||||
|
case QMessageBox::Save:
|
||||||
|
return saveFile(file);
|
||||||
|
case QMessageBox::Cancel:
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void hp_mdiVariableEdit::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
|
||||||
|
qDebug()<<"hp_mdiVariableEdit::closeEvent";
|
||||||
|
|
||||||
|
if (maybeSave()) {
|
||||||
|
event->accept();
|
||||||
|
} else {
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
QMdiSubWindow::closeEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_mdiVariableEdit::~hp_mdiVariableEdit() {
|
||||||
|
|
||||||
|
qDebug()<<"Entering ~hpmdiVariableEdit()";
|
||||||
|
|
||||||
|
if (varmodel!=nullptr)
|
||||||
|
delete varmodel;
|
||||||
|
}
|
64
source/hp_mdiwindow.cpp
Normal file
64
source/hp_mdiwindow.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hp_mdiwindow.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QToolBar>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QBoxLayout>
|
||||||
|
|
||||||
|
hp_MdiWindow::hp_MdiWindow(QWidget * parent)
|
||||||
|
:QMdiSubWindow(parent)
|
||||||
|
{
|
||||||
|
// setMinimumSize(500,400);
|
||||||
|
// setMaximumSize(1000,1000);
|
||||||
|
setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_MdiWindow::setup() {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_MdiWindow::eventSave() {
|
||||||
|
qDebug()<<"Save pressed";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_MdiWindow::save() {
|
||||||
|
|
||||||
|
qDebug()<<"hp_MdiWindow::save";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hp_MdiWindow::saveAs() {
|
||||||
|
|
||||||
|
qDebug()<<"hp_MdiWindow::saveas";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_MdiWindow::show() {
|
||||||
|
|
||||||
|
QMdiSubWindow::show();
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_MdiWindow::~hp_MdiWindow() {
|
||||||
|
|
||||||
|
qDebug()<<"Entering ~hpmdiWindow()";
|
||||||
|
|
||||||
|
}
|
58
source/hp_mdiwindow.ui
Normal file
58
source/hp_mdiwindow.ui
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>hp_MdiWindow</class>
|
||||||
|
<widget class="QMainWindow" name="hp_MdiWindow">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>575</width>
|
||||||
|
<height>320</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>400</width>
|
||||||
|
<height>200</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>LogWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTextEdit" name="textEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolBar" name="toolBar">
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>toolBar</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<addaction name="actionSave"/>
|
||||||
|
</widget>
|
||||||
|
<action name="actionSave">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/save_22x22.png</normaloff>:/icons/save_22x22.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<resources>
|
||||||
|
<include location="qthpconnect.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
125
source/hp_settingsdlg.cpp
Normal file
125
source/hp_settingsdlg.cpp
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hp_settingsdlg.h"
|
||||||
|
#include "ui_hp_settingsdlg.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
|
||||||
|
hp_SettingsDlg::hp_SettingsDlg(QWidget *parent, hp_Settings * hpset) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::hp_SettingsDlg)
|
||||||
|
{
|
||||||
|
if (hpset) {
|
||||||
|
dlgset=*hpset;
|
||||||
|
retsettings=hpset;
|
||||||
|
}
|
||||||
|
ui->setupUi(this);
|
||||||
|
setupSettings();
|
||||||
|
connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(on_clicked(QAbstractButton*)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_SettingsDlg::setupSettings() {
|
||||||
|
ui->cb_angle->setCurrentIndex(dlgset.angle_measure);
|
||||||
|
ui->cb_format->setCurrentIndex(dlgset.number_format);
|
||||||
|
ui->cb_precision->setCurrentIndex(dlgset.precision);
|
||||||
|
ui->cb_grouping->setCurrentIndex(dlgset.digit_grouping);
|
||||||
|
ui->cb_entry->setCurrentIndex(dlgset.entry);
|
||||||
|
ui->cb_integers->setCurrentIndex(dlgset.integers);
|
||||||
|
ui->cb_complex->setCurrentIndex(dlgset.complex);
|
||||||
|
ui->cb_language->setCurrentIndex(dlgset.language);
|
||||||
|
ui->cb_font->setCurrentIndex(dlgset.font_size);
|
||||||
|
ui->cb_theme->setCurrentIndex(dlgset.theme);
|
||||||
|
|
||||||
|
ui->le_integer->setText(QString().sprintf("%d",dlgset.bits));
|
||||||
|
|
||||||
|
if (dlgset.textbook)
|
||||||
|
ui->ch_textbook->setCheckState(Qt::Checked);
|
||||||
|
else
|
||||||
|
ui->ch_textbook->setCheckState(Qt::Unchecked);
|
||||||
|
|
||||||
|
if (dlgset.menu)
|
||||||
|
ui->ch_menu->setCheckState(Qt::Checked);
|
||||||
|
else
|
||||||
|
ui->ch_menu->setCheckState(Qt::Unchecked);
|
||||||
|
|
||||||
|
if (dlgset.signed_int)
|
||||||
|
ui->ch_signed->setCheckState(Qt::Checked);
|
||||||
|
else
|
||||||
|
ui->ch_signed->setCheckState(Qt::Unchecked);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_SettingsDlg::putSettings() {
|
||||||
|
dlgset.angle_measure=ui->cb_angle->currentIndex();
|
||||||
|
dlgset.number_format=ui->cb_format->currentIndex();
|
||||||
|
dlgset.precision=ui->cb_precision->currentIndex();
|
||||||
|
dlgset.digit_grouping= ui->cb_grouping->currentIndex();
|
||||||
|
dlgset.entry=ui->cb_entry->currentIndex();
|
||||||
|
dlgset.integers=ui->cb_integers->currentIndex();
|
||||||
|
dlgset.complex=ui->cb_complex->currentIndex();
|
||||||
|
dlgset.language=ui->cb_language->currentIndex();
|
||||||
|
dlgset.font_size=ui->cb_font->currentIndex();
|
||||||
|
dlgset.theme=ui->cb_theme->currentIndex();
|
||||||
|
|
||||||
|
dlgset.bits=ui->le_integer->text().toInt();
|
||||||
|
|
||||||
|
if (ui->ch_menu->checkState()==Qt::Checked)
|
||||||
|
dlgset.menu=true;
|
||||||
|
else
|
||||||
|
dlgset.menu=false;
|
||||||
|
|
||||||
|
if (ui->ch_textbook->checkState()==Qt::Checked)
|
||||||
|
dlgset.textbook=true;
|
||||||
|
else
|
||||||
|
dlgset.textbook=false;
|
||||||
|
|
||||||
|
if (ui->ch_signed->checkState()==Qt::Checked)
|
||||||
|
dlgset.signed_int=true;
|
||||||
|
else
|
||||||
|
dlgset.signed_int=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_SettingsDlg::resetSettings() {
|
||||||
|
hp_Settings newset;
|
||||||
|
dlgset = newset;
|
||||||
|
setupSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void hp_SettingsDlg::on_clicked(QAbstractButton * button) {
|
||||||
|
|
||||||
|
if(button==(QAbstractButton*) ui->buttonBox->button(QDialogButtonBox::Reset) ){
|
||||||
|
resetSettings();
|
||||||
|
}
|
||||||
|
if(button==(QAbstractButton*) ui->buttonBox->button(QDialogButtonBox::Ok) ){
|
||||||
|
putSettings();
|
||||||
|
if (retsettings) {
|
||||||
|
*retsettings=dlgset;
|
||||||
|
}
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
if(button==(QAbstractButton*) ui->buttonBox->button(QDialogButtonBox::Cancel) ){
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_SettingsDlg::~hp_SettingsDlg()
|
||||||
|
{
|
||||||
|
qDebug()<<"delete hp_SettingsDlf";
|
||||||
|
delete ui;
|
||||||
|
}
|
720
source/hp_settingsdlg.ui
Normal file
720
source/hp_settingsdlg.ui
Normal file
|
@ -0,0 +1,720 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>hp_SettingsDlg</class>
|
||||||
|
<widget class="QDialog" name="hp_SettingsDlg">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>415</width>
|
||||||
|
<height>455</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::StrongFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Settings</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="hpSettings">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Home Settings</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>17</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Angle Measure:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_angle">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>Radians</string>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Radians</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Degrees</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Gradians</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="ch_signed">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>310</x>
|
||||||
|
<y>150</y>
|
||||||
|
<width>41</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>±:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_format">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>Standard</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Standard</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Fixed</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Scientific</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Engineering</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Floating</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Rounded</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_grouping">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>81</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>123,456.789</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123,456.789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123'456.789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123 456.789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123456.789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123.456,789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123'456,789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123 456,789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123"456.789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>123456,789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1234,5678.901</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1,23,456.789</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Number Format:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Digit Grouping:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_entry">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>112</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>Textbook</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Textbook</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Algebraic</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>RPN</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>111</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Entry:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_integers">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>144</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>Binary</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Binary</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Octal</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Decimal</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Hex</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>143</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Integers:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>175</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Complex:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_complex">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>176</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>a+b*i</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>a+b*i</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>(a,b)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_language">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>208</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>Deutsch</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Deutsch</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>English</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Espanol</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Francais</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Nederlands</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Portugues</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>New Item</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>New Item</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>207</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Language:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>239</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Font Size:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_font">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>240</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>Small Font</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Small Font</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Medium Font</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Large Font</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="ch_textbook">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>8</x>
|
||||||
|
<y>277</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Textbook Display:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="ch_menu">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>151</x>
|
||||||
|
<y>277</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Menu Display:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_theme">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>311</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>Light</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Light</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dark</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_17">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>310</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::RightToLeft</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Color Theme:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="cb_precision">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>270</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>51</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>3</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>4</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>5</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>6</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>7</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>8</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>9</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>10</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>11</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="le_integer">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>266</x>
|
||||||
|
<y>144</y>
|
||||||
|
<width>41</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="inputMethodHints">
|
||||||
|
<set>Qt::ImhDigitsOnly</set>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>32</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>hp_SettingsDlg</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>hp_SettingsDlg</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
438
source/hpdata.cpp
Normal file
438
source/hpdata.cpp
Normal file
|
@ -0,0 +1,438 @@
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// This class acts as a data store for the interface and calls for data as required
|
||||||
|
//
|
||||||
|
#include "hpdata.h"
|
||||||
|
#include "global.h"
|
||||||
|
#include "errorhandler.h"
|
||||||
|
#include "abstractdata.h"
|
||||||
|
#include "hp_typedef.h"
|
||||||
|
|
||||||
|
const QString hpCalcData::func_list[FUNC_NUM][2]={{"Application Library",":/icons/apps_32x32.png"},
|
||||||
|
{"CAS Vars",":/icons/casFolder_32x32.png"},
|
||||||
|
{"Real",":/icons/real_32x32.png"},
|
||||||
|
{"Complex",":/icons/complex_32x32.png"},
|
||||||
|
{"Lists",":/icons/list_32x32.png"},
|
||||||
|
{"Matrices",":/icons/table_32x32.png"},
|
||||||
|
{"Notes",":/icons/note_32x32.png"},
|
||||||
|
{"Programs",":/icons/program_32x32.png"},
|
||||||
|
{"Variables",":/icons/varFolder_32x32.png"}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const hp_DataType hpCalcData::func_type[FUNC_NUM]={HP_APP,
|
||||||
|
HP_CAS,
|
||||||
|
HP_REAL,
|
||||||
|
HP_COMPLEX,
|
||||||
|
HP_LIST,
|
||||||
|
HP_MATRIX,
|
||||||
|
HP_NOTE,
|
||||||
|
HP_PROG,
|
||||||
|
HP_VAR
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//constructor
|
||||||
|
hpCalcData::hpCalcData(QString name, hpusb * handle)
|
||||||
|
:QObject()
|
||||||
|
{
|
||||||
|
hp_api = handle;
|
||||||
|
lData.clear();
|
||||||
|
calculatorName=name;
|
||||||
|
|
||||||
|
//open usb port and store the handle
|
||||||
|
if (hp_api) {
|
||||||
|
hp_handle.calc=this;
|
||||||
|
hp_api->hp_open(getHandle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the interface class
|
||||||
|
hp_Handle * hpCalcData::getHandle() {
|
||||||
|
hp_handle.calc=this;
|
||||||
|
return &hp_handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the interface class
|
||||||
|
hpusb * hpCalcData::getAPI() {
|
||||||
|
return hp_api;
|
||||||
|
}
|
||||||
|
|
||||||
|
//data managment
|
||||||
|
hp_Information hpCalcData::getInfo() {
|
||||||
|
|
||||||
|
return hp_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
//get Name
|
||||||
|
QString hpCalcData::getName() {
|
||||||
|
|
||||||
|
return hp_info.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//get Calculator Name
|
||||||
|
QString hpCalcData::getCalculatorName() {
|
||||||
|
|
||||||
|
return calculatorName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//get Settings
|
||||||
|
hp_Settings hpCalcData::getSettings() {
|
||||||
|
|
||||||
|
return hp_homesettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add a new object to the list
|
||||||
|
void hpCalcData::addData(AbstractData * data) {
|
||||||
|
lData.append(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpCalcData::deleteData(AbstractData * data) {
|
||||||
|
// lData.erase();
|
||||||
|
if (data!=nullptr) {
|
||||||
|
QString name=data->getName();
|
||||||
|
hp_DataType type=data->getType();
|
||||||
|
QList<AbstractData *>::iterator i;
|
||||||
|
i=findData(name,type);
|
||||||
|
|
||||||
|
lData.erase(i);
|
||||||
|
delete data;
|
||||||
|
qDebug()<<"hpCalcData::deleteData - Object Deleted";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"hpCalcData::deleteData - Object not deleted";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//returns position of entry in list or returns 0;
|
||||||
|
QList<AbstractData *>::iterator hpCalcData::findData(QString name, hp_DataType dataType) {
|
||||||
|
|
||||||
|
QList<AbstractData *>::iterator i;
|
||||||
|
AbstractData * ldata;
|
||||||
|
|
||||||
|
i = lData.begin();
|
||||||
|
while (i!= lData.end()) {
|
||||||
|
ldata=*i;
|
||||||
|
if (ldata->equivalent(name,dataType)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//returns position of entry in list or returns 0;
|
||||||
|
AbstractData * hpCalcData::getData(QString name, hp_DataType dataType) {
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < lData.size(); ++i) {
|
||||||
|
if (lData.at(i)->equivalent(name,dataType)) {
|
||||||
|
|
||||||
|
qDebug()<<"hpCalcData::Data found"<<name<<" "<<dataType;
|
||||||
|
return lData.at(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug()<<"hpCalcData::No data found"<<name<<" "<<dataType;;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractData * hpCalcData::dataAt(int i) {
|
||||||
|
return lData.at(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int hpCalcData::dataCount() {
|
||||||
|
return lData.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpCalcData::refresh() {
|
||||||
|
readInfo();
|
||||||
|
readSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
//read Settings via usb
|
||||||
|
void hpCalcData::readSettings() {
|
||||||
|
|
||||||
|
hpusb * api;
|
||||||
|
hp_Handle * handle;
|
||||||
|
hp_Settings hpset;
|
||||||
|
|
||||||
|
errlog("hpCalcData::readSettings: -Reading Settings");
|
||||||
|
qDebug()<<"Reading Settings";
|
||||||
|
api=getAPI();
|
||||||
|
handle=getHandle();
|
||||||
|
|
||||||
|
if (api) {
|
||||||
|
if(handle) {
|
||||||
|
qDebug()<<QString().sprintf("%s %p",__FUNCTION__,handle->usbhandle);
|
||||||
|
if (api) {
|
||||||
|
api->get_settings(handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errlog("hpCalcData::readSettings Handle null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errlog("hpCalcData::readSettings API null");
|
||||||
|
}
|
||||||
|
// hp_homesettings=hpset;
|
||||||
|
|
||||||
|
// hp_Change change;
|
||||||
|
// change.dataChange=HP_MAIN;
|
||||||
|
// emit dataChanged(change);
|
||||||
|
}
|
||||||
|
|
||||||
|
//read Settings via usb
|
||||||
|
void hpCalcData::readScreen() {
|
||||||
|
|
||||||
|
hpusb * api;
|
||||||
|
hp_Handle * handle;
|
||||||
|
hp_Settings hpset;
|
||||||
|
|
||||||
|
errlog("Reading Screen");
|
||||||
|
|
||||||
|
api=getAPI();
|
||||||
|
handle=getHandle();
|
||||||
|
|
||||||
|
QByteArray imageData;
|
||||||
|
|
||||||
|
if (api) {
|
||||||
|
if(handle) {
|
||||||
|
qDebug()<<QString().sprintf("%s %p",__FUNCTION__,handle->usbhandle);
|
||||||
|
if (api) {
|
||||||
|
api->get_screen_shot(handle);
|
||||||
|
// if (screenShot!=nullptr) {
|
||||||
|
// delete screenShot;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// screenShot = new QPixmap();
|
||||||
|
// screenShot->loadFromData(imageData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// emit emitChange(HP_SCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
//recieve Screenshot
|
||||||
|
void hpCalcData::recvScreen(hp_ScreenShot shot) {
|
||||||
|
|
||||||
|
errlog("Recieving Screen");
|
||||||
|
|
||||||
|
QByteArray imageData;
|
||||||
|
if (screenShot!=nullptr) {
|
||||||
|
delete screenShot;
|
||||||
|
}
|
||||||
|
screenShot = shot.image;
|
||||||
|
|
||||||
|
emit emitChange(HP_SCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
//recieve Setting
|
||||||
|
void hpCalcData::recvSettings(hp_Data data) {
|
||||||
|
|
||||||
|
QString filename;
|
||||||
|
errlog("hpCalcData::recvSettings: Recieving Setting");
|
||||||
|
filename = data.name;
|
||||||
|
qDebug()<<filename;
|
||||||
|
|
||||||
|
if (filename==QStringLiteral("calc.hpsettings")) {
|
||||||
|
qDebug()<<"hpCalcData::recvSetting - Setting";
|
||||||
|
|
||||||
|
qDebug()<<"hpCalcData::recvSetting - Real";
|
||||||
|
errlog("hpCalcData::recvSetting - Real");
|
||||||
|
Real * obj1 = new Real(data.name,HP_REAL);
|
||||||
|
obj1->setData(data.data);
|
||||||
|
addData(obj1);
|
||||||
|
emit emitChange(HP_REAL);
|
||||||
|
|
||||||
|
qDebug()<<"hpCalcData::recvSetting - Complex";
|
||||||
|
errlog("hpCalcData::recvSetting - Complex");
|
||||||
|
Complex * obj2 = new Complex(data.name,HP_COMPLEX);
|
||||||
|
obj2->setData(data.data);
|
||||||
|
addData(obj2);
|
||||||
|
emit emitChange(HP_COMPLEX);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filename== QStringLiteral("cas.hpsettings")) {
|
||||||
|
qDebug()<<"cas.chps";
|
||||||
|
|
||||||
|
qDebug()<<"hpCalcData::recvSetting - CAS";
|
||||||
|
CASVariables * obj2 = new CASVariables(data.name,HP_CAS);
|
||||||
|
obj2->setData(data.data);
|
||||||
|
addData(obj2);
|
||||||
|
emit emitChange(HP_CAS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filename==QStringLiteral("calc.hpvars")) {
|
||||||
|
|
||||||
|
qDebug()<<"hpCalcData::recvSetting - Variables";
|
||||||
|
Variables * var = new Variables(data.name,HP_VAR);
|
||||||
|
var->setData(data.data);
|
||||||
|
addData(var);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filename==QStringLiteral("settings")) {
|
||||||
|
qDebug()<<"set-";
|
||||||
|
|
||||||
|
qDebug()<<"hpCalcData::recvSetting - Variables";
|
||||||
|
Settings * var = new Settings(data.name,HP_SETTINGS);
|
||||||
|
var->setData(data.data);
|
||||||
|
addData(var);
|
||||||
|
}
|
||||||
|
|
||||||
|
emit emitChange(HP_MAIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//recieve Program
|
||||||
|
void hpCalcData::recvProg(hp_Prog program) {
|
||||||
|
|
||||||
|
errlog("Recieving Program");
|
||||||
|
qDebug()<<"hpCalcData::recvProg";
|
||||||
|
|
||||||
|
qDebug()<<program.filename;
|
||||||
|
//qDebug()<<program.prog;
|
||||||
|
|
||||||
|
Program * obj = new Program(program.filename,HP_PROG, program.prog);
|
||||||
|
obj->setData(program.data);
|
||||||
|
addData(obj);
|
||||||
|
|
||||||
|
emit emitChange(HP_PROG);
|
||||||
|
}
|
||||||
|
|
||||||
|
//recieve Program
|
||||||
|
void hpCalcData::recvNote(hp_Note note) {
|
||||||
|
|
||||||
|
errlog("Recieving Note");
|
||||||
|
qDebug()<<"hpCalcData::recvNote";
|
||||||
|
|
||||||
|
qDebug()<<note.filename;
|
||||||
|
|
||||||
|
Notes * obj = new Notes(note.filename,HP_NOTE, note.text);
|
||||||
|
obj->setData(note.data);
|
||||||
|
addData(obj);
|
||||||
|
|
||||||
|
emit emitChange(HP_NOTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//recieve Program
|
||||||
|
void hpCalcData::recvData(hp_Data data) {
|
||||||
|
|
||||||
|
errlog("Recieving Data");
|
||||||
|
|
||||||
|
switch (data.type) {
|
||||||
|
case HP_APP: {
|
||||||
|
qDebug()<<"hpCalcData::recvData - Application";
|
||||||
|
Application * obj = new Application(data.name,data.type);
|
||||||
|
obj->setData(data.data);
|
||||||
|
addData(obj);
|
||||||
|
emit emitChange(HP_APP);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_LIST: {
|
||||||
|
List * obj = new List(data.name,data.type);
|
||||||
|
obj->setData(data.data);
|
||||||
|
addData(obj);
|
||||||
|
emit emitChange(HP_LIST);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_MATRIX: {
|
||||||
|
qDebug()<<"hpCalcData::recvData - Matrix";
|
||||||
|
Matrix * obj = new Matrix(data.name,data.type);
|
||||||
|
obj->setData(data.data);
|
||||||
|
addData(obj);
|
||||||
|
emit emitChange(HP_MATRIX);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void hpCalcData::emitChange(hp_DataType type) {
|
||||||
|
|
||||||
|
hp_Change change;
|
||||||
|
change.dataChange=type;
|
||||||
|
change.calc = this;
|
||||||
|
|
||||||
|
emit dataChanged(change);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_ScreenShot hpCalcData::getScreenShot() {
|
||||||
|
hp_ScreenShot scn;
|
||||||
|
|
||||||
|
scn.image = screenShot;
|
||||||
|
scn.format = CALC_SCREENSHOT_FORMAT_PRIME_PNG_320x240x16;
|
||||||
|
scn.calc = this;
|
||||||
|
|
||||||
|
return scn;
|
||||||
|
}
|
||||||
|
|
||||||
|
//set Settings
|
||||||
|
int hpCalcData::setSettings(hp_Settings set) {
|
||||||
|
|
||||||
|
hp_homesettings=set;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpCalcData::setInfo(hp_Information dtype) {
|
||||||
|
hp_info=dtype;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//read information via hp interface
|
||||||
|
void hpCalcData::readInfo() {
|
||||||
|
|
||||||
|
hpusb * api;
|
||||||
|
hp_Handle * handle;
|
||||||
|
hp_Information hpinfo;
|
||||||
|
|
||||||
|
api=getAPI();
|
||||||
|
handle=getHandle();
|
||||||
|
|
||||||
|
if (api) {
|
||||||
|
if(handle) {
|
||||||
|
qDebug()<<QString().sprintf("%s %p",__FUNCTION__,handle->usbhandle);
|
||||||
|
if (api)
|
||||||
|
api->load_info(handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpCalcData::recvInfo(hp_Information hpinfo) {
|
||||||
|
|
||||||
|
hp_info=hpinfo;
|
||||||
|
emit emitChange(HP_MAIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void hpCalcData::vpkt_send_experiments(int cmd) {
|
||||||
|
|
||||||
|
hpusb * api;
|
||||||
|
hp_Handle * handle;
|
||||||
|
|
||||||
|
api=getAPI();
|
||||||
|
handle=getHandle();
|
||||||
|
|
||||||
|
if (api) {
|
||||||
|
if(handle) {
|
||||||
|
if (api) {
|
||||||
|
api->is_ready(handle);
|
||||||
|
|
||||||
|
// api->vpkt_send_experiments(handle,cmd);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hpCalcData::~hpCalcData() {
|
||||||
|
qDebug()<<"Close ~hpCalcData";
|
||||||
|
};
|
14
source/hptoolbox.cpp
Normal file
14
source/hptoolbox.cpp
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#include <hptoolbox.h>
|
||||||
|
#include "ui_hptoolbox.h"
|
||||||
|
|
||||||
|
hpToolBox::hpToolBox(QWidget *parent) :
|
||||||
|
QToolBox(parent),
|
||||||
|
ui(new Ui::hpToolBox)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
hpToolBox::~hpToolBox()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
641
source/hptreeitem.cpp
Normal file
641
source/hptreeitem.cpp
Normal file
|
@ -0,0 +1,641 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hptreeitem.h"
|
||||||
|
#include "global.h"
|
||||||
|
#include "hpdata.h"
|
||||||
|
#include "hp_mditexteditor.h"
|
||||||
|
#include "hp_infodialog.h"
|
||||||
|
#include "hp_settingsdlg.h"
|
||||||
|
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
const QString hpTreeItem::func_list[FUNC_NUM][2]={
|
||||||
|
{"Main",":/icons/apps_32x32.png"},
|
||||||
|
{"Application Library",":/icons/apps_32x32.png"},
|
||||||
|
{"CAS Vars",":/icons/casFolder_32x32.png"},
|
||||||
|
{"Real",":/icons/real_32x32.png"},
|
||||||
|
{"Complex",":/icons/complex_32x32.png"},
|
||||||
|
{"Lists",":/icons/list_32x32.png"},
|
||||||
|
{"Matrices",":/icons/table_32x32.png"},
|
||||||
|
{"Notes",":/icons/note_32x32.png"},
|
||||||
|
{"Programs",":/icons/program_32x32.png"},
|
||||||
|
{"Variables",":/icons/varFolder_32x32.png"}
|
||||||
|
};
|
||||||
|
|
||||||
|
const hp_DataType hpTreeItem::func_type[FUNC_NUM]={
|
||||||
|
HP_MAIN,
|
||||||
|
HP_APP,
|
||||||
|
HP_CAS,
|
||||||
|
HP_REAL,
|
||||||
|
HP_COMPLEX,
|
||||||
|
HP_LIST,
|
||||||
|
HP_MATRIX,
|
||||||
|
HP_NOTE,
|
||||||
|
HP_PROG,
|
||||||
|
HP_VAR
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//QString hpTreeItem::hp_name;
|
||||||
|
|
||||||
|
|
||||||
|
hpTreeItem::hpTreeItem()
|
||||||
|
:QStandardItem() {
|
||||||
|
setDropEnabled(true);
|
||||||
|
setEditable(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hpTreeItem::hpTreeItem(const QString & name,hpCalcData * hpDataStore,int flag)
|
||||||
|
:QStandardItem(name)
|
||||||
|
{
|
||||||
|
setEditable(0);
|
||||||
|
setDataStore(hpDataStore);
|
||||||
|
|
||||||
|
setDragEnabled(true);
|
||||||
|
setDropEnabled(true);
|
||||||
|
|
||||||
|
// filename=name;
|
||||||
|
|
||||||
|
if (flag==0)
|
||||||
|
setGraphicTree();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hpTreeItem::dropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent) {
|
||||||
|
|
||||||
|
qDebug()<<"hpTreeItem::dropMimeData";
|
||||||
|
}
|
||||||
|
|
||||||
|
QStandardItem * hpTreeItem::clone() const {
|
||||||
|
//return new hpTreeItem(QStringLiteral("test"),getDataStore(),0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpTreeItem::setGraphicTree() {
|
||||||
|
|
||||||
|
int func_num=FUNC_NUM;
|
||||||
|
hpTreeItem * newChild;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=1; i<func_num; i++)
|
||||||
|
{
|
||||||
|
newChild= new hpTreeItem(func_list[i][0],getDataStore(),1);
|
||||||
|
newChild->setType(func_type[i]);
|
||||||
|
newChild->setIcon(QIcon(func_list[i][1]));
|
||||||
|
newChild->setEditable(0);
|
||||||
|
newChild->setToolTip(QString("Manage Applications"));
|
||||||
|
// newChild->getDataStore()->getInfo().serialnum="12-3456";
|
||||||
|
appendRow(newChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpTreeItem::clickAction(QMdiArea * mdiwin) {
|
||||||
|
|
||||||
|
hp_infoDialog * hpinfodlg;
|
||||||
|
hp_Information hpinfo;
|
||||||
|
hpCalcData * calc;
|
||||||
|
hp_DataStruct hpdata;
|
||||||
|
calc=getDataStore();
|
||||||
|
AbstractData * data=nullptr;
|
||||||
|
|
||||||
|
// QString test;
|
||||||
|
// test=data(Qt::DisplayRole).toString();
|
||||||
|
|
||||||
|
qDebug()<<"hpTreeItem::clickAction ... click";
|
||||||
|
|
||||||
|
switch (getType()) {
|
||||||
|
case HP_MAIN: {
|
||||||
|
hpCalcData * dataStore;
|
||||||
|
dataStore = getDataStore();
|
||||||
|
hpinfo=dataStore->getInfo();
|
||||||
|
hpinfodlg = new hp_infoDialog(mdiwin,hpinfo);
|
||||||
|
hpinfodlg->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_APP: {
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_CAS:
|
||||||
|
if (hpvaredit==nullptr) {
|
||||||
|
if (calc) {
|
||||||
|
data=calc->getData(getFileName(),HP_COMPLEX);
|
||||||
|
}
|
||||||
|
if (data!=nullptr) {
|
||||||
|
hpvaredit = new hp_mdiVariableEdit(mdiwin,this,calc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hpvaredit!=nullptr)
|
||||||
|
hpvaredit ->show();
|
||||||
|
case HP_COMPLEX:
|
||||||
|
if (hpvaredit==nullptr) {
|
||||||
|
if (calc) {
|
||||||
|
data=calc->getData(getFileName(),HP_COMPLEX);
|
||||||
|
}
|
||||||
|
if (data!=nullptr) {
|
||||||
|
hpvaredit = new hp_mdiVariableEdit(mdiwin,this,calc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hpvaredit!=nullptr)
|
||||||
|
hpvaredit ->show();
|
||||||
|
break;
|
||||||
|
case HP_LIST:
|
||||||
|
if (hpvaredit==nullptr) {
|
||||||
|
if (calc) {
|
||||||
|
data=calc->getData(getFileName(),HP_LIST);
|
||||||
|
}
|
||||||
|
if (data) {
|
||||||
|
hpvaredit = new hp_mdiVariableEdit(mdiwin,this,calc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hpvaredit!=nullptr)
|
||||||
|
hpvaredit ->show();
|
||||||
|
break;
|
||||||
|
case HP_MATRIX:
|
||||||
|
if (hpvaredit==nullptr) {
|
||||||
|
if (calc) {
|
||||||
|
data=calc->getData(getFileName(),HP_MATRIX);
|
||||||
|
}
|
||||||
|
if (data!=nullptr) {
|
||||||
|
hpvaredit = new hp_mdiVariableEdit(mdiwin,this,calc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hpvaredit!=nullptr)
|
||||||
|
hpvaredit ->show();
|
||||||
|
break;
|
||||||
|
case HP_NOTE: {
|
||||||
|
hpCalcData * dataStore;
|
||||||
|
dataStore = getDataStore();
|
||||||
|
|
||||||
|
AbstractData * data =nullptr;
|
||||||
|
dataStore = getDataStore();
|
||||||
|
if (dataStore) {
|
||||||
|
data=dataStore->getData(getFileName(),getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
//To fix by having hp_mdi reset
|
||||||
|
hptextedit=nullptr;
|
||||||
|
|
||||||
|
|
||||||
|
if ((hptextedit==nullptr)&&(data!=nullptr))
|
||||||
|
hptextedit = new hp_mdiTextEdit(mdiwin,this, data);
|
||||||
|
if (hptextedit!=nullptr)
|
||||||
|
hptextedit ->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_PROG: {
|
||||||
|
hpCalcData * dataStore =nullptr;
|
||||||
|
AbstractData * data =nullptr;
|
||||||
|
dataStore = getDataStore();
|
||||||
|
qDebug()<<"HP_Prog ... click"<<getFileName();
|
||||||
|
if (dataStore!=nullptr) {
|
||||||
|
data=dataStore->getData(getFileName(),getType());
|
||||||
|
if(data!=nullptr) {
|
||||||
|
qDebug()<<data->getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//To fix by having hp_mdi reset
|
||||||
|
hptextedit=nullptr;
|
||||||
|
|
||||||
|
if ((hptextedit==nullptr)&&(data!=nullptr)) {
|
||||||
|
hptextedit = new hp_mdiTextEdit(mdiwin,this, data);
|
||||||
|
}
|
||||||
|
if (hptextedit!=nullptr)
|
||||||
|
hptextedit ->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_REAL:
|
||||||
|
if (hpvaredit==nullptr) {
|
||||||
|
if (calc) {
|
||||||
|
data=calc->getData(getFileName(),HP_REAL);
|
||||||
|
}
|
||||||
|
if (data!=nullptr) {
|
||||||
|
hpvaredit = new hp_mdiVariableEdit(mdiwin,this,calc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hpvaredit!=nullptr)
|
||||||
|
hpvaredit ->show();
|
||||||
|
break;
|
||||||
|
case HP_VAR:
|
||||||
|
|
||||||
|
break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpTreeItem::contextAction(QMdiArea * mdiwin, contextActionType cta) {
|
||||||
|
|
||||||
|
hp_SettingsDlg * hpsettingsdlg;
|
||||||
|
hp_Information hpinfo;
|
||||||
|
hp_Settings hpset;
|
||||||
|
int ret=0;
|
||||||
|
switch (getType()) {
|
||||||
|
case HP_MAIN: {
|
||||||
|
switch (cta) {
|
||||||
|
case CT_PREFERENCE: {
|
||||||
|
hpCalcData * dataStore;
|
||||||
|
dataStore = getDataStore();
|
||||||
|
dataStore->readSettings();
|
||||||
|
hpset=dataStore->getSettings();
|
||||||
|
hpsettingsdlg = new hp_SettingsDlg(mdiwin, &hpset);
|
||||||
|
ret=hpsettingsdlg->exec();
|
||||||
|
if (ret)
|
||||||
|
dataStore->setSettings(hpset);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hp_DataType hpTreeItem::getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpTreeItem::setType(hp_DataType dtype) {
|
||||||
|
type=dtype;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//manage access to datastore
|
||||||
|
hpCalcData * hpTreeItem::getDataStore() {
|
||||||
|
if (hp_data) {
|
||||||
|
qDebug()<<"Data store found";
|
||||||
|
return hp_data;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"Null data store";
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpTreeItem::setDataStore(hpCalcData * dtype) {
|
||||||
|
hp_data=dtype;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hpTreeItem::dt2int() {
|
||||||
|
switch (getType()) {
|
||||||
|
case HP_APP: return 0;
|
||||||
|
case HP_CAS: return 1;
|
||||||
|
case HP_COMPLEX: return 2;
|
||||||
|
case HP_LIST: return 3;
|
||||||
|
case HP_MATRIX: return 4;
|
||||||
|
case HP_NOTE: return 5;
|
||||||
|
case HP_PROG: return 6;
|
||||||
|
case HP_REAL: return 7;
|
||||||
|
case HP_VAR: return 8;
|
||||||
|
default:;
|
||||||
|
};
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString hpTreeItem::getGroupName() {
|
||||||
|
return func_list[dt2int()][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
QString hpTreeItem::getFileName() {
|
||||||
|
|
||||||
|
return text();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString hpTreeItem::getCalculatorName() {
|
||||||
|
hpCalcData * hpcalc;
|
||||||
|
QString calcName;
|
||||||
|
hpcalc=getDataStore();
|
||||||
|
|
||||||
|
if (hpcalc!=nullptr)
|
||||||
|
calcName=hpcalc->getCalculatorName();
|
||||||
|
|
||||||
|
qDebug()<<calcName;
|
||||||
|
return calcName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpTreeItem::setFileName(QString file) {
|
||||||
|
|
||||||
|
|
||||||
|
qDebug()<<"rename "<<text()<<" to "<<file;
|
||||||
|
|
||||||
|
// filename=file;
|
||||||
|
setText(file);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Slot to respond to data changes
|
||||||
|
void hpTreeItem::dataChange(hp_Change hpchange) {
|
||||||
|
|
||||||
|
hpCalcData * ptr=nullptr;
|
||||||
|
QString name;
|
||||||
|
switch (hpchange.dataChange) {
|
||||||
|
case HP_MAIN:
|
||||||
|
ptr=getDataStore();
|
||||||
|
if (ptr) {
|
||||||
|
name=ptr->getName();
|
||||||
|
setData(name,Qt::DisplayRole);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_SCREEN: {
|
||||||
|
emit dataChanged(hpchange);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_REAL: {
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_APP: {
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
case HP_MATRIX: {
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_LIST: {
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_NOTE: {
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_PROG: {
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hpTreeItem::addChild(AbstractData *obj) {
|
||||||
|
hpTreeItem * subItem=nullptr;
|
||||||
|
hp_DataType type;
|
||||||
|
|
||||||
|
qDebug()<<"hpTreeItem:Adding Child";
|
||||||
|
|
||||||
|
if (obj!=nullptr) {
|
||||||
|
QString name;
|
||||||
|
//create fixed variable list
|
||||||
|
|
||||||
|
type= obj->getType();
|
||||||
|
name=obj->getName();
|
||||||
|
|
||||||
|
qDebug()<<"hpTreeItem:this is "<<getFileName()<<" of type:"<<getType()
|
||||||
|
<<"Column:"<<columnCount();
|
||||||
|
|
||||||
|
//check if this is the same type
|
||||||
|
if ((getType()==type)&&(columnCount()<3))
|
||||||
|
{
|
||||||
|
|
||||||
|
qDebug()<<"hpTreeItem: Creating hpTreeItem:"<<type;
|
||||||
|
qDebug()<<"Column Count:"<<columnCount();
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case HP_APP: {
|
||||||
|
subItem= new hpTreeItem(name,getDataStore(),1);
|
||||||
|
subItem->setType(type);
|
||||||
|
subItem->setIcon(QIcon(func_list[HP_APP][1]));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_MATRIX: {
|
||||||
|
subItem= new hpTreeItem(name,getDataStore(),1);
|
||||||
|
subItem->setType(type);
|
||||||
|
subItem->setIcon(QIcon(func_list[HP_MATRIX][1]));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_LIST: {
|
||||||
|
subItem= new hpTreeItem(name,getDataStore(),1);
|
||||||
|
subItem->setType(type);
|
||||||
|
subItem->setIcon(QIcon(func_list[HP_LIST][1]));
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_NOTE: {
|
||||||
|
subItem= new hpTreeItem(name,getDataStore(),1);
|
||||||
|
subItem->setType(type);
|
||||||
|
subItem->setIcon(QIcon(func_list[HP_NOTE][1]));
|
||||||
|
qDebug()<<"hpTreeItem: Creating Note type:"<<type;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_PROG: {
|
||||||
|
subItem= new hpTreeItem(name,getDataStore(),1);
|
||||||
|
subItem->setType(type);
|
||||||
|
subItem->setIcon(QIcon(func_list[HP_PROG][1]));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_REAL: {
|
||||||
|
setType(type);
|
||||||
|
setFileName(name);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_COMPLEX: {
|
||||||
|
setType(type);
|
||||||
|
setFileName(name);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: {
|
||||||
|
subItem= new hpTreeItem(name,getDataStore(),1);
|
||||||
|
subItem->setType(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (subItem)
|
||||||
|
appendRow(subItem);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"hpTreeItem:No Object added";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Up date the data
|
||||||
|
void hpTreeItem::refresh() {
|
||||||
|
int rows,i,j;
|
||||||
|
int datalen;
|
||||||
|
hpTreeItem * ti_child;
|
||||||
|
|
||||||
|
QString name;
|
||||||
|
hp_DataType type;
|
||||||
|
|
||||||
|
rows=rowCount();
|
||||||
|
hpCalcData * calc;
|
||||||
|
|
||||||
|
calc=getDataStore();
|
||||||
|
|
||||||
|
if (calc) {
|
||||||
|
if (columnCount()==1) {
|
||||||
|
AbstractData * obj;
|
||||||
|
datalen=calc->dataCount();
|
||||||
|
//get object at from calc
|
||||||
|
//get number of list items
|
||||||
|
|
||||||
|
//for all data items in list
|
||||||
|
for (j=0; j<datalen; j++ ) {
|
||||||
|
//compare with data
|
||||||
|
obj= calc->dataAt(j);
|
||||||
|
|
||||||
|
if (obj) {
|
||||||
|
for (i=0; i<rows; i++) {
|
||||||
|
ti_child=(hpTreeItem *)child(i);
|
||||||
|
name=ti_child->getFileName();
|
||||||
|
type=ti_child->getType();
|
||||||
|
|
||||||
|
if(obj->getType()==type) {
|
||||||
|
ti_child->addFile(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug()<<"hpTreeItem:obj is null!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
//delete excess
|
||||||
|
qDebug()<<"hpTreeItem: Checking for deletes";
|
||||||
|
if (columnCount()==1) {
|
||||||
|
AbstractData * obj;
|
||||||
|
int ret;
|
||||||
|
rows=rowCount();
|
||||||
|
flag =0;
|
||||||
|
//for all rows check data exists
|
||||||
|
for (i=0; i<rows; i++) {
|
||||||
|
ti_child=(hpTreeItem *)child(i);
|
||||||
|
if (ti_child) {
|
||||||
|
name=ti_child->getFileName();
|
||||||
|
type=ti_child->getType();
|
||||||
|
for (j=0; j<datalen; j++ ) {
|
||||||
|
//compare with all data
|
||||||
|
obj= calc->dataAt(j);
|
||||||
|
if (obj) {
|
||||||
|
qDebug()<<"hpTreeItem::refresh - calling object";
|
||||||
|
if(obj->getType()==type) {
|
||||||
|
ret=ti_child->findFile(obj->getName());
|
||||||
|
}
|
||||||
|
if(ret!=0) {
|
||||||
|
flag =1; //obj found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//If data and no row add row
|
||||||
|
if (flag==0) {
|
||||||
|
qDebug()<<"hpTreeItem::refresh - deleting ";
|
||||||
|
removeRow(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if file is in the list and add it if not
|
||||||
|
void hpTreeItem::addFile(AbstractData * obj) {
|
||||||
|
|
||||||
|
int i;
|
||||||
|
int rows;
|
||||||
|
int flag;
|
||||||
|
|
||||||
|
hpTreeItem * ti_child;
|
||||||
|
QString name;
|
||||||
|
hp_DataType type;
|
||||||
|
|
||||||
|
// qDebug()<<"hpTreeItem::addFile";
|
||||||
|
|
||||||
|
rows=rowCount();
|
||||||
|
flag=0;
|
||||||
|
|
||||||
|
if (obj) {
|
||||||
|
// qDebug()<<"hpTreeItem::addFile - File Not null";
|
||||||
|
for (i=0; i<rows; i++) {
|
||||||
|
ti_child=(hpTreeItem *)child(i);
|
||||||
|
name=ti_child->getFileName();
|
||||||
|
type=ti_child->getType();
|
||||||
|
if(obj->equivalent(name,type)) {
|
||||||
|
flag =1; //obj found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//If data and no row add row
|
||||||
|
if (flag==0) {
|
||||||
|
qDebug()<<"hpTreeItem::addFile - Adding a child";
|
||||||
|
addChild(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug()<<"hpTreeItem:obj is null!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if file is in the list of children and add it if not return 0 else return row;
|
||||||
|
int hpTreeItem::findFile(QString dataname) {
|
||||||
|
|
||||||
|
int i;
|
||||||
|
int rows;
|
||||||
|
int flag;
|
||||||
|
|
||||||
|
rows=rowCount();
|
||||||
|
hpTreeItem * ti_child;
|
||||||
|
QString name;
|
||||||
|
|
||||||
|
for (i=0; i<rows; i++) {
|
||||||
|
ti_child=static_cast<hpTreeItem *>(child(i));
|
||||||
|
dataname=ti_child->getFileName();
|
||||||
|
if(name==dataname) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
hpTreeItem::~hpTreeItem() {
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (hpvaredit!=nullptr) {
|
||||||
|
hpvaredit->close();
|
||||||
|
delete hpvaredit;
|
||||||
|
hpvaredit=nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hptextedit!=nullptr) {
|
||||||
|
hptextedit->close();
|
||||||
|
delete hptextedit;
|
||||||
|
hptextedit=nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mdiarea!=nullptr) {
|
||||||
|
mdiarea->close();
|
||||||
|
mdiarea=nullptr;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
removeColumn(0);
|
||||||
|
qDebug()<<"hpTreeItem:: delete"<<text();
|
||||||
|
}
|
||||||
|
|
1419
source/hpusb.cpp
Normal file
1419
source/hpusb.cpp
Normal file
File diff suppressed because it is too large
Load diff
49
source/main.cpp
Normal file
49
source/main.cpp
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QCommandLineParser>
|
||||||
|
#include <QCommandLineOption>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
Q_INIT_RESOURCE(qthpconnect);
|
||||||
|
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
|
||||||
|
QCoreApplication::setOrganizationName("");
|
||||||
|
QCoreApplication::setApplicationName("Linux QtHP Connect");
|
||||||
|
QCoreApplication::setApplicationVersion(HP_VERSION_STRING);
|
||||||
|
QCommandLineParser parser;
|
||||||
|
MainWindow w;
|
||||||
|
|
||||||
|
parser.setApplicationDescription(QCoreApplication::applicationName());
|
||||||
|
//REWORK
|
||||||
|
parser.addHelpOption();
|
||||||
|
parser.addVersionOption();
|
||||||
|
// parser.addPositionalArgument("file", "The file to open.");
|
||||||
|
parser.process(a);
|
||||||
|
|
||||||
|
// a.setQuitLockEnabled(true);
|
||||||
|
// if (!parser.positionalArguments().isEmpty())
|
||||||
|
// w.loadFile(parser.positionalArguments().first());
|
||||||
|
w.show();
|
||||||
|
a.exec();
|
||||||
|
qDebug()<<"Main.cpp:: closing main";
|
||||||
|
return 1;
|
||||||
|
}
|
1083
source/mainwindow.cpp
Normal file
1083
source/mainwindow.cpp
Normal file
File diff suppressed because it is too large
Load diff
698
source/mainwindow.ui
Normal file
698
source/mainwindow.ui
Normal file
|
@ -0,0 +1,698 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<author>Ian Gebbie</author>
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>919</width>
|
||||||
|
<height>584</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Linux HP Connect</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralWidget">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QMdiArea" name="mdiArea">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>500</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||||
|
</property>
|
||||||
|
<property name="horizontalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>919</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<widget class="QMenu" name="menuFile">
|
||||||
|
<property name="title">
|
||||||
|
<string>Fi&le</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionExit"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menuEdit">
|
||||||
|
<property name="title">
|
||||||
|
<string>Edit</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionPreferences"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menuWindow">
|
||||||
|
<property name="title">
|
||||||
|
<string>Wi&ndow</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionClose"/>
|
||||||
|
<addaction name="actionClose_all"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionTile"/>
|
||||||
|
<addaction name="actionCascade"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionNext"/>
|
||||||
|
<addaction name="actionPrevious"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionMessages"/>
|
||||||
|
<addaction name="actionMonitor"/>
|
||||||
|
<addaction name="actionCalculators"/>
|
||||||
|
<addaction name="actionContent"/>
|
||||||
|
<addaction name="actionLog"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menuHelp">
|
||||||
|
<property name="title">
|
||||||
|
<string>Help</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionAbout_HP_Connect"/>
|
||||||
|
</widget>
|
||||||
|
<addaction name="menuFile"/>
|
||||||
|
<addaction name="menuEdit"/>
|
||||||
|
<addaction name="menuWindow"/>
|
||||||
|
<addaction name="menuHelp"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDockWidget" name="dwCalculator">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>184</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>524287</width>
|
||||||
|
<height>524287</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="baseSize">
|
||||||
|
<size>
|
||||||
|
<width>300</width>
|
||||||
|
<height>200</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<attribute name="dockWidgetArea">
|
||||||
|
<number>1</number>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="wCalculator">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeView" name="tvCalculators">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::ActionsContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Calculator View</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="lineWidth">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="midLineWidth">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolBar" name="toolBar">
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>toolBar</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<addaction name="actionCalculators"/>
|
||||||
|
<addaction name="actionContent"/>
|
||||||
|
<addaction name="actionSave"/>
|
||||||
|
<addaction name="actionSave_All"/>
|
||||||
|
<addaction name="actionCreateNew"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionMonitor"/>
|
||||||
|
<addaction name="actionMessages"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionOpen"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionTest"/>
|
||||||
|
<addaction name="actionTestSettings"/>
|
||||||
|
<addaction name="actionTestScreen"/>
|
||||||
|
<addaction name="actionRefresh"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDockWidget" name="dwContent">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>300</width>
|
||||||
|
<height>130</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>524287</width>
|
||||||
|
<height>524287</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<attribute name="dockWidgetArea">
|
||||||
|
<number>1</number>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="wContent">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeView" name="tvContent">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>File View</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectItems</enum>
|
||||||
|
</property>
|
||||||
|
<property name="indentation">
|
||||||
|
<number>15</number>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerCascadingSectionResizes">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerMinimumSectionSize">
|
||||||
|
<number>47</number>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerDefaultSectionSize">
|
||||||
|
<number>150</number>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerHighlightSections">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerStretchLastSection">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDockWidget" name="dwMessenger">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>524287</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<attribute name="dockWidgetArea">
|
||||||
|
<number>2</number>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="wMessage">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTextEdit" name="teMessage"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDockWidget" name="dwMonitor">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<attribute name="dockWidgetArea">
|
||||||
|
<number>2</number>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="wMonitor">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="wMonitorGrid" rowstretch="0" columnstretch="0" rowminimumheight="0"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusBar">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>100</horstretch>
|
||||||
|
<verstretch>20</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string extracomment="Status"/>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<action name="actionCut">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="cut" resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/cut_32x32.png</normaloff>:/icons/cut_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Cut</string>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font/>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCopy">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="action_copy" resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/copy_32x32.png</normaloff>:/icons/copy_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>C&opy</string>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font/>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPaste">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/paste_32x32.png</normaloff>:/icons/paste_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Paste</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionClose">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Close</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionClose_all">
|
||||||
|
<property name="text">
|
||||||
|
<string>C&lose all</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionTile">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Tile</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCascade">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ca&scade</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionNext">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Next</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionMessages">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/chat_32x32.png</normaloff>:/icons/chat_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Messages</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionMonitor">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/monitor_32x32.png</normaloff>:/icons/monitor_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>M&onitor</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCalculators">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/calc_tree_32x32.png</normaloff>:/icons/calc_tree_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Calc&ulators</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionAbout_HP_Connect">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="about" resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/about_32x32.png</normaloff>:/icons/about_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&About HP Connect</string>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font/>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPreferences">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/preferences_32x32.png</normaloff>:/icons/preferences_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>P&references</string>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font/>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPrevious">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Previous</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionContent">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/content_32x32.png</normaloff>:/icons/content_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Cont&ent</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSave">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/save_32x32.png</normaloff>:/icons/save_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSave_All">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/save_all_32x32.png</normaloff>:/icons/save_all_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save All</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCreateNew">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/add_new_32x32.png</normaloff>:/icons/add_new_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>CreateNew</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Create New </string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionExit">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/delete_32x32.png</normaloff>:/icons/delete_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Exit</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionOpen">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/add_icon_32x32.png</normaloff>:/icons/add_icon_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Open</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionLog">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/note_32x32.png</normaloff>:/icons/note_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Lo&g</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionTest">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/clone_to_32x32.png</normaloff>:/icons/clone_to_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Test</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Test Button</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionTreePreference">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/preferences_32x32.png</normaloff>:/icons/preferences_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>TreePreference</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionTestSettings">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/preferences_32x32.png</normaloff>:/icons/preferences_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>TestSettings</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionTestScreen">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/add_background_32x32.png</normaloff>:/icons/add_background_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>TestScreen</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Test get Screen Function</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionRefresh">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/refresh_32x32.png</normaloff>:/icons/refresh_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Refresh</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSettings">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/preferences_32x32.png</normaloff>:/icons/preferences_32x32.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Settings</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionFileOpen">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normalon>:/icons/open_16x16.png</normalon>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Open</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Open a file</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Alt+O</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionFileDelete">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normalon>:/icons/delete_16x16.png</normalon>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Delete</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Delete a file</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Alt+D</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionFileRename">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normalon>:/icons/rename_16x16.png</normalon>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Rename</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Rename a file</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Alt+R</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCalcOpen">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normalon>:/icons/open_16x16.png</normalon>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Open</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Open a file</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Alt+O</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCalcDelete">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normalon>:/icons/delete_16x16.png</normalon>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Delete</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Delete a file</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Alt+D</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCalcRename">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normalon>:/icons/rename_16x16.png</normalon>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Rename</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Rename a file</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Alt+R</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionNewFolder">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="qthpconnect.qrc">
|
||||||
|
<normaloff>:/icons/new_folder_16x16.png</normaloff>:/icons/new_folder_16x16.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Folder</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Create a New Folder</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionNew_Note">
|
||||||
|
<property name="text">
|
||||||
|
<string>New Note</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionNew_Program">
|
||||||
|
<property name="text">
|
||||||
|
<string>New Program</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources>
|
||||||
|
<include location="qthpconnect.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
310
source/matrixdata.cpp
Normal file
310
source/matrixdata.cpp
Normal file
|
@ -0,0 +1,310 @@
|
||||||
|
/*
|
||||||
|
* QtHP Connect: hand-helds support interface.
|
||||||
|
* Copyright (C) 2019 Ian Gebbie
|
||||||
|
* Code patterns and snippets borrowed from libhpcalcs :
|
||||||
|
* Copyright (C) 1999-2009 Romain Li<EFBFBD>vin
|
||||||
|
* Copyright (C) 2009-2013 Lionel Debroux
|
||||||
|
* Copyright (C) 1999-2013 libti* contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include "matrixdata.h"
|
||||||
|
|
||||||
|
extern bool BCD(QDataStream &ds, double real) ;
|
||||||
|
|
||||||
|
MatrixData::MatrixData()
|
||||||
|
{
|
||||||
|
// clear();
|
||||||
|
qDebug()<<"MatrixData Construct";
|
||||||
|
}
|
||||||
|
|
||||||
|
//Return the item or a zero item
|
||||||
|
itemData MatrixData::at(int row, int column)
|
||||||
|
{
|
||||||
|
QList<itemData> * rowlist;
|
||||||
|
itemData item;
|
||||||
|
|
||||||
|
if (row<matrix.size()) {
|
||||||
|
rowlist=matrix.at(row);
|
||||||
|
if (rowlist) {
|
||||||
|
if (column<rowlist->size()) {
|
||||||
|
item=rowlist->at(column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Insert a new item and resize the list if larger
|
||||||
|
void MatrixData::insert(int row, int column, itemData data)
|
||||||
|
{
|
||||||
|
QList<itemData> * rowlist=nullptr;
|
||||||
|
|
||||||
|
upsize(row+1,column+1);
|
||||||
|
|
||||||
|
if(row<matrix.size())
|
||||||
|
rowlist=matrix.at(row);
|
||||||
|
|
||||||
|
if(rowlist) {
|
||||||
|
rowlist->replace(column,data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add a new row
|
||||||
|
void MatrixData::addRow(int row)
|
||||||
|
{
|
||||||
|
int rows;
|
||||||
|
int i;
|
||||||
|
QList<itemData> * rowlist;
|
||||||
|
|
||||||
|
|
||||||
|
// qDebug()<<"MatrixData::addRow" << row;
|
||||||
|
rows=matrix.size();
|
||||||
|
if (rows<=row)
|
||||||
|
{
|
||||||
|
for (i=rows; i<=row;i++) {
|
||||||
|
// qDebug()<<"MatrixData::addRow "<<i;
|
||||||
|
|
||||||
|
rowlist = new QList<itemData>;
|
||||||
|
matrix.insert(i,rowlist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MatrixData::dataOut(QDataStream & ds) {
|
||||||
|
|
||||||
|
int row;
|
||||||
|
int column;
|
||||||
|
int i,j=0;
|
||||||
|
|
||||||
|
qDebug()<<"MatrixData::dataOut(ds)";
|
||||||
|
|
||||||
|
row=rows();
|
||||||
|
column=columns();
|
||||||
|
|
||||||
|
itemData item;
|
||||||
|
QString str;
|
||||||
|
//header
|
||||||
|
|
||||||
|
static const quint8 mydata[] = {0x02, 0x01, 0x04,0x03,0x06,0x05,0x08,0x07};
|
||||||
|
|
||||||
|
QByteArray test= QByteArray::fromRawData((char *)mydata,sizeof (mydata));
|
||||||
|
|
||||||
|
ds<<static_cast<quint16>(0x0001);
|
||||||
|
ds<<static_cast<quint16>(0x8014);
|
||||||
|
ds<<static_cast<quint16>(0x0002);
|
||||||
|
ds<<static_cast<quint16>(0x0000);
|
||||||
|
|
||||||
|
ds<<static_cast<quint32>(row);
|
||||||
|
ds<<static_cast<quint32>(column);
|
||||||
|
// ds<<static_cast<quint8>(0x30);
|
||||||
|
// ds<<static_cast<quint8>(0x31);
|
||||||
|
|
||||||
|
// qDebug()<<test;
|
||||||
|
//body
|
||||||
|
double real;
|
||||||
|
for (i=0;i<row;i++) {
|
||||||
|
for (j=0;j<column;j++) {
|
||||||
|
item=at(i,j);
|
||||||
|
|
||||||
|
real=item.dReal;
|
||||||
|
BCD(ds,real);
|
||||||
|
// if(j!=column)
|
||||||
|
// out.append("");
|
||||||
|
}
|
||||||
|
// if (i!=row)
|
||||||
|
// out.append("");
|
||||||
|
}
|
||||||
|
|
||||||
|
//footer
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//get all columns to same size by padding it zero items
|
||||||
|
void MatrixData::resize(int newrow,int newcol) {
|
||||||
|
|
||||||
|
QList<itemData> * row;
|
||||||
|
int rows=0;
|
||||||
|
int maxrows=0;
|
||||||
|
int columns=0;
|
||||||
|
int maxcolumns=0;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
qDebug()<<"MatrixData::resize";
|
||||||
|
|
||||||
|
itemData item;
|
||||||
|
rows = matrix.size();
|
||||||
|
qDebug()<<"MatrixData::resize - maxcolumns "<<maxcolumns;
|
||||||
|
|
||||||
|
//decrease rows if not requiered
|
||||||
|
for(i=0;i<rows;i++) {
|
||||||
|
if (i>newrow) {
|
||||||
|
matrix.removeAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//increase rows to match
|
||||||
|
if(newrow>rows) {
|
||||||
|
|
||||||
|
for(i=rows;i<newrow;i++) {
|
||||||
|
addRow(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rows = matrix.size();
|
||||||
|
qDebug()<<"MatrixData::resize - rows "<<rows;
|
||||||
|
//match colums
|
||||||
|
for(i=0;i<rows;i++) {
|
||||||
|
columns=matrix.at(i)->size();
|
||||||
|
if (columns<newcol) {
|
||||||
|
row=matrix.at(i);
|
||||||
|
for(j=columns;j<maxcolumns; j++) {
|
||||||
|
row->insert(j,item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (columns>newcol) {
|
||||||
|
row=matrix.at(i);
|
||||||
|
if (row) {
|
||||||
|
for(j=columns;j<maxcolumns; j++) {
|
||||||
|
row->removeAt(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//get all columns to same size by padding it zero items
|
||||||
|
void MatrixData::upsize(int newrow,int newcol) {
|
||||||
|
|
||||||
|
QList<itemData> * row;
|
||||||
|
int rows=0;
|
||||||
|
|
||||||
|
int columns=0;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
qDebug()<<"MatrixData::upsize";
|
||||||
|
|
||||||
|
itemData item;
|
||||||
|
item.sValue=QStringLiteral("0");
|
||||||
|
|
||||||
|
rows = matrix.size();
|
||||||
|
// qDebug()<<"MatrixData::upsize - rows:"<<newrow<<" columns:"<<newcol;
|
||||||
|
|
||||||
|
//increase rows to match
|
||||||
|
if(rows<newrow) {
|
||||||
|
for(i=rows;i<newrow;i++) {
|
||||||
|
addRow(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rows = matrix.size();
|
||||||
|
// qDebug()<<"MatrixData::upsize - rows "<<rows;
|
||||||
|
//match colums
|
||||||
|
for(i=0;i<rows;i++) {
|
||||||
|
row=matrix.at(i);
|
||||||
|
if (row) {
|
||||||
|
columns=row->size();
|
||||||
|
for(j=columns;j<newcol; j++) {
|
||||||
|
if (j<newcol) {
|
||||||
|
// qDebug()<<"MatrixData::upsize - column "<<newcol<<" at"<<j;
|
||||||
|
row->insert(j,item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"MatrixData::upsize - Null row!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//get all columns to same size by padding it zero items
|
||||||
|
void MatrixData::matchsize() {
|
||||||
|
|
||||||
|
QList<itemData> * row;
|
||||||
|
int rows=0;
|
||||||
|
int maxrows=0;
|
||||||
|
int columns=0;
|
||||||
|
int maxcolumns=0;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
qDebug()<<"MatrixData::matchsize";
|
||||||
|
|
||||||
|
itemData item;
|
||||||
|
rows = matrix.size();
|
||||||
|
|
||||||
|
for(i=0;i<rows;i++) {
|
||||||
|
columns=matrix.at(i)->size();
|
||||||
|
if (maxcolumns<columns)
|
||||||
|
maxcolumns=columns;
|
||||||
|
}
|
||||||
|
qDebug()<<"MatrixData::matchsize - maxcolumns "<<maxcolumns;
|
||||||
|
for(i=0;i<rows;i++) {
|
||||||
|
columns=matrix.at(i)->size();
|
||||||
|
if (columns<maxcolumns) {
|
||||||
|
row=matrix.at(i);
|
||||||
|
for(j=columns;j<maxcolumns; j++) {
|
||||||
|
row->insert(j,item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixData::clear()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int r;
|
||||||
|
QList<itemData> * row;
|
||||||
|
|
||||||
|
r=rows();
|
||||||
|
|
||||||
|
for(i=0; i<r;i++) {
|
||||||
|
row=matrix.at(i);
|
||||||
|
if (row) {
|
||||||
|
row->clear();
|
||||||
|
delete row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
matrix.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
int MatrixData::columns()
|
||||||
|
{
|
||||||
|
QList<itemData> * row;
|
||||||
|
|
||||||
|
if (matrix.size()>0) {
|
||||||
|
row=matrix.at(0);
|
||||||
|
if (row) {
|
||||||
|
qDebug()<<"MatrixData: column "<<row->size();
|
||||||
|
return row->size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MatrixData::rows()
|
||||||
|
{
|
||||||
|
qDebug()<<"MatrixData: row"<<matrix.size();
|
||||||
|
matrix.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
MatrixData::~MatrixData()
|
||||||
|
{
|
||||||
|
qDebug()<<"Entering ~MatrixData()";
|
||||||
|
clear();
|
||||||
|
}
|
56
source/options.cpp
Normal file
56
source/options.cpp
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* QtHP Connect: hand-helds support interface.
|
||||||
|
* Copyright (C) 2019 Ian Gebbie
|
||||||
|
* Code patterns and snippets borrowed from libhpcalcs :
|
||||||
|
* Copyright (C) 1999-2009 Romain Li<EFBFBD>vin
|
||||||
|
* Copyright (C) 2009-2013 Lionel Debroux
|
||||||
|
* Copyright (C) 1999-2013 libti* contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "options.h"
|
||||||
|
#include "ui_options.h"
|
||||||
|
#include "global.h"
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
|
||||||
|
Options::Options(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::Options)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
QString path;
|
||||||
|
|
||||||
|
QSettings appSettings("IRGP","QtHPconnect");
|
||||||
|
path=appSettings.value("contentPath").toString();
|
||||||
|
ui->filePath->setText(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Options::accept() {
|
||||||
|
|
||||||
|
QString path;
|
||||||
|
path=ui->filePath->text();
|
||||||
|
QSettings appSettings("IRGP","QtHPconnect");
|
||||||
|
appSettings.setValue("contentPath",path);
|
||||||
|
QDialog::accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Options::reject() {
|
||||||
|
QDialog::reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
Options::~Options()
|
||||||
|
{
|
||||||
|
qDebug()<<"~Options()";
|
||||||
|
delete ui;
|
||||||
|
}
|
135
source/options.ui
Normal file
135
source/options.ui
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Options</class>
|
||||||
|
<widget class="QDialog" name="Options">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>640</width>
|
||||||
|
<height>480</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>621</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>621</width>
|
||||||
|
<height>91</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string extracomment="Set Global Settings"/>
|
||||||
|
</property>
|
||||||
|
<property name="statusTip">
|
||||||
|
<string extracomment="Set Global Settings"/>
|
||||||
|
</property>
|
||||||
|
<property name="whatsThis">
|
||||||
|
<string extracomment="Set Global Settings"/>
|
||||||
|
</property>
|
||||||
|
<property name="accessibleName">
|
||||||
|
<string extracomment="Settings"/>
|
||||||
|
</property>
|
||||||
|
<property name="accessibleDescription">
|
||||||
|
<string extracomment="Global Settings"/>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QLineEdit" name="filePath">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>80</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>521</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>58</width>
|
||||||
|
<height>51</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>File Path:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>18</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Environment</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Options</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Options</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
165
source/texteditor.cpp
Normal file
165
source/texteditor.cpp
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
|
||||||
|
* Copyright (c) 2020 Ian Gebbie.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 or later.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "texteditor.h"
|
||||||
|
#include <QtWidgets>
|
||||||
|
#include <QRect>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
textEditor::textEditor(QWidget *parent) :
|
||||||
|
QTextEdit(parent)
|
||||||
|
{
|
||||||
|
QSettings appSettings("IRGP","QtHPconnect");
|
||||||
|
wParent = parent;
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose);
|
||||||
|
// setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
|
||||||
|
isUntitled = true;
|
||||||
|
|
||||||
|
defaultPath=QDir(appSettings.value("contentPath").toString());
|
||||||
|
qDebug()<<defaultPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void textEditor::newFile()
|
||||||
|
{
|
||||||
|
static int sequenceNumber = 1;
|
||||||
|
|
||||||
|
isUntitled = true;
|
||||||
|
curFile = tr("document%1.txt").arg(sequenceNumber++);
|
||||||
|
setWindowTitle(curFile + "[*]");
|
||||||
|
|
||||||
|
connect(document(), &QTextDocument::contentsChanged,
|
||||||
|
this, &textEditor::documentWasModified);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
bool textEditor::loadFile(const QString &fileName)
|
||||||
|
{
|
||||||
|
QFile file(fileName);
|
||||||
|
if (!file.open(QFile::ReadOnly | QFile::Text)) {
|
||||||
|
QMessageBox::warning(this, tr("MDI"),
|
||||||
|
tr("Cannot read file %1:\n%2.")
|
||||||
|
.arg(fileName)
|
||||||
|
.arg(file.errorString()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextStream in(&file);
|
||||||
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
|
setPlainText(in.readAll());
|
||||||
|
QApplication::restoreOverrideCursor();
|
||||||
|
|
||||||
|
setCurrentFile(fileName);
|
||||||
|
|
||||||
|
connect(document(), &QTextDocument::contentsChanged,
|
||||||
|
this, &textEditor::documentWasModified);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool textEditor::save(QString Calculator)
|
||||||
|
{
|
||||||
|
if (isUntitled) {
|
||||||
|
return saveAs(Calculator);
|
||||||
|
} else {
|
||||||
|
return saveFile(curFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool textEditor::save(QFileInfo file)
|
||||||
|
{
|
||||||
|
if (isUntitled) {
|
||||||
|
return saveAs(file);
|
||||||
|
} else {
|
||||||
|
return saveFile(curFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool textEditor::saveAs(QFileInfo fileinfo)
|
||||||
|
{
|
||||||
|
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
|
||||||
|
fileinfo.absoluteFilePath());
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return saveFile(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool textEditor::saveAs(QString calculaor)
|
||||||
|
{
|
||||||
|
|
||||||
|
// QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
|
||||||
|
// fileinfo.absoluteFilePath());
|
||||||
|
QString fileName=curFile;
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return saveFile(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool textEditor::saveFile(const QString &fileName)
|
||||||
|
{
|
||||||
|
QFileInfo fileinfo(defaultPath,fileName);
|
||||||
|
QFile file(fileinfo.absoluteFilePath());
|
||||||
|
if (!file.open(QFile::WriteOnly | QFile::Text)) {
|
||||||
|
QMessageBox::warning(this, tr("MDI"),
|
||||||
|
tr("Cannot write file %1:\n%2.")
|
||||||
|
.arg(QDir::toNativeSeparators(fileName), file.errorString()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextStream out(&file);
|
||||||
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
|
out << toPlainText();
|
||||||
|
QApplication::restoreOverrideCursor();
|
||||||
|
|
||||||
|
setCurrentFile(fileName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString textEditor::userFriendlyCurrentFile()
|
||||||
|
{
|
||||||
|
return strippedName(curFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
void textEditor::documentWasModified()
|
||||||
|
{
|
||||||
|
setWindowModified(document()->isModified());
|
||||||
|
}
|
||||||
|
|
||||||
|
void textEditor::setCurrentFile(const QString &fileName)
|
||||||
|
{
|
||||||
|
curFile = QFileInfo(fileName).canonicalFilePath();
|
||||||
|
isUntitled = false;
|
||||||
|
document()->setModified(false);
|
||||||
|
setWindowModified(false);
|
||||||
|
setWindowTitle(userFriendlyCurrentFile() + "[*]");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString textEditor::strippedName(const QString &fullFileName)
|
||||||
|
{
|
||||||
|
return QFileInfo(fullFileName).fileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
textEditor::~textEditor() {
|
||||||
|
qDebug()<<"textEditor:: delete";
|
||||||
|
}
|
607
source/treemodel.cpp
Normal file
607
source/treemodel.cpp
Normal file
|
@ -0,0 +1,607 @@
|
||||||
|
/*
|
||||||
|
* QtHP Connect: hand-helds support interface.
|
||||||
|
* Copyright (C) 2019 Ian Gebbie
|
||||||
|
* Code patterns and snippets borrowed from libhpcalcs :
|
||||||
|
* Copyright (C) 1999-2009 Romain Li<EFBFBD>vin
|
||||||
|
* Copyright (C) 2009-2013 Lionel Debroux
|
||||||
|
* Copyright (C) 1999-2013 libti* contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Model to contain the calculator data structure
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "treemodel.h"
|
||||||
|
#include "hptreeitem.h"
|
||||||
|
#include <hp_infodialog.h>
|
||||||
|
#include <hp_mdivariableedit.h>
|
||||||
|
#include <hp_mditexteditor.h>
|
||||||
|
#include <QStringListModel>
|
||||||
|
#include <QMimeData>
|
||||||
|
|
||||||
|
|
||||||
|
//Constructor
|
||||||
|
treeModel::treeModel(QObject *parent)
|
||||||
|
:QStandardItemModel(parent)
|
||||||
|
{
|
||||||
|
setItemPrototype(new hpTreeItem());
|
||||||
|
createRoot();
|
||||||
|
setParent(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Create the start of the tree
|
||||||
|
int treeModel::createRoot()
|
||||||
|
{
|
||||||
|
rootNode = invisibleRootItem();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Create Item
|
||||||
|
AbstractData * treeModel::createData(hp_Data data_in) {
|
||||||
|
|
||||||
|
AbstractData * obj=nullptr;
|
||||||
|
errlog("TreeModel::Creating Data Stucture");
|
||||||
|
|
||||||
|
switch (data_in.type) {
|
||||||
|
case HP_APP: {
|
||||||
|
qDebug()<<"hpCalcData::recvData - Application";
|
||||||
|
Application * obj = new Application(data_in.name,data_in.type);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_LIST: {
|
||||||
|
List * obj = new List(data_in.name,data_in.type);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_MATRIX: {
|
||||||
|
qDebug()<<"hpCalcData::recvData - Matrix";
|
||||||
|
Matrix * obj = new Matrix(data_in.name,data_in.type);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Rework - name should be calc name
|
||||||
|
int treeModel::addCalculator(QString name, hpusb * handle){
|
||||||
|
|
||||||
|
hpCalcData * hpData = new hpCalcData(name, handle);
|
||||||
|
hpTreeItem * hpCalc = new hpTreeItem(name,hpData,0);
|
||||||
|
hpCalc->setType(HP_MAIN);
|
||||||
|
hpCalc->setIcon(QIcon(":/icons/monitor_32x32.png"));
|
||||||
|
hpCalc->setToolTip(QString("Calculator contents"));
|
||||||
|
QObject::connect(hpData, SIGNAL(dataChanged(hp_Change)),hpCalc, SLOT(dataChange(hp_Change)));
|
||||||
|
if (parent()!=nullptr)
|
||||||
|
QObject::connect(hpData, SIGNAL(dataChanged(hp_Change)),parent(), SLOT(dataChange(hp_Change)));
|
||||||
|
setHpCalcData(name,hpData,hpCalc);
|
||||||
|
rootNode->appendRow(hpCalc);
|
||||||
|
hpData->readInfo();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the calculator data within the model
|
||||||
|
hpCalcData * treeModel::getCalculator(QString name){
|
||||||
|
|
||||||
|
hpDataLink hplink;
|
||||||
|
hpCalcData * hpdata = nullptr;
|
||||||
|
|
||||||
|
if (!hpCalcList.isEmpty()) {
|
||||||
|
QMap<QString, hpDataLink>::const_iterator i = hpCalcList.find(name);
|
||||||
|
|
||||||
|
if (i!=hpCalcList.end()) {
|
||||||
|
hplink = i.value();
|
||||||
|
hpdata= hplink.dataItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hpdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
void treeModel::clickAction(QMdiArea * mdiwin,QModelIndex &index) {
|
||||||
|
|
||||||
|
qDebug()<<"row "<<index.row()<<" column "<<index.column();
|
||||||
|
return openFile(mdiwin,index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void treeModel::openFile(QMdiArea * mdiwin, QModelIndex &index) {
|
||||||
|
|
||||||
|
qDebug()<<"treeModel::openFile";
|
||||||
|
hp_mdiTextEdit * hptextedit = nullptr;
|
||||||
|
AbstractData * data=nullptr;
|
||||||
|
hpTreeItem * item=nullptr;
|
||||||
|
QString calc;
|
||||||
|
QString name;
|
||||||
|
|
||||||
|
hp_DataType type;
|
||||||
|
hp_Information hpinfo;
|
||||||
|
hp_infoDialog * hpinfodlg=nullptr;
|
||||||
|
hpCalcData * hpdata=nullptr;
|
||||||
|
hp_mdiVariableEdit * hpvaredit=nullptr;
|
||||||
|
|
||||||
|
item = static_cast<hpTreeItem *>(itemFromIndex(index));
|
||||||
|
data=getData(index);
|
||||||
|
|
||||||
|
if ((data!=nullptr)&&(item!=nullptr)) {
|
||||||
|
calc=item->getCalculatorName();
|
||||||
|
name=item->getFileName();
|
||||||
|
type=data->getType();
|
||||||
|
hpdata=getHpCalcData(calc);
|
||||||
|
switch (type) {
|
||||||
|
case HP_MAIN: {
|
||||||
|
hpinfo=hpdata->getInfo();
|
||||||
|
hpinfodlg = new hp_infoDialog(mdiwin,hpinfo);
|
||||||
|
hpinfodlg->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_NOTE:
|
||||||
|
case HP_PROG: {
|
||||||
|
if (hptextedit==nullptr)
|
||||||
|
hptextedit = new hp_mdiTextEdit(mdiwin,item, data);
|
||||||
|
if (hptextedit!=nullptr)
|
||||||
|
hptextedit ->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HP_CAS:
|
||||||
|
case HP_REAL:
|
||||||
|
case HP_COMPLEX:
|
||||||
|
case HP_LIST:
|
||||||
|
case HP_MATRIX: {
|
||||||
|
if (hpvaredit==nullptr) {
|
||||||
|
if (data!=nullptr) {
|
||||||
|
hpvaredit = new hp_mdiVariableEdit(mdiwin,item,hpdata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hpvaredit!=nullptr)
|
||||||
|
hpvaredit ->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"Null data";
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void treeModel::renameFile(QModelIndex &index,QString newName) {
|
||||||
|
|
||||||
|
qDebug()<<"treeModel::renameFile";
|
||||||
|
|
||||||
|
AbstractData * adata=nullptr;
|
||||||
|
hpTreeItem * item=nullptr;
|
||||||
|
QString calc;
|
||||||
|
QString name;
|
||||||
|
hp_DataType type;
|
||||||
|
hpCalcData * hpdata=nullptr;
|
||||||
|
|
||||||
|
qDebug()<<"row "<<index.row()<<" column "<<index.column();
|
||||||
|
if (index.isValid()) {
|
||||||
|
item = static_cast<hpTreeItem *>(itemFromIndex(index));
|
||||||
|
|
||||||
|
if (item!=nullptr) {
|
||||||
|
|
||||||
|
calc=item->getCalculatorName();
|
||||||
|
name=item->getFileName();
|
||||||
|
qDebug()<<name;
|
||||||
|
type=item->getType();
|
||||||
|
hpdata=getHpCalcData(calc);
|
||||||
|
if (hpdata!=nullptr) {
|
||||||
|
adata=hpdata->getData(name,type);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeModel::renameFile hpdata is null";
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
item->setFileName(newName);
|
||||||
|
adata->setName(newName);
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"Null data";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeModel::renameFile invalid index";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void treeModel::deleteFile( QModelIndex &index) {
|
||||||
|
|
||||||
|
qDebug()<<"treeModel::deleteFile";
|
||||||
|
AbstractData * adata=nullptr;
|
||||||
|
hpTreeItem * item=nullptr;
|
||||||
|
QString calc;
|
||||||
|
QString name;
|
||||||
|
hp_DataType type;
|
||||||
|
hpCalcData * hpdata=nullptr;
|
||||||
|
|
||||||
|
if (index.isValid()) {
|
||||||
|
item = static_cast<hpTreeItem *>(itemFromIndex(index));
|
||||||
|
|
||||||
|
if (item!=nullptr) {
|
||||||
|
|
||||||
|
calc=item->getCalculatorName();
|
||||||
|
name=item->getFileName();
|
||||||
|
qDebug()<<name;
|
||||||
|
type=item->getType();
|
||||||
|
hpdata=getHpCalcData(calc);
|
||||||
|
if (hpdata!=nullptr) {
|
||||||
|
adata=hpdata->getData(name,type);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeMoel::deletFile hpdata is null";
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//delete hpTreeItem
|
||||||
|
// qDebug()<<"row "<<index.row()<<" column "<<index.column();
|
||||||
|
if (removeRow(index.row(),index.parent()))
|
||||||
|
{
|
||||||
|
//qDebug()<<"Deleted";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"Removal failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//delete Data
|
||||||
|
hpdata->deleteData(adata);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"Null data";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeMoel::deleteFile invalid index";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the calculator data within the model
|
||||||
|
hpTreeItem * treeModel::getCalculatorItem(QString name){
|
||||||
|
|
||||||
|
hpDataLink hplink;
|
||||||
|
hpTreeItem * hpitem = nullptr;
|
||||||
|
|
||||||
|
if (!hpCalcList.isEmpty()) {
|
||||||
|
QMap<QString, hpDataLink>::const_iterator i = hpCalcList.find(name);
|
||||||
|
|
||||||
|
if (i!=hpCalcList.end()) {
|
||||||
|
hplink = i.value();
|
||||||
|
hpitem= hplink.treeItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hpitem;
|
||||||
|
}
|
||||||
|
|
||||||
|
//index system for data retrieval
|
||||||
|
//review QStandardItemModel should already have one in place
|
||||||
|
QString treeModel::getLastDataKey() {
|
||||||
|
if (hpCalcList.isEmpty())
|
||||||
|
return QStringLiteral("");
|
||||||
|
else
|
||||||
|
return hpCalcList.lastKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
//manage link between tree and data
|
||||||
|
//A map stores the treeItem, dataItem and in future perhaps the handle in a list
|
||||||
|
// retrievable by a string key
|
||||||
|
hpCalcData * treeModel::getHpCalcData(QString name) const {
|
||||||
|
|
||||||
|
hpDataLink hplink;
|
||||||
|
hpCalcData * hpdata=nullptr;
|
||||||
|
|
||||||
|
if (!hpCalcList.isEmpty()) {
|
||||||
|
QMap<QString, hpDataLink>::const_iterator i = hpCalcList.find(name);
|
||||||
|
|
||||||
|
if (i!=hpCalcList.end()) {
|
||||||
|
hplink = i.value();
|
||||||
|
hpdata= hplink.dataItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hpdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
//manage link between tree and data
|
||||||
|
void treeModel::setHpCalcData(QString name, hpCalcData * data, hpTreeItem * tree ){
|
||||||
|
|
||||||
|
hpDataLink hplink;
|
||||||
|
hplink.dataItem=data;
|
||||||
|
hplink.treeItem=tree;
|
||||||
|
hpCalcList.insert(name,hplink);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Part the the drag and drop system
|
||||||
|
Qt::DropActions treeModel::supportedDropActions() const
|
||||||
|
{
|
||||||
|
return Qt::CopyAction | Qt::MoveAction | Qt::TargetMoveAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString treeModel::getName(QModelIndex index) const {
|
||||||
|
|
||||||
|
QString calc;
|
||||||
|
QString name=QStringLiteral("None");
|
||||||
|
hpTreeItem * item=nullptr;
|
||||||
|
if (index.isValid()) {
|
||||||
|
item = static_cast<hpTreeItem *>(itemFromIndex(index));
|
||||||
|
if (item!=nullptr) {
|
||||||
|
calc=item->getCalculatorName();
|
||||||
|
name=item->getFileName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Return the data object belonging to an item
|
||||||
|
AbstractData * treeModel::getData(QModelIndex index) const {
|
||||||
|
|
||||||
|
AbstractData * adata=nullptr;
|
||||||
|
QString calc;
|
||||||
|
QString name;
|
||||||
|
hp_DataType type;
|
||||||
|
hpTreeItem * item=nullptr;
|
||||||
|
hpCalcData * hpdata=nullptr;
|
||||||
|
if (index.isValid()) {
|
||||||
|
item = static_cast<hpTreeItem *>(itemFromIndex(index));
|
||||||
|
if (item!=nullptr) {
|
||||||
|
calc=item->getCalculatorName();
|
||||||
|
name=item->getFileName();
|
||||||
|
qDebug()<<name;
|
||||||
|
type=item->getType();
|
||||||
|
hpdata=getHpCalcData(calc);
|
||||||
|
if (hpdata!=nullptr) {
|
||||||
|
adata=hpdata->getData(name,type);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeMoel::getData hpdata is null";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeMoel::getData item is null";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeMoel::getData invalid index";
|
||||||
|
}
|
||||||
|
return adata;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Get and pass on the data to be dragged
|
||||||
|
QMimeData* treeModel::mimeData(const QModelIndexList &indexes) const
|
||||||
|
{
|
||||||
|
|
||||||
|
QMimeData *mimeDataPtr = new QMimeData();
|
||||||
|
AbstractData * adata = nullptr;
|
||||||
|
QByteArray mydata;
|
||||||
|
QByteArray datatype;
|
||||||
|
QModelIndex index;
|
||||||
|
|
||||||
|
qDebug()<<"treeModel::mimeData";
|
||||||
|
|
||||||
|
for(int i =0; i<indexes.count(); i++)
|
||||||
|
{
|
||||||
|
index = indexes.at(i);
|
||||||
|
adata = getData(index);
|
||||||
|
if (adata!=nullptr) {
|
||||||
|
qDebug()<<"Data "<<adata->getType();
|
||||||
|
mydata = adata->getData();
|
||||||
|
mimeDataPtr->setText(adata->getName());
|
||||||
|
datatype[0] = adata->getType();
|
||||||
|
mimeDataPtr->setData("application/x-type",datatype);
|
||||||
|
mimeDataPtr->setData("application/x-qabstractmodeldatalist",mydata);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treeModel::mimeData No Data";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return mimeDataPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Allow drop in location
|
||||||
|
bool treeModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Process the drop action
|
||||||
|
bool treeModel::dropMimeData(const QMimeData* md_data, Qt::DropAction action, int row,
|
||||||
|
int column, const QModelIndex &index)
|
||||||
|
{
|
||||||
|
QByteArray data_in;
|
||||||
|
AbstractData * absitem;
|
||||||
|
|
||||||
|
qDebug()<<"treemodel::DropMineData "<<row<<" "<<column;
|
||||||
|
if (action == Qt::IgnoreAction) {
|
||||||
|
qDebug()<<"treemodel::IgnoreAction";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
hpTreeItem * item=nullptr;
|
||||||
|
item = static_cast<hpTreeItem *>(itemFromIndex(index));
|
||||||
|
if (item!=nullptr) {
|
||||||
|
hp_DataType type=HP_MAIN;
|
||||||
|
QStringList formatList;
|
||||||
|
QString mimeType;
|
||||||
|
formatList=md_data->formats();
|
||||||
|
|
||||||
|
foreach(const QString& format, formatList) {
|
||||||
|
qDebug()<<format;
|
||||||
|
for(int i = HP_MAIN; i < HP_SETTINGS; i++) {
|
||||||
|
mimeType=mimetypes[i][1];
|
||||||
|
qDebug()<<mimeType;
|
||||||
|
if( mimeType==format) {
|
||||||
|
type=static_cast<hp_DataType>(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( type!=HP_MAIN) {
|
||||||
|
QString name=md_data->text();
|
||||||
|
data_in=md_data->data(mimetypes[type][1]);
|
||||||
|
|
||||||
|
QDataStream in(&data_in,QIODevice::ReadOnly);
|
||||||
|
|
||||||
|
qDebug()<<"Type="<<type;
|
||||||
|
switch(type) {
|
||||||
|
case HP_NOTE: {
|
||||||
|
absitem = new Notes(name, HP_NOTE,QStringLiteral(""));
|
||||||
|
absitem->parseData(in);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_LIST: {
|
||||||
|
absitem = new List(name, HP_LIST);
|
||||||
|
absitem->parseData(in);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_MATRIX: {
|
||||||
|
absitem = new Matrix(name, HP_MATRIX);
|
||||||
|
absitem->parseData(in);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_PROG: {
|
||||||
|
absitem = new Program(name, HP_PROG, QStringLiteral(""));
|
||||||
|
absitem->parseData(in);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HP_VAR: {
|
||||||
|
absitem = new Variables(name, HP_VAR);
|
||||||
|
absitem->parseData(in);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString calc = item->getCalculatorName();
|
||||||
|
addItem(calc,absitem);
|
||||||
|
|
||||||
|
// qDebug()<<"treemodel::dropMimeData End";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug()<<"treemodel::sropMimeData type not found "<<type;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Find the hpTreeItem of a type in a calculator
|
||||||
|
hpTreeItem * treeModel::findTypeRoot(QString calcName, hp_DataType type) {
|
||||||
|
|
||||||
|
qDebug()<<calcName;
|
||||||
|
hpTreeItem * calc=getCalculatorItem(calcName);
|
||||||
|
hpTreeItem *item;
|
||||||
|
|
||||||
|
// qDebug()<<calc->getGroupName();
|
||||||
|
|
||||||
|
QModelIndex in = calc->index();
|
||||||
|
|
||||||
|
for (int e = 0; e<calc->rowCount(); e++) {
|
||||||
|
QModelIndex si=index(e,0,in);
|
||||||
|
item = static_cast<hpTreeItem *>(itemFromIndex(si));
|
||||||
|
if(item->getType()==type) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//add an object to the correct place in the tree of a calaculator
|
||||||
|
int treeModel::addItem(QString calc, AbstractData * obj) {
|
||||||
|
|
||||||
|
hp_DataType type;
|
||||||
|
hpCalcData * hpdata;
|
||||||
|
|
||||||
|
if (obj!=nullptr) {
|
||||||
|
type = obj->getType();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hpTreeItem * rootitem = findTypeRoot(calc,type);
|
||||||
|
|
||||||
|
if(rootitem!=nullptr) {
|
||||||
|
hpdata=rootitem->getDataStore();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
rootitem->addChild(obj);
|
||||||
|
hpdata->addData(obj);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int treeModel::deleteItem(hpCalcData* hpcalc, AbstractData * obj) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Qt::ItemFlags treeModel::flags(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
Qt::ItemFlags defaultFlags = QStandardItemModel::flags(index);
|
||||||
|
|
||||||
|
if (index.isValid())
|
||||||
|
return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | defaultFlags;
|
||||||
|
else
|
||||||
|
return Qt::ItemIsDropEnabled | defaultFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
int deletCalculator(QString name, hpusb * handle) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int treeModel::deleteAllCalculators() {
|
||||||
|
|
||||||
|
hpDataLink hplink;
|
||||||
|
hpCalcData * hpdata = nullptr;
|
||||||
|
|
||||||
|
foreach(QString key, hpCalcList.keys()) {
|
||||||
|
|
||||||
|
QMap<QString, hpDataLink>::const_iterator i = hpCalcList.find(key);
|
||||||
|
hplink=i.value();
|
||||||
|
delete(hplink.dataItem);
|
||||||
|
hpCalcList.remove(key);
|
||||||
|
}
|
||||||
|
hpCalcList.clear();
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
treeModel::~treeModel() {
|
||||||
|
|
||||||
|
deleteAllCalculators();
|
||||||
|
|
||||||
|
qDebug()<<"treeModel:: delete";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
37
source/variableview.cpp
Normal file
37
source/variableview.cpp
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* QtHP Connect: hand-helds support interface.
|
||||||
|
* Copyright (C) 2019 Ian Gebbie
|
||||||
|
* Code patterns and snippets borrowed from libhpcalcs :
|
||||||
|
* Copyright (C) 1999-2009 Romain Li<EFBFBD>vin
|
||||||
|
* Copyright (C) 2009-2013 Lionel Debroux
|
||||||
|
* Copyright (C) 1999-2013 libti* contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "variableview.h"
|
||||||
|
#include "ui_variableview.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
variableView::variableView(QWidget *)
|
||||||
|
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose);
|
||||||
|
}
|
||||||
|
|
||||||
|
variableView::~variableView()
|
||||||
|
{
|
||||||
|
qDebug()<<"delete variableView";
|
||||||
|
delete ui;
|
||||||
|
}
|
28
source/variableview.ui
Normal file
28
source/variableview.ui
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>variableView</class>
|
||||||
|
<widget class="QWidget" name="variableView">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>347</width>
|
||||||
|
<height>358</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTableView" name="variableList">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
308
source/vartablemodel.cpp
Normal file
308
source/vartablemodel.cpp
Normal file
|
@ -0,0 +1,308 @@
|
||||||
|
/*
|
||||||
|
* QtHP Connect: hand-helds support interface.
|
||||||
|
* Copyright (C) 2019 Ian Gebbie
|
||||||
|
* Code patterns and snippets borrowed from libhpcalcs :
|
||||||
|
* Copyright (C) 1999-2009 Romain Li<EFBFBD>vin
|
||||||
|
* Copyright (C) 2009-2013 Lionel Debroux
|
||||||
|
* Copyright (C) 1999-2013 libti* contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <QFile>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
#include "global.h"
|
||||||
|
#include "vartablemodel.h"
|
||||||
|
|
||||||
|
const QStringList varTableModel::real_header={ "A",
|
||||||
|
"B",
|
||||||
|
"C",
|
||||||
|
"D",
|
||||||
|
"E",
|
||||||
|
"F",
|
||||||
|
"G",
|
||||||
|
"H",
|
||||||
|
"I",
|
||||||
|
"J",
|
||||||
|
"K",
|
||||||
|
"L",
|
||||||
|
"M",
|
||||||
|
"N",
|
||||||
|
"o",
|
||||||
|
"P",
|
||||||
|
"Q",
|
||||||
|
"R",
|
||||||
|
"S",
|
||||||
|
"T",
|
||||||
|
"U",
|
||||||
|
"V",
|
||||||
|
"W",
|
||||||
|
"X",
|
||||||
|
"Y",
|
||||||
|
"Z",
|
||||||
|
"THETA"
|
||||||
|
};
|
||||||
|
|
||||||
|
const QStringList varTableModel::complex_header={ "Z0",
|
||||||
|
"Z1",
|
||||||
|
"Z2",
|
||||||
|
"Z3",
|
||||||
|
"Z4",
|
||||||
|
"Z5",
|
||||||
|
"Z6",
|
||||||
|
"Z7",
|
||||||
|
"Z8",
|
||||||
|
"Z9"
|
||||||
|
};
|
||||||
|
|
||||||
|
varTableModel::varTableModel(QObject *parent,
|
||||||
|
AbstractData * data,
|
||||||
|
QString file,
|
||||||
|
hp_DataType dtype)
|
||||||
|
:QAbstractTableModel(parent)
|
||||||
|
{
|
||||||
|
q_parent=parent;
|
||||||
|
dataobj = data;
|
||||||
|
filename=file;
|
||||||
|
type=dtype;
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
//REWORK!
|
||||||
|
QModelIndex varTableModel::parent(const QModelIndex &index) const {
|
||||||
|
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::ItemFlags varTableModel::flags(const QModelIndex &index) const {
|
||||||
|
|
||||||
|
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
|
||||||
|
}
|
||||||
|
|
||||||
|
//rework!
|
||||||
|
QModelIndex varTableModel::index(int row, int column, const QModelIndex &parent) const {
|
||||||
|
|
||||||
|
return createIndex(row,column);
|
||||||
|
}
|
||||||
|
|
||||||
|
//alter the data table if data is edited
|
||||||
|
bool varTableModel::setData(const QModelIndex &index, const QVariant &value, int role) {
|
||||||
|
|
||||||
|
qDebug()<<"Data Changed";
|
||||||
|
|
||||||
|
if (type==HP_LIST) {
|
||||||
|
List * list;
|
||||||
|
list = static_cast<List *>(dataobj);
|
||||||
|
list->setItem(index.row(),value.toString(),value.toReal());
|
||||||
|
ismodified=true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (type==HP_MATRIX) {
|
||||||
|
Matrix * matrix;
|
||||||
|
matrix = static_cast<Matrix *>(dataobj);
|
||||||
|
matrix->setItem(index.row(),index.column(),value.toString(),value.toReal());
|
||||||
|
ismodified=true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (type==HP_REAL) {
|
||||||
|
Real * real;
|
||||||
|
real = static_cast<Real *>(dataobj);
|
||||||
|
// item = real->getItem(index.row());
|
||||||
|
// return item;
|
||||||
|
}
|
||||||
|
if (type==HP_COMPLEX) {
|
||||||
|
Complex * complex;
|
||||||
|
complex = static_cast<Complex *>(dataobj);
|
||||||
|
// item = complex->getItem(index.row());
|
||||||
|
// return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void varTableModel::setup()
|
||||||
|
{
|
||||||
|
ismodified=false;
|
||||||
|
// if (hpcalc) {
|
||||||
|
|
||||||
|
// dataobj=hpcalc->getData(filename,type);
|
||||||
|
|
||||||
|
// qDebug()<<"varTableModel: type"<<dataobj->getType();
|
||||||
|
// }
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int varTableModel::rowCount(const QModelIndex & parent) const
|
||||||
|
{
|
||||||
|
int size=16; //should be zero
|
||||||
|
if (type==HP_LIST) {
|
||||||
|
List * list;
|
||||||
|
list = static_cast<List *>(dataobj);
|
||||||
|
size= list->getListSize()+1;
|
||||||
|
}
|
||||||
|
if (type==HP_REAL) {
|
||||||
|
Real * real;
|
||||||
|
real = static_cast<Real *>(dataobj);
|
||||||
|
size= real->getListSize();
|
||||||
|
}
|
||||||
|
if (type==HP_COMPLEX) {
|
||||||
|
Complex * complex;
|
||||||
|
complex = static_cast<Complex *>(dataobj);
|
||||||
|
size= complex->getListSize();
|
||||||
|
}
|
||||||
|
if (type==HP_MATRIX) {
|
||||||
|
Matrix * matrix;
|
||||||
|
matrix = static_cast<Matrix *>(dataobj);
|
||||||
|
size= matrix->getMatrixRows()+1;
|
||||||
|
// qDebug()<<matrix->getName()<<" row"<<size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int varTableModel::columnCount(const QModelIndex & /*parent*/) const
|
||||||
|
{
|
||||||
|
int size=1;
|
||||||
|
if (type==HP_MATRIX) {
|
||||||
|
Matrix * matrix;
|
||||||
|
matrix = static_cast<Matrix *>(dataobj);
|
||||||
|
size= matrix->getMatrixColumns()+1;
|
||||||
|
// qDebug()<<matrix->getName()<<" column"<<size;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (type==HP_COMPLEX) {
|
||||||
|
Complex * complex;
|
||||||
|
complex = static_cast<Complex *>(dataobj);
|
||||||
|
// size= matrix->getMatrixColumns();
|
||||||
|
// qDebug()<<matrix->getName()<<" column"<<size;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void varTableModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) {
|
||||||
|
|
||||||
|
ismodified=true;
|
||||||
|
qDebug()<<"Data Changed "<<ismodified;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QVariant varTableModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if (role == Qt::DisplayRole) {
|
||||||
|
|
||||||
|
QString item=QStringLiteral("-");
|
||||||
|
|
||||||
|
if (type==HP_LIST) {
|
||||||
|
List * list;
|
||||||
|
list = static_cast<List *>(dataobj);
|
||||||
|
item = list->getItem(index.row());
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
if (type==HP_MATRIX) {
|
||||||
|
Matrix * matrix;
|
||||||
|
matrix = static_cast<Matrix *>(dataobj);
|
||||||
|
item = matrix->getItem(index.row(),index.column());
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
if (type==HP_REAL) {
|
||||||
|
Real * real;
|
||||||
|
real = static_cast<Real *>(dataobj);
|
||||||
|
item = real->getItem(index.row());
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
if (type==HP_COMPLEX) {
|
||||||
|
Complex * complex;
|
||||||
|
complex = static_cast<Complex *>(dataobj);
|
||||||
|
item = complex->getItem(index.row());
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QString("Row%1, Column%2")
|
||||||
|
.arg(index.row() + 1)
|
||||||
|
.arg(index.column() +1);
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant varTableModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
if (role != Qt::DisplayRole) {
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (orientation == Qt::Horizontal) {
|
||||||
|
if (type==HP_REAL) {
|
||||||
|
return QString("%1").arg(section+1);
|
||||||
|
}
|
||||||
|
return QString("%1").arg(section+1);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (orientation == Qt::Vertical) {
|
||||||
|
if (type==HP_REAL) {
|
||||||
|
if (section < real_header.size()) {
|
||||||
|
return real_header.at(section);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return QString("%1").arg(section);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type==HP_COMPLEX) {
|
||||||
|
if (section < complex_header.size()) {
|
||||||
|
return complex_header.at(section);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return QString("%1").arg(section);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return QString("%1").arg(section);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool varTableModel::getData(QDataStream &ds) {
|
||||||
|
|
||||||
|
// QByteArray out;
|
||||||
|
// out.clear();
|
||||||
|
if(dataobj!=nullptr) {
|
||||||
|
dataobj->getData(ds);
|
||||||
|
// out=dataobj->fileOut();
|
||||||
|
// qDebug()<<out;
|
||||||
|
// ds<<out;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool varTableModel::isModified() {
|
||||||
|
return ismodified;
|
||||||
|
}
|
||||||
|
|
||||||
|
void varTableModel::resetModified() {
|
||||||
|
ismodified=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
varTableModel::~varTableModel() {
|
||||||
|
qDebug()<<"Entering ~varTableModel()";
|
||||||
|
}
|
Loading…
Reference in a new issue