/* * Copyright 2008-2009 Ben Boeckel * * This program 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 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ // Header include #include "ObjectUI.h" // Sigmodr widget includes #include "ValidationDialog.h" // Sigmod includes #include // KDE includes #include #include // KDE includes #include using namespace Sigmod; using namespace Sigmodr::Widgets; ObjectUI::ObjectUI(Object* object, QWidget* parent) : QWidget(parent), m_object(object), m_validator(NULL) { setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(changed(bool)), SLOT(setChanged(bool))); connect(this, SIGNAL(customContextMenuRequested(QPoint)), SLOT(contextMenu(QPoint))); emit(changed(false)); } ObjectUI::~ObjectUI() { } const Object* ObjectUI::object() const { return m_object; } Object* ObjectUI::object() { return m_object; } void ObjectUI::apply() { emit(changed(false)); emit(saved()); } void ObjectUI::discard() { emit(changed(false)); } void ObjectUI::setWidget(QWidget* widget) { QVBoxLayout* layout = new QVBoxLayout; layout->addWidget(widget); setLayout(layout); } void ObjectUI::setChanged(const bool changed) { m_changed = changed; } void ObjectUI::contextMenu(const QPoint& pos) { KMenu* menu = new KMenu; menu->addAction("&Apply", this, SLOT(apply())); menu->addAction("&Discard", this, SLOT(discard())); menu->addSeparator(); KAction* validate = new KAction("&Validate", this); connect(validate, SIGNAL(triggered()), this, SLOT(validate())); validate->setEnabled(!m_changed); menu->addAction(validate); menu->popup(mapToGlobal(pos)); } void ObjectUI::validate() { if (m_changed) apply(); if (m_validator) delete m_validator; m_validator = new ValidationDialog(m_object, this); m_validator->show(); }