Files
RRJServer/InstructorsAndTrainees/messanger/msgwidget.cpp

144 lines
4.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "msgwidget.h"
#include "ui_msgwidget.h"
MsgWidget::MsgWidget(QString avatar, AligneAvatar aligneAvatar, int width, QWidget *parent) :
QWidget(parent),
ui(new Ui::MsgWidget),
widthEdit(100)
{
ui->setupUi(this);
setAvatar(avatar);
if(aligneAvatar == AligneAvatar::Left)
setAligneAvatarLeft();
else
setAligneAvatarRight();
setWidth(width);
ui->lblAvatar->setObjectName("MsgWidgetLblAvatar");
}
MsgWidget::~MsgWidget()
{
delete ui;
}
void MsgWidget::setAligneAvatarLeft()
{
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Avatar);
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Text);
ui->horizontalLayout_Main->removeItem(ui->horizontalLayout_Add);
ui->horizontalLayout_EditText->removeItem(ui->horizontalSpacer_EditText);
ui->horizontalLayout_EditText->removeWidget(ui->editText);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Avatar);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Text);
ui->horizontalLayout_Main->addLayout(ui->horizontalLayout_Add);
ui->horizontalLayout_EditText->addWidget(ui->editText);
ui->horizontalLayout_EditText->addItem(ui->horizontalSpacer_EditText);
ui->editText->setObjectName("MsgWidgetEditTextRemote");
ui->lblTime->setObjectName("MsgWidgetLblTimeRemote");
ui->lblName->setObjectName("MsgWidgetLblNameRemote");
ui->lblTime->setAlignment(Qt::AlignLeft);
ui->lblName->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
//ui->editText->setAlignment(Qt::AlignLeft);
}
void MsgWidget::setAligneAvatarRight()
{
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Avatar);
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Text);
ui->horizontalLayout_Main->removeItem(ui->horizontalLayout_Add);
ui->horizontalLayout_EditText->removeItem(ui->horizontalSpacer_EditText);
ui->horizontalLayout_EditText->removeWidget(ui->editText);
ui->horizontalLayout_Main->addLayout(ui->horizontalLayout_Add);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Text);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Avatar);
ui->horizontalLayout_EditText->addItem(ui->horizontalSpacer_EditText);
ui->horizontalLayout_EditText->addWidget(ui->editText);
ui->editText->setObjectName("MsgWidgetEditTextLocal");
ui->lblTime->setObjectName("MsgWidgetLblTimeLocal");
ui->lblName->setObjectName("MsgWidgetLblNameLocal");
ui->lblTime->setAlignment(Qt::AlignRight);
ui->lblName->setAlignment(Qt::AlignRight | Qt::AlignBottom);
//ui->editText->setAlignment(Qt::AlignRight);
}
void MsgWidget::setAvatar(QString avatar)
{
QPixmap pix(avatar);
ui->lblAvatar->setPixmap( pix.scaled(32,32) );
}
void MsgWidget::setWidth(int width)
{
this->setFixedWidth(width);
widthEdit = width - 200;
}
void MsgWidget::setText(QString text)
{
ui->editText->setText(text);
}
void MsgWidget::setTime(QString timeStr)
{
ui->lblTime->setText(timeStr);
}
void MsgWidget::setName(QString name)
{
ui->lblName->setText(name);
}
void MsgWidget::on_editText_textChanged()
{
QString text = ui->editText->toPlainText();
QFontMetrics metricsFont(ui->editText->font()); //метрики шрифта
//геометрические параметры текста (высота/ширина в пикселях). В одну строку
QRect textRect = metricsFont.boundingRect(QRect(0, 0, 0, 0), 0, text);
int X = 10; // отступы
if(textRect.width() > widthEdit)
{//Не помещается в одну строку
textRect = metricsFont.boundingRect(QRect(0, 0, widthEdit, 1000), Qt::TextWordWrap, text);
if(textRect.width() > widthEdit)
{
QRect textRect1str = metricsFont.boundingRect(QRect(0, 0, widthEdit, 1000), 0, "string");
int ost = textRect.width() % widthEdit;
int cnt = textRect.width() / widthEdit;
//if(ost > 0)
cnt += 1;
this->setFixedHeight(textRect1str.height() * cnt + (ost? textRect1str.height() : 0) + X + 20 + 30 + 30);
ui->editText->setFixedHeight(textRect1str.height() * cnt + (ost? textRect1str.height() : 0) + X);
}
else
{
this->setFixedHeight(textRect.height() + X + 20 + 30 + 30);
ui->editText->setFixedHeight(textRect.height() + X);
}
}
else
{//В одну строку
this->setFixedHeight(textRect.height() + X + 20 + 30 + 30);
ui->editText->setFixedWidth(textRect.width() + X);
ui->editText->setFixedHeight(textRect.height() + X);
}
}