Files
bluflame/aiwaz/Aiwaz/DeviceEnumerator/DeviceVisitor/XmlDeviceVisitor.cpp
2026-04-18 22:31:51 +02:00

99 lines
3.8 KiB
C++

#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);
}