GSoC 2019: Work Product: Palette Accessibility
My project for GSoC 2019 is Palette Accessibility and this post gives a brief description of all the work that I have done during this time period. The new Palette is designed using a QTreeWidget and it can provide the Musescore users to quickly access the elements by utilizing the ability of the hierarchical view. My idea was to implement keyboard navigation functionality to the palette. Before, we get into the product details I would like to thank my mentor Peter Jonas and also all developers in the organization for their constant support and guidance.
First Evaluation Phase:
During the first phase, I was working on the QTreeView which represented the view to create a hierarchical representation of the palette items and a separate model to store the data of the elements. This will increase the flexibility of the palette and will also help future development much easier due to its high scalability. But due to increased difficulty in the process of making a model/view architecture, I had to go through various examples and make some Sample Models.
After getting some exposure to the model/view architecture and also working on the codebase for some time, I started working on the QTreeView to recreate the palette.
Commits for the Implementation of the TreeView on the Palette Box:
- 17-06-2019 3895e86 Add TreeView to paletteBox
- 18-06-2019 5511697 Fix:Add TreeView to Palette Box
- 20-06-2019 3354a33 [WIP]TreeView for Palette
Second Evaluation Phase:
Later due to the increase in the complexity of using the Model/View Architecture and after having some discussion with my mentor, I had to drop the idea of using the Model-View Programming and start using a QTreeWidget which has its own internal model. This helped a lot to reduce the complexity and make it easier to reimplement. I started the second phase by adding the QTreeWidget to the PaletteBox, then I added the palette Items which consisted of the Palette Elements. After that, I started to place the icons for each Palette Element and adjust the palette icons to fit in the grid. Meanwhile, I was able to implement keyboard navigation functionality. This will help to make the palette accessible to visually challenged users who rely on the keyboard.
Commits for the Implementation of the TreeWidget on the Palette Box:
- 21-07-2019 7ae4872 Reimplement Palette as a QTreeWidget
- 21-07-2019 febe85f Adjust Palette height whenever the width changes
- 21-07-2019 452a4ef Add constructor for PaletteList
- 21-07-2019 c7cc4a3 Set initial height of PaletteList
Commits for the Implementation of the Icons for the Palette Item:
- 21-07-2019 2c7cf66 Restore palette icons
- 21-07-2019 ad543ed Add extraMag and Mag
- 21-07-2019 9c9482f Fix PaletteItem Layout
Commits for the Implementation of Keyboard Navigation on the palette:
- 21-07-2019 4bd0485 Add keyboard navigation
Third Evaluation Phase:
I started the third phase of the project by reimplementing the ability to add the palette elements to the Score. I added three ways to implement this functionality:
1. Mouse double-Clicked
2. EnterKey Pressed
3. Drag and Drop
After implementing the function which helped the palette elements to be added to the Score, I started working on the right-click menu options for the palette which allows the users to customize the palette.
Commits for the Implementation of Adding the Palette elements to the score:
- 27-07-2019 ec537c9 Add mouse double-clicked method
- 05-08-2019 9040976 Add Enter-Key functionality
- 14-08-2019 8ddb41e Add Drag and Drop functionality
Revised Commit for adding the elements in the palette:
- 14-09-2019 95bc784 Add elements to the score
Commits for the Implementation of Right-Click Context Menu:
- 18-09-2019 f1f7309 [WIP]Add Context Menu
- 20-09-2019 9faaf88 Fix:Crash due to deletion of the elements
- 21-09-2019 57968bc Add More Elements feature
- 21-09-2019 49d46ef [WIP]Implement Options for palette item
- 25-09-2019 59c264d Implement menu options for Palette
Revised Commit for Right-Click Menu:
- 25-09-2019 55898c4 Add Right-Click Menus
I have completed all the main goals that need to be accomplished to get the palette running with keyboard navigation functionality. The keyboard navigation allows one to go through the grid of elements uniformly and will help visually challenged people to get to elements fast as they cannot see the grid layout, thus improving the palette accessibility. I have reimplemented the important features of the old version of the palette which includes the icons-display mode, drag and drop function, Mouse-Double clicked function and also a right-click context menu with some customization features enabled.
As of now, the PR is not merged and all the commits based on the project is given the link below
Link of the PR: https://github.com/musescore/MuseScore/pull/5135/
I would like to continue my work on musescore and improve my project for the ease of usability. Some of the features that can be implemented are:
- Search functionality:
This feature provides the ability to search for an element in the palette. This will help the users to get to the elements quickly.
- Multiple Workspaces:
MuseScore provides two preset workspaces: Basic (the default option) and Advanced (a version with more palettes and symbols). As of now, the new version of the palette has the ability to use the multiple workspaces but it is not as refined as the one in the old version.