⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symbolpropertiesgeneralpage.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		ASSERT(hIcon != NULL);

		m_ctrlIcon.SetIcon(hIcon);

		return true;
	}
	return false;
}


void CSymbolPropertiesGeneralPage::DDX_SymbolName(CDataExchange* pDX,
												  UINT uIDC,
												  CString& rsSymbolName)
{
	if (pDX->m_bSaveAndValidate)
	{
		CString sNewSymbolName;

		::DDX_Text(pDX, uIDC, sNewSymbolName);

		// Remove whitespace before validating
		sNewSymbolName.TrimLeft();
		sNewSymbolName.TrimRight();

		// Now work out whether it's valid
		if (CResourceSymbol::IsValidName(sNewSymbolName) )
		{
			rsSymbolName = sNewSymbolName;
		}
		else
		{
			// Nope - alert the user
			CNGMessageBox dlg;

			dlg.FormatMsgEx(MAKEINTRESOURCE(IDP_SYM_NAME_INVALID),
							_T("RTF"),
							sNewSymbolName);
			dlg.SetRtf();
			dlg.SetStandardIcon(IDI_ERROR);
			dlg.AddButton(IDOK, true, true, _T("OK") );

			dlg.DoModal();

			pDX->Fail();
		}
	}
	else
	{
		::DDX_Text(pDX, uIDC, rsSymbolName);
	}
}


void CSymbolPropertiesGeneralPage::DDV_SymbolName(CDataExchange* pDX,
												  CString& rsSymbolName)
{
	if (pDX->m_bSaveAndValidate)
	{
		if ( (m_pSymbol != NULL) && !IsNameUnique(m_pSymbol, rsSymbolName, true) )
		{
			CNGMessageBox dlg;
			dlg.SetMsgEx( MAKEINTRESOURCE(IDP_SYM_NAME_WARNING), _T("RTF") );
			dlg.SetRtf();
			dlg.SetStandardIcon(IDI_ERROR);
			dlg.AddButton(IDOK, true, true, _T("OK") );

			dlg.DoModal();

			pDX->Fail();
		}
	}
}


bool CSymbolPropertiesGeneralPage::IsNameUnique(CResourceSymbol* pSymbol,
												const CString& sName,
												bool bCheckSameFileOnly) const
{
	bool bUnique = true;

	if ( (m_pSymbols != NULL) && (pSymbol != NULL) )
	{
		CResourceSymbolList listSymbols;
		m_pSymbols->GetSymbols(sName, listSymbols);

		POSITION pos = listSymbols.GetHeadPosition();
		while (pos != NULL)
		{
			CResourceSymbol* pNextSymbol = listSymbols.GetNext(pos);
			if (pNextSymbol != NULL)
			{
				if (pNextSymbol != pSymbol)
				{
					if (bCheckSameFileOnly)
					{
						if (AreSymbolsInSameFile(pNextSymbol, pSymbol) )
						{
							bUnique = false;
						}
					}
					else
					{
						bUnique = false;
						break;
					}
				}
			}
		}
	}
	return bUnique;
}


bool CSymbolPropertiesGeneralPage::IsValueUnique(CResourceSymbol* pSymbol,
												 UINT uValue,
												 bool bCheckSameFileOnly) const
{
	bool bUnique = true;

	if ( (NULL != m_pSymbols) && (NULL != pSymbol) )
	{
		CResourceSymbolList listSymbols;
		m_pSymbols->GetSymbols(uValue, listSymbols);

		POSITION pos = listSymbols.GetHeadPosition();
		while (pos != NULL)
		{
			CResourceSymbol* pNextSymbol = listSymbols.GetNext(pos);
			if (pNextSymbol != NULL)
			{
				if (pNextSymbol != pSymbol)
				{
					if (bCheckSameFileOnly)
					{
						if (AreSymbolsInSameFile(pNextSymbol, pSymbol) )
						{
							bUnique = false;
						}
					}
					else
					{
						bUnique = false;
						break;
					}
				}
			}
		}
	}
	return bUnique;
}

bool CSymbolPropertiesGeneralPage::SetWarningText(	const CString& sWarning,
													LPCTSTR pszIconID /*= NULL*/)
{
	if (!sWarning.IsEmpty() )
	{
		// Set the icon
		m_ctrlWarningIcon.SetIcon(AfxGetApp()->LoadStandardIcon(pszIconID));

		// Set the text
		m_ctrlWarning.SetWindowText(sWarning);
		m_ctrlWarningIcon.ShowWindow(true);
		m_ctrlWarning.ShowWindow(true);

		return true;
	}
	m_ctrlWarningIcon.ShowWindow(false);
	m_ctrlWarning.ShowWindow(false);

	return false;
}


bool CSymbolPropertiesGeneralPage::AreSymbolsInSameFile(CResourceSymbol* pSymbol1, CResourceSymbol* pSymbol2) const
{
	return (pSymbol1->GetUserData() == pSymbol2->GetUserData() );
}


