pidgin/quail/quail-redux

Merge

2013-08-21, Phil Hannent
06d80fc8a0d0
Merge
--- a/TODO.txt Mon Aug 19 10:57:11 2013 +0100
+++ b/TODO.txt Wed Aug 21 09:18:45 2013 +0100
@@ -4,7 +4,6 @@
* Use Aduim's Message Styles for the conversation window
* Buddy icons showing up
* Buddy status icons showing
-* Join a chat
* Formatting toolbar on the conversation window
* Kill off dead code
* Rename group
@@ -31,8 +30,8 @@
* Add recent statuses to the change status menu
* Display the currently used icon on the buddy list window
* Enable the selection of a new buddy icon
-* Conversation room list display
-* Conversation text entry
+* Conversation room list display status icons
+* Add "User is typing" notification
DONE
===========================================================
@@ -44,3 +43,6 @@
* Tray icon
* Add Accounts to tray icon
* Account icons now correctly changing colour on connect and disconnect
+* Join a chat
+* Conversation room list display
+* Conversation text entry
--- a/src/QuailBuddyList.cpp Mon Aug 19 10:57:11 2013 +0100
+++ b/src/QuailBuddyList.cpp Wed Aug 21 09:18:45 2013 +0100
@@ -438,7 +438,7 @@
* QQuailBuddyList static utility functions
**************************************************************************/
QPixmap
-QQuailBuddyList::getBuddyStatusIcon(PurpleBlistNode *node)
+QQuailBuddyList::getBuddyStatusIcon2(PurpleBlistNode *node)
{
qDebug() << "QQuailBuddyList::getBuddyStatusIcon";
QImage statusImage;
@@ -540,6 +540,100 @@
return statusPixmap;
}
+QPixmap
+QQuailBuddyList::getBuddyStatusIcon(PurpleBlistNode *node)
+{
+ qDebug() << "QQuailBuddyList::getBuddyStatusIcon";
+ QPixmap returnImage;
+ QQuailBListItem *qnode = (QQuailBListItem*)node->ui_data;
+ QQuailBListItem *qbuddynode = NULL;
+ PurpleBuddy *buddy = NULL;
+ PurpleChat *chat = NULL;
+
+ if(PURPLE_BLIST_NODE_IS_CONTACT(node)) {
+ if(!qnode->isExpanded()) {
+ buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
+ if (buddy != NULL)
+ qbuddynode = (QQuailBListItem*)((PurpleBlistNode*)buddy)->ui_data;
+ }
+ } else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) {
+ buddy = (PurpleBuddy*)node;
+ qbuddynode = (QQuailBListItem*)node->ui_data;
+ } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) {
+ chat = (PurpleChat*)node;
+ } else {
+ qDebug() << "QQuailBuddyList::getBuddyStatusIcon.1";
+ return QPixmap();
+ }
+
+ if(buddy || chat) {
+ PurpleAccount *account;
+ PurplePlugin *prpl;
+
+ if(buddy)
+ account = buddy->account;
+ else
+ account = chat->account;
+
+ prpl = purple_find_prpl(purple_account_get_protocol_id(account));
+ if(!prpl) {
+ qDebug() << "QQuailBuddyList::getBuddyStatusIcon.2";
+ return QPixmap();
+ }
+ }
+
+ if(buddy) {
+ PurplePresence *p;
+ gboolean trans;
+
+ p = purple_buddy_get_presence(buddy);
+ trans = purple_presence_is_idle(p);
+
+ if (PURPLE_BUDDY_IS_ONLINE(buddy) && qbuddynode && qbuddynode->recentSignedOnOff())
+ returnImage = QPixmap(":/data/images/status/log-in.png");
+ else if (qbuddynode && qbuddynode->recentSignedOnOff())
+ returnImage = QPixmap(":/data/images/status/log-out.png");
+ else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_UNAVAILABLE))
+ if (trans)
+ returnImage = QQuailImageUtils::greyPixmap(
+ QPixmap(":/data/images/status/busy.png"),
+ "busy.png");
+ else
+ returnImage = QPixmap(":/data/images/status/busy.png");
+ else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AWAY))
+ if (trans)
+ returnImage = QQuailImageUtils::greyPixmap(
+ QPixmap(":/data/images/status/away.png"),
+ "away.png");
+ else
+ returnImage = QPixmap(":/data/images/status/away.png");
+ else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_EXTENDED_AWAY))
+ if (trans)
+ returnImage = QQuailImageUtils::greyPixmap(
+ QPixmap(":/data/images/status/extended-away.png"),
+ "extended-away.png");
+ else
+ returnImage = QPixmap(":/data/images/status/extended-away.png");
+ else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_OFFLINE))
+ returnImage = QPixmap(":/data/images/status/offline.png");
+ else if (trans)
+ returnImage = QQuailImageUtils::greyPixmap(
+ QPixmap(":/data/images/status/available.png"),
+ "available.png");
+ else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_INVISIBLE))
+ returnImage = QPixmap(":/data/images/status/invisible.png");
+ else
+ returnImage = QPixmap(":/data/images/status/available.png");
+ } else if (chat) {
+ returnImage = QPixmap(":/data/images/status/chat.png");
+ } else {
+ returnImage = QPixmap(":/data/images/status/person.png");
+ }
+
+ return returnImage;
+}
+
+
/**************************************************************************
* QQuailBuddyList
**************************************************************************/
--- a/src/QuailBuddyList.h Mon Aug 19 10:57:11 2013 +0100
+++ b/src/QuailBuddyList.h Wed Aug 21 09:18:45 2013 +0100
@@ -27,8 +27,6 @@
#include <QTreeWidget>
-#include "QuailImageUtils.h"
-
class QQuailBListItem : public QTreeWidgetItem
{
public:
@@ -41,6 +39,9 @@
void updateInfo();
void setExpanded(bool expanded);
bool isExpanded() const;
+ //TODO: Find out how to calculate this
+ bool recentSignedOnOff()
+ { return false; }
/*reimp*/QSize sizeHint ( int column ) const;
protected:
@@ -67,6 +68,7 @@
public:
static QPixmap getBuddyStatusIcon(PurpleBlistNode *node);
+ static QPixmap getBuddyStatusIcon2(PurpleBlistNode *node);
public:
QQuailBuddyList(QWidget *parent = NULL);
@@ -141,8 +143,6 @@
void updateContact(PurpleBlistNode *node);
void updateBuddy(PurpleBlistNode *node);
void updateChat(PurpleBlistNode *node);
-
- private:
PurpleBuddyList *quailBlist;
QTimer *saveTimer;
--- a/src/QuailConvWindow.cpp Mon Aug 19 10:57:11 2013 +0100
+++ b/src/QuailConvWindow.cpp Wed Aug 21 09:18:45 2013 +0100
@@ -348,12 +348,12 @@
}
void
-QQuailConvChat::addUser(const char *user)
+QQuailConvChat::addUser(PurpleConvChatBuddy *user)
{
qDebug() << "QQuailConvChat::addUser()";
QListWidgetItem *item = new QListWidgetItem();
//TODO: Fix this, its just printing out rubbish
- item->setText(QString::fromUtf8(user));
+ item->setText(user->alias);
//TODO: Set the chat status icon
// if (purple_conv_chat_is_user_ignored(chat, user))
@@ -372,7 +372,7 @@
{
qDebug() << "QQuailConvChat::addUsers()";
for (GList *l = users; l != NULL; l = l->next)
- addUser((const char *)l->data);
+ addUser((PurpleConvChatBuddy *)l->data);
}
void
@@ -428,14 +428,7 @@
/* For chats */
userList = new QListWidget(this);
-// QStringList horzHeaders;
-// horzHeaders << tr("Status Icon") << tr("User");
-// userList->setColumnCount(horzHeaders.size());
-// userList->setHorizontalHeaderLabels( horzHeaders );
-// userList->setSelectionBehavior(QAbstractItemView::SelectRows);
- //userList->header()->hide();
- //userList->setSorting(1);
- userList->hide();
+ userList->setSortingEnabled(true);
vbox->addWidget(textDisplay);
vbox->addWidget(entry);
@@ -480,13 +473,14 @@
{
qDebug() << "QQuailConvChat::send()";
QString text = entry->toPlainText();
-
- if (text[text.length() - 1] == '\n')
- text.remove(text.length() - 1, 1);
+ if (!text.isEmpty())
+ {
+ if (text[text.length() - 1] == '\n')
+ text.remove(text.length() - 1, 1);
- purple_conv_chat_send(PURPLE_CONV_CHAT(conv), text.toStdString().c_str());
-
- entry->setText("");
+ purple_conv_chat_send(PURPLE_CONV_CHAT(conv), text.toStdString().c_str());
+ }
+ entry->setText("");
}
void
@@ -669,14 +663,14 @@
{
qDebug() << "QQuailConvIm::send()";
QString text = entry->toPlainText();
-
- if (text[text.length() - 1] == '\n')
- text.remove(text.length() - 1, 1);
+ if (!text.isEmpty())
+ {
+ if (text[text.length() - 1] == '\n')
+ text.remove(text.length() - 1, 1);
- purple_conv_im_send(PURPLE_CONV_IM(conv), text.toStdString().c_str());
-
- entry->setText("");
-
+ purple_conv_im_send(PURPLE_CONV_IM(conv), text.toStdString().c_str());
+ }
+ entry->setText("");
updateTyping();
}
--- a/src/QuailConvWindow.h Mon Aug 19 10:57:11 2013 +0100
+++ b/src/QuailConvWindow.h Wed Aug 21 09:18:45 2013 +0100
@@ -106,7 +106,7 @@
void write(const char *who, const char *message,
PurpleMessageFlags flags, time_t mtime);
- void addUser(const char *user);
+ void addUser(PurpleConvChatBuddy *user);
void addUsers(GList *users);
void renameUser(const char *oldName, const char *newName);
void removeUser(const char *user);
--- a/src/QuailMainWindow.cpp Mon Aug 19 10:57:11 2013 +0100
+++ b/src/QuailMainWindow.cpp Wed Aug 21 09:18:45 2013 +0100
@@ -148,8 +148,8 @@
purple_set_blist(purple_blist_new());
purple_blist_load();
- //purple_accounts_auto_login("quail");
retranslateUi(this);
+ purple_accounts_restore_current_statuses();
}
QQuailMainWindow::~QQuailMainWindow()
--- a/src/QuailMultiLineEdit.cpp Mon Aug 19 10:57:11 2013 +0100
+++ b/src/QuailMultiLineEdit.cpp Wed Aug 21 09:18:45 2013 +0100
@@ -21,6 +21,8 @@
* MA 02111-1307 USA
*/
#include "QuailMultiLineEdit.h"
+
+#include <QDebug>
#include <QEvent>
#include <QKeyEvent>
@@ -63,6 +65,7 @@
void
QQuailMultiLineEdit::keyPressEvent(QKeyEvent *event)
{
+ qDebug() << "QQuailMultiLineEdit::keyPressEvent";
int key = event->key();
if (historyEnabled)
@@ -94,14 +97,21 @@
{
history.prepend(this->toPlainText());
index = -1;
+ qDebug() << "QQuailMultiLineEdit::keyPressEvent.1";
+ emit returnPressed();
+ return;
}
else if (key == Qt::Key_Tab)
{
/* TODO Tab completion */
return;
}
+ else if (key == Qt::Key_Return && event->modifiers() == Qt::CTRL)
+ {
+ emit returnPressed();
+ }
}
- else if (key == Qt::Key_Down)
+ else if (key == Qt::Key_Down || key == Qt::Key_Return)
{
emit returnPressed();