The details of the API are in the `/docs/specsSettings-API.md` file.
The enums do not list all available settings, more are to be added as
the settings API replaces inline QSettings calls.
Them being in the overlay controller required them to be static, which
forces the compiler to give them a memory location at compile time. They
also don't really fit into the overlaycontroller.
Fixes
https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/issues/63
Removes the ability for end users to change logging settings. This was
deemed unnecessary because logging is a developer troubleshooting tool
and users being able to change it could almost only introduce problems.
People who want to change the logging settings can compile from source.
Since the OpenVR initialization code is no longer inside the
overlaycontroller there is no need for it to be available during object
construction. Therefore it doesn't make sense to have it be an object.
The shutdown call was completely removed because shutdowns are handled
by an OpenVR event that calls the relevant shutdown code. The destructor
for the old object was never called, removing it adds clarity to the
actual operation of the code and also removes unnecessary code.
Elements work like they've always done, this just moves the commonly
used components away from the global namespace.
The qmldir file still does something, although at this point it is
unknown exactly how it's used and whether or not it could be changed to
simplify imports across the block.
openvr_init was not in a namespace. This led to it being globally
available. This was not intended.
The solution to overlays not showing up in the bindings interface was
chosen for ease of implementation and relative ease of end user use.
The Kinect2VR project are using a solution where there is a button to
shutdown background mode and use scene mode temporarily. This did not
work for our project for unknown reasons. The IVRInput system would
become non responsive and spam error messages when VR was shut down.
Implementation is here:
https://github.com/sharkyh20/KinectToVR/blob/12aeb8b33ab20eeb588c72c5d5186dd4d87784d7/SFMLProject/inc/GUIHandler.h#L700
The command line flag will be represented as a .bat file for the end
user, like desktop mode and restarting the VR server.
When Valve solves the issue of overlays not showing up in the bindings
menu, the entire function can essentially be deleted.
Official issues here:
https://github.com/ValveSoftware/openvr/issues/914https://github.com/ValveSoftware/openvr/issues/926https://github.com/ValveSoftware/openvr/issues/879
It is also possible to make the app appear by changing the
C:\Program Files (x86)\Steam\config\vrappconfig\*.vrappconfig file for
the project to have a "last_launch_time" of something greater than zero.
From experimentation it seems that there's a cutoff time around 2 weeks
before the current time. Setting it to the day before seems to be a good bet.
(In unix time).
* use QStandardPaths to get resource locations
While this shouldn't change behaviour for windows, it allows installing the resource files seperate from the binary on unix systems
* initialize battery overlay handles to 0
* Move logging set up into own function
This does not affect the ability to log, the logging macros are
available globally.
* Clean up logging logic and add comments
The logic to find the logging location was broken, in that it always
placed the logs in the directory of the executable.
It was supposed to place the logs in
AppData/Roaming/matzman666/OpenVRAdvancedSettings/AdvancedSettings.log,
but it hasn't done this since at least git tag "v2.7". Since the change
hasn't been documented anywhere it is assumed to be an unintentional
regression.
The settings file is also currently placed in
AppData/Roaming/matzman666/OpenVRAdvancedSettings.ini, so this commit
undoes the probable regression until a strategy can be developed for
changing all paths at once.
* Move command line arg logging calls and add to manifest calls
The LOG_IF macros are cleaner than if blocks, and they do not need to be
in the middle of the Qt logic inside a giant try block.
* Remove unused QCoreApplication constructor in manifest logic
The object is not used in any of the manifest logic functions and
running without the remove/install manifest calls does not use it
either.
* Unindent logic in installManifest
The error checking was unnecessarily done in an else block. Moving it
into an if block and negating the result does the same but leaves the
rest of the logic at a much smaller indentation level.
* Change array in installManifest to be 0 intialized
Not zero initializing could lead to strange bugs if the terminating null
isn't there.
* Move manifest install/removal to separate function
The manifest handling is tangential to the actual main operation of the
program, hence moving it to a separate function improves readability of
the actual program.
The enum ReturnErrorCode has also been moved to the top in order to be
available to all functions. On introspection it is revealed that it
should always have been placed at the top.
* Unindent logic in removeManifest
The logic is unnecessarily indented, leading to harder to follow logic.
While the current logic isn't that hard to understand, it's better if it
follows the same rhythm as installManifest, which errors checks the same
way with a !QFile::exists( manifestQPath ).
* Move manifestPath out of install/removeManifest
Moving the variable outside of the functions reduces code duplication
and increases the versatility of the functions.
Variable was renamed from manifestQPath to manifestPath, because the Q
does not add anything to the name except (maybe wrongfully in the
future) typing a variable that has been typed with 'auto'.
The default variable has been removed, as it did not improve readability
at all.
* Rename installManifest to handleManifestInstallLogic
The new name better reflects the overall purpose. installManifest should
be a function that only installs the manifest.
* Move manifest related things into manifest namespace
* Move manifestInstallation logic into functions
The logic becomes clearer when replaced by function names instead of
just blocks of error checking.
* Refactor installManifest into separate functions
The uses for the removeManifest and installManifest functions could be
boiled down to three separate use cases:
* If the application was passed the "-installmanifest" arg:
Reinstall the manifest and enable application autostart.
* If the application was passed thed "-removemanifest" arg:
Remove the manifest.
* If the application was not passed "-desktop" and also not passed
"-nomanifest" (basically every start):
Install the manifest.
Where reinstalling means to remove the manifest if installed and then
install it.
The relatively complex logic in installManifest hid this logic behind
several if statements and changing what the "alreadyInstalled" bool
signified.
The refactored functions should make everything easier to understand.
* Add variable for manifest name
* Rename variables in main to camelCase
This appears to be the style chosen for the majority of the project.
* Change cerr to be LOG(ERROR) and add logging for manifest completion
The cerr calls are not likely to be seen by anybody. Logging them as
ERROR will make sure they are available for diagnostics.
* Add comments for new manifest functions
* Reorder namespaces and functions in main
Namespaces and functions are now ordered as they appear in main.
* Add static_cast to height and width in func call in main
width and height are "qreal" (typedef for double). Having them
implicitly cast to int leads to warnings on some compilers, and can lead
to doubt whether they're supposed to be converted.
* Move organizationName and applicationName into overlaycontroller.h
The string have been moved to static constexpr autos inside the
overlaycontroller.
Them remaining static means that they are included in the final binary,
even if they don't need to be included as static.
They should probably also not be directly gotten, instead being offered
up as static getters, but it's better to do them all at the same time in
a specific commit for that.
* Add comment to installApplicationManifest
Describing that OpenVR must be initialized before the function is
called.
* Change QApplication var name and add comments
The previous QApplication was named "a". This is obviously not
sufficient for such a large part of the application, even if the class
is rather boilerplate heavy.
* Add comments to Qt portions of main
Some things have been left uncommented. That's because I don't know what
it does.
* Change documentation for command line arguments, logging config
The information under the Desktop Mode header could be rolled under the
"-desktop" command line arg.
Support for the command line args of Easylogging++ and custom logging
files have not been supported for the original developer. Both should
probably be dropped in favor of having the same logging behavior for all
users.
* Remove error causing property from QML MyStackViewPage and PlayspacePage
The properties were causing an error message to be spammed in the log
QML QQuickText: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead.
and
QML RowLayout: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead.
Removing them fixed the spam and didn't noticeably change the appearance
of the pages.
logging.h previously had logic to enable debug logging even on release
builds. This logic was moved to the QMAKE file, hence the logging.h file
is no longer necessary.
apperror was shadowing another variable in the scope outside of the if
statement, leading to a warning.
Adding an underscore changes the var name without changing the meaning.
In the future a different structure should probably be chosen for the
statements.
The install/remove manifest logic in main is currently duplicated. This
bloats up main and creates unnecessarily large indented logic. The only
thing that is different between the two large if blocks is a single
function call.
Refactoring to test for which function to call at the latest possible
stage reduces code duplication.
The command line argument parsing is done in a giant for loop in the
main function. This presents readability and extension problems.
Refactor the big for loop into smaller loops inside the function.
In theory this will affect performance slightly at startup, but when considering
the very low amount of possible command line arguments (5, currently) and the low
amount of arguments being passed on a typical launch (0 or 1, mostly),
the readability improvements are very much worth it.
The string literals have also been moved to the "argument" namespace as
constexpr, in order to avoid potential typos in string literals.
Should the amount of command line arguments increase severely, it might
be necessary to create a structure with only one pass through the
argument loop, but such a situation is very unlikely.
When -desktop is given on the command line then the settings menu is shown on
the desktop instead of an vr overlay.
When -nosound is given on the command line then there are no sound
effects.
Added chaperone profiles
Added separate supersampling sliders for applications/compositor
Added asynchronous reprojection on/off switch
Merged in Microphone Control Overlay
Added Push-to-Talk profiles
Updated to OpenVR 1.0.3
Requires at least SteamVR beta 1477423729.