ctr_test_tools/TwlBackupChecker/CTR/TwlBkpImporter/draw.cpp
n2460 0492ad743d DataExportImportTool は Export 関数を呼ばないため、ツール名変更(TwlBkpImporter)
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_test_tools@8 6b0af911-cb57-b745-895f-eec5701120e1
2011-10-18 07:47:13 +00:00

311 lines
10 KiB
C++

///*---------------------------------------------------------------------------*
// Project: Horizon
// File: draw.cpp
//
// Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
//
// These coded instructions, statements, and computer programs contain
// proprietary information of Nintendo of America Inc. and/or Nintendo
// Company Ltd., and are protected by Federal copyright law. They may
// not be disclosed to third parties or copied or duplicated in any form,
// in whole or in part, without the prior written consent of Nintendo.
//
// $Rev: 14479 $
// *---------------------------------------------------------------------------*/
//
#include <nn.h>
#include <nn/srv.h>
#include <nn/am/am_ApiSystemMenu.h>
#include <nn/fs.h>
#include "demo.h"
#include "sdAccessor.h"
#include "draw.h"
/* ExpHeap for app. */
extern nn::fnd::ExpHeap s_AppHeap;
uptr s_HeapForGx;
const u32 s_GxHeapSize = 0x800000;
u16 xErrorPos = 130;
u16 yErrorPos = 5;
demo::RenderSystemExt s_RenderSystem;
void InitializeGraphics() {
s_HeapForGx = reinterpret_cast<uptr> (s_AppHeap.Allocate(s_GxHeapSize));
/* Initialize display */
s_RenderSystem.Initialize(s_HeapForGx, s_GxHeapSize);
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0.f, 0.f, 0.f, 1.0f);
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0.f, 0.f, 0.f, 1.0f);
s_RenderSystem.SetFontSize(8.0f);
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
}
u16 Min(u16 a, u16 b)
{
return (a > b) ? b : a;
}
//選択ウィンドウによって色変化
void ChangeColorMode(Window& window)
{
if(window.isSelectedWindow)
{
s_RenderSystem.SetColor(1.0f, 1.0f, 1.0f);
}
else
{
s_RenderSystem.SetColor(0.5f, 0.5f, 0.5f);
}
}
void DrawDefaultTop(void)
{
s_RenderSystem.DrawText(0, 0, "BinaryFile");
s_RenderSystem.DrawText(X_SCALE + xErrorPos, 0, " ErrorCode");
s_RenderSystem.SetLineWidth(1.f);
s_RenderSystem.DrawLine(0,(fileStartPos - 0.5 ) * Y_SCALE,200,( fileStartPos -0.5) * Y_SCALE);
s_RenderSystem.DrawLine(X_SCALE + xErrorPos - 1,0, X_SCALE + xErrorPos - 1,240);
}
void DrawDefaultBottom(void)
{
s_RenderSystem.DrawText(0, 0, "Directory");
s_RenderSystem.SetLineWidth(1.f);
s_RenderSystem.DrawLine(0,(fileStartPos - 0.5 ) * Y_SCALE,100,( fileStartPos -0.5) * Y_SCALE);
}
void DrawCursor(Window& window)
{
s_RenderSystem.DrawText(X_SCALE, Y_SCALE * (fileStartPos + window.GetSelectPos()), ">");
}
void DrawBinaryFile(Window& window, SdAccessor::BinaryInfo* binary)
{
for (u16 i = 0; i < Min(screenHeight,binary->size); i++)
{
if(window.isSelectedWindow)
{
switch (binary->binaryType[i+ window.GetOriginIndex()].state)
{
case SdAccessor::IMPORTED_NOT:
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
break;
case SdAccessor::IMPORTED_CLEAR:
s_RenderSystem.SetColor(0.f, 0.f, 1.f);
break;
case SdAccessor::IMPORTED_ERROR:
s_RenderSystem.SetColor(1.f, 0.f, 0.f);
break;
}
}
else
{
s_RenderSystem.SetColor(0.5f, 0.5f, 0.5f);
}
s_RenderSystem.DrawText(X_SCALE, Y_SCALE* (i + fileStartPos), " %ls ",
binary->binaryType[ i + window.GetOriginIndex()].directoryEntry.entryName);
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
}
}
void DrawDirectory(Window& window, SdAccessor::DirectoryInfo* directory)
{
for (u16 i = 0; i < Min(manualStartPos - 2,directory->size) ; i++)
{
if(!window.isSelectedWindow)
{
s_RenderSystem.SetColor(0.5f, 0.5f, 0.5f);
}
else if (window.GetIndex() == i + window.GetOriginIndex()) {
s_RenderSystem.SetColor(1.f, 1.f, 0.f); // YELLOW
}
s_RenderSystem.DrawText(X_SCALE * 2 , Y_SCALE * (i + fileStartPos), "%ls",
directory->directoryEntry[i + window.GetOriginIndex()].entryName);
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
}
}
//エラーリスト表示
void DrawErrorList(Window& top,SdAccessor::BinaryInfo* binary)
{
u16 index = top.GetIndex();
//インポートされていなければ非表示
if(binary->binaryType[index].state != SdAccessor::IMPORTED_NOT)
{
nn::Result result = binary->binaryType[index].result;
u16 y = fileStartPos;
ChangeColorMode(top);
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Level\n");
y += 2;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s (%d)\n"
, nn::dbg::GetLevelString(result), result.GetLevel());
y += 3;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Summary\n");
y += 2;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s (%d)\n"
, nn::dbg::GetSummaryString(result), result.GetSummary());
y += 3;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Module\n");
y += 2;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s (%d)\n"
, nn::dbg::GetModuleString(result), result.GetModule());
y += 3;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," Description\n");
y += 2;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," %s\n"
, nn::dbg::GetDescriptionString(result));
y += 2;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," (%d)\n", result.GetDescription());
y += 4;
s_RenderSystem.DrawText( X_SCALE + xErrorPos, Y_SCALE * y," ErrorCode : %x \n",result.GetPrintableBits());
s_RenderSystem.SetColor(1.f, 1.f, 1.f);
}
}
//上画面左描画
void DrawLeft(Window& window, SdAccessor::BinaryInfo* binary)
{
if(binary->size != 0)
{
ChangeColorMode(window);
DrawDefaultTop();
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
if(window.isSelectedWindow)
{
DrawCursor(window);
}
DrawBinaryFile(window,binary);
}
else
{
s_RenderSystem.DrawText(X_SCALE, Y_SCALE,"No Binary File in this directory..");
}
}
//上画面右描画
void DrawRight(Window& window, SdAccessor::BinaryInfo* binary)
{
DrawErrorList(window,binary);
}
//操作説明
void DrawManual(Window& top,Window& bottom, SdAccessor& sd)
{
f32 x = 1;
f32 y = manualStartPos;
s_RenderSystem.SetLineWidth(1.2f);
s_RenderSystem.DrawLine(0,(manualStartPos - 0.5) * Y_SCALE,320,( manualStartPos - 0.5) * Y_SCALE);
s_RenderSystem.SetLineWidth(1.f);
s_RenderSystem.DrawLine(0,(manualStartPos + 1.5 ) * Y_SCALE,100,( manualStartPos + 1.5) * Y_SCALE);
s_RenderSystem.DrawText(0, Y_SCALE*y++, "Manual");
y ++;
//上画面選択時
if(top.isSelectedWindow)
{
SdAccessor::BinaryInfo* binary = sd.GetBinary();
if(sd.GetImportCount() == 0)
{
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "Current File :");
}
else
{
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "Importing File :");
}
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "%ls", binary->binaryType[top.GetIndex()].directoryEntry.entryName);
y ++;
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " A : Import %ls", binary->binaryType[top.GetIndex()].directoryEntry.entryName);
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " X : Import all files");
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " Y : Export result");
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " to 'Result%d.csv' ",sd.GetExportCount());
y++;
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " Start: to directory screen");
}
//下画面選択時
else
{
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "Current directory :" );
wchar_t path[128];
SdAccessor::DirectoryInfo* directory = sd.GetDirectory();
//ディレクトリ名の行分け
std::wcscpy( path,sd.GetFileName() );
u16 width = 240/Y_SCALE -1;
u16 height = 4;
wchar_t fileList[height][width];
for(u16 row = 0; row < height ; row++)
{
for(u16 col = 0; col < width;col++)
{
fileList[row][col] = path[row * width + col];
}
}
for(u16 i = 0; i < height; i++)
{
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, "%ls",fileList[i]);
}
y++;
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " A : Select %ls", directory->directoryEntry[bottom.GetIndex()].entryName);
y++;
s_RenderSystem.DrawText(X_SCALE*x, Y_SCALE*y++, " Start : to file screen");
}
}
//上画面描画
void DrawDisplay0(Window& topWindow,SdAccessor& sd)
{
SdAccessor::BinaryInfo* binary = sd.GetBinary();
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
s_RenderSystem.Clear();
DrawLeft(topWindow,binary);
DrawRight(topWindow,binary);
s_RenderSystem.Transfer();
s_RenderSystem.SwapBuffers();
}
//下画面描画
void DrawDisplay1(Window& topWindow,Window& bottomWindow, SdAccessor& sd)
{
SdAccessor::DirectoryInfo* directory = sd.GetDirectory();
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
s_RenderSystem.Clear();
ChangeColorMode(bottomWindow);
DrawDefaultBottom();
s_RenderSystem.SetColor(1.f, 1.f, 1.f); // WHITE
if(bottomWindow.isSelectedWindow)
{
DrawCursor(bottomWindow);
}
DrawDirectory(bottomWindow,directory);
DrawManual(topWindow,bottomWindow,sd);
s_RenderSystem.Transfer();
s_RenderSystem.SwapBuffers();
}
void DrawNoSd(void) {
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
s_RenderSystem.Clear();
s_RenderSystem.Transfer();
s_RenderSystem.SwapBuffers();
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
s_RenderSystem.Clear();
s_RenderSystem.DrawText(X_SCALE, Y_SCALE, "No Sd Card Inserted");
s_RenderSystem.Transfer();
s_RenderSystem.SwapBuffers();
}
void Draw(Window& topWindow, Window& bottomWindow,SdAccessor& sd)
{
if(sd.IsSdMount())
{
DrawDisplay0(topWindow, sd );
DrawDisplay1(topWindow,bottomWindow, sd);
}
else
{
DrawNoSd();
}
}