Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updation in windows.hpp and ide_helpers.cmake #1928

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 24 additions & 93 deletions cmake/ide_helpers.cmake
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@

option(IMHEX_IDE_HELPERS_OVERRIDE_XCODE_COMPILER "Enable choice of compiler for Xcode builds, despite CMake's best efforts" OFF)
option(IMHEX_IDE_HELPERS_INTRUSIVE_IDE_TWEAKS "Enable intrusive CMake tweaks to better support IDEs with folder support" OFF)

# The CMake infrastructure silently ignores the CMAKE_<>_COMPILER settings when
# using the `Xcode` generator.
#
# A particularly nasty (and potentially only) way of getting around this is to
# temporarily lie about the generator being used, while CMake determines and
# locks in the compiler to use.
#
# Needless to say, this is hacky and fragile. Use at your own risk!
if (IMHEX_IDE_HELPERS_OVERRIDE_XCODE_COMPILER AND CMAKE_GENERATOR STREQUAL "Xcode")
option(IMHEX_IDE_HELPERS_INTRUSIVE_IDE_TWEAKS "Enable intrusive CMake tweaks to better support IDEs with folder support" OFF)

if (IMHEX_IDE_HELPERS_OVERRIDE_XCODE_COMPILER AND CMAKE_GENERATOR MATCHES "Xcode")
set(old_generator ${CMAKE_GENERATOR})
set(CMAKE_GENERATOR "Unknown")
enable_language(C CXX)

set(CMAKE_GENERATOR "Xcode")
set(CMAKE_GENERATOR "${old_generator}")

set(CMAKE_XCODE_ATTRIBUTE_CC "${CMAKE_C_COMPILER}")
set(CMAKE_XCODE_ATTRIBUTE_CXX "${CMAKE_CXX_COMPILER}")
Expand All @@ -24,102 +16,43 @@ if (IMHEX_IDE_HELPERS_OVERRIDE_XCODE_COMPILER AND CMAKE_GENERATOR STREQUAL "Xcod
set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CMAKE_CXX_COMPILER}")
endif()

# By default Xcode passes a `-index-store-path=<...>` parameter to the compiler
# during builds to build code completion indexes. This is not supported by
# anything other than AppleClang
set(CMAKE_XCODE_ATTRIBUTE_COMPILER_INDEX_STORE_ENABLE "NO")
endif()

# Generate a launch/build scheme for all targets
set(CMAKE_XCODE_GENERATE_SCHEME YES)
if (NOT DEFINED CMAKE_XCODE_GENERATE_SCHEME)
set(CMAKE_XCODE_GENERATE_SCHEME YES)
endif()

# Utility function that helps avoid messing with non-standard targets
macro(returnIfTargetIsNonTweakable target)
get_target_property(targetIsAliased ${target} ALIASED_TARGET)
if (NOT targetIsAliased)
set(targetIsAliased FALSE)
endif()

get_target_property(targetIsImported ${target} IMPORTED)
if (NOT targetIsImported)
set(targetIsImported FALSE)
endif()

if (targetIsAliased OR targetIsImported)
return()
endif()

get_target_property(targetType ${target} TYPE)
if (targetType MATCHES "INTERFACE_LIBRARY|UNKNOWN_LIBRARY")
if (NOT targetType OR targetType MATCHES "INTERFACE_LIBRARY|UNKNOWN_LIBRARY")
return()
endif()
endmacro()

# Targets usually don't specify their private headers, nor group their source files
# which results in very spotty coverage by IDEs with folders support
#
# Unfortunately, CMake does not have a `target_source_group` like construct yet, therefore
# we have to play by the limitations of `source_group`.
#
# A particularly problematic part is that the function must be called within the directoryies
# scope for the grouping to take effect.
#
# See: https://discourse.cmake.org/t/topic/7388
function(tweakTargetForIDESupport target)
returnIfTargetIsNonTweakable(${target})

# Don't assume directory structure of third parties
get_target_property(targetSourceDir ${target} SOURCE_DIR)
if (targetSourceDir MATCHES "third_party")
return()
endif()

# Add headers to target
function(addPrivateHeaders target)
get_target_property(targetSourceDir ${target} SOURCE_DIR)
if (targetSourceDir)
file(GLOB_RECURSE targetPrivateHeaders CONFIGURE_DEPENDS "${targetSourceDir}/include/*.hpp")

