mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-28 02:24:18 -04:00
Moved the tag feature in messages from the gui to the libretroshare.
Changed rsmsg interface and item classes so need full recompile. Created new notifier for tag changes - NOTIFY_LIST_MESSAGE_TAGS. Changed serialiser tests for message items. After that all tags are reset to standard and all assigned tags to messages are lost. Please delete the file msg_locale.cfg in your profile directory. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3381 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
340982b996
commit
52183a0c75
18 changed files with 708 additions and 515 deletions
|
@ -42,6 +42,7 @@
|
|||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsfiles.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
/* Images for context menu icons */
|
||||
#define IMAGE_MESSAGE ":/images/folder-draft.png"
|
||||
|
@ -83,17 +84,6 @@
|
|||
#define ACTION_TAGS_TAG 1
|
||||
#define ACTION_TAGS_NEWTAG 2
|
||||
|
||||
#define CONFIG_FILE (RsInit::RsProfileConfigDirectory() + "/msg_locale.cfg")
|
||||
|
||||
#define CONFIG_SECTION_UNREAD "Unread"
|
||||
|
||||
#define CONFIG_SECTION_TAGS "Tags"
|
||||
#define CONFIG_KEY_TEXT "Text"
|
||||
#define CONFIG_KEY_COLOR "Color"
|
||||
|
||||
#define CONFIG_SECTION_TAG "Tag"
|
||||
#define CONFIG_KEY_TAG "Tag"
|
||||
|
||||
class MessagesItemDelegate : public QItemDelegate
|
||||
{
|
||||
public:
|
||||
|
@ -189,6 +179,11 @@ MessagesDialog::LockUpdate::~LockUpdate ()
|
|||
}
|
||||
}
|
||||
|
||||
void MessagesDialog::LockUpdate::setUpdate(bool bUpdate)
|
||||
{
|
||||
m_bUpdate = bUpdate;
|
||||
}
|
||||
|
||||
static int FilterColumnFromComboBox(int nIndex)
|
||||
{
|
||||
switch (nIndex) {
|
||||
|
@ -239,7 +234,6 @@ MessagesDialog::MessagesDialog(QWidget *parent)
|
|||
m_bProcessSettings = false;
|
||||
m_bInChange = false;
|
||||
m_nLockUpdate = 0;
|
||||
m_pConfig = new RSettings (CONFIG_FILE);
|
||||
|
||||
connect( ui.messagestreeView, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( messageslistWidgetCostumPopupMenu( QPoint ) ) );
|
||||
connect( ui.msgList, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( msgfilelistWidgetCostumPopupMenu( QPoint ) ) );
|
||||
|
@ -403,8 +397,6 @@ MessagesDialog::~MessagesDialog()
|
|||
|
||||
// save settings
|
||||
processSettings(false);
|
||||
|
||||
delete (m_pConfig);
|
||||
}
|
||||
|
||||
void MessagesDialog::processSettings(bool bLoad)
|
||||
|
@ -459,168 +451,11 @@ void MessagesDialog::processSettings(bool bLoad)
|
|||
m_bProcessSettings = false;
|
||||
}
|
||||
|
||||
static void getMessageTags (RSettings *pConfig, QString msgId, QList<int> &tagIds)
|
||||
{
|
||||
pConfig->beginGroup(CONFIG_SECTION_TAG);
|
||||
|
||||
int nSize = pConfig->beginReadArray(msgId);
|
||||
|
||||
for (int i = 0; i < nSize; i++) {
|
||||
pConfig->setArrayIndex(i);
|
||||
int nTagId = pConfig->value(CONFIG_KEY_TAG).toInt();
|
||||
tagIds.push_back(nTagId);
|
||||
}
|
||||
pConfig->endArray();
|
||||
|
||||
pConfig->endGroup();
|
||||
}
|
||||
|
||||
static void setMessageTags (RSettings *pConfig, QString &msgId, QList<int> &tagIds)
|
||||
{
|
||||
pConfig->beginGroup(CONFIG_SECTION_TAG);
|
||||
|
||||
pConfig->remove(msgId);
|
||||
|
||||
if (tagIds.size()) {
|
||||
pConfig->beginWriteArray(msgId, tagIds.size());
|
||||
|
||||
int i = 0;
|
||||
for (QList<int>::iterator tagId = tagIds.begin(); tagId != tagIds.end(); tagId++) {
|
||||
pConfig->setArrayIndex(i++);
|
||||
pConfig->setValue(CONFIG_KEY_TAG, *tagId);
|
||||
}
|
||||
pConfig->endArray();
|
||||
}
|
||||
|
||||
pConfig->endGroup();
|
||||
}
|
||||
|
||||
/*static*/ void MessagesDialog::initStandardTagItems(std::map<int, TagItem> &Items)
|
||||
{
|
||||
// create standard enties ... id = sort, maybe later own member
|
||||
Items [-5].text = tr("Important");
|
||||
Items [-5].color = QColor(255, 0, 0).rgb();
|
||||
|
||||
Items [-4].text = tr("Work");
|
||||
Items [-4].color = QColor(255, 153, 0).rgb();
|
||||
|
||||
Items [-3].text = tr("Personal");
|
||||
Items [-3].color = QColor(0, 153, 0).rgb();
|
||||
|
||||
Items [-2].text = tr("Todo");
|
||||
Items [-2].color = QColor(51, 51, 255).rgb();
|
||||
|
||||
Items [-1].text = tr("Later");
|
||||
Items [-1].color = QColor(153, 51, 153).rgb();
|
||||
}
|
||||
|
||||
void MessagesDialog::getTagItems(std::map<int, TagItem> &Items)
|
||||
{
|
||||
initStandardTagItems (Items);
|
||||
|
||||
// create standard enties
|
||||
initStandardTagItems(Items);
|
||||
|
||||
// load user tags and colors
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_TAGS);
|
||||
|
||||
QStringList ids = m_pConfig->childGroups();
|
||||
for (QStringList::iterator id = ids.begin(); id != ids.end(); id++) {
|
||||
int nId = 0;
|
||||
std::istringstream instream((*id).toStdString());
|
||||
instream >> nId;
|
||||
|
||||
m_pConfig->beginGroup(*id);
|
||||
|
||||
TagItem Item;
|
||||
if (nId < 0) {
|
||||
// standard tag
|
||||
Item = Items[nId];
|
||||
} else {
|
||||
Item.text = m_pConfig->value(CONFIG_KEY_TEXT).toString();
|
||||
}
|
||||
Item.color = m_pConfig->value(CONFIG_KEY_COLOR, Item.color).toUInt();
|
||||
|
||||
m_pConfig->endGroup();
|
||||
|
||||
Items [nId] = Item;
|
||||
}
|
||||
|
||||
m_pConfig->endGroup();
|
||||
}
|
||||
|
||||
void MessagesDialog::setTagItems(std::map<int, TagItem> &Items)
|
||||
{
|
||||
// process deleted tags
|
||||
QList<int> tagIdsToDelete;
|
||||
std::map<int, TagItem>::iterator Item;
|
||||
for (Item = Items.begin(); Item != Items.end(); Item++) {
|
||||
if (Item->second._delete) {
|
||||
tagIdsToDelete.push_back(Item->first);
|
||||
}
|
||||
}
|
||||
|
||||
if (tagIdsToDelete.size()) {
|
||||
// iterate all saved tags on messages and remove the id's
|
||||
|
||||
// get all msgIds with tags
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_TAG);
|
||||
QStringList msgIds = m_pConfig->childGroups();
|
||||
m_pConfig->endGroup();
|
||||
|
||||
for (QStringList::iterator msgId = msgIds.begin(); msgId != msgIds.end(); msgId++) {
|
||||
QList<int> tagIds;
|
||||
getMessageTags (m_pConfig, *msgId, tagIds);
|
||||
|
||||
bool bSave = false;
|
||||
|
||||
for (QList<int>::iterator tagIdToDelete = tagIdsToDelete.begin(); tagIdToDelete != tagIdsToDelete.end(); tagIdToDelete++) {
|
||||
QList<int>::iterator tagId = qFind(tagIds.begin(), tagIds.end(), *tagIdToDelete);
|
||||
if (tagId != tagIds.end()) {
|
||||
tagIds.erase(tagId);
|
||||
bSave = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (bSave) {
|
||||
setMessageTags (m_pConfig, *msgId, tagIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// save tags
|
||||
m_pConfig->remove(CONFIG_SECTION_TAGS);
|
||||
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_TAGS);
|
||||
|
||||
for (Item = Items.begin(); Item != Items.end(); Item++) {
|
||||
if (Item->second._delete) {
|
||||
continue;
|
||||
}
|
||||
|
||||
QString sId;
|
||||
sId.sprintf("%d", Item->first);
|
||||
m_pConfig->beginGroup(sId);
|
||||
|
||||
if (Item->first > 0) {
|
||||
m_pConfig->setValue(CONFIG_KEY_TEXT, Item->second.text);
|
||||
}
|
||||
m_pConfig->setValue(CONFIG_KEY_COLOR, Item->second.color);
|
||||
|
||||
m_pConfig->endGroup();
|
||||
}
|
||||
|
||||
m_pConfig->endGroup();
|
||||
|
||||
fillTags();
|
||||
insertMessages();
|
||||
}
|
||||
|
||||
void MessagesDialog::fillTags()
|
||||
{
|
||||
std::map<int, TagItem> TagItems;
|
||||
std::map<int, TagItem>::iterator Item;
|
||||
getTagItems(TagItems);
|
||||
MsgTagType Tags;
|
||||
rsMsgs->getMessageTagTypes(Tags);
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
|
||||
// create tag menu
|
||||
QMenu *pMenu = new MessagesMenu (tr("Tag"), this);
|
||||
|
@ -629,10 +464,11 @@ void MessagesDialog::fillTags()
|
|||
|
||||
bool bUser = false;
|
||||
|
||||
QString text;
|
||||
QAction *pAction;
|
||||
QMap<QString, QVariant> Values;
|
||||
|
||||
if (TagItems.size()) {
|
||||
if (Tags.types.size()) {
|
||||
pAction = new QAction(tr("Remove All Tags"), pMenu);
|
||||
Values [ACTION_TAGSINDEX_TYPE] = ACTION_TAGS_REMOVEALL;
|
||||
Values [ACTION_TAGSINDEX_ID] = 0;
|
||||
|
@ -642,15 +478,20 @@ void MessagesDialog::fillTags()
|
|||
|
||||
pMenu->addSeparator();
|
||||
|
||||
for (Item = TagItems.begin(); Item != TagItems.end(); Item++) {
|
||||
pAction = new QAction(Item->second.text, pMenu);
|
||||
for (Tag = Tags.types.begin(); Tag != Tags.types.end(); Tag++) {
|
||||
if (Tag->first < RS_MSGTAGTYPE_USER) {
|
||||
text = tr(Tag->second.first.c_str());
|
||||
} else {
|
||||
text = QString::fromStdString(Tag->second.first);
|
||||
}
|
||||
pAction = new QAction(text, pMenu);
|
||||
Values [ACTION_TAGSINDEX_TYPE] = ACTION_TAGS_TAG;
|
||||
Values [ACTION_TAGSINDEX_ID] = Item->first;
|
||||
Values [ACTION_TAGSINDEX_COLOR] = Item->second.color;
|
||||
Values [ACTION_TAGSINDEX_ID] = Tag->first;
|
||||
Values [ACTION_TAGSINDEX_COLOR] = QRgb(Tag->second.second);
|
||||
pAction->setData (Values);
|
||||
pAction->setCheckable(true);
|
||||
|
||||
if (Item->first > 0 && bUser == false) {
|
||||
if (Tag->first >= RS_MSGTAGTYPE_USER && bUser == false) {
|
||||
bUser = true;
|
||||
pMenu->addSeparator();
|
||||
}
|
||||
|
@ -675,7 +516,7 @@ void MessagesDialog::fillTags()
|
|||
|
||||
// save current selection
|
||||
QListWidgetItem *pItem = ui.tagWidget->currentItem();
|
||||
int nSelectecTagId = 0;
|
||||
uint32_t nSelectecTagId = 0;
|
||||
if (pItem) {
|
||||
nSelectecTagId = pItem->data(Qt::UserRole).toInt();
|
||||
}
|
||||
|
@ -683,14 +524,19 @@ void MessagesDialog::fillTags()
|
|||
QListWidgetItem *pItemToSelect = NULL;
|
||||
|
||||
ui.tagWidget->clear();
|
||||
for (Item = TagItems.begin(); Item != TagItems.end(); Item++) {
|
||||
pItem = new QListWidgetItem (Item->second.text, ui.tagWidget);
|
||||
pItem->setForeground(QBrush(QColor(Item->second.color)));
|
||||
for (Tag = Tags.types.begin(); Tag != Tags.types.end(); Tag++) {
|
||||
if (Tag->first < RS_MSGTAGTYPE_USER) {
|
||||
text = tr(Tag->second.first.c_str());
|
||||
} else {
|
||||
text = QString::fromStdString(Tag->second.first);
|
||||
}
|
||||
pItem = new QListWidgetItem (text, ui.tagWidget);
|
||||
pItem->setForeground(QBrush(QColor(Tag->second.second)));
|
||||
pItem->setIcon(QIcon(":/images/foldermail.png"));
|
||||
pItem->setData(Qt::UserRole, Item->first);
|
||||
pItem->setData(Qt::UserRole + 1, Item->second.text); // for updateMessageSummaryList
|
||||
pItem->setData(Qt::UserRole, Tag->first);
|
||||
pItem->setData(Qt::UserRole + 1, text); // for updateMessageSummaryList
|
||||
|
||||
if (Item->first == nSelectecTagId) {
|
||||
if (Tag->first == nSelectecTagId) {
|
||||
pItemToSelect = pItem;
|
||||
}
|
||||
}
|
||||
|
@ -1211,15 +1057,23 @@ void MessagesDialog::changeTag(int)
|
|||
m_bInChange = false;
|
||||
}
|
||||
|
||||
static void InitIconAndFont(RSettings *pConfig, QStandardItem *pItem [COLUMN_COUNT], int nFlag)
|
||||
void MessagesDialog::messagesTagsChanged()
|
||||
{
|
||||
if (m_nLockUpdate) {
|
||||
return;
|
||||
}
|
||||
|
||||
fillTags();
|
||||
insertMessages();
|
||||
}
|
||||
|
||||
static void InitIconAndFont(QStandardItem *pItem [COLUMN_COUNT], int nFlag)
|
||||
{
|
||||
QString sText = pItem [COLUMN_SUBJECT]->text();
|
||||
QString mid = pItem [COLUMN_DATA]->data(ROLE_MSGID).toString();
|
||||
|
||||
bool bNew = (nFlag & RS_MSG_NEW);
|
||||
|
||||
// show the real "New" state
|
||||
if (bNew) {
|
||||
if (nFlag & RS_MSG_NEW) {
|
||||
if (sText.startsWith("Re:", Qt::CaseInsensitive)) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied.png"));
|
||||
} else if (sText.startsWith("Fwd:", Qt::CaseInsensitive)) {
|
||||
|
@ -1240,13 +1094,7 @@ static void InitIconAndFont(RSettings *pConfig, QStandardItem *pItem [COLUMN_COU
|
|||
pItem[COLUMN_SUBJECT]->setIcon(QIcon());
|
||||
}
|
||||
|
||||
// show the locale "New" state
|
||||
if (bNew == false) {
|
||||
// check locale config
|
||||
pConfig->beginGroup(CONFIG_SECTION_UNREAD);
|
||||
bNew = pConfig->value(mid, false).toBool();
|
||||
pConfig->endGroup();
|
||||
}
|
||||
bool bNew = nFlag & (RS_MSG_NEW | RS_MSG_UNREAD_BY_USER);
|
||||
|
||||
// set icon
|
||||
if (bNew) {
|
||||
|
@ -1291,7 +1139,7 @@ void MessagesDialog::insertMessages()
|
|||
unsigned int msgbox = 0;
|
||||
bool bTrash = false;
|
||||
bool bFill = true;
|
||||
int nTagId = 0;
|
||||
uint32_t nTagId = 0;
|
||||
|
||||
switch (m_eListMode) {
|
||||
case LIST_NOTHING:
|
||||
|
@ -1356,8 +1204,8 @@ void MessagesDialog::insertMessages()
|
|||
}
|
||||
|
||||
if (bFill) {
|
||||
std::map<int, TagItem> TagItems;
|
||||
getTagItems(TagItems);
|
||||
MsgTagType Tags;
|
||||
rsMsgs->getMessageTagTypes(Tags);
|
||||
|
||||
/* search messages */
|
||||
std::list<MsgInfoSummary> msgToShow;
|
||||
|
@ -1376,9 +1224,9 @@ void MessagesDialog::insertMessages()
|
|||
}
|
||||
}
|
||||
} else if (m_eListMode == LIST_TAG) {
|
||||
QList<int> tagIds;
|
||||
getMessageTags (m_pConfig, QString::fromStdString(it->msgId), tagIds);
|
||||
if (qFind(tagIds.begin(), tagIds.end(), nTagId) == tagIds.end()) {
|
||||
MsgTagInfo tagInfo;
|
||||
rsMsgs->getMessageTag(it->msgId, tagInfo);
|
||||
if (std::find(tagInfo.tagIds.begin(), tagInfo.tagIds.end(), nTagId) == tagInfo.tagIds.end()) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
|
@ -1539,27 +1387,44 @@ void MessagesDialog::insertMessages()
|
|||
item[COLUMN_DATA]->setData(msgId, ROLE_MSGID);
|
||||
|
||||
// Init icon and font
|
||||
InitIconAndFont(m_pConfig, item, it->msgflags);
|
||||
InitIconAndFont(item, it->msgflags);
|
||||
|
||||
// Tags
|
||||
QList<int> tagIds;
|
||||
getMessageTags (m_pConfig, msgId, tagIds);
|
||||
qSort(tagIds.begin(), tagIds.end());
|
||||
MsgTagInfo tagInfo;
|
||||
rsMsgs->getMessageTag(it->msgId, tagInfo);
|
||||
|
||||
text.clear();
|
||||
|
||||
for (QList<int>::iterator tagId = tagIds.begin(); tagId != tagIds.end(); tagId++) {
|
||||
// build tag names
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
for (std::list<uint32_t>::iterator tagId = tagInfo.tagIds.begin(); tagId != tagInfo.tagIds.end(); tagId++) {
|
||||
if (text.isEmpty() == false) {
|
||||
text += ",";
|
||||
}
|
||||
text += TagItems[*tagId].text;
|
||||
Tag = Tags.types.find(*tagId);
|
||||
if (Tag != Tags.types.end()) {
|
||||
if (Tag->first < RS_MSGTAGTYPE_USER) {
|
||||
text += tr(Tag->second.first.c_str());
|
||||
} else {
|
||||
text += QString::fromStdString(Tag->second.first);
|
||||
}
|
||||
} else {
|
||||
// clean tagId
|
||||
rsMsgs->setMessageTag(it->msgId, *tagId, false);
|
||||
}
|
||||
}
|
||||
item[COLUMN_TAGS]->setText(text);
|
||||
|
||||
// set color
|
||||
QBrush Brush; // standard
|
||||
if (tagIds.size()) {
|
||||
Brush = QBrush(TagItems [tagIds [0]].color);
|
||||
if (tagInfo.tagIds.size()) {
|
||||
Tag = Tags.types.find(tagInfo.tagIds.front());
|
||||
if (Tag != Tags.types.end()) {
|
||||
Brush = QBrush(Tag->second.second);
|
||||
} else {
|
||||
// clean tagId
|
||||
rsMsgs->setMessageTag(it->msgId, tagInfo.tagIds.front(), false);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < COLUMN_COUNT; i++) {
|
||||
item[i]->setForeground(Brush);
|
||||
|
@ -1671,26 +1536,13 @@ void MessagesDialog::setMsgAsReadUnread(const QList<int> &Rows, bool bRead)
|
|||
item[nCol] = MessagesModel->item(Rows [nRow], nCol);
|
||||
}
|
||||
|
||||
QString mid = item[COLUMN_DATA]->data(ROLE_MSGID).toString();
|
||||
std::string mid = item[COLUMN_DATA]->data(ROLE_MSGID).toString().toStdString();
|
||||
|
||||
if (bRead) {
|
||||
// set as read in config
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_UNREAD);
|
||||
m_pConfig->setValue(mid, false);
|
||||
m_pConfig->endGroup();
|
||||
// set message to read
|
||||
rsMsgs->MessageRead(mid.toStdString());
|
||||
} else {
|
||||
// set as unread in config
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_UNREAD);
|
||||
m_pConfig->setValue(mid, true);
|
||||
m_pConfig->endGroup();
|
||||
if (rsMsgs->MessageRead(mid, !bRead)) {
|
||||
InitIconAndFont(item, bRead ? 0 : RS_MSG_UNREAD_BY_USER);
|
||||
}
|
||||
|
||||
InitIconAndFont(m_pConfig, item, 0);
|
||||
}
|
||||
|
||||
|
||||
// LockUpdate
|
||||
}
|
||||
|
||||
|
@ -1784,15 +1636,16 @@ void MessagesDialog::insertMsgTxtAndFiles(QModelIndex Index, bool bSetToRead)
|
|||
bool bSetToReadOnActive = Settings->getMsgSetToReadOnActivate();
|
||||
|
||||
if (msgInfo.msgflags & RS_MSG_NEW) {
|
||||
// set to read
|
||||
setMsgAsReadUnread(Rows, true);
|
||||
// set always to read or unread
|
||||
if (bSetToReadOnActive == false || bSetToRead == false) {
|
||||
// set locally to unread
|
||||
setMsgAsReadUnread(Rows, false);
|
||||
} else {
|
||||
setMsgAsReadUnread(Rows, true);
|
||||
}
|
||||
updateMessageSummaryList();
|
||||
} else {
|
||||
if (bSetToRead && bSetToReadOnActive) {
|
||||
if ((msgInfo.msgflags & RS_MSG_UNREAD_BY_USER) && bSetToRead && bSetToReadOnActive) {
|
||||
// set to read
|
||||
setMsgAsReadUnread(Rows, true);
|
||||
updateMessageSummaryList();
|
||||
|
@ -1968,15 +1821,6 @@ void MessagesDialog::removemessage()
|
|||
if (bDelete) {
|
||||
rsMsgs->MessageDelete(mid.toStdString());
|
||||
|
||||
// clean locale config
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_UNREAD);
|
||||
m_pConfig->remove (mid);
|
||||
m_pConfig->endGroup();
|
||||
|
||||
// remove tag
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_TAG);
|
||||
m_pConfig->remove (mid);
|
||||
m_pConfig->endGroup();
|
||||
} else {
|
||||
rsMsgs->MessageToTrash(mid.toStdString(), true);
|
||||
}
|
||||
|
@ -1988,7 +1832,7 @@ void MessagesDialog::removemessage()
|
|||
|
||||
void MessagesDialog::undeletemessage()
|
||||
{
|
||||
LockUpdate (this, true);
|
||||
LockUpdate Lock (this, true);
|
||||
|
||||
QList<int> Rows;
|
||||
getSelectedMsgCount (&Rows, NULL, NULL);
|
||||
|
@ -2156,12 +2000,12 @@ void MessagesDialog::updateMessageSummaryList()
|
|||
|
||||
QMap<int, int> tagCount;
|
||||
|
||||
/*calculating the new messages*/
|
||||
/* calculating the new messages */
|
||||
for (it = msgList.begin(); it != msgList.end(); it++) {
|
||||
/* calcluate tag count */
|
||||
QList<int> tagIds;
|
||||
getMessageTags (m_pConfig, QString::fromStdString(it->msgId), tagIds);
|
||||
for (QList<int>::iterator tagId = tagIds.begin(); tagId != tagIds.end(); tagId++) {
|
||||
MsgTagInfo tagInfo;
|
||||
rsMsgs->getMessageTag(it->msgId, tagInfo);
|
||||
for (std::list<uint32_t>::iterator tagId = tagInfo.tagIds.begin(); tagId != tagInfo.tagIds.end(); tagId++) {
|
||||
int nCount = tagCount [*tagId];
|
||||
nCount++;
|
||||
tagCount [*tagId] = nCount;
|
||||
|
@ -2176,15 +2020,8 @@ void MessagesDialog::updateMessageSummaryList()
|
|||
switch (it->msgflags & RS_MSG_BOXMASK) {
|
||||
case RS_MSG_INBOX:
|
||||
inboxCount++;
|
||||
if ((it->msgflags & RS_MSG_NEW) == RS_MSG_NEW) {
|
||||
if (it->msgflags & (RS_MSG_NEW | RS_MSG_UNREAD_BY_USER)) {
|
||||
newInboxCount++;
|
||||
} else {
|
||||
// check locale config
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_UNREAD);
|
||||
if (m_pConfig->value(QString::fromStdString(it->msgId), false).toBool()) {
|
||||
newInboxCount++;
|
||||
}
|
||||
m_pConfig->endGroup();
|
||||
}
|
||||
break;
|
||||
case RS_MSG_OUTBOX:
|
||||
|
@ -2332,16 +2169,16 @@ void MessagesDialog::clearFilter()
|
|||
void MessagesDialog::tagAboutToShow()
|
||||
{
|
||||
// activate actions from the first selected row
|
||||
QList<int> tagIds;
|
||||
MsgTagInfo tagInfo;
|
||||
|
||||
QList<int> Rows;
|
||||
getSelectedMsgCount (&Rows, NULL, NULL);
|
||||
|
||||
if (Rows.size()) {
|
||||
QStandardItem* pItem = MessagesModel->item(Rows [0], COLUMN_DATA);
|
||||
QString msgId = pItem->data(ROLE_MSGID).toString();
|
||||
std::string msgId = pItem->data(ROLE_MSGID).toString().toStdString();
|
||||
|
||||
getMessageTags(m_pConfig, msgId, tagIds);
|
||||
rsMsgs->getMessageTag(msgId, tagInfo);
|
||||
}
|
||||
|
||||
QMenu *pMenu = ui.tagButton->menu();
|
||||
|
@ -2360,8 +2197,8 @@ void MessagesDialog::tagAboutToShow()
|
|||
continue;
|
||||
}
|
||||
|
||||
QList<int>::iterator tagId = qFind(tagIds.begin(), tagIds.end(), Values [ACTION_TAGSINDEX_ID]);
|
||||
pAction->setChecked(tagId != tagIds.end());
|
||||
std::list<uint32_t>::iterator tagId = std::find(tagInfo.tagIds.begin(), tagInfo.tagIds.end(), Values [ACTION_TAGSINDEX_ID]);
|
||||
pAction->setChecked(tagId != tagInfo.tagIds.end());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2376,6 +2213,8 @@ void MessagesDialog::tagTriggered(QAction *pAction)
|
|||
return;
|
||||
}
|
||||
|
||||
LockUpdate Lock (this, false);
|
||||
|
||||
bool bRemoveAll = false;
|
||||
int nId = 0;
|
||||
bool bSet = false;
|
||||
|
@ -2385,14 +2224,20 @@ void MessagesDialog::tagTriggered(QAction *pAction)
|
|||
bRemoveAll = true;
|
||||
} else if (Values [ACTION_TAGSINDEX_TYPE] == ACTION_TAGS_NEWTAG) {
|
||||
// new tag
|
||||
std::map<int, TagItem> TagItems;
|
||||
getTagItems(TagItems);
|
||||
MsgTagType Tags;
|
||||
rsMsgs->getMessageTagTypes(Tags);
|
||||
|
||||
NewTag Tag(TagItems);
|
||||
if (Tag.exec() == QDialog::Accepted && Tag.m_nId) {
|
||||
// Tag.m_nId
|
||||
setTagItems (TagItems);
|
||||
nId = Tag.m_nId;
|
||||
NewTag TagDlg(Tags);
|
||||
if (TagDlg.exec() == QDialog::Accepted && TagDlg.m_nId) {
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag = Tags.types.find(TagDlg.m_nId);
|
||||
if (Tag == Tags.types.end()) {
|
||||
return;
|
||||
}
|
||||
if (rsMsgs->setMessageTagType(Tag->first, Tag->second.first, Tag->second.second) == false) {
|
||||
return;
|
||||
}
|
||||
fillTags();
|
||||
nId = TagDlg.m_nId;
|
||||
bSet = true;
|
||||
} else {
|
||||
return;
|
||||
|
@ -2411,41 +2256,21 @@ void MessagesDialog::tagTriggered(QAction *pAction)
|
|||
getSelectedMsgCount (&Rows, NULL, NULL);
|
||||
for (int nRow = 0; nRow < Rows.size(); nRow++) {
|
||||
QStandardItem* pItem = MessagesModel->item(Rows [nRow], COLUMN_DATA);
|
||||
QString msgId = pItem->data(ROLE_MSGID).toString();
|
||||
std::string msgId = pItem->data(ROLE_MSGID).toString().toStdString();
|
||||
|
||||
if (bRemoveAll) {
|
||||
// remove all
|
||||
m_pConfig->beginGroup(CONFIG_SECTION_TAG);
|
||||
m_pConfig->remove (msgId);
|
||||
m_pConfig->endGroup();
|
||||
rsMsgs->setMessageTag(msgId, 0, false);
|
||||
Lock.setUpdate(true);
|
||||
|
||||
insertMessages();
|
||||
} else {
|
||||
// set or unset tag
|
||||
QList<int> tagIds;
|
||||
getMessageTags(m_pConfig, msgId, tagIds);
|
||||
|
||||
QList<int>::iterator tagId = qFind(tagIds.begin(), tagIds.end(), nId);
|
||||
|
||||
bool bSaveAndRefresh = false;
|
||||
if (bSet) {
|
||||
if (tagId == tagIds.end()) {
|
||||
// not found
|
||||
tagIds.push_back(nId);
|
||||
bSaveAndRefresh = true;
|
||||
}
|
||||
} else {
|
||||
if (tagId != tagIds.end()) {
|
||||
// found
|
||||
tagIds.erase(tagId);
|
||||
bSaveAndRefresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (bSaveAndRefresh) {
|
||||
setMessageTags(m_pConfig, msgId, tagIds);
|
||||
insertMessages();
|
||||
MsgTagInfo tagInfo;
|
||||
if (rsMsgs->setMessageTag(msgId, nId, bSet)) {
|
||||
Lock.setUpdate(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// LockUpdate -> insertMessages();
|
||||
}
|
||||
|
|
|
@ -35,8 +35,6 @@
|
|||
|
||||
#include "settings/NewTag.h"
|
||||
|
||||
class RSettings;
|
||||
|
||||
class MessagesDialog : public MainPage
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -47,16 +45,12 @@ public:
|
|||
/** Default Destructor */
|
||||
~MessagesDialog();
|
||||
|
||||
static void initStandardTagItems(std::map<int, TagItem> &Items);
|
||||
void getTagItems(std::map<int, TagItem> &Items);
|
||||
void setTagItems(std::map<int, TagItem> &Items);
|
||||
|
||||
// replaced by shortcut
|
||||
// virtual void keyPressEvent(QKeyEvent *) ;
|
||||
|
||||
public slots:
|
||||
void insertMessages();
|
||||
|
||||
void messagesTagsChanged();
|
||||
|
||||
private slots:
|
||||
|
||||
|
@ -118,6 +112,8 @@ private:
|
|||
LockUpdate (MessagesDialog *pDialog, bool bUpdate);
|
||||
~LockUpdate ();
|
||||
|
||||
void setUpdate(bool bUpdate);
|
||||
|
||||
private:
|
||||
MessagesDialog *m_pDialog;
|
||||
bool m_bUpdate;
|
||||
|
@ -155,7 +151,6 @@ private:
|
|||
|
||||
QString fileName;
|
||||
QFont mFont;
|
||||
RSettings *m_pConfig;
|
||||
|
||||
// timer and index for showing message
|
||||
QTimer *timer;
|
||||
|
|
|
@ -198,6 +198,12 @@ void NotifyQt::notifyListChange(int list, int type)
|
|||
#endif
|
||||
emit messagesChanged() ;
|
||||
break;
|
||||
case NOTIFY_LIST_MESSAGE_TAGS:
|
||||
#ifdef NOTIFY_DEBUG
|
||||
std::cerr << "received msg tags changed" << std::endl ;
|
||||
#endif
|
||||
emit messagesTagsChanged();
|
||||
break;
|
||||
case NOTIFY_LIST_CHANNELLIST:
|
||||
break;
|
||||
case NOTIFY_LIST_TRANSFERLIST:
|
||||
|
|
|
@ -58,6 +58,7 @@ class NotifyQt: public QObject, public NotifyBase
|
|||
void friendsChanged() const ;
|
||||
void neighborsChanged() const ;
|
||||
void messagesChanged() const ;
|
||||
void messagesTagsChanged() const;
|
||||
void forumsChanged() const ; // use connect with Qt::QueuedConnection
|
||||
void configChanged() const ;
|
||||
void logInfoChanged(const QString&) const ;
|
||||
|
|
|
@ -22,9 +22,12 @@
|
|||
#include "MessagePage.h"
|
||||
#include "rshare.h"
|
||||
#include "rsharesettings.h"
|
||||
#include "retroshare/rsmsgs.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "../MainWindow.h"
|
||||
#include "../MessagesDialog.h"
|
||||
#include "NewTag.h"
|
||||
|
||||
MessagePage::MessagePage(QWidget * parent, Qt::WFlags flags)
|
||||
: ConfigPage(parent, flags)
|
||||
|
@ -32,6 +35,8 @@ MessagePage::MessagePage(QWidget * parent, Qt::WFlags flags)
|
|||
ui.setupUi(this);
|
||||
setAttribute(Qt::WA_QuitOnClose, false);
|
||||
|
||||
m_pTags = new MsgTagType;
|
||||
|
||||
connect (ui.addpushButton, SIGNAL(clicked(bool)), this, SLOT (addTag()));
|
||||
connect (ui.editpushButton, SIGNAL(clicked(bool)), this, SLOT (editTag()));
|
||||
connect (ui.deletepushButton, SIGNAL(clicked(bool)), this, SLOT (deleteTag()));
|
||||
|
@ -45,6 +50,7 @@ MessagePage::MessagePage(QWidget * parent, Qt::WFlags flags)
|
|||
|
||||
MessagePage::~MessagePage()
|
||||
{
|
||||
delete(m_pTags);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -59,9 +65,22 @@ MessagePage::save(QString &errmsg)
|
|||
{
|
||||
Settings->setMsgSetToReadOnActivate(ui.setMsgToReadOnActivate->isChecked());
|
||||
|
||||
MessagesDialog *pPage = (MessagesDialog*) MainWindow::getPage (MainWindow::Messages);
|
||||
if (pPage) {
|
||||
pPage->setTagItems (m_TagItems);
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
for (Tag = m_pTags->types.begin(); Tag != m_pTags->types.end(); Tag++) {
|
||||
// check for changed tags
|
||||
std::list<uint32_t>::iterator changedTagId;
|
||||
for (changedTagId = m_changedTagIds.begin(); changedTagId != m_changedTagIds.end(); changedTagId++) {
|
||||
if (*changedTagId == Tag->first) {
|
||||
if (Tag->second.first.empty()) {
|
||||
// delete tag
|
||||
rsMsgs->removeMessageTagType(Tag->first);
|
||||
continue;
|
||||
}
|
||||
|
||||
rsMsgs->setMessageTagType(Tag->first, Tag->second.first, Tag->second.second);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -73,47 +92,49 @@ MessagePage::load()
|
|||
{
|
||||
ui.setMsgToReadOnActivate->setChecked(Settings->getMsgSetToReadOnActivate());
|
||||
|
||||
MessagesDialog *pPage = (MessagesDialog*) MainWindow::getPage (MainWindow::Messages);
|
||||
if (pPage) {
|
||||
pPage->getTagItems (m_TagItems);
|
||||
|
||||
// fill items
|
||||
fillTagItems();
|
||||
} else {
|
||||
// MessagesDialog not available
|
||||
ui.tags_listWidget->setEnabled(false);
|
||||
ui.addpushButton->setEnabled(false);
|
||||
ui.editpushButton->setEnabled(false);
|
||||
ui.deletepushButton->setEnabled(false);
|
||||
ui.defaultTagButton->setEnabled(false);
|
||||
}
|
||||
// fill items
|
||||
rsMsgs->getMessageTagTypes(*m_pTags);
|
||||
fillTags();
|
||||
}
|
||||
|
||||
// fill items
|
||||
void MessagePage::fillTagItems()
|
||||
// fill tags
|
||||
void MessagePage::fillTags()
|
||||
{
|
||||
ui.tags_listWidget->clear();
|
||||
|
||||
std::map<int, TagItem>::iterator Item;
|
||||
for (Item = m_TagItems.begin(); Item != m_TagItems.end(); Item++) {
|
||||
if (Item->second._delete) {
|
||||
continue;
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
for (Tag = m_pTags->types.begin(); Tag != m_pTags->types.end(); Tag++) {
|
||||
QString text;
|
||||
if (Tag->first < RS_MSGTAGTYPE_USER) {
|
||||
text = tr(Tag->second.first.c_str());
|
||||
} else {
|
||||
text = QString::fromStdString(Tag->second.first);
|
||||
}
|
||||
|
||||
QListWidgetItem *pItemWidget = new QListWidgetItem(Item->second.text, ui.tags_listWidget);
|
||||
pItemWidget->setTextColor(QColor(Item->second.color));
|
||||
pItemWidget->setData(Qt::UserRole, Item->first);
|
||||
QListWidgetItem *pItemWidget = new QListWidgetItem(text, ui.tags_listWidget);
|
||||
pItemWidget->setTextColor(QColor(Tag->second.second));
|
||||
pItemWidget->setData(Qt::UserRole, Tag->first);
|
||||
}
|
||||
}
|
||||
|
||||
void MessagePage::addTag()
|
||||
{
|
||||
NewTag Tag(m_TagItems);
|
||||
if (Tag.exec() == QDialog::Accepted && Tag.m_nId) {
|
||||
TagItem &Item = m_TagItems [Tag.m_nId];
|
||||
QListWidgetItem *pItemWidget = new QListWidgetItem(Item.text, ui.tags_listWidget);
|
||||
pItemWidget->setTextColor(QColor(Item.color));
|
||||
pItemWidget->setData(Qt::UserRole, Tag.m_nId);
|
||||
NewTag TagDlg(*m_pTags);
|
||||
if (TagDlg.exec() == QDialog::Accepted && TagDlg.m_nId) {
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
Tag = m_pTags->types.find(TagDlg.m_nId);
|
||||
if (Tag != m_pTags->types.end()) {
|
||||
QString text;
|
||||
if (Tag->first < RS_MSGTAGTYPE_USER) {
|
||||
text = tr(Tag->second.first.c_str());
|
||||
} else {
|
||||
text = QString::fromStdString(Tag->second.first);
|
||||
}
|
||||
QListWidgetItem *pItemWidget = new QListWidgetItem(text, ui.tags_listWidget);
|
||||
pItemWidget->setTextColor(QColor(Tag->second.second));
|
||||
pItemWidget->setData(Qt::UserRole, TagDlg.m_nId);
|
||||
|
||||
m_changedTagIds.push_back(TagDlg.m_nId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -124,17 +145,26 @@ void MessagePage::editTag()
|
|||
return;
|
||||
}
|
||||
|
||||
int nId = pItemWidget->data(Qt::UserRole).toInt();
|
||||
uint32_t nId = pItemWidget->data(Qt::UserRole).toInt();
|
||||
if (nId == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
NewTag Tag(m_TagItems, nId);
|
||||
Tag.setWindowTitle(tr("Edit Tag"));
|
||||
if (Tag.exec() == QDialog::Accepted && Tag.m_nId) {
|
||||
TagItem &Item = m_TagItems [Tag.m_nId];
|
||||
pItemWidget->setText(Item.text);
|
||||
pItemWidget->setTextColor(QColor(Item.color));
|
||||
NewTag TagDlg(*m_pTags, nId);
|
||||
TagDlg.setWindowTitle(tr("Edit Tag"));
|
||||
if (TagDlg.exec() == QDialog::Accepted && TagDlg.m_nId) {
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
Tag = m_pTags->types.find(TagDlg.m_nId);
|
||||
if (Tag != m_pTags->types.end()) {
|
||||
if (Tag->first >= RS_MSGTAGTYPE_USER) {
|
||||
pItemWidget->setText(QString::fromStdString(Tag->second.first));
|
||||
}
|
||||
pItemWidget->setTextColor(QColor(Tag->second.second));
|
||||
|
||||
if (std::find(m_changedTagIds.begin(), m_changedTagIds.end(), TagDlg.m_nId) == m_changedTagIds.end()) {
|
||||
m_changedTagIds.push_back(TagDlg.m_nId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -145,26 +175,46 @@ void MessagePage::deleteTag()
|
|||
return;
|
||||
}
|
||||
|
||||
int nId = pItemWidget->data(Qt::UserRole).toInt();
|
||||
uint32_t nId = pItemWidget->data(Qt::UserRole).toInt();
|
||||
if (nId == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (nId < 0) {
|
||||
if (nId < RS_MSGTAGTYPE_USER) {
|
||||
// can't delete standard tag item
|
||||
return;
|
||||
}
|
||||
|
||||
TagItem &Item = m_TagItems [nId];
|
||||
Item._delete = true;
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
Tag = m_pTags->types.find(nId);
|
||||
if (Tag != m_pTags->types.end()) {
|
||||
// erase the text for later delete
|
||||
Tag->second.first.erase();
|
||||
}
|
||||
|
||||
ui.tags_listWidget->removeItemWidget(pItemWidget);
|
||||
delete (pItemWidget);
|
||||
|
||||
if (std::find(m_changedTagIds.begin(), m_changedTagIds.end(), nId) == m_changedTagIds.end()) {
|
||||
m_changedTagIds.push_back(nId);
|
||||
}
|
||||
}
|
||||
|
||||
void MessagePage::defaultTag()
|
||||
{
|
||||
MessagesDialog::initStandardTagItems(m_TagItems);
|
||||
fillTagItems();
|
||||
rsMsgs->resetMessageStandardTagTypes(*m_pTags);
|
||||
|
||||
// add all standard items to changed list
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
for (Tag = m_pTags->types.begin(); Tag != m_pTags->types.end(); Tag++) {
|
||||
if (Tag->first < RS_MSGTAGTYPE_USER) {
|
||||
if (std::find(m_changedTagIds.begin(), m_changedTagIds.end(), Tag->first) == m_changedTagIds.end()) {
|
||||
m_changedTagIds.push_back(Tag->first);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fillTags();
|
||||
}
|
||||
|
||||
void MessagePage::currentRowChangedTag(int row)
|
||||
|
@ -177,9 +227,9 @@ void MessagePage::currentRowChangedTag(int row)
|
|||
if (pItemWidget) {
|
||||
bEditEnable = true;
|
||||
|
||||
int nId = pItemWidget->data(Qt::UserRole).toInt();
|
||||
uint32_t nId = pItemWidget->data(Qt::UserRole).toInt();
|
||||
|
||||
if (nId > 0) {
|
||||
if (nId >= RS_MSGTAGTYPE_USER) {
|
||||
bDeleteEnable = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "configpage.h"
|
||||
#include "ui_MessagePage.h"
|
||||
|
||||
#include "NewTag.h"
|
||||
class MsgTagType;
|
||||
|
||||
class MessagePage : public ConfigPage
|
||||
{
|
||||
|
@ -52,9 +52,11 @@ private slots:
|
|||
|
||||
private:
|
||||
void closeEvent (QCloseEvent * event);
|
||||
void fillTagItems();
|
||||
void fillTags();
|
||||
|
||||
std::map<int, TagItem> m_TagItems;
|
||||
/* Pointer for not include of rsmsgs.h */
|
||||
MsgTagType *m_pTags;
|
||||
std::list<uint32_t> m_changedTagIds;
|
||||
|
||||
Ui::MessagePage ui;
|
||||
};
|
||||
|
|
|
@ -20,11 +20,13 @@
|
|||
****************************************************************/
|
||||
#include "NewTag.h"
|
||||
|
||||
#include "retroshare/rsmsgs.h"
|
||||
|
||||
#include <QColorDialog>
|
||||
|
||||
/** Default constructor */
|
||||
NewTag::NewTag(std::map<int, TagItem> &Items, int nId /*= 0*/, QWidget *parent, Qt::WFlags flags)
|
||||
: QDialog(parent, flags), m_Items(Items)
|
||||
NewTag::NewTag(MsgTagType &Tags, uint32_t nId /*= 0*/, QWidget *parent, Qt::WFlags flags)
|
||||
: QDialog(parent, flags), m_Tags(Tags)
|
||||
{
|
||||
/* Invoke Qt Designer generated QObject setup routine */
|
||||
ui.setupUi(this);
|
||||
|
@ -40,13 +42,20 @@ NewTag::NewTag(std::map<int, TagItem> &Items, int nId /*= 0*/, QWidget *parent,
|
|||
ui.okButton->setEnabled(false);
|
||||
|
||||
if (m_nId) {
|
||||
TagItem &Item = m_Items [m_nId];
|
||||
ui.lineEdit->setText(Item.text);
|
||||
m_Color = Item.color;
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
Tag = m_Tags.types.find(m_nId);
|
||||
if (Tag != m_Tags.types.end()) {
|
||||
ui.lineEdit->setText(QString::fromStdString(Tag->second.first));
|
||||
m_Color = QRgb(Tag->second.second);
|
||||
|
||||
if (m_nId < 0) {
|
||||
// standard tag
|
||||
ui.lineEdit->setEnabled(false);
|
||||
if (m_nId < RS_MSGTAGTYPE_USER) {
|
||||
// standard tag
|
||||
ui.lineEdit->setEnabled(false);
|
||||
}
|
||||
} else {
|
||||
// tag id not found
|
||||
m_Color = 0;
|
||||
m_nId = 0;
|
||||
}
|
||||
} else {
|
||||
m_Color = 0;
|
||||
|
@ -62,22 +71,19 @@ void NewTag::closeEvent (QCloseEvent * event)
|
|||
|
||||
void NewTag::OnOK()
|
||||
{
|
||||
TagItem Item;
|
||||
Item.text = ui.lineEdit->text();
|
||||
Item.color = m_Color;
|
||||
|
||||
if (m_nId == 0) {
|
||||
// calculate new id
|
||||
m_nId = 1;
|
||||
std::map<int, TagItem>::iterator Item;
|
||||
for (Item = m_Items.begin(); Item != m_Items.end(); Item++) {
|
||||
if (Item->first + 1 > m_nId) {
|
||||
m_nId = Item->first + 1;
|
||||
m_nId = RS_MSGTAGTYPE_USER;
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
for (Tag = m_Tags.types.begin(); Tag != m_Tags.types.end(); Tag++) {
|
||||
if (Tag->first + 1 > m_nId) {
|
||||
m_nId = Tag->first + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_Items [m_nId] = Item;
|
||||
std::pair<std::string, uint32_t> newTag(ui.lineEdit->text().toStdString(), m_Color);
|
||||
m_Tags.types [m_nId] = newTag;
|
||||
|
||||
setResult(QDialog::Accepted);
|
||||
hide();
|
||||
|
@ -92,22 +98,25 @@ void NewTag::OnCancel()
|
|||
void NewTag::textChanged(const QString &text)
|
||||
{
|
||||
bool bEnabled = true;
|
||||
std::string stdText = text.toStdString();
|
||||
|
||||
if (text.isEmpty()) {
|
||||
bEnabled = false;
|
||||
} else {
|
||||
// check for existing text
|
||||
std::map<int, TagItem>::iterator Item;
|
||||
for (Item = m_Items.begin(); Item != m_Items.end(); Item++) {
|
||||
if (m_nId && Item->first == m_nId) {
|
||||
std::map<uint32_t, std::pair<std::string, uint32_t> >::iterator Tag;
|
||||
for (Tag = m_Tags.types.begin(); Tag != m_Tags.types.end(); Tag++) {
|
||||
if (m_nId && Tag->first == m_nId) {
|
||||
// its me
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Item->second._delete) {
|
||||
if (Tag->second.first.empty()) {
|
||||
// deleted
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Item->second.text == text) {
|
||||
if (Tag->second.first == stdText) {
|
||||
bEnabled = false;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -26,19 +26,7 @@
|
|||
|
||||
#include "ui_NewTag.h"
|
||||
|
||||
class TagItem
|
||||
{
|
||||
public:
|
||||
TagItem()
|
||||
{
|
||||
_delete = false;
|
||||
};
|
||||
|
||||
QString text;
|
||||
QRgb color;
|
||||
|
||||
bool _delete; // for internal use
|
||||
};
|
||||
class MsgTagType;
|
||||
|
||||
class NewTag : public QDialog
|
||||
{
|
||||
|
@ -46,9 +34,9 @@ class NewTag : public QDialog
|
|||
|
||||
public:
|
||||
/** Default constructor */
|
||||
NewTag(std::map<int, TagItem> &Items, int nId = 0, QWidget *parent = 0, Qt::WFlags flags = 0);
|
||||
NewTag(MsgTagType &Tags, uint32_t nId = 0, QWidget *parent = 0, Qt::WFlags flags = 0);
|
||||
|
||||
int m_nId;
|
||||
uint32_t m_nId;
|
||||
|
||||
protected:
|
||||
void closeEvent (QCloseEvent * event);
|
||||
|
@ -64,7 +52,7 @@ private slots:
|
|||
private:
|
||||
void showColor(QRgb color);
|
||||
|
||||
std::map<int, TagItem> &m_Items;
|
||||
MsgTagType &m_Tags;
|
||||
QRgb m_Color;
|
||||
|
||||
/** Qt Designer generated object */
|
||||
|
|
|
@ -177,6 +177,7 @@ int main(int argc, char *argv[])
|
|||
QObject::connect(notify,SIGNAL(friendsChanged()) ,w->peersDialog ,SLOT(insertPeers() )) ;
|
||||
QObject::connect(notify,SIGNAL(neighborsChanged()) ,w->networkDialog ,SLOT(insertConnect() )) ;
|
||||
QObject::connect(notify,SIGNAL(messagesChanged()) ,w->messagesDialog ,SLOT(insertMessages() )) ;
|
||||
QObject::connect(notify,SIGNAL(messagesTagsChanged()) ,w->messagesDialog ,SLOT(messagesTagsChanged() )) ;
|
||||
QObject::connect(notify,SIGNAL(messagesChanged()) ,w ,SLOT(updateMessages() )) ;
|
||||
QObject::connect(notify,SIGNAL(forumsChanged()) ,w ,SLOT(updateForums() ), Qt::QueuedConnection);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue