chargeControlBox_cfgFile/JsonTreeItem.cpp

164 lines
3.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "JsonTreeItem.h"
JsonTreeItem::JsonTreeItem(JsonTreeItem *parent)
:theParentItem(parent)
,theItemType(JsonTreeItem::None)
,theItemDatas({{0,"[Key]"},{1,"[Value]"}}) //默认两行
{
}
JsonTreeItem::JsonTreeItem(const QHash<int, QVariant> &datas, JsonTreeItem::JsonItemType type, JsonTreeItem *parent)
:theParentItem(parent)
,theItemType(type)
,theItemDatas(datas)
{
}
JsonTreeItem::~JsonTreeItem()
{
deleteAllChild();
}
bool JsonTreeItem::insertChild(int row, JsonTreeItem *child)
{
if(row<0||row>theChildItems.count())
return false;
theChildItems.insert(row,child);
child->setParentItem(this);
return true;
}
bool JsonTreeItem::removeChild(int row)
{
if(row<0||row+1>theChildItems.count())
return false;
delete theChildItems.takeAt(row);
return true;
}
bool JsonTreeItem::insertChildren(int row, int count)
{
if(row<0||row>theChildItems.count())
return false;
for(int i=0;i<count;i++){
JsonTreeItem *item=new JsonTreeItem(this);
//目前还没有delegate来自定义操作所以new item默认为json Value类型
item->setType(JsonTreeItem::Value);
//这里新增的次序无所谓row+i
theChildItems.insert(row,item);
}
return true;
}
bool JsonTreeItem::removeChildren(int row, int count)
{
if (row<0||row+count>theChildItems.count())
return false;
for(int i=0;i<count;i++){
delete theChildItems.takeAt(row+i);
}
return true;
}
void JsonTreeItem::appendChild(JsonTreeItem *child)
{
theChildItems.append(child);
child->setParentItem(this);
}
void JsonTreeItem::deleteAllChild()
{
qDeleteAll(theChildItems);
theChildItems.clear();
}
JsonTreeItem *JsonTreeItem::childItem(int row)
{
return theChildItems.value(row);
}
JsonTreeItem *JsonTreeItem::parentItem()
{
return theParentItem;
}
void JsonTreeItem::setParentItem(JsonTreeItem *parent)
{
theParentItem=parent;
}
int JsonTreeItem::childCount() const
{
return theChildItems.count();
}
int JsonTreeItem::columnCount() const
{
return theItemDatas.count();
}
QVariant JsonTreeItem::data(int column) const
{
return theItemDatas.value(column,QVariant());
}
void JsonTreeItem::setData(int column, const QVariant &val)
{
theItemDatas.insert(column,val);
}
int JsonTreeItem::row() const
{
if(theParentItem)
return theParentItem->theChildItems.indexOf(const_cast<JsonTreeItem*>(this));
return 0;
}
bool JsonTreeItem::editable(int column) const
{
//在保留默认结构的情况下
//root的key-value都不可编辑
//-->parent:nullptr
//array下级的key不可编辑
//-->parent:array
//array或object的value不可编辑
//-->type()
//此外如果希望key不可变column==0返回false即可
if((!theParentItem||!theParentItem->parentItem())||
((0==column)&&(theParentItem->type()==JsonTreeItem::Array))||
((1==column)&&((type()==JsonTreeItem::Array)||(type()==JsonTreeItem::Object))))
return false;
return true;
}
QString JsonTreeItem::key() const
{
return theItemDatas.value(0,"").toString();
}
void JsonTreeItem::setKey(const QString &key)
{
theItemDatas[0]=key;
}
QVariant JsonTreeItem::value() const
{
return theItemDatas.value(1,0);
}
void JsonTreeItem::setValue(const QVariant &value)
{
theItemDatas[1]=value;
}
JsonTreeItem::JsonItemType JsonTreeItem::type() const
{
return theItemType;
}
void JsonTreeItem::setType(JsonTreeItem::JsonItemType type)
{
theItemType=type;
}