notepad--/MediatorDisplay.cpp

131 lines
2.7 KiB
C++
Executable File

#include "MediatorDisplay.h"
//这里如果直接让左右互相同步,互相影响,可能导致混乱。需要一个中间调停者模式,作为中间人去控制同步消息
//中介者模式意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
//主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
//之前不使用该模式时,左右显示同步互相交互,时而发生消息混乱
MediatorDisplay::MediatorDisplay():QObject(nullptr)
{
m_leftLineNum = 0;
m_rightLineNum = 0;
m_leftScrollValue = 0;
m_rightScrollValue = 0;
}
MediatorDisplay::~MediatorDisplay()
{
}
void MediatorDisplay::setLeftNum(int value)
{
m_leftLineNum = value;
if (m_leftLineNum != m_rightLineNum)
{
emit syncCurLineNum(0);
}
}
void MediatorDisplay::setRightNum(int value)
{
m_rightLineNum = value;
if (m_leftLineNum != m_rightLineNum)
{
emit syncCurLineNum(1);
}
}
int MediatorDisplay::getLeftNum()
{
return m_leftLineNum;
}
int MediatorDisplay::getRightNum()
{
return m_rightLineNum;
}
void MediatorDisplay::setLeftScrollValue(int value)
{
if (m_leftScrollValue != value)
{
m_leftScrollValue = value;
}
//如果左右不相等,则推动对方去同步
if (m_leftScrollValue != m_rightScrollValue)
{
emit syncCurScrollValue(0);
}
}
void MediatorDisplay::setRightScrollValue(int value)
{
if (m_rightScrollValue != value)
{
m_rightScrollValue = value;
}
if (m_leftScrollValue != m_rightScrollValue)
{
emit syncCurScrollValue(1);
}
}
int MediatorDisplay::getLeftScrollValue()
{
return m_leftScrollValue;
}
int MediatorDisplay::getRightScrollValue()
{
return m_rightScrollValue;
}
void MediatorDisplay::setLeftScrollXValue(int value)
{
if (m_leftScrollXValue != value)
{
m_leftScrollXValue = value;
}
//如果左右不相等,则推动对方去同步
if (m_leftScrollXValue != m_rightScrollXValue)
{
emit syncCurScrollXValue(0);
}
}
void MediatorDisplay::setRightScrollXValue(int value)
{
if (m_rightScrollXValue != value)
{
m_rightScrollXValue = value;
}
if (m_leftScrollXValue != m_rightScrollXValue)
{
emit syncCurScrollXValue(1);
}
}
int MediatorDisplay::getLeftScrollXValue()
{
return m_leftScrollXValue;
}
int MediatorDisplay::getRightScrollXValue()
{
return m_rightScrollXValue;
}