소스 검색

wxGUI: lazy loading of C imagery functions in SignatureSelect (#2120)

Anna Petrasova 3 년 전
부모
커밋
e3080fd7a1
1개의 변경된 파일24개의 추가작업 그리고 18개의 파일을 삭제
  1. 24 18
      gui/wxpython/gui_core/gselect.py

+ 24 - 18
gui/wxpython/gui_core/gselect.py

@@ -59,12 +59,6 @@ import wx.lib.filebrowsebutton as filebrowse
 import grass.script as grass
 import grass.script as grass
 from grass.script import task as gtask
 from grass.script import task as gtask
 from grass.exceptions import CalledModuleError
 from grass.exceptions import CalledModuleError
-from grass.lib.imagery import (
-    I_SIGFILE_TYPE_SIG,
-    I_SIGFILE_TYPE_SIGSET,
-    I_signatures_list_by_type,
-    I_free_signatures_list,
-)
 from grass.pygrass.utils import decode
 from grass.pygrass.utils import decode
 
 
 from gui_core.widgets import ManageSettingsWidget, CoordinatesValidator
 from gui_core.widgets import ManageSettingsWidget, CoordinatesValidator
@@ -2813,23 +2807,35 @@ class SignatureSelect(wx.ComboBox):
     ):
     ):
         super(SignatureSelect, self).__init__(parent, id, size=size, **kwargs)
         super(SignatureSelect, self).__init__(parent, id, size=size, **kwargs)
 
 
-        sig_type = None
+        items = []
+        if mapsets:
+            for mapset in mapsets:
+                self._append_mapset_signatures(mapset, element, items)
+        else:
+            self._append_mapset_signatures(None, element, items)
+        self.SetItems(items)
+        self.SetValue("")
+
+    def _append_mapset_signatures(self, mapset, element, items):
+        try:
+            from grass.lib.imagery import (
+                I_SIGFILE_TYPE_SIG,
+                I_SIGFILE_TYPE_SIGSET,
+                I_signatures_list_by_type,
+                I_free_signatures_list,
+            )
+        except ImportError as e:
+            sys.stderr.write(
+                _("Unable to import C imagery library functions: %s\n") % e
+            )
+            return
         # Extend here if a new signature type is introduced
         # Extend here if a new signature type is introduced
         if element == "signatures/sig":
         if element == "signatures/sig":
             sig_type = I_SIGFILE_TYPE_SIG
             sig_type = I_SIGFILE_TYPE_SIG
         elif element == "signatures/sigset":
         elif element == "signatures/sigset":
             sig_type = I_SIGFILE_TYPE_SIGSET
             sig_type = I_SIGFILE_TYPE_SIGSET
-        items = []
-        if sig_type is not None:
-            if mapsets:
-                for mapset in mapsets:
-                    self._append_mapset_signatures(mapset, sig_type, items)
-            else:
-                self._append_mapset_signatures(None, sig_type, items)
-        self.SetItems(items)
-        self.SetValue("")
-
-    def _append_mapset_signatures(self, mapset, sig_type, items):
+        else:
+            return
         list_ptr = ctypes.POINTER(ctypes.c_char_p)
         list_ptr = ctypes.POINTER(ctypes.c_char_p)
         sig_list = list_ptr()
         sig_list = list_ptr()
         count = I_signatures_list_by_type(sig_type, mapset, ctypes.byref(sig_list))
         count = I_signatures_list_by_type(sig_type, mapset, ctypes.byref(sig_list))