示例#1
0
void WINAPI duListCtrl::ResetLine()
{
	m_nYOffset = 0;
	m_nFirstLine = 0;
	m_nFLTotalHeight = 0;
	m_nHotLine = 0;
	if (Plugin_IsValid(m_pHot))
	{
		m_pHot->SetState(DU_STATE_NORMAL);
		Plugin_Redraw(m_pHot, TRUE);
	}

	UpdateScroll();
	AdjustVisibleLine(0);
}
示例#2
0
/**
 * @brief マウスが押されたときの処理
 * @param x マウス座標x
 * @param y マウス座標y
 */
void CFootyView::OnMouseDown(int x,int y)
{
	/*宣言*/
	CEditPosition cNowPosition;
	CEditPosition cSelStart,cSelEnd;
	CKeyBoardState cKeyStates(m_bShiftLocked);
	bool bSelected = m_pDocuments->IsSelecting();
	
	/*フォーカスを合わせる*/
	::SetFocus(m_hWnd);

	if (y > m_nRulerHeight)
	{
		// 行番号表示領域
		if (x < m_nLineCountWidth)
		{
			CalcLineCount(y,&cSelStart,&cSelEnd);
			m_pDocuments->SetSelectStart(&cSelStart);
			m_pDocuments->SetSelectEndNormal(&cSelEnd);
			m_pDocuments->SetSelLineStart();
			*m_pDocuments->GetCaretPosition() = cSelEnd;
			m_pDocuments->SendMoveCaretCallBack();

			// ドラッグ情報を入れる
			m_nDragMode = DRAGMODE_LINE;
			SetCapture(m_hWnd);				// マウスキャプチャ開始

			// 再描画処理
			Refresh();
		}
		// 通常のエディタ領域
		else 
		{
			// キャレット位置を移動する
			CalcInfoFromMouse(x,y,&cNowPosition);
			if (cKeyStates.IsShiftPushed())	// Shiftキーが押されているときは選択する
			{
				if (m_pDocuments->IsSelecting())
					m_pDocuments->SetSelectEndNormal(&cNowPosition);
				else
				{
					m_pDocuments->SetSelectStart();
					m_pDocuments->SetSelectEndNormal(&cNowPosition);
				}
				bSelected = true;
			}
			else m_pDocuments->SetSelectStart(&cNowPosition);
			*m_pDocuments->GetCaretPosition() = cNowPosition;
			m_pDocuments->SendMoveCaretCallBack();

			// ドラッグ情報を入れる
			m_nDragMode = DRAGMODE_MOUSE;
			SetCapture(m_hWnd);				// マウスキャプチャ開始

			// 位置を再設定しておく
			bool bAdLine = AdjustVisibleLine();
			bool bAdPos = AdjustVisiblePos();

			/*再描画処理*/
			if (bSelected || bAdLine || bAdPos)Refresh();
			else CaretRefresh();
		}
	}
}
示例#3
0
duPlugin *WINAPI duListCtrl::InsertLine(int nIndex, LPCTSTR lpszTemplate)
{
	int nLineCount = m_vtLines.size();
	if (nIndex == -1)
		nIndex = nLineCount;

	if (nIndex < 0 || nIndex > nLineCount || lpszTemplate == NULL)
		return NULL;
	
	duPlugin *pTemplate = GetPluginByName(lpszTemplate);
	if (pTemplate == NULL)
		return NULL;

	duCtrlManager *pCtrlManager = GetCtrlManager(m_hWnd);
	duPlugin *pNewPlugin = pCtrlManager->Clone(pTemplate, this, NULL, m_nCloneIndex);
	if (pNewPlugin == NULL)
		return NULL;

	m_nCloneIndex++;
	pNewPlugin->SetVisible(FALSE); // 初始化隐藏
	m_vtLines.insert(m_vtLines.begin() + nIndex, pNewPlugin);
	
	duRect rcNewPlugin;
	pNewPlugin->GetRect(&rcNewPlugin);
	m_nViewCy += rcNewPlugin.Height();
	nLineCount = m_vtLines.size();
	
	duRect rcListCtrl;
	GetRect(&rcListCtrl);
	
	if (nIndex < m_nFirstLine)
	{
		int nInsertHeight = rcNewPlugin.Height();
		int nNewFirstLine = m_nFirstLine + 1;
		int nFLTotalHeight = m_nFLTotalHeight;
		
		duPlugin *pOldFirstLine = m_vtLines[nNewFirstLine];
		duRect rcOld;
		pOldFirstLine->GetRect(&rcOld);

		int i;
		for (i = nNewFirstLine; i >= 0; i--)
		{
			duPlugin *pTemp = m_vtLines[i];
			wstring strText = pTemp->GetText();
			if (pTemp)
			{
				duRect rcTemp;
				pTemp->GetRect(&rcTemp);
				
				nNewFirstLine--;
				nInsertHeight -= rcTemp.Height();
				if (nInsertHeight <= rcOld.Height())
				{
					nFLTotalHeight += nInsertHeight;
					break;
				}
			}
		}
		
		m_nFLTotalHeight = nFLTotalHeight;
		m_nFirstLine = nNewFirstLine;
	}

	UpdateScroll();
	
	int nTop = m_nFLTotalHeight - m_nYOffset;
	AdjustVisibleLine(nTop);
	return pNewPlugin;
}
示例#4
0
void WINAPI duListCtrl::VertScroll(int nPos)
{
	int nLineCount = m_vtLines.size();
	if (nLineCount <= 0)
		return;

	// 判断nPos正确性
	duPlugin *pFirstLine = m_vtLines[m_nFirstLine];
	duRect rcFirstLine;
	pFirstLine->GetRect(&rcFirstLine);

	int i;
	for (i = 0;i < nLineCount; i++)
	{
		duPlugin *pTemp = m_vtLines[i];
		pTemp->SetVisible(FALSE);
	}
	
	int nFirstLineOffset = m_nYOffset - m_nFLTotalHeight + nPos;
	int nTop = 0;
	if (rcFirstLine.Height() <= nFirstLineOffset) // 计算滚动几个控件 <= ?
	{
		int nNewFirstLine = m_nFirstLine;
		int nNewFLTotalHeight = m_nFLTotalHeight;
		int i;
		for (i = nNewFirstLine; i < m_vtLines.size(); i++)
		{
			duPlugin *pTemp = m_vtLines[i];
			duRect rcTemp;
			pTemp->GetRect(&rcTemp);
			
			nFirstLineOffset -= rcTemp.Height();
			if (nFirstLineOffset < 0)
			{
				nFirstLineOffset += rcTemp.Height();
				break;
			}
			
			nNewFLTotalHeight += rcTemp.Height();
			nNewFirstLine++;
		}
		
		m_nFirstLine = nNewFirstLine;
		m_nFLTotalHeight = nNewFLTotalHeight;
	}
	else if (nFirstLineOffset < 0)
	{
		int nNewFirstLine = m_nFirstLine - 1;
		int nNewFLTotalHeight = m_nFLTotalHeight;
		int i;
		for (i = nNewFirstLine; i >= 0; i--)
		{
			duPlugin *pTemp = m_vtLines[i];
			duRect rcTemp;
			pTemp->GetRect(&rcTemp);
			
			nFirstLineOffset += rcTemp.Height();
			nNewFLTotalHeight -= rcTemp.Height();
			if (nFirstLineOffset > 0)
			{
				//nFirstLineOffset -= rcTemp.Height();
				break;
			}
			
			nNewFirstLine--;
		}
		
		if (nNewFirstLine < 0)
		{
			m_nFirstLine = 0;
			m_nFLTotalHeight = 0;
			nFirstLineOffset = 0;
		}
		else
		{
			m_nFirstLine = nNewFirstLine;
			m_nFLTotalHeight = nNewFLTotalHeight;
		}
	}
	
	//_TRACE(_T("nFirstLineOffset : %d\n"), nFirstLineOffset);
	AdjustVisibleLine(-nFirstLineOffset);
}