void CSymbolPropertiesGeneralPage::CheckNameAndValue(void)
{
	CString sWarning;
	if (!IsNameUnique(m_pSymbol, m_sName, true) )
	{
		sWarning.LoadString(IDS_SYM_NAME_CONFLICT_CAPTION);
		SetWarningText( sWarning,
						IDI_ERROR);								// Check same files

		ShowDlgControl(IDC_SYM_FIX_VALUE, false);
	}
	else if (!IsNameUnique(m_pSymbol, m_sName, false) )			// Check other files
	{
		sWarning.LoadString(IDS_SYM_NAME_CONFLICT_CAPTION_EXTERNAL);
		SetWarningText( sWarning,
						IDI_WARNING);

		ShowDlgControl(IDC_SYM_FIX_VALUE, false);
	}
	else if (!IsValueUnique(m_pSymbol, m_uValue, true) )		// Check same file
	{
		sWarning.LoadString(IDS_SYM_VALUE_CONFLICT_CAPTION);
		SetWarningText( sWarning,
						IDI_WARNING);

		ShowDlgControl(IDC_SYM_FIX_VALUE, true);
	}
	else if (!IsValueUnique(m_pSymbol, m_uValue, false) )		// Check other files
	{
		sWarning.LoadString(IDS_SYM_VALUE_CONFLICT_CAPTION_EXTERNAL);
		SetWarningText( sWarning,
						IDI_WARNING);

		ShowDlgControl(IDC_SYM_FIX_VALUE, true);
	}
	else if (m_pSymbols->IsOutOfRange(SymbolTypes.GetType(m_sName), m_uValue) )			// Check if out of range
	{
		sWarning.LoadString(IDS_SYM_VALUE_OUT_OF_RANGE_CAPTION);
		SetWarningText( sWarning,
						IDI_WARNING);

		ShowDlgControl(IDC_SYM_FIX_VALUE, true);
	}
	else
	{
		SetWarningText( _T("") );

		ShowDlgControl(IDC_SYM_FIX_VALUE, false);
	}

	// Force a repaint so the warning paints correctly
	Invalidate();

	// Inform the parent that the symbol is changing
	// This is used to update the "Conflicts" page
	GetParent()->SendMessage(	WM_SYM_CHANGING,
								m_uValue,
								(LPARAM)(LPCTSTR)m_sName);
}


/////////////////////////////////////////////////////////////////////////////
// CSymbolPropertiesGeneralPage message handlers

void CSymbolPropertiesGeneralPage::OnCmdSymbolName(void)
{
	// Update type control and icon
	int eType = SymbolTypes.GetType(m_sName);

	// Set the icon...
	SetTypeIcon( SymbolTypes.GetIconID(eType) );

	// ...and the displayed description
	CString sNewType = SymbolTypes.GetTypeName(eType);
		
	bool bTypeChanged = (!m_sType.IsEmpty() && (sNewType != m_sType) );

	m_sType = sNewType;
	ASSERT(!m_sType.IsEmpty());

	if (bTypeChanged)
	{
		 // Pick a value for the symbol which is within range for its new type
		OnClickedFixValue();
	}
	UpdateData(false);

	// Check for name conflicts...
	CheckNameAndValue();
}


void CSymbolPropertiesGeneralPage::OnCmdSymbolValue(void)
{
	CheckNameAndValue();
}


void CSymbolPropertiesGeneralPage::OnCmdReadOnly(void)
{
	ShowDlgControl(		IDC_SYM_READONLY_CAUTION,	m_bReadOnly);

	SetReadOnly(		IDC_SYM_NAME,				m_bReadOnly || m_bEditValueOnly);
	SetReadOnly(		IDC_SYM_VALUE,				m_bReadOnly);

	EnableDlgControl(	IDC_SYM_FIX_VALUE,			!m_bReadOnly);

	if (m_bEditValueOnly)
	{
		// If only the value is editable, set the focus to it
		GetDlgItem(IDC_SYM_VALUE)->SetFocus();
	}
}

void CSymbolPropertiesGeneralPage::OnClickedFixValue(void)
{
	BOOL bFailed = false;

	UINT uNewValue = m_pSymbols->GetBaseSymbolValue( SymbolTypes.GetType(m_sName) );

	while (!IsValueUnique(m_pSymbol, uNewValue, false) )
	{
		uNewValue++;
		if (uNewValue >= IDC_STATIC)
		{
			bFailed = true;
			ASSERT(false);
			break;		// Can't fix this one
		}
	}

	if (!bFailed)
	{
		m_uValue = uNewValue;
		UpdateData(false);

		CheckNameAndValue();
	}
	else
	{
		::AfxMessageBox(IDP_SYM_FIX_VALUE_FAILED,
						MB_OK | MB_ICONEXCLAMATION);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -