/*
 * 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 .
 */
/*
 * QtShapeController.cpp
 *
 *  Created on: Oct 25, 2012
 *      Author: ankele
 */
// include config.h
#ifdef HAVE_CONFIG_H
#include 
#endif
#include "Views/Qt4/QtShapeController.hpp"
#include "Views/Qt4/QtShapeList.hpp"
#include "Menu/Qt4/QtMenuPipe.hpp"
#include 
#include
#include
#include
#include 
#include 
//#include "CodePatterns/MemDebug.hpp"
using namespace std;
QtShapeController::QtShapeController(QWidget * _parent) :
    QWidget (_parent)
{
  // Create the widgets.
  QLabel *label = new QLabel("Shapes");
  QtShapeList *shapeList = new QtShapeList;
  QPushButton *createButton = new QPushButton(QIcon(QIcon::fromTheme("edit-add")), "create");
  QPushButton *editButton = new QPushButton(QIcon(QIcon::fromTheme("edit")), "edit");
  QPushButton *deleteButton = new QPushButton(QIcon(QIcon::fromTheme("edit-delete")), "delete");
  // Create layout.
  QVBoxLayout *shapeBox = new QVBoxLayout;
  shapeBox->setMargin(0);
  QHBoxLayout *buttonBox = new QHBoxLayout;
  buttonBox->addWidget(createButton);
  buttonBox->addWidget(editButton);
  buttonBox->addWidget(deleteButton);
  setLayout(shapeBox);
  shapeBox->addWidget(label);
  shapeBox->addWidget(shapeList);
  shapeBox->addLayout(buttonBox);
  // Create/connect the actions.
  QAction *action = new QAction(QString("create shape"), createButton);
  QtMenuPipe *pipe = new QtMenuPipe("create-shape", action);
  QObject::connect(action, SIGNAL(triggered()),pipe,SLOT(called()));
  plumbing.push_back(pipe);
  QObject::connect(createButton, SIGNAL(clicked()),action,SIGNAL(triggered()));
  QMenu *editMenu = new QMenu();
  pipe = new QtMenuPipe("combine-shapes", action);
  action = new QAction(QIcon::fromTheme("zoom-best-fit"), tr("combine"), this);
  connect(action, SIGNAL(triggered()), pipe, SLOT(called()));
  editMenu->addAction(action);
  pipe = new QtMenuPipe("translate-shapes", action);
  action = new QAction(QIcon::fromTheme("zoom-best-fit"), tr("translate"), this);
  connect(action, SIGNAL(triggered()), pipe, SLOT(called()));
  editMenu->addAction(action);
  pipe = new QtMenuPipe("rotate-shapes", action);
  action = new QAction(QIcon::fromTheme("zoom-best-fit"), tr("rotate"), this);
  connect(action, SIGNAL(triggered()), pipe, SLOT(called()));
  editMenu->addAction(action);
  pipe = new QtMenuPipe("stretch-shapes", action);
  action = new QAction(QIcon::fromTheme("zoom-best-fit"), tr("stretch"), this);
  connect(action, SIGNAL(triggered()), pipe, SLOT(called()));
  editMenu->addAction(action);
  editButton->setMenu(editMenu);
  action = new QAction(QString("remove shapes"), deleteButton);
  pipe = new QtMenuPipe("remove-shape", action);
  QObject::connect(action, SIGNAL(triggered()),pipe,SLOT(called()));
  plumbing.push_back(pipe);
  QObject::connect(deleteButton, SIGNAL(clicked()),action,SIGNAL(triggered()));
}
QtShapeController::~QtShapeController()
{
  for(std::list::iterator it=plumbing.begin(); it != plumbing.end(); it++)
    delete (*it);
}