unitycoder / UnityLauncherPro

Unity Hub Alternative Project Launcher with time saving features!
MIT License
490 stars 56 forks source link

Enhance project list functions: group and drag. #158

Open zwcloud opened 4 months ago

zwcloud commented 4 months ago

Is there a plan/WIP/fork to add following features to UnityLanuncherPro?

  1. grouping projects
  2. drag to re-order project list
  3. select multiple projects in the list and
    • drag to re-order
    • remove them via a context menu
    • drag into a group

I can create a pull request to implement them, but I don't have much time to read the code from zero. Any hints on how to implement those functions? I know some WPF and understand MVVM.

Update: I observed that the project list is kept in sync with UnityHub, this is really an obstacle of better Unity launcher. Can we use a stand-alone project list?

unitycoder commented 4 months ago

No plans, multi-select to remove sounds useful, although it might cause several changes, since it how expects to get single project for selections in most places..

Yes, project list comes from Hub registry, but there is also separate list saved into Settings (Settings.Default.projectPaths), which can hold any additional projects.

Grouping: What would be the use-case or benefit from it?

also, Tagging or Category was mentioned in few comments earlier, which could be useful (for example to show only "Work" projects) How groups would be presented in the datagrid? (or would it be more like tree-list, with 1 level?)

Re-order: Same here, what use case or benefit?

Adding favorite projects has been requested earlier, would this be similar idea? (to drag important projects to top?)

Sorting projects happens in "void SortHandlerRecentProjects and public class CustomProjectSort", so custom sorting could be implemented around there.

also, where user would select this custom sorting mode? (if you want to enable sort by dragged order, vs. sort by date?)

zwcloud commented 4 months ago

Yes, project list comes from Hub registry, but there is also separate list saved into Settings (Settings.Default.projectPaths), which can hold any additional projects.

Create a "group" named "From UnityHub" for these projects.

Grouping: What would be the use-case or benefit from it?

Some user (plugin/asset developer, researchers and R&D engineers) need to manage a lot of projects. For example:

Group: Featured URP Demos

Group: Reference Game Projects

Group: Experiments

Group: Compability Test Projects

How groups would be presented in the datagrid? (or would it be more like tree-list, with 1 level?)

We can apply custom sorting and grouping to datagrid if it works as expected. DataGrid does support grouping.

Tagging or Category was mentioned in few comments earlier, which could be useful (for example to show only "Work" projects)

I agree, tagging or category is useful when trying to find a project of specific properties.

Re-order: Same here, what use case or benefit?

When added a project to the list, if PackageTestProject_2022.3 is added before/after PackageTestProject_2020.3 and the list isn't ordered as expected ASC/DESC. When I want to order the list by Unity version in project's name, I can just drag to reorder them. With current UnityLauncherPro, I need to remove and add in order, which is tedious.

Adding favorite projects has been requested earlier, would this be similar idea? (to drag important projects to top?)

No. IMO, "pin" project on top is a better solution, like Unity forum/discussions.

also, where user would select this custom sorting mode? (if you want to enable sort by dragged order, vs. sort by date?)

Add a ComboBox to choose sorting mode: Custom, By Date, By Name, ...

unitycoder commented 4 months ago

good info, thanks!

and yes, Pin to top would be useful definitely.

Personally i'd prefer using non-grouped projects, so would be nice if its possible to have both supported in the datagrid? then have new option in settings. ("[x] enable project grouping" or so)

of course if you want to test these features in fork, then would be easier to see how it feels to use.