Ported this project to GitHub today, and externalised some of the internally developed projects that are capable of standing on their own two feet, to coincide with the existing qjsonmodel.py
project I've been using as well, creating a little library of re-usable Qt-components, built on Qt.py.
To catch up, I've spent the past 8 weeks working for a client on a project to build a new and improved application launcher, codenamed "launchapp2", to replace their current launcher called "launchapp". Over the coming 9 weeks, this is where I'll document the progress of this application as I bring it to completion.
Sadly, the 8 weeks of documentation is internal to the company and not suitable to publish, but I'll avoid referencing past discoveries and summarise the journey where relevant to ensure this repository of information accurately and completely captures the motivation behind the design decisions made.
In order to better facilitate a more interactive UI, I've refactored network and file-access away from the controller, and into the model and added a delegate for custom drawing and editing.
Before | After |
---|---|
|
|
Here's the current full list of todos that are about to turn into issues.
- Override Let the user override a package version with a Beta
- App Tab Fix tools-menu
- Isolate Tab Ctrl+Click on tab to hide all others
- Memcached Tab Inspect the current status of memcached
- User Preferences We're going to need a lot of user settings to accommodate for everyone's tastes and optimise everyones workflows.
- Allow multiple tabs Let the user decide whether or not to allow more than a single tab be visible at a time. Can help keep clutter down.
- Developer Mode Some UI items aren't relevant to the artist, such as picking a version of a given project. Relegate this to a "developer mode", similar to launchapp(1).
- Font Size Let the user adjust the global font size with a slider and Ctrl+Plus/Ctrl+Minus keys like in a webbrowser. This ties into the Theming support below.
- Save Layout There is a lot of flexibility in layouts, but would be even more useful if one could save a layout and restore it later, and export/import too. Since they're stored as plain-text, it should be relatively straightforward to pull off.
- Resolve and Threading At the moment, the GUI locks up on a long resolve. But resolves happen independently of the GUI and can safely happen in the background with a semi-interactive GUI.
- Formalise package metadata For
_apps
and_icons
; was thinking of making a.metadata = {}
variable in each package with optional data such as these. Don't think there's anything official provided by Rez, but if you know anything let met know! - Copy values from QJsonModel, such as the value of
PYTHONPATH
. Also copy dict as well, e.g.Copy Value
orCopy Dict
. - Make list out of PATH-like variables for QJsonModel, so the user can browse those more easily
- Visualise Errors Whenever an exception occurs, provide a visual hint that something has gone wrong, with aid towards how to address it.
- Variable CSS Inject %(variables)s into CSS so we can change things around, or use SCSS
- Dependency Graph Draw packages and their relationships in the launchapp, for debugging and a greater overview of what's happening. Implement this as a widget, so it could potentially also be used standalone, and contributed back to the Rez project (which currently uses an archaic non-interactive method of doing this)
- rezconfig Tab Visualise available options of the
rezconfig.py
, such aspackage_orderers
,package_filter
,local_packages_path
andrez_packages_path
- Packages Tab Improvements
- Right-click open path to package for debugging the
package.py
on disk (if stored on filesystem, could also come from e.g. database) - Disable package, click to temporarily disable the inclusion of a package
- Edited indicator, visually indicate whether a package is manually added or edited
- Total number of packages, to quickly guage number at a glance
- Right-click open path to package for debugging the
- Commands Tab Improvements Add more columns to Commands tab
- Running time
- Started time
- Bring to front
- Rename, to manage multiple sessions of the same app, e.g. modeling vs texturing
- Color, for user-customisation
- Apps Improvements Add columns to Apps
- Number of running instances e.g. (2)
- Right-click Command-line Let the user launch a command-line from any app (context), for debugging of e.g. PYTHONPATH
- Console Improvements
- Use QListView instead of QPlainText, for filtering and coloring
- Colors in Console for logging levels
- Filters in Console for logging levels
- Dynamic CSS Monitor CSS file for changes and automatically re-assign it to improve iteration time when working on themes
- Themed CSS The above could also be an entrypoint for editing theme colors interactively from within the GUI
- Dark theme
- Backdrop A larger piece of graphic for a given project. Like a banner of sorts.
- Startup animation Keep the user entertained as the initial project is resolved
- Focus states Turn focus events into states, for fine grained control over what's available when. E.g. custom buttons when editing environment
- Editable Environment Facilitate edits to an alredy resolved environment
- Usage tracking To assertain which features are used the most versus least, to focus attention and remove bloat
- Japanese Everything is setup to work with translation, just haven't put it in yet.
- Resolve Progress Bar A resolve is fast 98% of time time, but when it's not it can help having something to look at and estimate when it will finish
- Async Project Listing Whenever a new project is selected, a query is made onto disk which can take 1+ seconds, especially on a remote system.
- Taskbar Taskbar icon, with quick way of launching apps. Like current launch app.
- List for PATH-like varibales Make PATH variables into lists in QJsonModel
- Reload When working on a particular project, e.g. Alita, you may want to reload to the latest one. Currently, you can do that by re-selecting a project, but a reload button is more explicit. It isn't relevant to normal users though, so better put that in developer mode.
- Developer Mode setting To hide/unhide various advanced features, such as selecting a version of a project package
- Visually highlight edited requirements
- Clarify meaning of the icons up-top Via e.g. status-bar help or labels underneath icons
- Interactively edit
REZ_PACKAGE_PATH
Artists should only ever seeint
,ext
andtd
. And developers should be able to append their own~/packages
path for use during development. And, who knows, maybe there are other paths one would like to add? - Highlight Console on Error State Whenever an error has occurred that could potentially inhibit further use or in any way require an action from the user, visually indicate this by surrounding the Console Tab icon with something very visible, like a red outline. The Console would then also be able to tell the user more about the issue.
- Flash Tab Help the user understand when a tab requires attention, primarily the Console which should appear on error.
- Color Theme Per Tab Aid the user in understanding which tab is active, by giving each a "theme", like a stripe of color or background.
- Interactive Overrides Store user-overrides using the Command-pattern, such that they may be applied (or not) on-demand, visualised interactively and stored on disk for reuse on relaunch.
- Persistent console Store contents of console until a certain size or until the user clears it. Load it asynchonously too, to avoid it becoming an influence on startup time.
- Spotify-style heads-up message Whenever an error occurs in Spotify, e.g. no connection, no working sound device, the title-bar is enriched with a strongly visible message. We could use that too.