Label &Label::operator=(const Label & d) { if (this==&d) { return *this; } _Empty(); if (!IsEmpty()) { for (_Ary * loop = d._Head; loop!=d._Tail; loop = loop->next) { InsertL(loop->ch); } } return *this; }
Label::~Label() { _Empty(); }
/*! 現在の折り返し文字数に合わせて全データのレイアウト情報を再生成します @date 2004.04.03 Moca TABが使われると折り返し位置がずれるのを防ぐため, nPosXがインデントを含む幅を保持するように変更.m_nMaxLineKetasは 固定値となったが,既存コードの置き換えは避けて最初に値を代入するようにした. */ void CLayoutMgr::_DoLayout(bool bBlockingHook) { MY_RUNNINGTIMER( cRunningTimer, "CLayoutMgr::_DoLayout" ); /* 表示上のX位置 2004.03.28 Moca nPosXはインデント幅を含むように変更(TAB位置調整のため) */ int nAllLineNum; if( GetListenerCount() != 0 ){ NotifyProgress(0); /* 処理中のユーザー操作を可能にする */ if( bBlockingHook ){ if( !::BlockingHook( NULL ) )return; } } _Empty(); Init(); // Nov. 16, 2002 genta // 折り返し幅 <= TAB幅のとき無限ループするのを避けるため, // TABが折り返し幅以上の時はTAB=4としてしまう // 折り返し幅の最小値=10なのでこの値は問題ない if( GetTabSpace() >= GetMaxLineKetas() ){ m_nTabSpace = CKetaXInt(4); } nAllLineNum = m_pcDocLineMgr->GetLineCount(); SLayoutWork _sWork; SLayoutWork* pWork = &_sWork; pWork->pcDocLine = m_pcDocLineMgr->GetDocLineTop(); // 2002/2/10 aroka CDocLineMgr変更 pWork->pLayout = NULL; pWork->pcColorStrategy = NULL; pWork->colorPrev = COLORIDX_DEFAULT; pWork->nCurLine = CLogicInt(0); while( NULL != pWork->pcDocLine ){ pWork->cLineStr = pWork->pcDocLine->GetStringRefWithEOL(); pWork->eKinsokuType = KINSOKU_TYPE_NONE; //@@@ 2002.04.20 MIK pWork->nBgn = CLogicInt(0); pWork->nPos = CLogicInt(0); pWork->nWordBgn = CLogicInt(0); pWork->nWordLen = CLogicInt(0); pWork->nPosX = CLayoutInt(0); // 表示上のX位置 pWork->nIndent = CLayoutInt(0); // インデント幅 _MakeOneLine(pWork, &CLayoutMgr::_OnLine1); if( pWork->nPos - pWork->nBgn > 0 ){ // 2002/03/13 novice AddLineBottom( pWork->_CreateLayout(this) ); pWork->colorPrev = pWork->pcColorStrategy->GetStrategyColorSafe(); pWork->exInfoPrev.SetColorInfo(pWork->pcColorStrategy->GetStrategyColorInfoSafe()); } // 次の行へ pWork->nCurLine++; pWork->pcDocLine = pWork->pcDocLine->GetNextLine(); // 処理中のユーザー操作を可能にする if( GetListenerCount()!=0 && 0 < nAllLineNum && 0 == ( pWork->nCurLine % 1024 ) ){ NotifyProgress(::MulDiv( pWork->nCurLine, 100 , nAllLineNum ) ); if( bBlockingHook ){ if( !::BlockingHook( NULL ) )return; } } // 2002/03/13 novice } // 2011.12.31 Botの色分け情報は最後に設定 m_nLineTypeBot = pWork->pcColorStrategy->GetStrategyColorSafe(); m_cLayoutExInfoBot.SetColorInfo(pWork->pcColorStrategy->GetStrategyColorInfoSafe()); m_nPrevReferLine = CLayoutInt(0); m_pLayoutPrevRefer = NULL; if( GetListenerCount()!=0 ){ NotifyProgress(0); /* 処理中のユーザー操作を可能にする */ if( bBlockingHook ){ if( !::BlockingHook( NULL ) )return; } } }