├── .clang-format
├── .editorconfig
├── .git-blame-ignore-revs
├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── dev-ticket.md
│ ├── feature_request.md
│ ├── game-support-request.md
│ └── issue-report.md
└── workflows
│ ├── build.yml
│ └── linting.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .tx
└── config
├── CMakeLists.txt
├── CMakePresets.json
├── LICENSE
├── dump_running_process.bat
├── massage_messages.py
├── modorganizer.natvis
├── readme.md
├── src
├── CMakeLists.txt
├── aboutdialog.cpp
├── aboutdialog.h
├── aboutdialog.ui
├── activatemodsdialog.cpp
├── activatemodsdialog.h
├── activatemodsdialog.ui
├── apiuseraccount.cpp
├── apiuseraccount.h
├── app_icon.rc
├── archivefiletree.cpp
├── archivefiletree.h
├── bbcode.cpp
├── bbcode.h
├── browserdialog.cpp
├── browserdialog.h
├── browserdialog.ui
├── browserview.cpp
├── browserview.h
├── categories.cpp
├── categories.h
├── categoriesdialog.cpp
├── categoriesdialog.h
├── categoriesdialog.ui
├── categoriestable.cpp
├── categoriestable.h
├── categoryimportdialog.cpp
├── categoryimportdialog.h
├── categoryimportdialog.ui
├── colortable.cpp
├── colortable.h
├── commandline.cpp
├── commandline.h
├── copyeventfilter.cpp
├── copyeventfilter.h
├── createinstancedialog.cpp
├── createinstancedialog.h
├── createinstancedialog.ui
├── createinstancedialogpages.cpp
├── createinstancedialogpages.h
├── credentialsdialog.cpp
├── credentialsdialog.h
├── credentialsdialog.ui
├── csvbuilder.cpp
├── csvbuilder.h
├── datatab.cpp
├── datatab.h
├── directoryrefresher.cpp
├── directoryrefresher.h
├── disableproxyplugindialog.cpp
├── disableproxyplugindialog.h
├── disableproxyplugindialog.ui
├── dlls.manifest.debug.qt6
├── dlls.manifest.qt6
├── downloadlist.cpp
├── downloadlist.h
├── downloadlistview.cpp
├── downloadlistview.h
├── downloadmanager.cpp
├── downloadmanager.h
├── downloadmanagerproxy.cpp
├── downloadmanagerproxy.h
├── downloadstab.cpp
├── downloadstab.h
├── editexecutablesdialog.cpp
├── editexecutablesdialog.h
├── editexecutablesdialog.ui
├── env.cpp
├── env.h
├── envdump.h
├── envfs.cpp
├── envfs.h
├── envmetrics.cpp
├── envmetrics.h
├── envmodule.cpp
├── envmodule.h
├── envsecurity.cpp
├── envsecurity.h
├── envshell.cpp
├── envshell.h
├── envshortcut.cpp
├── envshortcut.h
├── envwindows.cpp
├── envwindows.h
├── executableslist.cpp
├── executableslist.h
├── filedialogmemory.cpp
├── filedialogmemory.h
├── filerenamer.cpp
├── filerenamer.h
├── filetree.cpp
├── filetree.h
├── filetreeitem.cpp
├── filetreeitem.h
├── filetreemodel.cpp
├── filetreemodel.h
├── filterlist.cpp
├── filterlist.h
├── forcedloaddialog.cpp
├── forcedloaddialog.h
├── forcedloaddialog.ui
├── forcedloaddialogwidget.cpp
├── forcedloaddialogwidget.h
├── forcedloaddialogwidget.ui
├── game_features.cpp
├── game_features.h
├── gamefeaturesproxy.cpp
├── gamefeaturesproxy.h
├── genericicondelegate.cpp
├── genericicondelegate.h
├── github.cpp
├── github.h
├── glob_matching.h
├── icondelegate.cpp
├── icondelegate.h
├── iconfetcher.cpp
├── iconfetcher.h
├── installationmanager.cpp
├── installationmanager.h
├── instancemanager.cpp
├── instancemanager.h
├── instancemanagerdialog.cpp
├── instancemanagerdialog.h
├── instancemanagerdialog.ui
├── iuserinterface.h
├── json.h
├── lcdnumber.cpp
├── lcdnumber.h
├── listdialog.cpp
├── listdialog.h
├── listdialog.ui
├── loghighlighter.cpp
├── loghighlighter.h
├── loglist.cpp
├── loglist.h
├── loot.cpp
├── loot.h
├── lootdialog.cpp
├── lootdialog.h
├── lootdialog.ui
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
├── messagedialog.cpp
├── messagedialog.h
├── messagedialog.ui
├── mo_icon.ico
├── moapplication.cpp
├── moapplication.h
├── modconflicticondelegate.cpp
├── modconflicticondelegate.h
├── modcontenticondelegate.cpp
├── modcontenticondelegate.h
├── modelutils.cpp
├── modelutils.h
├── modflagicondelegate.cpp
├── modflagicondelegate.h
├── modidlineedit.cpp
├── modidlineedit.h
├── modinfo.cpp
├── modinfo.h
├── modinfobackup.cpp
├── modinfobackup.h
├── modinfodialog.cpp
├── modinfodialog.h
├── modinfodialog.ui
├── modinfodialogcategories.cpp
├── modinfodialogcategories.h
├── modinfodialogconflicts.cpp
├── modinfodialogconflicts.h
├── modinfodialogconflictsmodels.cpp
├── modinfodialogconflictsmodels.h
├── modinfodialogesps.cpp
├── modinfodialogesps.h
├── modinfodialogfiletree.cpp
├── modinfodialogfiletree.h
├── modinfodialogfwd.h
├── modinfodialogimages.cpp
├── modinfodialogimages.h
├── modinfodialognexus.cpp
├── modinfodialognexus.h
├── modinfodialogtab.cpp
├── modinfodialogtab.h
├── modinfodialogtextfiles.cpp
├── modinfodialogtextfiles.h
├── modinfoforeign.cpp
├── modinfoforeign.h
├── modinfooverwrite.cpp
├── modinfooverwrite.h
├── modinforegular.cpp
├── modinforegular.h
├── modinfoseparator.cpp
├── modinfoseparator.h
├── modinfowithconflictinfo.cpp
├── modinfowithconflictinfo.h
├── modlist.cpp
├── modlist.h
├── modlistbypriorityproxy.cpp
├── modlistbypriorityproxy.h
├── modlistcontextmenu.cpp
├── modlistcontextmenu.h
├── modlistdropinfo.cpp
├── modlistdropinfo.h
├── modlistproxy.cpp
├── modlistproxy.h
├── modlistsortproxy.cpp
├── modlistsortproxy.h
├── modlistversiondelegate.cpp
├── modlistversiondelegate.h
├── modlistview.cpp
├── modlistview.h
├── modlistviewactions.cpp
├── modlistviewactions.h
├── moshortcut.cpp
├── moshortcut.h
├── motddialog.cpp
├── motddialog.h
├── motddialog.ui
├── multiprocess.cpp
├── multiprocess.h
├── nexusinterface.cpp
├── nexusinterface.h
├── nexusmanualkey.ui
├── noeditdelegate.cpp
├── noeditdelegate.h
├── nxmaccessmanager.cpp
├── nxmaccessmanager.h
├── organizer_en.ts
├── organizercore.cpp
├── organizercore.h
├── organizerproxy.cpp
├── organizerproxy.h
├── overwriteinfodialog.cpp
├── overwriteinfodialog.h
├── overwriteinfodialog.ui
├── pch.cpp
├── pch.h
├── persistentcookiejar.cpp
├── persistentcookiejar.h
├── plugincontainer.cpp
├── plugincontainer.h
├── pluginlist.cpp
├── pluginlist.h
├── pluginlistcontextmenu.cpp
├── pluginlistcontextmenu.h
├── pluginlistproxy.cpp
├── pluginlistproxy.h
├── pluginlistsortproxy.cpp
├── pluginlistsortproxy.h
├── pluginlistview.cpp
├── pluginlistview.h
├── previewdialog.cpp
├── previewdialog.h
├── previewdialog.ui
├── previewgenerator.cpp
├── previewgenerator.h
├── problemsdialog.cpp
├── problemsdialog.h
├── problemsdialog.ui
├── processrunner.cpp
├── processrunner.h
├── profile.cpp
├── profile.h
├── profileinputdialog.cpp
├── profileinputdialog.h
├── profileinputdialog.ui
├── profilesdialog.cpp
├── profilesdialog.h
├── profilesdialog.ui
├── proxyutils.h
├── qdirfiletree.cpp
├── qdirfiletree.h
├── qt.conf
├── qtgroupingproxy.cpp
├── qtgroupingproxy.h
├── queryoverwritedialog.cpp
├── queryoverwritedialog.h
├── queryoverwritedialog.ui
├── resources.qrc
├── resources
│ ├── accessories-text-editor.png
│ ├── application-x-executable.png
│ ├── applications-accessories.png
│ ├── archive-conflict-loser.png
│ ├── archive-conflict-mixed.png
│ ├── archive-conflict-neutral.png
│ ├── archive-conflict-winner.png
│ ├── arrange-boxes.png
│ ├── badge_1.png
│ ├── badge_2.png
│ ├── badge_3.png
│ ├── badge_4.png
│ ├── badge_5.png
│ ├── badge_6.png
│ ├── badge_7.png
│ ├── badge_8.png
│ ├── badge_9.png
│ ├── badge_more.png
│ ├── branch-closed.png
│ ├── branch-open.png
│ ├── check.png
│ ├── combobox-down.png
│ ├── conflict-hidden.png
│ ├── conflict-mixed-blue.png
│ ├── conflict-mixed.png
│ ├── conflict-overwrite-blue.png
│ ├── conflict-overwrite.png
│ ├── conflict-overwritten-blue.png
│ ├── conflict-overwritten.png
│ ├── conflict-redundant.png
│ ├── contact-new.png
│ ├── contents
│ │ ├── breastplate.png
│ │ ├── checkbox-tree.png
│ │ ├── config.png
│ │ ├── conversation.png
│ │ ├── double-quaver.png
│ │ ├── empty-chessboard.png
│ │ ├── f4-nuclear.png
│ │ ├── facegen.png
│ │ ├── feather-and-scroll.png
│ │ ├── hand-of-god.png
│ │ ├── jigsaw-piece.png
│ │ ├── locked-chest.png
│ │ ├── lyre.png
│ │ ├── media.png
│ │ ├── mesh-box.png
│ │ ├── tinker.png
│ │ ├── usable.png
│ │ └── xedit.png
│ ├── dialog-information.png
│ ├── dialog-warning.png
│ ├── dialog-warning_16.png
│ ├── dialog-warning_16.png (warning_16)
│ ├── document-properties.png
│ ├── document-save.png
│ ├── document-save_32.png
│ ├── dynamic-blue-right.png
│ ├── edit-clear.png
│ ├── edit-find-replace.png
│ ├── edit-undo.png
│ ├── emblem-favorite - 64.png
│ ├── emblem-favorite.png
│ ├── emblem-important.png
│ ├── emblem-readonly.png
│ ├── emblem-redundant.png
│ ├── emblem-unreadable.png
│ ├── error.png
│ ├── function.png
│ ├── game-warning-16.png
│ ├── game-warning.png
│ ├── go-down.png
│ ├── go-jump.png
│ ├── go-next_16.png
│ ├── go-previous_16.png
│ ├── go-up.png
│ ├── help-browser.png
│ ├── help-browser_32.png
│ ├── icon-favorite.png
│ ├── icons8-checked-checkbox.png
│ ├── icons8-indeterminate-checkbox.png
│ ├── icons8-unchecked-checkbox.png
│ ├── internet-web-browser.png
│ ├── list-add.png
│ ├── list-remove.png
│ ├── log-debug.png
│ ├── mail-attachment.png
│ ├── markdown.html
│ ├── media-playback-start.png
│ ├── mo_icon.png
│ ├── multiply-red.png
│ ├── open-Folder-Icon.png
│ ├── package.png
│ ├── plugins.png
│ ├── preferences-system.png
│ ├── process-stop.png
│ ├── red-archive-conflict-loser.png
│ ├── save.svg
│ ├── show.png
│ ├── software-update-available.png
│ ├── start-here.png
│ ├── status_active.png
│ ├── status_awaiting.png
│ ├── status_inactive.png
│ ├── switch-instance-icon.png
│ ├── symbol-backup.png
│ ├── system-installer.png
│ ├── system-search.png
│ ├── system-software-update.png
│ ├── tracked.png
│ ├── view-refresh.png
│ ├── view-refresh_16.png
│ ├── word-wrap.svg
│ └── x-office-calendar.png
├── sanitychecks.cpp
├── sanitychecks.h
├── savestab.cpp
├── savestab.h
├── savetextasdialog.cpp
├── savetextasdialog.h
├── savetextasdialog.ui
├── selectiondialog.cpp
├── selectiondialog.h
├── selectiondialog.ui
├── selfupdater.cpp
├── selfupdater.h
├── serverinfo.cpp
├── serverinfo.h
├── settings.cpp
├── settings.h
├── settingsdialog.cpp
├── settingsdialog.h
├── settingsdialog.ui
├── settingsdialogdiagnostics.cpp
├── settingsdialogdiagnostics.h
├── settingsdialoggeneral.cpp
├── settingsdialoggeneral.h
├── settingsdialogmodlist.cpp
├── settingsdialogmodlist.h
├── settingsdialognexus.cpp
├── settingsdialognexus.h
├── settingsdialogpaths.cpp
├── settingsdialogpaths.h
├── settingsdialogplugins.cpp
├── settingsdialogplugins.h
├── settingsdialogtheme.cpp
├── settingsdialogtheme.h
├── settingsdialogworkarounds.cpp
├── settingsdialogworkarounds.h
├── settingsutilities.cpp
├── settingsutilities.h
├── shared
│ ├── appconfig.cpp
│ ├── appconfig.h
│ ├── appconfig.inc
│ ├── directoryentry.cpp
│ ├── directoryentry.h
│ ├── fileentry.cpp
│ ├── fileentry.h
│ ├── fileregister.cpp
│ ├── fileregister.h
│ ├── fileregisterfwd.h
│ ├── filesorigin.cpp
│ ├── filesorigin.h
│ ├── originconnection.cpp
│ ├── originconnection.h
│ ├── util.cpp
│ ├── util.h
│ ├── windows_error.cpp
│ └── windows_error.h
├── spawn.cpp
├── spawn.h
├── splash.png
├── statusbar.cpp
├── statusbar.h
├── stylesheet_resource.qrc
├── stylesheets
│ ├── Night Eyes.qss
│ ├── Parchment v1.1 by Bob.qss
│ ├── Parchment
│ │ ├── checkbox-alt-checked.png
│ │ ├── checkbox-alt-unchecked-hover.png
│ │ ├── checkbox-alt-unchecked.png
│ │ ├── checkbox-checked-disabled.png
│ │ ├── checkbox-checked-hover.png
│ │ ├── checkbox-checked.png
│ │ ├── checkbox-disabled.png
│ │ ├── checkbox-hover.png
│ │ └── checkbox.png
│ ├── dark.qss
│ ├── dracula.qss
│ ├── skyrim.qss
│ ├── skyrim
│ │ ├── arrow-down.png
│ │ ├── arrow-left.png
│ │ ├── arrow-right.png
│ │ ├── arrow-up.png
│ │ ├── border-image.png
│ │ ├── border-image1.png
│ │ ├── border-image2.png
│ │ ├── branch-opened.png
│ │ ├── button-big-border.png
│ │ ├── button-border.png
│ │ ├── button-checked-border.png
│ │ ├── checkbox-alt-checked.png
│ │ ├── checkbox-alt-unchecked-hover.png
│ │ ├── checkbox-alt-unchecked.png
│ │ ├── checkbox-checked-disabled.png
│ │ ├── checkbox-checked-hover.png
│ │ ├── checkbox-checked.png
│ │ ├── checkbox-disabled.png
│ │ ├── checkbox-hover.png
│ │ ├── checkbox.png
│ │ ├── context-menu-separator.png
│ │ ├── progress-bar-border.png
│ │ ├── progress-bar-chunk.png
│ │ ├── radio-checked.png
│ │ ├── radio-hover.png
│ │ ├── radio.png
│ │ ├── scrollbar-down.png
│ │ ├── scrollbar-horizontal.png
│ │ ├── scrollbar-left.png
│ │ ├── scrollbar-right.png
│ │ ├── scrollbar-up.png
│ │ ├── scrollbar-vertical.png
│ │ ├── separator.png
│ │ ├── slider-border.png
│ │ └── slider-handle.png
│ ├── vs15 Dark-Green.qss
│ ├── vs15 Dark-Orange.qss
│ ├── vs15 Dark-Pink.qss
│ ├── vs15 Dark-Purple.qss
│ ├── vs15 Dark-Red.qss
│ ├── vs15 Dark-Yellow.qss
│ ├── vs15 Dark.qss
│ └── vs15
│ │ ├── branch-closed.png
│ │ ├── branch-open.png
│ │ ├── checkbox-check-disabled.png
│ │ ├── checkbox-check.png
│ │ ├── combobox-down.png
│ │ ├── scrollbar-down-disabled.png
│ │ ├── scrollbar-down-hover.png
│ │ ├── scrollbar-down.png
│ │ ├── scrollbar-left-disabled.png
│ │ ├── scrollbar-left-hover.png
│ │ ├── scrollbar-left.png
│ │ ├── scrollbar-right-disabled.png
│ │ ├── scrollbar-right-hover.png
│ │ ├── scrollbar-right.png
│ │ ├── scrollbar-up-disabled.png
│ │ ├── scrollbar-up-hover.png
│ │ ├── scrollbar-up.png
│ │ ├── sort-asc.png
│ │ ├── sort-desc.png
│ │ ├── spinner-down.png
│ │ ├── spinner-up.png
│ │ ├── sub-menu-arrow-hover.png
│ │ └── sub-menu-arrow.png
├── syncoverwritedialog.cpp
├── syncoverwritedialog.h
├── syncoverwritedialog.ui
├── texteditor.cpp
├── texteditor.h
├── thread_utils.h
├── transfersavesdialog.cpp
├── transfersavesdialog.h
├── transfersavesdialog.ui
├── tutorials
│ ├── Highlight.qml
│ ├── Tooltip.qml
│ ├── TooltipArea.qml
│ ├── TutorialCanceller.qml
│ ├── TutorialDescription.qml
│ ├── TutorialOverlay.qml
│ ├── tutorial_basics.js
│ ├── tutorial_conflictresolution_main.js
│ ├── tutorial_conflictresolution_modinfo.js
│ ├── tutorial_firststeps.js
│ ├── tutorial_firststeps_browser.js
│ ├── tutorial_firststeps_main.js
│ ├── tutorial_firststeps_modinfo.js
│ ├── tutorial_firststeps_settings.js
│ ├── tutorial_primer_main.js
│ ├── tutorial_window_installer.js
│ ├── tutorials.js
│ ├── tutorials_installdialog.qml
│ ├── tutorials_mainwindow.qml
│ ├── tutorials_modinfodialog.qml
│ ├── tutorials_nexusdialog.qml
│ └── tutorials_settingsdialog.qml
├── uilocker.cpp
├── uilocker.h
├── updatedialog.cpp
├── updatedialog.h
├── updatedialog.ui
├── usvfsconnector.cpp
├── usvfsconnector.h
├── validationprogressdialog.ui
├── version.rc
├── viewmarkingscrollbar.cpp
├── viewmarkingscrollbar.h
├── virtualfiletree.cpp
└── virtualfiletree.h
├── vcpkg-configuration.json
└── vcpkg.json
/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | # We'll use defaults from the LLVM style, but with 4 columns indentation.
3 | BasedOnStyle: LLVM
4 | IndentWidth: 2
5 | ---
6 | Language: Cpp
7 | DeriveLineEnding: false
8 | UseCRLF: true
9 | DerivePointerAlignment: false
10 | PointerAlignment: Left
11 | AlignConsecutiveAssignments: true
12 | AllowShortFunctionsOnASingleLine: Inline
13 | AllowShortIfStatementsOnASingleLine: Never
14 | AllowShortLambdasOnASingleLine: Empty
15 | AlwaysBreakTemplateDeclarations: Yes
16 | AccessModifierOffset: -2
17 | AlignTrailingComments: true
18 | SpacesBeforeTrailingComments: 2
19 | NamespaceIndentation: Inner
20 | MaxEmptyLinesToKeep: 1
21 | BreakBeforeBraces: Custom
22 | BraceWrapping:
23 | AfterCaseLabel: false
24 | AfterClass: true
25 | AfterControlStatement: false
26 | AfterEnum: true
27 | AfterFunction: true
28 | AfterNamespace: true
29 | AfterStruct: true
30 | AfterUnion: true
31 | AfterExternBlock: true
32 | BeforeCatch: false
33 | BeforeElse: false
34 | BeforeLambdaBody: false
35 | BeforeWhile: false
36 | IndentBraces: false
37 | SplitEmptyFunction: false
38 | SplitEmptyRecord: false
39 | SplitEmptyNamespace: true
40 | ColumnLimit: 88
41 | ForEachMacros: ['Q_FOREACH', 'foreach']
42 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*.cpp]
4 | indent_style = space
5 | indent_size = 2
6 | insert_final_newline = true
7 |
8 | [*.h]
9 | indent_style = space
10 | indent_size = 2
11 | insert_final_newline = true
12 |
13 | [*.ui]
14 | indent_style = space
15 | indent_size = 2
16 | insert_final_newline = true
17 |
--------------------------------------------------------------------------------
/.git-blame-ignore-revs:
--------------------------------------------------------------------------------
1 | d13f6bb870cdda71257f665367be8ef9fca86255
2 | 86bb01ba9eac879d3685c439ac9da0028bc4bc80
3 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Set the default behavior, in case people don't have core.autocrlf set.
2 | * text=auto
3 |
4 | # Explicitly declare text files you want to always be normalized and converted
5 | # to native line endings on checkout.
6 | *.cpp text eol=crlf
7 | *.h text eol=crlf
8 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/dev-ticket.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Dev Ticket
3 | about: Reserved for development tasks and management.
4 | title: ''
5 | labels: Dev Ticket
6 | assignees: ''
7 |
8 | ---
9 |
10 | Task:
11 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: Feature Request
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/game-support-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Game support Request
3 | about: Request support for a new game
4 | title: Add support for game [GAME NAME]
5 | labels: 'Feature Request, additional games support, area: mo2 game plugins'
6 | assignees: ''
7 |
8 | ---
9 |
10 | **This template is useful to add basic support using https://github.com/ModOrganizer2/modorganizer-basic_games.**
11 |
12 | **If you are vaguely familiar with programming you can try following the instructions on that link to get something working yourself. If you have trouble with that please fill in this template.**
13 |
14 | **Please provide the following information for the game (remove the optional lines you do not use):**
15 |
16 | - **Name:** Name of the game
17 | - **Short name:** Name of the game in Nexus URL (e.g. skyrimse for Skyrim SE).
18 | - **Nexus ID [optional]:** ID of the game on Nexus (you can usually find this in Nexus URL).
19 | - **Executable:** Name of the main executable for the game (relative to the game folder).
20 | - **Launcher [optional]:** Name of the game launcher (relative to the game folder).
21 | - **Data path:** Path to the data folder of the game (relative to the game folder). Please note that the Virtual Files System often does not work for top level dlls or exe files.
22 | - **Documents path:** Path to folder containing INI files, etc., for the game (usually under "My Games", or the game folder itself).
23 | - **Saves directory [optional]:** Path to the folder containing save games (this default to the path above).
24 | - **Save extension [optional]:** Extension of the saves
25 | - **Steam ID [optional]:** ID of the game on Steam (if the game is on Steam).
26 |
27 | **Provide additional details regarding the game that could be required for the plugin.**
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/issue-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Issue Report
3 | about: Create an issue report.
4 | title: ''
5 | labels: issue report
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## The problem:
11 | Briefly describe the issue you are experiencing. Tell us what you were trying to do and what happened instead. Remember, this is _not_ a place to ask questions. For that, go to our [Discord server](https://discord.gg/ewUVAqyrQX).
12 |
13 |
14 | ## To Reproduce:
15 | Steps to reproduce the behavior:
16 |
17 | 1. Go to '...'
18 | 2. Click on '....'
19 |
20 | ## Environment:
21 |
22 | * Mod Organizer Version that exhibits the issue:
23 | * Last Mod Organizer Version that did not exhibit the issue (if applicable):
24 | * Desktop OS/version used to run Mod Organizer:
25 |
26 | ## Details:
27 | If necessary, describe the problem you have been experiencing with more details and pictures.
28 |
29 |
30 | ## Link to Mod Organizer logs:
31 | Right click on the log window at the bottom of MO2, set log level to debug, restart Mo2 and reproduce the problem.
32 | To access the log files you can press the Open folder icon over the modlist and select "Open MO2 Logs folder".
33 |
34 | ### USVFS:
35 | Create a [GIST](https://gist.github.com) which is a paste of your latest USVFS log, and link them here.
36 | Do _NOT_ paste your full USVFS logs here, as it will make this issue very long and hard to read!
37 | If you are reporting a bug, _always_ include the USVFS logs!
38 |
39 | ### MO Interface:
40 | Create a [GIST](https://gist.github.com) which is a paste of your mo_interface logs, and link them here.
41 | Do _NOT_ paste your full mo_interface logs here, as it will make this issue very long and hard to read!
42 | If you are reporting a bug, _always_ include the mo_interface logs!
43 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build ModOrganizer 2
2 |
3 | on:
4 | push:
5 | branches: [master]
6 | pull_request:
7 | types: [opened, synchronize, reopened]
8 |
9 | env:
10 | VCPKG_BINARY_SOURCES: clear;x-azblob,${{ vars.AZ_BLOB_VCPKG_URL }},${{ secrets.AZ_BLOB_SAS }},readwrite
11 |
12 | jobs:
13 | build:
14 | runs-on: windows-2022
15 | steps:
16 | - name: Build ModOrganizer
17 | id: build-modorganizer
18 | uses: ModOrganizer2/build-with-mob-action@master
19 | with:
20 | qt-modules: qtpositioning qtwebchannel qtwebengine qtwebsockets
21 | mo2-dependencies: usvfs uibase bsatk esptk archive lootcli
22 |
23 | - name: Install ModOrganizer
24 | shell: pwsh
25 | run: |
26 | cmake --install vsbuild --config RelWithDebInfo
27 | working-directory: ./build/${{ github.event.repository.name }}
28 |
29 | - name: Package ModOrganizer
30 | uses: actions/upload-artifact@master
31 | with:
32 | name: modorganizer
33 | path: ./install/bin
34 |
--------------------------------------------------------------------------------
/.github/workflows/linting.yml:
--------------------------------------------------------------------------------
1 | name: Lint ModOrganizer 2
2 |
3 | on:
4 | push:
5 | pull_request:
6 | types: [opened, synchronize, reopened]
7 |
8 | jobs:
9 | lint:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v3
13 | - name: Check format
14 | uses: ModOrganizer2/check-formatting-action@master
15 | with:
16 | check-path: "."
17 | exclude-regex: "third-party"
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.user
2 | Thumbs.db
3 | src/moc_*.cpp
4 | src/ui_*.h
5 | src/*.qrc.depends
6 | src/Modorganizer.*
7 | src/*.bak
8 | CMakeLists.txt.user
9 | edit
10 | /CMakeFiles
11 | .idea
12 | /msbuild.log
13 | /*std*.log
14 | /*build
15 |
16 | /src/version.aps
17 |
--------------------------------------------------------------------------------
/.pre-commit-config.yaml:
--------------------------------------------------------------------------------
1 | repos:
2 | - repo: https://github.com/pre-commit/pre-commit-hooks
3 | rev: v5.0.0
4 | hooks:
5 | - id: trailing-whitespace
6 | - id: end-of-file-fixer
7 | - id: check-merge-conflict
8 | - id: check-case-conflict
9 | - repo: https://github.com/pre-commit/mirrors-clang-format
10 | rev: v19.1.5
11 | hooks:
12 | - id: clang-format
13 | 'types_or': [c++, c]
14 |
15 | ci:
16 | autofix_commit_msg: "[pre-commit.ci] Auto fixes from pre-commit.com hooks."
17 | autofix_prs: true
18 | autoupdate_commit_msg: "[pre-commit.ci] Pre-commit autoupdate."
19 | autoupdate_schedule: quarterly
20 | submodules: false
21 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.16)
2 |
3 | # TODO: clean include directives
4 | set(MO2_CMAKE_DEPRECATED_UIBASE_INCLUDE ON)
5 |
6 | project(organizer)
7 |
8 | # if MO2_INSTALL_IS_BIN is set, this means that we should install directly into the
9 | # installation prefix, without the bin/ subfolder, typically for a standalone build
10 | # to update an existing install
11 | if (MO2_INSTALL_IS_BIN)
12 | set(_bin ".")
13 | else()
14 | set(_bin bin)
15 | endif()
16 |
17 | add_subdirectory(src)
18 |
19 | set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT organizer)
20 |
21 | install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dump_running_process.bat DESTINATION ${_bin})
22 |
--------------------------------------------------------------------------------
/CMakePresets.json:
--------------------------------------------------------------------------------
1 | {
2 | "configurePresets": [
3 | {
4 | "errors": {
5 | "deprecated": true
6 | },
7 | "hidden": true,
8 | "name": "cmake-dev",
9 | "warnings": {
10 | "deprecated": true,
11 | "dev": true
12 | }
13 | },
14 | {
15 | "cacheVariables": {
16 | "VCPKG_MANIFEST_NO_DEFAULT_FEATURES": {
17 | "type": "BOOL",
18 | "value": "ON"
19 | }
20 | },
21 | "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
22 | "hidden": true,
23 | "name": "vcpkg"
24 | },
25 | {
26 | "binaryDir": "${sourceDir}/vsbuild",
27 | "architecture": {
28 | "strategy": "set",
29 | "value": "x64"
30 | },
31 | "cacheVariables": {
32 | "CMAKE_CXX_FLAGS": "/EHsc /MP /W4",
33 | "VCPKG_TARGET_TRIPLET": {
34 | "type": "STRING",
35 | "value": "x64-windows-static-md"
36 | }
37 | },
38 | "generator": "Visual Studio 17 2022",
39 | "inherits": ["cmake-dev", "vcpkg"],
40 | "name": "vs2022-windows",
41 | "toolset": "v143"
42 | },
43 | {
44 | "cacheVariables": {
45 | "VCPKG_MANIFEST_FEATURES": {
46 | "type": "STRING",
47 | "value": "standalone"
48 | },
49 | "MO2_INSTALL_IS_BIN": {
50 | "type": "BOOL",
51 | "value": "ON"
52 | }
53 | },
54 | "inherits": "vs2022-windows",
55 | "name": "vs2022-windows-standalone"
56 | }
57 | ],
58 | "buildPresets": [
59 | {
60 | "name": "vs2022-windows",
61 | "resolvePackageReferences": "on",
62 | "configurePreset": "vs2022-windows"
63 | },
64 | {
65 | "name": "vs2022-windows-standalone",
66 | "resolvePackageReferences": "on",
67 | "configurePreset": "vs2022-windows-standalone"
68 | }
69 | ],
70 | "version": 4
71 | }
72 |
--------------------------------------------------------------------------------
/dump_running_process.bat:
--------------------------------------------------------------------------------
1 | pushd "%~dp0"
2 | start ModOrganizer.exe crashdump
3 |
--------------------------------------------------------------------------------
/src/app_icon.rc:
--------------------------------------------------------------------------------
1 | IDI_ICON1 ICON DISCARDABLE "mo_icon.ico"
2 |
--------------------------------------------------------------------------------
/src/bbcode.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (C) 2012 Sebastian Herbord. All rights reserved.
3 |
4 | This file is part of Mod Organizer.
5 |
6 | Mod Organizer is free software: you can redistribute it and/or modify
7 | it under the terms of the GNU General Public License as published by
8 | the Free Software Foundation, either version 3 of the License, or
9 | (at your option) any later version.
10 |
11 | Mod Organizer is distributed in the hope that it will be useful,
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | GNU General Public License for more details.
15 |
16 | You should have received a copy of the GNU General Public License
17 | along with Mod Organizer. If not, see .
18 | */
19 |
20 | #ifndef BBCODE_H
21 | #define BBCODE_H
22 |
23 | #include
24 |
25 | namespace BBCode
26 | {
27 |
28 | /**
29 | * @brief convert a string with BB Code-Tags to HTML
30 | * @param input the input string with BB tags
31 | * @param replaceOccured if not nullptr, this parameter will be set to true if any bb
32 | *tags were replaced
33 | * @return the same string in html representation
34 | **/
35 | QString convertToHTML(const QString& input);
36 |
37 | } // namespace BBCode
38 |
39 | #endif // BBCODE_H
40 |
--------------------------------------------------------------------------------
/src/categoriestable.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (C) 2012 Sebastian Herbord. All rights reserved.
3 |
4 | This file is part of Mod Organizer.
5 |
6 | Mod Organizer is free software: you can redistribute it and/or modify
7 | it under the terms of the GNU General Public License as published by
8 | the Free Software Foundation, either version 3 of the License, or
9 | (at your option) any later version.
10 |
11 | Mod Organizer is distributed in the hope that it will be useful,
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | GNU General Public License for more details.
15 |
16 | You should have received a copy of the GNU General Public License
17 | along with Mod Organizer. If not, see .
18 | */
19 |
20 | #ifndef CATEGORIESTABLE_H
21 | #define CATEGORIESTABLE_H
22 |
23 | #include
24 | #include
25 |
26 | class CategoriesTable : public QTableWidget
27 | {
28 | Q_OBJECT
29 | public:
30 | CategoriesTable(QWidget* parent = 0);
31 |
32 | protected:
33 | virtual bool dropMimeData(int row, int column, const QMimeData* data,
34 | Qt::DropAction action);
35 | };
36 |
37 | #endif // CATEGORIESTABLE_H
38 |
--------------------------------------------------------------------------------
/src/categoryimportdialog.h:
--------------------------------------------------------------------------------
1 | #ifndef CATEGORYIMPORTDIALOG_H
2 | #define CATEGORYIMPORTDIALOG_H
3 |
4 | #include
5 |
6 | namespace Ui
7 | {
8 | class CategoryImportDialog;
9 | }
10 |
11 | /**
12 | * @brief Dialog that allows users to configure mod categories
13 | **/
14 | class CategoryImportDialog : public QDialog
15 | {
16 | Q_OBJECT
17 |
18 | public:
19 | enum ImportStrategy
20 | {
21 | None,
22 | Overwrite,
23 | Merge
24 | };
25 |
26 | public:
27 | explicit CategoryImportDialog(QWidget* parent = 0);
28 | ~CategoryImportDialog();
29 |
30 | ImportStrategy strategy();
31 | bool assign();
32 | bool remap();
33 |
34 | public slots:
35 | void accepted();
36 | void rejected();
37 | void on_strategyClicked(QAbstractButton* button);
38 | void on_assignOptionClicked(bool clicked);
39 |
40 | private:
41 | Ui::CategoryImportDialog* ui;
42 | };
43 |
44 | #endif // CATEGORYIMPORTDIALOG_H
45 |
--------------------------------------------------------------------------------
/src/colortable.h:
--------------------------------------------------------------------------------
1 | #ifndef COLORTABLE_H
2 | #define COLORTABLE_H
3 |
4 | #include
5 |
6 | class Settings;
7 |
8 | // a QTableWidget to view and modify color settings
9 | //
10 | class ColorTable : public QTableWidget
11 | {
12 | public:
13 | ColorTable(QWidget* parent = nullptr);
14 |
15 | // adds colors to the table from the settings
16 | //
17 | void load(Settings& s);
18 |
19 | // resets the colors to their default values; commitColors() must be called
20 | // to save them
21 | //
22 | void resetColors();
23 |
24 | // commits any changes
25 | //
26 | void commitColors();
27 |
28 | private:
29 | Settings* m_settings;
30 |
31 | void addColor(const QString& text, const QColor& defaultColor,
32 | std::function get, std::function commit);
33 |
34 | void onColorActivated();
35 | };
36 |
37 | #endif // COLORTABLE_H
38 |
--------------------------------------------------------------------------------
/src/copyeventfilter.cpp:
--------------------------------------------------------------------------------
1 | #include "copyeventfilter.h"
2 |
3 | #include
4 | #include
5 | #include
6 |
7 | CopyEventFilter::CopyEventFilter(QAbstractItemView* view, int column, int role)
8 | : CopyEventFilter(view, [=](auto& index) {
9 | return index.sibling(index.row(), column).data(role).toString();
10 | })
11 | {}
12 |
13 | CopyEventFilter::CopyEventFilter(QAbstractItemView* view,
14 | std::function format)
15 | : QObject(view), m_view(view), m_format(format)
16 | {}
17 |
18 | void CopyEventFilter::copySelection() const
19 | {
20 | if (!m_view->selectionModel()->hasSelection()) {
21 | return;
22 | }
23 |
24 | // sort to reflect the visual order
25 | QModelIndexList selectedRows = m_view->selectionModel()->selectedRows();
26 | std::sort(selectedRows.begin(), selectedRows.end(),
27 | [=](const auto& lidx, const auto& ridx) {
28 | return m_view->visualRect(lidx).top() < m_view->visualRect(ridx).top();
29 | });
30 |
31 | QStringList rows;
32 | for (auto& idx : selectedRows) {
33 | rows.append(m_format(idx));
34 | }
35 |
36 | QGuiApplication::clipboard()->setText(rows.join("\n"));
37 | }
38 |
39 | bool CopyEventFilter::eventFilter(QObject* sender, QEvent* event)
40 | {
41 | if (sender == m_view && event->type() == QEvent::KeyPress) {
42 | QKeyEvent* keyEvent = static_cast(event);
43 | if (keyEvent->modifiers() == Qt::ControlModifier && keyEvent->key() == Qt::Key_C) {
44 | copySelection();
45 | return true;
46 | }
47 | }
48 | return QObject::eventFilter(sender, event);
49 | }
50 |
--------------------------------------------------------------------------------
/src/copyeventfilter.h:
--------------------------------------------------------------------------------
1 | #ifndef COPY_EVENT_FILTER_H
2 | #define COPY_EVENT_FILTER_H
3 |
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | // this small class provides copy on Ctrl+C and also
11 | // exposes a method to actual copy the selection
12 | //
13 | // the way the selection is copied can be customized by
14 | // passing a functor to format each index, by default
15 | // it only extracts the display role
16 | //
17 | // only works for view that selects whole row since it only
18 | // considers the first cell in each row
19 | //
20 | class CopyEventFilter : public QObject
21 | {
22 | Q_OBJECT
23 |
24 | public:
25 | CopyEventFilter(QAbstractItemView* view, int column = 0, int role = Qt::DisplayRole);
26 | CopyEventFilter(QAbstractItemView* view,
27 | std::function format);
28 |
29 | // copy the selection of the view associated with this
30 | // event filter into the clipboard
31 | //
32 | void copySelection() const;
33 |
34 | bool eventFilter(QObject* sender, QEvent* event) override;
35 |
36 | private:
37 | QAbstractItemView* m_view;
38 | std::function m_format;
39 | };
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/src/credentialsdialog.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (C) 2012 Sebastian Herbord. All rights reserved.
3 |
4 | This file is part of Mod Organizer.
5 |
6 | Mod Organizer is free software: you can redistribute it and/or modify
7 | it under the terms of the GNU General Public License as published by
8 | the Free Software Foundation, either version 3 of the License, or
9 | (at your option) any later version.
10 |
11 | Mod Organizer is distributed in the hope that it will be useful,
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | GNU General Public License for more details.
15 |
16 | You should have received a copy of the GNU General Public License
17 | along with Mod Organizer. If not, see .
18 | */
19 |
20 | #include "credentialsdialog.h"
21 | #include "ui_credentialsdialog.h"
22 |
23 | CredentialsDialog::CredentialsDialog(QWidget* parent)
24 | : QDialog(parent), ui(new Ui::CredentialsDialog)
25 | {
26 | ui->setupUi(this);
27 | }
28 |
29 | CredentialsDialog::~CredentialsDialog()
30 | {
31 | delete ui;
32 | }
33 |
34 | bool CredentialsDialog::store() const
35 | {
36 | return ui->rememberCheck->isChecked();
37 | }
38 |
39 | bool CredentialsDialog::neverAsk() const
40 | {
41 | return ui->dontaskBox->isChecked();
42 | }
43 |
--------------------------------------------------------------------------------
/src/credentialsdialog.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (C) 2012 Sebastian Herbord. All rights reserved.
3 |
4 | This file is part of Mod Organizer.
5 |
6 | Mod Organizer is free software: you can redistribute it and/or modify
7 | it under the terms of the GNU General Public License as published by
8 | the Free Software Foundation, either version 3 of the License, or
9 | (at your option) any later version.
10 |
11 | Mod Organizer is distributed in the hope that it will be useful,
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | GNU General Public License for more details.
15 |
16 | You should have received a copy of the GNU General Public License
17 | along with Mod Organizer. If not, see .
18 | */
19 |
20 | #ifndef CREDENTIALSDIALOG_H
21 | #define CREDENTIALSDIALOG_H
22 |
23 | #include
24 |
25 | namespace Ui
26 | {
27 | class CredentialsDialog;
28 | }
29 |
30 | class CredentialsDialog : public QDialog
31 | {
32 | Q_OBJECT
33 |
34 | public:
35 | explicit CredentialsDialog(QWidget* parent = 0);
36 | ~CredentialsDialog();
37 |
38 | bool store() const;
39 | bool neverAsk() const;
40 |
41 | private:
42 | Ui::CredentialsDialog* ui;
43 | };
44 |
45 | #endif // CREDENTIALSDIALOG_H
46 |
--------------------------------------------------------------------------------
/src/disableproxyplugindialog.cpp:
--------------------------------------------------------------------------------
1 | #include "disableproxyplugindialog.h"
2 |
3 | #include "ui_disableproxyplugindialog.h"
4 |
5 | using namespace MOBase;
6 |
7 | DisableProxyPluginDialog::DisableProxyPluginDialog(
8 | MOBase::IPlugin* proxyPlugin, std::vector const& required,
9 | QWidget* parent)
10 | : QDialog(parent), ui(new Ui::DisableProxyPluginDialog)
11 | {
12 | ui->setupUi(this);
13 |
14 | ui->topLabel->setText(QObject::tr("Disabling the '%1' plugin will prevent the "
15 | "following %2 plugin(s) from working:",
16 | "", required.size())
17 | .arg(proxyPlugin->localizedName())
18 | .arg(required.size()));
19 |
20 | connect(ui->noBtn, &QPushButton::clicked, this, &QDialog::reject);
21 | connect(ui->yesBtn, &QPushButton::clicked, this, &QDialog::accept);
22 |
23 | ui->requiredPlugins->setSelectionMode(QAbstractItemView::NoSelection);
24 | ui->requiredPlugins->setRowCount(required.size());
25 | for (int i = 0; i < required.size(); ++i) {
26 | ui->requiredPlugins->setItem(i, 0,
27 | new QTableWidgetItem(required[i]->localizedName()));
28 | ui->requiredPlugins->setItem(i, 1,
29 | new QTableWidgetItem(required[i]->description()));
30 | ui->requiredPlugins->setRowHeight(i, 9);
31 | }
32 | ui->requiredPlugins->verticalHeader()->setVisible(false);
33 | ui->requiredPlugins->sortByColumn(0, Qt::AscendingOrder);
34 | }
35 |
--------------------------------------------------------------------------------
/src/disableproxyplugindialog.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (C) 2020 Mikaël Capelle. All rights reserved.
3 |
4 | This file is part of Mod Organizer.
5 |
6 | Mod Organizer is free software: you can redistribute it and/or modify
7 | it under the terms of the GNU General Public License as published by
8 | the Free Software Foundation, either version 3 of the License, or
9 | (at your option) any later version.
10 |
11 | Mod Organizer is distributed in the hope that it will be useful,
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | GNU General Public License for more details.
15 |
16 | You should have received a copy of the GNU General Public License
17 | along with Mod Organizer. If not, see .
18 | */
19 |
20 | #ifndef DISABLEPROXYPLUGINDIALOG_H
21 | #define DISABLEPROXYPLUGINDIALOG_H
22 |
23 | #include
24 |
25 | #include "ipluginproxy.h"
26 |
27 | namespace Ui
28 | {
29 | class DisableProxyPluginDialog;
30 | }
31 |
32 | class DisableProxyPluginDialog : public QDialog
33 | {
34 | public:
35 | DisableProxyPluginDialog(MOBase::IPlugin* proxyPlugin,
36 | std::vector const& required,
37 | QWidget* parent = nullptr);
38 |
39 | private slots:
40 |
41 | Ui::DisableProxyPluginDialog* ui;
42 | };
43 |
44 | #endif
45 |
--------------------------------------------------------------------------------
/src/dlls.manifest.debug.qt6:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/dlls.manifest.qt6:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/downloadmanagerproxy.h:
--------------------------------------------------------------------------------
1 | #ifndef DOWNLOADMANAGERPROXY_H
2 | #define DOWNLOADMANAGERPROXY_H
3 |
4 | #include "downloadmanager.h"
5 | #include
6 |
7 | class OrganizerProxy;
8 |
9 | class DownloadManagerProxy : public MOBase::IDownloadManager
10 | {
11 |
12 | public:
13 | DownloadManagerProxy(OrganizerProxy* oproxy, DownloadManager* downloadManager);
14 | virtual ~DownloadManagerProxy();
15 |
16 | int startDownloadURLs(const QStringList& urls) override;
17 | int startDownloadNexusFile(int modID, int fileID) override;
18 | int startDownloadNexusFileForGame(const QString& gameName, int modID,
19 | int fileID) override;
20 | QString downloadPath(int id) override;
21 |
22 | bool onDownloadComplete(const std::function& callback) override;
23 | bool onDownloadPaused(const std::function& callback) override;
24 | bool onDownloadFailed(const std::function& callback) override;
25 | bool onDownloadRemoved(const std::function& callback) override;
26 |
27 | private:
28 | friend class OrganizerProxy;
29 |
30 | // See OrganizerProxy::connectSignals().
31 | void connectSignals();
32 | void disconnectSignals();
33 |
34 | OrganizerProxy* m_OrganizerProxy;
35 | DownloadManager* m_Proxied;
36 |
37 | DownloadManager::SignalDownloadCallback m_DownloadComplete;
38 | DownloadManager::SignalDownloadCallback m_DownloadPaused;
39 | DownloadManager::SignalDownloadCallback m_DownloadFailed;
40 | DownloadManager::SignalDownloadCallback m_DownloadRemoved;
41 |
42 | std::vector m_Connections;
43 | };
44 |
45 | #endif // ORGANIZERPROXY_H
46 |
--------------------------------------------------------------------------------
/src/downloadstab.h:
--------------------------------------------------------------------------------
1 | #ifndef MODORGANIZER_DOWNLOADTAB_INCLUDED
2 | #define MODORGANIZER_DOWNLOADTAB_INCLUDED
3 |
4 | #include
5 |
6 | namespace Ui
7 | {
8 | class MainWindow;
9 | }
10 | class OrganizerCore;
11 | class DownloadListView;
12 |
13 | class DownloadsTab : public QObject
14 | {
15 | Q_OBJECT;
16 |
17 | public:
18 | DownloadsTab(OrganizerCore& core, Ui::MainWindow* ui);
19 |
20 | void update();
21 |
22 | private:
23 | struct DownloadsTabUi
24 | {
25 | QPushButton* refresh;
26 | QPushButton* queryInfos;
27 | DownloadListView* list;
28 | QCheckBox* showHidden;
29 | QLineEdit* filter;
30 | };
31 |
32 | OrganizerCore& m_core;
33 | DownloadsTabUi ui;
34 | MOBase::FilterWidget m_filter;
35 |
36 | void refresh();
37 |
38 | /**
39 | * @brief Handle click on the "Query infos" button
40 | **/
41 | void queryInfos();
42 |
43 | void resumeDownload(int downloadIndex);
44 | };
45 |
46 | #endif // MODORGANIZER_DOWNLOADTAB_INCLUDED
47 |
--------------------------------------------------------------------------------
/src/envdump.h:
--------------------------------------------------------------------------------
1 | #ifndef MODORGANIZER_ENVDUMP_INCLUDED
2 | #define MODORGANIZER_ENVDUMP_INCLUDED
3 |
4 | namespace env
5 | {
6 |
7 | enum class CoreDumpTypes
8 | {
9 | None,
10 | Mini,
11 | Data,
12 | Full
13 | };
14 |
15 | CoreDumpTypes coreDumpTypeFromString(const std::string& s);
16 | std::string toString(CoreDumpTypes type);
17 |
18 | // creates a minidump file for this process
19 | //
20 | bool coredump(const wchar_t* dir, CoreDumpTypes type);
21 |
22 | // finds another process with the same name as this one and creates a minidump
23 | // file for it
24 | //
25 | bool coredumpOther(CoreDumpTypes type);
26 |
27 | } // namespace env
28 |
29 | #endif // MODORGANIZER_ENVDUMP_INCLUDED
30 |
--------------------------------------------------------------------------------
/src/envmetrics.h:
--------------------------------------------------------------------------------
1 | #ifndef ENV_METRICS_H
2 | #define ENV_METRICS_H
3 |
4 | #include
5 | #include
6 |
7 | namespace env
8 | {
9 |
10 | // information about a monitor
11 | //
12 | class Display
13 | {
14 | public:
15 | Display(QString adapter, QString monitorDevice, bool primary);
16 |
17 | // display name of the adapter running the monitor
18 | //
19 | const QString& adapter() const;
20 |
21 | // internal device name of the monitor, this is not a display name
22 | //
23 | const QString& monitorDevice() const;
24 |
25 | // whether this monitor is the primary
26 | //
27 | bool primary();
28 |
29 | // resolution
30 | //
31 | int resX() const;
32 | int resY() const;
33 |
34 | // dpi
35 | //
36 | int dpi();
37 |
38 | // refresh rate in hz
39 | //
40 | int refreshRate() const;
41 |
42 | // string representation
43 | //
44 | QString toString() const;
45 |
46 | private:
47 | QString m_adapter;
48 | QString m_monitorDevice;
49 | bool m_primary;
50 | int m_resX, m_resY;
51 | int m_dpi;
52 | int m_refreshRate;
53 |
54 | void getSettings();
55 | };
56 |
57 | // holds various information about Windows metrics
58 | //
59 | class Metrics
60 | {
61 | public:
62 | Metrics();
63 |
64 | // list of displays on the system
65 | //
66 | const std::vector& displays() const;
67 |
68 | // full resolution
69 | //
70 | QRect desktopGeometry() const;
71 |
72 | private:
73 | std::vector m_displays;
74 |
75 | void getDisplays();
76 | };
77 |
78 | } // namespace env
79 |
80 | #endif // ENV_METRICS_H
81 |
--------------------------------------------------------------------------------
/src/envsecurity.h:
--------------------------------------------------------------------------------
1 | #ifndef ENV_SECURITY_H
2 | #define ENV_SECURITY_H
3 |
4 | #include
5 | #include
6 |
7 | namespace env
8 | {
9 |
10 | // represents a security product, such as an antivirus or a firewall
11 | //
12 | class SecurityProduct
13 | {
14 | public:
15 | SecurityProduct(QUuid guid, QString name, int provider, bool active, bool upToDate);
16 |
17 | // guid
18 | //
19 | const QUuid& guid() const;
20 |
21 | // display name of the product
22 | //
23 | const QString& name() const;
24 |
25 | // a bunch of _WSC_SECURITY_PROVIDER flags
26 | //
27 | int provider() const;
28 |
29 | // whether the product is active
30 | //
31 | bool active() const;
32 |
33 | // whether its definitions are up-to-date
34 | //
35 | bool upToDate() const;
36 |
37 | // string representation of the above
38 | //
39 | QString toString() const;
40 |
41 | private:
42 | QUuid m_guid;
43 | QString m_name;
44 | int m_provider;
45 | bool m_active;
46 | bool m_upToDate;
47 |
48 | QString providerToString() const;
49 | };
50 |
51 | std::vector getSecurityProducts();
52 |
53 | struct FileRights
54 | {
55 | QStringList list;
56 | bool hasExecute = false;
57 | bool normalRights = false;
58 | };
59 |
60 | struct FileSecurity
61 | {
62 | QString owner;
63 | FileRights rights;
64 | QString error;
65 | };
66 |
67 | FileSecurity getFileSecurity(const QString& file);
68 |
69 | } // namespace env
70 |
71 | #endif // ENV_SECURITY_H
72 |
--------------------------------------------------------------------------------
/src/filedialogmemory.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (C) 2012 Sebastian Herbord. All rights reserved.
3 |
4 | This file is part of Mod Organizer.
5 |
6 | Mod Organizer is free software: you can redistribute it and/or modify
7 | it under the terms of the GNU General Public License as published by
8 | the Free Software Foundation, either version 3 of the License, or
9 | (at your option) any later version.
10 |
11 | Mod Organizer is distributed in the hope that it will be useful,
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | GNU General Public License for more details.
15 |
16 | You should have received a copy of the GNU General Public License
17 | along with Mod Organizer. If not, see .
18 | */
19 |
20 | #ifndef FILEDIALOGMEMORY_H
21 | #define FILEDIALOGMEMORY_H
22 |
23 | #include
24 | #include
25 | #include