/*
* 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 .
*/
#include "hptreeitem.h"
#include "global.h"
#include "hpdata.h"
#include "hp_mditexteditor.h"
#include "hp_infodialog.h"
#include "hp_settingsdlg.h"
#include
#include
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; isetType(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"<getData(getFileName(),getType());
if(data!=nullptr) {
qDebug()<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()<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 "<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:"<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; jdataAt(j);
if (obj) {
for (i=0; igetFileName();
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; igetFileName();
type=ti_child->getType();
for (j=0; jdataAt(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; igetFileName();
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(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"<