・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); // とりあえず、
// 編集可能リストで、編集モードの場合は下にカーソルを表示する
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) );
}

View File

@ -462,7 +462,7 @@ public:
virtual void Decrement() = 0;
virtual void ShiftLeft() = 0;
virtual void ShiftRight() = 0;
virtual int GetFigure(void) = 0;
virtual string ToString() = 0;
bool Editable; // 新規追加
};
@ -537,6 +537,7 @@ public:
virtual void Decrement();
virtual void ShiftLeft();
virtual void ShiftRight();
virtual int GetFigure(void);
private:
vector<T> values;
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 ShiftLeft();
virtual void ShiftRight();
virtual int GetFigure(void);
void SetValue(T value);
void SetShiftRange(int high, int low);
void SetShiftBitSize(int size);
@ -716,7 +722,7 @@ template<typename T>
VariableValue<T>::VariableValue()
{
value = 0;
figure = 1;
figure = 0;
shift_range_h = 0;
shift_range_l = 0;
shift_size = 0;
@ -735,78 +741,89 @@ void VariableValue<T>::SetValue(T value)
this->value = value;
}
// インクリメント
template<typename T>
void VariableValue<T>::Increment()
{
u64 amount = 1 << (figure * shift_size);
T amount = (T)1 << (figure * shift_size);
if( (value + amount) > 0 )
{
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>
void VariableValue<T>::Decrement()
{
u64 amount = 1 << (figure * shift_size);
T amount = (T)1 << (figure * shift_size);
if( 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>
void VariableValue<T>::ShiftLeft()
{
if( shift_range_h >= (figure + 1) )
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);
}
}
// ToString
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;
oss.fill('0');
oss << "0x" << setw(shift_range_h) << hex << right << 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;
this->figure = low;
}
// 一度にシフトするビットサイズ
template<typename T>
void VariableValue<T>::SetShiftBitSize(int size)
{
this->shift_size = size;
}
// 現在の桁を返す
template<typename T>
int VariableValue<T>::GetFigure()
{
return figure;
}
template<typename T>
void VariableValue<T>::Next(bool loop)
{
}
template<typename T>
void VariableValue<T>::Previous(bool loop)
{