[GRASS-SVN] r57199 - in grass/trunk/gui/wxpython: . core lmgr

svn_grass at osgeo.org svn_grass at osgeo.org
Wed Jul 17 09:04:14 PDT 2013


Author: wenzeslaus
Date: 2013-07-17 09:04:14 -0700 (Wed, 17 Jul 2013)
New Revision: 57199

Modified:
   grass/trunk/gui/wxpython/Makefile
   grass/trunk/gui/wxpython/core/menutree.py
   grass/trunk/gui/wxpython/core/test.toolboxes_menudata.xml
   grass/trunk/gui/wxpython/core/toolboxes.py
   grass/trunk/gui/wxpython/lmgr/menudata.py
Log:
wxGUI/toolboxes: finishing r57187 and 57188 (basic version of generation of translation files, code clean up)

Modified: grass/trunk/gui/wxpython/Makefile
===================================================================
--- grass/trunk/gui/wxpython/Makefile	2013-07-17 15:56:10 UTC (rev 57198)
+++ grass/trunk/gui/wxpython/Makefile	2013-07-17 16:04:14 UTC (rev 57199)
@@ -40,11 +40,12 @@
 	$(call run_grass,$(PYTHON) $< > $@)
 
 xml/module_tree_menudata.xml: core/toolboxes.py
-	$(call run_grass,$(PYTHON) $< dummy_parameter > $@)
+	$(call run_grass,$(PYTHON) $< "module_tree" > $@)
 
 menustrings.py: core/menutree.py $(ETCDIR)/xml/menudata.xml $(ETCDIR)/xml/module_tree_menudata.xml $(ETCDIR)/xml/menudata_modeler.xml $(ETCDIR)/xml/menudata_psmap.xml
 	@echo "# This is a generated file.\n" > $@
-	$(call run_grass,$(PYTHON) $< >> $@)
+	$(call run_grass,$(PYTHON) $< "manager" >> $@)
+	$(call run_grass,$(PYTHON) $< "module_tree" >> $@)
 	$(call run_grass,$(PYTHON) $< "modeler" >> $@)
 	$(call run_grass,$(PYTHON) $< "psmap" >> $@)
 

Modified: grass/trunk/gui/wxpython/core/menutree.py
===================================================================
--- grass/trunk/gui/wxpython/core/menutree.py	2013-07-17 15:56:10 UTC (rev 57198)
+++ grass/trunk/gui/wxpython/core/menutree.py	2013-07-17 16:04:14 UTC (rev 57199)
@@ -18,7 +18,8 @@
  - dump (tree structure with stored data)
 
 and <i>menu</i>:
- - manager (Layer Manager)
+ - manager (Main menu in Layer Manager)
+ - module_tree (Module tree in Layer Manager)
  - modeler (Graphical Modeler)
  - psmap (Cartographic Composer)
 
@@ -221,7 +222,7 @@
     for arg in sys.argv:
         if arg in ('strings', 'tree', 'commands', 'dump'):
             action =  arg
-        elif arg in ('manager', 'modeler', 'psmap'):
+        elif arg in ('manager', 'module_tree', 'modeler', 'psmap'):
             menu = arg
 
     gui_wx_path = os.path.join(os.getenv('GISBASE'), 'etc', 'gui', 'wxpython')
@@ -234,12 +235,21 @@
         from core.globalvar    import ETCWXDIR
         filename = os.path.join(ETCWXDIR, 'xml', 'menudata.xml')
         menudata = LayerManagerMenuData(filename)
+    # FIXME: since module descriptions are used again we have now the third copy of the same string (one is in modules)
+    elif menu == 'module_tree':
+        from lmgr.menudata import LayerManagerModuleTree
+        from core.globalvar import ETCWXDIR
+        filename = os.path.join(ETCWXDIR, 'xml', 'module_tree_menudata.xml')
+        menudata = LayerManagerModuleTree(filename)
     elif menu == 'modeler':
         from gmodeler.menudata import ModelerMenuData
         menudata = ModelerMenuData()
     elif menu == 'psmap':
         from psmap.menudata import PsMapMenuData
         menudata = PsMapMenuData()
