mirror of https://gitee.com/cxasm/notepad--.git
131 lines
2.7 KiB
C++
Executable File
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;
|
|
}
|