target_sources(${target} PRIVATE "${targetPrivateHeaders}")
endif()

# Organize target sources into directory tree
get_target_property(sources ${target} SOURCES)
foreach(file IN LISTS sources)
get_filename_component(path "${file}" ABSOLUTE)

if (NOT path MATCHES "^${targetSourceDir}")
continue()
endif()

source_group(TREE "${targetSourceDir}" PREFIX "Source Tree" FILES "${file}")
endforeach()
endfunction()

if (IMHEX_IDE_HELPERS_INTRUSIVE_IDE_TWEAKS)
# See tweakTargetForIDESupport for rationale

function(add_library target)
_add_library(${target} ${ARGN})

tweakTargetForIDESupport(${target})
endfunction()

function(add_executable target)
_add_executable(${target} ${ARGN})

tweakTargetForIDESupport(${target})
endfunction()
endif()

# Adjust target's FOLDER property, which is an IDE only preference
function(_tweakTarget target path)
get_target_property(targetType ${target} TYPE)

if (TARGET generator-${target})
set_target_properties(generator-${target} PROPERTIES FOLDER "romfs/${target}")
endif()
if (TARGET romfs_file_packer-${target})
set_target_properties(romfs_file_packer-${target} PROPERTIES FOLDER "romfs/${target}")
endif()
if (TARGET libromfs-${target})
set_target_properties(libromfs-${target} PROPERTIES FOLDER "romfs/${target}")
endif()

if (${targetType} MATCHES "EXECUTABLE|LIBRARY")
set_target_properties(${target} PROPERTIES FOLDER "${path}")
file(GLOB_RECURSE targetPrivateHeaders "${targetSourceDir}/include/*.hpp")
foreach(header IN LISTS targetPrivateHeaders)
if(EXISTS "${header}")
target_sources(${target} PRIVATE "${header}")
endif()
endforeach()
endif()
endfunction()

Expand All @@ -129,7 +62,7 @@ macro(_tweakTargetsRecursive dir)
_tweakTargetsRecursive("${subdir}")
endforeach()

if(${dir} STREQUAL ${CMAKE_SOURCE_DIR})
if (NOT dir OR dir STREQUAL CMAKE_SOURCE_DIR)
return()
endif()

Expand All @@ -141,9 +74,7 @@ macro(_tweakTargetsRecursive dir)
endforeach()
endmacro()

# Tweak all targets this CMake build is aware about
function(tweakTargetsForIDESupport)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

_tweakTargetsRecursive("${CMAKE_SOURCE_DIR}")
endfunction()
24 changes: 17 additions & 7 deletions main/gui/include/window.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
#include <string>
#include <list>
#include <vector>
#include <mutex> // Add this for std::mutex

#include <hex/ui/view.hpp>
#include <hex/ui/view.hpp> // Ensure that this includes necessary types (ImGuiExt::Texture, etc.)

struct GLFWwindow;
struct ImGuiSettingsHandler;


namespace hex {

Expand All @@ -21,6 +20,14 @@ namespace hex {
Window();
~Window();

// Delete copy constructor and copy assignment operator to prevent accidental copies
Window(const Window&) = delete;
Window& operator=(const Window&) = delete;

// Implement move constructor and move assignment operator if needed
Window(Window&&) noexcept = default;
Window& operator=(Window&&) noexcept = default;

void loop();
void fullFrame();

Expand All @@ -46,9 +53,9 @@ namespace hex {

void registerEventHandlers();

GLFWwindow *m_window = nullptr;
std::unique_ptr<GLFWwindow> m_window = nullptr; // Use std::unique_ptr for memory safety

std::string m_windowTitle, m_windowTitleFull;
std::string m_windowTitle;

double m_lastStartFrameTime = 0;
double m_lastFrameTime = 0;
Expand All @@ -63,8 +70,11 @@ namespace hex {

ImGuiExt::ImHexCustomData m_imguiCustomData;

u32 m_searchBarPosition = 0;
// Define constant for search bar position if needed
static constexpr u32 kDefaultSearchBarPosition = 0;
u32 m_searchBarPosition = kDefaultSearchBarPosition;

bool m_emergencyPopupOpen = false;
};

}
}