mirror of
https://github.com/Indy970/QtHPConnect
synced 2024-12-24 21:59:13 +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
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = QtHPConnect
|
||||
TEMPLATE = app
|
||||
CONFIG += c++11
|
||||
|
||||
# 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
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
VERSION_MAJOR = HP_MAJOR_VERSION
|
||||
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.
|
||||
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||
# 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.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
|
||||
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 \
|
||||
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
|
||||
mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
hidapi/hidapi.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
|
||||
mainwindow.h
|
||||
|
||||
FORMS += \
|
||||
mainwindow.ui \
|
||||
variableview.ui \
|
||||
hp_mdiwindow.ui \
|
||||
getnumber.ui \
|
||||
hp_infodialog.ui \
|
||||
hp_settingsdlg.ui \
|
||||
options.ui
|
||||
mainwindow.ui
|
||||
|
||||
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../usr/local/lib/release/ -lhpcalcs
|
||||
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../usr/local/lib/debug/ -lhpcalcs
|
||||
else:unix: LIBS +=
|
||||
|
||||
#-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
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
|
|
@ -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