diumenge, 14 d’agost del 2016

#12 Weekly report

Hello everyone,

this Week I've implemented the last feature for this GSoC. I created saved queries where the user can save the current query, sort order, scroll position and selected items. With this the DJ can easy save the current state, find something and then restore the previous state.

Now the search bar has three icons instead of the only one that was there for the moment. From left to right there's the clear button, save button and restore button.


Also, I published the pull request into GitHub (https://github.com/mixxxdj/mixxx/pull/991) and all the Mixxx testers helped me notice many bugs which I had to solve (and I'm still solving). There's a big list of bugs and one by one I'm fixing them.


divendres, 5 d’agost del 2016

#11 Weekly report

Hello everyone,

during this week I've been adding the option to change the LibraryFeatures' icons through the skin, allowing the skin designer to set a proper color that matches with the skin. To set this color the skin designer needs to add the <LibraryIconsColor> in the skin root here's an example:




which produces the following skin:


Also now the breadcrumbs have the feature icon too to help the user understand how the two (or more) panes work in the new Mixxx library layout.


Also now there's the option to hide the text in the sidebar icons allowing to reduce the space the buttons take from the screen.




dissabte, 16 de juliol del 2016

#10 Weekly report

Hello everyone,

this week I've been implementing a new feature in Mixxx and I have been fixing the feature from the last week (the new library tree).

With the Library tree we had some problems with the capital letters sorting. There was a problem when sorting special letters like Ö or À. This letters were sorted in SQLite in the following way. A-Z, À, Ö... so we had to use the localeAwareCompare function to make sure that the letters are sorted according to the user's locale. The problem didn't end here because to make a better grouping we also had to remove the special characters (e.g. Ö should become O) but after a bit of coding it worked.

I implemented too the "search helper" in the library tree, when a user clicks a item from the Library Tree a search query is generated and added in the search bar allowing the user to edit the query too, if the search query is an empty string now searches for IS NULL in the selected field too, here's an example query with a second level tree item:



Also in the Library Tree I added the cover arts which help the user when he is sorting by Album, here's a screenshot with the cover art in the tree:


And a new really (cool) feature was added, now when the user sorts a table, in the Scroll Bar the capital letters of the current sorting column appear. For example if I sort by Artist then the first letter of all the artists will appear in the Scroll Bar and if the user clicks a letter it goes directly to the letter position. In this screenshot I have sorted by artist and the letters can be seen in the scroll bar in the right position.


diumenge, 10 de juliol del 2016

#9 Weekly report

Hi everyone,
This week I've published the pull request into the master branch
(https://github.com/mixxxdj/mixxx/pull/975) so this means that I've been fixing all the bugs that have been found.
Here's a small list of fixes:
  • Browse view was not doing anything when clicking the items of the tree. 
  • Right click in AutoDJ > Crates did not reveal a menu now it shows the "Add crate as track source" and "Remove crate as track source" menu
  • Library tab was showing controls if the main Library item was selected allowing to "Unhide" items already unhidden. 
  • In the sidebar now all items have a title to identify which is shown in the expanded sidebar


Also during this week I've been discussing with my mentor about the future steps for the project.
The next step is to create a Clementine like tree allowing the user to filter the tracks. The difference between the original Clementine tree and the one that will be implemented in Mixxx is that the second one won't replace the existing filtering options in Mixxx. The tree will show the artists, albums or genres grouped (like Clementine does) but when the user clicks an item it will apply the filter in the search box with a Mixxx search query (https://www.mixxx.org/manual/latest/chapters/library.html#using-search-operators) this allows the user to show only tracks from a certain artist or from a certain album.

Current Tree implementation

dissabte, 2 de juliol del 2016

#8 Weekly report

Hello everyone,

this week I've been cleaning the code preparing it for a master pull request. Many issues have been found and fixed. Also earlier this week with my mentor we discussed in implementing a plugin system for the LibraryFeatures in some features to allow a future addition of features without a compatible license.

Also I've been doing the following:


  • Move bindWidget function to createWidget function. This was to have more control in which widgets are added and with this change now the switchToView() function can be used with a pointer instead of a QString.
  • Allow features to call library functions directly. Now features receive a pointer to the Library and it allows the features to interact directly with the Library, removing the hard to follow signals.
  • Create WBreadCrumb to show a bread crumb from a TreeItem
  • Add breadcrumbs in the skins to help the user to see which feature is in each pane widget.
  • Fixing CSS issues with the new panes layout in all the Three skins
  • Removing unnecessary pointers and connections from some dialogs in LibraryFeatures
  • Removing some up-casting. This is a potential source of errors.
  • Added new focus change behavior. Now when the user selects an item from the SidebarExpanded the focus change works too.
  • Fix potential null pointers. Now QPointer is used and everytime a skin pointer is used .isNull() is used to check the pointer has not been deleted by a skin reload.
All the upcoming changes in the Library Layout Redesign can be found in this branch:

Also the discussion thread about this changes is here:


diumenge, 26 de juny del 2016

#7 Weekly report

Hello everyone,

this week have been the Midterm evaluations and everything in the schedule was working. I spend many time of this week studying for my last exams (electric engineering and logic) and I finally finished my 3rd course of engineering.

Also, I added the option to drag and drop from one table to another making the two (or more) panes layout more useful. I started too to code a breadcrumb for the panes that should allow the user to see what feature is shown in each pane.

Also talking with my mentor we Decided to pave the way to add features as plugins through the LibraryFeature interface and maybe a factory system.

divendres, 17 de juny del 2016

#6 Weekly report

Hi everyone,

this week has been a coding week. I fixed some of the last week bugs and added some new things. I implemented the following:


  • Fix bug with SidebarExpanded not focusing some panes.
  • Design new pane focus implementation as there can be multiple options where it can be changed the focus without the user doing it explicitly.
  • Implement new focus automatically switching and allowing the user a more confortable focus change
  • Add new LibraryLayout to LateNight skin
  • Add more evident focus in the panes this should also solve https://bugs.launchpad.net/mixxx/+bug/1584613
  • Add scrollbar to AutoDJ buttons and change space in Deere skin
  • Add library root node
  • Allow to right click in playlists/crates empty area to add a new playlist/crate
  • Fix missing treeview in Browse / Rhythmbox
  • Fix minimum track table width being to big: this was due the already existing Buttons in the AutoDj like features. Currently there are a couple still to be removed
  • Fix selection of the track table jumping around when the Library button is clicked repeatedly, this was due the Library was always sending the activate() signal to the LibraryFeatures although there were the currently shown feature.
  • Fixed Sidebar buttons chopped in some languages, this was due to the buttons had a fixed width when I added them in the Deere skin, now their size is the minimum needed size to be shown.
As I commented in the list we added a new feature focus behavior. Now all features have their "featureFocus" which helps the features know in which pane they are being shown. This is useful in features like AutoDJ or Library that only have to be shown once. When the user clicks a feature that it's already showing in some pane the focus changes to focus the pane where the feature is being shown. This is explained by Daniel in this pull request comment: https://github.com/daschuer/mixxx/pull/10#issuecomment-226400779 .
 

dimarts, 14 de juny del 2016

#5 Weekly report

Hi everyone,

I forgot last Friday to post my weekly report. This week I've been coding all the features discussed in the Mixxx-devel mailing list and the ones shown in the wiki. I added the following elements


  • Created the LibraryPaneManager class and implemented all the needed functions
  • Changed LibraryFeature class to respect the current design
  • Moved many functions from Library to LibraryPaneManager
  • Fixed broken things not compiling in all the features inheriting LibraryFeature
  • Added two panes example in the Deere skin
  • Separate AutoDJ widget in the SidebarExpanded Widget and the Pane widget

divendres, 3 de juny del 2016

#4 Weekly report

Hello everyone,

this Tuesday I finally finished classes and until June 23rd I will only have two or three exams per week and this will allow me to work more time in Mixxx.

During this week my mentor and I finished the idea of having multiple features showing at the same time in different panes. To handle this we created the LibraryViewManager concept and I wrote about it in the Mixxx-devel mailing list. Unfortunately the design was not correct and RJ made me realize about it. Many things that were going to be in the LibraryViewManager were already added in the Library class (which is in fact the Library Manager).

With this change I had to create another concept to manage the option to have multiple features showing at the same time in the library and I created the LibraryPaneManager that will handle all the
shown panes in the GUI. I spend some hours to finish the idea and I had to do several mockups, that are currently on the wiki.

 Then after I had to change many code that I've already added to fit the new idea and the new manager. The LibraryPaneManager idea is to have a manager for every pane shown in the Library GUI. Since there will be one left pane shared between all right panes the LibraryPaneManager purpose is to allow to add to the existing code as few changes as I can. And to do this I spend many time trying understand at 100% how the Library code works.

Here is an exploded drawing of how the features' widgets will go and how each pane manager will handle the right pane and the left pane.

divendres, 27 de maig del 2016

#3 Weekly report

During this week I have been doing design tasks. I started checking the viability of the WLibraryStack class and if it can be useful and for the moment it is coded but it is not very clear its utility in the current state.
Also, on Tuesday I had a chat with my mentor to decide how to add new Library Features and how to make a very useful and dynamic design. We decided (it was almost all his idea) to separate the future button bar and the tree view for some items. Also all features will have a left pane (with the tree or controls) and a right pane (with the table) and will be categorized as follows:

  • Auto DJ like features that have a track table (right pane) and a set of control widgets (left pane)
  • Crates like features with the tree (left pane) and the table (right pane)
  • Features without a track table like "notes"
At this point the project seems nearly the same as my original proposal but there will be another option allowing the user to view two features at once, it's inspired in the Nemo file manager and will have the same behavior, the left pane is shared between the two right panes and when the user focus one of them the left pane changes to the corresponding feature left pane. 

Here there's a mock up of the new features options: 



The implementation details can be found in the wiki page that is currently updated with all the ideas (http://www.mixxx.org/wiki/doku.php/library_layout_redesign)

Also after talking to my mentor we decided that during this week I will define weekly goals and a midterm goal to deliver this new features option. So I changed all the timeline in the wiki to match the current state of the project and also I had to update all the info that was outdated in the wiki to show the current idea.




diumenge, 22 de maig del 2016

#2 Weekly report

Hi everyone,
sorry for the delay in posting.
During this week I started creating a prototype for the WLibraryViewManager. With this prototype I created the WLibraryStack class, his purpose is to contain some Widgets inside as a stack. Then when I started coding I discovered the WWidgetStack from Mixxx and I decided to inherit this class and it worked well.
The WLibraryStack also allows the user to add widgets at rutime allowing to personalize the interface without having to edit the skin.xml file. With this WLibraryStack for the moment the WLibraryManager is not used because the Library class handles how the Treeview interacts with the Library table.
During all this process I had to take a look at all the mixxx code related to the library and how the interaction with the GUI happens.
The branch were I'm working currently is this:
https://github.com/jmigual/mixxx/tree/feature/libraryViewManager

Also, during this week I've finished the following bug that is merged now:

divendres, 13 de maig del 2016

#1 Weekly report

This week I continued with the development process. I started discussing with my mentor Daniel about implementation and design details of the new LibraryViewManager (I explained some of it in the previous weekly report).
The current idea of the LibraryViewManager will interact with a new interface called WLibraryFeature (different from LibraryFeature class). This Library Features will be organised inside of stacked widgets (WLibraryStack) and every one of this stacks will contain a couple of buttons allowing the user to add, remove or select Library Features. 

All of this allows not only the skin designer but also the user a lot of freedom in creating his custom layout. I've created a UML of this design:


Also during this week I worked with the following bugs:
This still have to be merged and it took more time than I expected because I had to learn how Mixxx stores the user data. I discovered the Mixxx.cfg file and the Settings table in the SQLite database. Also in this pull request ( https://github.com/mixxxdj/mixxx/pull/947)  we discussed how user data should be saved and finally.
I finished this bug that I started the last week and it's finally merged

diumenge, 8 de maig del 2016

#0 Weekly report

Hello everyone,

during this week I've been fixing some bugs recommended by my mentor, Daniel.

I've fixed the following bugs:


Also with Daniel we began to discuss the idea of creating a Manager class to control multiple elements in the Library GUI. The idea is to allow the skin designer to setup for example a Collapsed and an Expanded version of the LibrarySidebar and, with the Manager class, switch between this two elements. This is not only for the LibrarySidebar, the idea is to add it to the following elements:

  • LibrarySidebar
  • SearchBox
  • CoverArt
  • Library
After that, Daniel found that RJs has decided to create a Manager class for everything that needs to be managed (more info here: http://mixxx.org/wiki/doku.php/mixxx_init_refactor ) so we decided to adapt our Manager to this design creating the concept of the LibraryManager. The current LibraryManager has the following design:



Currently I am working on fixing this bug: https://bugs.launchpad.net/mixxx/+bug/1474098 and I am having some problems on saving an array to User Settings.

diumenge, 1 de maig del 2016

Hi Everyone

This blog will contain all the weekly updates from the GSoC project "Library Layout Redesign" from Mixxx organisation I hope you all enjoy it.