Other Systems Added

This commit is contained in:
Asrın Doğan 2020-03-02 12:37:57 +03:00
parent 5cfcf3d457
commit 9a5ca4c103
2 changed files with 153 additions and 19 deletions

View File

@ -86,6 +86,7 @@ class GUIWindow;
std::stringstream stream; std::stringstream stream;
sf::Vertex vertices[4]; sf::Vertex vertices[4];
void CalculateVertices(); void CalculateVertices();
int base;
bool isFocused; bool isFocused;
public: public:
SynInputField(); SynInputField();
@ -96,6 +97,7 @@ class GUIWindow;
bool IsMouseOver(int, int); bool IsMouseOver(int, int);
void AddToInput(char); void AddToInput(char);
void Click(bool); void Click(bool);
void SetBase(int);
unsigned int GetValue(); unsigned int GetValue();
sf::Vertex *GetVertices(); sf::Vertex *GetVertices();
~SynInputField(); ~SynInputField();
@ -149,9 +151,33 @@ class GUIWindow;
unsigned int SynInputField::GetValue() unsigned int SynInputField::GetValue()
{ {
unsigned int value = 0; unsigned int value = 0;
unsigned int calculatedValue = 0;
char character;
int counter = 0;
std::stringstream temp; std::stringstream temp;
std::string tempString;
temp << stream.str(); temp << stream.str();
temp >> value;
if(base != 10)
while (temp.str().length() > 0)
{
tempString = temp.str();
character = tempString[tempString.length() - 1];
tempString.pop_back();
temp.str("");
temp << tempString;
if(character >= 'A')
calculatedValue = character - 'A' + 10;
else
calculatedValue = character - '0';
calculatedValue *= pow(base, counter++);
value += calculatedValue;
}
else
temp >> value;
return value; return value;
} }
@ -172,6 +198,25 @@ class GUIWindow;
this -> isFocused = isFocused; this -> isFocused = isFocused;
} }
void SynInputField::SetBase(int base)
{
switch (base)
{
case 2:
case 4:
case 8:
case 10:
case 16:
this -> base = base;
stream.str("");
SetText("");
break;
default:
return;
}
}
void SynInputField::AddToInput(char character) void SynInputField::AddToInput(char character)
{ {
if(!isFocused) return; if(!isFocused) return;
@ -187,11 +232,39 @@ class GUIWindow;
} }
if(character < 26 || character > 35) // 0 - 9 keys if(character < 26 || character > 35) // 0 - 9 keys
{
if(base == 16)
{
if(character > 5)
return;
}
else
return;
}
switch (base)
{
case 2:
if(character < 26 || character > 27)
return;
break;
case 4:
if(character < 26 || character > 29)
return;
break;
case 8:
if(character < 26 || character > 33)
return;
break;
}
if(stream.str().length() > 7)
return; return;
if(stream.str().length() > 8) if(base == 16 && character < 6)
return; stream << (char)(character + 65);
stream << character - 26; else
stream << character - 26;
SetText(stream.str()); SetText(stream.str());
} }

View File

