・VariableValueを修正

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_card_test@4 ff8ce827-af98-4349-adb5-4c00699b5328
This commit is contained in:
(no author) 2010-02-18 07:51:43 +00:00
parent 0354858d93
commit 2ee8f18481
2 changed files with 38 additions and 16 deletions

View File

@ -678,7 +678,12 @@ void VariableSelector::Show(Display& display)
display.Draw(x, y + cursor_position, cursor, FontSize, false); // とりあえず、 display.Draw(x, y + cursor_position, cursor, FontSize, false); // とりあえず、
// 編集可能リストで、編集モードの場合は下にカーソルを表示する // 編集可能リストで、編集モードの場合は下にカーソルを表示する
if( EditMode )
{
int label_width = (GetItemName(i).size() - 1) * FontSize; // カーソル分の -1
int cursor_width_from_right = selector::items[selector::current_item]->GetFigure() * FontSize;
display.Draw(x + Offset + label_width - cursor_width_from_right , y + cursor_position + LineHeight, "^");
}
} }
display.Draw(x + Offset, y + (i * LineHeight * 2), GetItemName(i) ); display.Draw(x + Offset, y + (i * LineHeight * 2), GetItemName(i) );
} }

View File

@ -462,7 +462,7 @@ public:
virtual void Decrement() = 0; virtual void Decrement() = 0;
virtual void ShiftLeft() = 0; virtual void ShiftLeft() = 0;
virtual void ShiftRight() = 0; virtual void ShiftRight() = 0;
virtual int GetFigure(void) = 0;
virtual string ToString() = 0; virtual string ToString() = 0;
bool Editable; // 新規追加 bool Editable; // 新規追加
}; };
@ -537,6 +537,7 @@ public:
virtual void Decrement(); virtual void Decrement();
virtual void ShiftLeft(); virtual void ShiftLeft();
virtual void ShiftRight(); virtual void ShiftRight();
virtual int GetFigure(void);
private: private:
vector<T> values; vector<T> values;
int currentIndex; int currentIndex;
@ -678,7 +679,11 @@ void SelectableValue<T>::ShiftRight()
{ {
} }
template<typename T>
int SelectableValue<T>::GetFigure(void)
{
return 1;
}
@ -701,6 +706,7 @@ public:
virtual void Decrement(); virtual void Decrement();
virtual void ShiftLeft(); virtual void ShiftLeft();
virtual void ShiftRight(); virtual void ShiftRight();
virtual int GetFigure(void);
void SetValue(T value); void SetValue(T value);
void SetShiftRange(int high, int low); void SetShiftRange(int high, int low);
void SetShiftBitSize(int size); void SetShiftBitSize(int size);
@ -716,7 +722,7 @@ template<typename T>
VariableValue<T>::VariableValue() VariableValue<T>::VariableValue()
{ {
value = 0; value = 0;
figure = 1; figure = 0;
shift_range_h = 0; shift_range_h = 0;
shift_range_l = 0; shift_range_l = 0;
shift_size = 0; shift_size = 0;
@ -735,78 +741,89 @@ void VariableValue<T>::SetValue(T value)
this->value = value; this->value = value;
} }
// インクリメント
template<typename T> template<typename T>
void VariableValue<T>::Increment() void VariableValue<T>::Increment()
{ {
u64 amount = 1 << (figure * shift_size); T amount = (T)1 << (figure * shift_size);
if( (value + amount) > 0 ) if( (value + amount) > 0 )
{ {
value = value + amount; value = value + amount;
NN_TLOG_("Increment value : %08x_%08x\n", (value >> 32), value ); NN_TLOG_("Increment value : 0x%08x_%08x (size : %08x%08x\n)", (u32)(value >> 32), (u32)(value & 0xffffffff), (u32)(amount >> 32), (u32)amount );
} }
} }
// デクリメント
template<typename T> template<typename T>
void VariableValue<T>::Decrement() void VariableValue<T>::Decrement()
{ {
u64 amount = 1 << (figure * shift_size); T amount = (T)1 << (figure * shift_size);
if( value >= amount ) if( value >= amount )
{ {
value = value - amount; value = value - amount;
NN_TLOG_("Decrement value : %08x_%08x\n", (value >> 32), value ); NN_TLOG_("Decrement value : 0x%08x_%08x (size : %08x%08x\n)", (u32)(value >> 32), (u32)(value & 0xffffffff), (u32)(amount >> 32), (u32)amount );
} }
} }
// 桁を←にシフト
template<typename T> template<typename T>
void VariableValue<T>::ShiftLeft() void VariableValue<T>::ShiftLeft()
{ {
if( shift_range_h >= (figure + 1) ) if( shift_range_h > (figure + 1) )
{ {
figure += 1; figure += 1;
NN_TLOG_("Shift Left : 0x%08x(%d)\n", (1<<(figure*shift_size)), figure);
} }
} }
// 桁を→にシフト
template<typename T> template<typename T>
void VariableValue<T>::ShiftRight() void VariableValue<T>::ShiftRight()
{ {
if( shift_range_l <= (figure - 1) ) if( shift_range_l <= (figure - 1) )
{ {
figure -= 1; figure -= 1;
NN_TLOG_("Shift Right : 0x%08x(%d)\n", (1<<(figure*shift_size)), figure);
} }
} }
// ToString
template<typename T> template<typename T>
string VariableValue<T>::ToString() string VariableValue<T>::ToString()
{ {
ostringstream oss; ostringstream oss;
// oss << (value >> 32) << "_" << (value & 0xffffffff) << "h"; oss.fill('0');
oss << "0x" << setw(8) << hex << left << (value >> 32); oss << "0x" << setw(shift_range_h) << hex << right << value;
oss << "_";
oss << setw(8) << hex << left << value;
return oss.str(); return oss.str();
} }
// シフト可能範囲の設定
template<typename T> template<typename T>
void VariableValue<T>::SetShiftRange(int high, int low) void VariableValue<T>::SetShiftRange(int high, int low)
{ {
this->shift_range_h = high; this->shift_range_h = high;
this->shift_range_l = low; this->shift_range_l = low;
this->figure = low;
} }
// 一度にシフトするビットサイズ
template<typename T> template<typename T>
void VariableValue<T>::SetShiftBitSize(int size) void VariableValue<T>::SetShiftBitSize(int size)
{ {
this->shift_size = size; this->shift_size = size;
} }
// 現在の桁を返す
template<typename T>
int VariableValue<T>::GetFigure()
{
return figure;
}
template<typename T> template<typename T>
void VariableValue<T>::Next(bool loop) void VariableValue<T>::Next(bool loop)
{ {
} }
template<typename T> template<typename T>
void VariableValue<T>::Previous(bool loop) void VariableValue<T>::Previous(bool loop)
{ {