| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 | 
							- #include "findcmpwin.h"
 
- #include "qscidisplaywindow.h"
 
- #include <QRadioButton>
 
- #include <QMessageBox>
 
- FindCmpWin::FindCmpWin(RC_DIRECTION dir, QWidget *parent):QMainWindow(parent), m_editWidget(nullptr), m_isFindFirst(true), m_findHistory(nullptr)
 
- {
 
- 	ui.setupUi(this);
 
- 	m_BackwardDir = false;
 
- 	m_matchWhole = false;
 
- 	m_matchCase = false;
 
- 	m_matchWrap = true;
 
- 	m_searchMode = 1;
 
- 	if (dir == RC_LEFT)
 
- 	{
 
- 		ui.leftSearch->setChecked(true);
 
- 	}
 
- 	else
 
- 	{
 
- 		ui.rightSearch->setChecked(true);
 
- 	}
 
- 	connect(ui.leftSearch, &QRadioButton::toggled, this, &FindCmpWin::slot_isSearchLeft);
 
- 	connect(ui.findModeRegularBt, &QRadioButton::toggled, this, &FindCmpWin::slot_findModeRegularBtChange);
 
- }
 
- FindCmpWin::~FindCmpWin()
 
- {
 
- }
 
- void FindCmpWin::slot_isSearchLeft(bool checked)
 
- {
 
- 	emit sgin_searchDirectionChange(checked ? RC_LEFT : RC_RIGHT);
 
- }
 
- void FindCmpWin::setCurrentTab(FindTabIndex index)
 
- {
 
- 	ui.findinfilesTab->setCurrentIndex(index);
 
- 	if (FIND_TAB == index)
 
- 	{
 
- 		ui.findComboBox->setFocus();
 
- 	}
 
- }
 
- void FindCmpWin::setWorkEdit(QsciDisplayWindow *editWidget)
 
- {
 
- 	m_editWidget = editWidget;
 
- 	m_isFindFirst = true;
 
- }
 
- void FindCmpWin::setFindText(QString &text)
 
- {
 
- 	ui.findComboBox->setEditText(text);
 
- }
 
- void FindCmpWin::setFindHistory(QList<QString>* findHistory)
 
- {
 
- 	m_findHistory = findHistory;
 
- 	if ((m_findHistory != nullptr) && !m_findHistory->isEmpty())
 
- 	{
 
- 		ui.findComboBox->addItems(*m_findHistory);
 
- 		ui.findComboBox->clearEditText();
 
- 	}
 
- }
 
- //从ui读取参数配置到成员变量
 
- void FindCmpWin::updateParameterFromUI()
 
- {
 
- 	if (ui.findinfilesTab->currentIndex() == 0)
 
- 	{
 
- 		int searchMode = 0;
 
- 		if (ui.findModeNormalBt->isChecked())
 
- 		{
 
- 			searchMode = 1;
 
- 		}
 
- 		else if (ui.findModeRegularBt->isChecked())
 
- 		{
 
- 			searchMode = 2;
 
- 		}
 
- 		if (m_searchMode != searchMode)
 
- 		{
 
- 			m_searchMode = searchMode;
 
- 			m_isFindFirst = true;
 
- 		}
 
- 		if (m_expr != ui.findComboBox->currentText())
 
- 		{
 
- 			m_expr = ui.findComboBox->currentText();
 
- 			m_isFindFirst = true;
 
- 		}
 
- 		if (m_BackwardDir != ui.findBackwardBox->isChecked())
 
- 		{
 
- 			m_BackwardDir = ui.findBackwardBox->isChecked();
 
- 			m_isFindFirst = true;
 
- 		}
 
- 		if (m_matchWhole != ui.findMatchWholeBox->isChecked())
 
- 		{
 
- 			m_matchWhole = ui.findMatchWholeBox->isChecked();
 
- 			m_isFindFirst = true;
 
- 		}
 
- 		if (m_matchCase != ui.findMatchCaseBox->isChecked())
 
- 		{
 
- 			m_matchCase = ui.findMatchCaseBox->isChecked();
 
- 			m_isFindFirst = true;
 
- 		}
 
- 		if (m_matchWrap != ui.findWrapBox->isChecked())
 
- 		{
 
- 			m_matchWrap = ui.findWrapBox->isChecked();
 
- 			m_isFindFirst = true;
 
- 		}
 
- 	}
 
- 	m_re = ((m_searchMode == 2) ? true : false);
 
- 	if (m_cs != m_matchCase)
 
- 	{
 
- 		m_cs = m_matchCase;
 
- 	}
 
- 	if (m_wo != m_matchWhole)
 
- 	{
 
- 		m_wo = m_matchWhole;
 
- 	}
 
- 	if (m_wrap != m_matchWrap)
 
- 	{
 
- 		m_wrap = m_matchWrap;
 
- 	}
 
- 	m_forward = !m_BackwardDir;
 
- }
 
