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

Polishing #3

Merged
merged 10 commits into from
Jun 1, 2024
Merged
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
9 changes: 6 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
[submodule "vendor/rapidjson"]
path = vendor/rapidjson
url = https://github.com/Tencent/rapidjson
[submodule "vendor/glfw"]
path = vendor/glfw
url = https://github.com/glfw/glfw
Expand All @@ -14,3 +11,9 @@
[submodule "vendor/stb"]
path = vendor/stb
url = https://github.com/nothings/stb
[submodule "vendor/json"]
path = vendor/json
url = https://github.com/nlohmann/json.git
[submodule "vendor/portable-file-dialogs"]
path = vendor/portable-file-dialogs
url = https://github.com/samhocevar/portable-file-dialogs.git
19 changes: 12 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,27 @@

# CMake
cmake_minimum_required(VERSION 3.6)
set(CMAKE_SYSTEM_VERSION 10.0)

# Project
set(PROJECT_NAME gxt2)
if(CMAKE_HOST_WIN32)
set(CMAKE_SYSTEM_VERSION 10.0)
endif(CMAKE_HOST_WIN32)

set(VENDOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vendor)
project(${PROJECT_NAME} VERSION 1.0)
project(gxt2 VERSION 1.0)

option(GXT2_ENABLE_UNITY_BUILD "Enable Unity-Build type for gxt2" OFF)

# Configurations
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")

# Options
set(BUILD_SHARED_LIBS OFF)

# Properties
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT gxt2edit)
if(MSVC)
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT gxt2edit)
endif(MSVC)

# Vulkan
find_package(Vulkan)
Expand Down
72 changes: 39 additions & 33 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#------------------ gxt2conv ------------------

set(gxt2conv "gxt2conv")
project("gxt2conv")

