/* * 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 . */ /* * QtToolBar.cpp * * Created on: Apr 26, 2012 * Author: ankele */ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include "QtToolBar.hpp" #include "CodePatterns/MemDebug.hpp" #include "CodePatterns/Observer/Notification.hpp" #include "Actions/ActionQueue.hpp" QtToolBar::QtToolBar(QWidget * _parent) : QToolBar(_parent), Observer("QToolBar"), ActionQueue_observing(false), undoaction(addActionItem("undo", "undo the last Action", "edit-undo")), redoaction(addActionItem("redo", "redo the last Action", "edit-redo")) { // gray out undo/redo buttons initially undoaction->setEnabled(false); redoaction->setEnabled(false); // sign in MoleCuilder::ActionQueue::getInstance().signOn(this, MoleCuilder::ActionQueue::ActionQueued); ActionQueue_observing = true; } QtToolBar::~QtToolBar() { // sign off if (ActionQueue_observing) MoleCuilder::ActionQueue::getInstance().signOff(this, MoleCuilder::ActionQueue::ActionQueued); } QAction * QtToolBar::addActionItem( const std::string &token, const std::string &description, const std::string &icon_name) { QAction *action = addAction(QString(description.c_str())); action->setIcon(FavActions.getIcon(token, icon_name)); action->setToolTip(QString(description.c_str())); QtMenuPipe *pipe = new QtMenuPipe(token,action); QObject::connect(action, SIGNAL(triggered()),pipe,SLOT(called())); plumbing.push_back(pipe); present_actions.insert( token ); return action; } void QtToolBar::addFavoriteActionItems(const unsigned int _max) { // separate favorite actions addSeparator(); FavActions.addToolBarActions(*this, _max); } void QtToolBar::update(Observable *publisher) { ASSERT(0, "QtToolBar::update() - this should never be called, we are only subscribed to channels."); } void QtToolBar::subjectKilled(Observable *publisher) { ActionQueue_observing = false; } void QtToolBar::recieveNotification(Observable *publisher, Notification_ptr notification) { if (dynamic_cast(publisher) != NULL) { switch(notification->getChannelNo()) { case MoleCuilder::ActionQueue::ActionQueued: undoaction->setEnabled(MoleCuilder::ActionQueue::getInstance().canUndo()); redoaction->setEnabled(MoleCuilder::ActionQueue::getInstance().canRedo()); break; default: ASSERT(0, "QtToolBar::recieveNotification() - cannot get here, not subscribed to channel " +toString(notification->getChannelNo())); break; } } else { ASSERT(0, "QtToolBar::recieveNotification() - cannot get here, we are only subscribed to ActionQueue."); } }