+    else:
+        import grass.script.core as gscore
+        gscore.fatal("Unknown value for parameter menu: " % menu)
 
     if action == 'strings':
         menudata.PrintStrings(sys.stdout)
@@ -249,5 +259,8 @@
         menudata.PrintCommands(sys.stdout)
     elif action == 'dump':
         print menudata.model
+    else:
+        import grass.script.core as gscore
+        gscore.fatal("Unknown value for parameter action: " % action)
 
     sys.exit(0)

Modified: grass/trunk/gui/wxpython/core/test.toolboxes_menudata.xml
===================================================================
--- grass/trunk/gui/wxpython/core/test.toolboxes_menudata.xml	2013-07-17 15:56:10 UTC (rev 57198)
+++ grass/trunk/gui/wxpython/core/test.toolboxes_menudata.xml	2013-07-17 16:04:14 UTC (rev 57199)
@@ -63,8 +63,8 @@
         <menuitem>
           <label>Convert coordinates</label>
           <command>m.proj</command>
-          <help />
-          <keywords />
+          <help>Converts coordinates from one projection to another (cs2cs frontend).</help>
+          <keywords>miscellaneous,projection</keywords>
           <handler>OnMenuCmd</handler>
         </menuitem>
       </items>

Modified: grass/trunk/gui/wxpython/core/toolboxes.py
===================================================================
--- grass/trunk/gui/wxpython/core/toolboxes.py	2013-07-17 15:56:10 UTC (rev 57198)
+++ grass/trunk/gui/wxpython/core/toolboxes.py	2013-07-17 16:04:14 UTC (rev 57199)
@@ -68,9 +68,8 @@
         gcore.try_remove(path)
 
 
-# TODO: merge the function with getMenuFile
 def getMenudataFile(userRootFile, newFile, fallback):
-    """!Returns path to XML file for building menu.
+    """!Returns path to XML file for building menu or another tree.
 
     Creates toolbox directory where user defined toolboxes should be located.
     Checks whether it is needed to create new XML file (user changed toolboxes)
@@ -134,7 +133,7 @@
                 tree = createTree(distributionRootFile=distributionRootFile, userRootFile=userRootFile)
             except ETREE_EXCEPTIONS:
                 GError(_("Unable to parse user toolboxes XML files. "
-                         "Default toolboxes will be loaded."))
+                         "Default files will be loaded."))
                 return fallback
 
             try:
@@ -144,78 +143,15 @@
                 fh.close()
                 return menudataFile
             except:
+                Debug.msg(2, "toolboxes.getMenudataFile: writing menudata failed, returning fallback file")
                 return fallback
         else:
             return menudataFile
     else:
+        Debug.msg(2, "toolboxes.getMenudataFile: returning menudata fallback file")
         return fallback
 
 
-def getMenuFile():
-    """!Returns path to XML file for building menu.
-
-    Creates toolbox directory where user defined toolboxes should be located.
-    Checks whether it is needed to create new XML file (user changed toolboxes)
-    or the already generated file could be used.
-    If something goes wrong during building or user doesn't modify menu,
-    default file (from distribution) is returned.
-    """
-    Debug.msg(1, "toolboxes.getMenuFile")
-    fallback = os.path.join(ETCWXDIR, 'xml', 'menudata.xml')
-    # always create toolboxes directory if does not exist yet
-    tbDir = _setupToolboxes()
-
-    if tbDir:
-        menudataFile = os.path.join(tbDir, 'menudata.xml')
-        generateNew = False
-        # when any of main_menu.xml or toolboxes.xml are changed,
-        # generate new menudata.xml
-
-        if os.path.exists(menudataFile):
-            # remove menu file when there is no main_menu and toolboxes
-            if not userToolboxesFile and not userMainMenuFile:
-                os.remove(menudataFile)
-                return fallback
-
-            if bool(userToolboxesFile) != bool(userMainMenuFile):
-                # always generate new because we don't know if there has been any change
-                generateNew = True
-            else:
-                # if newer files -> generate new
-                menudataTime = os.path.getmtime(menudataFile)
-                if userToolboxesFile:
-                    if os.path.getmtime(userToolboxesFile) > menudataTime:
-                        generateNew = True
-                if userMainMenuFile:
-                    if os.path.getmtime(userMainMenuFile) > menudataTime:
-                        generateNew = True
-        elif userToolboxesFile or userMainMenuFile:
-            generateNew = True
-        else:
-            return fallback
-
-        if generateNew:
-            try:
-                tree = toolboxes2menudata()
-            except ETREE_EXCEPTIONS:
-                GError(_("Unable to parse user toolboxes XML files. "
-                         "Default toolboxes will be loaded."))
-                return fallback
-
-            try:
-                xml = _getXMLString(tree.getroot())
-                fh = open(os.path.join(tbDir, 'menudata.xml'), 'w')
-                fh.write(xml)
-                fh.close()
-                return menudataFile
-            except:
-                return fallback
-        else:
-            return menudataFile
-    else:
-        return fallback
-
-
 def _setupToolboxes():
     """!Create 'toolboxes' directory if doesn't exist."""
     basePath = GetSettingsPath()
