Compare commits

...
378 Commits
Author SHA1 Message Date
LostDragonist bd9cc6254c Update version to 2.2.0beta3 2019-02-18 18:00:11 -06:00
LostDragonist 57fd35fc47 Visit Nexus page for first primary source if game does not have its own Nexus page 2019-02-17 23:16:49 -06:00
Al ee266e5220 Merge pull request #655 from przester/double-install-fix
Reject new mod installations if another one is already running
2019-02-16 20:41:27 +01:00
Krzysztof Starecki d0a6321a39 Update translation file 2019-02-16 13:37:46 +01:00
Krzysztof Starecki b1f91d28fb Merge branch 'Develop' into double-install-fix 2019-02-16 13:34:20 +01:00
Al c19ba15337 Merge pull request #653 from przester/instance-fix
Fix instance errors when downloading the same file multiple times
2019-02-16 13:02:52 +01:00
Al 4b98a3f5b6 Merge pull request #654 from przester/contextmenu-fix
Change mod list context menu to stack allocation
2019-02-15 23:00:07 +01:00
Krzysztof Starecki 55249ba3a6 Reject new mod installations if another one is already running 2019-02-15 22:01:36 +01:00
Krzysztof Starecki 600b0786eb Change mod list context menu to stack allocation 2019-02-15 17:34:44 +01:00
Krzysztof Starecki 02c5b083dc Fix instance errors when downloading the same file multiple times 2019-02-15 17:07:43 +01:00
Al 4d8920cec1 Fix openOriginInfo and openOriginFolder for base files like skyrim.esm 2019-02-15 15:59:33 +01:00
Al 2106f29224 Write currentProfile to Ini file on profile change. Exclusively for outside detection of profile change. 2019-02-15 15:06:44 +01:00
LostDragonist ad7d740a0b Update version to 2.2.0beta2 2019-02-15 06:01:40 -06:00
LostDragonist 1c02ae101b Improve game selection when multiple games are possible 2019-02-15 00:36:56 -06:00
Al 280a32597f Merge pull request #651 from przester/Develop
Fix mod context menu memleak (issue #379)
2019-02-14 16:39:05 +01:00
Al 749ceff04f Merge pull request #652 from przester/bugfix-446
Fix modId behavior on 'Query Info' cancel (issue #446)
2019-02-14 16:31:06 +01:00
Krzysztof Starecki 448a37e6bc Fix mod context menu rendering issue 2019-02-14 16:30:18 +01:00
Krzysztof Starecki d4a066dbd9 Fix modId behavior on 'Query Info' cancel (issue #446) 2019-02-14 15:55:53 +01:00
Krzysztof Starecki a803baa900 Fix mod context menu memleak (issue #379) 2019-02-14 15:24:02 +01:00
LostDragonist 777ebdd922 Update translation file 2019-02-13 21:16:30 -06:00
LostDragonist a7350a1940 Update version to 2.2.0beta1 2019-02-13 20:50:46 -06:00
Al 67cb214d47 Added enderal to instance selection name 2019-02-13 02:25:49 +01:00
Al dc1b1dd829 UpdateProblemsButton when it's pressed, should clear notifications if there was a lingering one.
Sadly does not work when it's disabled
2019-02-13 01:04:15 +01:00
Al b38a26c2bc Performance improvements:
* Avoid accessing disk for finding archives if archive parsing is disabled.
* Avoid very expensive createFile() call in removeOrigin(), after disabling a mod or closing modinfodialog.
2019-02-12 23:56:09 +01:00
Al 5eb686ac48 Use case insensitive check for flagging primary prugins.
Fixes some plugins not getting force enabled on TTW.
2019-02-12 18:54:56 +01:00
LostDragonist c98f00f77e Clear palette of message dialog to improve readability 2019-02-11 00:07:19 -06:00
LostDragonist de2274e175 Make notifications geometry implementation match other dialogs 2019-02-10 15:39:20 -06:00
Al 75d16660fd Made Archive Conflicts option less appealing to random users. 2019-02-10 18:13:10 +01:00
Al 1d55e1f6f9 Avoid calling addModBSAToStructure() altogether if archive conflicts is disasbled. 2019-02-10 18:08:09 +01:00
Al 5767e27925 Fixed crash when "Update" filter is selected and multiple mods are ignored for update. 2019-02-10 00:44:02 +01:00
LostDragonist 98683eca6f Enable compact mode for mod list flags when column is smaller than 6 icons 2019-02-07 21:42:14 -06:00
LostDragonist 10336caf9e Add Discord, GOG Galaxy, and Spotify to default blacklist 2019-02-05 19:39:10 -06:00
LostDragonist 3444b9a46e Fix some logs 2019-01-31 16:14:25 -06:00
LostDragonist 2201a5b0dd Make gameShortName comparisons case insensitive 2019-01-31 11:31:22 -06:00
Al 02433c486b Fixed a Failed to refresh list of esps: invalid vector<T> subscript error
caused when locking multiple mods where some of them where disabled. Skipped the disabled ones.
2019-01-31 17:57:18 +01:00
LostDragonist bd0efe4d60 Update translation file 2019-01-30 22:44:02 -06:00
LostDragonist 0cac03cdf6 Always display at least 3 segments of version info for MO itself 2019-01-30 22:16:38 -06:00
LostDragonist 46e2eac1ca Update version to 2.2.0alpha10 2019-01-30 21:55:37 -06:00
LostDragonist 1369c8d571 Make logs more consistent in format and content 2019-01-30 20:53:48 -06:00
LostDragonist 4b522f40e8 Make logs more consistent in format and content 2019-01-30 20:32:48 -06:00
LostDragonist 6d45350546 Remember geometry of problems dialog 2019-01-30 19:57:01 -06:00
LostDragonist cfc0b3c055 Rename problems to notifications 2019-01-30 19:34:36 -06:00
LostDragonist d3f1006a51 Don't report errors when "write to file..." in data tab is canceled 2019-01-30 12:55:26 -06:00
LostDragonist 583bc5b6c6 Auto-populate executable name when browsing for a file 2019-01-30 12:53:00 -06:00
LostDragonist 34640c4d08 Don't add empty icons for flags that don't have icons 2019-01-30 03:23:24 -06:00
LostDragonist 6e3d40a230 Change modsSortedByProfilePriority to not return overwrite or backup mods 2019-01-28 15:13:46 -06:00
Al 4b87be4d3d Update issue templates 2019-01-26 12:12:31 +01:00
Al 3f2a41979e Delete Issue template to use specific ones instead 2019-01-25 23:30:40 +01:00
Al 26d5313cba Added new Issue variegated templates 2019-01-25 23:28:00 +01:00
Al 0740b2b22f Update ISSUE_TEMPLATE.md 2019-01-25 23:11:30 +01:00
Al 2053efac29 Update ISSUE_TEMPLATE.md 2019-01-25 23:06:43 +01:00
LostDragonist a853b07953 Change archive parsing to experimental and default to disabled 2019-01-25 10:35:58 -06:00
LostDragonist 08c298c964 Update copyright to 2019 2019-01-25 10:22:56 -06:00
LostDragonist 3372230ca9 Update version to 2.2.0alpha9 2019-01-25 10:21:32 -06:00
LostDragonist a68a027feb Merge remote-tracking branch 'remotes/origin/archive_conflicts_2' into Develop 2019-01-25 10:19:44 -06:00
Al 63511cd390 Fixed ListDialog geometry not saving in Move to mod feature. 2019-01-24 19:24:28 +01:00
Al 75d29f7e03 Show windows overwrite dialog when moving and add result message. 2019-01-24 14:41:52 +01:00
Al ae794dba32 Merge pull request #631 from Thex-PiedDroit/OverwriteToMod
Added ability to move files from the overwrite folder to an existing mod
2019-01-24 08:14:51 -05:00
Al c0c754728c Fixed display of notes tool-tip and improved Alternative Game source tooltip. 2019-01-24 13:23:44 +01:00
LostDragonist 0ab87850c4 Merge remote-tracking branch 'remotes/origin/Develop' into archive_conflicts_2 2019-01-22 17:57:46 -06:00
LostDragonist 5800f2b7b3 Use the optimized function that was created 2019-01-22 15:26:51 -06:00
LostDragonist 7fd81029ce Reduce file I/O operations when enabling/disabling multiple mods 2019-01-22 14:59:07 -06:00
Thex a349ec24df Added ability to move files from the overwrite folder to an existing mod 2019-01-22 21:39:08 +01:00
Al a40613f885 Cache list of archives contained in a mod instead of accessing disk each time 2019-01-22 17:58:34 +01:00
Al 917c08cd5f Fixed a crash with "Disable Selected" while in "checked" filter and similar cases 2019-01-22 13:26:52 +01:00
Al 11b2e0fe34 Improved performance of pluginlist refresh by removing regex 2019-01-22 13:25:31 +01:00
Al fe04cb47e1 Improved Choose Instance name dialog to avoid confusion 2019-01-20 22:27:43 +01:00
Al 8719248fcf Add some horizontal padding to downloads tab for eyecare 2019-01-20 00:15:20 +01:00
Al 23e81f7109 Open conflicts tab when double clicking on flags
not perfect as flags could be for something else but will provide fast access to that tab.
2019-01-19 23:36:52 +01:00
LostDragonist 6d36f1d959 Fix forced libraries when using shortcuts 2019-01-19 15:15:48 -06:00
LostDragonist 952a9c2ded Fix forced libraries when using shortcuts 2019-01-19 15:15:31 -06:00
LostDragonist e6e8ce1d68 Cancel the installation progress bar when done to prevent it showing up again 2019-01-18 17:55:53 -06:00
LostDragonist a63d12bd0f Cancel the installation progress bar when done to prevent it showing up again 2019-01-18 17:46:56 -06:00
LostDragonist 5b8b2ddac7 Edit tooltip and what's this of archive parsing option 2019-01-18 15:47:14 -06:00
LostDragonist 2ee3aec6b5 Fix location of archive parsing setting 2019-01-18 15:34:08 -06:00
Silarn 077a050e59 Merge remote-tracking branch 'origin/Develop' into archive_conflicts_2 2019-01-18 01:56:16 -06:00
Al 0d04ba1873 Added OR and AND based search to modlist and pluginlist.
A space now means AND and "OR ; | ||" mean OR. OR always wins.
2019-01-18 01:34:18 +01:00
LostDragonist 9c364c0dff Redirect documentation link in help menu to github.io 2019-01-14 18:53:32 -06:00
LostDragonist 643d2a7725 Add link to discord server in help menu 2019-01-14 18:53:07 -06:00
Al 5efba39f86 Fixed invalid vector access on modInfoDialog closing. 2019-01-13 13:42:56 +01:00
Al 821ca74166 Avoid refreshes unless it's specifically the update filter. 2019-01-12 20:24:10 +01:00
Al 864cab8c8a Fixed "check all for updates" not updating for the newly added mods. 2019-01-12 19:58:56 +01:00
Al ea3df2e9bd Some more drag and drop related changes, still no fix though. 2019-01-12 14:35:09 +01:00
Al 37e1009d94 Added missing Parchment theme file 2019-01-12 12:12:04 +01:00
Al 029da32412 Added Parchment theme by TheBobAbides. 2019-01-12 11:48:36 +01:00
LostDragonist d24519501f Delete the settings array before writing a new one 2019-01-11 18:00:54 -06:00
LostDragonist 64a242d922 Remove profile-specific executable settings when removing the executable 2019-01-11 16:21:43 -06:00
LostDragonist b41c99b742 Remove window title of widget 2019-01-11 10:32:17 -06:00
LostDragonist e9c35cad2e Update translation file 2019-01-11 09:02:06 -06:00
LostDragonist 9c721c08eb Update Paper Dark and Paper Light themes to 5.0 2019-01-11 08:11:13 -06:00
LostDragonist aa934e5fb3 Update Paper Automata theme to A2-2.0 2019-01-11 08:10:53 -06:00
LostDragonist f1572a2fc4 Fix regex warning 2019-01-11 07:56:28 -06:00
Al 04a4346dc8 Save version even after downgrading.
Otherwise the downgrade warning will appear forever.
2019-01-11 14:02:19 +01:00
Al cc7c3adcad Fix or ignore a number of compiler warnings. 2019-01-11 13:56:58 +01:00
LostDragonist 2d78ac26c8 Change version to 2.1.7alpha6 2019-01-11 03:15:21 -06:00
LostDragonist 96b6677ed9 Fixes to library load widget 2019-01-11 03:14:41 -06:00
LostDragonist 347ac2b8b5 Support for force loading libraries 2019-01-11 01:51:11 -06:00
Al 183069a85d Make Visit on Nexus and Open web page do the other as well for multiple items. 2019-01-11 00:23:39 +01:00
Al ff49e2a43c Added Web Page URL field in modinfodialog.
It's used only if nexusID is invalid.
2019-01-11 00:04:09 +01:00
Al d0445685bf Fix #523 by resetting m_URL after install. 2019-01-10 23:51:53 +01:00
Al 14b117d74a Save rich text of notes tab across restart. 2019-01-10 21:16:01 +01:00
LostDragonist 301c1156f8 Don't try to resume downloads that aren't paused 2019-01-08 01:34:06 -06:00
Al fa8e40adcb Update valid mod status when moving files from overwrite. 2019-01-07 14:28:28 +01:00
Al d32695843d Fix drop to downloads tab.
Fix DownloadView to be QtreeView in QCreator.
2019-01-07 13:28:46 +01:00
Al f2ea231f92 Made Delete INIs and Saves dialogs remember selection. 2019-01-06 21:54:11 +01:00
Al 2a010e5cdb Fixed version notification messages. 2019-01-06 20:57:17 +01:00
LostDragonist eb6ee86da4 Change version to 2.1.7alpha5 2019-01-05 21:50:52 -06:00
Silarn e35cdd6c89 Merge remote-tracking branch 'origin/Develop' into archive_conflicts_2 2019-01-05 20:00:16 -06:00
LostDragonist f2c145b2fc Change qPrintable to qUtf8Printable to better support non-ASCII text 2019-01-05 19:11:22 -06:00
Al cc7d1ed721 Improve spacing for plugincounter. 2019-01-06 00:29:37 +01:00
Al 08477d6524 Fix compact/normal download sizes on all themes.
Fix hover/select padding changes.
Fix non uniform height due to warning icon.
2019-01-05 23:43:10 +01:00
Al 23426d920e Added Tannin to thanks 2019-01-05 23:39:50 +01:00
Al e97f073570 Improve ToLower() performance significally. 2019-01-05 20:59:00 +01:00
Al 299a769a83 Improve performance of refresh (regex and code distribution) 2019-01-05 18:44:15 +01:00
LostDragonist 14782a374c Improve performance by removing redundant actions when changing mod states 2019-01-05 02:57:01 -06:00
LostDragonist 070a9a4d47 Update mod and plugin counters when a mod is removed 2019-01-05 02:18:18 -06:00
LostDragonist 3d24650095 Fix counting light-flagged plugins 2019-01-05 02:17:37 -06:00
LostDragonist a6e526210f Remove redundant "active" labels on plugin counter 2019-01-05 01:33:46 -06:00
LostDragonist 3839de53f0 Don't call ASCII function with unicode 2019-01-03 04:39:34 -06:00
Al 474fdca394 Merge pull request #610 from przester/download-tab
Tweak download tab column resizing
2019-01-03 01:35:13 +01:00
Krzysztof Starecki c54bc7edfa Merge branch 'Develop' of https://github.com/Modorganizer2/modorganizer into download-tab 2019-01-03 01:20:15 +01:00
Krzysztof Starecki c57d7567c4 Tweak download tab column resizing 2019-01-03 01:09:08 +01:00
LostDragonist 683d17784b Improve missing INI dialog when switching profiles 2019-01-02 14:30:46 -06:00
Al 0d0e9ee175 Added Note columns to Export to CSV feature 2019-01-02 19:50:33 +01:00
LostDragonist 15e4711417 Merge remote-tracking branch 'remotes/origin/Develop' into archive_conflicts_2 2019-01-01 17:07:52 -06:00
Al 5ad411cd47 Updated version to 2.1.7alpha4 2019-01-01 23:31:16 +01:00
Al 9a2b9224ca Sort Separators by priority in Send To dialog. 2019-01-01 22:57:00 +01:00
Al 35995a4989 Merge pull request #607 from przester/download-tab
Fix download entry padding issue
2019-01-01 22:37:47 +01:00
Krzysztof Starecki 76fb954b3d Fix download entry padding issues (again) 2019-01-01 22:34:42 +01:00
Al 523cb203ce Merge pull request #606 from przester/download-tab
Revamp the downloads tab, fix some UI bugs
2019-01-01 22:10:56 +01:00
Krzysztof Starecki 6fa416fc52 Add default download row sizes for generic styles, sanitize mainwindow.ui 2019-01-01 21:52:10 +01:00
Al 619a0887d8 Fix About dialog open tab. 2019-01-01 19:39:57 +01:00
Al 9c1cbed8db Updated About dialog. 2019-01-01 19:33:44 +01:00
Krzysztof Starecki ad752182bc Fix download entry padding issues 2019-01-01 18:31:17 +01:00
Krzysztof Starecki 63b2189416 Remove unused import, fix accidental indent 2019-01-01 15:29:50 +01:00
Krzysztof Starecki 79ccbccb1b Fix toolbar buttons not setting their icons on startup 2019-01-01 14:27:51 +01:00
Al d8396bfa2c Fixed refresh not clearing overwrite highlighting. 2019-01-01 12:39:35 +01:00
LostDragonist 858930cb46 Change find_if to remove_if 2019-01-01 01:18:40 -06:00
Krzysztof Starecki 44d42cb26d Change redownload dialog to display the filename 2019-01-01 01:10:46 +01:00
Krzysztof Starecki 263a3f7d24 Make download tab columns hideable by user 2018-12-31 23:24:19 +01:00
Krzysztof Starecki 79a2f8477b Fix bug with hiding installed downloads 2018-12-31 22:45:04 +01:00
Krzysztof Starecki 954785f83e Fix some compiler warnings 2018-12-31 21:01:15 +01:00
Krzysztof Starecki 895556f257 Add filetime column to download tab 2018-12-31 20:53:35 +01:00
Krzysztof Starecki e7c59b26e1 Fix nullptr bug with download meta info 2018-12-31 20:45:12 +01:00
Krzysztof Starecki fd6345cd4e Add 'download meta information' support to download tab 2018-12-31 20:29:03 +01:00
Krzysztof Starecki f3ee7a0566 Port the 'Night Eyes' theme 2018-12-31 19:35:52 +01:00
Krzysztof Starecki 527b310ef3 Merge remote-tracking branch 'upstream/Develop' into download-tab 2018-12-31 18:58:11 +01:00
Krzysztof Starecki b8babae78a Fix download layout bug, port most of remaining themes 2018-12-31 18:48:53 +01:00
LostDragonist 776bc8efdf Update version to 2.1.7alpha3 2018-12-31 10:52:02 -06:00
Krzysztof Starecki 412a062082 Tweak styling options for downloads tab, port Paper Light theme for reference 2018-12-31 16:12:25 +01:00
LostDragonist ba57657b4f Correct logic of mod conflict color selection 2018-12-31 07:40:44 -06:00
LostDragonist 398cc0112e Merge branch 'Develop' into archive_conflicts_2 2018-12-30 20:34:29 -06:00
LostDragonist 4809c30132 Apply alpha color settings to the settings dialog 2018-12-30 20:19:23 -06:00
LostDragonist 7cdaecc5bd Merge pull request #604 from Project579/Develop
Added Alpha channel to color pickers
2018-12-30 19:20:52 -06:00
Krzysztof Starecki 03823a433a Add qss styling options for progress bar and compact mode widgets 2018-12-31 02:15:47 +01:00
LostDragonist 580f45429f Fix conflict colors and make archive conflict colors configurable 2018-12-30 18:52:15 -06:00
Project579 22643edb21 Added Alpha channel to color pickers 2018-12-31 01:18:01 +01:00
LostDragonist e9fe45eb89 Merge branch 'Develop' into archive_conflicts_2 2018-12-30 16:30:41 -06:00
LostDragonist b2ca83366a Merge pull request #601 from Project579/archive_conflicts_2
Archive conflicts Updating to Lastest Develop
2018-12-30 16:27:43 -06:00
Krzysztof Starecki c11ff7e2db Add icon for incomplete download info, add download progress delegate 2018-12-30 22:13:15 +01:00
Krzysztof Starecki cfb941082e Add downloadlist styling tweaks 2018-12-30 19:41:05 +01:00
Krzysztof Starecki 463abedee7 Remove old downloads tab code leftovers 2018-12-30 16:35:39 +01:00
Krzysztof Starecki 4d40e8d18c Fix adding new downloads, add missing download progress states 2018-12-30 16:22:35 +01:00
Krzysztof Starecki c3ad0349d4 Tweak downloadlist status sorting behavior 2018-12-30 15:27:25 +01:00
Krzysztof Starecki 7a71a9eb9e Fix a bug where downloadlist context actions run multiple times 2018-12-30 15:16:06 +01:00
Krzysztof Starecki ec8dbcbf28 Port context menus to new downloadlist 2018-12-30 14:57:05 +01:00
Krzysztof Starecki 5920dc2cd1 Disable downloadlist widget delegates, port partial functionality to QTreeView 2018-12-30 12:26:34 +01:00
Project579 71091f679d Updated translation 2018-12-30 11:22:08 +01:00
Project579 302f9b99d8 Updated version to reflect changes 2018-12-30 11:22:08 +01:00
Project579 b842eb1ca3 Fix for download list refreshing, courtesy of bshd 2018-12-30 11:22:08 +01:00
Project579 b525ee392f Updated translation file 2018-12-30 11:07:56 +01:00
Al 7f0844bdd4 Changed name limit to 60 instead of 100 since it was too long 2018-12-29 23:52:18 +01:00
LostDragonist 87c6b019bc Fix for download list refreshing, courtesy of bshd 2018-12-29 14:56:43 -06:00
LostDragonist 5fc107cdb2 Change version to 2.1.7alpha2 2018-12-29 14:23:36 -06:00
Project579 d6f9e6d900 Merge branch 'Develop' into archive_conflicts_2
Updating to 2.1.7alpha1
2018-12-29 11:56:42 +01:00
LostDragonist eb50d0b447 Update counters when changing profiles 2018-12-28 20:13:31 -06:00
LostDragonist f6884fe3d6 Allow some functions to pass in empty paths to check the root folder 2018-12-28 16:33:51 -06:00
Al 93a60177ee Changed "Loads BSA" flag to finds loaded archives in the entire virtual folder. 2018-12-28 21:26:59 +01:00
LostDragonist b82677fab1 Fix warning about missing signal 2018-12-28 01:10:16 -06:00
LostDragonist 66bf2ab537 Stop warning about missing English translations 2018-12-28 01:05:11 -06:00
LostDragonist 2d9cf25657 Fix typo 2018-12-27 18:49:19 -06:00
LostDragonist dea754ad91 Update translation file 2018-12-27 15:02:26 -06:00
LostDragonist b84e938726 Update version to 2.1.7alpha1 2018-12-27 14:29:25 -06:00
LostDragonist b397e0bc5d Simplify code for visible counter changes 2018-12-27 04:37:23 -06:00
LostDragonist 4cc371ab84 Modify active counters based on filters 2018-12-27 02:50:04 -06:00
Al bbed72c6a3 *Made clear Filters button clear also the nameEdit filter 2018-12-27 01:07:08 +01:00
LostDragonist a3110731ca Use WriteRegistryValue function to handle read-only files 2018-12-26 17:23:12 -06:00
LostDragonist 6a4e52f9dc Display counter tooltips when clicked 2018-12-26 10:59:18 -06:00
LostDragonist 66d0ae4317 Add a small gutter around the active mod/plugin counters 2018-12-26 09:19:44 -06:00
Al fecb66f66b Added "Visible" counters for modlist.
Improved counters tool tip view.
2018-12-26 15:49:00 +01:00
LostDragonist 85eb57eebb Relaunch MO as admin when elevation is required
Previously, a new process of MO would be created as administrator when elevation was required.  This had some unwanted side effects.  The GUI lock would not function.  The virtual file system would likely break as the non-admin process could not access data from the new admin instance.
2018-12-25 03:51:32 -06:00
LostDragonist 22f40072cf Allow user to "won't endorse" MO itself 2018-12-24 22:37:53 -06:00
LostDragonist 40a3e93c46 Add an option to disable endorsements 2018-12-24 22:37:53 -06:00
LostDragonist d021011cfa Allow "endorse", "unendorse", and "won't endorse" for multiple mods 2018-12-24 22:37:52 -06:00
LostDragonist 5f06da756e Allow "visit on Nexus" for multiple mods 2018-12-24 20:52:56 -06:00
LostDragonist 7fa230411e Improvements to the plugin and mod counters
* Fix style
* Add whatsThis
* Add tooltips with additional statistics
* Don't count mods like overwrite, unmanaged, DLC, etc.
2018-12-24 19:46:31 -06:00
Al 23cf8e60fd Changed ui of active mod counters 2018-12-24 21:22:48 +01:00
Al d28ddcfbb5 Added Active Plugins and Active Mods counters 2018-12-24 17:29:16 +01:00
Al 6211a23c5f Made compact download view show longer names 2018-12-24 13:26:51 +01:00
LostDragonist ce02da497a Prevent missing INI dialog from popping up when creating a new instance with archive invalidation 2018-12-24 00:59:54 -06:00
LostDragonist fcff329c1e Add sorting for the notes column 2018-12-23 00:57:28 -06:00
Al12rs 2d79e37e59 Fixed typo in previous commit. 2018-12-22 17:06:06 +01:00
Al12rs 77e4cb5c6e Improved tooltip for Alternate Game Source flag. 2018-12-22 17:02:55 +01:00
Al12rs 69ff53f443 Some logging for drop events on modlist. 2018-12-22 16:41:05 +01:00
Al12rs 127fbda849 Fixed unignreUpdate option from not showing up. 2018-12-22 14:54:45 +01:00
LePresidente d8e988d372 encase path in quotations to support spaces in Install Location. 2018-12-22 15:46:02 +02:00
Silarn da3a95ed66 Translation updates 2018-12-22 03:25:08 -06:00
Al12rs 101d656709 Removed pixel limit on downloads tab, inclreased character limit to 120. 2018-12-22 01:55:52 +01:00
LostDragonist 549db7d331 Escape quotes in arguments when elevating MO 2018-12-21 17:38:07 -06:00
LostDragonist 9bc15eb6f7 Add hotkeys for download filter and allow ESC to clear filter more often 2018-12-20 20:57:09 -06:00
LostDragonist 70ddfaadbf Expand mod list search edit to work on categories, nexus IDs, and notes 2018-12-20 20:57:09 -06:00
LostDragonist afdd21440a Catch and report exceptions in the MainWindow deconstructor 2018-12-20 20:56:31 -06:00
Al12rs a899823fff Fixed Description not loading when InfoDialog opens on Nexus tab. 2018-12-21 02:15:02 +01:00
Al12rs 3161bdb9a5 Made doubleclick open relevant info tab 2018-12-21 01:05:30 +01:00
LostDragonist 63efd21a6a Fix version reporting to allow non-alpha builds 2018-12-20 15:33:01 -06:00
Al12rs 9a33dc1480 *Added "Open INIs Folder" option.
*Changed "Open Instance Folder" to open the Appdata or MO2 install instead of the baseDirectory.
2018-12-20 19:12:11 +01:00
LostDragonist 1b0c437788 Update translation file 2018-12-19 14:33:04 -06:00
LostDragonist 5e530becc2 Don't mention save games when dealing with INI files 2018-12-19 13:02:15 -06:00
LostDragonist d9835cc4ae Update translation file 2018-12-19 12:47:33 -06:00
LostDragonist 18ea79c2d0 Update translation file 2018-12-19 11:53:53 -06:00
LostDragonist 37a6989ba8 Make language about profile-specific settings and save games consistent 2018-12-19 11:53:29 -06:00
LostDragonist 830b63c4e2 Re-initialize the profile configuration if INI files are missing 2018-12-19 11:43:15 -06:00
LostDragonist 662772c2fc Optionally delete and restore profile-specific game INI files when changing the setting 2018-12-19 11:19:03 -06:00
LostDragonist 027edcf688 Enable per-profile game INI files by default again 2018-12-19 11:03:24 -06:00
Al12rs ff51aa10c2 Fixed performance issue of Data tab. 2018-12-18 00:12:28 +01:00
LostDragonist cbc9d00584 Update translation file 2018-12-15 16:23:20 -06:00
Al12rs e15f768a15 Fixed opening multiple modinfodialog from Open Origin info. 2018-12-13 21:18:35 +01:00
LostDragonist e63eba2ca1 Improve cleanup of temporary files when installing 2018-12-13 13:30:04 -06:00
LostDragonist 4436d376a8 Clean up and fix merge issues 2018-12-12 20:35:23 -06:00
Al12rs 40c82fc190 Fixed mainwindow.cpp so that Qt Creator does not break it anymore.
We should be able to normally use Creator now without having to worry about breaking the build.

Partial fix for conflict information getting messd up after opening infodialog or disabling a mod.
Icons still get messed up but conflict tab remains consistent at first inspection.

Reverted main tab to plugins

Changed version of Archive conflicts branch to 2.2.0 pre-alpha.
2018-12-12 20:17:07 -06:00
Project579 57178f8988 Added button to disable Archives in Data Tree and entirely. 2018-12-12 20:16:54 -06:00
Al12rs 49159de5d7 Improved refresh performance by replacing std::transform() with CharLowerBuffer().
Fixed padding to four spaces and removed references to FLAG_ARCHIVE_LOOSE_CONFLICTS_MIXED that isn't used.
2018-12-12 20:16:50 -06:00
Silarn 75a663941d Add flag padding for all conflict icons 2018-12-12 20:16:40 -06:00
Al12rs b05f56c808 Added red archive conflict icon and made the conflicts tab change font for files that come from an archive. 2018-12-12 20:16:39 -06:00
Silarn f9f70b224e Add loose file/archive conflict icons 2018-12-12 20:16:07 -06:00
Al12rs 01e1232cf8 Added new "loose files overwrite archive" icon and all the flags.
The logic to show it is still missing until the other issues are fixed.
2018-12-12 20:15:55 -06:00
Silarn 8d6c715672 Initial archive conflict parsing
Squashed commit:
  Basic archive conflict parsing - pass 1
  Merge fixes for archive parsing
  Basic archive conflict parsing - pass 1
  Merge fixes for archive parsing
  Should fix conflict detection for archive files
2018-12-12 20:15:55 -06:00
LostDragonist 20008e17b7 Fix highlighting plugins when selecting mods with no visible priority 2018-12-12 17:43:43 -06:00
LostDragonist c24200bc04 Remove a weird vertical spacer from the diagnostics settings tab 2018-12-12 13:22:17 -06:00
LostDragonist 25a9290cd5 Reset previousSeparatorColor when a separator color is reset 2018-12-12 09:40:25 -06:00
Al12rs efe657c23e Removed old styles 2018-12-12 16:30:04 +01:00
LePresidente 571347d2de Pass DIR parameter to install exe, so installation directory matches current directory. 2018-12-12 16:01:50 +02:00
Al12rs 346bc630f8 Create new Separators in last used color. 2018-12-12 10:37:10 +01:00
LostDragonist 013890f644 Remember the last separator color used 2018-12-12 03:04:23 -06:00
LostDragonist 3559364473 Update translation file 2018-12-12 02:46:51 -06:00
LostDragonist 92cdf41243 Update Skyrim theme by chintsu_kun to v2.1.0 2018-12-11 20:48:16 -06:00
LostDragonist 789e95ca58 Update VS2015 Themes by chintsu_kun to v2.0.2 2018-12-11 20:47:29 -06:00
LostDragonist 9b9a1f435e Add v1.1 Paper Automata theme by 6788 2018-12-11 20:37:59 -06:00
LostDragonist 7f82ffa664 Add v4.3 Paper Light and Paper Dark themes by 6788 2018-12-11 20:37:36 -06:00
LostDragonist 68a1afed49 Implement separator text color in a way that doesn't break everything else 2018-12-11 20:31:17 -06:00
LostDragonist 7b1ece5f28 Further extend the version field to 32 characters 2018-12-11 18:31:09 -06:00
LostDragonist 2306e006dc Remove the requirement for a game launcher to be present 2018-12-11 15:45:29 -06:00
LostDragonist f6cd53e932 Change color of separator text based on the configured color of the separator 2018-12-11 15:24:25 -06:00
LostDragonist 5335188e63 Add option to remove column colors for mod list separators 2018-12-11 14:47:50 -06:00
LostDragonist dac716bb86 Allow tool plugins to define a submenu with the display name
Setting the display name to "<submenu>/<displayname>" will group plugins under the submenu.
2018-12-11 14:15:37 -06:00
Al12rs c486220d20 Updated translations and removed an excessive separator from previous commit. 2018-12-11 16:33:39 +01:00
Al12rs 0af33ccddf Added "Open Origin in Explorer" and "Open Origin Info..." options to ESPList context menu. 2018-12-11 16:26:41 +01:00
Al12rs 413c045383 * Fixed order of data tab to be Folders first.
* Remember expanded folders across refreshes.
2018-12-11 14:57:03 +01:00
LostDragonist 1266e13921 Add the ability to change the managed game directory 2018-12-11 01:52:53 -06:00
LostDragonist f4af3264f0 Sort tools menu to provide consistent results 2018-12-11 00:25:18 -06:00
Al12rs f61236e4cf Added UI locking while loadbar is active (for refresh of modlist). 2018-12-10 20:53:45 +01:00
LostDragonist d7e6fd1dd6 Don't disable ESMs when disabling mods if alternatives are available 2018-12-08 20:23:45 -06:00
LostDragonist 9d9dbd9f7e Add shortcut to select name filters on mod list and plugin list 2018-12-08 14:46:42 -06:00
LostDragonist 93763a9364 Add workaround setting to prevent the GUI from locking when running an executable 2018-12-08 11:15:16 -06:00
LostDragonist a94977988b Move the mod info separator flag to the end as it's hidden 2018-12-08 10:44:46 -06:00
LostDragonist c501b5cca0 Add notes column to mod list 2018-12-08 10:44:46 -06:00
Al12rs c87d97de8c Added missing games to the suggested names list.
Imroved dialog description.
2018-12-08 15:01:01 +01:00
LostDragonist 4914fd172d Add workarounds button to reset window geometries 2018-12-08 01:19:37 -06:00
LostDragonist 02fe0d3384 Improve refresh of data when changing profile settings 2018-12-07 23:44:31 -06:00
LostDragonist e76891b926 Update translation file 2018-12-06 03:06:46 -06:00
LostDragonist b53be165fd Savagemes -> Savegames 2018-12-06 02:59:41 -06:00
LostDragonist 849d00521a Transition profile settings to settings.ini 2018-12-05 19:17:16 -06:00
Al12rs deb3c5ca21 Fixed tooltip and "What's this" to better explain INI options. 2018-12-05 22:57:52 +01:00
Al12rs 25448ef076 * Changed "Local game settings" to "Use profile-specific Game INI files".
* Added tooltip to the option explaining what it does since it was missing.
* Improved Local Savegames text and tooltip as well.
2018-12-05 22:50:03 +01:00
LostDragonist 40919c1520 Create empty mods above the selected mod 2018-12-04 18:08:39 -06:00
LostDragonist 79c451bb17 Improvements to "send to separator..." dialog
* Scale contents with dialog size
* Save and restore dialog geometry
* Add a better window title
2018-12-03 06:04:16 -06:00
LostDragonist 87292ca30f Add filter to "send to separator..." dialog 2018-12-02 22:07:58 -06:00
LostDragonist c0b55690bc Add "send to separator..." option for mods 2018-12-02 20:26:26 -06:00
Al12rs f1384cdfa7 Fixed context menu for Data tab showing the File version for empty folders. 2018-12-02 12:48:16 +01:00
Al12rs c9658e1a65 * Added Folders and Files icons to Data tab.
* Fixed empty folders not showing up in Data tab.
2018-12-01 23:23:28 +01:00
LostDragonist 9431597e66 Correct comparison logic for blacklist warning 2018-11-29 15:33:47 -06:00
LostDragonist 4566b51093 Set general settings tab as the default again 2018-11-29 15:23:25 -06:00
LostDragonist 2212ad6f1c Add executable blacklisting 2018-11-29 14:11:09 -06:00
LostDragonist 6142872620 Prevent the user from renaming unmanaged and DLC mods 2018-11-26 07:51:45 -06:00
LostDragonist 4cae1397e7 Prevent the user from setting a negative mod priority 2018-11-26 07:44:26 -06:00
LostDragonist 7fbfc12118 Sort the plugin list 2018-11-26 07:23:11 -06:00
LostDragonist 4eaa0d16bb Resize plugin settings to make keys visible 2018-11-26 07:23:03 -06:00
LostDragonist a219d03444 Add cancel button to "Start Steam?" dialog to not start binary 2018-11-26 03:13:33 -06:00
LostDragonist ad01e1d608 Less strict implementation of path normalization 2018-11-10 22:04:12 -06:00
LostDragonist aaa1523db9 Normalize path settings to prevent extra characters 2018-11-10 16:24:45 -06:00
LostDragonist effd05df06 Tweak text color selection to prevent white text on bright green background 2018-11-09 19:05:06 -06:00
LostDragonist 545b7b4eb7 Fix button colors in the settings dialog with the default theme 2018-11-09 18:14:01 -06:00
Al12rs 71830a65d4 Added three new Transparent Styles by Gernash:
Transparent Style 101 Green
Transparent Style BOS
Transparent Style Skyrim
2018-11-09 21:50:46 +01:00
Al12rs bde2e5fca1 Improved Skyrim.qss theme performance. 2018-11-09 17:15:04 +01:00
Al12rs 15bbfdfa6f Added Nigh Eyes theme by ciathyza. 2018-11-08 20:41:40 +01:00
LostDragonist a85a6e635e Update translation file 2018-11-06 19:00:06 -06:00
LostDragonist 9abb3ca162 Prevent user from clicking the run button more than once 2018-11-05 21:43:50 -06:00
LostDragonist 5588b8b756 Change "mods" to "plugins" in "send to priority..." option for plugins 2018-11-04 13:47:39 -06:00
LostDragonist d48392c89f Don't change priority of new separators when not sorting by priority 2018-11-04 13:45:42 -06:00
LostDragonist 21d61e617b Hide "send to" context menu options when not sorting by priority 2018-11-04 13:39:22 -06:00
LostDragonist a48a20f13f Add context menu option to send to a specific priority 2018-11-04 13:10:41 -06:00
LostDragonist 2e09e633bd Fix creating separators when right-clicking overwrite 2018-11-04 12:33:37 -06:00
Al12rs 1189b8cc33 Made the "checked" filter show separators. 2018-11-04 16:19:54 +01:00
LostDragonist 17f1cf0aab Allow switching instances when MO is launched with moshortcut://<instance>: 2018-11-02 21:02:30 -05:00
Al12rs 78cd0110d3 Updated Skyrim and VS15 theme to fix highlighting on ESPlist. 2018-11-02 19:29:50 +01:00
LostDragonist 2c57899cf6 Fix matching highlights for mod and plugin selections
The selectionChanged event used before requires subtractive/additive logic to work correctly.  A separate event is fired for each row and each column for each row that is selected or deselected.  The previous logic assumed all of the selection was passed in at once.

The logic has been changed to recalculate all highlights each time the event is fired.  This is poorly optimized in regards to performance but makes the function work.
2018-11-01 17:58:49 -05:00
LostDragonist 3dbfba91e1 Add separators according to context location of context menu 2018-11-01 16:55:58 -05:00
Al12rs 2c53f9d934 Cleaned up leftover from color customizzation. 2018-11-01 16:35:02 +01:00
Al12rs 6323a348da Fixed missing category selection for separators. 2018-11-01 16:29:38 +01:00
Al12rs 73842ee245 Added ability to change color of conflict and plugin highlighting from the settings. 2018-11-01 16:20:53 +01:00
LostDragonist 122744454c Improve changing mod and plugin priorities 2018-11-01 06:40:55 -05:00
LostDragonist 5de173ba1a Add send to top/bottom options for the plugin list 2018-10-31 17:05:05 -05:00
LostDragonist eb26120332 Add send to top/bottom options for the mod list 2018-10-31 14:53:24 -05:00
LostDragonist 6056202ead Fix crash when 7-zip fails to extract a file
A thread is spun off to handle the extraction while the main thread handles the progress bar updates.  Previously, a dialog was spawned in the thread when an error in 7-zip occurred.  Now, the thread will terminate and pass the error message back to the main thread who will spawn the dialog.
2018-10-31 00:52:32 -05:00
LostDragonist c1d90b131b Add modinfoseparator to CMakeLists.txt 2018-10-30 21:38:16 -05:00
Al12rs 63a66c8754 Added VS2015 and Skyrim Stylesheets, courtesy of chintsu! 2018-10-28 19:11:44 +01:00
Al12rs ab95f78689 Added Reset color option for separators and changed the bahavior of "cancel" of the color selector dialog to keep previous color. 2018-10-28 17:27:34 +01:00
Al12rs 9e66799abf Fixed Separators not getting deleted while deleting multiple selected items. 2018-10-28 16:15:27 +01:00
Al12rs dce6507dad Added Color costumization for Separators. 2018-10-28 15:04:50 +01:00
Al12rs 42d2344f0b Added modlist Separators feature:
*New modType separator.
*Bold, italic and centralized name without _separator at the end.
*Added "create separator" option to context menu.
*Added "rename separator" option.
*Fixed rename separator issue with priority resetting.
2018-10-28 02:16:20 +02:00
Al12rs 18e49b71b5 Added uniformRowHeight = true property to the modlist, data tab, filters view and Log area. It should make Qt perform better when showing a large number of items. 2018-10-27 18:37:51 +02:00
Al12rs fcb29afe83 Increase filterview size to not cut off filternames 2018-10-13 14:44:16 +02:00
Al12rs cf52aa335a Fix Creator setting Boss button to invisible each time 2018-10-13 11:47:10 +02:00
Al12rs 9c35443780 Fixed UI file to not break each time it's opened in creator. 2018-10-13 10:42:12 +02:00
Silarn 9c6c01df56 Update path to gamebryo/creation engine sources 2018-10-01 00:14:03 -05:00
LostDragonist b83807e4d5 Set the web viewer widget in the mod info dialog to expand vertically 2018-09-30 16:04:28 -05:00
LostDragonist 2d50b17243 Fix pointer truncation to remove warning 2018-09-30 16:03:28 -05:00
LostDragonist 5a1d4e8783 Rename spacer to get remove warning 2018-09-30 16:03:27 -05:00
Al 478aeeb28c Merge pull request #536 from AnyOldName3/patch-1
Add link to upcoming FNISTool repo
2018-09-30 12:27:27 +02:00
Al 07fc9d3546 Merge pull request #537 from AnyOldName3/patch-2
Add link to Skyrim VR repo
2018-09-30 12:27:14 +02:00
Al12rs 15ab8d5c5e Changed "ignore missing game data" to not create an empty Texture folder and instead save the choice in meta.ini 2018-09-29 15:07:24 +02:00
Al12rs 192f14b001 Updated translations file 2018-09-29 12:10:41 +02:00
Al12rs 3ccceb19e1 Added .editorconfig to main repo to help keep some consistency of whitespace. 2018-09-29 09:38:03 +02:00
AnyOldName3 2d9a2a0432 Add link to Skyrim VR repo 2018-09-26 16:40:57 +01:00
AnyOldName3 ac650ae078 Add link to upcoming FNISTool repo
DO NOT MERGE UNTIL https://github.com/ModOrganizer2/modorganizer-umbrella/pull/31 IS HANDLED
2018-09-26 16:16:43 +01:00
LostDragonist 1a91174757 Merge pull request #534 from Gaerzi/patch-1
Extend version field to 12 characters
2018-09-25 14:28:46 -05:00
Gaerzi e2ec6632ec Extend version field to 12 characters
This is needed because some mods out there have version strings longer than 10 characters. For example, the current version string of [SSE Engine Fixes (skse64 plugin)](https://www.nexusmods.com/skyrimspecialedition/mods/17230) is "2.12.1.5.50" -- 11 characters in total.

12 should hopefully be enough.
2018-09-25 17:37:24 +02:00
LostDragonist b1a3bdd6e8 Automatically set CDN as a preferred server
This also removes the (free) and (premium) labels from the servers as they aren't useful anymore.  Premium users get premium speeds on all servers.  Added (automatic) tag to the CDN server to indicate it will automatically pick servers based on geography.
2018-09-17 00:01:12 -05:00
Al12rs 22a004be2e Reverted default setting tab to General 2018-09-15 19:18:29 +02:00
Al12rs a3cb400152 Store and load major dialogs geometry information. 2018-09-15 14:12:24 +02:00
Silarn 3e29d31231 Allow installs to pass Mod ID through (fixes NCC installs losing ID) 2018-09-09 04:12:23 -05:00
Al edf48bca6f Update readme.md 2018-09-08 13:08:06 +02:00
Al12rs 33e11e2056 Added debug line to check actual processed parameters passed to CreateProcessHooked() to see if we can discover somethig more on Parameter is incorrect error. 2018-09-08 12:32:45 +02:00
Al12rs 67fb7e56d3 Add option to create a Mod backup from the modlist context menu. 2018-09-07 22:04:03 +02:00
Al12rs 979206228d Added Mod Backups filter for modlist. 2018-09-07 20:53:42 +02:00
Al12rs ba162804cd Added Contains Script Extender Files filter. 2018-09-07 20:19:20 +02:00
Al12rs c6751b690a Improved Skript Extender Plugin filter to actually look for plugins and not only the SKSE folder. 2018-09-07 18:56:28 +02:00
Al12rs 138154aca0 Added "Refresh" button to downloads tab. 2018-08-31 22:16:13 +02:00
LostDragonist c576f1ff40 Refresh save game list when local game settings may have changed 2018-08-26 18:39:30 -05:00
Al12rs c4636d891f Added ModGroups contents icon and flag. 2018-08-25 14:30:27 +02:00
LostDragonist 8ea8444dc8 Update the version to 2.1.6 2018-08-24 19:50:46 -05:00
LostDragonist 258bddb6b7 Fix possible crash during write to disk error 2018-08-21 15:59:22 -05:00
LostDragonist ef771fd8ca Fix disabled menu item styling in Paper Dark theme 2018-08-20 00:55:18 -05:00
LostDragonist 2060df1585 Detect errors when writing downloads to disk and cancel download 2018-08-19 16:33:34 -05:00
LostDragonist 9a973ccf5f Center profile deletion dialog on parent 2018-08-19 13:02:54 -05:00
LostDragonist a2eb3e0266 Prevent user from deleting currently active profile 2018-08-19 13:02:30 -05:00
LostDragonist d65031c814 Allow user to cancel VFS mapping 2018-08-16 22:40:17 -05:00
LostDragonist c27e718fbd Add "enable/disable selected" to mod list context menu 2018-08-16 14:32:28 -05:00
LostDragonist 43b2df9077 Add "enable/disable selected" to plugin list context menu 2018-08-16 13:58:44 -05:00
LostDragonist 79b2e52a58 Fix another instance of "Open in Explorer" 2018-08-16 08:35:19 -05:00
LostDragonist 16a7ef78d3 Change version to 2.1.5 2018-08-16 08:19:05 -05:00
LostDragonist 74202cc743 Dracula theme: Make disabled widgets darker than enabled widgets
Fix by Kob, author of the Paper themes.
2018-08-16 01:29:01 -05:00
LostDragonist 8f86130759 Correct file category when manually querying info
The Nexus API appears to have been changed back in July 2018 to match what MO was expecting without the conversion.
2018-08-15 11:53:33 -05:00
LostDragonist 17e4ec7b13 Fix selecting the active profile when opening the profiles dialog 2018-08-12 19:59:54 -05:00
LostDragonist 9a426a2474 Revert "Improve robustness of endorsement checks"
This reverts commit fc8a6b358f.
2018-08-12 12:33:22 -05:00
LostDragonist 80594d6e1a Set toolbar widget names later to catch the problems and update widgets 2018-08-12 12:13:47 -05:00
Al12rs 56473e0ec8 Updated "Thanks". 2018-08-07 19:57:23 +02:00
LostDragonist 71988e386c Modify dark and dracula stylesheets to allow text colors on download widgets 2018-08-06 21:40:59 -05:00
LostDragonist 5e7c0fddf0 Update Paper themes by 6788-00 to version 3.0.1 2018-08-06 21:37:05 -05:00
Al12rs b0c15c9cfb Added Open File option to downloads tab. 2018-08-06 20:17:57 +02:00
Al12rs f92027bea6 Merge PR 2018-08-06 19:54:45 +02:00
Al a31b5495b8 Merge pull request #469 from Freso/minor-fixups
A couple of minor fixes
2018-08-06 16:13:18 +02:00
Frederik “Freso” S. Olesen fc19486f53 Fix capitalisation of "Explorer"
1. Explorer is a specific program, so it should be treated as a proper
   noun, and thus capitalised.
2. Other menu items in the same menu are Title Cases, so it looks out of
   place that this item is not.
2018-08-06 15:17:23 +02:00
Frederik “Freso” S. Olesen 232bbfb23b Fix DownloadManager::openInDownloadsFolder error message 2018-08-06 13:23:28 +02:00
Frederik “Freso” S. Olesen 2af99f2170 Clean up DownloadManager::openFile 2018-08-06 13:21:08 +02:00
Frederik “Freso” S. Olesen 796224d733 Add new "Open File" right-click dialog for Downloads
This enables the user to directly open the downloaded archived/file
which can be useful for e.g., inspection of what's inside or if they
need to copy files from inside the archive to somewhere else. Saves a
step compared to "Show in Folder" and then opening the file.
2018-08-06 12:21:02 +02:00
LostDragonist 1e4b5d2436 Set the names of the toolbar widgets to allow styling
QToolButton#foo where foo is one of:
  actionChange_Game
  actionInstallMod
  actionNexus
  actionAdd_Profile
  actionModify_Executables
  actionTool
  actionSettings
  seperator
  actionEndorseMO
  actionProblems
  actionUpdate
  actionHelp
2018-08-05 15:56:39 -05:00
LostDragonist 94ef8dffbc List load order backups from most recent to oldest 2018-08-04 22:16:39 -05:00
365 changed files with 28398 additions and 5671 deletions
+16
View File
@@ -0,0 +1,16 @@
root = true
[*.cpp]
indent_style = space
indent_size = 2
insert_final_newline = true
[*.h]
indent_style = space
indent_size = 2
insert_final_newline = true
[*.ui]
indent_style = space
indent_size = 2
insert_final_newline = true
-25
View File
@@ -1,25 +0,0 @@
# The problem
Briefly describe the issue you are experiencing (or the feature you want to see added to Mod Organizer). 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 channel
# Environment
* Mod Organizer Version that exhibits the issue:
* Last Mod Organizer Verison that did not exhibit the issue (if applicable):
* Desktop OS/version used to run Mod Organizer:
# Details
If necessary, describe the problem you have been experiencing in more detail.
# Link to Mod Organizer logs
## USVFS
Create a [GIST](https://gist.github.com) which is a paste of your USVFS logs, and link them here.
Do _NOT_ paste your full USVFS logs here, as it will make this issue very long and hard to read!
If you are reporting a bug, _always_ include the USVFS logs!
## MO Interface
Create a [GIST](https://gist.github.com) which is a paste of your mo_interface logs, and link them here.
Do _NOT_ paste your full mo_interface logs here, as it will make this issue very long and hard to read!
If you are reporting a bug, _always_ include the mo_interface logs!
+10
View File
@@ -0,0 +1,10 @@
---
name: Dev Ticket
about: Reserved for development tasks and management.
title: ''
labels: Dev Ticket
assignees: ''
---
Task:
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: Feature Request
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+41
View File
@@ -0,0 +1,41 @@
---
name: Issue Report
about: Create an issue report.
title: ''
labels: issue report
assignees: ''
---
## The problem:
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 channel](https://discord.gg/5tCqt6V)
## To Reproduce:
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
## Environment:
* Mod Organizer Version that exhibits the issue:
* Last Mod Organizer Verison that did not exhibit the issue (if applicable):
* Desktop OS/version used to run Mod Organizer:
## Details:
If necessary, describe the problem you have been experiencing with more details and pictures.
## Link to Mod Organizer logs:
To access the log files you can press the Open folder icon over the modlist and select "Open MO2 Logs folder". You should close MO2 before sending or examining the logs as they are finished writing only after the program is closed.
### USVFS:
Create a [GIST](https://gist.github.com) which is a paste of your USVFS logs, and link them here.
Do _NOT_ paste your full USVFS logs here, as it will make this issue very long and hard to read!
If you are reporting a bug, _always_ include the USVFS logs!
### MO Interface:
Create a [GIST](https://gist.github.com) which is a paste of your mo_interface logs, and link them here.
Do _NOT_ paste your full mo_interface logs here, as it will make this issue very long and hard to read!
If you are reporting a bug, _always_ include the mo_interface logs!
+3 -1
View File
@@ -20,7 +20,7 @@ Through the work of a few people of the community MO2 has come quite far, now it
## Reporting Issues:
Issues should be reported to the GitHub page or on the open discord server: [ModOrganizerDevs](https://discord.gg/vD2ZbfX). Here is also where dev builds are tested, bugs are reported and investigated, suggestions are discussed and a lot more.
Credits to Tannin, LePresidente, Silarn, erasmux, AL12 and many others for the development.
Credits to Tannin, LePresidente, Silarn, erasmux, AL12, LostDragonist, AnyOldName3 and many others for the development.
## Download Location
@@ -49,6 +49,7 @@ Here is a complete list:
* https://github.com/Modorganizer2/modorganizer-check_fnis
* https://github.com/Modorganizer2/modorganizer-diagnose_basic
* https://github.com/Modorganizer2/modorganizer-esptk
* https://github.com/ModOrganizer2/modorganizer-fnistool
* https://github.com/Modorganizer2/modorganizer-helper
* https://github.com/Modorganizer2/modorganizer-game_fallout3
* https://github.com/Modorganizer2/modorganizer-game_fallout4
@@ -60,6 +61,7 @@ Here is a complete list:
* https://github.com/Modorganizer2/modorganizer-game_oblivion
* https://github.com/Modorganizer2/modorganizer-game_skyrim
* https://github.com/Modorganizer2/modorganizer-game_skyrimSE
* https://github.com/ModOrganizer2/modorganizer-game_skyrimVR
* https://github.com/Modorganizer2/modorganizer-game_ttw
* https://github.com/Modorganizer2/modorganizer-installer_bain
* https://github.com/Modorganizer2/modorganizer-installer_bundle
+15 -5
View File
@@ -37,6 +37,7 @@ SET(organizer_SRCS
modinfoforeign.cpp
modinfooverwrite.cpp
modinforegular.cpp
modinfoseparator.cpp
modinfowithconflictinfo.cpp
messagedialog.cpp
mainwindow.cpp
@@ -53,7 +54,6 @@ SET(organizer_SRCS
executableslist.cpp
editexecutablesdialog.cpp
downloadmanager.cpp
downloadlistwidgetcompact.cpp
downloadlistwidget.cpp
downloadlistsortproxy.cpp
downloadlist.cpp
@@ -90,6 +90,10 @@ SET(organizer_SRCS
usvfsconnector.cpp
eventfilter.cpp
moshortcut.cpp
listdialog.cpp
lcdnumber.cpp
forcedloaddialog.cpp
forcedloaddialogwidget.cpp
shared/windows_error.cpp
shared/error_report.cpp
@@ -128,6 +132,7 @@ SET(organizer_HDRS
modinfoforeign.h
modinfooverwrite.h
modinforegular.h
modinfoseparator.h
modinfowithconflictinfo.h
messagedialog.h
mainwindow.h
@@ -143,7 +148,6 @@ SET(organizer_HDRS
executableslist.h
editexecutablesdialog.h
downloadmanager.h
downloadlistwidgetcompact.h
downloadlistwidget.h
downloadlistsortproxy.h
downloadlist.h
@@ -183,6 +187,10 @@ SET(organizer_HDRS
eventfilter.h
descriptionpage.h
moshortcut.h
listdialog.h
lcdnumber.h
forcedloaddialog.h
forcedloaddialogwidget.h
shared/windows_error.h
shared/error_report.h
@@ -212,8 +220,6 @@ SET(organizer_UIS
installdialog.ui
finddialog.ui
editexecutablesdialog.ui
downloadlistwidgetcompact.ui
downloadlistwidget.ui
credentialsdialog.ui
categoriesdialog.ui
activatemodsdialog.ui
@@ -223,6 +229,9 @@ SET(organizer_UIS
previewdialog.ui
browserdialog.ui
aboutdialog.ui
listdialog.ui
forcedloaddialog.ui
forcedloaddialogwidget.ui
)
SET(organizer_QRCS
@@ -288,7 +297,8 @@ INCLUDE_DIRECTORIES(${project_path}/uibase/src
${project_path}/esptk/src
${project_path}/archive/src
${project_path}/../usvfs/include
${project_path}/game_gamebryo/src
${project_path}/game_gamebryo/src/gamebryo
${project_path}/game_gamebryo/src/creation
${project_path}/game_features/src
${project_path}/githubpp/src
${LZ4_ROOT}/include)
+37 -12
View File
@@ -157,7 +157,7 @@
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Current Maintainers</string>
<string>Lead Developers/ Maintainers</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
@@ -175,11 +175,6 @@
<string notr="true">AL12</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Diana</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">erasmux</string>
@@ -190,6 +185,11 @@
<string notr="true">Silarn</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">LostDragonist</string>
</property>
</item>
</widget>
</item>
</layout>
@@ -198,17 +198,27 @@
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Major Contributors</string>
<string>Mo2 devs and Contributors</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7" stretch="0">
<item>
<widget class="QListWidget" name="listWidget_2">
<widget class="QListWidget" name="listWidget_3">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<item>
<property name="text">
<string notr="true">AnyOldName3 (Python Plugins)</string>
<string notr="true">AnyOldName3</string>
</property>
</item>
<item>
<property name="text">
<string>Project579</string>
</property>
</item>
<item>
<property name="text">
<string>przester</string>
</property>
</item>
</widget>
@@ -221,9 +231,9 @@
<property name="title">
<string>Translators</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<layout class="QVBoxLayout" name="verticalLayout_61">
<item>
<widget class="QListWidget" name="listWidget_2">
<widget class="QListWidget" name="listWidget_4">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
@@ -305,6 +315,11 @@
<string>Brgodfx (Portuguese)</string>
</property>
</item>
<item>
<property name="text">
<string>zDas (Portuguese)</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">tokcdk (Russian)</string>
@@ -325,6 +340,11 @@
<string>Jax (Swedish)</string>
</property>
</item>
<item>
<property name="text">
<string>yohru (Japanese)</string>
</property>
</item>
<item>
<property name="text">
<string>...and all other Transifex contributors!</string>
@@ -343,12 +363,17 @@
<property name="title">
<string>Other Supporters &amp;&amp; Contributors</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<layout class="QVBoxLayout" name="verticalLayout_71">
<item>
<widget class="QListWidget" name="listWidget">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<item>
<property name="text">
<string>Tannin (Original Creator)</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">blacksol</string>
+2 -2
View File
@@ -88,7 +88,7 @@ public:
return temp.replace(tagIter->second.first, QString("<font style=\"color: #%1;\">%2</font>").arg(color, content));
}
} else {
qWarning("don't know how to deal with tag %s", qPrintable(tagName));
qWarning("don't know how to deal with tag %s", qUtf8Printable(tagName));
}
} else {
if (tagName == "*") {
@@ -100,7 +100,7 @@ public:
// expression doesn't match. either the input string is invalid
// or the expression is
qWarning("%s doesn't match the expression for %s",
temp.toUtf8().constData(), tagName.toUtf8().constData());
qUtf8Printable(temp), qUtf8Printable(tagName));
length = 0;
return QString();
}
+6 -6
View File
@@ -72,7 +72,7 @@ void CategoryFactory::loadCategories()
bool ok = false;
int temp = iter->toInt(&ok);
if (!ok) {
qCritical("invalid id %s", iter->constData());
qCritical("invalid category id %s", iter->constData());
}
nexusIDs.push_back(temp);
}
@@ -268,7 +268,7 @@ void CategoryFactory::loadDefaultCategories()
int CategoryFactory::getParentID(unsigned int index) const
{
if (index >= m_Categories.size()) {
throw MyException(QObject::tr("invalid index %1").arg(index));
throw MyException(QObject::tr("invalid category index: %1").arg(index));
}
return m_Categories[index].m_ParentID;
@@ -303,7 +303,7 @@ bool CategoryFactory::isDecendantOf(int id, int parentID) const
bool CategoryFactory::hasChildren(unsigned int index) const
{
if (index >= m_Categories.size()) {
throw MyException(QObject::tr("invalid index %1").arg(index));
throw MyException(QObject::tr("invalid category index: %1").arg(index));
}
return m_Categories[index].m_HasChildren;
@@ -313,7 +313,7 @@ bool CategoryFactory::hasChildren(unsigned int index) const
QString CategoryFactory::getCategoryName(unsigned int index) const
{
if (index >= m_Categories.size()) {
throw MyException(QObject::tr("invalid index %1").arg(index));
throw MyException(QObject::tr("invalid category index: %1").arg(index));
}
return m_Categories[index].m_Name;
@@ -323,7 +323,7 @@ QString CategoryFactory::getCategoryName(unsigned int index) const
int CategoryFactory::getCategoryID(unsigned int index) const
{
if (index >= m_Categories.size()) {
throw MyException(QObject::tr("invalid index %1").arg(index));
throw MyException(QObject::tr("invalid category index: %1").arg(index));
}
return m_Categories[index].m_ID;
@@ -334,7 +334,7 @@ int CategoryFactory::getCategoryIndex(int ID) const
{
std::map<int, unsigned int>::const_iterator iter = m_IDMap.find(ID);
if (iter == m_IDMap.end()) {
throw MyException(QObject::tr("invalid category id %1").arg(ID));
throw MyException(QObject::tr("invalid category id: %1").arg(ID));
}
return iter->second;
}
+4 -2
View File
@@ -47,8 +47,10 @@ public:
static const int CATEGORY_SPECIAL_NOCATEGORY = 10003;
static const int CATEGORY_SPECIAL_CONFLICT = 10004;
static const int CATEGORY_SPECIAL_NOTENDORSED = 10005;
static const int CATEGORY_SPECIAL_MANAGED = 10006;
static const int CATEGORY_SPECIAL_UNMANAGED = 10007;
static const int CATEGORY_SPECIAL_BACKUP = 10006;
static const int CATEGORY_SPECIAL_MANAGED = 10007;
static const int CATEGORY_SPECIAL_UNMANAGED = 10008;
public:
+36 -5
View File
@@ -23,10 +23,13 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "utility.h"
#include "report.h"
#include "modinfo.h"
#include "settings.h"
#include <QApplication>
#include <QDir>
#include <QString>
#include <QTextCodec>
#include <gameplugins.h>
using namespace MOBase;
@@ -83,13 +86,29 @@ void DirectoryRefresher::addModBSAToStructure(DirectoryEntry *directoryStructure
int priority, const QString &directory, const QStringList &archives)
{
std::wstring directoryW = ToWString(QDir::toNativeSeparators(directory));
IPluginGame *game = qApp->property("managed_game").value<IPluginGame*>();
GamePlugins *gamePlugins = game->feature<GamePlugins>();
QStringList loadOrder = QStringList();
gamePlugins->getLoadOrder(loadOrder);
for (const QString &archive : archives) {
QFileInfo fileInfo(archive);
if (m_EnabledArchives.find(fileInfo.fileName()) != m_EnabledArchives.end()) {
int order = -1;
for (auto plugin : loadOrder)
{
QString name = plugin.left(plugin.size() - 4);
if (fileInfo.fileName().startsWith(name + " - ", Qt::CaseInsensitive) || fileInfo.fileName().startsWith(name + ".", Qt::CaseInsensitive)) {
order = loadOrder.indexOf(plugin);
}
}
try {
//directoryStructure->addFromBSA(ToWString(modName), directoryW,
// ToWString(QDir::toNativeSeparators(fileInfo.absoluteFilePath())), priority);
IPluginGame *game = qApp->property("managed_game").value<IPluginGame*>();
directoryStructure->addFromBSA(ToWString(modName), directoryW, ToWString(QDir::toNativeSeparators(fileInfo.absoluteFilePath())), priority, order);
} catch (const std::exception &e) {
throw MyException(tr("failed to parse bsa %1: %2").arg(archive, e.what()));
}
@@ -107,6 +126,10 @@ void DirectoryRefresher::addModFilesToStructure(DirectoryEntry *directoryStructu
// files to this mod
FilesOrigin &origin = directoryStructure->createOrigin(ToWString(modName), directoryW, priority);
for (const QString &filename : stealFiles) {
if (filename.isEmpty()) {
qWarning("Trying to find file with no name");
continue;
}
QFileInfo fileInfo(filename);
FileEntry::Ptr file = directoryStructure->findFile(ToWString(fileInfo.fileName()));
if (file.get() != nullptr) {
@@ -115,9 +138,12 @@ void DirectoryRefresher::addModFilesToStructure(DirectoryEntry *directoryStructu
file->removeOrigin(0);
}
origin.addFile(file->getIndex());
file->addOrigin(origin.getID(), file->getFileTime(), L"");
file->addOrigin(origin.getID(), file->getFileTime(), L"", -1);
} else {
qWarning("%s not found", qPrintable(fileInfo.fileName()));
QString warnStr = fileInfo.absolutePath();
if (warnStr.isEmpty())
warnStr = filename;
qWarning("file not found: %s", qUtf8Printable(warnStr));
}
}
} else {
@@ -133,7 +159,10 @@ void DirectoryRefresher::addModToStructure(DirectoryEntry *directoryStructure
, const QStringList &archives)
{
addModFilesToStructure(directoryStructure, modName, priority, directory, stealFiles);
addModBSAToStructure(directoryStructure, modName, priority, directory, archives);
if (Settings::instance().archiveParsing()) {
addModBSAToStructure(directoryStructure, modName, priority, directory, archives);
}
}
void DirectoryRefresher::refresh()
@@ -162,6 +191,8 @@ void DirectoryRefresher::refresh()
emit progress((i * 100) / static_cast<int>(m_Mods.size()) + 1);
}
m_DirectoryStructure->getFileRegister()->sortOrigins();
emit progress(100);
cleanStructure(m_DirectoryStructure);
+1
View File
@@ -27,6 +27,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <vector>
#include <set>
#include <tuple>
#include "profile.h"
/**
+86 -15
View File
@@ -20,6 +20,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "downloadlist.h"
#include "downloadmanager.h"
#include <QEvent>
#include <QColor>
#include <QIcon>
#include <QSortFilterProxyModel>
@@ -31,6 +33,11 @@ DownloadList::DownloadList(DownloadManager *manager, QObject *parent)
connect(m_Manager, SIGNAL(aboutToUpdate()), this, SLOT(aboutToUpdate()));
}
void DownloadList::setMetaDisplay(bool metaDisplay)
{
m_MetaDisplay = metaDisplay;
}
int DownloadList::rowCount(const QModelIndex&) const
{
@@ -62,22 +69,65 @@ QVariant DownloadList::headerData(int section, Qt::Orientation orientation, int
(orientation == Qt::Horizontal)) {
switch (section) {
case COL_NAME: return tr("Name");
case COL_FILETIME: return tr("Filetime");
case COL_SIZE: return tr("Size");
default: return tr("Done");
case COL_STATUS: return tr("Status");
case COL_FILETIME: return tr("Filetime");
default: return QVariant();
}
} else {
return QAbstractItemModel::headerData(section, orientation, role);
}
}
QVariant DownloadList::data(const QModelIndex &index, int role) const
{
bool pendingDownload = index.row() >= m_Manager->numTotalDownloads();
if (role == Qt::DisplayRole) {
return index.row();
if (pendingDownload) {
std::tuple<QString, int, int> nexusids = m_Manager->getPendingDownload(index.row() - m_Manager->numTotalDownloads());
switch (index.column()) {
case COL_NAME: return tr("< game %1 mod %2 file %3 >").arg(std::get<0>(nexusids)).arg(std::get<1>(nexusids)).arg(std::get<2>(nexusids));
case COL_SIZE: return tr("Unknown");
case COL_STATUS: return tr("Pending");
}
} else {
switch (index.column()) {
case COL_NAME: return m_MetaDisplay ? m_Manager->getDisplayName(index.row()) : m_Manager->getFileName(index.row());
case COL_SIZE: return sizeFormat(m_Manager->getFileSize(index.row()));
case COL_FILETIME: return m_Manager->getFileTime(index.row());
case COL_STATUS:
switch (m_Manager->getState(index.row())) {
// STATE_DOWNLOADING handled by DownloadProgressDelegate
case DownloadManager::STATE_STARTED: return tr("Started");
case DownloadManager::STATE_CANCELING: return tr("Canceling");
case DownloadManager::STATE_PAUSING: return tr("Pausing");
case DownloadManager::STATE_CANCELED: return tr("Canceled");
case DownloadManager::STATE_PAUSED: return tr("Paused");
case DownloadManager::STATE_ERROR: return tr("Error");
case DownloadManager::STATE_FETCHINGMODINFO: return tr("Fetching Info 1");
case DownloadManager::STATE_FETCHINGFILEINFO: return tr("Fetching Info 2");
case DownloadManager::STATE_READY: return tr("Downloaded");
case DownloadManager::STATE_INSTALLED: return tr("Installed");
case DownloadManager::STATE_UNINSTALLED: return tr("Uninstalled");
}
}
}
} else if (role == Qt::ForegroundRole && index.column() == COL_STATUS) {
if (pendingDownload) {
return QColor(Qt::darkBlue);
} else {
DownloadManager::DownloadState state = m_Manager->getState(index.row());
if (state == DownloadManager::STATE_READY)
return QColor(Qt::darkGreen);
else if (state == DownloadManager::STATE_UNINSTALLED)
return QColor(Qt::darkYellow);
else if (state == DownloadManager::STATE_PAUSED)
return QColor(Qt::darkRed);
}
} else if (role == Qt::ToolTipRole) {
if (index.row() < m_Manager->numTotalDownloads()) {
if (pendingDownload) {
return tr("Pending download");
} else {
QString text = m_Manager->getFileName(index.row()) + "\n";
if (m_Manager->isInfoIncomplete(index.row())) {
text += tr("Information missing, please select \"Query Info\" from the context menu to re-retrieve.");
@@ -86,12 +136,18 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const
return QString("%1 (ID %2) %3<br><span>%4</span>").arg(info->modName).arg(m_Manager->getModID(index.row())).arg(info->version.canonicalString()).arg(info->description);
}
return text;
} else {
return tr("pending download");
}
} else {
return QVariant();
} else if (role == Qt::DecorationRole && index.column() == COL_NAME) {
if (!pendingDownload && m_Manager->getState(index.row()) >= DownloadManager::STATE_READY
&& m_Manager->isInfoIncomplete(index.row()))
return QIcon(":/MO/gui/warning_16");
} else if (role == Qt::TextAlignmentRole) {
if (index.column() == COL_NAME)
return QVariant(Qt::AlignVCenter | Qt::AlignLeft);
else
return QVariant(Qt::AlignVCenter | Qt::AlignRight);
}
return QVariant();
}
@@ -103,13 +159,28 @@ void DownloadList::aboutToUpdate()
void DownloadList::update(int row)
{
if (row < 0) {
if (row < 0)
emit endResetModel();
} else if (row < this->rowCount()) {
#pragma message("updating only the one column is a hack")
emit dataChanged(this->index(row, 2, QModelIndex()), this->index(row, 2, QModelIndex()));
} else {
else if (row < this->rowCount())
emit dataChanged(this->index(row, 0, QModelIndex()), this->index(row, this->columnCount(QModelIndex())-1, QModelIndex()));
else
qCritical("invalid row %d in download list, update failed", row);
}
}
QString DownloadList::sizeFormat(quint64 size) const
{
qreal calc = size;
QStringList list;
list << "MB" << "GB" << "TB";
QStringListIterator i(list);
QString unit("KB");
calc /= 1024.0;
while (calc >= 1024.0 && i.hasNext()) {
unit = i.next();
calc /= 1024.0;
}
return QString().setNum(calc, 'f', 2) + " " + unit;
}
+6 -3
View File
@@ -22,7 +22,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QAbstractTableModel>
class DownloadManager;
@@ -38,9 +37,9 @@ public:
enum EColumn {
COL_NAME = 0,
COL_FILETIME,
COL_STATUS,
COL_SIZE
COL_SIZE,
COL_FILETIME
};
public:
@@ -53,6 +52,8 @@ public:
**/
explicit DownloadList(DownloadManager *manager, QObject *parent = 0);
void setMetaDisplay(bool metaDisplay);
/**
* @brief retrieve the number of rows to display. Invoked by Qt
*
@@ -91,7 +92,9 @@ public slots:
private:
DownloadManager *m_Manager;
bool m_MetaDisplay;
QString sizeFormat(quint64 size) const;
};
#endif // DOWNLOADLIST_H
+15 -12
View File
@@ -37,18 +37,23 @@ void DownloadListSortProxy::updateFilter(const QString &filter)
bool DownloadListSortProxy::lessThan(const QModelIndex &left,
const QModelIndex &right) const
{
int leftIndex = left.data().toInt();
int rightIndex = right.data().toInt();
int leftIndex = left.row();
int rightIndex = right.row();
if ((leftIndex < m_Manager->numTotalDownloads())
&& (rightIndex < m_Manager->numTotalDownloads())) {
if (left.column() == DownloadList::COL_NAME) {
return m_Manager->getFileName(leftIndex).compare(m_Manager->getFileName(rightIndex), Qt::CaseInsensitive) < 0;
} else if (left.column() == DownloadList::COL_FILETIME) {
return m_Manager->getFileTime(leftIndex) < m_Manager->getFileTime(rightIndex);
return m_Manager->getFileName(left.row()).compare(m_Manager->getFileName(right.row()), Qt::CaseInsensitive) < 0;
} else if (left.column() == DownloadList::COL_STATUS) {
return m_Manager->getState(leftIndex) < m_Manager->getState(rightIndex);
} else if(left.column() == DownloadList::COL_SIZE){
return m_Manager->getFileSize(leftIndex) < m_Manager->getFileSize(rightIndex);
DownloadManager::DownloadState leftState = m_Manager->getState(left.row());
DownloadManager::DownloadState rightState = m_Manager->getState(right.row());
if (leftState == rightState)
return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row());
else
return leftState > rightState;
} else if (left.column() == DownloadList::COL_SIZE) {
return m_Manager->getFileSize(left.row()) < m_Manager->getFileSize(right.row());
} else if (left.column() == DownloadList::COL_FILETIME) {
return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row());
} else {
return leftIndex < rightIndex;
}
@@ -63,11 +68,9 @@ bool DownloadListSortProxy::filterAcceptsRow(int sourceRow, const QModelIndex&)
if (m_CurrentFilter.length() == 0) {
return true;
} else if (sourceRow < m_Manager->numTotalDownloads()) {
int downloadIndex = sourceModel()->index(sourceRow, 0).data().toInt();
QString displayedName = Settings::instance().metaDownloads()
? m_Manager->getDisplayName(downloadIndex)
: m_Manager->getFileName(downloadIndex);
? m_Manager->getDisplayName(sourceRow)
: m_Manager->getFileName(sourceRow);
return displayedName.contains(m_CurrentFilter, Qt::CaseInsensitive);
} else {
return false;
+222 -285
View File
File diff suppressed because it is too large Load Diff
+44 -52
View File
@@ -21,49 +21,61 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#define DOWNLOADLISTWIDGET_H
#include "downloadmanager.h"
#include "downloadlist.h"
#include "downloadlistsortproxy.h"
#include <QWidget>
#include <QItemDelegate>
#include <QLabel>
#include <QProgressBar>
#include <QTreeView>
#include <QHeaderView>
#include <QStyledItemDelegate>
namespace Ui {
class DownloadListWidget;
class DownloadListWidget;
}
class DownloadListWidget : public QWidget
class DownloadProgressDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit DownloadListWidget(QWidget *parent = 0);
~DownloadListWidget();
private:
Ui::DownloadListWidget *ui;
};
class DownloadManager;
class DownloadListWidgetDelegate : public QItemDelegate
{
Q_OBJECT
public:
DownloadProgressDelegate(DownloadManager *manager, DownloadListSortProxy *sortProxy, QWidget *parent = 0) : QStyledItemDelegate(parent), m_Manager(manager), m_SortProxy(sortProxy) {}
DownloadListWidgetDelegate(DownloadManager *manager, bool metaDisplay, QTreeView *view, QObject *parent = 0);
~DownloadListWidgetDelegate();
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
DownloadManager *m_Manager;
DownloadListSortProxy *m_SortProxy;
};
void paintPendingDownload(int downloadIndex) const;
void paintRegularDownload(int downloadIndex) const;
class DownloadListHeader : public QHeaderView
{
Q_OBJECT
public:
explicit DownloadListHeader(Qt::Orientation orientation, QWidget *parent = nullptr) : QHeaderView(orientation, parent) {}
void customResizeSections();
private:
void mouseReleaseEvent(QMouseEvent *event) override;
};
class DownloadListWidget : public QTreeView
{
Q_OBJECT
public:
explicit DownloadListWidget(QWidget *parent = 0);
~DownloadListWidget();
void setManager(DownloadManager *manager);
void setSourceModel(DownloadList *sourceModel);
void setMetaDisplay(bool metaDisplay);
signals:
void installDownload(int index);
void queryInfo(int index);
void removeDownload(int index, bool deleteFile);
@@ -72,27 +84,20 @@ signals:
void pauseDownload(int index);
void resumeDownload(int index);
void visitOnNexus(int index);
void openFile(int index);
void openInDownloadsFolder(int index);
protected:
QString sizeFormat(quint64 size) const;
bool editorEvent(QEvent *event, QAbstractItemModel *model,
const QStyleOptionViewItem &option, const QModelIndex &index);
private:
void drawCache(QPainter *painter, const QStyleOptionViewItem &option, const QPixmap &cache) const;
private slots:
void onDoubleClick(const QModelIndex &index);
void onCustomContextMenu(const QPoint &point);
void onHeaderCustomContextMenu(const QPoint &point);
void issueInstall();
void issueDelete();
void issueRemoveFromView();
void issueRestoreToView();
void issueRestoreToViewAll();
void issueVisitOnNexus();
void issueOpenFile();
void issueOpenInDownloadsFolder();
void issueCancel();
void issuePause();
@@ -105,25 +110,12 @@ private slots:
void issueRemoveFromViewUninstalled();
void issueQueryInfo();
void stateChanged(int row, DownloadManager::DownloadState);
void resetCache(int);
private:
DownloadListWidget *m_ItemWidget;
DownloadManager *m_Manager;
bool m_MetaDisplay;
QLabel *m_NameLabel;
QLabel *m_SizeLabel;
QProgressBar *m_Progress;
QLabel *m_InstallLabel;
DownloadList *m_SourceModel = 0;
int m_ContextRow;
QTreeView *m_View;
mutable QMap<int, QPixmap> m_Cache;
void resizeEvent(QResizeEvent *event);
};
#endif // DOWNLOADLISTWIDGET_H
-140
View File
@@ -1,140 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DownloadListWidget</class>
<widget class="QWidget" name="DownloadListWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>315</width>
<height>81</height>
</rect>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="windowTitle">
<string>Placeholder</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="nameLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>323</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Placeholder</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="sizeLabel">
<property name="text">
<string notr="true">0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string notr="true">KB</string>
</property>
<property name="visible">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="installLabel">
<property name="text">
<string>Done - Double Click to install</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="downloadProgress">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
-407
View File
@@ -1,407 +0,0 @@
/*
Copyright (C) 2012 Sebastian Herbord. All rights reserved.
This file is part of Mod Organizer.
Mod Organizer is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Mod Organizer is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
#include "downloadlistwidgetcompact.h"
#include "ui_downloadlistwidgetcompact.h"
#include <QPainter>
#include <QMouseEvent>
#include <QMenu>
#include <QMessageBox>
#include <QSortFilterProxyModel>
DownloadListWidgetCompact::DownloadListWidgetCompact(QWidget *parent) :
QWidget(parent),
ui(new Ui::DownloadListWidgetCompact)
{
ui->setupUi(this);
}
DownloadListWidgetCompact::~DownloadListWidgetCompact()
{
delete ui;
}
DownloadListWidgetCompactDelegate::DownloadListWidgetCompactDelegate(DownloadManager *manager, bool metaDisplay, QTreeView *view, QObject *parent)
: QItemDelegate(parent)
, m_Manager(manager)
, m_MetaDisplay(metaDisplay)
, m_ItemWidget(new DownloadListWidgetCompact)
, m_View(view)
{
m_NameLabel = m_ItemWidget->findChild<QLabel*>("nameLabel");
m_SizeLabel = m_ItemWidget->findChild<QLabel*>("sizeLabel");
m_Progress = m_ItemWidget->findChild<QProgressBar*>("downloadProgress");
m_DoneLabel = m_ItemWidget->findChild<QLabel*>("doneLabel");
m_DoneLabel->setVisible(false);
connect(manager, SIGNAL(stateChanged(int,DownloadManager::DownloadState)),
this, SLOT(stateChanged(int,DownloadManager::DownloadState)));
connect(manager, SIGNAL(downloadRemoved(int)), this, SLOT(resetCache(int)));
}
DownloadListWidgetCompactDelegate::~DownloadListWidgetCompactDelegate()
{
delete m_ItemWidget;
}
void DownloadListWidgetCompactDelegate::stateChanged(int row,DownloadManager::DownloadState)
{
m_Cache.remove(row);
}
void DownloadListWidgetCompactDelegate::resetCache(int)
{
m_Cache.clear();
}
void DownloadListWidgetCompactDelegate::drawCache(QPainter *painter, const QStyleOptionViewItem &option, const QPixmap &cache) const
{
QRect rect = option.rect;
rect.setLeft(0);
rect.setWidth(m_View->columnWidth(0) + m_View->columnWidth(1) + m_View->columnWidth(2) + m_View->columnWidth(3));
painter->drawPixmap(rect, cache);
}
QString DownloadListWidgetCompactDelegate::sizeFormat(quint64 size) const
{
qreal calc = size;
QStringList list;
list << "KB" << "MB" << "GB" << "TB";
QStringListIterator i(list);
QString unit("byte(s)");
while (calc >= 1024.0 && i.hasNext())
{
unit = i.next();
calc /= 1024.0;
}
return QString().setNum(calc, 'f', 2) + " " + unit;
}
void DownloadListWidgetCompactDelegate::paintPendingDownload(int downloadIndex) const
{
std::tuple<QString, int, int> nexusids = m_Manager->getPendingDownload(downloadIndex);
m_NameLabel->setText(tr("< game %1 mod %2 file %3 >").arg(std::get<0>(nexusids)).arg(std::get<1>(nexusids)).arg(std::get<2>(nexusids)));
//if (m_SizeLabel != nullptr) {
// m_SizeLabel->setText("???");
//}
m_DoneLabel->setVisible(true);
m_DoneLabel->setText(tr("Pending"));
m_Progress->setVisible(false);
}
void DownloadListWidgetCompactDelegate::paintRegularDownload(int downloadIndex) const
{
QString name = m_MetaDisplay ? m_Manager->getDisplayName(downloadIndex) : m_Manager->getFileName(downloadIndex);
if (name.length() > 53) {
name.truncate(50);
name.append("...");
}
m_NameLabel->setText(name);
DownloadManager::DownloadState state = m_Manager->getState(downloadIndex);
if (m_SizeLabel != nullptr) {
m_SizeLabel->setText(sizeFormat(m_Manager->getFileSize(downloadIndex)) + " ");
m_SizeLabel->setVisible(true);
}
//else {
// m_SizeLabel->setVisible(false);
//}
if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR) || (state == DownloadManager::STATE_PAUSING)) {
m_DoneLabel->setVisible(true);
m_Progress->setVisible(false);
m_DoneLabel->setText(QString("%1<img src=\":/MO/gui/inactive\">").arg(tr("Paused")));
} else if (state == DownloadManager::STATE_FETCHINGMODINFO) {
m_DoneLabel->setText(QString("%1").arg(tr("Fetching Info 1")));
} else if (state == DownloadManager::STATE_FETCHINGFILEINFO) {
m_DoneLabel->setText(QString("%1").arg(tr("Fetching Info 2")));
} else if (state >= DownloadManager::STATE_READY) {
m_DoneLabel->setVisible(true);
m_Progress->setVisible(false);
if (state == DownloadManager::STATE_INSTALLED) {
m_DoneLabel->setText(QString("%1<img src=\":/MO/gui/check\">").arg(tr("Installed")));
} else if (state == DownloadManager::STATE_UNINSTALLED) {
m_DoneLabel->setText(QString("%1<img src=\":/MO/gui/awaiting\">").arg(tr("Uninstalled")));
} else {
m_DoneLabel->setText(QString("%1<img src=\":/MO/gui/active\">").arg(tr("Done")));
}
if (m_Manager->isInfoIncomplete(downloadIndex)) {
m_NameLabel->setText("<img src=\":/MO/gui/warning_16\"/> " + m_NameLabel->text());
}
} else {
m_DoneLabel->setVisible(false);
m_Progress->setVisible(true);
m_Progress->setValue(m_Manager->getProgress(downloadIndex).first);
m_Progress->setFormat(m_Manager->getProgress(downloadIndex).second);
}
}
void DownloadListWidgetCompactDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
#pragma message("This is quite costy - room for optimization?")
try {
auto iter = m_Cache.find(index.row());
if (iter != m_Cache.end()) {
drawCache(painter, option, *iter);
return;
}
m_ItemWidget->resize(QSize(m_View->columnWidth(0) + m_View->columnWidth(1) + m_View->columnWidth(2) + m_View->columnWidth(3), option.rect.height()));
if (index.row() % 2 == 1) {
m_ItemWidget->setBackgroundRole(QPalette::AlternateBase);
} else {
m_ItemWidget->setBackgroundRole(QPalette::Base);
}
int downloadIndex = index.data().toInt();
if (downloadIndex >= m_Manager->numTotalDownloads()) {
paintPendingDownload(downloadIndex - m_Manager->numTotalDownloads());
} else {
paintRegularDownload(downloadIndex);
}
#pragma message("caching disabled because changes in the list (including resorting) doesn't work correctly")
if (false) {
// if (state >= DownloadManager::STATE_READY) {
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
QPixmap cache = m_ItemWidget->grab();
#else
QPixmap cache = QPixmap::grabWidget(m_ItemWidget);
#endif
m_Cache[index.row()] = cache;
drawCache(painter, option, cache);
} else {
painter->save();
painter->translate(QPoint(0, option.rect.topLeft().y()));
m_ItemWidget->render(painter);
painter->restore();
}
} catch (const std::exception &e) {
qCritical("failed to paint download list item %d: %s", index.row(), e.what());
}
}
QSize DownloadListWidgetCompactDelegate::sizeHint(const QStyleOptionViewItem&, const QModelIndex&) const
{
const int width = m_ItemWidget->minimumWidth();
const int height = m_ItemWidget->height();
return QSize(width, height);
}
void DownloadListWidgetCompactDelegate::issueInstall()
{
emit installDownload(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issueQueryInfo()
{
emit queryInfo(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issueDelete()
{
if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will permanently delete the selected download."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(m_ContextIndex.row(), true);
}
}
void DownloadListWidgetCompactDelegate::issueRemoveFromView()
{
emit removeDownload(m_ContextIndex.row(), false);
}
void DownloadListWidgetCompactDelegate::issueVisitOnNexus()
{
emit visitOnNexus(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issueOpenInDownloadsFolder()
{
emit openInDownloadsFolder(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issueRestoreToView()
{
emit restoreDownload(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issueRestoreToViewAll()
{
emit restoreDownload(-1);
}
void DownloadListWidgetCompactDelegate::issueCancel()
{
emit cancelDownload(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issuePause()
{
emit pauseDownload(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issueResume()
{
emit resumeDownload(m_ContextIndex.row());
}
void DownloadListWidgetCompactDelegate::issueDeleteAll()
{
if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all finished downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-1, true);
}
}
void DownloadListWidgetCompactDelegate::issueDeleteCompleted()
{
if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all installed downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-2, true);
}
}
void DownloadListWidgetCompactDelegate::issueDeleteUninstalled()
{
if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will remove all uninstalled downloads from this list and from disk."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-3, true);
}
}
void DownloadListWidgetCompactDelegate::issueRemoveFromViewAll()
{
if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will permanently remove all finished downloads from this list (but NOT from disk)."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-1, false);
}
}
void DownloadListWidgetCompactDelegate::issueRemoveFromViewCompleted()
{
if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will permanently remove all installed downloads from this list (but NOT from disk)."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-2, false);
}
}
void DownloadListWidgetCompactDelegate::issueRemoveFromViewUninstalled()
{
if (QMessageBox::question(nullptr, tr("Are you sure?"),
tr("This will permanently remove all uninstalled downloads from this list (but NOT from disk)."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
emit removeDownload(-3, false);
}
}
bool DownloadListWidgetCompactDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
const QStyleOptionViewItem &option, const QModelIndex &index)
{
try {
if (event->type() == QEvent::MouseButtonDblClick) {
QModelIndex sourceIndex = qobject_cast<QSortFilterProxyModel*>(model)->mapToSource(index);
if (m_Manager->getState(sourceIndex.row()) >= DownloadManager::STATE_READY) {
emit installDownload(sourceIndex.row());
} else if ((m_Manager->getState(sourceIndex.row()) >= DownloadManager::STATE_PAUSED) || (m_Manager->getState(sourceIndex.row()) == DownloadManager::STATE_PAUSING)) {
emit resumeDownload(sourceIndex.row());
}
return true;
} else if (event->type() == QEvent::MouseButtonRelease) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::RightButton) {
QMenu menu;
bool hidden = false;
m_ContextIndex = qobject_cast<QSortFilterProxyModel*>(model)->mapToSource(index);
if (m_ContextIndex.row() < m_Manager->numTotalDownloads()) {
DownloadManager::DownloadState state = m_Manager->getState(m_ContextIndex.row());
hidden = m_Manager->isHidden(m_ContextIndex.row());
if (state >= DownloadManager::STATE_READY) {
menu.addAction(tr("Install"), this, SLOT(issueInstall()));
if (m_Manager->isInfoIncomplete(m_ContextIndex.row())) {
menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
}else {
menu.addAction(tr("Visit on Nexus"), this, SLOT(issueVisitOnNexus()));
}
menu.addAction(tr("Show in Folder"), this, SLOT(issueOpenInDownloadsFolder()));
menu.addSeparator();
menu.addAction(tr("Delete"), this, SLOT(issueDelete()));
if (hidden) {
menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView()));
} else {
menu.addAction(tr("Hide"), this, SLOT(issueRemoveFromView()));
}
} else if (state == DownloadManager::STATE_DOWNLOADING){
menu.addAction(tr("Cancel"), this, SLOT(issueCancel()));
menu.addAction(tr("Pause"), this, SLOT(issuePause()));
menu.addAction(tr("Show in Folder"), this, SLOT(issueOpenInDownloadsFolder()));
} else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR) || (state == DownloadManager::STATE_PAUSING)) {
menu.addAction(tr("Remove"), this, SLOT(issueDelete()));
menu.addAction(tr("Resume"), this, SLOT(issueResume()));
menu.addAction(tr("Show in Folder"), this, SLOT(issueOpenInDownloadsFolder()));
}
menu.addSeparator();
}
menu.addAction(tr("Delete Installed..."), this, SLOT(issueDeleteCompleted()));
menu.addAction(tr("Delete Uninstalled..."), this, SLOT(issueDeleteUninstalled()));
menu.addAction(tr("Delete All..."), this, SLOT(issueDeleteAll()));
if (!hidden) {
menu.addSeparator();
menu.addAction(tr("Hide Installed..."), this, SLOT(issueRemoveFromViewCompleted()));
menu.addAction(tr("Hide Uninstalled..."), this, SLOT(issueRemoveFromViewUninstalled()));
menu.addAction(tr("Hide All..."), this, SLOT(issueRemoveFromViewAll()));
}
if (hidden) {
menu.addSeparator();
menu.addAction(tr("Un-Hide All..."), this, SLOT(issueRestoreToViewAll()));
}
menu.exec(mouseEvent->globalPos());
event->accept();
return false;
}
}
} catch (const std::exception &e) {
qCritical("failed to handle editor event: %s", e.what());
}
return QItemDelegate::editorEvent(event, model, option, index);
}

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