mirror of
				https://gitlab.com/comunic/comunicmessages
				synced 2025-11-04 04:04:10 +00:00 
			
		
		
		
	ConversationsListWidget emits a signal to request a conversation to be
opened.
This commit is contained in:
		@@ -17,6 +17,8 @@ ConversationItemWidget::~ConversationItemWidget()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ConversationItemWidget::setConversation(const Conversation &conv, const UsersList &list)
 | 
					void ConversationItemWidget::setConversation(const Conversation &conv, const UsersList &list)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    mCurrentConversation = conv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ui->nameLabel->setText(ConversationsListHelper::getConversationDisplayName(conv, list));
 | 
					    ui->nameLabel->setText(ConversationsListHelper::getConversationDisplayName(conv, list));
 | 
				
			||||||
    QFont font = ui->nameLabel->font();
 | 
					    QFont font = ui->nameLabel->font();
 | 
				
			||||||
    font.setBold(!conv.sawLastMessage());
 | 
					    font.setBold(!conv.sawLastMessage());
 | 
				
			||||||
@@ -28,4 +30,28 @@ void ConversationItemWidget::setConversation(const Conversation &conv, const Use
 | 
				
			|||||||
        ui->numberMembersLabel->setText(tr("%1 members").arg(conv.members().size()));
 | 
					        ui->numberMembersLabel->setText(tr("%1 members").arg(conv.members().size()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ui->lastActivityLabel->setText(TimeUtils::TimeDiffToString(conv.lastActive()));
 | 
					    ui->lastActivityLabel->setText(TimeUtils::TimeDiffToString(conv.lastActive()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Conversation not active by default
 | 
				
			||||||
 | 
					    setActive(false);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ConversationItemWidget::mousePressEvent(QMouseEvent *)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    emit openConversation();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Conversation ConversationItemWidget::currentConversation() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return mCurrentConversation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ConversationItemWidget::setActive(bool active)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QString styleContainer = active ? "background: black; color: white" : "";
 | 
				
			||||||
 | 
					    setStyleSheet(styleContainer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QString styleLabels = "padding-left: 5px;";
 | 
				
			||||||
 | 
					    ui->numberMembersLabel->setStyleSheet(styleLabels);
 | 
				
			||||||
 | 
					    ui->lastActivityLabel->setStyleSheet(styleLabels);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,11 +10,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <QWidget>
 | 
					#include <QWidget>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../data/conversation.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Ui {
 | 
					namespace Ui {
 | 
				
			||||||
class ConversationItemWidget;
 | 
					class ConversationItemWidget;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Conversation;
 | 
					 | 
				
			||||||
class User;
 | 
					class User;
 | 
				
			||||||
class UsersList;
 | 
					class UsersList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,7 +25,7 @@ class ConversationItemWidget : public QWidget
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit ConversationItemWidget(QWidget *parent = nullptr);
 | 
					    explicit ConversationItemWidget(QWidget *parent = nullptr);
 | 
				
			||||||
    ~ConversationItemWidget();
 | 
					    ~ConversationItemWidget() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Apply a conversation to the widget
 | 
					     * Apply a conversation to the widget
 | 
				
			||||||
@@ -34,8 +35,35 @@ public:
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    void setConversation(const Conversation &conv, const UsersList &list);
 | 
					    void setConversation(const Conversation &conv, const UsersList &list);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get the current conversation represented by this widget
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return The current conversation of this widget
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Conversation currentConversation() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Mark the current conversation as active or not
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param active TRUE to mark the conversation as active /
 | 
				
			||||||
 | 
					     *      FALSE else
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void setActive(bool active);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void mousePressEvent(QMouseEvent *) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signals:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Request the conversation represented by this widget to be opened
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void openConversation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    Ui::ConversationItemWidget *ui;
 | 
					    Ui::ConversationItemWidget *ui;
 | 
				
			||||||
 | 
					    Conversation mCurrentConversation;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // CONVERSATIONITEMWIDGET_H
 | 
					#endif // CONVERSATIONITEMWIDGET_H
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,13 +32,13 @@
 | 
				
			|||||||
   <item>
 | 
					   <item>
 | 
				
			||||||
    <layout class="QHBoxLayout" name="horizontalLayout">
 | 
					    <layout class="QHBoxLayout" name="horizontalLayout">
 | 
				
			||||||
     <property name="spacing">
 | 
					     <property name="spacing">
 | 
				
			||||||
      <number>8</number>
 | 
					      <number>0</number>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
     <property name="sizeConstraint">
 | 
					     <property name="sizeConstraint">
 | 
				
			||||||
      <enum>QLayout::SetMinimumSize</enum>
 | 
					      <enum>QLayout::SetMinimumSize</enum>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
      <widget class="QLabel" name="label_2">
 | 
					      <widget class="QLabel" name="membersIconLabel">
 | 
				
			||||||
       <property name="sizePolicy">
 | 
					       <property name="sizePolicy">
 | 
				
			||||||
        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
 | 
					        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
 | 
				
			||||||
         <horstretch>0</horstretch>
 | 
					         <horstretch>0</horstretch>
 | 
				
			||||||
@@ -60,6 +60,9 @@
 | 
				
			|||||||
       <property name="scaledContents">
 | 
					       <property name="scaledContents">
 | 
				
			||||||
        <bool>true</bool>
 | 
					        <bool>true</bool>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="margin">
 | 
				
			||||||
 | 
					        <number>0</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
      </widget>
 | 
					      </widget>
 | 
				
			||||||
     </item>
 | 
					     </item>
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
@@ -78,6 +81,9 @@
 | 
				
			|||||||
       <property name="text">
 | 
					       <property name="text">
 | 
				
			||||||
        <string>TextLabel</string>
 | 
					        <string>TextLabel</string>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="margin">
 | 
				
			||||||
 | 
					        <number>0</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
      </widget>
 | 
					      </widget>
 | 
				
			||||||
     </item>
 | 
					     </item>
 | 
				
			||||||
    </layout>
 | 
					    </layout>
 | 
				
			||||||
@@ -85,10 +91,10 @@
 | 
				
			|||||||
   <item>
 | 
					   <item>
 | 
				
			||||||
    <layout class="QHBoxLayout" name="horizontalLayout_2">
 | 
					    <layout class="QHBoxLayout" name="horizontalLayout_2">
 | 
				
			||||||
     <property name="spacing">
 | 
					     <property name="spacing">
 | 
				
			||||||
      <number>8</number>
 | 
					      <number>0</number>
 | 
				
			||||||
     </property>
 | 
					     </property>
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
      <widget class="QLabel" name="label_3">
 | 
					      <widget class="QLabel" name="lastUpdateLabel">
 | 
				
			||||||
       <property name="maximumSize">
 | 
					       <property name="maximumSize">
 | 
				
			||||||
        <size>
 | 
					        <size>
 | 
				
			||||||
         <width>15</width>
 | 
					         <width>15</width>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,6 +66,29 @@ void ConversationsListWidget::onGotUsersInfo(bool success, const UsersList &user
 | 
				
			|||||||
    for(Conversation conv : mCurrList){
 | 
					    for(Conversation conv : mCurrList){
 | 
				
			||||||
        ConversationItemWidget *item = new ConversationItemWidget;
 | 
					        ConversationItemWidget *item = new ConversationItemWidget;
 | 
				
			||||||
        item->setConversation(conv, users);
 | 
					        item->setConversation(conv, users);
 | 
				
			||||||
 | 
					        connect(item, &ConversationItemWidget::openConversation, this, &ConversationsListWidget::onRequestOpenConversation);
 | 
				
			||||||
        layout()->addWidget(item);
 | 
					        layout()->addWidget(item);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ConversationsListWidget::onRequestOpenConversation()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Conversation conversation = qobject_cast<ConversationItemWidget *>(sender())->currentConversation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Notify ourselves
 | 
				
			||||||
 | 
					    setCurrentConversation(conversation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Notify everybody
 | 
				
			||||||
 | 
					    emit openConversation(conversation, mCurrList.getMembersInformation());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ConversationsListWidget::setCurrentConversation(const Conversation ¤tConversation)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mCurrentConversation = currentConversation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Update UI
 | 
				
			||||||
 | 
					    for(int i = 0; i < layout()->count(); i++){
 | 
				
			||||||
 | 
					        ConversationItemWidget *widget = qobject_cast<ConversationItemWidget *>(layout()->itemAt(i)->widget());
 | 
				
			||||||
 | 
					        widget->setActive(widget->currentConversation().iD() == currentConversation.iD());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,23 @@ public:
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    void refresh();
 | 
					    void refresh();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method is used to update the currently active conversation
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param currentConversation The current conversation
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void setCurrentConversation(const Conversation ¤tConversation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signals:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Signal emitted when a conversation is requested to be opened
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param conversation The conversation to open
 | 
				
			||||||
 | 
					     * @param list Information about potential required users
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void openConversation(Conversation conversation, UsersList list);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -41,12 +58,20 @@ private slots:
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    void onGotUsersInfo(bool success, const UsersList &users);
 | 
					    void onGotUsersInfo(bool success, const UsersList &users);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Triggered when a conversation item request a conversation to opened
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void onRequestOpenConversation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    ConversationsListHelper *mConversationsList;
 | 
					    ConversationsListHelper *mConversationsList;
 | 
				
			||||||
    UsersHelper *mUsersHelper;
 | 
					    UsersHelper *mUsersHelper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Current conversation in cache
 | 
					    //Current conversations list in cache
 | 
				
			||||||
    ConversationsList mCurrList;
 | 
					    ConversationsList mCurrList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Current opened conversation
 | 
				
			||||||
 | 
					    Conversation mCurrentConversation;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // CONVERSATIONSLISTWIDGET_H
 | 
					#endif // CONVERSATIONSLISTWIDGET_H
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user