@@ -241,7 +177,7 @@
             return False
     return True
 
-# TODO: merge with toolboxes2menudata
+
 def createTree(distributionRootFile, userRootFile, userDefined=True):
     """!Creates XML file with data for menu.
 
@@ -268,14 +204,15 @@
     wxguiItems = etree.parse(wxguiItemsFile)
     moduleItems = etree.parse(moduleItemsFile)
 
-    return toolboxes2menudataInternal(mainMenu=mainMenu,
-                                      toolboxes=toolboxes,
-                                      userToolboxes=userToolboxes,
-                                      wxguiItems=wxguiItems,
-                                      moduleItems=moduleItems)
+    return toolboxes2menudata(mainMenu=mainMenu,
+                              toolboxes=toolboxes,
+                              userToolboxes=userToolboxes,
+                              wxguiItems=wxguiItems,
+                              moduleItems=moduleItems)
 
 
-def toolboxes2menudata(userDefined=True):
+def toolboxes2menudata(mainMenu, toolboxes, userToolboxes,
+                       wxguiItems, moduleItems):
     """!Creates XML file with data for menu.
 
     Parses toolboxes files from distribution and from users,
@@ -286,41 +223,6 @@
 
     @return ElementTree instance
     """
-    if userDefined and userMainMenuFile:
-        mainMenu = etree.parse(userMainMenuFile)
-    else:
-        mainMenu = etree.parse(mainMenuFile)
-
-    toolboxes = etree.parse(toolboxesFile)
-
-    if userDefined and userToolboxesFile:
-        userToolboxes = etree.parse(userToolboxesFile)
-    else:
-        userToolboxes = None
-
-    wxguiItems = etree.parse(wxguiItemsFile)
-    moduleItems = etree.parse(moduleItemsFile)
-
-    return toolboxes2menudataInternal(mainMenu=mainMenu,
-                                      toolboxes=toolboxes,
-                                      userToolboxes=userToolboxes,
-                                      wxguiItems=wxguiItems,
-                                      moduleItems=moduleItems)
-
-
-# TODO: rename
-def toolboxes2menudataInternal(mainMenu, toolboxes, userToolboxes,
-                               wxguiItems, moduleItems):
-    """!Creates XML file with data for menu.
-
-    Parses toolboxes files from distribution and from users,
-    puts them together, adds metadata to modules and convert
-    tree to previous format used for loading menu.
-
-    @param userDefined use toolboxes defined by user or not (during compilation)
-
-    @return ElementTree instance
-    """
     root = mainMenu.getroot()
 
     userHasToolboxes = False
@@ -758,9 +660,7 @@
     @return a number of failed tests
     """
     import doctest
-
     do_doctest_gettext_workaround()
-
     return doctest.testmod().failed
 
 
@@ -781,17 +681,22 @@
     wxguiItems = etree.parse(wxguiItemsFile)
     moduleItems = etree.parse(moduleItemsFile)
 