@ -9,7 +9,13 @@ class GUIWindow : public Window
void BinaryButton(); void BinaryButton();
void QuaternaryButton(); void QuaternaryButton();
void OctalButton(); void OctalButton();
void DecimalButton();
void HexadecimalButton(); void HexadecimalButton();
void InputBinaryButton();
void InputQuaternaryButton();
void InputOctalButton();
void InputDecimalButton();
void InputHexadecimalButton();
std::string GetBase(unsigned int, int); std::string GetBase(unsigned int, int);
public: public:
GUIWindow(unsigned int = 960, unsigned int = 540, std::string = "Window", sf::Uint32 = sf::Style::Titlebar | sf::Style::Close); GUIWindow(unsigned int = 960, unsigned int = 540, std::string = "Window", sf::Uint32 = sf::Style::Titlebar | sf::Style::Close);
@ -34,11 +40,42 @@ void GUIWindow::OctalButton()
output.SetText(GetBase(input.GetValue(), 8)); output.SetText(GetBase(input.GetValue(), 8));
} }
void GUIWindow::DecimalButton()
{
output.SetText(GetBase(input.GetValue(), 10));
}
void GUIWindow::HexadecimalButton() void GUIWindow::HexadecimalButton()
{ {
output.SetText(GetBase(input.GetValue(), 16)); output.SetText(GetBase(input.GetValue(), 16));
} }
void GUIWindow::InputBinaryButton()
{
input.SetBase(2);
}
void GUIWindow::InputQuaternaryButton()
{
input.SetBase(4);
}
void GUIWindow::InputOctalButton()
{
input.SetBase(8);
}
void GUIWindow::InputDecimalButton()
{
input.SetBase(10);
}
void GUIWindow::InputHexadecimalButton()
{
input.SetBase(16);
}
std::string GUIWindow::GetBase(unsigned int value, int base) std::string GUIWindow::GetBase(unsigned int value, int base)
{ {
std::stringstream stringStream; std::stringstream stringStream;
@ -46,8 +83,9 @@ std::string GUIWindow::GetBase(unsigned int value, int base)
while (value > 0) while (value > 0)
{ {
if(counter++ % 4 == 0) if(base != 10)
stringStream << ' '; if(counter++ % 4 == 0)
stringStream << ' ';
if(base == 16) if(base == 16)
if((value % base) > 9) if((value % base) > 9)
@ -60,8 +98,9 @@ std::string GUIWindow::GetBase(unsigned int value, int base)
value = value / base; value = value / base;
} }
while (counter++ % 4 != 0) if(base != 10)
stringStream << '0'; while (counter++ % 4 != 0)
stringStream << '0';
std::string displayValue = stringStream.str(); std::string displayValue = stringStream.str();
@ -82,28 +121,50 @@ std::string GUIWindow::GetBase(unsigned int value, int base)
GUIWindow::GUIWindow(unsigned int width, unsigned int height, std::string title, sf::Uint32 style) : Window(width, height, title, style) GUIWindow::GUIWindow(unsigned int width, unsigned int height, std::string title, sf::Uint32 style) : Window(width, height, title, style)
{ {
input.SetPosition(window.getSize().x / 3 - 100, 210); input.SetPosition(window.getSize().x / 2 - 120, 210);
input.SetArea(400, 100); input.SetArea(400, 100);
input.SetBase(10);
output.SetText(""); output.SetText("");
output.SetCentered(true); output.SetCentered(true);
output.SetPosition(window.getSize().x / 3, 310); output.SetPosition(window.getSize().x / 2 - 20, 310);
output.SetOffset(0, 0); output.SetOffset(0, 0);
buttons = new SynButton[4]; buttons = new SynButton[10];
(buttons + 0) -> SetText("Binary"); (buttons + 0) -> SetText("Binary");
(buttons + 1) -> SetText("Quaternary"); (buttons + 1) -> SetText("Quaternary");
(buttons + 2) -> SetText("Octal"); (buttons + 2) -> SetText("Octal");
(buttons + 3) -> SetText("Hexadecimal"); (buttons + 3) -> SetText("Decimal");
(buttons + 4) -> SetText("Hexadecimal");
(buttons + 5) -> SetText("Binary");
(buttons + 6) -> SetText("Quaternary");
(buttons + 7) -> SetText("Octal");
(buttons + 8) -> SetText("Decimal");
(buttons + 9) -> SetText("Hexadecimal");
(buttons + 0) -> SetArea(400, 100); (buttons + 0) -> SetPosition(650, 100); (buttons + 0) -> SetArea(400, 100); (buttons + 0) -> SetPosition(650, 50);
(buttons + 1) -> SetArea(400, 100); (buttons + 1) -> SetPosition(650, 200); (buttons + 1) -> SetArea(400, 100); (buttons + 1) -> SetPosition(650, 150);
(buttons + 2) -> SetArea(400, 100); (buttons + 2) -> SetPosition(650, 300); (buttons + 2) -> SetArea(400, 100); (buttons + 2) -> SetPosition(650, 250);
(buttons + 3) -> SetArea(400, 100); (buttons + 3) -> SetPosition(650, 400); (buttons + 3) -> SetArea(400, 100); (buttons + 3) -> SetPosition(650, 350);
(buttons + 4) -> SetArea(400, 100); (buttons + 4) -> SetPosition(650, 450);
(buttons + 5) -> SetArea(400, 100); (buttons + 5) -> SetPosition(50, 50);
(buttons + 6) -> SetArea(400, 100); (buttons + 6) -> SetPosition(50, 150);
(buttons + 7) -> SetArea(400, 100); (buttons + 7) -> SetPosition(50, 250);
(buttons + 8) -> SetArea(400, 100); (buttons + 8) -> SetPosition(50, 350);
(buttons + 9) -> SetArea(400, 100); (buttons + 9) -> SetPosition(50, 450);
(buttons + 0) -> Bind(this, &GUIWindow::BinaryButton); (buttons + 0) -> Bind(this, &GUIWindow::BinaryButton);
(buttons + 1) -> Bind(this, &GUIWindow::QuaternaryButton); (buttons + 1) -> Bind(this, &GUIWindow::QuaternaryButton);
(buttons + 2) -> Bind(this, &GUIWindow::OctalButton); (buttons + 2) -> Bind(this, &GUIWindow::OctalButton);
(buttons + 3) -> Bind(this, &GUIWindow::HexadecimalButton); (buttons + 3) -> Bind(this, &GUIWindow::DecimalButton);
(buttons + 4) -> Bind(this, &GUIWindow::HexadecimalButton);
(buttons + 5) -> Bind(this, &GUIWindow::InputBinaryButton);
(buttons + 6) -> Bind(this, &GUIWindow::InputQuaternaryButton);
(buttons + 7) -> Bind(this, &GUIWindow::InputOctalButton);
(buttons + 8) -> Bind(this, &GUIWindow::InputDecimalButton);
(buttons + 9) -> Bind(this, &GUIWindow::InputHexadecimalButton);
} }
void GUIWindow::Update() void GUIWindow::Update()
@ -118,7 +179,7 @@ void GUIWindow::Update()
window.clear(backColor); window.clear(backColor);
for (buttonCounter = 0; buttonCounter < 4; buttonCounter++) for (buttonCounter = 0; buttonCounter < 10; buttonCounter++)
{ {
window.draw((buttons + buttonCounter) -> GetVertices(), 4, sf::PrimitiveType::Quads); window.draw((buttons + buttonCounter) -> GetVertices(), 4, sf::PrimitiveType::Quads);
window.draw((buttons + buttonCounter) -> GetText()); window.draw((buttons + buttonCounter) -> GetText());
@ -135,7 +196,7 @@ void GUIWindow::ButtonCheck(sf::Vector2i mousePos)
{ {
int i; int i;
SynButton *current; SynButton *current;
for (i = 0; i < 4; i++) for (i = 0; i < 10; i++)
{ {
current = buttons + i; current = buttons + i;
if(current -> IsMouseOver(mousePos.x, mousePos.y)) if(current -> IsMouseOver(mousePos.x, mousePos.y))