見た目だけインタフェース完成(機能はなにもなし)

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_card_test@3 ff8ce827-af98-4349-adb5-4c00699b5328
This commit is contained in:
(no author) 2010-02-17 12:37:09 +00:00
parent c6be5c1b6b
commit 0354858d93
5 changed files with 1111 additions and 327 deletions

View File

@ -2,8 +2,578 @@
using namespace nn::red::nakayama; using namespace nn::red::nakayama;
class ReadID1: public Program
{
public:
virtual void Execute()
{
Page page;
class CommandTest : public Program Label title;
title.X = 20;
title.Y = 10;
title.Text = "RD_ID1";
page.Add(title);
Label lb0;
lb0.X = 100;
lb0.Y = 50;
lb0.Text = "ID1_0";
page.Add(lb0);
Label lb1;
lb1.X = 100;
lb1.Y = 80;
lb1.Text = "ID1_1";
page.Add(lb1);
Label lb2;
lb2.X = 100;
lb2.Y = 110;
lb2.Text = "ID1_2";
page.Add(lb2);
Label lb3;
lb3.X = 100;
lb3.Y = 140;
lb3.Text = "ID1_3";
page.Add(lb3);
KeyPad& pad = KeyPad::GetInstance();
while (1)
{
pad.ReadKey();
page.Show(Display::GetInstance(Display::Lower));
if (pad.IsTrigger(KeyPad::B))
{
Display::GetInstance(Display::Lower).Clear();
Display::GetInstance(Display::Lower).SwapBuffer();
break;
}
}
}
;
};
class ReadID2: public Program
{
public:
virtual void Execute()
{
Page page;
Label title;
title.X = 20;
title.Y = 10;
title.Text = "RD_ID2";
page.Add(title);
Label lb0;
lb0.X = 100;
lb0.Y = 50;
lb0.Text = "ID2_0";
page.Add(lb0);
Label lb1;
lb1.X = 100;
lb1.Y = 80;
lb1.Text = "ID2_1";
page.Add(lb1);
Label lb2;
lb2.X = 100;
lb2.Y = 110;
lb2.Text = "ID2_2";
page.Add(lb2);
Label lb3;
lb3.X = 100;
lb3.Y = 140;
lb3.Text = "ID2_3";
page.Add(lb3);
KeyPad& pad = KeyPad::GetInstance();
while (1)
{
pad.ReadKey();
page.Show(Display::GetInstance(Display::Lower));
if (pad.IsTrigger(KeyPad::B))
{
Display::GetInstance(Display::Lower).Clear();
Display::GetInstance(Display::Lower).SwapBuffer();
break;
}
}
}
;
};
#define DUMP_NUM 0x10
class ReadSeqPageVerify: public Program
{
public:
virtual void Execute()
{
Page page;
VariableSelector menu;
menu.X = 10;
menu.Y = 0;
page.Add(menu);
VariableValue<u64> address;
address.SetShiftRange(16,0);
address.SetShiftBitSize(4);
menu.Register("address", address);
VariableValue<u64> read_size;
read_size.SetShiftRange(8,0);
read_size.SetShiftBitSize(4);
menu.Register("size", read_size);
Label verify;
verify.X = 200;
verify.Y = 10;
verify.Text = "Verify :";
page.Add(verify);
// 固定ラベル
Label index;
index.X = 0;
index.Y = 50;
index.Text = " |00 01 02 03 04 05 06 07";
page.Add(index);
Label line;
line.X = 0;
line.Y = 60;
line.Text = "---------------------------------------";
page.Add(line);
// [TODO]バッファを与えて表示できるように。その他もろもろ調整。
int start = 0x0;
Label dump[DUMP_NUM];
for(int i=0; i<DUMP_NUM; i++)
{
ostringstream adr;
dump[i].X = 0;
dump[i].Y = 70 + 10 * i;
// アドレス表示部分
adr << "0x";
adr.fill('0');
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
// dump部分
for(int j=0; j<0x8; j++)
{
adr << setw(2) << left << hex << 0x00 + j << " ";
}
dump[i].Text = adr.str();
page.Add(dump[i]);
}
// [TODO]ベリファイの結果に応じて変更
if (1)
{
verify.Text = "Verify : OK";
}
else
{
verify.Text = "Verify : NG";
}
while (1)
{
page.Show(Display::GetInstance(Display::Lower));
if (menu.Canceled)
{
menu.Canceled = false;
break;
}
}
};
};
class ReadSeqPage: public Program
{
public:
virtual void Execute()
{
Page page;
VariableSelector menu;
menu.X = 10;
menu.Y = 0;
page.Add(menu);
VariableValue<u64> address;
address.SetShiftRange(16,0);
address.SetShiftBitSize(4);
menu.Register("address", address);
VariableValue<u64> read_size;
read_size.SetShiftRange(8,0);
read_size.SetShiftBitSize(4);
menu.Register("size", read_size);
// 固定ラベル
Label index;
index.X = 0;
index.Y = 50;
index.Text = " |00 01 02 03 04 05 06 07";
page.Add(index);
Label line;
line.X = 0;
line.Y = 60;
line.Text = "---------------------------------------";
page.Add(line);
int start = 0x0;
Label dump[DUMP_NUM];
for(int i=0; i<DUMP_NUM; i++)
{
ostringstream adr;
dump[i].X = 0;
dump[i].Y = 70 + 10 * i;
// アドレス表示部分
adr << "0x";
adr.fill('0');
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
// dump部分
for(int j=0; j<0x8; j++)
{
adr << setw(2) << left << hex << 0x00 + j << " ";
}
dump[i].Text = adr.str();
page.Add(dump[i]);
}
while (1)
{
page.Show(Display::GetInstance(Display::Lower));
if (menu.Canceled)
{
menu.Canceled = false;
break;
}
}
};
};
class WritePageStart: public Program
{
public:
virtual void Execute()
{
Page page;
VariableSelector menu;
menu.X = 10;
menu.Y = 0;
page.Add(menu);
VariableValue<u64> address;
address.SetShiftRange(16,0);
address.SetShiftBitSize(4);
menu.Register("address", address);
VariableValue<u64> read_size;
read_size.SetShiftRange(8,0);
read_size.SetShiftBitSize(4);
menu.Register("size", read_size);
// 固定ラベル
Label index;
index.X = 0;
index.Y = 50;
index.Text = " |00 01 02 03 04 05 06 07";
page.Add(index);
Label line;
line.X = 0;
line.Y = 60;
line.Text = "---------------------------------------";
page.Add(line);
int start = 0x0;
Label dump[DUMP_NUM];
for(int i=0; i<DUMP_NUM; i++)
{
ostringstream adr;
dump[i].X = 0;
dump[i].Y = 70 + 10 * i;
// アドレス表示部分
adr << "0x";
adr.fill('0');
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
// dump部分
for(int j=0; j<0x8; j++)
{
adr << setw(2) << left << hex << 0x00 + j << " ";
}
dump[i].Text = adr.str();
page.Add(dump[i]);
}
while (1)
{
page.Show(Display::GetInstance(Display::Lower));
if (menu.Canceled)
{
menu.Canceled = false;
break;
}
}
};
};
class WritePage: public Program
{
public:
virtual void Execute()
{
Page page;
VariableSelector menu;
menu.X = 10;
menu.Y = 50;
page.Add(menu);
SelectableValue<NamedValue<int> > write_pattern;
write_pattern.Add(*(new NamedValue<int> ("0x0000", 0)));
write_pattern.Add(*(new NamedValue<int> ("0x00FF", 1)));
write_pattern.Add(*(new NamedValue<int> ("0x55AA", 2)));
write_pattern.Add(*(new NamedValue<int> ("0xFFFF", 3)));
write_pattern.Add(*(new NamedValue<int> ("DEC", 4)));
write_pattern.Add(*(new NamedValue<int> ("INC", 5)));
menu.Register("Write Pattern", write_pattern);
while (1)
{
page.Show(Display::GetInstance(Display::Lower));
if (menu.Canceled)
{
menu.Canceled = false;
break;
}
}
};
};
class ReadWREXE: public Program
{
public:
virtual void Execute()
{
Page page;
VariableSelector menu;
menu.X = 10;
menu.Y = 0;
page.Add(menu);
VariableValue<u64> address;
address.SetShiftRange(16,0);
address.SetShiftBitSize(4);
menu.Register("address", address);
VariableValue<u64> read_size;
read_size.SetShiftRange(8,0);
read_size.SetShiftBitSize(4);
menu.Register("size", read_size);
// 固定ラベル
Label index;
index.X = 0;
index.Y = 50;
index.Text = " |00 01 02 03 04 05 06 07";
page.Add(index);
Label line;
line.X = 0;
line.Y = 60;
line.Text = "---------------------------------------";
page.Add(line);
int start = 0x0;
Label dump[DUMP_NUM];
for(int i=0; i<DUMP_NUM; i++)
{
ostringstream adr;
dump[i].X = 0;
dump[i].Y = 70 + 10 * i;
// アドレス表示部分
adr << "0x";
adr.fill('0');
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
// dump部分
for(int j=0; j<0x8; j++)
{
adr << setw(2) << left << hex << 0x00 + j << " ";
}
dump[i].Text = adr.str();
page.Add(dump[i]);
}
while (1)
{
page.Show(Display::GetInstance(Display::Lower));
if (menu.Canceled)
{
menu.Canceled = false;
break;
}
}
};
};
class ReadUID: public Program
{
public:
virtual void Execute()
{
Page page;
Label title;
title.X = 20;
title.Y = 10;
title.Text = "RD_UID";
page.Add(title);
Label lb0;
lb0.X = 50;
lb0.Y = 50;
lb0.Text = "UID **************";
page.Add(lb0);
KeyPad& pad = KeyPad::GetInstance();
while (1)
{
pad.ReadKey();
page.Show(Display::GetInstance(Display::Lower));
if (pad.IsTrigger(KeyPad::B))
{
Display::GetInstance(Display::Lower).Clear();
Display::GetInstance(Display::Lower).SwapBuffer();
break;
}
}
};
};
class ReadRefresh: public Program
{
public:
virtual void Execute()
{
Page page;
Label title;
title.X = 20;
title.Y = 10;
title.Text = "RD_REFRESH";
page.Add(title);
Label lb0;
lb0.X = 100;
lb0.Y = 50;
lb0.Text = "TIME OUT";
page.Add(lb0);
KeyPad& pad = KeyPad::GetInstance();
while (1)
{
pad.ReadKey();
page.Show(Display::GetInstance(Display::Lower));
if (pad.IsTrigger(KeyPad::B))
{
Display::GetInstance(Display::Lower).Clear();
Display::GetInstance(Display::Lower).SwapBuffer();
break;
}
}
};
};
class ReadUndefinedCommand: public Program
{
public:
virtual void Execute()
{
Page page;
Label title;
title.X = 20;
title.Y = 10;
title.Text = "Undefined Command";
page.Add(title);
Label lb0;
lb0.X = 100;
lb0.Y = 50;
lb0.Text = "***************************";
page.Add(lb0);
KeyPad& pad = KeyPad::GetInstance();
while (1)
{
pad.ReadKey();
page.Show(Display::GetInstance(Display::Lower));
if (pad.IsTrigger(KeyPad::B))
{
Display::GetInstance(Display::Lower).Clear();
Display::GetInstance(Display::Lower).SwapBuffer();
break;
}
}
};
};
class CommandTest: public Program
{ {
virtual void Execute() virtual void Execute()
{ {
@ -21,37 +591,46 @@ class CommandTest : public Program
date.Text = __DATE__; date.Text = __DATE__;
page.Add(date); page.Add(date);
ValueSelector menu; Selector<Program> menu;
menu.X = 30; menu.X = 20;
menu.Y = 40; menu.Y = 40;
page.Add(menu); page.Add(menu);
SelectableValue<int> address; // RD_ID1, RD_ID2
address.Add( 0 ); menu.Register("RD_ID1", *(new ReadID1()));
address.Add( 1 ); menu.Register("RD_ID2", *(new ReadID2()));
address.Add( 2 );
menu.Register("Address", address);
SelectableValue< NamedValue<int> > loop; // RD_SEQ_PAGE with verify, RD_SEQ_PAGE
loop.Add(*(new NamedValue<int>("Once", 0))); menu.Register("RD_SEQ_PAGE with verify", *(new ReadSeqPageVerify()));
loop.Add(*(new NamedValue<int>("Repeat", 1))); menu.Register("RD_SEQ_PAGE", *(new ReadSeqPage()));
menu.Register("Loop", loop);
// 画面表示しながら選択を受け付ける // WR_PAGE_START, WR_PAGE
while(1) menu.Register("WR_PAGE_START", *(new WritePageStart()));
menu.Register("WR_PAGE", *(new WritePage()));
// RD_WREXE
menu.Register("RD_WREXE", *(new ReadWREXE()));
// RD_UID
menu.Register("RD_UID", *(new ReadUID()));
// RD_REFRESH
menu.Register("RD_REFRESH", *(new ReadRefresh()));
// Undefined COMMAND
menu.Register("Undefined COMMAND", *(new ReadUndefinedCommand()));
while (1)
{ {
page.Show(Display::GetInstance(Display::Upper)); page.Show(Display::GetInstance(Display::Upper));
// 選択されたら if (menu.Selected)
if(menu.Selected)
{ {
int a = address.GetValue(); menu.GetSelectedItem()->Execute();
int l = loop.GetValue().Value;
menu.Selected = false; menu.Selected = false;
} }
// キャンセルされたら if (menu.Canceled)
if(menu.Canceled)
{ {
menu.Canceled = false; menu.Canceled = false;
break; break;
@ -59,3 +638,4 @@ class CommandTest : public Program
} }
}; };
}; };

View File

@ -1,65 +1,52 @@
#include "nakayama.h" #include "nakayama.h"
#include "FunctionTest.cpp" #include "FunctionTest.cpp"
#include "CommandTest.cpp" #include "CommandTest.cpp"
#include "ReliabilityTestForRom.cpp"
#include "ReliabilityTestForRWMemory.cpp"
#include "BackupMemoryTest.cpp"
using namespace nn::red::nakayama; using namespace nn::red::nakayama;
class CtrCardTest : public Program class CtrCardTest: public Program
{ {
public: public:
virtual void Execute() virtual void Execute()
{ {
// ページ
Page page; Page page;
// タイトルラベル
Label title; Label title;
title.X = 20; title.X = 20;
title.Y = 10; title.Y = 10;
title.Text = "CTR Card Test"; title.Text = "CTR Card Test";
page.Add(title); page.Add(title);
// 日付ラベル
Label date; Label date;
date.X = 250; date.X = 250;
date.Y = 10; date.Y = 10;
date.Text = __DATE__; date.Text = __DATE__;
page.Add(date); page.Add(date);
// 選択肢
Selector<Program> menu; Selector<Program> menu;
menu.X = 30; menu.X = 30;
menu.Y = 40; menu.Y = 40;
page.Add(menu); page.Add(menu);
// 選択肢に項目を追加
menu.Register("Function Test", *(new FunctionTest())); menu.Register("Function Test", *(new FunctionTest()));
menu.Register("Command Test", *(new CommandTest())); menu.Register("Command Test", *(new CommandTest()));
menu.Register("Reliability Test for ROM", *(new FunctionTest())); menu.Register("Reliability Test for ROM",*(new ReliabilityTestForRom()));
menu.Register("Reliability Test for Writable Memory", *(new CommandTest())); menu.Register("Reliability Test for Writable Memory",*(new ReliabilityTestForRWMemory()));
menu.Register("Back Up Memory Test", *(new BackupMemoryTest()));
// 画面表示しながら選択を受け付ける while (1)
while(1)
{ {
page.Show(Display::GetInstance(Display::Upper)); page.Show(Display::GetInstance(Display::Upper));
// 選択されたら if (menu.Selected)
if(menu.Selected)
{ {
menu.GetSelectedItem()->Execute(); menu.GetSelectedItem()->Execute();
menu.Selected = false; menu.Selected = false;
} }
// キャンセルされたら
if(menu.Canceled)
{
menu.Canceled = false;
Display::GetInstance(Display::Upper).Clear();
Display::GetInstance(Display::Upper).SwapBuffer();
break;
} }
}
}; };
}; };

View File

@ -2,12 +2,11 @@
using namespace nn::red::nakayama; using namespace nn::red::nakayama;
class S1FunctionTest : public Program class S1FunctionTest: public Program
{ {
public: public:
virtual void Execute() virtual void Execute()
{ {
// ページ
Page page; Page page;
Label running; Label running;
@ -30,34 +29,26 @@ public:
KeyPad& pad = KeyPad::GetInstance(); KeyPad& pad = KeyPad::GetInstance();
// 画面表示しながら選択を受け付ける while (1)
while(1)
{ {
pad.ReadKey(); pad.ReadKey();
page.Show(Display::GetInstance(Display::Lower)); page.Show(Display::GetInstance(Display::Lower));
// Bボタンが押されたら if (pad.IsTrigger(KeyPad::B))
if(pad.IsTrigger(KeyPad::B))
{ {
Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).Clear();
Display::GetInstance(Display::Lower).SwapBuffer(); Display::GetInstance(Display::Lower).SwapBuffer();
break; break;
} }
} }
}; };
}; };
class S2FunctionTest: public Program
class S2FunctionTest : public Program
{ {
public: public:
virtual void Execute() virtual void Execute()
{ {
// ページ
Page page; Page page;
Label running; Label running;
@ -80,37 +71,26 @@ public:
KeyPad& pad = KeyPad::GetInstance(); KeyPad& pad = KeyPad::GetInstance();
// 画面表示しながら選択を受け付ける while (1)
while(1)
{ {
pad.ReadKey(); pad.ReadKey();
page.Show(Display::GetInstance(Display::Lower)); page.Show(Display::GetInstance(Display::Lower));
// Bボタンが押されたら if (pad.IsTrigger(KeyPad::B))
if(pad.IsTrigger(KeyPad::B))
{ {
Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).Clear();
Display::GetInstance(Display::Lower).SwapBuffer(); Display::GetInstance(Display::Lower).SwapBuffer();
break; break;
} }
} }
}; };
}; };
class IrregularAccessTest: public Program
class IrregularAccessTest : public Program
{ {
}; };
class FunctionTest: public Program
class FunctionTest : public Program
{ {
virtual void Execute() virtual void Execute()
{ {
@ -133,25 +113,28 @@ class FunctionTest : public Program
menu.Y = 40; menu.Y = 40;
page.Add(menu); page.Add(menu);
// 選択肢に項目を追加 // [TODO] カードIDに応じて切り替える
if (1)
{
menu.Register("S1 Function Test", *(new S1FunctionTest())); menu.Register("S1 Function Test", *(new S1FunctionTest()));
}
else
{
menu.Register("S2 Function Test", *(new S2FunctionTest())); menu.Register("S2 Function Test", *(new S2FunctionTest()));
}
menu.Register("Irregular Access Test", *(new IrregularAccessTest())); menu.Register("Irregular Access Test", *(new IrregularAccessTest()));
// 画面表示しながら選択を受け付ける while (1)
while(1)
{ {
page.Show(Display::GetInstance(Display::Upper)); page.Show(Display::GetInstance(Display::Upper));
// 選択されたら if (menu.Selected)
if(menu.Selected)
{ {
menu.GetSelectedItem()->Execute(); menu.GetSelectedItem()->Execute();
menu.Selected = false; menu.Selected = false;
} }
// キャンセルされたら if (menu.Canceled)
if(menu.Canceled)
{ {
menu.Canceled = false; menu.Canceled = false;
break; break;
@ -159,3 +142,4 @@ class FunctionTest : public Program
} }
}; };
}; };

View File

@ -576,6 +576,8 @@ void ValueSelector::KeyIn(KeyPad& key)
{ {
selector::KeyIn(key); selector::KeyIn(key);
if( !selector::items[selector::current_item]->Editable )
{
if(key.IsTrigger(KeyPad::RIGHT)) if(key.IsTrigger(KeyPad::RIGHT))
{ {
selector::items[selector::current_item]->Next(true); selector::items[selector::current_item]->Next(true);
@ -592,6 +594,7 @@ void ValueSelector::KeyIn(KeyPad& key)
{ {
selector::items[selector::current_item]->Previous(); selector::items[selector::current_item]->Previous();
} }
}
} }
@ -599,6 +602,95 @@ void ValueSelector::KeyIn(KeyPad& key)
/*!--------------------------------------------------------------------------*
Name: ValueSelector::KeyIn
@breif
@return
edit : Akabane
*---------------------------------------------------------------------------*/
void VariableSelector::KeyIn(KeyPad& key)
{
if( !EditMode )
{
ValueSelector::KeyIn(key);
// 選択中のアイテムが編集可能オブジェクト
if( selector::items[selector::current_item]->Editable )
{
// 右ボタンが押された場合
if( key.IsTrigger(KeyPad::A) )
{
EditMode = true;
return;
}
}
}
else
{
key.ReadKey();
key.PressDetectionDelay = nn::fnd::TimeSpan::FromMilliSeconds(500);
key.PressDetectionInterval = nn::fnd::TimeSpan::FromMilliSeconds(100);
if(key.IsTrigger(KeyPad::UP) || key.IsPress(KeyPad::UP))
{
selector::items[selector::current_item]->Increment();
}
else if(key.IsTrigger(KeyPad::DOWN) || key.IsPress(KeyPad::DOWN))
{
selector::items[selector::current_item]->Decrement();
}
else if(key.IsTrigger(KeyPad::RIGHT) || key.IsPress(KeyPad::RIGHT))
{
selector::items[selector::current_item]->ShiftRight();
}
else if(key.IsTrigger(KeyPad::LEFT) || key.IsPress(KeyPad::LEFT))
{
selector::items[selector::current_item]->ShiftLeft();
}
else if(key.IsTrigger(KeyPad::A) || key.IsTrigger(KeyPad::B))
{
EditMode = false;
}
}
}
void VariableSelector::Show(Display& display)
{
for(int i=0; i<items.size(); i++)
{
int x = GetX(); //Parent->X + X;
int y = GetY(); //Parent->Y + Y;
if(i == current_item)
{
double difference = abs(current_item * LineHeight * 2 - cursor_position);
int sign = current_item * LineHeight * 2 < cursor_position ? -1 : 1;
cursor_position += sign * ceil(difference / CursorSmoothness);
display.Draw(x, y + cursor_position, cursor, FontSize, false); // とりあえず、
// 編集可能リストで、編集モードの場合は下にカーソルを表示する
}
display.Draw(x + Offset, y + (i * LineHeight * 2), GetItemName(i) );
}
}
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: DebugWriter::Write Name: DebugWriter::Write

View File

@ -98,6 +98,7 @@ private:
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
@ -142,6 +143,7 @@ private:
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
@ -172,6 +174,7 @@ public:
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
@ -189,6 +192,7 @@ private:
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
@ -203,6 +207,8 @@ public:
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
@ -222,6 +228,8 @@ public:
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
@ -252,28 +260,6 @@ protected:
virtual string GetItemName(int); virtual string GetItemName(int);
}; };
/*!--------------------------------------------------------------------------*
Name: Selector<T>::GetItemName
@brief
@return
*---------------------------------------------------------------------------*/
template<typename T>
string Selector<T>::GetItemName(int index)
{
return names[index];
}
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: Selector<T>::Selector Name: Selector<T>::Selector
@ -295,9 +281,19 @@ Selector<T>::Selector() {
Offset = 10; Offset = 10;
} }
/*!--------------------------------------------------------------------------*
Name: Selector<T>::GetItemName
@brief
@return
*---------------------------------------------------------------------------*/
template<typename T>
string Selector<T>::GetItemName(int index)
{
return names[index];
}
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: Selector<T>::Register Name: Selector<T>::Register
@ -314,10 +310,6 @@ void Selector<T>::Register(string name, T& item)
items.push_back(&item); items.push_back(&item);
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: Selector<T>::Register Name: Selector<T>::Register
@ -336,10 +328,6 @@ T* Selector<T>::GetSelectedItem()
return NULL; return NULL;
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: Selector<T>::Register Name: Selector<T>::Register
@ -355,10 +343,6 @@ void Selector<T>::SetCursor(char cursor)
this->cursor[1] = '\0'; this->cursor[1] = '\0';
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: Selector<T>::KeyIn Name: Selector<T>::KeyIn
@ -426,10 +410,6 @@ void Selector<T>::KeyIn(KeyPad& key)
} }
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: Selector<T>::Show Name: Selector<T>::Show
@ -463,6 +443,7 @@ void Selector<T>::Show(Display& display)
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
@ -476,11 +457,62 @@ public:
//virtual void GetValue() = 0; //virtual void GetValue() = 0;
virtual void Next(bool loop=false) = 0; virtual void Next(bool loop=false) = 0;
virtual void Previous(bool loop=false) = 0; virtual void Previous(bool loop=false) = 0;
virtual void Increment() = 0;
virtual void Decrement() = 0;
virtual void ShiftLeft() = 0;
virtual void ShiftRight() = 0;
virtual string ToString() = 0; virtual string ToString() = 0;
bool Editable; // 新規追加
};
ostream& operator<<(ostream& stream, ISelectableValue* svalue);
/*!--------------------------------------------------------------------------*
@brief
*---------------------------------------------------------------------------*/
class ValueSelector : public Selector<ISelectableValue>
{
public:
ValueSelector(){ max_name_length = 0;};
virtual ~ValueSelector(){};
virtual void Register(string, ISelectableValue&);
virtual void KeyIn(KeyPad&);
typedef Selector<ISelectableValue > selector;
protected:
int max_name_length;
virtual string GetItemName(int);
}; };
ostream& operator<<(ostream& stream, ISelectableValue* svalue);
/*!--------------------------------------------------------------------------*
@brief
edit : Akabane
*---------------------------------------------------------------------------*/
class VariableSelector : public ValueSelector
{
public:
VariableSelector(){ max_name_length = 0; EditMode = false; };
virtual ~VariableSelector(){};
virtual void KeyIn(KeyPad&);
virtual void Show(Display& display);
bool EditMode;
};
@ -501,15 +533,15 @@ public:
virtual void Next(bool loop=false); virtual void Next(bool loop=false);
virtual void Previous(bool loop=false); virtual void Previous(bool loop=false);
virtual string ToString(); virtual string ToString();
virtual void Increment();
virtual void Decrement();
virtual void ShiftLeft();
virtual void ShiftRight();
private: private:
vector<T> values; vector<T> values;
int currentIndex; int currentIndex;
}; };
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: SelectableValue<T>::SelectableValue Name: SelectableValue<T>::SelectableValue
@ -522,12 +554,9 @@ template<typename T>
SelectableValue<T>::SelectableValue() SelectableValue<T>::SelectableValue()
{ {
currentIndex = 0; currentIndex = 0;
Editable = false; // 新規追加
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: SelectableValue<T>::Add Name: SelectableValue<T>::Add
@ -547,10 +576,6 @@ void SelectableValue<T>::Add(T value, bool isDefault)
values.push_back(value); values.push_back(value);
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: SelectableValue<T>::GetValue Name: SelectableValue<T>::GetValue
@ -565,10 +590,6 @@ T SelectableValue<T>::GetValue()
return values[currentIndex]; return values[currentIndex];
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: SelectableValue<T>::Next Name: SelectableValue<T>::Next
@ -595,10 +616,6 @@ void SelectableValue<T>::Next(bool loop)
} }
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: SelectableValue<T>::Previous Name: SelectableValue<T>::Previous
@ -625,10 +642,6 @@ void SelectableValue<T>::Previous(bool loop)
} }
} }
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: SelectableValue<T>::SelectableValue Name: SelectableValue<T>::SelectableValue
@ -645,28 +658,159 @@ string SelectableValue<T>::ToString()
return oss.str(); return oss.str();
} }
template<typename T>
void SelectableValue<T>::Increment()
{
}
template<typename T>
void SelectableValue<T>::Decrement()
{
}
template<typename T>
void SelectableValue<T>::ShiftLeft()
{
}
template<typename T>
void SelectableValue<T>::ShiftRight()
{
}
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
@brief @brief
editor : Akabane
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
class ValueSelector : public Selector<ISelectableValue> template<typename T>
class VariableValue : public ISelectableValue
{ {
public: public:
ValueSelector(){ max_name_length = 0;}; VariableValue();
virtual ~ValueSelector(){}; virtual ~VariableValue(){};
virtual void Register(string, ISelectableValue&); virtual T GetValue();
virtual void KeyIn(KeyPad&); virtual void Next(bool loop=false);
typedef Selector<ISelectableValue > selector; virtual void Previous(bool loop=false);
virtual string ToString();
virtual void Increment();
virtual void Decrement();
virtual void ShiftLeft();
virtual void ShiftRight();
void SetValue(T value);
void SetShiftRange(int high, int low);
void SetShiftBitSize(int size);
private: private:
int max_name_length; T value;
virtual string GetItemName(int); int figure; // 桁
int shift_range_h; // シフトできる上限
int shift_range_l; // シフトできる下限
int shift_size; // 上下ボタンで変化するサイズ
}; };
template<typename T>
VariableValue<T>::VariableValue()
{
value = 0;
figure = 1;
shift_range_h = 0;
shift_range_l = 0;
shift_size = 0;
Editable = true;
}
template<typename T>
T VariableValue<T>::GetValue()
{
return value;
}
template<typename T>
void VariableValue<T>::SetValue(T value)
{
this->value = value;
}
template<typename T>
void VariableValue<T>::Increment()
{
u64 amount = 1 << (figure * shift_size);
if( (value + amount) > 0 )
{
value = value + amount;
NN_TLOG_("Increment value : %08x_%08x\n", (value >> 32), value );
}
}
template<typename T>
void VariableValue<T>::Decrement()
{
u64 amount = 1 << (figure * shift_size);
if( value >= amount )
{
value = value - amount;
NN_TLOG_("Decrement value : %08x_%08x\n", (value >> 32), value );
}
}
template<typename T>
void VariableValue<T>::ShiftLeft()
{
if( shift_range_h >= (figure + 1) )
{
figure += 1;
NN_TLOG_("Shift Left : 0x%08x(%d)\n", (1<<(figure*shift_size)), figure);
}
}
template<typename T>
void VariableValue<T>::ShiftRight()
{
if( shift_range_l <= (figure - 1) )
{
figure -= 1;
NN_TLOG_("Shift Right : 0x%08x(%d)\n", (1<<(figure*shift_size)), figure);
}
}
template<typename T>
string VariableValue<T>::ToString()
{
ostringstream oss;
// oss << (value >> 32) << "_" << (value & 0xffffffff) << "h";
oss << "0x" << setw(8) << hex << left << (value >> 32);
oss << "_";
oss << setw(8) << hex << left << value;
return oss.str();
}
template<typename T>
void VariableValue<T>::SetShiftRange(int high, int low)
{
this->shift_range_h = high;
this->shift_range_l = low;
}
template<typename T>
void VariableValue<T>::SetShiftBitSize(int size)
{
this->shift_size = size;
}
template<typename T>
void VariableValue<T>::Next(bool loop)
{
}
template<typename T>
void VariableValue<T>::Previous(bool loop)
{
}
@ -691,9 +835,6 @@ template<typename T>
ostream& operator<<(ostream& stream, NamedValue<T>& value); ostream& operator<<(ostream& stream, NamedValue<T>& value);
/*!--------------------------------------------------------------------------* /*!--------------------------------------------------------------------------*
Name: NamedValue::NamedValue Name: NamedValue::NamedValue