-    tree = toolboxes2menudataInternal(mainMenu=menu,
-                                      toolboxes=toolboxes,
-                                      userToolboxes=userToolboxes,
-                                      wxguiItems=wxguiItems,
-                                      moduleItems=moduleItems)
+    tree = toolboxes2menudata(mainMenu=menu,
+                              toolboxes=toolboxes,
+                              userToolboxes=userToolboxes,
+                              wxguiItems=wxguiItems,
+                              moduleItems=moduleItems)
     root = tree.getroot()
     tested = _getXMLString(root)
-    # useful to generate the correct file (uncomment)
-    #sys.stdout.write(_getXMLString(root))
-    #return 0
 
+    # for generatiing correct test file supposing that the implementation
+    # is now correct and working
+    # run the normal test and check the difference before overwriting
+    # the old correct test file
+    if len(sys.argv) > 2 and sys.argv[2] == "generate-correct-file":
+        sys.stdout.write(_getXMLString(root))
+        return 0
+
     menudataFile = 'test.toolboxes_menudata.xml'
     with open(menudataFile) as correctMenudata:
         correct = str(correctMenudata.read())
@@ -807,13 +712,13 @@
             sys.stdout.write(line)
             someDiff = True
     if someDiff:
-        print "difference"
+        print "Difference between files."
+        return 1
     else:
         print "OK"
+        return 0
 
-    return 0
 
-
 def main():
     """Converts the toolboxes files on standard paths to the menudata file
 
@@ -822,13 +727,12 @@
     # TODO: fix parameter handling
     if len(sys.argv) > 1:
         mainFile = os.path.join(ETCWXDIR, 'xml', 'module_tree.xml')
-        tree = createTree(distributionRootFile=mainFile, userRootFile=None, userDefined=False)
-        root = tree.getroot()
-        sys.stdout.write(_getXMLString(root))
     else:
-        tree = toolboxes2menudata(userDefined=False)
-        root = tree.getroot()
-        sys.stdout.write(_getXMLString(root))
+        mainFile = os.path.join(ETCWXDIR, 'xml', 'main_menu.xml')
+    tree = createTree(distributionRootFile=mainFile, userRootFile=None,
+                      userDefined=False)
+    root = tree.getroot()
+    sys.stdout.write(_getXMLString(root))
 
     return 0
 

Modified: grass/trunk/gui/wxpython/lmgr/menudata.py
===================================================================
--- grass/trunk/gui/wxpython/lmgr/menudata.py	2013-07-17 15:56:10 UTC (rev 57198)
+++ grass/trunk/gui/wxpython/lmgr/menudata.py	2013-07-17 16:04:14 UTC (rev 57199)
@@ -18,20 +18,23 @@
 import os
 
 from core.menutree  import MenuTreeModelBuilder
-from core.toolboxes import getMenuFile, getMenudataFile
+from core.toolboxes import getMenudataFile
 from core.globalvar import ETCWXDIR
 from core.gcmd import GError
 
 
 class LayerManagerMenuData(MenuTreeModelBuilder):
     def __init__(self, filename=None):
+        fallback = os.path.join(ETCWXDIR, 'xml', 'menudata.xml')
         if not filename:
-            filename = getMenuFile()
+            filename = getMenudataFile(userRootFile='main_menu.xml',
+                                       newFile='menudata.xml',
+                                       fallback=fallback)
         try:
             MenuTreeModelBuilder.__init__(self, filename)
         except (ValueError, AttributeError, TypeError):
             GError(_("Unable to parse user toolboxes XML files. "
-                     "Default toolboxes will be loaded."))
+                     "Default main menu will be loaded."))
             fallback = os.path.join(ETCWXDIR, 'xml', 'menudata.xml')
             MenuTreeModelBuilder.__init__(self, fallback)
 
@@ -48,5 +51,5 @@
             MenuTreeModelBuilder.__init__(self, filename)
         except (ValueError, AttributeError, TypeError):
             GError(_("Unable to parse user toolboxes XML files. "
-                     "Default toolboxes will be loaded."))
+                     "Default module tree will be loaded."))
             MenuTreeModelBuilder.__init__(self, fallback)



More information about the grass-commit mailing list