diff options
Diffstat (limited to 'Swift/QtUI/tmp/QtRosterContextMenu.cpp')
-rw-r--r-- | Swift/QtUI/tmp/QtRosterContextMenu.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/Swift/QtUI/tmp/QtRosterContextMenu.cpp b/Swift/QtUI/tmp/QtRosterContextMenu.cpp new file mode 100644 index 0000000..a59a2f7 --- /dev/null +++ b/Swift/QtUI/tmp/QtRosterContextMenu.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swift/QtUI/ContextMenus/QtRosterContextMenu.h" + +#include <QInputDialog> +#include <QLineEdit> +#include <QMenu> +#include <QDebug> +#include <QDialog> +#include <QMessageBox> + +#include <boost/shared_ptr.hpp> +#include <boost/smart_ptr/make_shared.hpp> + +#include "Swiften/Roster/ContactRosterItem.h" +#include "Swiften/Roster/GroupRosterItem.h" +#include "Swiften/Base/String.h" +#include "Swiften/Roster/Roster.h" +#include "Swift/Controllers/UIEvents/UIEvent.h" +#include "Swift/Controllers/UIEvents/RemoveRosterItemUIEvent.h" +#include "Swift/Controllers/UIEvents/RenameRosterItemUIEvent.h" +#include "Swift/QtUI/QtSwiftUtil.h" +#include "Swift/QtUI/QtEditContactDialog.h" + + +namespace Swift { + +QtRosterContextMenu::QtRosterContextMenu(UIEventStream* eventStream, QtTreeWidget* treeWidget) : eventStream_(eventStream), treeWidget_(treeWidget), item_(NULL) { +} + +void QtRosterContextMenu::show(RosterItem* item) { + ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item); + item_ = item; + QMenu contextMenu; + if (contact) { + contextMenu.addAction("Edit", this, SLOT(handleEditContact())); + } + GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item); + if (group) { + contextMenu.addAction("Rename", this, SLOT(handleRenameGroup())); + } + contextMenu.exec(QCursor::pos()); +} + +void QtRosterContextMenu::handleEditContact() { + ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item_); + assert(contact); + + // Figure out all the groups the contact is in + QList<QString> allGroups; + foreach (RosterItem* item, treeWidget_->getRoster()->getRoot()->getChildren()) { + GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item); + if (group) { + allGroups.push_back(P2QSTRING(group->getDisplayName())); + } + } + + QtEditContactDialog editDialog(contact, allGroups, eventStream_); + + if (groupDialog.exec() == QDialog::Accepted) { + eventStream_->send(groupDialog.getRegroupEvent()); + } + + /* ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item_); + QMessageBox msgBox; + msgBox.setWindowTitle("Confirm contact deletion"); + msgBox.setText("Are you sure you want to delete this contact?"); + msgBox.setInformativeText(QString("This will remove the contact '%1' from all groups they may be in.").arg(P2QSTRING(contact->getJID().toString()))); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + int ret = msgBox.exec(); + if (ret == QMessageBox::Yes) { + eventStream_->send(boost::shared_ptr<UIEvent>(new RemoveRosterItemUIEvent(contact->getJID()))); + }*/ + + +/* bool ok; + QString newName = QInputDialog::getText(NULL, "Rename contact", "New name for " + P2QSTRING(item_->getDisplayName()), QLineEdit::Normal, P2QSTRING(item_->getDisplayName()), &ok); + if (ok) { + eventStream_->send(boost::shared_ptr<UIEvent>(new RenameRosterItemUIEvent(contact->getJID(), Q2PSTRING(newName)))); + }*/ +} + +void QtRosterContextMenu::handleRenameGroup() { + /* + GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item_); + assert(group); + bool ok; + QString newName = QInputDialog::getText(NULL, "Rename group", "New name for " + P2QSTRING(item_->getDisplayName()), QLineEdit::Normal, P2QSTRING(item_->getDisplayName()), &ok); + if (ok) { + std::vector<String> addedGroups; + std::vector<String> removedGroups; + addedGroups.push_back(Q2PSTRING(newName)); + removedGroups.push_back(group->getDisplayName()); + foreach (RosterItem* child, group->getChildren()) { + ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(child); + assert(contact); + eventStream_->send(boost::make_shared<RegroupRosterItemUIEvent>(contact->getJID(), addedGroups, removedGroups)); + } + } + */ +} + +} |