- void FindCmpWin::addFindHistory(QString &text)
 
- {
 
- 	if ((m_findHistory != nullptr) && (-1 == m_findHistory->indexOf(text)))
 
- 	{
 
- 		m_findHistory->push_front(text);
 
- 		ui.findComboBox->insertItem(0, text);
 
- 	}
 
- }
 
- //检查是否是第一次查找,凡是参数变化了,则认定为是第一次查找。
 
- //因为查找分firstFirst和firstNext,则是qscint特性决定的。所以正确识别第一次查找是必要的
 
- bool FindCmpWin::isFirstFind()
 
- {
 
- 	return m_isFindFirst;
 
- }
 
- //一旦修改条件发生变化,则认定为第一次查找
 
- void FindCmpWin::slot_findNext()
 
- {
 
- 	if (ui.findComboBox->currentText().isEmpty())
 
- 	{
 
- 		ui.statusbar->showMessage(tr("what find is null !"), 3000);
 
- 		return;
 
- 	}
 
- 	updateParameterFromUI();
 
- 	QsciDisplayWindow* pEdit = m_editWidget;
 
- 	//第一次查找
 
- 	if (isFirstFind())
 
- 	{
 
- 		if (pEdit != nullptr)
 
- 		{
 
- 			QString whatFind = ui.findComboBox->currentText();
 
- 			if (!pEdit->findFirst(whatFind, m_re, m_cs, m_wo, m_wrap, m_forward))
 
- 			{
 
- 				ui.statusbar->showMessage(tr("cant't find text \'%1\'").arg(m_expr),3000);
 
- 			}
 
- 			m_isFindFirst = false;
 
- 			//加入历史列表
 
- 			addFindHistory(whatFind);
 
- 		}
 
- 	}
 
- 	else
 
- 	{
 
- 		//查找下一个
 
- 		if (pEdit != nullptr)
 
- 		{
 
- 			if (!pEdit->findNext())
 
- 			{
 
- 				ui.statusbar->showMessage(tr("no more find text \'%1\'").arg(m_expr),3000);
 
- 			}
 
- 		}
 
- 	}
 
- }
 
- //
 
- //void FindCmpWin::addCurFindRecord(QsciDisplayWindow* pEdit, FindCmpRecords& recordRet)
 
- //{
 
- //	int pos = pEdit->execute(SCI_GETCURRENTPOS);
 
- //	int lineNum = pEdit->execute(SCI_LINEFROMPOSITION, pos);
 
- //	int lineLens = pEdit->execute(SCI_LINELENGTH, lineNum);
 
- //
 
- //	char* lineText = new char[lineLens + 1];
 
- //	memset(lineText, 0, lineLens + 1);
 
- //	pEdit->execute(SCI_GETCURLINE, lineLens, reinterpret_cast<sptr_t>(lineText));
 
- //
 
- //	FindCmpRecord aRecord;
 
- //	aRecord.lineNum = lineNum;
 
- //	aRecord.pos = pos;
 
- //	aRecord.lineContents = QString(lineText);
 
- //
 
- //	delete[]lineText;
 
- //	
 
- //	recordRet.records.append(aRecord);
 
- //}
 
- void FindCmpWin::slot_findModeRegularBtChange(bool checked)
 
- {
 
- 	if (checked)
 
- 	{
 
- 		ui.findBackwardBox->setEnabled(false);
 
- 		ui.findBackwardBox->setChecked(false);
 
- 		ui.findMatchWholeBox->setEnabled(false);
 
- 		ui.findMatchWholeBox->setChecked(false);
 
- 	}
 
- 	else
 
- 	{
 
- 		ui.findBackwardBox->setEnabled(true);
 
- 		ui.findMatchWholeBox->setEnabled(true);
 
- 	}
 
- 	m_isFindFirst = true;
 
- }
 
 
  |