/* * Project: MoleCuilder * Description: creates and alters molecular systems * Copyright (C) 2010-2012 University of Bonn. All rights reserved. * * * This file is part of MoleCuilder. * * MoleCuilder 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 2 of the License, or * (at your option) any later version. * * MoleCuilder 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 MoleCuilder. If not, see . */ /* * QtShapeList.cpp * * Created on: Sep 14, 2012 * Author: ankele */ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include "Views/Qt4/QtShapeList.hpp" #include #include "CodePatterns/MemDebug.hpp" #include "CodePatterns/Observer/Notification.hpp" #include "Shapes/ShapeFactory.hpp" #include "Shapes/ShapeRegistry.hpp" #include #include "Actions/SelectionAction/Shapes/ShapeByNameAction.hpp" #include "Actions/SelectionAction/Shapes/NotShapeByNameAction.hpp" using namespace std; const int QtShapeList::COLUMNCOUNT = COLUMNTYPES_MAX; const char *QtShapeList::COLUMNNAMES[QtShapeList::COLUMNCOUNT]={"Name","Type","Center","Radius"}; QtShapeList::QtShapeList(QWidget * _parent) : QTreeWidget (_parent), Observer("QtShapeList") { setColumnCount(COLUMNCOUNT); setSelectionMode(QAbstractItemView::MultiSelection); QStringList header; for(int i=0; i(publisher) == ShapeRegistry::getPointer()) { switch (notification->getChannelNo()) { case ShapeRegistry::ShapeInserted: { refill(NULL); break; } case ShapeRegistry::ShapeRemoved: { refill(ShapeRegistry::getInstance().lastChanged()); break; } case ShapeRegistry::SelectionChanged: { refill(NULL); break; } default: ASSERT(0, "QtShapeList::recieveNotification() - we cannot get here."); break; } } else ASSERT(0, "QtShapeList::recieveNotification() - received notification from unknown source."); } void QtShapeList::refill(::Shape *ignore) { clearing = true; clear(); shapeSelection.clear(); ShapeRegistry ® = ShapeRegistry::getInstance(); ShapeFactory &factory = ShapeFactory::getInstance(); ShapeRegistry::const_iterator iter; for (iter = reg.getBeginIter(); iter != reg.getEndIter(); iter ++){ ::Shape *s = iter->second; if (s == ignore) continue; QTreeWidgetItem *treeItem = new QTreeWidgetItem(this); treeItem->setText(NAME, QString(s->getName().c_str())); treeItem->setText(TYPE, QString(factory.getShapeName(s->getType()).c_str())); treeItem->setText(CENTER, QString(toString(s->getCenter()).c_str())); treeItem->setText(RADIUS, QString::number(s->getRadius())); treeItem->setSelected(reg.isSelected(s)); shapeSelection.push_back(reg.isSelected(s)); } clearing = false; } #if 0 void QtShapeList::paintEvent(QPaintEvent * event) { /*if (dirty) refill();*/ QtShapeList::paintEvent(event); } #endif void QtShapeList::subjectKilled(Observable *publisher) { } void QtShapeList::rowSelected() { if (clearing) return; if (selecting) return; //std::cout << "rowSelected\n"; selecting = true; for (int i=0;iisSelected(); if (newSelection != shapeSelection[i]){ shapeSelection[i] = newSelection; std::string shapeName = item->text(NAME).toStdString(); if (newSelection) MoleCuilder::SelectionShapeByName(shapeName); else MoleCuilder::SelectionNotShapeByName(shapeName); } } selecting = false; }