set(SOURCES
main/gxt2conv.cpp
Expand All @@ -26,28 +26,31 @@ set(SOURCES
system/app.h
)

add_executable(${gxt2conv} ${SOURCES})
add_executable(${PROJECT_NAME} ${SOURCES})

target_include_directories(${gxt2conv} PRIVATE
target_include_directories(${PROJECT_NAME} PRIVATE
# project
${CMAKE_CURRENT_SOURCE_DIR}

# rapidjson
${VENDOR_DIR}/rapidjson/include
)
target_compile_features(${gxt2conv} PRIVATE

target_compile_features(${PROJECT_NAME} PRIVATE
cxx_std_20
)
target_compile_options(${gxt2conv} PRIVATE

target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic>
)
set_target_properties(${gxt2conv} PROPERTIES UNITY_BUILD ON)

if(GXT2_ENABLE_UNITY_BUILD)
set_target_properties(${PROJECT_NAME} PROPERTIES UNITY_BUILD ON)
endif(GXT2_ENABLE_UNITY_BUILD)

target_link_libraries(${PROJECT_NAME} PRIVATE nlohmann_json::nlohmann_json)

#------------------ gxt2edit ------------------

set(gxt2edit "gxt2edit")
project("gxt2edit")

set(SOURCES
main/gxt2edit.cpp
Expand Down Expand Up @@ -76,22 +79,12 @@ set(SOURCES
system/app.h
)

add_executable(${gxt2edit} ${SOURCES})
add_executable(${PROJECT_NAME} ${SOURCES})

target_include_directories(${gxt2edit} PRIVATE
target_include_directories(${PROJECT_NAME} PRIVATE
# project
${CMAKE_CURRENT_SOURCE_DIR}

# imgui
${VENDOR_DIR}/imgui
${VENDOR_DIR}/imgui/backends

# glfw
${VENDOR_DIR}/glfw/include

# rapidjson
${VENDOR_DIR}/rapidjson/include


# Icon Font
${VENDOR_DIR}/IconFontCppHeaders

Expand All @@ -101,30 +94,43 @@ target_include_directories(${gxt2edit} PRIVATE
# Vulkan
${Vulkan_INCLUDE_DIRS}
)
target_compile_features(${gxt2edit} PRIVATE

target_compile_features(${PROJECT_NAME} PRIVATE
cxx_std_20
)
target_link_libraries(${gxt2edit} PRIVATE

target_link_libraries(${PROJECT_NAME} PRIVATE
glfw
ImGui
ImGui::ImGui
portable_file_dialogs
nlohmann_json::nlohmann_json
${Vulkan_LIBRARIES}
)

if(WIN32)
target_link_libraries(${gxt2edit} PRIVATE
target_link_libraries(${PROJECT_NAME} PRIVATE
UxTheme
Dwmapi
)
endif()
target_compile_options(${gxt2edit} PRIVATE

target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic>
)
target_compile_definitions(${gxt2edit} PRIVATE

target_compile_definitions(${PROJECT_NAME} PRIVATE
GLFW_INCLUDE_NONE
GLFW_INCLUDE_VULKAN
GLFW_EXPOSE_NATIVE_WIN32
UI_BACKEND
STB_IMAGE_IMPLEMENTATION
$<$<CONFIG:Debug>:USE_VULKAN_DEBUG_REPORT>
)
set_target_properties(${gxt2edit} PROPERTIES UNITY_BUILD ON)

if(CMAKE_HOST_WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE GLFW_EXPOSE_NATIVE_WIN32)
endif(CMAKE_HOST_WIN32)

if(GXT2_ENABLE_UNITY_BUILD)
set_target_properties(${gxt2edit} PROPERTIES UNITY_BUILD ON)
endif(GXT2_ENABLE_UNITY_BUILD)
84 changes: 20 additions & 64 deletions src/data/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,19 @@
// Project
#include "util.h"
#include "grc/graphics.h"
#include "portable-file-dialogs.h"
#include <filesystem>

#if _WIN32

// C/C++
#include <strsafe.h>

#endif

namespace utils
{
#if _WIN32
HRESULT WriteRegistryValue(HKEY hKey, PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR pszData)
{
HRESULT hr;
Expand Down Expand Up @@ -82,80 +89,29 @@ namespace utils
return HRESULT_FROM_WIN32(RegDeleteTree(HKEY_CLASSES_ROOT, pszHandlerName));
}

bool OpenFileExplorerDialog(const std::wstring& dialogTitle, const std::wstring& initFileName, std::string& selectedFile, bool saveMode, const std::vector<COMDLG_FILTERSPEC>& vFilters /* = {}*/)
{
bool bSuccess = false;
IFileDialog* pfd = NULL;
#endif

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (FAILED(hr))
bool OpenFileExplorerDialog(const std::string& dialogTitle, const std::wstring& initFileName, std::string& selectedFile, bool saveMode, const std::vector<std::string> vFilters)
{
if(saveMode)
{
return false;
}
auto result = pfd::save_file(dialogTitle, (std::filesystem::current_path() / initFileName).string(), vFilters);
selectedFile = result.result();

if (saveMode)
{
hr = CoCreateInstance(CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));
return selectedFile.empty() == false;
}
else
{
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));
}

if (SUCCEEDED(hr))
{
FILEOPENDIALOGOPTIONS fos;
hr = pfd->GetOptions(&fos);

if (SUCCEEDED(hr))
{
fos |= FOS_PATHMUSTEXIST | FOS_FILEMUSTEXIST | FOS_NOCHANGEDIR | FOS_DONTADDTORECENT;

if (saveMode)
{
fos |= FOS_NOTESTFILECREATE | FOS_OVERWRITEPROMPT;
}
hr = pfd->SetOptions(fos);
}
auto result = pfd::open_file(dialogTitle, (std::filesystem::current_path() / initFileName).string(), vFilters);

if (!vFilters.empty())
if(result.result().size() >= 1)
{
hr = pfd->SetFileTypes((UINT)vFilters.size(), vFilters.data());
hr = pfd->SetFileTypeIndex(1);
selectedFile = result.result().at(0);
return selectedFile.empty() == false;
}

if (!initFileName.empty())
{
hr = pfd->SetFileName(initFileName.c_str());
}
hr = pfd->SetTitle(dialogTitle.c_str());
hr = pfd->Show((HWND)CGraphics::GetInstance().GetWin32Window());

if (SUCCEEDED(hr))
{
IShellItem* pShellItem;

hr = pfd->GetResult(&pShellItem);
if (SUCCEEDED(hr))
{
PWSTR pszBuffer = NULL;
hr = pShellItem->GetDisplayName(SIGDN_FILESYSPATH, &pszBuffer);
if (SUCCEEDED(hr))
{
const int sizeNeeded = WideCharToMultiByte(CP_UTF8, 0, pszBuffer, lstrlenW(pszBuffer), NULL, 0, NULL, NULL);
selectedFile.clear();
selectedFile.resize(sizeNeeded);
WideCharToMultiByte(CP_UTF8, 0, pszBuffer, lstrlenW(pszBuffer), selectedFile.data(), sizeNeeded, NULL, NULL);
bSuccess = true;
CoTaskMemFree(pszBuffer);
}
pShellItem->Release();
}
}
pfd->Release();
return false;
}
CoUninitialize();

return bSuccess;
}

}
6 changes: 5 additions & 1 deletion src/data/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,25 @@
#ifndef _UTIL_H_
#define _UTIL_H_

#if _WIN32
// Windows
#include <Windows.h>
#include <ShlObj.h>
#endif

// C/C++
#include <vector>
#include <string>

namespace utils
{
#if _WIN32
HRESULT WriteRegistryValue(HKEY hKey, PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR pszData);
HRESULT RegisterShellFileExtension(PCWSTR pszFileType, PCWSTR pszHandlerName, PCWSTR pszFileTypeName);
HRESULT UnregisterShellFileExtension(PCWSTR pszFileType, PCWSTR pszHandlerName);
#endif

bool OpenFileExplorerDialog(const std::wstring& dialogTitle, const std::wstring& initFileName, std::string& selectedFile, bool saveMode, const std::vector<COMDLG_FILTERSPEC>& vFilters = {});
bool OpenFileExplorerDialog(const std::string& dialogTitle, const std::wstring& initFileName, std::string& selectedFile, bool saveMode, const std::vector<std::string> vFilters = {});
}

#endif // !_UTIL_H_
Loading