          self.canvas.itemconfig(self.tree_canvas, width=canvas_width, height=canvas_height)
          logger.debug("Resized Analysis Frame")
  
      def tree_configure(self, helptext):
          """ Build a treeview widget to hold the sessions stats """
          logger.debug("Configuring Treeview")
          self.tree.configure(yscrollcommand=self.scrollbar.set)
          self.tree.tag_configure("total", background="black", foreground="white")
          self.tree.pack(side=tk.TOP, fill=tk.X)
          self.tree.bind("<ButtonRelease-1>", self.select_item)
 
</s> remove         """ Summarise data in a LongRunningThread as it can take a while """
 </s> add         """ Summarize data in a LongRunningThread as it can take a while """ </s> remove         """ Add the main frame to the subnotebook
 </s> add         """ Add the main frame to the sub-notebook </s> remove             info.bind("<Configure>", adjust_wraplength)
 </s> add             info.bind("<Configure>", self._adjust_wraplength) </s> remove     def load_session(self):
 </s> add     def populate_from_folder(self, *args):  # pylint:disable=unused-argument
        """ Populate the Analysis tab from just a model folder. Triggered
        when tkinter variable ``analysis_folder`` is set.
        """
        folder = get_config().tk_vars["analysis_folder"].get()
        if not folder or not os.path.isdir(folder):
            logger.debug("Not a valid folder")
            self.clear_session()
            return

        state_files = [fname
                       for fname in os.listdir(folder)
                       if fname.endswith("_state.json")]
        if not state_files:
            logger.debug("No state files found in folder: '%s'", folder)
            self.clear_session()
            return

        state_file = state_files[0]
        if len(state_files) > 1:
            logger.debug("Multiple models found. Selecting: '%s'", state_file)

        if self.thread is None:
            self.load_session(fullpath=os.path.join(folder, state_file))

    def load_session(self, fullpath=None): </s> remove         """ Insert the data into the totals treeview """
 </s> add         """ Insert the data into the totals tree-view """
        """ Build a tree-view widget to hold the sessions stats """
          self.canvas.itemconfig(self.tree_canvas, width=canvas_width, height=canvas_height)
          logger.debug("Resized Analysis Frame")
  
      def tree_configure(self, helptext):
        """ Build a tree-view widget to hold the sessions stats """
          logger.debug("Configuring Treeview")
          self.tree.configure(yscrollcommand=self.scrollbar.set)
          self.tree.tag_configure("total", background="black", foreground="white")
          self.tree.pack(side=tk.TOP, fill=tk.X)
          self.tree.bind("<ButtonRelease-1>", self.select_item)
keep keep keep keep replace keep keep keep keep keep
 GUI Updates (#940)

* lib.gui: Update icons
* tools.cli: Add video filetype flag to mask input
* lib.gui.popup_configure: Refresh GUI on config save
* lib.gui._config: Add Icon size and load last session options
* lib.gui.control_helper - Add control modification tracking
* lib.gui - Add Projects and Last Session
- Main root title handled by projects
- Add Hotkeys
- Create projects module
- split fsw and fst filetypes
- Add last_session saving

* lib.project
- Documentation
- Ask confirm on closing unsaved project
-Fixups

* Track model folder changes
- Shuffle some globals
- Activate System Verbosity for GUI

* lib.gui.utils - Documentation and clean up
- lib.gui.custom_widgets - Create and document

* Add GUI config option to disable auto loading model stats 
lib/gui/display_analysis.py