wiki:GSoC/2021/SingleWindowLayout

Version 52 (modified by lindakladivova, 3 years ago) ( diff )

--

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: OSGeo - Open Source Geospatial Foundation
Mentor Name: Anna Petrasova, Martin Landa, Vaclav Petras, Stefan Blumentrath
GSoC proposal: View proposal
GitHub Repository: 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

Time Period

Milestones

Tasks

Status

May 17 - 6 June
Community Bonding

  • 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
  • Contribute some feature related to refactoring - https://github.com/OSGeo/grass/pull/1591
  • Create a parallel environment for independent development of the Single-Window GUI - https://github.com/OSGeo/grass/pull/1604


OK
OK
OK
OK
OK
OK
OK

June 7 - June 13
Week 1

The basic skeleton: arrangement of basic widgets

  • According to this arrangement:
    • Decide which panel used for the content pane
    • Decide which library will be more suitable for our development


OK

OK


OK

June 14 - June 20
Week 2

wxGUI refactoring




OK


WIP

June 21 - June 27
Week 3

wxGUI refactoring




WIP

June 28 - July 4
Week 4

wxGUI refactoring:




WIP
WIP

July5 - July 11
Week 5

wxGUI refactoring:




WIP
WIP

July 12 - July 18
Week 6

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

evaluation

July 19 - July 25
Week 7

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

July 26 - August 1
Week 8

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

August 2 - August 8
Week 9

Simple Single-Window GUI:

  • Switch to Single-Window layout representing the default settings through a new button

August 9 - August 15
Week 10

Finishing up, testing, documentation

August 16 - August22
Week 11

  • Finalizing the existing work
  • Submitting the final work

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 (5) so I only added the link to the GSoC 2021 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?
This week I started to develop Single-Window GUI in the prepared parallel environment. I arranged basic widgets (Data Catalog, Display, Modules, Console, Python), you can have a look at this PR: https://github.com/OSGeo/grass/pull/1621. After a discussion with mentors and other members of the GRASS community, it was finally decided to use Map Display as the center content pane. At the same time, we decided to use the python wx.lib.agw.aui library for Single-Window GUI development. This library contains a bunch of interesting functions as e.g. grouping dockable panes into notebooks. The state after the arrangement of the basic widgets looks as follows:

Arrangement of the widgets except Map Display

At the same time, I also fixed a bug https://github.com/OSGeo/grass/issues/1636 (https://github.com/OSGeo/grass/pull/1637).

2) What am I going to achieve for next week?
The task for the next week will be to allow to create a new Map Display as a wx.Panel (now it is only in the form of wx.Frame) and integrate this Map Display as a center content pane.

3) Is there any blocking issue?
No, it isn't.

Week 2

1) What did I complete this week?
I focused on the GUI refactoring. In order to add Map Display to the notebook widget, we need to have it in the form of wx.Panel. I divided the work into several steps.

  • Meantime, I started more complex PR changing the way the Map Display is built (see https://github.com/OSGeo/grass/pull/1656). The core lies in adding the intermediate wx.Panel widget. This PR aims at more general refactoring of Map Display creation, do not change the code in the Single Layout parallel environment - adapting the S-W GUI is planned to be another step forward.

2) What am I going to achieve for next week?
I plan to finish the refactoring of Map Display related stuff (see https://github.com/OSGeo/grass/pull/1656) and utilize it in the Single-Window GUI environment. It will lead to a new Map Display notebook widget (composed of wx.Panel Map Displays). This notebook will be then used as the content pane.

3) Is there any blocking issue?
No, it isn't.

Week 3

1) What did I complete this week?
I focused on the GUI refactoring. In order to add Map Display to the notebook widget, we need to have it in the form of wx.Panel. This week I worked quite hard on the main refactoring PR (see ​https://github.com/OSGeo/grass/pull/1675). The core lies in adding the intermediate wx.Panel widget. However, this PR influences quite many things much more than we first expected. I am changing the way how Map Display is built which has an impact on single map display stuff as well as double frame stuff. So that, this PR also requires very intense testing since all things then go straight to the master - adapting the independent Single-Window GUI environment is planned to be another step forward.

2) What am I going to achieve for next week?
I plan to finish the refactoring of Map Display related stuff (see https://github.com/OSGeo/grass/pull/1675) and test this PR very intensively.

3) Is there any blocking issue?
No, it is not. However, next week on Saturday I am going on four day holiday to Slovakia. I hope I will be able to merge this big refactoring PR by Friday.

Week 4

1) What did I complete this week?
Similarly as the last week, I focused on the GUI refactoring. I worked on the main refactoring PR (see ​https://github.com/OSGeo/grass/pull/1675). In terms of the main Map Display I am done here. However, me and my mentors realized that changes influence also other Map Frames - particularly g.gui.rdigit, d.mon, Map Swipe, Ground Control Point and IClass frame.

There were two possible ways how to proceed. First, I started with the statusbars for all the frames that we need newly to be created based on wx.Statubar widget (see https://github.com/OSGeo/grass/pull/1689). Then we came up with another concept, namely delegating methods using metaprogramming. Although this path seemed cheap at first (we talked about it very intensively on videocall on Wednesday), after a few hours of studying, we came to the conclusion that it is inappropriate in our case. And this decision subsequently opened PR https://github.com/OSGeo/grass/pull/1689 again.

Meantime, I also discovered the bug related to hiding statusbar and toolbars. Hiding does not work properly for above-mentioned map frames as e.g. Map Swipe. I set up the issue https://github.com/OSGeo/grass/issues/1691.

To sum it up, this week was not so productive in terms of code, but key in determining what to do next and especially how.

2) What am I going to achieve for next week?
In the next step, the focus will be on the completion of PR https://github.com/OSGeo/grass/pull/1689, which will then allow the completion of the large PR ​https://github.com/OSGeo/grass/pull/1675.

3) Is there any blocking issue?
No, it is not. However, as I have already mentioned I am on holiday from Saturday to Tuesday. I am looking forward to new energy coming after the rest.

Week 5

1) What did I complete this week?
I worked mainly on the PR https://github.com/OSGeo/grass/pull/1689 which was again opened after our discussion last week. Anna took care of solving the bug concerning hiding and showing status bar and toolbars https://github.com/OSGeo/grass/issues/1691 and then based on these changes I rebased the https://github.com/OSGeo/grass/pull/1689. This PR is now in the reviewing process and will be early merged. I am also still working on the main refactoring PR ​https://github.com/OSGeo/grass/pull/1675. Unfortunately, many things are influenced and need to be changed. These changes are so connected together that it is not possible to divide PR https://github.com/OSGeo/grass/pull/1675 into several different PRs... Meantime, I also discovered the bug in the Show comp. extent option in the status bar and corrected it (see PR https://github.com/OSGeo/grass/pull/1717 and issue https://github.com/OSGeo/grass/issues/1714).

2) What am I going to achieve for next week?
After merging PR https://github.com/OSGeo/grass/pull/1689, I will again focus on PR https://github.com/OSGeo/grass/pull/1675.

3) Is there any blocking issue?
No, it is not.

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

Attachments (8)

Note: See TracWiki for help on using the wiki.