class_docstr: Manage a user's proposed configuration option changes.
  
  Names used across multiple methods:
      page -- one of the 4 top-level dicts representing a
              .idlerc/config-x.cfg file.
      config_type -- name of a page.
      section -- a section within a page/file.
      option -- name of an option within a section.
      value -- value for the option.
  
  Methods
      add_option: Add option and value to changes.
      save_option: Save option and value to config parser.
      save_all: Save all the changes to the config parser and file.
      delete_section: If section exists,
                      delete from changes, userCfg, and file.
      clear: Clear all changes by clearing each page.
class_docstr_tok: ["Manage","a","user","'s","proposed","configuration","option","changes",".","Names","used","across","multiple","methods",":","page","--","one","of","the","4","top-level","dicts","representing","a",".idlerc\/config-x.cfg","file",".","config_type","--","name","of","a","page",".","section","--","a","section","within","a","page\/file",".","option","--","name","of","an","option","within","a","section",".","value","--","value","for","the","option",".","Methods","add_option",":","Add","option","and","value","to","changes",".","save_option",":","Save","option","and","value","to","config","parser",".","save_all",":","Save","all","the","changes","to","the","config","parser","and","file",".","delete_section",":","If","section","exists",",","delete","from","changes",",","userCfg",",","and","file",".","clear",":","Clear","all","changes","by","clearing","each","page","."]
docstr: Save configuration changes to the user config file.
  
  Clear self in preparation for additional changes.
  Return changed for testing.
docstr_tok: ["Save","configuration","changes","to","the","user","config","file",".","Clear","self","in","preparation","for","additional","changes",".","Return","changed","for","testing","."]
code: def save_all(self):
      """Save configuration changes to the user config file.
  
      Clear self in preparation for additional changes.
      Return changed for testing.
      """
      idleConf.userCfg["main"].Save()
  
      changed = False
      for config_type in self:
          cfg_type_changed = False
          page = self[config_type]
          for section in page:
              if section == "HelpFiles":  # Remove it for replacement.
                  idleConf.userCfg["main"].remove_section("HelpFiles")
                  cfg_type_changed = True
              for item, value in page[section].items():
                  if self.save_option(
                      config_type, section, item, value
                  ):
                      cfg_type_changed = True
          if cfg_type_changed:
              idleConf.userCfg[config_type].Save()
              changed = True
      for config_type in ["keys", "highlight"]:
          # Save these even if unchanged!
          idleConf.userCfg[config_type].Save()
      self.clear()
      # ConfigDialog caller must add the following call
      # self.save_all_changed_extensions()  # Uses a different mechanism.
      return changed
  
imports: from configparser import ConfigParser
  import os
  import sys
  from tkinter.font import Font
  import idlelib
label_desc: Use image node_id 4 for calling the ConfigChanges obj's underlying member method code with example usage: obj.save_all() and returns: changed