= GSoC 2021: First steps towards a new GRASS GIS Single-Window GUI = || Title: || '''First steps towards a new GRASS GIS Single-Window GUI''' || ||Student Name: || Linda Kladivova || ||Organization: || [http://www.osgeo.org OSGeo - Open Source Geospatial Foundation] || || Mentor Name: || Anna Petrasova, Martin Landa, Vaclav Petras, Stefan Blumentrath || || GSoC proposal: ||[https://summerofcode.withgoogle.com/dashboard/project/6059224263557120/details/ View proposal] || || !GitHub Repository: || [https://github.com/lindakladivova view repository] || == Abstract == This project will mainly focus on extensive Graphical User Interface (GUI) refactoring necessary to prepare GRASS GIS for Single-Window GUI. As the result, I will introduce a very simple Single-Window layout and importantly a good programming base allowing further convenient extension and improvement with additional functions. == Goal == The goal is to create a simple Single-Window GUI (the standard solution in most of the software) which ensures all panels in the form of dockable panes to be visible immediately after startup. Of course, especially long-term users can prefer the existing Multi-Window GUI, so the original option will be retained. For more information, please have a look at a separate page where I present a proposal in detail: https://trac.osgeo.org/grass/wiki/wxGUIDevelopment/SingleWindow. To sum up the schedule: From June 7th to June 20th (2 weeks), I plan to work on the GUI refactoring - separation of main GUI window code, creating a new Workspace Manager as well as a new Layer Manager class. From June 21st to July 11th (3 weeks) I plan to create a new Map Display panel needed for the Single-Window layout and to adapt toolbars in other panels (this would also be the topic for the first evaluation). From July 12th to July 25th (2 weeks) I will work on general factory class allowing me to preserve a Multi-Window layout as well as to create a new Single-Window layout. From July 26th to August 22th (4 weeks) I will work on the integration of all panels (Data, Display, Modules, Console, Python, Map Display notebook) to a basic Single-Window structure. == Timeline == {{{#!th style="background: #ddd" rowspan=2 '''Time Period''' }}} {{{#!th style="background: #ddd" colspan=2 '''Milestones''' }}} |----------------------- {{{#!th style="background: #ddd" Tasks }}} {{{#!th style="background: #ddd" Status }}} |----------------------- {{{#!td May 17 - 6 June \\ ''Community Bonding'' }}} {{{#!td - Introduce myself in dev list, get in contact with my mentors and discuss the design of functions - Prepare the wiki page about the project - Set up the !GitHub repository of the project - Familiarize with the object-oriented patterns in wxPython programming - Discuss the elements of the Single-Window layout and the necessary changes in GUI needed for implementing the proposed design - Discuss the elements of the startup window and get acquainted with the whole design (video call on May 14) - Contribute some feature related to refactoring }}} {{{#!td }}} |----------------------- {{{#!td June 7 - June 13 \\ ''Week 1'' }}} {{{#!td '''wxGUI refactoring:''' - Create separate class for workspace management - Separate functions related to the Display Panel into a separate class (main GUI script needs to be lightened) - Establishing all signals and solving the connection when creating a 3D tab }}} {{{#!td \\ OK \\ tbd \\ tbd \\ }}} |----------------------- {{{#!td June 14 - June 20 \\ ''Week 2'' }}} {{{#!td '''wxGUI refactoring:''' - Integrate of the Display toolbar into a new class related to the Display panel - Integrate and move layout functions and superior functions and handlers into the basic GUI frame class in the App directory (Layer Manager will take over the role of the Display tab) }}} {{{#!td }}} |----------------------- {{{#!td June 21 - June 27 \\ ''Week 3'' }}} {{{#!td '''Adapting toolbars in Display and Data panel:''' - Create vertical toolbar in Data panel - Create vertical toolbar in Display panel }}} {{{#!td }}} |----------------------- {{{#!td June 28 - July 4 \\ ''Week 4'' }}} {{{#!td '''Map Display notebook pane:''' - Define a Map Panel class - Integrate a Map Panel class to a new Map Display pane }}} {{{#!td }}} |----------------------- {{{#!td July5 - July 11 \\ ''Week 5'' }}} {{{#!td '''Map Display notebook pane:''' - Link the Map Display pane with Layer Manager tabs }}} {{{#!td }}} |----------------------- {{{#!td July 12 - July 18 \\ ''Week 6'' }}} {{{#!td '''Adapting the code for Single-Window GUI:''' - Create a new factory-pattern class - Adapt features related to adding and removing the 3D tab and 3D toolbar to the future option }}} {{{#!td evaluation }}} |----------------------- {{{#!td July 19 - July 25 \\ ''Week 7'' }}} {{{#!td '''Adapting the code for Single-Window GUI:''' - Adapt other functions requiring to switch to the Display tab for their operation to the Single-Window layout }}} {{{#!td }}} |----------------------- {{{#!td July 26 - August 1 \\ ''Week 8'' }}} {{{#!td '''Simple Single-Window GUI:''' - Add all panels to panes - Integrate all panes (Data, Display, Modules, Console, Python, Map Display notebook) to a basic Single-Window structure which represents the default settings when all panels are displayed }}} {{{#!td }}} |----------------------- {{{#!td August 2 - August 8\\ ''Week 9'' }}} {{{#!td '''Simple Single-Window GUI:''' - Switch to Single-Window layout representing the default settings through a new button }}} {{{#!td }}} |----------------------- {{{#!td August 9 - August 15\\ ''Week 10'' }}} {{{#!td Finishing up, testing, documentation }}} {{{#!td }}} |----------------------- {{{#!td August 16 - August22\\ ''Week 11'' }}} {{{#!td - Finalizing the existing work - Submitting the final work }}} {{{#!td }}} |----------------------- == Bonding period report == '''Introduce myself in dev list, get in contact with my mentors and discuss the design of functions'''\\ After being accepted as a student for GSoC 2021, on May 25 I introduced myself and my project to grass dev lists (1). I also set up the video call with my mentors - Anna Petrasova, Vaclav Petras, Martin Landa, and Stefan Blumentrath that I already well know from the previous year, and our other cooperation regarding my master thesis. We met on May 25 and discussed various Single-Window GUI options and their possible shortcomings. We decided to set up a parallel environment determined for the independent Single-Window layout development. Finally, we agreed on our regular video call time (once per two weeks). '''Prepare the wiki page about the project'''\\ I created my project wiki page (2) and added the link to the GSoC 2021 Accepted proposals page (3). The wiki page includes - General information about the project (title, mentors, links to the proposal and !GitHub repository, etc.), a brief description of the project, goal, and timeline of tasks and deliverables. I will keep my wiki page up to date and will add weekly reports following the instructions in the GSoC Recommendations for Student page (4). '''Set up the !GitHub repository of the project'''\\ I already have !GitHub GRASS fork in usage (4) so I only added the link to the GSoC 2020 Accepted proposals page (3), to my wiki page (2) and shared it with my mentors. My repository is licensed under the GNU General Public License v3.0, according to the license of GRASS GIS. '''Two PRs regarding Single-Window GUI already merged'''\\ The first PR https://github.com/OSGeo/grass/pull/1591 deals with general refactoring. The second one creates the parallel environment where I am gonna further independently develop the Single-Window GUI, see https://github.com/OSGeo/grass/pull/1604. I also created the PR https://github.com/OSGeo/grass/pull/1598 enhancing GRASS for version 8.0. It implements easier switching between mapsets in different locations since we would like GRASS to be as user-friendly as possible. All mentioned PRs are already merged to master. Meantime, I played with wx.aui demo in order to create a prototype of the Single-Window GRASS GUI. However, it is still not decided if we use wx.lib.agw.aui python library or traditional wx.aui C++ library. Therefore, I also compared those approaches. The traditional wx.AUI seems the same in terms of functionality except missing pane minimizing. Next week we need to decide which attitude should be selected. '''Plans for next week:'''\\ - Start developing Single-Window GUI - Integrate main parts that do not involve much refactoring - Have a meeting with mentors on Wednesday - Decide which library will be used (but could be probably changed even later) (1) https://lists.osgeo.org/pipermail/grass-dev/2021-May/095168.html \\ (2) https://trac.osgeo.org/grass/wiki/GSoC/2021/SingleWindowLayout \\ (3) https://wiki.osgeo.org/wiki/Google_Summer_of_Code_2021_Accepted \\ (4) https://wiki.osgeo.org/wiki/Google_Summer_of_Code_Recommendations_for_Students \\ (5) https://github.com/lindakladivova/grass \\ == Weekly reports == == Week 1 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 2 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 3 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 4 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 5 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 6 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 7 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 8 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 9 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 10 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Week 11 == '''1) What did I complete this week?'''\\ '''2) What am I going to achieve for next week?'''\\ '''3) Is there any blocking issue?'''\\ == Final Report ==