mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Added a star column for messages.
Recompile of the gui needed. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4217 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
3f21835114
commit
c45e7562bb
@ -52,6 +52,7 @@
|
||||
#define RS_MSG_UNREAD_BY_USER 0x0040 /* Unread by user */
|
||||
#define RS_MSG_REPLIED 0x0080 /* Message is replied */
|
||||
#define RS_MSG_FORWARDED 0x0100 /* Message is forwarded */
|
||||
#define RS_MSG_STAR 0x0200 /* Message is marked with a star */
|
||||
|
||||
#define RS_MSGTAGTYPE_IMPORTANT 1
|
||||
#define RS_MSGTAGTYPE_WORK 2
|
||||
@ -163,9 +164,10 @@ virtual bool MessageToTrash(const std::string &mid, bool bTrash) = 0;
|
||||
virtual bool getMsgParentId(const std::string &msgId, std::string &msgParentId) = 0;
|
||||
|
||||
virtual bool MessageDelete(const std::string &mid) = 0;
|
||||
virtual bool MessageRead(const std::string &mid, bool bUnreadByUser) = 0;
|
||||
virtual bool MessageRead(const std::string &mid, bool unreadByUser) = 0;
|
||||
virtual bool MessageReplied(const std::string &mid, bool replied) = 0;
|
||||
virtual bool MessageForwarded(const std::string &mid, bool forwarded) = 0;
|
||||
virtual bool MessageStar(const std::string &mid, bool mark) = 0;
|
||||
|
||||
/* message tagging */
|
||||
|
||||
|
@ -100,12 +100,12 @@ bool p3Msgs::MessageDelete(const std::string &mid)
|
||||
return mMsgSrv -> removeMsgId(mid);
|
||||
}
|
||||
|
||||
bool p3Msgs::MessageRead(const std::string &mid, bool bUnreadByUser)
|
||||
bool p3Msgs::MessageRead(const std::string &mid, bool unreadByUser)
|
||||
{
|
||||
//std::cerr << "p3Msgs::MessageRead() ";
|
||||
//std::cerr << "mid: " << mid << std::endl;
|
||||
|
||||
return mMsgSrv -> markMsgIdRead(mid, bUnreadByUser);
|
||||
return mMsgSrv -> markMsgIdRead(mid, unreadByUser);
|
||||
}
|
||||
|
||||
bool p3Msgs::MessageReplied(const std::string &mid, bool replied)
|
||||
@ -123,6 +123,12 @@ bool p3Msgs::getMessageTagTypes(MsgTagType& tags)
|
||||
return mMsgSrv->getMessageTagTypes(tags);
|
||||
}
|
||||
|
||||
bool p3Msgs::MessageStar(const std::string &mid, bool star)
|
||||
|
||||
{
|
||||
return mMsgSrv->setMsgFlag(mid, star ? RS_MSG_FLAGS_STAR : 0, RS_MSG_FLAGS_STAR);
|
||||
}
|
||||
|
||||
bool p3Msgs::setMessageTagType(uint32_t tagId, std::string& text, uint32_t rgb_color)
|
||||
{
|
||||
return mMsgSrv->setMessageTagType(tagId, text, rgb_color);
|
||||
|
@ -61,9 +61,10 @@ class p3Msgs: public RsMsgs
|
||||
virtual bool MessageToDraft(MessageInfo &info, const std::string &msgParentId);
|
||||
virtual bool MessageToTrash(const std::string &mid, bool bTrash);
|
||||
virtual bool MessageDelete(const std::string &mid);
|
||||
virtual bool MessageRead(const std::string &mid, bool bUnreadByUser);
|
||||
virtual bool MessageRead(const std::string &mid, bool unreadByUser);
|
||||
virtual bool MessageReplied(const std::string &mid, bool replied);
|
||||
virtual bool MessageForwarded(const std::string &mid, bool forwarded);
|
||||
virtual bool MessageStar(const std::string &mid, bool star);
|
||||
virtual bool getMsgParentId(const std::string &msgId, std::string &msgParentId);
|
||||
|
||||
virtual bool getMessageTagTypes(MsgTagType& tags);
|
||||
|
@ -188,6 +188,7 @@ const uint32_t RS_MSG_FLAGS_TRASH = 0x0020;
|
||||
const uint32_t RS_MSG_FLAGS_UNREAD_BY_USER = 0x0040;
|
||||
const uint32_t RS_MSG_FLAGS_REPLIED = 0x0080;
|
||||
const uint32_t RS_MSG_FLAGS_FORWARDED = 0x0100;
|
||||
const uint32_t RS_MSG_FLAGS_STAR = 0x0200;
|
||||
|
||||
class RsMsgItem: public RsItem
|
||||
{
|
||||
|
@ -683,7 +683,7 @@ bool p3MsgService::removeMsgId(const std::string &mid)
|
||||
return changed;
|
||||
}
|
||||
|
||||
bool p3MsgService::markMsgIdRead(const std::string &mid, bool bUnreadByUser)
|
||||
bool p3MsgService::markMsgIdRead(const std::string &mid, bool unreadByUser)
|
||||
{
|
||||
std::map<uint32_t, RsMsgItem *>::iterator mit;
|
||||
uint32_t msgId = atoi(mid.c_str());
|
||||
@ -703,7 +703,7 @@ bool p3MsgService::markMsgIdRead(const std::string &mid, bool bUnreadByUser)
|
||||
mi->msgFlags &= ~(RS_MSG_FLAGS_NEW);
|
||||
|
||||
/* set state from user */
|
||||
if (bUnreadByUser) {
|
||||
if (unreadByUser) {
|
||||
mi->msgFlags |= RS_MSG_FLAGS_UNREAD_BY_USER;
|
||||
} else {
|
||||
mi->msgFlags &= ~RS_MSG_FLAGS_UNREAD_BY_USER;
|
||||
@ -1311,6 +1311,10 @@ void p3MsgService::initRsMI(RsMsgItem *msg, MessageInfo &mi)
|
||||
{
|
||||
mi.msgflags |= RS_MSG_FORWARDED;
|
||||
}
|
||||
if (msg->msgFlags & RS_MSG_FLAGS_STAR)
|
||||
{
|
||||
mi.msgflags |= RS_MSG_STAR;
|
||||
}
|
||||
|
||||
mi.ts = msg->sendTime;
|
||||
mi.srcId = msg->PeerId();
|
||||
@ -1406,6 +1410,10 @@ void p3MsgService::initRsMIS(RsMsgItem *msg, MsgInfoSummary &mis)
|
||||
{
|
||||
mis.msgflags |= RS_MSG_FORWARDED;
|
||||
}
|
||||
if (msg->msgFlags & RS_MSG_FLAGS_STAR)
|
||||
{
|
||||
mis.msgflags |= RS_MSG_STAR;
|
||||
}
|
||||
|
||||
mis.srcId = msg->PeerId();
|
||||
{
|
||||
|
@ -53,20 +53,23 @@
|
||||
/* Images for context menu icons */
|
||||
#define IMAGE_MESSAGE ":/images/folder-draft.png"
|
||||
#define IMAGE_MESSAGEREPLY ":/images/mail_reply.png"
|
||||
#define IMAGE_MESSAGEREPLYALL ":/images/mail_replyall.png"
|
||||
#define IMAGE_MESSAGEFORWARD ":/images/mail_forward.png"
|
||||
#define IMAGE_MESSAGEREMOVE ":/images/message-mail-imapdelete.png"
|
||||
#define IMAGE_DOWNLOAD ":/images/start.png"
|
||||
#define IMAGE_DOWNLOADALL ":/images/startall.png"
|
||||
#define IMAGE_MESSAGEREPLYALL ":/images/mail_replyall.png"
|
||||
#define IMAGE_MESSAGEFORWARD ":/images/mail_forward.png"
|
||||
#define IMAGE_MESSAGEREMOVE ":/images/message-mail-imapdelete.png"
|
||||
#define IMAGE_DOWNLOAD ":/images/start.png"
|
||||
#define IMAGE_DOWNLOADALL ":/images/startall.png"
|
||||
#define IMAGE_STAR_ON ":/images/star-on-16.png"
|
||||
#define IMAGE_STAR_OFF ":/images/star-off-16.png"
|
||||
|
||||
#define COLUMN_COUNT 7
|
||||
#define COLUMN_COUNT 8
|
||||
#define COLUMN_ATTACHEMENTS 0
|
||||
#define COLUMN_SUBJECT 1
|
||||
#define COLUMN_UNREAD 2
|
||||
#define COLUMN_FROM 3
|
||||
#define COLUMN_DATE 4
|
||||
#define COLUMN_CONTENT 5
|
||||
#define COLUMN_TAGS 6
|
||||
#define COLUMN_STAR 5
|
||||
#define COLUMN_CONTENT 6
|
||||
#define COLUMN_TAGS 7
|
||||
|
||||
#define COLUMN_DATA 0 // column for storing the userdata like msgid and srcid
|
||||
|
||||
@ -211,6 +214,7 @@ MessagesDialog::MessagesDialog(QWidget *parent)
|
||||
MessagesModel->setHeaderData(COLUMN_DATE, Qt::Horizontal, tr("Date"));
|
||||
MessagesModel->setHeaderData(COLUMN_TAGS, Qt::Horizontal, tr("Tags"));
|
||||
MessagesModel->setHeaderData(COLUMN_CONTENT, Qt::Horizontal, tr("Content"));
|
||||
MessagesModel->setHeaderData(COLUMN_STAR, Qt::Horizontal, QIcon(IMAGE_STAR_ON), Qt::DecorationRole);
|
||||
|
||||
MessagesModel->setHeaderData(COLUMN_ATTACHEMENTS, Qt::Horizontal, tr("Click to sort by attachments"), Qt::ToolTipRole);
|
||||
MessagesModel->setHeaderData(COLUMN_SUBJECT, Qt::Horizontal, tr("Click to sort by subject"), Qt::ToolTipRole);
|
||||
@ -218,6 +222,7 @@ MessagesDialog::MessagesDialog(QWidget *parent)
|
||||
MessagesModel->setHeaderData(COLUMN_FROM, Qt::Horizontal, tr("Click to sort by from"), Qt::ToolTipRole);
|
||||
MessagesModel->setHeaderData(COLUMN_DATE, Qt::Horizontal, tr("Click to sort by date"), Qt::ToolTipRole);
|
||||
MessagesModel->setHeaderData(COLUMN_TAGS, Qt::Horizontal, tr("Click to sort by tags"), Qt::ToolTipRole);
|
||||
MessagesModel->setHeaderData(COLUMN_STAR, Qt::Horizontal, tr("Click to sort by star"), Qt::ToolTipRole);
|
||||
|
||||
proxyModel = new QSortFilterProxyModel(this);
|
||||
proxyModel->setDynamicSortFilter(true);
|
||||
@ -229,6 +234,7 @@ MessagesDialog::MessagesDialog(QWidget *parent)
|
||||
|
||||
RSItemDelegate *itemDelegate = new RSItemDelegate(this);
|
||||
itemDelegate->removeFocusRect(COLUMN_UNREAD);
|
||||
itemDelegate->removeFocusRect(COLUMN_STAR);
|
||||
itemDelegate->setSpacing(QSize(0, 2));
|
||||
ui.messagestreeView->setItemDelegate(itemDelegate);
|
||||
|
||||
@ -257,6 +263,10 @@ MessagesDialog::MessagesDialog(QWidget *parent)
|
||||
msgwheader->resizeSection (COLUMN_UNREAD, 16);
|
||||
msgwheader->resizeSection (COLUMN_FROM, 140);
|
||||
msgwheader->resizeSection (COLUMN_DATE, 140);
|
||||
msgwheader->resizeSection (COLUMN_STAR, 16);
|
||||
|
||||
msgwheader->setResizeMode (COLUMN_STAR, QHeaderView::Fixed);
|
||||
msgwheader->resizeSection (COLUMN_STAR, 24);
|
||||
|
||||
/* Set header resize modes and initial section sizes */
|
||||
QHeaderView * msglheader = ui.msgList->header () ;
|
||||
@ -307,6 +317,8 @@ MessagesDialog::MessagesDialog(QWidget *parent)
|
||||
msgwheader->setResizeMode (COLUMN_DATE, QHeaderView::Interactive);
|
||||
msgwheader->setResizeMode (COLUMN_UNREAD, QHeaderView::Fixed);
|
||||
msgwheader->resizeSection (COLUMN_UNREAD, 24);
|
||||
msgwheader->resizeSection (COLUMN_STAR, 24);
|
||||
msgwheader->setResizeMode (COLUMN_STAR, QHeaderView::Fixed);
|
||||
|
||||
// fill folder list
|
||||
updateMessageSummaryList();
|
||||
@ -349,6 +361,8 @@ MessagesDialog::~MessagesDialog()
|
||||
|
||||
void MessagesDialog::processSettings(bool bLoad)
|
||||
{
|
||||
int messageTreeVersion = 1; // version number for the settings to solve problems when modifying the column count
|
||||
|
||||
m_bProcessSettings = true;
|
||||
|
||||
QHeaderView *msgwheader = ui.messagestreeView->header () ;
|
||||
@ -369,7 +383,9 @@ void MessagesDialog::processSettings(bool bLoad)
|
||||
ui.filterColumnComboBox->setCurrentIndex(nValue);
|
||||
|
||||
// state of message tree
|
||||
msgwheader->restoreState(Settings->value("MessageTree").toByteArray());
|
||||
if (Settings->value("MessageTreeVersion").toInt() == messageTreeVersion) {
|
||||
msgwheader->restoreState(Settings->value("MessageTree").toByteArray());
|
||||
}
|
||||
|
||||
// state of tag list
|
||||
bValue = Settings->value("tagList", true).toBool();
|
||||
@ -384,6 +400,7 @@ void MessagesDialog::processSettings(bool bLoad)
|
||||
|
||||
// state of message tree
|
||||
Settings->setValue("MessageTree", msgwheader->saveState());
|
||||
Settings->setValue("MessageTreeVersion", messageTreeVersion);
|
||||
|
||||
// state of tag list
|
||||
Settings->setValue("tagList", ui.Tags_Button->isChecked());
|
||||
@ -473,10 +490,11 @@ void MessagesDialog::fillTags()
|
||||
// MainPage::keyPressEvent(e) ;
|
||||
//}
|
||||
|
||||
int MessagesDialog::getSelectedMsgCount (QList<int> *pRows, QList<int> *pRowsRead, QList<int> *pRowsUnread)
|
||||
int MessagesDialog::getSelectedMsgCount (QList<int> *pRows, QList<int> *pRowsRead, QList<int> *pRowsUnread, QList<int> *pRowsStar)
|
||||
{
|
||||
if (pRowsRead) pRowsRead->clear();
|
||||
if (pRowsUnread) pRowsUnread->clear();
|
||||
if (pRowsStar) pRowsStar->clear();
|
||||
|
||||
//To check if the selection has more than one row.
|
||||
QList<QModelIndex> selectedIndexList = ui.messagestreeView->selectionModel() -> selectedIndexes ();
|
||||
@ -488,7 +506,7 @@ int MessagesDialog::getSelectedMsgCount (QList<int> *pRows, QList<int> *pRowsRea
|
||||
{
|
||||
rowList.append(row);
|
||||
|
||||
if (pRows || pRowsRead || pRowsUnread) {
|
||||
if (pRows || pRowsRead || pRowsUnread || pRowsStar) {
|
||||
int mappedRow = proxyModel->mapToSource(*it).row();
|
||||
|
||||
if (pRows) pRows->append(mappedRow);
|
||||
@ -498,6 +516,12 @@ int MessagesDialog::getSelectedMsgCount (QList<int> *pRows, QList<int> *pRowsRea
|
||||
} else {
|
||||
if (pRowsRead) pRowsRead->append(mappedRow);
|
||||
}
|
||||
|
||||
if (pRowsStar) {
|
||||
if (MessagesModel->item(mappedRow, COLUMN_DATA)->data(ROLE_MSGFLAGS).toInt() & RS_MSG_STAR) {
|
||||
pRowsStar->append(mappedRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -507,105 +531,87 @@ int MessagesDialog::getSelectedMsgCount (QList<int> *pRows, QList<int> *pRowsRea
|
||||
|
||||
bool MessagesDialog::isMessageRead(int nRow)
|
||||
{
|
||||
QStandardItem *item;
|
||||
item = MessagesModel->item(nRow,COLUMN_DATA);
|
||||
QStandardItem *item = MessagesModel->item(nRow,COLUMN_DATA);
|
||||
return !item->data(ROLE_UNREAD).toBool();
|
||||
}
|
||||
|
||||
bool MessagesDialog::hasMessageStar(int nRow)
|
||||
{
|
||||
QStandardItem *item = MessagesModel->item(nRow,COLUMN_DATA);
|
||||
return item->data(ROLE_MSGFLAGS).toInt() & RS_MSG_STAR;
|
||||
}
|
||||
|
||||
void MessagesDialog::messageslistWidgetCostumPopupMenu( QPoint point )
|
||||
{
|
||||
QMenu contextMnu( this );
|
||||
|
||||
/** Defines the actions for the context menu */
|
||||
|
||||
QAction *replytomsgAct = new QAction(QIcon(IMAGE_MESSAGEREPLY), tr( "Reply to Message" ), &contextMnu );
|
||||
connect( replytomsgAct , SIGNAL( triggered() ), this, SLOT( replytomessage() ) );
|
||||
contextMnu.addAction( replytomsgAct);
|
||||
|
||||
QAction *replyallmsgAct = new QAction(QIcon(IMAGE_MESSAGEREPLYALL), tr( "Reply to All" ), &contextMnu );
|
||||
connect( replyallmsgAct , SIGNAL( triggered() ), this, SLOT( replyallmessage() ) );
|
||||
contextMnu.addAction( replyallmsgAct);
|
||||
|
||||
QAction *forwardmsgAct = new QAction(QIcon(IMAGE_MESSAGEFORWARD), tr( "Forward Message" ), &contextMnu );
|
||||
connect( forwardmsgAct , SIGNAL( triggered() ), this, SLOT( forwardmessage() ) );
|
||||
contextMnu.addAction( forwardmsgAct);
|
||||
|
||||
QList<int> RowsRead;
|
||||
QList<int> RowsUnread;
|
||||
int nCount = getSelectedMsgCount (NULL, &RowsRead, &RowsUnread);
|
||||
QList<int> RowsStar;
|
||||
int nCount = getSelectedMsgCount (NULL, &RowsRead, &RowsUnread, &RowsStar);
|
||||
|
||||
QAction *editAct = new QAction(tr( "Edit..." ), &contextMnu );
|
||||
connect(editAct, SIGNAL(triggered()), this, SLOT(editmessage()));
|
||||
contextMnu.addAction(editAct);
|
||||
/** Defines the actions for the context menu */
|
||||
|
||||
if (nCount == 1) {
|
||||
editAct->setEnabled(true);
|
||||
} else {
|
||||
editAct->setDisabled(true);
|
||||
QAction *action = contextMnu.addAction(QIcon(IMAGE_MESSAGEREPLY), tr("Reply to Message"), this, SLOT(replytomessage()));
|
||||
if (nCount != 1) {
|
||||
action->setDisabled(true);
|
||||
}
|
||||
action = contextMnu.addAction(QIcon(IMAGE_MESSAGEREPLYALL), tr("Reply to All"), this, SLOT(replyallmessage()));
|
||||
if (nCount != 1) {
|
||||
action->setDisabled(true);
|
||||
}
|
||||
action = contextMnu.addAction(QIcon(IMAGE_MESSAGEFORWARD), tr("Forward Message"), this, SLOT(forwardmessage()));
|
||||
if (nCount != 1) {
|
||||
action->setDisabled(true);
|
||||
}
|
||||
|
||||
action = contextMnu.addAction(tr("Edit..."), this, SLOT(editmessage()));
|
||||
if (nCount != 1) {
|
||||
action->setDisabled(true);
|
||||
}
|
||||
|
||||
contextMnu.addSeparator();
|
||||
|
||||
QAction *markAsRead = new QAction(QIcon(":/images/message-mail-read.png"), tr( "Mark as read" ), &contextMnu);
|
||||
connect(markAsRead , SIGNAL(triggered()), this, SLOT(markAsRead()));
|
||||
contextMnu.addAction(markAsRead);
|
||||
action = contextMnu.addAction(QIcon(":/images/message-mail-read.png"), tr("Mark as read"), this, SLOT(markAsRead()));
|
||||
if (RowsUnread.size() == 0) {
|
||||
markAsRead->setDisabled(true);
|
||||
action->setDisabled(true);
|
||||
}
|
||||
|
||||
QAction *markAsUnread = new QAction(QIcon(":/images/message-mail.png"), tr( "Mark as unread" ), &contextMnu);
|
||||
connect(markAsUnread , SIGNAL(triggered()), this, SLOT(markAsUnread()));
|
||||
contextMnu.addAction(markAsUnread);
|
||||
action = contextMnu.addAction(QIcon(":/images/message-mail.png"), tr("Mark as unread"), this, SLOT(markAsUnread()));
|
||||
if (RowsRead.size() == 0) {
|
||||
markAsUnread->setDisabled(true);
|
||||
action->setDisabled(true);
|
||||
}
|
||||
|
||||
action = contextMnu.addAction(tr("Add Star"));
|
||||
action->setCheckable(true);
|
||||
action->setChecked(RowsStar.size());
|
||||
connect(action, SIGNAL(triggered(bool)), this, SLOT(markWithStar(bool)));
|
||||
|
||||
contextMnu.addSeparator();
|
||||
|
||||
// add tags
|
||||
contextMnu.addMenu(ui.tagButton->menu());
|
||||
contextMnu.addSeparator();
|
||||
|
||||
QAction *removemsgAct;
|
||||
if (nCount > 1) {
|
||||
removemsgAct = new QAction(QIcon(IMAGE_MESSAGEREMOVE), tr( "Remove Messages" ), &contextMnu );
|
||||
} else {
|
||||
removemsgAct = new QAction(QIcon(IMAGE_MESSAGEREMOVE), tr( "Remove Message" ), &contextMnu );
|
||||
action = contextMnu.addAction(QIcon(IMAGE_MESSAGEREMOVE), (nCount > 1) ? tr("Remove Messages") : tr("Remove Message"), this, SLOT(removemessage()));
|
||||
if (nCount == 0) {
|
||||
action->setDisabled(true);
|
||||
}
|
||||
|
||||
connect( removemsgAct , SIGNAL( triggered() ), this, SLOT( removemessage() ) );
|
||||
contextMnu.addAction( removemsgAct);
|
||||
|
||||
int listrow = ui.listWidget -> currentRow();
|
||||
int listrow = ui.listWidget->currentRow();
|
||||
if (listrow == ROW_TRASHBOX) {
|
||||
QAction *undeleteAct = new QAction(tr( "Undelete" ), &contextMnu );
|
||||
connect(undeleteAct, SIGNAL(triggered()), this, SLOT(undeletemessage()));
|
||||
contextMnu.addAction(undeleteAct);
|
||||
|
||||
if (nCount) {
|
||||
undeleteAct->setEnabled(true);
|
||||
} else {
|
||||
undeleteAct->setDisabled(true);
|
||||
action = contextMnu.addAction(tr("Undelete"), this, SLOT(undeletemessage()));
|
||||
if (nCount == 0) {
|
||||
action->setDisabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
contextMnu.addAction( ui.actionSave_as);
|
||||
contextMnu.addAction( ui.actionPrintPreview);
|
||||
contextMnu.addAction( ui.actionPrint);
|
||||
contextMnu.addAction(ui.actionSave_as);
|
||||
contextMnu.addAction(ui.actionPrintPreview);
|
||||
contextMnu.addAction(ui.actionPrint);
|
||||
contextMnu.addSeparator();
|
||||
|
||||
QAction *newmsgAct = new QAction(QIcon(IMAGE_MESSAGE), tr( "New Message" ), &contextMnu );
|
||||
connect( newmsgAct , SIGNAL( triggered() ), this, SLOT( newmessage() ) );
|
||||
contextMnu.addAction( newmsgAct);
|
||||
|
||||
if (nCount != 1) {
|
||||
replytomsgAct->setDisabled(true);
|
||||
replyallmsgAct->setDisabled(true);
|
||||
forwardmsgAct->setDisabled(true);
|
||||
}
|
||||
if (nCount == 0) {
|
||||
removemsgAct->setDisabled(true);
|
||||
}
|
||||
contextMnu.addAction(QIcon(IMAGE_MESSAGE), tr("New Message"), this, SLOT(newmessage()));
|
||||
|
||||
contextMnu.exec(QCursor::pos());
|
||||
}
|
||||
@ -892,56 +898,64 @@ void MessagesDialog::messagesTagsChanged()
|
||||
showTagLabels();
|
||||
}
|
||||
|
||||
static void InitIconAndFont(QStandardItem *pItem [COLUMN_COUNT])
|
||||
static void InitIconAndFont(QStandardItem *item[COLUMN_COUNT])
|
||||
{
|
||||
QString sText = pItem [COLUMN_SUBJECT]->text();
|
||||
QString mid = pItem [COLUMN_DATA]->data(ROLE_MSGID).toString();
|
||||
int nFlag = pItem [COLUMN_DATA]->data(ROLE_MSGFLAGS).toInt();
|
||||
int msgFlags = item[COLUMN_DATA]->data(ROLE_MSGFLAGS).toInt();
|
||||
|
||||
// show the real "New" state
|
||||
if (nFlag & RS_MSG_NEW) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-state-new.png"));
|
||||
if (msgFlags & RS_MSG_NEW) {
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-state-new.png"));
|
||||
} else {
|
||||
if (nFlag & RS_MSG_UNREAD_BY_USER) {
|
||||
if ((nFlag & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_REPLIED) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied.png"));
|
||||
} else if ((nFlag & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_FORWARDED) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-forwarded.png"));
|
||||
} else if ((nFlag & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == (RS_MSG_REPLIED | RS_MSG_FORWARDED)) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied-forw.png"));
|
||||
if (msgFlags & RS_MSG_UNREAD_BY_USER) {
|
||||
if ((msgFlags & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_REPLIED) {
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied.png"));
|
||||
} else if ((msgFlags & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_FORWARDED) {
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-forwarded.png"));
|
||||
} else if ((msgFlags & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == (RS_MSG_REPLIED | RS_MSG_FORWARDED)) {
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied-forw.png"));
|
||||
} else {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail.png"));
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail.png"));
|
||||
}
|
||||
} else {
|
||||
if ((nFlag & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_REPLIED) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied-read.png"));
|
||||
} else if ((nFlag & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_FORWARDED) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-forwarded-read.png"));
|
||||
} else if ((nFlag & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == (RS_MSG_REPLIED | RS_MSG_FORWARDED)) {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied-forw-read.png"));
|
||||
if ((msgFlags & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_REPLIED) {
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied-read.png"));
|
||||
} else if ((msgFlags & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == RS_MSG_FORWARDED) {
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-forwarded-read.png"));
|
||||
} else if ((msgFlags & (RS_MSG_REPLIED | RS_MSG_FORWARDED)) == (RS_MSG_REPLIED | RS_MSG_FORWARDED)) {
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-replied-forw-read.png"));
|
||||
} else {
|
||||
pItem[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-read.png"));
|
||||
item[COLUMN_SUBJECT]->setIcon(QIcon(":/images/message-mail-read.png"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool bNew = nFlag & (RS_MSG_NEW | RS_MSG_UNREAD_BY_USER);
|
||||
if (msgFlags & RS_MSG_STAR) {
|
||||
item[COLUMN_STAR]->setIcon(QIcon(IMAGE_STAR_ON));
|
||||
item[COLUMN_STAR]->setText("1");
|
||||
} else {
|
||||
item[COLUMN_STAR]->setIcon(QIcon(IMAGE_STAR_OFF));
|
||||
item[COLUMN_STAR]->setText("0");
|
||||
}
|
||||
|
||||
bool isNew = msgFlags & (RS_MSG_NEW | RS_MSG_UNREAD_BY_USER);
|
||||
|
||||
// set icon
|
||||
if (bNew) {
|
||||
pItem[COLUMN_UNREAD]->setIcon(QIcon(":/images/message-state-unread.png"));
|
||||
if (isNew) {
|
||||
item[COLUMN_UNREAD]->setIcon(QIcon(":/images/message-state-unread.png"));
|
||||
item[COLUMN_UNREAD]->setText("1");
|
||||
} else {
|
||||
pItem[COLUMN_UNREAD]->setIcon(QIcon(":/images/message-state-read.png"));
|
||||
item[COLUMN_UNREAD]->setIcon(QIcon(":/images/message-state-read.png"));
|
||||
item[COLUMN_UNREAD]->setText("0");
|
||||
}
|
||||
|
||||
// set font
|
||||
for (int i = 0; i < COLUMN_COUNT; i++) {
|
||||
QFont qf = pItem[i]->font();
|
||||
qf.setBold(bNew);
|
||||
pItem[i]->setFont(qf);
|
||||
QFont qf = item[i]->font();
|
||||
qf.setBold(isNew);
|
||||
item[i]->setFont(qf);
|
||||
}
|
||||
|
||||
pItem[COLUMN_DATA]->setData(bNew, ROLE_UNREAD);
|
||||
item[COLUMN_DATA]->setData(isNew, ROLE_UNREAD);
|
||||
}
|
||||
|
||||
void MessagesDialog::insertMessages()
|
||||
@ -1321,15 +1335,27 @@ void MessagesDialog::clicked(const QModelIndex &index )
|
||||
return;
|
||||
}
|
||||
|
||||
if (index.column() == COLUMN_UNREAD) {
|
||||
int mappedRow = proxyModel->mapToSource(index).row();
|
||||
switch (index.column()) {
|
||||
case COLUMN_UNREAD:
|
||||
{
|
||||
int mappedRow = proxyModel->mapToSource(index).row();
|
||||
|
||||
QList<int> Rows;
|
||||
Rows.append(mappedRow);
|
||||
setMsgAsReadUnread(Rows, !isMessageRead(mappedRow));
|
||||
insertMsgTxtAndFiles(index, false);
|
||||
updateMessageSummaryList();
|
||||
return;
|
||||
QList<int> Rows;
|
||||
Rows.append(mappedRow);
|
||||
setMsgAsReadUnread(Rows, !isMessageRead(mappedRow));
|
||||
insertMsgTxtAndFiles(index, false);
|
||||
updateMessageSummaryList();
|
||||
return;
|
||||
}
|
||||
case COLUMN_STAR:
|
||||
{
|
||||
int mappedRow = proxyModel->mapToSource(index).row();
|
||||
|
||||
QList<int> Rows;
|
||||
Rows.append(mappedRow);
|
||||
setMsgStar(Rows, !hasMessageStar(mappedRow));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
timer->stop();
|
||||
@ -1355,7 +1381,7 @@ void MessagesDialog::updateCurrentMessage()
|
||||
insertMsgTxtAndFiles(timerIndex);
|
||||
}
|
||||
|
||||
void MessagesDialog::setMsgAsReadUnread(const QList<int> &Rows, bool bRead)
|
||||
void MessagesDialog::setMsgAsReadUnread(const QList<int> &Rows, bool read)
|
||||
{
|
||||
LockUpdate Lock (this, false);
|
||||
|
||||
@ -1368,17 +1394,17 @@ void MessagesDialog::setMsgAsReadUnread(const QList<int> &Rows, bool bRead)
|
||||
|
||||
std::string mid = item[COLUMN_DATA]->data(ROLE_MSGID).toString().toStdString();
|
||||
|
||||
if (rsMsgs->MessageRead(mid, !bRead)) {
|
||||
int nFlag = item[COLUMN_DATA]->data(ROLE_MSGFLAGS).toInt();
|
||||
nFlag &= ~RS_MSG_NEW;
|
||||
if (rsMsgs->MessageRead(mid, !read)) {
|
||||
int msgFlag = item[COLUMN_DATA]->data(ROLE_MSGFLAGS).toInt();
|
||||
msgFlag &= ~RS_MSG_NEW;
|
||||
|
||||
if (bRead) {
|
||||
nFlag &= ~RS_MSG_UNREAD_BY_USER;
|
||||
if (read) {
|
||||
msgFlag &= ~RS_MSG_UNREAD_BY_USER;
|
||||
} else {
|
||||
nFlag |= RS_MSG_UNREAD_BY_USER;
|
||||
msgFlag |= RS_MSG_UNREAD_BY_USER;
|
||||
}
|
||||
|
||||
item[COLUMN_DATA]->setData(nFlag, ROLE_MSGFLAGS);
|
||||
item[COLUMN_DATA]->setData(msgFlag, ROLE_MSGFLAGS);
|
||||
|
||||
InitIconAndFont(item);
|
||||
}
|
||||
@ -1390,7 +1416,7 @@ void MessagesDialog::setMsgAsReadUnread(const QList<int> &Rows, bool bRead)
|
||||
void MessagesDialog::markAsRead()
|
||||
{
|
||||
QList<int> RowsUnread;
|
||||
getSelectedMsgCount (NULL, NULL, &RowsUnread);
|
||||
getSelectedMsgCount (NULL, NULL, &RowsUnread, NULL);
|
||||
|
||||
setMsgAsReadUnread (RowsUnread, true);
|
||||
updateMessageSummaryList();
|
||||
@ -1399,12 +1425,52 @@ void MessagesDialog::markAsRead()
|
||||
void MessagesDialog::markAsUnread()
|
||||
{
|
||||
QList<int> RowsRead;
|
||||
getSelectedMsgCount (NULL, &RowsRead, NULL);
|
||||
getSelectedMsgCount (NULL, &RowsRead, NULL, NULL);
|
||||
|
||||
setMsgAsReadUnread (RowsRead, false);
|
||||
updateMessageSummaryList();
|
||||
}
|
||||
|
||||
void MessagesDialog::markWithStar(bool checked)
|
||||
{
|
||||
QList<int> Rows;
|
||||
getSelectedMsgCount (&Rows, NULL, NULL, NULL);
|
||||
|
||||
setMsgStar(Rows, checked);
|
||||
}
|
||||
|
||||
void MessagesDialog::setMsgStar(const QList<int> &Rows, bool star)
|
||||
{
|
||||
LockUpdate Lock (this, false);
|
||||
|
||||
for (int nRow = 0; nRow < Rows.size(); nRow++) {
|
||||
QStandardItem* item[COLUMN_COUNT];
|
||||
for(int nCol = 0; nCol < COLUMN_COUNT; nCol++)
|
||||
{
|
||||
item[nCol] = MessagesModel->item(Rows [nRow], nCol);
|
||||
}
|
||||
|
||||
std::string mid = item[COLUMN_DATA]->data(ROLE_MSGID).toString().toStdString();
|
||||
|
||||
if (rsMsgs->MessageStar(mid, star)) {
|
||||
int msgFlag = item[COLUMN_DATA]->data(ROLE_MSGFLAGS).toInt();
|
||||
msgFlag &= ~RS_MSG_STAR;
|
||||
|
||||
if (star) {
|
||||
msgFlag |= RS_MSG_STAR;
|
||||
} else {
|
||||
msgFlag &= ~RS_MSG_STAR;
|
||||
}
|
||||
|
||||
item[COLUMN_DATA]->setData(msgFlag, ROLE_MSGFLAGS);
|
||||
|
||||
InitIconAndFont(item);
|
||||
}
|
||||
}
|
||||
|
||||
// LockUpdate
|
||||
}
|
||||
|
||||
void MessagesDialog::clearTagLabels()
|
||||
{
|
||||
/* clear all tags */
|
||||
@ -1502,7 +1568,7 @@ void MessagesDialog::insertMsgTxtAndFiles(QModelIndex Index, bool bSetToRead)
|
||||
cid = item->data(ROLE_SRCID).toString().toStdString();
|
||||
mid = item->data(ROLE_MSGID).toString().toStdString();
|
||||
|
||||
int nCount = getSelectedMsgCount (NULL, NULL, NULL);
|
||||
int nCount = getSelectedMsgCount (NULL, NULL, NULL, NULL);
|
||||
if (nCount == 1) {
|
||||
ui.actionSave_as->setEnabled(true);
|
||||
ui.actionPrintPreview->setEnabled(true);
|
||||
@ -1744,7 +1810,7 @@ void MessagesDialog::undeletemessage()
|
||||
LockUpdate Lock (this, true);
|
||||
|
||||
QList<int> Rows;
|
||||
getSelectedMsgCount (&Rows, NULL, NULL);
|
||||
getSelectedMsgCount (&Rows, NULL, NULL, NULL);
|
||||
for (int nRow = 0; nRow < Rows.size(); nRow++) {
|
||||
QString mid = MessagesModel->item (Rows [nRow], COLUMN_DATA)->data(ROLE_MSGID).toString();
|
||||
rsMsgs->MessageToTrash(mid.toStdString(), false);
|
||||
@ -2079,7 +2145,7 @@ void MessagesDialog::tagAboutToShow()
|
||||
MsgTagInfo tagInfo;
|
||||
|
||||
QList<int> rows;
|
||||
getSelectedMsgCount (&rows, NULL, NULL);
|
||||
getSelectedMsgCount (&rows, NULL, NULL, NULL);
|
||||
|
||||
if (rows.size()) {
|
||||
QStandardItem* item = MessagesModel->item(rows [0], COLUMN_DATA);
|
||||
@ -2096,7 +2162,7 @@ void MessagesDialog::tagRemoveAll()
|
||||
LockUpdate Lock (this, false);
|
||||
|
||||
QList<int> rows;
|
||||
getSelectedMsgCount (&rows, NULL, NULL);
|
||||
getSelectedMsgCount (&rows, NULL, NULL, NULL);
|
||||
for (int row = 0; row < rows.size(); row++) {
|
||||
QStandardItem* item = MessagesModel->item(rows [row], COLUMN_DATA);
|
||||
std::string msgId = item->data(ROLE_MSGID).toString().toStdString();
|
||||
@ -2119,7 +2185,7 @@ void MessagesDialog::tagSet(int tagId, bool set)
|
||||
LockUpdate Lock (this, false);
|
||||
|
||||
QList<int> rows;
|
||||
getSelectedMsgCount (&rows, NULL, NULL);
|
||||
getSelectedMsgCount (&rows, NULL, NULL, NULL);
|
||||
for (int row = 0; row < rows.size(); row++) {
|
||||
QStandardItem* item = MessagesModel->item(rows [row], COLUMN_DATA);
|
||||
std::string msgId = item->data(ROLE_MSGID).toString().toStdString();
|
||||
|
@ -78,6 +78,7 @@ private slots:
|
||||
|
||||
void markAsRead();
|
||||
void markAsUnread();
|
||||
void markWithStar(bool checked);
|
||||
|
||||
void emptyTrash();
|
||||
|
||||
@ -122,12 +123,14 @@ private:
|
||||
void insertMsgTxtAndFiles(QModelIndex index = QModelIndex(), bool bSetToRead = true);
|
||||
|
||||
bool getCurrentMsg(std::string &cid, std::string &mid);
|
||||
void setMsgAsReadUnread(const QList<int> &Rows, bool bRead);
|
||||
void setMsgAsReadUnread(const QList<int> &Rows, bool read);
|
||||
void setMsgStar(const QList<int> &Rows, bool mark);
|
||||
|
||||
void setCurrentFileName(const QString &fileName);
|
||||
|
||||
int getSelectedMsgCount (QList<int> *pRows, QList<int> *pRowsRead, QList<int> *pRowsUnread);
|
||||
int getSelectedMsgCount (QList<int> *pRows, QList<int> *pRowsRead, QList<int> *pRowsUnread, QList<int> *pRowsStar);
|
||||
bool isMessageRead(int nRow);
|
||||
bool hasMessageStar(int nRow);
|
||||
|
||||
/* internal handle splitter */
|
||||
void togglefileview_internal();
|
||||
|
@ -370,6 +370,8 @@
|
||||
<file>images/show_toolbox_frame.png</file>
|
||||
<file>images/start.png</file>
|
||||
<file>images/stop.png</file>
|
||||
<file>images/star-on-16.png</file>
|
||||
<file>images/star-off-16.png</file>
|
||||
<file>images/StatsCumulative.png</file>
|
||||
<file>images/StatisticsDetail.png</file>
|
||||
<file>images/status_unknown.png</file>
|
||||
|
BIN
retroshare-gui/src/gui/images/star-off-16.png
Normal file
BIN
retroshare-gui/src/gui/images/star-off-16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 638 B |
BIN
retroshare-gui/src/gui/images/star-on-16.png
Normal file
BIN
retroshare-gui/src/gui/images/star-on-16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 749 B |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user