/* * Copyright (C) 2008,2009,2010 Thorsten Liebig (Thorsten.Liebig@gmx.de) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ #include #include #include "QCSTreeWidget.h" #include "QCSXCAD_Global.h" QCSTreeWidget::QCSTreeWidget(ContinuousStructure* CS, QWidget * parent) : QTreeWidget(parent) { clCS=CS; setColumnCount(2); setColumnWidth(0,200); // setColumnWidth(1,16); setHeaderLabels(QStringList(tr("Properties / Primitives"))<setDragEnabled(true); // qTree->setAcceptDrops(true); // qTree->setDropIndicatorShown(true); QObject::connect(this,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(Edit(QTreeWidgetItem*,int))); QObject::connect(this,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(Clicked(QTreeWidgetItem*,int))); } QCSTreeWidget::~QCSTreeWidget() { } CSProperties* QCSTreeWidget::GetCurrentProperty() { QTreeWidgetItem* curr=currentItem(); if (curr==NULL) return NULL; if (curr->type()==PRIMTYPE) curr=curr->parent(); if (curr==NULL) return NULL; return clCS->GetProperty(indexOfTopLevelItem(curr)); } CSPrimitives* QCSTreeWidget::GetCurrentPrimitive() { QTreeWidgetItem* curr=currentItem(); if (curr==NULL) return NULL; if (curr->type()!=PRIMTYPE) return NULL; return clCS->GetPrimitiveByID(curr->data(0,1).toInt()); } void QCSTreeWidget::AddPrimItem(CSPrimitives* prim) { if (prim==NULL) return; int propID=clCS->GetIndex(prim->GetProperty()); if (propID<0) return; QTreeWidgetItem* parent = topLevelItem(propID); if (parent==NULL) return; QString str = QString(prim->GetTypeName().c_str()); str+=QString(" - ID: %1").arg(prim->GetID()); QTreeWidgetItem* newPrimItem = new QTreeWidgetItem(parent,QStringList(str),1); newPrimItem->setData(0,1,QVariant(prim->GetID())); vPrimItems.push_back(newPrimItem); } void QCSTreeWidget::AddPropItem(CSProperties* prop) { QString str; if (prop==NULL) return; str=QString(prop->GetTypeXMLString().c_str())+"::"; str+=QString::fromUtf8(prop->GetName().c_str()); QTreeWidgetItem* newItem = new QTreeWidgetItem(this,QStringList(str),0); newItem->setFont(0,QFont("Arial",10)); if (prop->GetVisibility()) newItem->setIcon(1,QIcon(":/images/bulb.png")); else newItem->setIcon(1,QIcon(":/images/bulb_off.png")); } QTreeWidgetItem* QCSTreeWidget::GetTreeItemByPrimID(int primID) { for (int n=0;ndata(0,1).toInt()==primID) return vPrimItems.at(n); return NULL; } int QCSTreeWidget::GetTreeItemIndexByPrimID(int primID) { for (int n=0;ndata(0,1).toInt()==primID) return n; return -1; } void QCSTreeWidget::DeletePrimItem(CSPrimitives* prim) { int index=GetTreeItemIndexByPrimID(prim->GetID()); QTreeWidgetItem* item; if ((index>=0) && (indexGetIndex(prop); QTreeWidgetItem* parent = topLevelItem(index); if (parent==NULL) return; delete parent; } void QCSTreeWidget::RefreshItem(int index) { CSProperties* prop=clCS->GetProperty(index); if (prop==NULL) return; QTreeWidgetItem* item = topLevelItem(index); if (item==NULL) return; QString str=QString(prop->GetTypeXMLString().c_str())+"::"; str+=QString::fromUtf8(prop->GetName().c_str()); item->setText(0,str); if (prop->GetVisibility()) item->setIcon(1,QIcon(":/images/bulb.png")); else item->setIcon(1,QIcon(":/images/bulb_off.png")); } void QCSTreeWidget::contextMenuEvent(QContextMenuEvent *event) { QMenu menu(this); if (QCSX_Settings.GetEdit()) { QMenu* primM = menu.addMenu(QIcon(":/images/edit_add.png"),tr("New Primitive")); primM->addAction(tr("Box"),this,SIGNAL(NewBox())); primM->addAction(tr("Multi-Box"),this,SIGNAL(NewMultiBox())); primM->addAction(tr("Sphere"),this,SIGNAL(NewSphere())); primM->addAction(tr("Cylinder"),this,SIGNAL(NewCylinder())); primM->addAction(tr("User Defined"),this,SIGNAL(NewUserDefined())); QMenu* propM = menu.addMenu(QIcon(":/images/edit_add.png"),tr("New Property")); propM->addAction(tr("Material"),this,SIGNAL(NewMaterial())); propM->addAction(tr("Metal"),this,SIGNAL(NewMetal())); propM->addAction(tr("Excitation"),this,SIGNAL(NewExcitation())); propM->addAction(tr("Probe-Box"),this,SIGNAL(NewChargeBox())); propM->addAction(tr("Res-Box"),this,SIGNAL(NewResBox())); propM->addAction(tr("Dump-Box"),this,SIGNAL(NewDumpBox())); menu.addSeparator(); menu.addAction(QIcon(":/images/edit.png"),tr("Edit"),this,SIGNAL(Edit())); menu.addAction(QIcon(":/images/editcopy.png"),tr("Copy"),this,SIGNAL(Copy())); menu.addAction(QIcon(":/images/edit_remove.png"),tr("Delete"),this,SIGNAL(Delete())); } else { menu.addAction(QIcon(":/images/edit.png"),tr("View"),this,SIGNAL(Edit())); } menu.exec(event->globalPos()); } void QCSTreeWidget::UpdateTree() { ClearTree(); for (size_t i=0;iGetQtyProperties();++i) { QString str; CSProperties* prop=clCS->GetProperty(i); if (prop==NULL) break; AddPropItem(prop); } std::vector vPrims = clCS->GetAllPrimitives(); for (size_t i=0;iclear(); vPrimItems.clear(); } void QCSTreeWidget::SwitchProperty(CSPrimitives* prim, CSProperties* newProp) { int index=GetTreeItemIndexByPrimID(prim->GetID()); QTreeWidgetItem *item=NULL; if ((index>=0) && (indexparent(); if (parent==NULL) return; QTreeWidgetItem *newParent = topLevelItem(clCS->GetIndex(newProp)); if (newParent==NULL) return; parent->takeChild(parent->indexOfChild(item)); newParent->addChild(item); } void QCSTreeWidget::collapseAll() { for (int i=0;itype()!=PRIMTYPE) return; emit Edit(); } void QCSTreeWidget::Clicked(QTreeWidgetItem * item, int column) { if (item==NULL) return; if (item->type()!=PROPTYPE) return; if (column==1) {emit ShowHide();} }