summaryrefslogtreecommitdiffstats
path: root/quanta/project/teammembersdlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quanta/project/teammembersdlg.cpp')
-rw-r--r--quanta/project/teammembersdlg.cpp263
1 files changed, 263 insertions, 0 deletions
diff --git a/quanta/project/teammembersdlg.cpp b/quanta/project/teammembersdlg.cpp
new file mode 100644
index 00000000..bd159186
--- /dev/null
+++ b/quanta/project/teammembersdlg.cpp
@@ -0,0 +1,263 @@
+/***************************************************************************
+ teammembersdlg.cpp - description
+ -------------------
+ begin : Wed Jul 7 2004
+ copyright : (C) 2004 Andras Mantia <[email protected]>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+//qt includes
+#include <qlabel.h>
+
+//kde includes
+#include <kcombobox.h>
+#include <kdialogbase.h>
+#include <klineedit.h>
+#include <klistview.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+//app includes
+#include "teammembersdlg.h"
+#include "membereditdlg.h"
+#include "project.h"
+
+#define NAME_COL 0
+#define NICKNAME_COL 1
+#define EMAIL_COL 2
+#define ROLE_COL 3
+#define TASK_COL 4
+#define SUBPROJECT_COL 5
+
+
+extern QString simpleMemberStr;
+extern QString taskLeaderStr;
+extern QString teamLeaderStr;
+extern QString subprojectLeaderStr;
+
+TeamMembersDlg::TeamMembersDlg(QWidget *parent, const char *name)
+ : TeamMembersDlgS(parent, name)
+{
+ m_yourself = "";
+}
+
+
+TeamMembersDlg::~TeamMembersDlg()
+{
+}
+
+void TeamMembersDlg::slotAddMember()
+{
+ KDialogBase addDlg(this, "add_member", true, i18n("New Member"), KDialogBase::Ok | KDialogBase::Cancel);
+ MemberEditDlg memberDlg(&addDlg);
+ addDlg.setMainWidget(&memberDlg);
+ bool result;
+ do {
+ result = addDlg.exec();
+ if (result)
+ {
+ QString name = memberDlg.nameCombo->currentText();
+ QString role = memberDlg.roleCombo->currentText();
+ QString task = memberDlg.taskEdit->text();
+ QString subProject = memberDlg.subprojectCombo->currentText();
+ QString nickName = memberDlg.nicknameEdit->text();
+ QString email = memberDlg.emailEdit->text();
+ if (name.isEmpty())
+ {
+ KMessageBox::error(this, i18n("The member name cannot be empty."));
+ addDlg.show();
+ } else
+ if (nickName.isEmpty())
+ {
+ KMessageBox::error(this, i18n("The nickname cannot be empty as it is used as a unique identifier."));
+ addDlg.show();
+ } else
+ if (!checkDuplicates(0L, name, nickName, email, role, task, subProject))
+ {
+ addDlg.show();
+ } else
+ {
+ QListViewItem *item = new QListViewItem(membersListView, name, nickName, email, role, task);
+ if (memberDlg.subprojectCombo->isEnabled())
+ item->setText(SUBPROJECT_COL, subProject);
+ result = false;
+ }
+ }
+ } while (result);
+}
+
+void TeamMembersDlg::slotEditMember()
+{
+ QListViewItem *item =membersListView->currentItem();
+ if (!item) return;
+ KDialogBase editDlg(this, "edit_member", true, i18n("Edit Member"), KDialogBase::Ok | KDialogBase::Cancel);
+ MemberEditDlg memberDlg(&editDlg);
+ memberDlg.selectMember(item->text(NAME_COL));
+ memberDlg.nicknameEdit->setText(item->text(NICKNAME_COL));
+ memberDlg.emailEdit->setText(item->text(EMAIL_COL));
+ QString role = item->text(ROLE_COL);
+ for (int i = 0; i < memberDlg.roleCombo->count(); i++)
+ {
+ if (memberDlg.roleCombo->text(i) == role)
+ {
+ memberDlg.roleCombo->setCurrentItem(i);
+ memberDlg.slotRoleSelected(role);
+ break;
+ }
+ }
+ memberDlg.taskEdit->setText(item->text(TASK_COL));
+ int idx = 0;
+ int subprojectIdx = 0;
+ QValueList<SubProject> *subprojects = Project::ref()->subprojects();
+ for (QValueList<SubProject>::ConstIterator it = subprojects->constBegin(); it != subprojects->constEnd(); ++it)
+ {
+ if (item->text(SUBPROJECT_COL) == (*it).name)
+ {
+ subprojectIdx = idx;
+ break;
+ }
+ idx++;
+ }
+ memberDlg.subprojectCombo->setCurrentItem(subprojectIdx);
+
+ editDlg.setMainWidget(&memberDlg);
+ bool result;
+ do {
+ result = editDlg.exec();
+ if (result)
+ {
+ QString name = memberDlg.nameCombo->currentText();
+ QString nickName = memberDlg.nicknameEdit->text();
+ QString email = memberDlg.emailEdit->text();
+ QString role = memberDlg.roleCombo->currentText();
+ QString task = memberDlg.taskEdit->text();
+ QString subProject = memberDlg.subprojectCombo->currentText();
+ if (name.isEmpty())
+ {
+ KMessageBox::error(this, i18n("The member name cannot be empty."));
+ editDlg.show();
+ } else
+ if (nickName.isEmpty())
+ {
+ KMessageBox::error(this, i18n("The nickname cannot be empty as it is used as a unique identifier."));
+ editDlg.show();
+ } else
+ if (!checkDuplicates(item, name, nickName, email, role, task, subProject))
+ {
+ editDlg.show();
+ } else
+ {
+ item->setText(NAME_COL, name);
+ item->setText(NICKNAME_COL, nickName);
+ item->setText(EMAIL_COL, email);
+ item->setText(ROLE_COL, role);
+ item->setText(TASK_COL, task);
+ if (memberDlg.subprojectCombo->isEnabled())
+ item->setText(SUBPROJECT_COL, subProject);
+ result = false;
+ }
+ }
+ } while (result);
+}
+
+void TeamMembersDlg::slotDeleteMember()
+{
+ QListViewItem *item =membersListView->currentItem();
+ if (!item) return;
+
+ bool deleteYourself = (item->text(NICKNAME_COL) == m_yourself);
+ QListViewItemIterator it(membersListView);
+ while ( it.current() )
+ {
+ if (item != it.current() && it.current()->text(NICKNAME_COL) == m_yourself)
+ {
+ deleteYourself = false;
+ break;
+ }
+ ++it;
+ }
+
+ if (deleteYourself)
+ {
+ if (KMessageBox::warningContinueCancel(this, i18n("<qt>Are you sure that you want to remove yourself (<b>%1</b>) from the project team?<br>If you do so, you should select another member as yourself.</qt>").arg(item->text(NAME_COL)), i18n("Delete Member"), KStdGuiItem::del()) == KMessageBox::Continue)
+ {
+ delete item;
+ setYourself("");
+ }
+ } else
+ if (KMessageBox::warningContinueCancel(this, i18n("<qt>Are you sure that you want to remove <b>%1</b> from the project team?</qt>").arg(item->text(NAME_COL)), i18n("Delete Member"), KStdGuiItem::del()) == KMessageBox::Continue)
+ {
+ delete item;
+ }
+}
+
+bool TeamMembersDlg::checkDuplicates(QListViewItem *item, const QString &name, const QString &nickName, const QString &email, const QString &role, const QString &task, const QString &subProject)
+{
+ QString s;
+ QString nick;
+ QListViewItemIterator it(membersListView);
+ while ( it.current() )
+ {
+ s = it.current()->text(ROLE_COL);
+ nick = it.current()->text(NICKNAME_COL);
+ if (item != it.current() && s == role &&
+ (role == i18n(teamLeaderStr.utf8()) ||
+ (role == i18n(taskLeaderStr.utf8()) && it.current()->text(TASK_COL) == task) ||
+ (role == i18n(subprojectLeaderStr.utf8()) && it.current()->text(SUBPROJECT_COL) == subProject)
+ ) )
+ {
+ if (KMessageBox::warningYesNo(this, i18n("<qt>The <b>%1</b> role is already assigned to <b>%2</b>. Do you want to reassign it to the current member?</qt>").arg(role).arg(it.current()->text(NAME_COL)), QString::null, i18n("Reassign"), i18n("Do Not Reassign")) == KMessageBox::Yes)
+ {
+ it.current()->setText(ROLE_COL, i18n(simpleMemberStr.utf8()));
+ return true;
+ }
+ else
+ return false;
+ } else
+ if (nick.lower() == nickName.lower() && it.current() != item && (it.current()->text(EMAIL_COL) != email || it.current()->text(NAME_COL) != name))
+ {
+ KMessageBox::error(this, i18n("<qt>The <b>%1</b> nickname is already assigned to <b>%2 &lt;%3&gt;</b>.</qt>").arg(nickName).arg(it.current()->text(NAME_COL)).arg(it.current()->text(EMAIL_COL)));
+ return false;
+ }
+ ++it;
+ }
+ return true;
+}
+
+void TeamMembersDlg::slotSetToYourself()
+{
+ QListViewItem *item =membersListView->currentItem();
+ if (!item) return;
+ yourselfLabel->setText(item->text(NAME_COL) + " <" + item->text(EMAIL_COL) + ">");
+ m_yourself = item->text(NICKNAME_COL);
+}
+
+void TeamMembersDlg::setYourself(const QString &name)
+{
+ m_yourself = name;
+ if (name.isEmpty())
+ {
+ yourselfLabel->setText(i18n("Please select your identity from the member list."));
+ return;
+ }
+ QListViewItemIterator it(membersListView);
+ while ( it.current() )
+ {
+ if (it.current()->text(NICKNAME_COL).lower() == name.lower())
+ {
+ yourselfLabel->setText(it.current()->text(NAME_COL)+ " <" + it.current()->text(EMAIL_COL) + ">");
+ break;
+ }
+ ++it;
+ }
+}
+
+#include "teammembersdlg.moc"
+