ImGuiTest/menus/main_menu.cpp

320 lines
7.1 KiB
C++
Raw Normal View History

#include "imgui.h"
#include "imgui_impl_dx9.h"
#if _WIN32
#include "imgui_impl_win32.h"
#include <Windows.h>
#include "../util/keystates.h"
#endif
#include <d3d9.h>
#include <tchar.h>
#include <string>
#include <iostream>
#include <fstream>
#include "../util/text_file_functions.h"
#include "../test/directx9_test.h"
#include "../util/text_functions.h"
#include "main_menu.h"
// https://www.geeksforgeeks.org/macros-and-its-types-in-c-cpp/
// Test macros
#define LIMIT 5
// Boolean values
bool DirectX9Test::show_demo_window = false;
bool DirectX9Test::button1_clicked = false;
bool DirectX9Test::show_app_main_menu_bar = false;
bool DirectX9Test::toggle_text = false;
bool DirectX9Test::dark_mode = true; // I have dark mode enabled, I'll leave this to true.
bool DirectX9Test::define_test = false;
bool DirectX9Test::list_values = false;
//
// TODO Setup test for storing an array of pointers
// TODO Try to play around with PS3 homebrew or Nintendo Switch homebrew.
void MainMenu::MainMenuTest() {
ImGuiIO& io = ImGui::GetIO(); (void)io;
//if (ImGui::Begin("KCNet ImGui", nullptr, ImGuiWindowFlags_MenuBar))
//{
// Menu bar
if (ImGui::BeginMenuBar())
{
if (ImGui::BeginMenu("Test"))
{
ImGui::MenuItem("Main menu bar", NULL, &DirectX9Test::show_app_main_menu_bar);
ImGui::EndMenu();
}
ImGui::EndMenuBar();
}
// Main testing header.
if (ImGui::CollapsingHeader("test1"))
{
ImGui::BulletText("Hello, this should show up.");
ImGui::Separator();
// This works
if (ImGui::Button("Windows Msg Box"))
{
MessageBox(NULL, TEXT("Hello From ImGui, a MessageBox"),
TEXT("KCNet-ImGuiTest"), MB_OK);
}
// Menu toggle button
if (ImGui::Button("Menu toggle"))
{
std::cout << "Test" << std::endl;
// How would I check if dark mode is enabled?
//if (ImGui::GetStyle == ImGui) {
//ImGui::StyleColorsLight();
//}
//else
// {
//ImGui::StyleColorsDark();
//}
}
// I couldn't figure this out yet.
// This shows up for a second then dies.
ImGui::Separator();
if (!ImGui::Button("Click"))
{
DirectX9Test::button1_clicked = false;
}
else
{
DirectX9Test::button1_clicked = true;
}
if (!DirectX9Test::button1_clicked)
{
TextFunctions::SetBulletText("You clicked the button");
}
else
{
ImGui::BulletText("Button not pressed.");
//ImGui::BulletText("You clicked the button!");
}
//}
//if (ImGui::Button("Click"))
//{
// setBulletText("You clicked the button");
// //ImGui::BulletText("You clicked the button!");
//}
//else
//{
// ImGui::BulletText("Button not pressed.");
//}
ImGui::Separator();
// This below works for a dark mode toggle.
// 5-16-2024 @ 9:14PM
/////////////
// Dark mode toggle
/////////////
#ifndef _TEST
#define _TEST
#endif
#ifdef _TEST
if (ImGui::Checkbox("Dark Mode", &DirectX9Test::dark_mode))
{
if (DirectX9Test::dark_mode)
{
ImGui::StyleColorsDark();
ImGui::BulletText("On");
}
else
{
ImGui::StyleColorsLight();
ImGui::BulletText("Off");
}
}
ImGui::SameLine();
// Added some spacing to this
ImGui::Text(" Enabled by default for KCNet-ImGui");
#else
if (!ImGui::Checkbox("Dark Mode", &DirectX9Test::dark_mode))
{
if (!DirectX9Test::dark_mode)
{
ImGui::StyleColorsDark();
ImGui::BulletText("On");
}
else
{
ImGui::StyleColorsLight();
ImGui::BulletText("Off");
}
}
#endif //_TEST
// Disable preprocessor
#undef _TEST
// This works for toggling the demo window on and off
ImGui::Checkbox("Demo window", &DirectX9Test::show_demo_window);
// Possibly implement feature to read from a text file and write it to some output box.
//ImGui::Text("Test");
//const char *test = "Test";
//// I never did get this working yet.
//// https://www.programiz.com/cpp-programming/buffer
//char* buf = new char[40];
////char InputBuf[256];
//// https://stackoverflow.com/questions/502856/whats-the-difference-between-size-t-and-int-in-c
//size_t num = 1;
////char deref = &test;
//// This doesn't work right.
//if (ImGui::InputText("##Username", buf, num))
//{
// //std::cout << buf;
//}
// This works.
if (ImGui::IsMousePosValid())
ImGui::Text("Mouse pos: (%g, %g)", io.MousePos.x, io.MousePos.y);
else
ImGui::Text("Mouse pos: <INVALID>");
// How do I update this text in code?
// Like if a button is pressed.
//ImGui::Separator();
//ImGui::BulletText("Test");
// I'm quite sure this will only work on Windows, will need tested on Linux once I get opengl working.
// Yeah this uses WinUser.h which is windows specific
#ifdef _WIN32
static bool test = false;
ImGui::Text("Key Press: ");
ImGui::SameLine();
//if (ImGui::Checkbox("Test", &test))
ImGui::Checkbox("Test", &test);
if (test)
{
// https://stackoverflow.com/questions/41600981/how-do-i-check-if-a-key-is-pressed-on-c
/*Check if high-order bit is set (1 << 15)*/
// I wonder if I can create a for loop to iterate over the list of keys
// I couldn't get the below working.
//char keyboard_chars[26] = { 'A', 'B', 'C', 'D',
//'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
//'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
enum keyboard_chars_enum {
A = 0, B, C, D,
E, F, G, H, I, J, K, L, M, N, O,
P, Q, R, S, T, U, V, W, X, Y, Z
};
//https://www.codeproject.com/Questions/207914/To-get-Number-of-elements-in-typedef-struct
char input = Z - A;
////int test = 1;
// https://cplusplus.com/forum/beginner/6463/
// I never did get this working
//switch (keyboard_chars_enum)
//switch (input)
//{
//case A:
// ImGui::Text("A Key pressed");
//}
//for (int i =0; i< keyboard_chars_enum)
// This one didn't work
#ifdef _TEST
for (int i = 0; i < input; i++) {
if (GetKeyState(i) & 0x8000)
ImGui::Text(i + " key was pressed");
}
#else
// This works
if (GetKeyState('A') & 0x8000)
{
ImGui::Text("A Key pressed");
}
if (GetKeyState(VK_SHIFT) & 0x8000)
{
ImGui::Text("Shift Key pressed");
}
#endif //_TEST
//
}
//else
//{
// ImGui::Text("Goodbye");
//}
#endif //_WIN32
//#define _TEST
//#ifdef _TEST
// ImGui::Checkbox("Define Test", &DirectX9Test::define_test);
//
// if (define_test)
// {
// ImGui::Text("Value of limit is: " + LIMIT);
// //std::cout << "Value of limit is " << LIMIT;
// }
//#endif //_TEST
//#undef _TEST
ImGui::Checkbox("List values", &DirectX9Test::list_values);
if (DirectX9Test::list_values)
{
ImGui::Text(KeyStates::charTest());
//Sleep(2000);
// This spams the console too much.
//KeyStates::test();
}
else
{
ImGui::Text("Disabled");
}
}
ImGui::Separator();
// This works for a column, having multiple items on the same row.
ImGui::Columns(2);
ImGui::Text("Hello");
ImGui::NextColumn();
ImGui::Text("World");
ImGui::Columns(1);
//}
}