Compare commits

...
Author SHA1 Message Date
Mikaël Capelle 8006988b20 Start updating the settings tab for extension. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 890bee5444 Refactor and clean plugin settings stuff. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 263eb6a552 Minor updates of themes. 2024-10-20 11:58:04 +02:00
Mikaël Capelle ee6624f091 Use MO2_INSTALL_BIN from mo2-cmake instead of custom CMake variable. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 17a2e5ef31 Start implementing extension info side. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 5c264af63e Minor fixes. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 5061ff5e59 Default icon for extension. 2024-10-20 11:58:04 +02:00
Mikaël Capelle c9f592049e Fix after rebase. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 20711bd3bf Start working on extensions tab in settings. 2024-10-20 11:58:04 +02:00
Mikaël Capelle af52b779e6 Update theme extensions. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 0d699bd025 Remove unused fileMapping() overload. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 28f134cc86 Add IExtensionList implementation. 2024-10-20 11:58:04 +02:00
Mikaël Capelle c6516af5db Recurse folders to find Qt plugins. 2024-10-20 11:58:04 +02:00
Mikaël Capelle d35ffb9751 Setup theme extensions properly. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 64f9c998cd Track the master plugin in a plugin group. 2024-10-20 11:58:04 +02:00
Mikaël Capelle a02fabc06f Update for extensions. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 62fe0a4c13 Remove plugin container from source group. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 1993fee880 Update plugin manager. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 646723cac7 Load themes and translations from extensions/. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 9d9370100c Fix after uibase changes. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 17e54ba347 Implement translation manager. 2024-10-20 11:58:04 +02:00
Mikaël Capelle f8ea6dedd0 Implement theme extensions. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 1d5a40738c Start implementing the theme manager. 2024-10-20 11:58:04 +02:00
Mikaël Capelle 54a7e93878 Move mo2-cmake to standalone feature. 2024-10-20 11:57:37 +02:00
Mikaël Capelle d0d0a983bb Switch VersionInfo -> Version for ModOrganizer2. (#2063) 2024-10-20 11:57:37 +02:00
Mikaël Capelle bb4f3fd74b Move to VCPKG.
* Remove SConscript related files.
* Update for libbsarch.
* Force-load translations from uibase and gamebryo/creation.
* Set option to use deprecated uibase include paths.
* Bring githubpp here and add a standalone preset.
* Full standalone build.
2024-10-20 11:57:37 +02:00
Jonathan Feenstra 61ef16d08d Hide hidden folders if "show hidden files" is unchecked in data tab (#2146) 2024-10-16 08:36:12 +02:00
Jonathan Feenstra c44ee31e9f Prevent crash when opening NXM link before selecting instance (#2144) 2024-10-15 11:02:56 +02:00
Jonathan Feenstra 08fc25d641 Show blueprint master count in plugin counter tooltip and hide unsupported plugin types (#2143) 2024-10-13 13:24:43 +02:00
Jonathan Feenstra f305502c5d Match capitilization of "Hidden files" in data tab with downloads tab (#2142) 2024-10-13 12:42:01 +02:00
Jonathan Feenstra b6de58f2d3 Highlight masters of selected plugins (#2140) 2024-10-12 13:37:58 +02:00
Jonathan Feenstra 75e24cd926 Rename Optional ESPs tab to Optional Plugins and improve wording (#2134) 2024-10-10 13:50:24 +02:00
Jonathan Feenstra bafc058b7f Add filter checkbox to data tab to show/hide hidden files (#2136) 2024-10-10 13:49:31 +02:00
Jonathan Feenstra 71434efaa9 Include notes in search when filtering mods if the column is enabled (#2139) 2024-10-10 13:45:40 +02:00
Jonathan Feenstra 8f1dbe9f35 Resize columns to contents in notifications window (#2128) 2024-10-03 09:48:50 +02:00
Jeremy RimpoandJonathan Feenstra 19fae10b2b Starfield Updates: Shattered Space & Blueprint Support (#2131)
---------

Co-authored-by: Jonathan Feenstra <26406078+JonathanFeenstra@users.noreply.github.com>
2024-10-03 09:46:53 +02:00
Jonathan Feenstra 7ed06a77c1 Add author and description methods to IPluginList (#2118) 2024-09-28 19:58:29 +02:00
Mikaël Capelle 9c130cbf2f Bump version to 2.5.2. (#2090) 2024-08-04 09:58:53 +02:00
Mikaël Capelle ea38fdc6ce Replace chopped by mid in download list. (#2089) 2024-08-03 13:37:39 +02:00
Mikaël Capelle 89f39ef200 Bump version to 2.5.2rc2. (#2084) 2024-08-01 10:58:31 +02:00
Mikaël Capelle acd201157d Move slot connections to avoid issue when starting MO2 to download a NXM link. (#2082)
* Move slot connections to avoid issue when starting MO2 to download a NXM link.
2024-08-01 10:40:44 +02:00
Mikaël Capelle f11925ab88 Fix FIXABLE status for ModDataChecker. (#2080)
* Fix FIXABLE status for ModDataChecker.
* Fix issue with registerFeature() without games.
2024-07-28 14:39:20 +02:00
Mikaël Capelle 2395c13c25 Bump version to 2.5.2rc1. (#2078) 2024-07-21 16:49:38 +02:00
Mikaël Capelle cc92f6cf88 Set default style to 'windowsvista' and allow stylesheet to modify base style (#2072)
* Set 'windowsvista' as the default style.
* Allow stylesheet to modify base style.
2024-07-19 09:49:53 +02:00
Jeremy Rimpo 193442e773 Archive preview support (#2056)
* Support for archive file previews
- Should account for alternates
- Extracts files and requests preview from plugins that claim support
2024-07-11 16:46:29 +02:00
Jeremy Rimpo a4f6298111 Parse unmanaged file location when creating ModInfoForeign (#2053)
* Parse unmanaged file location when creating ModInfoForeign
- Fixes issues with secondaryDataDirectories
* Revert SF memory address changes
- CCC implementation prevents the need to determine core plugin LO by dependency chains
* The light flag wins over the medium flag
- I had expected the opposite, but apparently the light flag still wins if both are set. This shouldn't really happen but it's possible, even with the CK
* Update display to account for multi-flagged plugins
- Show both icons, warn if both set
2024-06-22 08:31:26 +02:00
Twinki d3b647ab2b Use new Skip File & Skip Directory in usvfs (#2033)
* Use new Skip File & Skip Directory in usvfs.

# Motivations
https://github.com/ModOrganizer2/usvfs/pull/61 Highlights some reasons why the ability to skip files & directories would be beneficial

# Modifications
- Add two new settings, `skip_file_suffixes` and `skip_directories`
- Wire the two new settings up to usvfs
- Add two new buttons to the `Workarounds` dialog, one to adjust Skip File Suffixes and another for Skip Directories, both buttons act nearly identical to the Executable Blacklist button
- Add a new grouping in the `Workarounds` dialog box that contains the usvfs buttons to keep the dialog a tad organized
2024-06-15 18:51:47 +02:00
Jeremy Rimpo 6d08d434a8 Add medium plugin support (Starfield) (#2048)
* Add medium plugin support (Starfield)
- Coopt the overlay support for the new 'medium' / ESH plugin flag
- Update various displays to include ESH info
* Rework address display for SF weirdness
* Fix core ESH display
2024-06-13 17:51:09 +02:00
Mikaël Capelle 3d8bfdd1d4 Fix manifest for debug mode. (#2047) 2024-06-10 20:46:00 +02:00
RJ fff03d34e2 PluginList::refresh speedup (#2046)
* Move loadOrderMechanism out of loop
* PluginList::refresh reduce number of loops
2024-06-10 15:55:32 +02:00
Mikaël Capelle 88c386d74d Refactoring of game features for better management. (#2043) 2024-06-09 12:18:17 +02:00
Mikaël Capelle c43535f5bc Update for new USVFS function scheme. (#2044)
* Update for new USVFS function scheme.
* Fix call to usvfsVersionString().
* Move USVFS to mo2 dependencies instead of third party in CI.
2024-06-09 11:00:13 +02:00
Jeroen Ruigrok van der Werven 3d18f0cd38 Only list instance directory with a MO INI file (#1965) 2024-06-08 07:56:25 +02:00
Mikaël Capelle a11617ff65 Use MO2 formatting action. (#2032) 2024-05-26 12:20:02 +02:00
Mikaël CapelleandTwinki 1871f32a8d Use lootGameName() and displayGameName() in initial places. (#2030)
* Use `displayGameName()` in create instance dialogs & the main window, this doesn't cover all places `gameName()` was being used for purely display reasons, but it covers the bulk.
* Use `lootGameName()` instead of `gameShortName()` for LOOT cli initiation.
* Use game display name in status bar.

---------

Co-authored-by: Twinki <Twinki@users.noreply.github.com>
2024-05-26 11:12:08 +02:00
Mikaël Capelle fa82d1cca1 Switch from fmtlib to std::format. (#2031)
* Switch from fmtlib to std::format.
* Remove libffi from dependencies in Github action.
2024-05-25 13:14:46 +02:00
Jeremy Rimpo 9ee4c5afe1 Disable ESLs when no ESL support (#2026)
* Show ESL plugins but disable and warn if unsupported
2024-05-19 09:40:47 +02:00
RJandLiderate a1d199134d Fixes for stylesheets that use transparent backgrounds (#2029)
* Remove uneeded "Fix" text

* Don't set Qt::WA_OpaquePaintEvent when imagesThumbnails has transparent base

---------

Co-authored-by: Liderate <Liderate@users.noreply.github.com>
2024-05-19 09:40:17 +02:00
RJandLiderate 16423b2682 Directly open logs and crashDumps folders from diagnostics settings (#2028)
Co-authored-by: Liderate <Liderate@users.noreply.github.com>
2024-05-19 09:15:50 +02:00
Mikaël Capelle 5adb1ec43d Merge pull request #1962 from ashemedai/ignore_cache_instance
Ignore Qt-created 'cache' directory in list of instances.
2024-01-01 12:47:18 +01:00
Jeroen Ruigrok van der Werven 4472df8656 Ignore Qt-created 'cache' directory 2023-12-31 13:35:26 +01:00
Jeremy Rimpo 45c017de2f Merge pull request #1959 from ModOrganizer2/category_alternate_source
Use primary game source for categories if defined
2023-12-28 15:03:35 -06:00
Jeremy Rimpo b350afee9e Use primary game source for categories if defined 2023-12-28 03:26:39 -06:00
262 changed files with 8301 additions and 10085 deletions
+39 -7
View File
@@ -6,15 +6,47 @@ on:
pull_request:
types: [opened, synchronize, reopened]
env:
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
jobs:
build:
runs-on: windows-2022
steps:
- name: Build ModOrganizer 2
uses: ModOrganizer2/build-with-mob-action@master
# https://learn.microsoft.com/en-us/vcpkg/consume/binary-caching-github-actions-cache
- name: Export GitHub Actions cache environment variables
uses: actions/github-script@v7
with:
qt-modules: qtpositioning qtwebchannel qtwebengine qtwebsockets
mo2-third-parties:
7z zlib fmt gtest libbsarch libloot openssl libffi bzip2 python lz4 spdlog
boost boost-di sip pyqt pybind11 ss licenses explorerpp usvfs
mo2-dependencies: cmake_common uibase githubpp bsatk esptk archive lootcli game_gamebryo
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: 6.7.1
modules: qtpositioning qtwebchannel qtwebengine qtwebsockets
cache: true
- uses: actions/checkout@v4
- name: "Set environmental variables"
shell: bash
run: |
echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV
- name: Configure ModOrganizer
shell: pwsh
run: |
cmake --preset vs2022-windows-standalone `
"-DCMAKE_PREFIX_PATH=${env:QT_ROOT_DIR}\msvc2019_64" `
"-DCMAKE_INSTALL_PREFIX=install"
- name: Build ModOrganizer
run: cmake --build vsbuild --config RelWithDebInfo --target INSTALL
- name: Package ModOrganizer
uses: actions/upload-artifact@master
with:
name: modorganizer
path: ./install
+3 -3
View File
@@ -10,8 +10,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run clang-format
uses: jidicula/clang-format-action@v4.11.0
- name: Check format
uses: ModOrganizer2/check-formatting-action@master
with:
clang-format-version: "15"
check-path: "."
exclude-regex: "third-party"
+1
View File
@@ -12,5 +12,6 @@ edit
/msbuild.log
/*std*.log
/*build
.vscode
/src/version.aps
-46
View File
@@ -1,46 +0,0 @@
syntax: glob
scons_configure.py
scons-ModOrganizer-*
ModOrganizer-build-desktop*
outputd/*
output/*
build-ModOrganizer-*
source/NCC/*/bin
source/NCC/*/obj
source/NCC/bin
*.orig
source/plugins/proxyPython/build
staging/*
source - Copy/*
ModOrganizer-build-*
pdbs/*
source/NCC/BossDummy.x/*
*.ts
staging_prepare/*
staging_trans/*
tools/python_zip/*
Makefile
html
*.vcxproj
*.pdb
*.dll
*.exp
*.tlog
*.user
*.obj
*.suo
*.sln
*.log
*.filters
*.lib
source/organizer/resources/contents/icons
source/plugins/build-*
*/GeneratedFiles/*
translations/*
source/LocalPaths.pri
source/*/Win32/Debug/*
source/plugins/*/Win32/Debug/*
*~
syntax: regexp
Makefile\.(Debug|Release)
source/.*/debug/.*
+12 -11
View File
@@ -1,16 +1,17 @@
cmake_minimum_required(VERSION 3.16)
# TODO: move these to cmake_common?
set(OPENSSL_USE_STATIC_LIBS FALSE CACHE STRING "" FORCE)
set(MySQL_INCLUDE_DIRS CACHE STRING "" FORCE)
if(DEFINED DEPENDENCIES_DIR)
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/mo2.cmake)
else()
include(${CMAKE_CURRENT_LIST_DIR}/../cmake_common/mo2.cmake)
endif()
# TODO: clean include directives
set(MO2_CMAKE_DEPRECATED_UIBASE_INCLUDE ON)
project(organizer)
add_subdirectory(src)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dump_running_process.bat DESTINATION bin)
find_package(mo2-cmake CONFIG REQUIRED)
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
add_subdirectory(src)
add_subdirectory(themes)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT organizer)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dump_running_process.bat DESTINATION ${MO2_INSTALL_BIN})
+59
View File
@@ -0,0 +1,59 @@
{
"configurePresets": [
{
"errors": {
"deprecated": true
},
"hidden": true,
"name": "cmake-dev",
"warnings": {
"deprecated": true,
"dev": true
}
},
{
"cacheVariables": {
"VCPKG_MANIFEST_NO_DEFAULT_FEATURES": {
"type": "BOOL",
"value": "ON"
}
},
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"hidden": true,
"name": "vcpkg"
},
{
"binaryDir": "${sourceDir}/vsbuild",
"architecture": {
"strategy": "set",
"value": "x64"
},
"cacheVariables": {
"CMAKE_CXX_FLAGS": "/EHsc /MP /W3",
"VCPKG_TARGET_TRIPLET": {
"type": "STRING",
"value": "x64-windows-static-md"
}
},
"generator": "Visual Studio 17 2022",
"inherits": ["cmake-dev", "vcpkg"],
"name": "vs2022-windows",
"toolset": "v143"
},
{
"cacheVariables": {
"VCPKG_MANIFEST_FEATURES": {
"type": "STRING",
"value": "standalone"
},
"MO2_INSTALL_IS_BIN": {
"type": "BOOL",
"value": "ON"
}
},
"inherits": "vs2022-windows",
"name": "vs2022-windows-standalone"
}
],
"version": 4
}
-713
View File
File diff suppressed because it is too large Load Diff
-77
View File
@@ -1,77 +0,0 @@
version: dev-appveyor{build}
skip_branch_with_pr: true
image: Visual Studio 2019
init:
- ps: >-
# define build version depending on nightly or normal build
if($env:APPVEYOR_SCHEDULED_BUILD -eq 'True'){
$timestamp= Get-Date -Format "ddMMyyyy-HHmm"
Update-AppveyorBuild -Version "$($env:MO_VERSION)$($env:VER_STUB_NIGHTLY)$timestamp"
} else {
Update-AppveyorBuild -Version "$($env:MO_VERSION)$($env:VER_STUB_NORMAL)$($env:APPVEYOR_BUILD_NUMBER)"
}
Write-Host Build version set to: $env:APPVEYOR_BUILD_VERSION
environment:
WEBHOOK_URL:
secure: gOKbXaZM9ImtMD5XrYITvdyZUW/az082G9OIN1EC1VaKiI9iefpxhBavJ6Al6CzIZvQ+3pxnLqjmNgA7cDc22wcj2kB4hSG5qhbTI8wGa8jLQ5L65nuRZ3vrIqghBz9G3GLglgZkg6eqH9r3Kqc6UzcpCGzxxPOqm550nRcIiUU=
MO_VERSION: 2.4.0
VER_STUB_NORMAL: dev-appveyor-
VER_STUB_NIGHTLY: dev-nightly-
build_script:
- pwsh: >-
# Maintenance comments:
# APPVEYOR_BUILD_FOLDER= "c:\projects\modorganizer-slug"
# -Need to update py3 version used to invoke unimake.py once in a while.
# -Need update MO_VERSION env variable after each release.
# -Always clones umbrella master
# -Will checkout all the branches matching the one that triggered the build on the main repo.
# End comments.
$ErrorActionPreference = 'Stop'
git clone --depth=1 --no-single-branch https://github.com/ModOrganizer2/modorganizer-umbrella.git c:\projects\modorganizer-umbrella
New-Item -ItemType Directory -Path ${env:APPVEYOR_BUILD_FOLDER}\modorganizer-build
cd c:\projects\modorganizer-umbrella
($env:APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH -eq $null) ? ($branch = $env:APPVEYOR_REPO_BRANCH) : ($branch = $env:APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH)
git checkout $(git show-ref --verify --quiet refs/remotes/origin/${branch} || echo '-b') ${branch}
C:\Python38-x64\python.exe unimake.py -d ${env:APPVEYOR_BUILD_FOLDER}\modorganizer-build -s Appveyor_Build=True -s Feature_Branch=${env:APPVEYOR_REPO_BRANCH} -s override_build_version=${env:APPVEYOR_BUILD_VERSION}
if($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode ) }
test: off
artifacts:
- path: '\modorganizer-build\install\bin\ModOrganizer.exe'
name: Mod.Organizer-$(APPVEYOR_BUILD_VERSION)
- path: '\modorganizer-build\install\pdb\ModOrganizer.pdb'
name: PDB-Mod.Organizer-$(APPVEYOR_BUILD_VERSION)
deploy: off
on_success:
- ps: >-
Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
if($env:APPVEYOR_SCHEDULED_BUILD -ne 'True'){
./send.ps1 success $env:WEBHOOK_URL
}
on_failure:
- ps: >-
Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
if($env:APPVEYOR_SCHEDULED_BUILD -ne 'True'){
./send.ps1 failure $env:WEBHOOK_URL
}
-30
View File
@@ -1,30 +0,0 @@
[
# for boost???
# These are probably correct but might need a revisit as if you look at the boost documentation pages, it
# can give you huge lists of alternate includes...
{ symbol: [ "BOOST_FOREACH", "private", "<boost/foreach.hpp>", "public" ] },
{ include: [ "@\"boost/bind/.*\"", "private", "<boost/bind.hpp>", "public" ] },
{ include: [ "@\"boost/algorithm/string/.*\"", "private", "<boost/algorithm/string.hpp>", "public" ] },
{ include: [ "@\"boost/assign/.*\"", "private", "<boost/assign.hpp>", "public" ] },
{ include: [ "@\"boost/filesystem/.*\"", "private", "<boost/filesystem.hpp>", "public" ] },
{ include: [ "@\"boost/format/.*\"", "private", "<boost/format.hpp>", "public" ] },
{ include: [ "@\"boost/function/.*\"", "private", "<boost/function.hpp>", "public" ] },
{ include: [ "@\"boost/local/.*\"", "private", "<boost/locale.hpp>", "public" ] },
{ include: [ "@\"boost/python/.*\"", "private", "<boost/python.hpp>", "public" ] },
{ include: [ "@\"boost/signals2/.*\"", "private", "<boost/signals2.hpp>", "public" ] },
{ include: [ "\"boost/smart_ptr/scoped_array.hpp\"", "private", "<boost/scoped_array.hpp>", "public" ] },
{ include: [ "\"boost/smart_ptr/shared_ptr.hpp\"", "private", "<boost/shared_ptr.hpp>", "public" ] },
# this appears to be excessive
#{ include: [ "@\"boost/thread/.*\"", "private", "<boost/thread.hpp>", "public" ] },
# And this is specific to us
{ include: [ "\"appconfig.inc\"", "private", "\"appconfig.h\"", "public" ] },
]
# Ones I don't yet know how to deal with
#include "boost/fusion/container/vector/vector10_fwd.hpp" // for fusion
#include "boost/iterator/iterator_facade.hpp" // for operator!=
#include "boost/iterator/iterator_facade.hpp"
-2478
View File
File diff suppressed because it is too large Load Diff
-33
View File
@@ -1,33 +0,0 @@
# This python script contains the configuration for scons
# Copy this to scons_configure.py and adjust to taste.
# Path to your boost install - it should have a boost/ subdirectory and a stage/
# subdirectory. The scons script will use stage/lib if there, or the appropriate
# version for your compiler, if you installed the multiple-build version
BOOSTPATH = r"C:\Apps\boost_1_55_0"
# Version of Visual Studio to use, if you wish to use a specific version. If you
# don't specify a version, the latest will be picked.. See the scons manual for
# supported values.
#MSVC_VERSION = '10.0Exp'
# Path to your python install
# You don't really need to set this up but you might if (say) you have a 32- and
# 64-bit python install and scons has been installed for the 64 bit version
#PYTHONPATH=r"C:\Apps\Python"
# Path to your QT install. This might constrain the version of MSVC you can use.
# This seems to be set by QTCreator
#QTDIR = r"C:\Apps\Qt\4.8.6"
# Path to 7-zip sources
SEVENZIPPATH = r"C:\Apps\7-Zip\7z920"
# Path to zlib. Please read the README file for more information about how this
# needs to be set up
ZLIBPATH = r"C:\Apps\zlib-1.2.8"
# Source control programs. Sadly I can't get this information from qt, even
# though you have to set it up in the configuration
GIT = r"C:\Program Files\git\bin\git.exe"
MERCURIAL = r"C:\Program Files\TortoiseHg\hg.exe"
+108 -22
View File
@@ -1,30 +1,100 @@
cmake_minimum_required(VERSION 3.16)
add_executable(organizer)
set_target_properties(organizer PROPERTIES OUTPUT_NAME "ModOrganizer")
mo2_configure_executable(organizer
WARNINGS OFF
EXTRA_TRANSLATIONS ${MO2_SUPER_PATH}/game_gamebryo/src ${MO2_UIBASE_PATH}/src
PRIVATE_DEPENDS
uibase githubpp bsatk esptk archive usvfs lootcli boost::program_options
Qt::WebEngineWidgets Qt::WebSockets)
target_link_libraries(organizer PUBLIC Shlwapi)
mo2_install_target(organizer)
find_package(mo2-cmake CONFIG REQUIRED)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt5"
DESTINATION bin/dlls
find_package(usvfs CONFIG REQUIRED)
find_package(mo2-uibase CONFIG REQUIRED)
find_package(mo2-archive CONFIG REQUIRED)
find_package(mo2-lootcli-header CONFIG REQUIRED)
find_package(mo2-bsatk CONFIG REQUIRED)
find_package(mo2-esptk CONFIG REQUIRED)
find_package(mo2-dds-header CONFIG REQUIRED)
find_package(mo2-libbsarch CONFIG REQUIRED)
find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets WebSockets)
find_package(Boost CONFIG REQUIRED COMPONENTS program_options thread interprocess signals2 uuid accumulators)
find_package(7zip CONFIG REQUIRED)
find_package(lz4 CONFIG REQUIRED)
find_package(ZLIB REQUIRED)
add_executable(organizer)
set_target_properties(organizer PROPERTIES
OUTPUT_NAME "ModOrganizer"
WIN32_EXECUTABLE TRUE)
# disable translations because we want to be able to install somewhere else if
# required
mo2_configure_target(organizer WARNINGS 3 TRANSLATIONS OFF)
# we add translations "manually" to handle MO2_INSTALL_IS_BIN
mo2_add_translations(organizer
INSTALL_RELEASE
INSTALL_DIRECTORY "${MO2_INSTALL_BIN}/translations"
SOURCES ${CMAKE_CURRENT_SOURCE_DIR})
mo2_set_project_to_run_from_install(
organizer EXECUTABLE ${CMAKE_INSTALL_PREFIX}/${MO2_INSTALL_BIN}/ModOrganizer.exe)
target_link_libraries(organizer PRIVATE
Shlwapi Bcrypt
usvfs::usvfs mo2::uibase mo2::archive mo2::libbsarch
mo2::bsatk mo2::esptk mo2::lootcli-header
Boost::program_options Boost::signals2 Boost::uuid Boost::accumulators
Qt6::WebEngineWidgets Qt6::WebSockets Version Dbghelp)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt6"
DESTINATION ${MO2_INSTALL_BIN}/dlls
CONFIGURATIONS Release RelWithDebInfo
RENAME dlls.manifest)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.debug.qt6"
DESTINATION ${MO2_INSTALL_BIN}/dlls
CONFIGURATIONS Debug
RENAME dlls.manifest)
install(DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}/stylesheets"
"${CMAKE_CURRENT_SOURCE_DIR}/tutorials"
DESTINATION bin)
if (NOT MO2_SKIP_TUTORIALS_INSTALL)
install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tutorials"
DESTINATION ${MO2_INSTALL_BIN})
endif()
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/resources/markdown.html"
DESTINATION bin/resources)
DESTINATION ${MO2_INSTALL_BIN}/resources)
mo2_deploy_qt(BINARIES ModOrganizer.exe uibase.dll plugins/bsa_packer.dll)
# install ModOrganizer.exe itself
install(FILES $<TARGET_FILE:organizer> DESTINATION ${MO2_INSTALL_BIN})
# install dependencies DLLs
install(FILES $<TARGET_FILE:mo2::libbsarch> DESTINATION ${MO2_INSTALL_BIN}/dlls)
install(FILES $<TARGET_FILE:mo2::archive> DESTINATION ${MO2_INSTALL_BIN}/dlls)
install(FILES $<TARGET_FILE:7zip::7zip> DESTINATION ${MO2_INSTALL_BIN}/dlls)
# this may copy over the ones from uibase/usvfs
# - when building with mob, this should not matter as the files should be identical
# - when building standalone, this should help having matching USVFS DLL between the
# build and the installation
# - this may cause issue with uibase in standalone mode if the installed version does
# not match the one used for the build, but there would be other issue anyway (e.g.
# different uibase.dll between modorganizer and plugins)
#
install(FILES
$<TARGET_FILE:mo2::uibase>
$<TARGET_FILE:usvfs_x64::usvfs_dll>
$<TARGET_FILE:usvfs_x86::usvfs_dll>
$<TARGET_FILE:usvfs_x64::usvfs_proxy>
$<TARGET_FILE:usvfs_x86::usvfs_proxy>
DESTINATION ${MO2_INSTALL_BIN})
# do not install PDB if CMAKE_INSTALL_PREFIX is "bin"
if (NOT MO2_INSTALL_IS_BIN)
install(FILES $<TARGET_PDB_FILE:organizer> DESTINATION pdb)
endif()
mo2_deploy_qt(
DIRECTORY ${MO2_INSTALL_BIN}
BINARIES ModOrganizer.exe $<TARGET_FILE_NAME:mo2::uibase>)
# set source groups for VS
mo2_add_filter(NAME src/application GROUPS
iuserinterface
commandline
@@ -43,19 +113,20 @@ mo2_add_filter(NAME src/browser GROUPS
)
mo2_add_filter(NAME src/categories GROUPS
categories
categories
categoriestable
categoriesdialog
categoriesdialog
categoryimportdialog
)
mo2_add_filter(NAME src/core GROUPS
archivefiletree
github
inibakery
installationmanager
nexusinterface
nxmaccessmanager
organizercore
plugincontainer
apiuseraccount
processrunner
qdirfiletree
@@ -63,6 +134,16 @@ mo2_add_filter(NAME src/core GROUPS
uilocker
)
mo2_add_filter(NAME src/extensions GROUPS
game_features
thememanager
translationmanager
extensionmanager
extensionwatcher
pluginmanager
proxyqt
)
mo2_add_filter(NAME src/dialogs GROUPS
aboutdialog
activatemodsdialog
@@ -196,7 +277,9 @@ mo2_add_filter(NAME src/profiles GROUPS
mo2_add_filter(NAME src/proxies GROUPS
downloadmanagerproxy
gamefeaturesproxy
modlistproxy
extensionlistproxy
organizerproxy
pluginlistproxy
proxyutils
@@ -213,6 +296,7 @@ mo2_add_filter(NAME src/register GROUPS
)
mo2_add_filter(NAME src/settings GROUPS
extensionsettings
settings
settingsutilities
)
@@ -223,7 +307,9 @@ mo2_add_filter(NAME src/settingsdialog GROUPS
settingsdialoggeneral
settingsdialognexus
settingsdialogpaths
settingsdialogplugins
settingsdialogextensions
settingsdialogextensionrow
settingsdialogextensioninfo
settingsdialogworkarounds
settingsdialogmodlist
settingsdialogtheme
-60
View File
@@ -1,60 +0,0 @@
TEMPLATE = subdirs
SUBDIRS = bsatk \
shared \
uibase \
esptk \
organizer \
hookdll \
archive \
helper \
plugins \
nxmhandler \
BossDummy \
pythonRunner \
loot_cli
pythonRunner.depends = uibase
plugins.depends = pythonRunner uibase
hookdll.depends = shared
organizer.depends = shared uibase plugins
CONFIG(debug, debug|release) {
DESTDIR = $$PWD/../outputd
} else {
DESTDIR = $$PWD/../output
}
STATICDATAPATH = $${DESTDIR}\\..\\tools\\static_data\\dlls
DLLSPATH = $${DESTDIR}\\dlls
otherlibs.path = $$DLLSPATH
otherlibs.files += $${STATICDATAPATH}\\7z.dll \
$${BOOSTPATH}\\stage\\lib\\boost_python-vc*-mt-1*.dll
qtlibs.path = $$DLLSPATH
greaterThan(QT_MAJOR_VERSION, 4) {
QTLIBNAMES += Core Gui Network OpenGL Script Sql Svg Qml Quick Webkit Widgets Xml XmlPatterns
} else {
QTLIBNAMES += Core Declarative Gui Network OpenGL Script Sql Svg Webkit Xml XmlPatterns
}
greaterThan(QT_MAJOR_VERSION, 5) {
QTLIBNAMES += OpenGLWidgets
}
QTLIBSUFFIX = $${QT_MAJOR_VERSION}.dll
CONFIG(debug, debug|release): QTLIBSUFFIX = "d$${QTLIBSUFFIX}" # Can't use Debug: .. here, it ignores the line - no idea why, as it works in BossDummy.pro
for(QTNAME, QTLIBNAMES) {
QTFILE = Qt$${QTNAME}
qtlibs.files += $$[QT_INSTALL_BINS]\\$${QTFILE}$${QTLIBSUFFIX}
}
INSTALLS += qtlibs otherlibs
OTHER_FILES +=\
../SConstruct\
../scons_configure.py\
SConscript
-179
View File
@@ -1,179 +0,0 @@
import ctypes
import os
import subprocess
def resolve_name(source):
# Get the actual name of the file, after reparse points and symlinks are
# taken into account.
GENERIC_READ = 0x80000000
FILE_SHARE_READ = 0x1
OPEN_EXISTING = 0x3
FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
handle = ctypes.windll.kernel32.CreateFileA(source,
GENERIC_READ,
FILE_SHARE_READ,
None,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
None)
# get the target
FILE_NAME_NORMALIZED = 0x0
FILE_NAME_OPENED = 0x8
buff = ctypes.create_string_buffer(1024)
res = ctypes.windll.kernel32.GetFinalPathNameByHandleA(handle,
buff,
ctypes.sizeof(buff),
FILE_NAME_NORMALIZED)
target = buff.value
ctypes.windll.kernel32.CloseHandle(handle)
return target
def search_up(path, target):
while True:
if os.path.exists(os.path.join(path, target)):
return True
npath = os.path.dirname(path)
if npath == path:
break
path = npath
return False
Import('qt_env')
env = qt_env.Clone()
modules = [
'Core',
'Gui',
'Network',
'Script',
'Sql',
'WebKit',
'Xml',
'XmlPatterns',
'Declarative'
]
if env['QT_MAJOR_VERSION'] > 4:
modules += [
'Widgets',
'Qml',
'WebKitWidgets'
]
env.EnableQtModules(*modules)
env.Uic(env.Glob('*.ui'))
env.RequireLibraries('uibase', 'shared', 'bsatk', 'esptk')
env.AppendUnique(LIBS = [
'shell32',
'user32',
'ole32',
'advapi32',
'gdi32',
'shlwapi',
'Psapi',
'Version'
])
# We have to 'persuade' moc to generate certain other targets and inject them
# into the list of cpps
other_sources = env.AddExtraMoc(env.Glob('*.h'))
for file in env.Glob('*.rc'):
other_sources.append(env.RES(file))
# Note the order of this is important, or you can pick up the wrong report.h...
# Doing appendunique seems to throw the moc code into a tizzy
env['CPPPATH'] += [
'../archive',
'../plugins/gamefeatures',
'.', # Why is this necessary?
'${LOOTPATH}',
'${BOOSTPATH}',
]
#########################FUDGE###############################
env['CPPPATH'] += [
'../plugins/gameGamebryo',
]
#############################################################
env.AppendUnique(CPPDEFINES = [
'_UNICODE',
'_CRT_SECURE_NO_WARNINGS',
'_SCL_SECURE_NO_WARNINGS',
'BOOST_DISABLE_ASSERTS',
'NDEBUG',
'QT_MESSAGELOGCONTEXT'
])
# Boost produces very long names with msvc truncates. Doesn't seem to cause
# problems.
# Also note to remove the -wd4100 I hacked the boost headers (tagged_argument.hpp)
# appropriately.
env.AppendUnique(CPPFLAGS = [ '-wd4503' ])
env.AppendUnique(LINKFLAGS = [
'/SUBSYSTEM:WINDOWS',
'${EXE_MANIFEST_DEPENDENCY}'
])
# modeltest is optional and it doesn't compile anyway...
cpp_files = [
x for x in env.Glob('*.cpp', source = True)
if x.name != 'modeltest.cpp' and x.name != 'aboutdialog.cpp' and \
not x.name.startswith('moc_') # I think this is a strange bug
]
about_env = env.Clone()
# This is somewhat of a hack until I can work out a way of setting up a build
# with all the repos without using millions of junction points
try:
target = resolve_name(Dir('.').srcnode().abspath)
if search_up(target, '.hg'):
hgid = subprocess.check_output([env['MERCURIAL'], 'id', '-i']).rstrip()
elif search_up(target, '.git'):
hgid = subprocess.check_output([env['GIT'], '-C', target, 'describe',
'--tag']).rstrip()
else:
hgid = "Unknown"
except:
hgid = "Problem determining version"
# FIXME: It'd be much easier to stringify this in the source code
about_env.AppendUnique(CPPDEFINES = [ 'HGID=\\"%s\\"' % hgid ])
other_sources.append(about_env.StaticObject('aboutdialog.cpp'))
env.AppendUnique(LIBPATH = "${ZLIBPATH}/build")
env.AppendUnique(LIBS = 'zlibstatic')
prog = env.Program('ModOrganizer',
cpp_files + env.Glob('*.qrc') + other_sources)
env.InstallModule(prog)
for subdir in ('tutorials', 'stylesheets'):
env.Install(os.path.join(env['INSTALL_PATH'], subdir),
env.Glob(os.path.join(subdir, '*')))
# FIXME Sort the translations. Except they don't exist on the 1.2 branch
res = env['QT_USED_MODULES']
Return('res')
"""
CONFIG(debug, debug|release) {
} else {
QMAKE_CXXFLAGS += /Zi /GL
QMAKE_LFLAGS += /DEBUG /LTCG /OPT:REF /OPT:ICF
}
TRANSLATIONS = organizer_en.ts
QMAKE_POST_LINK += xcopy /y /s /I $$quote($$BASEDIR\\*.qm) $$quote($$DSTDIR)\\translations $$escape_expand(\\n)
"""
+2
View File
@@ -28,6 +28,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QtGlobal>
using namespace MOBase;
ActivateModsDialog::ActivateModsDialog(SaveGameInfo::MissingAssets const& missingAssets,
QWidget* parent)
: TutorableDialog("ActivateMods", parent), ui(new Ui::ActivateModsDialog)
+3 -4
View File
@@ -24,9 +24,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "tutorabledialog.h"
#include <QObject>
class QString;
class QWidget;
#include <QString>
#include <QWidget>
#include <set>
@@ -49,7 +48,7 @@ public:
* @param missingPlugins a map containing missing plugins that need to be activated
* @param parent ... Defaults to 0.
**/
explicit ActivateModsDialog(SaveGameInfo::MissingAssets const& missingAssets,
explicit ActivateModsDialog(MOBase::SaveGameInfo::MissingAssets const& missingAssets,
QWidget* parent = 0);
~ActivateModsDialog();
+2 -2
View File
@@ -20,8 +20,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#ifndef ARCHIVEFILENETRY_H
#define ARCHIVEFILENTRY_H
#include "archive.h"
#include "ifiletree.h"
#include <archive/archive.h>
#include <uibase/ifiletree.h>
/**
*
+11 -15
View File
@@ -74,7 +74,7 @@ void CategoryFactory::loadCategories()
bool ok = false;
int temp = iter->toInt(&ok);
if (!ok) {
log::error(tr("invalid category id {}").toStdString(), iter->constData());
log::error(tr("invalid category id {0}"), iter->constData());
}
nexusCats.push_back(NexusCategory("Unknown", temp));
}
@@ -84,8 +84,7 @@ void CategoryFactory::loadCategories()
int id = cells[0].toInt(&cell0Ok);
int parentID = cells[3].trimmed().toInt(&cell3Ok);
if (!cell0Ok || !cell3Ok) {
log::error(tr("invalid category line {}: {}").toStdString(), lineNum,
line.constData());
log::error(tr("invalid category line {0}: {1}"), lineNum, line.constData());
}
addCategory(id, QString::fromUtf8(cells[1].constData()), nexusCats, parentID);
} else if (cells.count() == 3) {
@@ -94,14 +93,13 @@ void CategoryFactory::loadCategories()
int id = cells[0].toInt(&cell0Ok);
int parentID = cells[2].trimmed().toInt(&cell3Ok);
if (!cell0Ok || !cell3Ok) {
log::error(tr("invalid category line {}: {}").toStdString(), lineNum,
line.constData());
log::error(tr("invalid category line {0}: {1}"), lineNum, line.constData());
}
addCategory(id, QString::fromUtf8(cells[1].constData()),
std::vector<NexusCategory>(), parentID);
} else {
log::error(tr("invalid category line {}: {} ({} cells)").toStdString(), lineNum,
log::error(tr("invalid category line {0}: {1} ({2} cells)"), lineNum,
line.constData(), cells.count());
}
}
@@ -122,19 +120,17 @@ void CategoryFactory::loadCategories()
bool ok = false;
int nexID = nexCells[2].toInt(&ok);
if (!ok) {
log::error(tr("invalid nexus ID {}").toStdString(),
nexCells[2].constData());
log::error(tr("invalid nexus ID {}"), nexCells[2].constData());
}
int catID = nexCells[0].toInt(&ok);
if (!ok) {
log::error(tr("invalid category id {}").toStdString(),
nexCells[0].constData());
log::error(tr("invalid category id {}"), nexCells[0].constData());
}
m_NexusMap.insert_or_assign(nexID, NexusCategory(nexName, nexID));
m_NexusMap.at(nexID).setCategoryID(catID);
} else {
log::error(tr("invalid nexus category line {}: {} ({} cells)").toStdString(),
lineNum, nexLine.constData(), nexCells.count());
log::error(tr("invalid nexus category line {0}: {1} ({2} cells)"), lineNum,
nexLine.constData(), nexCells.count());
}
}
}
@@ -394,7 +390,7 @@ bool CategoryFactory::isDescendantOfImpl(int id, int parentID,
return isDescendantOfImpl(m_Categories[index].parentID(), parentID, seen);
}
} else {
log::warn(tr("{} is no valid category id").toStdString(), id);
log::warn(tr("{} is no valid category id"), id);
return false;
}
}
@@ -513,11 +509,11 @@ unsigned int CategoryFactory::resolveNexusID(int nexusID) const
auto result = m_NexusMap.find(nexusID);
if (result != m_NexusMap.end()) {
if (m_IDMap.count(result->second.categoryID())) {
log::debug(tr("nexus category id {} maps to internal {}").toStdString(), nexusID,
log::debug(tr("nexus category id {0} maps to internal {1}"), nexusID,
m_IDMap.at(result->second.categoryID()));
return m_IDMap.at(result->second.categoryID());
}
}
log::debug(tr("nexus category id {} not mapped").toStdString(), nexusID);
log::debug(tr("nexus category id {} not mapped"), nexusID);
return 0U;
}
-2
View File
@@ -21,7 +21,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#define CATEGORIESDIALOG_H
#include "categories.h"
#include "plugincontainer.h"
#include "tutorabledialog.h"
#include <set>
@@ -71,7 +70,6 @@ private:
private:
Ui::CategoriesDialog* ui;
PluginContainer* m_PluginContainer;
int m_ContextRow;
int m_HighestID;
+9
View File
@@ -249,6 +249,15 @@ void ColorTable::load(Settings& s)
[this](auto&& v) {
m_settings->colors().setPluginListContained(v);
});
addColor(
QObject::tr("Plugin is master of selected plugin"), QColor(255, 255, 0, 64),
[this] {
return m_settings->colors().pluginListMaster();
},
[this](auto&& v) {
m_settings->colors().setPluginListMaster(v);
});
}
void ColorTable::resetColors()

Some files were not shown because too many files have changed in this diff Show More