port from perforce
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#include "stdafx.h"
|
||||
#include "XmlDeviceVisitor.h"
|
||||
#include "IDeviceEnumerator.h"
|
||||
|
||||
|
||||
XmlDeviceVisitor::XmlDeviceVisitor(const string16& argOutputFile)
|
||||
: DeviceVisitorBase()
|
||||
, m_OutputFile(argOutputFile)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
XmlDeviceVisitor::~XmlDeviceVisitor()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void XmlDeviceVisitor::Visit(IDeviceEnumerator& argEnumerator)
|
||||
{
|
||||
m_FileStream.open(m_OutputFile.c_str());
|
||||
|
||||
DeviceVisitorBase::Visit(argEnumerator);
|
||||
|
||||
m_FileStream.close();
|
||||
}
|
||||
|
||||
|
||||
void XmlDeviceVisitor::VisitEnumerator(IDeviceEnumerator& argEnumerator)
|
||||
{
|
||||
m_FileStream << L"<?xml version=\"1.0\" encoding=\"utf-8\"?>" << std::endl;
|
||||
m_FileStream << L"<DeviceEnumeration>" << std::endl;
|
||||
|
||||
IDisplayAdapter* bestAdapter = argEnumerator.FindBestAdapter();
|
||||
if (bestAdapter != NULL)
|
||||
m_FileStream << L"\t<BestAdapter>" << bestAdapter->get_Name() << L"</BestAdapter>" << std::endl;
|
||||
|
||||
IOutputDevice* bestOutput = argEnumerator.FindBestOutput();
|
||||
if (bestOutput != NULL)
|
||||
m_FileStream << L"\t<BestOutput>" << bestOutput->get_Name() << L"</BestOutput>" << std::endl;
|
||||
|
||||
IDisplayMode* bestDisplayMode = argEnumerator.FindBestDisplayMode();
|
||||
if (bestDisplayMode != NULL)
|
||||
{
|
||||
m_FileStream << L"\t<BestDisplayMode>" << std::endl;
|
||||
m_FileStream << L"\t\t<Resolution>" << bestDisplayMode->get_Width() << L"," << bestDisplayMode->get_Height() << L"</Resolution>" << std::endl;
|
||||
m_FileStream << L"\t\t<RefreshRate>" << bestDisplayMode->get_RefreshRate() << L"</RefreshRate>" << std::endl;
|
||||
m_FileStream << L"\t\t<Format>" << std::to_string16(DataFormat::ToString(bestDisplayMode->get_Format())) << L"</Format>" << std::endl;
|
||||
m_FileStream << L"\t</BestDisplayMode>" << std::endl;
|
||||
}
|
||||
|
||||
DeviceVisitorBase::VisitEnumerator(argEnumerator);
|
||||
|
||||
m_FileStream << L"</DeviceEnumeration>" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
void XmlDeviceVisitor::VisitAdapter(IDisplayAdapter& argAdapter)
|
||||
{
|
||||
m_FileStream << L"\t<Adapter Name=\"" << argAdapter.get_Name() << L"\">"<< std::endl;
|
||||
m_FileStream << L"\t\t<DedicatedSystemMemory>" << argAdapter.get_DedicatedSystemMemory() << L"</DedicatedSystemMemory>" << std::endl;
|
||||
m_FileStream << L"\t\t<DedicatedVideoMemory>" << argAdapter.get_DedicatedVideoMemory() << L"</DedicatedVideoMemory>" << std::endl;
|
||||
m_FileStream << L"\t\t<SharedSystemMemory>" << argAdapter.get_SharedSystemMemory() << L"</SharedSystemMemory>" << std::endl;
|
||||
|
||||
DeviceVisitorBase::VisitAdapter(argAdapter);
|
||||
|
||||
m_FileStream << L"\t</Adapter>"<< std::endl;
|
||||
}
|
||||
|
||||
|
||||
void XmlDeviceVisitor::VisitOutput(IOutputDevice& argOutput)
|
||||
{
|
||||
m_FileStream << L"\t\t<Output Name=\"" << argOutput.get_Name() << L"\">" << std::endl;
|
||||
m_FileStream << L"\t\t\t<AttachedToDesktop>" << argOutput.get_IsAttachedToDesktop() << L"</AttachedToDesktop>" << std::endl;
|
||||
m_FileStream << L"\t\t\t<DesktopCoordinates>" << argOutput.get_DesktopCoordinates().left << L"," << argOutput.get_DesktopCoordinates().top << L"," << argOutput.get_DesktopCoordinates().right << L"," << argOutput.get_DesktopCoordinates().bottom << L"</DesktopCoordinates>" << std::endl;
|
||||
|
||||
const std::vector<IDisplayMode*>& displayModes = argOutput.get_DisplayModes();
|
||||
if (!displayModes.empty())
|
||||
m_FileStream << L"\t\t\t<DisplayModes Count=\"" << displayModes.size() << L"\">" << std::endl;
|
||||
|
||||
DeviceVisitorBase::VisitOutput(argOutput);
|
||||
|
||||
if (!displayModes.empty())
|
||||
m_FileStream << L"\t\t\t</DisplayModes>" << std::endl;
|
||||
|
||||
m_FileStream << L"\t\t</Output>"<< std::endl;
|
||||
}
|
||||
|
||||
|
||||
void XmlDeviceVisitor::VisitDisplayMode(IDisplayMode& argMode)
|
||||
{
|
||||
m_FileStream << L"\t\t\t\t<Mode>" << std::endl;
|
||||
m_FileStream << L"\t\t\t\t\t<Resolution>" << argMode.get_Width() << L"," << argMode.get_Height() << L"</Resolution>" << std::endl;
|
||||
m_FileStream << L"\t\t\t\t\t<RefreshRate>" << argMode.get_RefreshRate() << L"</RefreshRate>" << std::endl;
|
||||
m_FileStream << L"\t\t\t\t\t<Format>" << std::to_string16(DataFormat::ToString(argMode.get_Format())) << L"</Format>" << std::endl;
|
||||
m_FileStream << L"\t\t\t\t</Mode>" << std::endl;
|
||||
|
||||
DeviceVisitorBase::VisitDisplayMode(argMode);
|
||||
}
|
||||
Reference in New Issue
Block a user