mirror of
https://github.com/ModOrganizer2/modorganizer.git
synced 2026-07-27 13:58:24 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
256cdb8df7 | ||
|
|
32480f7a81 | ||
|
|
e43762e7db | ||
|
|
afe0d749c4 | ||
|
|
eb97c46ed6 | ||
|
|
d958e11e2b | ||
|
|
b0e3e86a61 | ||
|
|
9df612c7ca | ||
|
|
0899724d90 | ||
|
|
53d9789740 | ||
|
|
4f8c71d626 | ||
|
|
fd68248698 | ||
|
|
1ad2115e01 | ||
|
|
8d1dd6238f | ||
|
|
aaa1f52bdd | ||
|
|
b085aeea0e | ||
|
|
ea621ef859 | ||
|
|
3202713cff | ||
|
|
ad9d50e5f0 | ||
|
|
63eaf453e0 | ||
|
|
8a9a1680b0 | ||
|
|
1439347def | ||
|
|
a9a51f5085 | ||
|
|
2aae65d6f6 | ||
|
|
ddf841400e | ||
|
|
1bfc91046b | ||
|
|
d417229e6b | ||
|
|
1d1cd36957 | ||
|
|
c037b74b00 | ||
|
|
5adb3b377e | ||
|
|
d4326250fb | ||
|
|
2d43645b64 | ||
|
|
9d260a43f6 | ||
|
|
9effaec234 | ||
|
|
502e950cde | ||
|
|
4908affbfc | ||
|
|
8dc51895e3 | ||
|
|
568b2abc12 | ||
|
|
c344714661 | ||
|
|
a3a4d5441d | ||
|
|
e60e2858d8 | ||
|
|
495846534d | ||
|
|
4a8c7306be | ||
|
|
7b087f8f9d | ||
|
|
eff0f46872 | ||
|
|
752bed064c | ||
|
|
750239bebb | ||
|
|
865c75a499 | ||
|
|
eca56079d5 | ||
|
|
e31cf3f2fd | ||
|
|
3670ab2528 | ||
|
|
235d893eb8 | ||
|
|
c2ed844eeb | ||
|
|
cb09ace972 | ||
|
|
0dedf5a875 | ||
|
|
ec9c78f8fa | ||
|
|
c07e48075e | ||
|
|
688e149c96 | ||
|
|
87d5fe28f6 | ||
|
|
ce38a3bd33 | ||
|
|
71b8c00592 | ||
|
|
20442cd4de | ||
|
|
c236078aa1 | ||
|
|
9a88a190eb | ||
|
|
d03e4f45ef | ||
|
|
9e2bcffc32 | ||
|
|
2e78a381ea | ||
|
|
bb56696f7e | ||
|
|
ca54ee2e9a | ||
|
|
2025145ff6 | ||
|
|
1b1fc247df | ||
|
|
dd37152eae | ||
|
|
82e6c98043 | ||
|
|
29dadf52f1 | ||
|
|
38c5899fef | ||
|
|
b9b12ca765 | ||
|
|
78b686b2bc | ||
|
|
42a68689fe | ||
|
|
c7d583bcf1 | ||
|
|
d6da51536f | ||
|
|
d4a287a4cc | ||
|
|
91576257bc | ||
|
|
a7ef089650 | ||
|
|
37c3bea7dd | ||
|
|
3659284ab6 | ||
|
|
2a50683133 | ||
|
|
efaba90706 | ||
|
|
159501d076 | ||
|
|
4dbb3b148d | ||
|
|
408b7933d2 | ||
|
|
efb54100dc | ||
|
|
f339cc8431 | ||
|
|
49de6e8d25 | ||
|
|
7f9af7f93e | ||
|
|
9ac845779a | ||
|
|
d1932bfc8e | ||
|
|
a284cbf232 | ||
|
|
fe54b6c46a | ||
|
|
d82ca00733 | ||
|
|
1a12b1f1f6 | ||
|
|
184cff8a77 | ||
|
|
f1aaf92afb | ||
|
|
8f64a1d136 | ||
|
|
b1cfc45853 | ||
|
|
76bee42dd1 | ||
|
|
0f8ae51459 | ||
|
|
dfdf80417e | ||
|
|
d4754f4d3c | ||
|
|
1cb0a49dfc | ||
|
|
9d88ca13b9 | ||
|
|
ca6d7c7d11 | ||
|
|
077a58f410 | ||
|
|
9d4b7a1df0 | ||
|
|
9a7b0ee2c7 | ||
|
|
f5c86bc22c | ||
|
|
2fb4917111 |
+2
-2
@@ -2,13 +2,13 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||
|
||||
PROJECT(organizer)
|
||||
|
||||
|
||||
SET(DEPENDENCIES_DIR CACHE PATH "")
|
||||
# hint to find qt in dependencies path
|
||||
LIST(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_DIR}/qt5/lib/cmake)
|
||||
|
||||
FILE(GLOB_RECURSE BOOST_ROOT ${DEPENDENCIES_DIR}/boost*/project-config.jam)
|
||||
GET_FILENAME_COMPONENT(BOOST_ROOT ${BOOST_ROOT} DIRECTORY)
|
||||
|
||||
SET(ZLIB_ROOT ${DEPENDENCIES_DIR}/zlib)
|
||||
|
||||
ADD_SUBDIRECTORY(src)
|
||||
ADD_SUBDIRECTORY(src)
|
||||
|
||||
+201
-14
@@ -37,6 +37,14 @@ def setup_config_variables():
|
||||
if 'ZLIBPATH' in os.environ:
|
||||
zlibpath = os.environ['ZLIBPATH']
|
||||
|
||||
git = 'git'
|
||||
if 'GIT' in os.environ:
|
||||
git = os.environ['GIT']
|
||||
|
||||
mercurial = 'hg'
|
||||
if 'MERCURIAL' in os.environ:
|
||||
hg = os.environ['HG']
|
||||
|
||||
vars = Variables('scons_configure.py')
|
||||
vars.AddVariables(
|
||||
PathVariable('BOOSTPATH', 'Set to point to your boost directory',
|
||||
@@ -50,12 +58,14 @@ def setup_config_variables():
|
||||
PathVariable.PathIsDir),
|
||||
PathVariable('SEVENZIPPATH', 'Path to 7zip sources', sevenzippath,
|
||||
PathVariable.PathIsDir),
|
||||
PathVariable('ZLIBPATH', 'Path to zlib install', zlibpath,
|
||||
PathVariable.PathIsDir).
|
||||
PathVariable('ZLIBPATH', 'Path to zlib install', zlibpath,
|
||||
PathVariable.PathIsDir),
|
||||
PathVariable('ZLIBPATH', 'Path to zlib install', zlibpath,
|
||||
PathVariable.PathIsDir)
|
||||
PathVariable('GIT', 'Path to git executable', git,
|
||||
PathVariable.PathIsFile),
|
||||
PathVariable('MERCURIAL', 'Path to hg executable', mercurial,
|
||||
PathVariable.PathIsFile),
|
||||
PathVariable('IWYU', 'Path to include-what-you-use executable', None,
|
||||
PathVariable.PathIsFile)
|
||||
)
|
||||
|
||||
return vars
|
||||
@@ -235,6 +245,157 @@ def DisableQtModules(self, *modules):
|
||||
for module in modules:
|
||||
self['CPPPATH'].remove(os.path.join('$QTDIR', 'include', 'QT' + module))
|
||||
|
||||
def setup_IWYU(env):
|
||||
import SCons.Defaults
|
||||
import SCons.Builder
|
||||
original_shared = SCons.Defaults.SharedObjectEmitter
|
||||
original_static = SCons.Defaults.StaticObjectEmitter
|
||||
|
||||
def DoIWYU(env, source, target):
|
||||
for i in range(len(source)):
|
||||
s = source[i]
|
||||
dir, name = os.path.split(str(s)) # I'm sure theres a way of getting this from scons
|
||||
# Don't bother looking at moc files and 7zip source
|
||||
if not name.startswith('moc_') and \
|
||||
not dir.startswith(env['SEVENZIPPATH']):
|
||||
# Put the .iwyu in the same place as the .obj
|
||||
targ = os.path.splitext(str(target[i]))[0]
|
||||
env.Depends(env.IWYU(targ + '.iwyu', s), target[i])
|
||||
|
||||
def shared_emitter(target, source, env):
|
||||
DoIWYU(env, source, target)
|
||||
return original_shared(target, source, env)
|
||||
|
||||
def static_emitter(target, source, env):
|
||||
DoIWYU(env, source, target)
|
||||
return original_static(target, source, env)
|
||||
|
||||
SCons.Defaults.SharedObjectEmitter = shared_emitter
|
||||
SCons.Defaults.StaticObjectEmitter = static_emitter
|
||||
|
||||
def emitter(target, source, env):
|
||||
env.Depends(target, env['IWYU_MAPPING_FILE'])
|
||||
env.Depends(target, env['IWYU_MASSAGE'])
|
||||
return target, source
|
||||
|
||||
def _concat_list(prefixes, list, suffixes, env, f=lambda x: x, target=None, source=None):
|
||||
""" Creates a new list from 'list' by first interpolating each element
|
||||
in the list using the 'env' dictionary and then calling f on the
|
||||
list, and concatenate the 'prefix' and 'suffix' LISTS onto each element of the list.
|
||||
A trailing space on the last element of 'prefix' or leading space on the
|
||||
first element of 'suffix' will cause them to be put into separate list
|
||||
elements rather than being concatenated.
|
||||
"""
|
||||
|
||||
if not list:
|
||||
return list
|
||||
|
||||
l = f(SCons.PathList.PathList(list).subst_path(env, target, source))
|
||||
if l is not None:
|
||||
list = l
|
||||
|
||||
# This bit replaces current concat_ixes
|
||||
|
||||
result = []
|
||||
|
||||
def process_stringlist(s):
|
||||
return [ str(env.subst(p, SCons.Subst.SUBST_RAW))
|
||||
for p in Flatten([s]) if p != '' ]
|
||||
|
||||
# ensure that prefix and suffix are strings
|
||||
prefixes = process_stringlist(prefixes)
|
||||
prefix = ''
|
||||
if len(prefixes) != 0:
|
||||
if prefixes[-1][-1] != ' ':
|
||||
prefix = prefixes.pop()
|
||||
|
||||
suffixes = process_stringlist(suffixes)
|
||||
suffix = ''
|
||||
if len(suffixes) != 0:
|
||||
if suffixes[-1][0] != ' ':
|
||||
suffix = suffixes.pop(0)
|
||||
|
||||
for x in list:
|
||||
if isinstance(x, SCons.Node.FS.File):
|
||||
result.append(x)
|
||||
continue
|
||||
x = str(x)
|
||||
if x:
|
||||
result.append(prefixes)
|
||||
if prefix:
|
||||
if x[:len(prefix)] != prefix:
|
||||
x = prefix + x
|
||||
result.append(x)
|
||||
if suffix:
|
||||
if x[-len(suffix):] != suffix:
|
||||
result[-1] = result[-1] + suffix
|
||||
result.append(suffixes)
|
||||
return result
|
||||
|
||||
env['_concat_list'] = _concat_list
|
||||
# Note to self: command 2>&1 | other command appears to work as I would hope
|
||||
# except it eats errors
|
||||
iwyu = SCons.Builder.Builder(
|
||||
action=[
|
||||
'$IWYU_MASSAGE $TARGET $IWYU $IWYU_FLAGS $IWYU_MAPPINGS $IWYU_COMCOM $SOURCE'
|
||||
],
|
||||
emitter=emitter,
|
||||
suffix='.iwyu',
|
||||
src_suffix='.cpp')
|
||||
|
||||
env.Append(BUILDERS={'IWYU': iwyu})
|
||||
|
||||
# Sigh - IWYU is a right bum as it doesn't recognise /I so I have to
|
||||
# duplicate most of the usual stuff
|
||||
|
||||
env['IWYU_FLAGS'] = [
|
||||
# This might turn down the output a bit. I hope
|
||||
'-Xiwyu', '--transitive_includes_only',
|
||||
# Seem to be needed for a windows build
|
||||
'-D_MT', '-D_DLL', '-m32',
|
||||
# This is something to do with clang, windows and boost headers
|
||||
'-DBOOST_USE_WINDOWS_H',
|
||||
# There's a lot of this, disabled for now
|
||||
'-Wno-inconsistent-missing-override',
|
||||
# Mark boost and Qt headers as system headers to disable a lot of noise.
|
||||
# I'm sure there has to be a better way than saying 'prefix=Q'
|
||||
'--system-header-prefix=Q',
|
||||
'--system-header-prefix=boost/',
|
||||
# Should be able to get this info from our setup really
|
||||
'-fmsc-version=1800', '-D_MSC_VER=1800',
|
||||
# clang and qt don't agree about these because clang says its gcc 4.2
|
||||
# and QT doesn't realise it's clang
|
||||
'-DQ_COMPILER_INITIALIZER_LISTS',
|
||||
'-DQ_COMPILER_DECLTYPE',
|
||||
'-DQ_COMPILER_VARIADIC_TEMPLATES',
|
||||
]
|
||||
if env['CONFIG'] == 'debug':
|
||||
env['IWYU_FLAGS'] += [ '-D_DEBUG' ]
|
||||
|
||||
env['IWYU_DEFPREFIX'] = '-D'
|
||||
env['IWYU_DEFSUFFIX'] = ''
|
||||
env['IWYU_CPPDEFFLAGS'] = '${_defines(IWYU_DEFPREFIX, CPPDEFINES, IWYU_DEFSUFFIX, __env__)}'
|
||||
|
||||
env['IWYU_INCPREFIX'] = '-I'
|
||||
env['IWYU_INCSUFFIX'] = ''
|
||||
env['IWYU_CPPINCFLAGS'] = '$( ${_concat(IWYU_INCPREFIX, CPPPATH, IWYU_INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
|
||||
|
||||
env['IWYU_PCH_PREFIX'] = '-include' # Amazingly this works without a space
|
||||
env['IWYU_PCH_SUFFIX'] = ''
|
||||
env['IWYU_PCHFILES'] = '$( ${_concat(IWYU_PCH_PREFIX, PCHSTOP, IWYU_PCH_SUFFIX, __env__, target=TARGET, source=SOURCE)} $)'
|
||||
|
||||
env['IWYU_COMCOM'] = '$IWYU_CPPDEFFLAGS $IWYU_CPPINCFLAGS $IWYU_PCHFILES $CCPDBFLAGS'
|
||||
env['IWYU_MAPPING_PREFIX'] = ['-Xiwyu', '--mapping_file=']
|
||||
env['IWYU_MAPPING_SUFFIX'] = ''
|
||||
env['IWYU_MAPPINGS'] = '$( ${_concat_list(IWYU_MAPPING_PREFIX, IWYU_MAPPING_FILE, IWYU_MAPPING_SUFFIX, __env__, f=lambda l: [ str(x) for x in l], target=TARGET, source=SOURCE)} $)'
|
||||
|
||||
env['IWYU_MAPPING_FILE'] = [
|
||||
env.File('#/modorganizer/qt5_4.imp'),
|
||||
env.File('#/modorganizer/win.imp'),
|
||||
env.File('#/modorganizer/mappings.imp')
|
||||
]
|
||||
|
||||
env['IWYU_MASSAGE'] = env.File('#/modorganizer/massage_messages.py')
|
||||
|
||||
# Create base environment
|
||||
vars = setup_config_variables()
|
||||
@@ -270,16 +431,24 @@ msvs_version = int(env['MSVS_VERSION'].split('.')[0]) + 2000
|
||||
if msvs_version > 2010:
|
||||
msvs_version += 1
|
||||
|
||||
# Need more work on the qt version stuff
|
||||
#build-ModOrganizer-Desktop_Qt_5_4_1_MSVC2013_OpenGL_32bit-Debug
|
||||
build_dir = 'scons-ModOrganizer-QT_%s_for_MSVS%d_32bit-%s' % (
|
||||
#os.path.basename(env['QTDIR']).replace('.', '_'),
|
||||
'5_4_1_OpenGL',
|
||||
# Read the QT version info
|
||||
with open(os.path.join(env['QTDIR'], 'mkspecs', 'qconfig.pri')) as qtinfo:
|
||||
for line in qtinfo:
|
||||
info = re.split(r'\s*=\s*', line.rstrip())
|
||||
if info[0] == 'QT_VERSION':
|
||||
env[info[0]] = info[1]
|
||||
elif '_VERSION' in info[0]:
|
||||
env[info[0]] = int(info[1])
|
||||
|
||||
build_dir = 'scons-ModOrganizer-QT_%s_%sfor_MSVS%d_32bit-%s' % (
|
||||
env['QT_VERSION'].replace('.', '_'),
|
||||
'OpenGL_' if 'opengl' in env['QTDIR'] else '',
|
||||
msvs_version,
|
||||
config.title())
|
||||
|
||||
# Put the sconsign file somewhere sane
|
||||
env.SConsignFile(os.path.join(build_dir, '.sconsign.dblite'))
|
||||
env.CacheDir(os.path.join(build_dir, '.cache'))
|
||||
|
||||
#this doesn't seem to work
|
||||
#env.VariantDir('build/$CONFIG', 'source')
|
||||
@@ -351,6 +520,11 @@ else:
|
||||
env.AppendUnique(CPPFLAGS = [ '/O2', '/MD' ])
|
||||
env.AppendUnique(LINKFLAGS = [ '/OPT:REF', '/OPT:ICF' ])
|
||||
|
||||
# Set up include what you use. Add this as an extra compile step. Note it
|
||||
# doesn't currently generate an output file (use the output instead!).
|
||||
if 'IWYU' in env:
|
||||
setup_IWYU(env)
|
||||
|
||||
# /OPT:REF removes unreferenced code
|
||||
# for release, use /OPT:ICF (comdat folding: coalesce identical blocks of code)
|
||||
|
||||
@@ -365,9 +539,6 @@ qt_env = env.Clone()
|
||||
if qt_env['CONFIG'] != 'debug':
|
||||
qt_env.AppendUnique(CPPDEFINES = [ 'QT_NO_DEBUG' ])
|
||||
|
||||
# Better way of working this out
|
||||
qt_env['QT_MAJOR_VERSION'] = 5 #int(os.path.basename(env['QTDIR']).split('.')[0])
|
||||
|
||||
qt_env.Tool('qt%d' % qt_env['QT_MAJOR_VERSION'])
|
||||
|
||||
# FIXME See if I can work out how to get official scons qt to work. Appears
|
||||
@@ -452,6 +623,20 @@ if qt_env['QT_MAJOR_VERSION'] > 4:
|
||||
]
|
||||
|
||||
# Finally, set up rules to install the DLLs.
|
||||
# use windeployqt.exe to install all required libraries
|
||||
#SET(windeploy_parameters --no-translations --no-plugins --libdir dlls --release-with-debug-info --no-compiler-runtime)
|
||||
#INSTALL(
|
||||
# CODE
|
||||
# "EXECUTE_PROCESS(
|
||||
# COMMAND
|
||||
# ${qt5bin}/windeployqt.exe ModOrganizer.exe ${windeploy_parameters}
|
||||
# COMMAND
|
||||
# ${qt5bin}/windeployqt.exe uibase.dll ${windeploy_parameters}
|
||||
# WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin
|
||||
# )"
|
||||
#)
|
||||
# this should probably be a rule though it seems to produce an awful lot of
|
||||
# Stuff(TM). or a postaction
|
||||
|
||||
dll_path = os.path.join('$INSTALL_PATH', 'DLLs')
|
||||
|
||||
@@ -482,8 +667,10 @@ if 'WebKit' in libs_to_install and qt_env['QT_MAJOR_VERSION'] == 4:
|
||||
if qt_env['QT_MAJOR_VERSION'] > 4:
|
||||
# Guesswork a bit.
|
||||
dlls_to_install += [
|
||||
os.path.join(env['QTDIR'], 'bin', 'icu%s53.dll' % lib)
|
||||
for lib in ('dt','in', 'uc')
|
||||
os.path.join(env['QTDIR'],
|
||||
'bin',
|
||||
'icu%s%d%d.dll' % (lib, qt_env['QT_MAJOR_VERSION'], qt_env['QT_MINOR_VERSION'] - 1))
|
||||
for lib in ('dt','in', 'uc')
|
||||
]
|
||||
|
||||
platform_dlls = []
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
[
|
||||
|
||||
# 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"
|
||||
@@ -0,0 +1,157 @@
|
||||
from collections import defaultdict
|
||||
|
||||
import fileinput
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
"""
|
||||
|
||||
source/organizer/aboutdialog.h should add these lines:
|
||||
#include <QObject> // for Q_OBJECT, slots
|
||||
#include <QString> // for QString
|
||||
class QListWidgetItem;
|
||||
class QWidget;
|
||||
|
||||
source/organizer/aboutdialog.h should remove these lines:
|
||||
- #include <QListWidgetItem> // lines 25-25
|
||||
- #include <utility> // lines 28-28
|
||||
- #include <vector> // lines 27-27
|
||||
- class DownloadManager; // lines 47-47
|
||||
|
||||
The full include-list for source/organizer/aboutdialog.h:
|
||||
#include <QDialog> // for QDialog
|
||||
#include <QObject> // for Q_OBJECT, slots
|
||||
#include <QString> // for QString
|
||||
#include <map> // for map
|
||||
class QListWidgetItem;
|
||||
class QWidget;
|
||||
namespace Ui { class AboutDialog; } // lines 31-31
|
||||
---
|
||||
"""
|
||||
|
||||
removing = None
|
||||
includes = dict()
|
||||
|
||||
adding = None
|
||||
added = dict()
|
||||
lcadded = dict()
|
||||
|
||||
foundline = None
|
||||
|
||||
errors = False
|
||||
|
||||
messages = defaultdict(list)
|
||||
|
||||
def process_next_line(line, outfile):
|
||||
""" Read a line of output/error from include-what-you use
|
||||
Turn clang errors into a form QT creator recognises
|
||||
Raise warnings for unneeded includes
|
||||
"""
|
||||
global removing
|
||||
global includes
|
||||
global foundline
|
||||
global errors
|
||||
global added
|
||||
global adding
|
||||
line = line.rstrip()
|
||||
print >> outfile, line
|
||||
|
||||
if line.endswith(' should remove these lines:'):
|
||||
adding = None
|
||||
removing = (line.split(' '))[0]
|
||||
elif line.endswith(' should add these lines:'):
|
||||
removing = None
|
||||
adding = (line.split(' '))[0]
|
||||
elif line == '' or line.startswith(' the full include-list'):
|
||||
adding = None
|
||||
removing = None
|
||||
elif adding:
|
||||
m = re.match(r'.*class (.*);', line)
|
||||
if m:
|
||||
added[m.group(1)] = (adding, line)
|
||||
lcadded[m.group(1).lower() + '.h'] = m.group(1)
|
||||
else:
|
||||
added[line] = (adding, line)
|
||||
elif removing:
|
||||
# Really we should stash these so that if we get a 'class xxx' in
|
||||
# the add lines we can print it here. also we could do the case
|
||||
# fixing.
|
||||
m = re.match(r'- #include [<"](.*)[">] +// lines (.*)-', line)
|
||||
if m:
|
||||
foundline = m.group(2)
|
||||
# Note: In this project at least we have a naming convention of
|
||||
# lower case filename and upper case classname.
|
||||
clname = m.group(1)
|
||||
if clname not in added:
|
||||
if clname in lcadded:
|
||||
clname = lcadded[clname]
|
||||
if clname in added:
|
||||
messages[removing].append(
|
||||
'%s(%s) : warning I0004: Replace include of %s with '
|
||||
'forward reference %s' % (
|
||||
removing, m.group(2), m.group(1), added[clname][1]))
|
||||
del added[clname]
|
||||
else:
|
||||
messages[removing].append(
|
||||
'%s(%s) : warning I0001: Unnecessary include of %s' % (
|
||||
removing, m.group(2), m.group(1)))
|
||||
|
||||
else:
|
||||
m = re.match(r'- (.*) +// lines (.*)-', line)
|
||||
if m:
|
||||
messages[removing].append(
|
||||
'%s(%s) : warning I0002: Unnecessary forward ref of %s' % (
|
||||
removing, m.group(2), m.group(1)))
|
||||
else:
|
||||
print '********* I got confused **********'
|
||||
elif line.startswith('In file included from'):
|
||||
line = re.sub(r'^(In file included from)(.*):(\d+):',
|
||||
r' \2(\3) : \1 here',
|
||||
line)
|
||||
# Note; QT Creator seems to be unwilling to let you double click the
|
||||
# line to select the code in question if you get a string of these, not
|
||||
# sure why.
|
||||
elif ': note:' in line:
|
||||
line = ' ' + re.sub(r':(\d+):\d+: note:', r'(\1) : note:', line)
|
||||
else:
|
||||
# Replace clang :line:column: type: with ms (line) : type nnnn:
|
||||
line = re.sub(r':(\d+):\d+: ([^:]*):', r'(\1) : \2 I1234:', line)
|
||||
if ' : error I1234:' in line:
|
||||
errors = True
|
||||
|
||||
print line
|
||||
|
||||
outfile = open(sys.argv[1], 'w')
|
||||
process = subprocess.Popen(sys.argv[2:],
|
||||
stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
|
||||
while True:
|
||||
output = process.stdout.readline()
|
||||
if output == '' and process.poll() is not None:
|
||||
break
|
||||
if output:
|
||||
process_next_line(output, outfile)
|
||||
|
||||
# A note: We should probably do some work as we use the source code line for
|
||||
# messages in include files...
|
||||
|
||||
if foundline is None:
|
||||
foundline = '1'
|
||||
|
||||
for add in added:
|
||||
messages[added[add][0]].append(
|
||||
'%s(%s) : warning I0003: Need to include %s' % (
|
||||
added[add][0], foundline, added[add][1]))
|
||||
|
||||
for file in sorted(messages.keys(), reverse = True):
|
||||
for line in messages[file]:
|
||||
print line
|
||||
|
||||
rc = process.poll()
|
||||
# The return code you get appears to be more to do with the amount of output
|
||||
# generated than any real error, so instead we should error if any ': error:'
|
||||
# lines are detected
|
||||
|
||||
if errors:
|
||||
sys.exit(1)
|
||||
@@ -20,7 +20,7 @@ Here is a complete list:
|
||||
* https://github.com/TanninOne/modorganizer-lootcli
|
||||
* https://github.com/TanninOne/modorganizer-helper
|
||||
* https://github.com/TanninOne/modorganizer-tool_nmmimport
|
||||
* https://github.com/TanninOne/modorganizer-tool_pyniedit
|
||||
* https://github.com/TanninOne/modorganizer-tool_configurator
|
||||
* https://github.com/TanninOne/modorganizer-tool_inieditor
|
||||
* https://github.com/TanninOne/modorganizer-preview_base
|
||||
* https://github.com/TanninOne/modorganizer-diagnose_basic
|
||||
@@ -32,9 +32,11 @@ Here is a complete list:
|
||||
* https://github.com/TanninOne/modorganizer-game_skyrim
|
||||
* https://github.com/TanninOne/modorganizer-game_oblivion
|
||||
* https://github.com/TanninOne/modorganizer-game_fallout3
|
||||
* https://github.com/TanninOne/modorganizer-game_fallout4
|
||||
* https://github.com/TanninOne/modorganizer-game_falloutnv
|
||||
* https://github.com/TanninOne/modorganizer-game_gamebryo
|
||||
* https://github.com/TanninOne/modorganizer-game_features
|
||||
* https://github.com/TanninOne/modorganizer-check_fnis
|
||||
* https://github.com/TanninOne/modorganizer-plugin_python
|
||||
* https://github.com/TanninOne/modorganizer-bsa_extractor
|
||||
* https://github.com/TanninOne/usvfs
|
||||
|
||||
+33
-35
@@ -18,10 +18,6 @@ SET(organizer_SRCS
|
||||
settings.cpp
|
||||
selfupdater.cpp
|
||||
selectiondialog.cpp
|
||||
savegameinfowidgetgamebryo.cpp
|
||||
savegameinfowidget.cpp
|
||||
savegamegamebryo.cpp
|
||||
savegame.cpp
|
||||
queryoverwritedialog.cpp
|
||||
profilesdialog.cpp
|
||||
profile.cpp
|
||||
@@ -35,6 +31,11 @@ SET(organizer_SRCS
|
||||
modlist.cpp
|
||||
modinfodialog.cpp
|
||||
modinfo.cpp
|
||||
modinfobackup.cpp
|
||||
modinfoforeign.cpp
|
||||
modinfooverwrite.cpp
|
||||
modinforegular.cpp
|
||||
modinfowithconflictinfo.cpp
|
||||
messagedialog.cpp
|
||||
mainwindow.cpp
|
||||
main.cpp
|
||||
@@ -61,7 +62,6 @@ SET(organizer_SRCS
|
||||
moapplication.cpp
|
||||
profileinputdialog.cpp
|
||||
icondelegate.cpp
|
||||
gameinfoimpl.cpp
|
||||
csvbuilder.cpp
|
||||
savetextasdialog.cpp
|
||||
qtgroupingproxy.cpp
|
||||
@@ -76,26 +76,21 @@ SET(organizer_SRCS
|
||||
previewdialog.cpp
|
||||
aboutdialog.cpp
|
||||
json.cpp
|
||||
safewritefile.cpp
|
||||
modflagicondelegate.cpp
|
||||
genericicondelegate.cpp
|
||||
organizerproxy.cpp
|
||||
viewmarkingscrollbar.cpp
|
||||
plugincontainer.cpp
|
||||
organizercore.cpp
|
||||
instancemanager.cpp
|
||||
usvfsconnector.cpp
|
||||
eventfilter.cpp
|
||||
|
||||
shared/inject.cpp
|
||||
shared/windows_error.cpp
|
||||
shared/error_report.cpp
|
||||
shared/directoryentry.cpp
|
||||
shared/gameinfo.cpp
|
||||
shared/oblivioninfo.cpp
|
||||
shared/fallout3info.cpp
|
||||
shared/fallout4info.cpp
|
||||
shared/falloutnvinfo.cpp
|
||||
shared/util.cpp
|
||||
shared/skyriminfo.cpp
|
||||
shared/appconfig.cpp
|
||||
shared/leaktrace.cpp
|
||||
shared/stackdata.cpp
|
||||
@@ -110,10 +105,6 @@ SET(organizer_HDRS
|
||||
settings.h
|
||||
selfupdater.h
|
||||
selectiondialog.h
|
||||
savegameinfowidgetgamebryo.h
|
||||
savegameinfowidget.h
|
||||
savegamegamebyro.h
|
||||
savegame.h
|
||||
queryoverwritedialog.h
|
||||
profilesdialog.h
|
||||
profile.h
|
||||
@@ -127,6 +118,11 @@ SET(organizer_HDRS
|
||||
modlist.h
|
||||
modinfodialog.h
|
||||
modinfo.h
|
||||
modinfobackup.h
|
||||
modinfoforeign.h
|
||||
modinfooverwrite.h
|
||||
modinforegular.h
|
||||
modinfowithconflictinfo.h
|
||||
messagedialog.h
|
||||
mainwindow.h
|
||||
loghighlighter.h
|
||||
@@ -152,7 +148,6 @@ SET(organizer_HDRS
|
||||
moapplication.h
|
||||
profileinputdialog.h
|
||||
icondelegate.h
|
||||
gameinfoimpl.h
|
||||
csvbuilder.h
|
||||
savetextasdialog.h
|
||||
qtgroupingproxy.h
|
||||
@@ -167,7 +162,6 @@ SET(organizer_HDRS
|
||||
previewdialog.h
|
||||
aboutdialog.h
|
||||
json.h
|
||||
safewritefile.h
|
||||
modflagicondelegate.h
|
||||
genericicondelegate.h
|
||||
organizerproxy.h
|
||||
@@ -175,19 +169,15 @@ SET(organizer_HDRS
|
||||
plugincontainer.h
|
||||
organizercore.h
|
||||
iuserinterface.h
|
||||
instancemanager.h
|
||||
usvfsconnector.h
|
||||
eventfilter.h
|
||||
|
||||
shared/inject.h
|
||||
shared/windows_error.h
|
||||
shared/error_report.h
|
||||
shared/directoryentry.h
|
||||
shared/gameinfo.h
|
||||
shared/oblivioninfo.h
|
||||
shared/fallout3info.h
|
||||
shared/fallout4info.h
|
||||
shared/falloutnvinfo.h
|
||||
shared/util.h
|
||||
shared/skyriminfo.h
|
||||
shared/appconfig.h
|
||||
shared/appconfig.inc
|
||||
shared/leaktrace.h
|
||||
@@ -200,7 +190,6 @@ SET(organizer_UIS
|
||||
simpleinstalldialog.ui
|
||||
settingsdialog.ui
|
||||
selectiondialog.ui
|
||||
savegameinfowidget.ui
|
||||
queryoverwritedialog.ui
|
||||
profilesdialog.ui
|
||||
overwriteinfodialog.ui
|
||||
@@ -258,7 +247,7 @@ INCLUDE_DIRECTORIES(${Qt5Declarative_INCLUDES})
|
||||
ADD_DEFINITIONS(-DQT_MESSAGELOGCONTEXT)
|
||||
|
||||
# Boost
|
||||
SET(Boost_USE_STATIC_LIBS ON)
|
||||
SET(Boost_USE_STATIC_LIBS OFF)
|
||||
SET(Boost_USE_MULTITHREADED ON)
|
||||
SET(Boost_USE_STATIC_RUNTIME OFF)
|
||||
FIND_PACKAGE(Boost REQUIRED)
|
||||
@@ -279,21 +268,28 @@ SET(project_path "${default_project_path}" CACHE PATH "path to the other mo proj
|
||||
SET(lib_path "${project_path}/../../install/libs")
|
||||
|
||||
|
||||
MESSAGE(STATUS ${lib_path})
|
||||
MESSAGE(STATUS ${project_path})
|
||||
|
||||
INCLUDE_DIRECTORIES(${project_path}/uibase/src
|
||||
${project_path}/bsatk/src
|
||||
${project_path}/esptk/src
|
||||
${project_path}/archive/src
|
||||
${project_path}/../usvfs/usvfs
|
||||
${project_path}/game_features/src)
|
||||
${project_path}/game_gamebryo/src
|
||||
${project_path}/game_features/src
|
||||
${project_path}/githubpp/src)
|
||||
|
||||
|
||||
INCLUDE_DIRECTORIES(shared ${ZLIB_INCLUDE_DIRS})
|
||||
LINK_DIRECTORIES(${lib_path}
|
||||
${project_path}/../zlib/lib)
|
||||
|
||||
ADD_DEFINITIONS(-D_UNICODE -DUNICODE -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS)
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND git log -1 --format=%h
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_COMMIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
ADD_DEFINITIONS(-D_UNICODE -DUNICODE -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -DGITID="${GIT_COMMIT_HASH}")
|
||||
|
||||
IF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||
SET(usvfs_name usvfs_x64)
|
||||
@@ -306,13 +302,15 @@ TARGET_LINK_LIBRARIES(ModOrganizer
|
||||
Qt5::Widgets Qt5::WinExtras Qt5::WebKitWidgets
|
||||
${Boost_LIBRARIES}
|
||||
zlibstatic
|
||||
uibase esptk bsatk
|
||||
uibase esptk bsatk githubpp
|
||||
${usvfs_name}
|
||||
Dbghelp advapi32 Version Shlwapi)
|
||||
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS /GL)
|
||||
IF (NOT "${OPTIMIZE_COMPILE_FLAGS}" STREQUAL "")
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS_RELWITHDEBINFO
|
||||
${OPTIMIZE_COMPILE_FLAGS})
|
||||
ENDIF()
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES LINK_FLAGS_RELWITHDEBINFO
|
||||
"/LTCG /INCREMENTAL:NO /LARGEADDRESSAWARE /OPT:REF /OPT:ICF")
|
||||
"/LARGEADDRESSAWARE ${OPTIMIZE_LINK_FLAGS}")
|
||||
|
||||
|
||||
QT5_USE_MODULES(ModOrganizer Widgets Declarative Network WebKitWidgets)
|
||||
|
||||
+14
-4
@@ -67,7 +67,6 @@ env.Uic(env.Glob('*.ui'))
|
||||
|
||||
env.RequireLibraries('uibase', 'shared', 'bsatk', 'esptk')
|
||||
|
||||
|
||||
env.AppendUnique(LIBS = [
|
||||
'shell32',
|
||||
'user32',
|
||||
@@ -96,6 +95,12 @@ env['CPPPATH'] += [
|
||||
'${BOOSTPATH}',
|
||||
]
|
||||
|
||||
#########################FUDGE###############################
|
||||
env['CPPPATH'] += [
|
||||
'../plugins/gameGamebryo',
|
||||
]
|
||||
#############################################################
|
||||
|
||||
env.AppendUnique(CPPDEFINES = [
|
||||
'_UNICODE',
|
||||
'_CRT_SECURE_NO_WARNINGS',
|
||||
@@ -105,7 +110,11 @@ env.AppendUnique(CPPDEFINES = [
|
||||
'QT_MESSAGELOGCONTEXT'
|
||||
])
|
||||
|
||||
env.AppendUnique(CPPFLAGS = [ '-wd4100', '-wd4127', '-wd4512', '-wd4189' ])
|
||||
# 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',
|
||||
@@ -114,8 +123,9 @@ env.AppendUnique(LINKFLAGS = [
|
||||
|
||||
# modeltest is optional and it doesn't compile anyway...
|
||||
cpp_files = [
|
||||
x for x in Glob('*.cpp')
|
||||
if x.name != 'modeltest.cpp' and x.name != 'aboutdialog.cpp'
|
||||
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()
|
||||
|
||||
+12
-1
@@ -22,6 +22,14 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "ui_aboutdialog.h"
|
||||
#include <utility.h>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QLabel>
|
||||
#include <QListWidget>
|
||||
#include <QListWidgetItem>
|
||||
#include <QTextBrowser>
|
||||
#include <QVariant>
|
||||
#include <Qt>
|
||||
|
||||
|
||||
AboutDialog::AboutDialog(const QString &version, QWidget *parent)
|
||||
: QDialog(parent)
|
||||
@@ -46,10 +54,13 @@ AboutDialog::AboutDialog(const QString &version, QWidget *parent)
|
||||
addLicense("RRZE Icon Set", LICENSE_CCBY3);
|
||||
addLicense("Icons by Lorc, Delapouite and sbed available on http://game-icons.net", LICENSE_CCBY3);
|
||||
addLicense("Castle Core", LICENSE_APACHE2);
|
||||
addLicense("LOOT", LICENSE_GPL3);
|
||||
|
||||
ui->nameLabel->setText(QString("<span style=\"font-size:12pt; font-weight:600;\">%1 %2</span>").arg(ui->nameLabel->text()).arg(version));
|
||||
#ifdef HGID
|
||||
#if defined(HGID)
|
||||
ui->revisionLabel->setText(ui->revisionLabel->text() + " " + HGID);
|
||||
#elif defined(GITID)
|
||||
ui->revisionLabel->setText(ui->revisionLabel->text() + " " + GITID);
|
||||
#else
|
||||
ui->revisionLabel->setText(ui->revisionLabel->text() + " unknown");
|
||||
#endif
|
||||
|
||||
+4
-3
@@ -22,10 +22,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define ABOUTDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QListWidgetItem>
|
||||
class QListWidgetItem;
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
|
||||
namespace Ui {
|
||||
class AboutDialog;
|
||||
|
||||
+46
-4
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>508</width>
|
||||
<height>335</height>
|
||||
<width>746</width>
|
||||
<height>369</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -18,13 +18,50 @@
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="iconLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>250</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>250</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="resources.qrc">:/MO/gui/mo_icon.ico</pixmap>
|
||||
<pixmap resource="resources.qrc">:/MO/gui/splash</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -83,7 +120,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string notr="true">Copyright 2011-2015 Sebastian Herbord</string>
|
||||
<string notr="true">Copyright 2011-2016 Sebastian Herbord</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -265,6 +302,11 @@
|
||||
<string notr="true">thosrtanner</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>ogrotten</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -21,9 +21,14 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "ui_activatemodsdialog.h"
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QHeaderView>
|
||||
#include <QLabel>
|
||||
#include <QString>
|
||||
#include <QTableWidget>
|
||||
|
||||
ActivateModsDialog::ActivateModsDialog(const std::map<QString, std::vector<QString> > &missingPlugins, QWidget *parent)
|
||||
#include <QtGlobal>
|
||||
|
||||
ActivateModsDialog::ActivateModsDialog(SaveGameInfo::MissingAssets const &missingAssets, QWidget *parent)
|
||||
: TutorableDialog("ActivateMods", parent), ui(new Ui::ActivateModsDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
@@ -40,18 +45,17 @@ ActivateModsDialog::ActivateModsDialog(const std::map<QString, std::vector<QStri
|
||||
|
||||
int row = 0;
|
||||
|
||||
modsTable->setRowCount(missingPlugins.size());
|
||||
modsTable->setRowCount(missingAssets.size());
|
||||
|
||||
for (std::map<QString, std::vector<QString> >::const_iterator espIter = missingPlugins.begin();
|
||||
espIter != missingPlugins.end(); ++espIter, ++row) {
|
||||
modsTable->setCellWidget(row, 0, new QLabel(espIter->first));
|
||||
if (espIter->second.size() == 0) {
|
||||
for (SaveGameInfo::MissingAssets::const_iterator espIter = missingAssets.begin();
|
||||
espIter != missingAssets.end(); ++espIter, ++row) {
|
||||
modsTable->setCellWidget(row, 0, new QLabel(espIter.key()));
|
||||
if (espIter->size() == 0) {
|
||||
modsTable->setCellWidget(row, 1, new QLabel(tr("not found")));
|
||||
} else {
|
||||
QComboBox* combo = new QComboBox();
|
||||
for (std::vector<QString>::const_iterator modIter = espIter->second.begin();
|
||||
modIter != espIter->second.end(); ++modIter) {
|
||||
combo->addItem(*modIter);
|
||||
for (QString const &mod : espIter.value()) {
|
||||
combo->addItem(mod);
|
||||
}
|
||||
modsTable->setCellWidget(row, 1, combo);
|
||||
}
|
||||
|
||||
@@ -20,8 +20,14 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#ifndef ACTIVATEMODSDIALOG_H
|
||||
#define ACTIVATEMODSDIALOG_H
|
||||
|
||||
#include "savegameinfo.h"
|
||||
#include "tutorabledialog.h"
|
||||
#include <map>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class QString;
|
||||
class QWidget;
|
||||
|
||||
#include <set>
|
||||
|
||||
namespace Ui {
|
||||
@@ -42,7 +48,7 @@ public:
|
||||
* @param missingPlugins a map containing missing plugins that need to be activated
|
||||
* @param parent ... Defaults to 0.
|
||||
**/
|
||||
explicit ActivateModsDialog(const std::map<QString, std::vector<QString> > &missingPlugins, QWidget *parent = 0);
|
||||
explicit ActivateModsDialog(SaveGameInfo::MissingAssets const &missingAssets, QWidget *parent = 0);
|
||||
~ActivateModsDialog();
|
||||
|
||||
/**
|
||||
|
||||
+1
-3
@@ -21,8 +21,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <QRegExp>
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
#include <boost/assign.hpp>
|
||||
|
||||
|
||||
namespace BBCode {
|
||||
@@ -80,7 +78,7 @@ public:
|
||||
if (tagName == "color") {
|
||||
QString color = tagIter->second.first.cap(1);
|
||||
QString content = tagIter->second.first.cap(2);
|
||||
if (color.at(0) == "#") {
|
||||
if (color.at(0) == '#') {
|
||||
return temp.replace(tagIter->second.first, QString("<font style=\"color: %1;\">%2</font>").arg(color, content));
|
||||
} else {
|
||||
auto colIter = m_ColorMap.find(color.toLower());
|
||||
|
||||
@@ -18,18 +18,16 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "browserdialog.h"
|
||||
|
||||
#include "ui_browserdialog.h"
|
||||
#include "browserview.h"
|
||||
|
||||
#include "messagedialog.h"
|
||||
#include "report.h"
|
||||
#include "persistentcookiejar.h"
|
||||
|
||||
#include "json.h"
|
||||
|
||||
#include <utility.h>
|
||||
#include <gameinfo.h>
|
||||
#include "settings.h"
|
||||
|
||||
#include <QNetworkCookieJar>
|
||||
#include <QNetworkCookie>
|
||||
#include <QMenu>
|
||||
|
||||
+3
-1
@@ -21,9 +21,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define NEXUSVIEW_H
|
||||
|
||||
|
||||
class QEvent;
|
||||
class QUrl;
|
||||
class QWidget;
|
||||
#include <QWebView>
|
||||
#include <QWebPage>
|
||||
#include <QTabWidget>
|
||||
|
||||
/**
|
||||
* @brief web view used to display a nexus page
|
||||
|
||||
+6
-4
@@ -18,9 +18,10 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "categories.h"
|
||||
|
||||
#include <utility.h>
|
||||
#include <report.h>
|
||||
#include <gameinfo.h>
|
||||
|
||||
#include <QObject>
|
||||
#include <QFile>
|
||||
#include <QDir>
|
||||
@@ -29,7 +30,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
using namespace MOBase;
|
||||
using namespace MOShared;
|
||||
|
||||
|
||||
CategoryFactory* CategoryFactory::s_Instance = nullptr;
|
||||
@@ -188,7 +188,7 @@ int CategoryFactory::addCategory(const QString &name, const std::vector<int> &ne
|
||||
|
||||
void CategoryFactory::addCategory(int id, const QString &name, const std::vector<int> &nexusIDs, int parentID)
|
||||
{
|
||||
int index = m_Categories.size();
|
||||
int index = static_cast<int>(m_Categories.size());
|
||||
m_Categories.push_back(Category(index, id, name, nexusIDs, parentID));
|
||||
for (int nexusID : nexusIDs) {
|
||||
m_NexusMap[nexusID] = index;
|
||||
@@ -317,9 +317,11 @@ int CategoryFactory::getCategoryIndex(int ID) const
|
||||
|
||||
int CategoryFactory::getCategoryID(const QString &name) const
|
||||
{
|
||||
auto iter = std::find_if(m_Categories.begin(), m_Categories.end(), [name] (const Category &cat) -> bool {
|
||||
auto iter = std::find_if(m_Categories.begin(), m_Categories.end(),
|
||||
[name] (const Category &cat) -> bool {
|
||||
return cat.m_Name == name;
|
||||
});
|
||||
|
||||
if (iter != m_Categories.end()) {
|
||||
return iter->m_ID;
|
||||
} else {
|
||||
|
||||
@@ -18,10 +18,13 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "directoryrefresher.h"
|
||||
|
||||
#include "iplugingame.h"
|
||||
#include "utility.h"
|
||||
#include "report.h"
|
||||
#include "modinfo.h"
|
||||
#include <gameinfo.h>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QDir>
|
||||
#include <QString>
|
||||
|
||||
@@ -141,7 +144,9 @@ void DirectoryRefresher::refresh()
|
||||
|
||||
m_DirectoryStructure = new DirectoryEntry(L"data", nullptr, 0);
|
||||
|
||||
std::wstring dataDirectory = GameInfo::instance().getGameDirectory() + L"\\data";
|
||||
IPluginGame *game = qApp->property("managed_game").value<IPluginGame*>();
|
||||
|
||||
std::wstring dataDirectory = QDir::toNativeSeparators(game->dataDirectory().absolutePath()).toStdWString();
|
||||
m_DirectoryStructure->addFromOrigin(L"data", dataDirectory, 0);
|
||||
|
||||
// TODO what was the point of having the priority in this tuple? the list is already sorted by priority
|
||||
@@ -154,7 +159,7 @@ void DirectoryRefresher::refresh()
|
||||
} catch (const std::exception &e) {
|
||||
emit error(tr("failed to read mod (%1): %2").arg(iter->modName, e.what()));
|
||||
}
|
||||
emit progress((i * 100) / m_Mods.size() + 1);
|
||||
emit progress((i * 100) / static_cast<int>(m_Mods.size()) + 1);
|
||||
}
|
||||
|
||||
emit progress(100);
|
||||
|
||||
+52
-43
@@ -18,18 +18,19 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "downloadmanager.h"
|
||||
|
||||
#include "nxmurl.h"
|
||||
#include "nexusinterface.h"
|
||||
#include "nxmaccessmanager.h"
|
||||
#include <gameinfo.h>
|
||||
#include "iplugingame.h"
|
||||
#include <nxmurl.h>
|
||||
#include <taskprogressmanager.h>
|
||||
#include "utility.h"
|
||||
#include "json.h"
|
||||
#include "selectiondialog.h"
|
||||
#include "bbcode.h"
|
||||
#include <utility.h>
|
||||
#include <report.h>
|
||||
|
||||
#include <QTimer>
|
||||
#include <QFileInfo>
|
||||
#include <QRegExp>
|
||||
@@ -37,6 +38,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include <QInputDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QCoreApplication>
|
||||
#include <QTextDocument>
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <regex>
|
||||
|
||||
@@ -85,7 +88,8 @@ DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createFromMeta(con
|
||||
QString fileName = QFileInfo(filePath).fileName();
|
||||
|
||||
if (fileName.endsWith(UNFINISHED)) {
|
||||
info->m_FileName = fileName.mid(0, fileName.length() - strlen(UNFINISHED));
|
||||
info->m_FileName = fileName.mid(
|
||||
0, fileName.length() - static_cast<int>(strlen(UNFINISHED)));
|
||||
info->m_State = STATE_PAUSED;
|
||||
} else {
|
||||
info->m_FileName = fileName;
|
||||
@@ -447,7 +451,7 @@ void DownloadManager::addNXMDownload(const QString &url)
|
||||
{
|
||||
NXMUrl nxmInfo(url);
|
||||
|
||||
QString managedGame = ToQString(MOShared::GameInfo::instance().getGameShortName());
|
||||
QString managedGame = m_ManagedGame->gameShortName();
|
||||
qDebug("add nxm download: %s", qPrintable(url));
|
||||
if (nxmInfo.game().compare(managedGame, Qt::CaseInsensitive) != 0) {
|
||||
qDebug("download requested for wrong game (game: %s, url: %s)", qPrintable(managedGame), qPrintable(nxmInfo.game()));
|
||||
@@ -468,7 +472,7 @@ void DownloadManager::addNXMDownload(const QString &url)
|
||||
void DownloadManager::removeFile(int index, bool deleteFile)
|
||||
{
|
||||
if (index >= m_ActiveDownloads.size()) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("remove: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
DownloadInfo *download = m_ActiveDownloads.at(index);
|
||||
@@ -535,7 +539,7 @@ void DownloadManager::refreshAlphabeticalTranslation()
|
||||
void DownloadManager::restoreDownload(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("restore: invalid download index: %1").arg(index));
|
||||
}
|
||||
|
||||
DownloadInfo *download = m_ActiveDownloads.at(index);
|
||||
@@ -568,7 +572,7 @@ void DownloadManager::removeDownload(int index, bool deleteFile)
|
||||
}
|
||||
} else {
|
||||
if (index >= m_ActiveDownloads.size()) {
|
||||
reportError(tr("invalid index %1").arg(index));
|
||||
reportError(tr("remove: invalid download index %1").arg(index));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -586,7 +590,7 @@ void DownloadManager::removeDownload(int index, bool deleteFile)
|
||||
void DownloadManager::cancelDownload(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
reportError(tr("invalid index %1").arg(index));
|
||||
reportError(tr("cancel: invalid download index %1").arg(index));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -599,7 +603,7 @@ void DownloadManager::cancelDownload(int index)
|
||||
void DownloadManager::pauseDownload(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
reportError(tr("invalid index %1").arg(index));
|
||||
reportError(tr("pause: invalid download index %1").arg(index));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -619,7 +623,7 @@ void DownloadManager::pauseDownload(int index)
|
||||
void DownloadManager::resumeDownload(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
reportError(tr("invalid index %1").arg(index));
|
||||
reportError(tr("resume: invalid download index %1").arg(index));
|
||||
return;
|
||||
}
|
||||
DownloadInfo *info = m_ActiveDownloads[index];
|
||||
@@ -630,7 +634,7 @@ void DownloadManager::resumeDownload(int index)
|
||||
void DownloadManager::resumeDownloadInt(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
reportError(tr("invalid index %1").arg(index));
|
||||
reportError(tr("resume (int): invalid download index %1").arg(index));
|
||||
return;
|
||||
}
|
||||
DownloadInfo *info = m_ActiveDownloads[index];
|
||||
@@ -670,7 +674,7 @@ DownloadManager::DownloadInfo *DownloadManager::downloadInfoByID(unsigned int id
|
||||
void DownloadManager::queryInfo(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
reportError(tr("invalid index %1").arg(index));
|
||||
reportError(tr("query: invalid download index %1").arg(index));
|
||||
return;
|
||||
}
|
||||
DownloadInfo *info = m_ActiveDownloads[index];
|
||||
@@ -690,19 +694,14 @@ void DownloadManager::queryInfo(int index)
|
||||
QString ignore;
|
||||
NexusInterface::interpretNexusFileName(fileName, ignore, info->m_FileInfo->modID, true);
|
||||
if (info->m_FileInfo->modID < 0) {
|
||||
QString modIDString;
|
||||
while (modIDString.isEmpty()) {
|
||||
modIDString = QInputDialog::getText(nullptr, tr("Please enter the nexus mod id"), tr("Mod ID:"), QLineEdit::Normal,
|
||||
QString(), nullptr, 0, Qt::ImhFormattedNumbersOnly);
|
||||
if (modIDString.isNull()) {
|
||||
// canceled
|
||||
return;
|
||||
} else if (modIDString.contains(QRegExp("[^0-9]"))) {
|
||||
qDebug("illegal character in mod-id");
|
||||
modIDString.clear();
|
||||
}
|
||||
}
|
||||
info->m_FileInfo->modID = modIDString.toInt(nullptr, 10);
|
||||
bool ok = false;
|
||||
int modId = QInputDialog::getInt(
|
||||
nullptr, tr("Please enter the nexus mod id"), tr("Mod ID:"), 1, 1,
|
||||
std::numeric_limits<int>::max(), 1, &ok);
|
||||
// careful now: while the dialog was displayed, events were processed.
|
||||
// the download list might have changed and our info-ptr invalidated.
|
||||
m_ActiveDownloads[index]->m_FileInfo->modID = modId;
|
||||
return;
|
||||
}
|
||||
}
|
||||
info->m_ReQueried = true;
|
||||
@@ -723,7 +722,7 @@ int DownloadManager::numPendingDownloads() const
|
||||
std::pair<int, int> DownloadManager::getPendingDownload(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_PendingDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("get pending: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_PendingDownloads.at(index);
|
||||
@@ -732,7 +731,7 @@ std::pair<int, int> DownloadManager::getPendingDownload(int index)
|
||||
QString DownloadManager::getFilePath(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("get path: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_OutputDirectory + "/" + m_ActiveDownloads.at(index)->m_FileName;
|
||||
@@ -753,7 +752,7 @@ QString DownloadManager::getFileTypeString(int fileType)
|
||||
QString DownloadManager::getDisplayName(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("display name: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
DownloadInfo *info = m_ActiveDownloads.at(index);
|
||||
@@ -770,7 +769,7 @@ QString DownloadManager::getDisplayName(int index) const
|
||||
QString DownloadManager::getFileName(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("file name: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_ActiveDownloads.at(index)->m_FileName;
|
||||
@@ -779,7 +778,7 @@ QString DownloadManager::getFileName(int index) const
|
||||
QDateTime DownloadManager::getFileTime(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("file time: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
DownloadInfo *info = m_ActiveDownloads.at(index);
|
||||
@@ -793,7 +792,7 @@ QDateTime DownloadManager::getFileTime(int index) const
|
||||
qint64 DownloadManager::getFileSize(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("file size: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_ActiveDownloads.at(index)->m_TotalSize;
|
||||
@@ -803,7 +802,7 @@ qint64 DownloadManager::getFileSize(int index) const
|
||||
int DownloadManager::getProgress(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("progress: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_ActiveDownloads.at(index)->m_Progress;
|
||||
@@ -813,7 +812,7 @@ int DownloadManager::getProgress(int index) const
|
||||
DownloadManager::DownloadState DownloadManager::getState(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("state: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_ActiveDownloads.at(index)->m_State;
|
||||
@@ -823,7 +822,7 @@ DownloadManager::DownloadState DownloadManager::getState(int index) const
|
||||
bool DownloadManager::isInfoIncomplete(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("infocomplete: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
DownloadInfo *info = m_ActiveDownloads.at(index);
|
||||
@@ -838,7 +837,7 @@ bool DownloadManager::isInfoIncomplete(int index) const
|
||||
int DownloadManager::getModID(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("mod id: invalid download index %1").arg(index));
|
||||
}
|
||||
return m_ActiveDownloads.at(index)->m_FileInfo->modID;
|
||||
}
|
||||
@@ -846,7 +845,7 @@ int DownloadManager::getModID(int index) const
|
||||
bool DownloadManager::isHidden(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("ishidden: invalid download index %1").arg(index));
|
||||
}
|
||||
return m_ActiveDownloads.at(index)->m_Hidden;
|
||||
}
|
||||
@@ -855,7 +854,7 @@ bool DownloadManager::isHidden(int index) const
|
||||
const ModRepositoryFileInfo *DownloadManager::getFileInfo(int index) const
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("file info: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_ActiveDownloads.at(index)->m_FileInfo;
|
||||
@@ -865,7 +864,7 @@ const ModRepositoryFileInfo *DownloadManager::getFileInfo(int index) const
|
||||
void DownloadManager::markInstalled(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("mark installed: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
DownloadInfo *info = m_ActiveDownloads.at(index);
|
||||
@@ -880,7 +879,7 @@ void DownloadManager::markInstalled(int index)
|
||||
void DownloadManager::markUninstalled(int index)
|
||||
{
|
||||
if ((index < 0) || (index >= m_ActiveDownloads.size())) {
|
||||
throw MyException(tr("invalid index"));
|
||||
throw MyException(tr("mark uninstalled: invalid download index %1").arg(index));
|
||||
}
|
||||
|
||||
DownloadInfo *info = m_ActiveDownloads.at(index);
|
||||
@@ -909,10 +908,10 @@ QString DownloadManager::getDownloadFileName(const QString &baseName) const
|
||||
QString DownloadManager::getFileNameFromNetworkReply(QNetworkReply *reply)
|
||||
{
|
||||
if (reply->hasRawHeader("Content-Disposition")) {
|
||||
std::tr1::regex exp("filename=\"(.*)\"");
|
||||
std::regex exp("filename=\"(.*)\"");
|
||||
|
||||
std::tr1::cmatch result;
|
||||
if (std::tr1::regex_search(reply->rawHeader("Content-Disposition").constData(), result, exp)) {
|
||||
std::cmatch result;
|
||||
if (std::regex_search(reply->rawHeader("Content-Disposition").constData(), result, exp)) {
|
||||
return QString::fromUtf8(result.str(1).c_str());
|
||||
}
|
||||
}
|
||||
@@ -1128,6 +1127,12 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD
|
||||
if (!info->m_FileInfo->version.isValid()) {
|
||||
info->m_FileInfo->version = info->m_FileInfo->newestVersion;
|
||||
}
|
||||
//Nexus has HTMLd these so unhtml them if necessary
|
||||
QTextDocument doc;
|
||||
doc.setHtml(info->m_FileInfo->modName);
|
||||
info->m_FileInfo->modName = doc.toPlainText();
|
||||
doc.setHtml(info->m_FileInfo->name);
|
||||
info->m_FileInfo->name = doc.toPlainText();
|
||||
info->m_FileInfo->fileCategory = convertFileCategory(fileInfo["category_id"].toInt());
|
||||
info->m_FileInfo->fileTime = matchDate(fileInfo["date"].toString());
|
||||
info->m_FileInfo->fileID = fileInfo["id"].toInt();
|
||||
@@ -1238,7 +1243,7 @@ int DownloadManager::startDownloadURLs(const QStringList &urls)
|
||||
int DownloadManager::startDownloadNexusFile(int modID, int fileID)
|
||||
{
|
||||
int newID = m_ActiveDownloads.size();
|
||||
addNXMDownload(QString("nxm://%1/mods/%2/files/%3").arg(ToQString(MOShared::GameInfo::instance().getGameName())).arg(modID).arg(fileID));
|
||||
addNXMDownload(QString("nxm://%1/mods/%2/files/%3").arg(m_ManagedGame->gameShortName()).arg(modID).arg(fileID));
|
||||
return newID;
|
||||
}
|
||||
|
||||
@@ -1461,3 +1466,7 @@ void DownloadManager::directoryChanged(const QString&)
|
||||
refreshList();
|
||||
}
|
||||
|
||||
void DownloadManager::managedGameChanged(MOBase::IPluginGame const *managedGame)
|
||||
{
|
||||
m_ManagedGame = managedGame;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include <QFileSystemWatcher>
|
||||
#include <QSettings>
|
||||
|
||||
namespace MOBase { class IPluginGame; }
|
||||
|
||||
class NexusInterface;
|
||||
|
||||
@@ -328,7 +329,9 @@ public:
|
||||
|
||||
|
||||
virtual int startDownloadURLs(const QStringList &urls);
|
||||
|
||||
virtual int startDownloadNexusFile(int modID, int fileID);
|
||||
|
||||
virtual QString downloadPath(int id);
|
||||
|
||||
/**
|
||||
@@ -414,6 +417,8 @@ public slots:
|
||||
|
||||
void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString);
|
||||
|
||||
void managedGameChanged(MOBase::IPluginGame const *gamePlugin);
|
||||
|
||||
private slots:
|
||||
|
||||
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
|
||||
@@ -501,6 +506,7 @@ private:
|
||||
|
||||
QRegExp m_DateExpression;
|
||||
|
||||
MOBase::IPluginGame const *m_ManagedGame;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user