本文整理汇总了Python中qad_msg.QadMsg类的典型用法代码示例。如果您正苦于以下问题:Python QadMsg类的具体用法?Python QadMsg怎么用?Python QadMsg使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了QadMsg类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: init_selection_tab
def init_selection_tab(self):
# Inizializzazione del TAB "selection"
# PICKBOX
# aggiungo il QWidget chiamato QadPreviewPickBox
# che eredita la posizione di widget_PICKBOX (che viene nascosto)
self.widget_PICKBOX.setHidden(True)
pickBoxColor = QColor(self.tempQadVariables.get(QadMsg.translate("Environment variables", "PICKBOXCOLOR")))
self.previewPickBox = QadPreviewPickBox(self.plugIn, pickBoxColor, self.widget_PICKBOX.parent())
self.previewPickBox.setGeometry(self.widget_PICKBOX.geometry())
self.previewPickBox.setObjectName("previewPickBox")
var = self.tempQadVariables.getVariable(QadMsg.translate("Environment variables", "PICKBOX"))
self.horizontalSlider_PICKBOX.setMinimum(var.minNum)
#self.horizontalSlider_PICKBOX.setMaximum(var.maxNum)
self.horizontalSlider_PICKBOX.setMaximum(20) # oltre i 20 non ci sta nel riquadro
self.horizontalSlider_PICKBOX.setValue(var.value)
# PICKFIRST
pickFirst = False if self.tempQadVariables.get(QadMsg.translate("Environment variables", "PICKFIRST")) == 0 else True
self.checkBox_PICKFIRST.setChecked(pickFirst)
# PICKADD
pickAdd = self.tempQadVariables.get(QadMsg.translate("Environment variables", "PICKADD"))
if pickAdd == 0:
self.checkBox_PICKADD.setChecked(True)
else:
self.checkBox_PICKADD.setChecked(False)
# GRIPSIZE
# aggiungo il QWidget chiamato QadPreviewGripSize
# che eredita la posizione di widget_GRIPSIZE (che viene nascosto)
self.widget_GRIPSIZE.setHidden(True)
fillColor = QColor(self.tempQadVariables.get(QadMsg.translate("Environment variables", "GRIPCOLOR")))
borderColor = QColor(self.tempQadVariables.get(QadMsg.translate("Environment variables", "GRIPCONTOUR")))
self.previewGripSize = QadPreviewGripSize(self.plugIn, fillColor, borderColor, self.widget_GRIPSIZE.parent())
self.previewGripSize.setGeometry(self.widget_GRIPSIZE.geometry())
self.previewGripSize.setObjectName("previewGripSize")
var = self.tempQadVariables.getVariable(QadMsg.translate("Environment variables", "GRIPSIZE"))
self.horizontalSlider_GRIPSIZE.setMinimum(var.minNum)
#self.horizontalSlider_PGRIPSIZE.setMaximum(var.maxNum)
self.horizontalSlider_GRIPSIZE.setMaximum(20) # oltre i 20 non ci sta nel riquadro
self.horizontalSlider_GRIPSIZE.setValue(var.value)
# GRIPS
grips = False if self.tempQadVariables.get(QadMsg.translate("Environment variables", "GRIPS")) == 0 else True
self.checkBox_GRIPS.setChecked(grips)
# GRIPMULTIFUNCTIONAL
gripMultiFunctional = self.tempQadVariables.get(QadMsg.translate("Environment variables", "GRIPMULTIFUNCTIONAL"))
self.checkBox_GRIPMULTIFUNCTIONAL_ON_DYNAMIC_MENU_AND_HOT_GRIPT.setChecked(gripMultiFunctional & QadGRIPMULTIFUNCTIONALEnum.ON_DYNAMIC_MENU_AND_HOT_GRIPT)
# GRIPOBJLIMIT
gripObjLimit = self.tempQadVariables.get(QadMsg.translate("Environment variables", "GRIPOBJLIMIT"))
self.lineEdit_GRIPOBJLIMIT.setText(str(gripObjLimit))
self.lineEdit_GRIPOBJLIMIT.setValidator(QIntValidator(self.lineEdit_GRIPOBJLIMIT))
self.lineEdit_GRIPOBJLIMIT.installEventFilter(self)
self.checkBox_GRIPS_ON_clicked()
示例2: run
def run(self, msgMapTool = False, msg = None):
if self.plugIn.canvas.mapRenderer().destinationCrs().geographicFlag():
self.showMsg(QadMsg.translate("QAD", "\nThe coordinate reference system of the project must be a projected coordinate system.\n"))
return True # fine comando
if self.step == 0:
self.waitForEntsel(msgMapTool, msg)
self.step = 1
return False # continua
elif self.step == 1:
if self.EntSelClass.run(msgMapTool, msg) == True:
if self.EntSelClass.entity.isInitialized():
layer = self.EntSelClass.entity.layer
if self.plugIn.canvas.currentLayer() is None or \
self.plugIn.canvas.currentLayer() != layer:
self.plugIn.canvas.setCurrentLayer(layer)
self.plugIn.iface.setActiveLayer(layer) # lancia evento di deactivate e activate dei plugin
self.plugIn.iface.legendInterface().refreshLayerSymbology(layer)
msg = QadMsg.translate("Command_SETCURRLAYERBYGRAPH", "\nThe current layer is {0}.")
self.showMsg(msg.format(layer.name()))
del self.EntSelClass
return True
else:
self.showMsg(QadMsg.translate("Command_SETCURRLAYERBYGRAPH", "No geometries in this position."))
self.waitForEntsel(msgMapTool, msg)
return False # continua
示例3: floatLineEditWidgetValidation
def floatLineEditWidgetValidation(self, widget, varName, msg):
var = self.tempQadVariables.getVariable(QadMsg.translate("Environment variables", varName))
err = False
string = widget.text()
if qad_utils.str2float(string) is None:
err = True
else:
if var.minNum is not None:
if qad_utils.str2float(string) < var.minNum:
err = True
if var.maxNum is not None:
if qad_utils.str2float(string) > var.maxNum:
err = True
if err:
msg = msg + QadMsg.translate("QAD", ": enter a number")
if var.minNum is not None:
minValMsg = msg + QadMsg.translate("QAD", " > {0}").format(str(var.minNum))
else:
minValMsg = ""
if var.maxNum is not None:
if len(minValMsg) > 0:
msg = msg + QadMsg.translate("QAD", " and")
msg = msg + QadMsg.translate("QAD", " < {0}").format(str(var.maxNum))
msg = msg + "."
QMessageBox.critical(self, "QAD", msg)
widget.setFocus()
widget.selectAll()
return False
return True
示例4: WaitForMainMenu
def WaitForMainMenu(self):
self.poligonEntity.selectOnLayer(False)
keyWords = QadMsg.translate("Command_MAPMPEDIT", "Add") + "/" + \
QadMsg.translate("Command_MAPMPEDIT", "Delete") + "/" + \
QadMsg.translate("Command_MAPMPEDIT", "Union") + "/" + \
QadMsg.translate("Command_MAPMPEDIT", "Substract") + "/" + \
QadMsg.translate("Command_MAPMPEDIT", "Intersect") + "/" + \
QadMsg.translate("Command_MAPMPEDIT", "include Objs")
englishKeyWords = "Add" + "/" + "Delete" + "/" + "Union" + "/" + "Substract" + "/" + "Intersect" "/" + "include Objs"
if self.nOperationsToUndo > 0: # se c'è qualcosa che si può annullare
keyWords = keyWords + "/" + QadMsg.translate("Command_MAPMPEDIT", "Undo")
englishKeyWords = englishKeyWords + "/" + "Undo"
keyWords = keyWords + "/" + QadMsg.translate("Command_MAPMPEDIT", "eXit")
englishKeyWords = englishKeyWords + "/" + "eXit"
default = QadMsg.translate("Command_MAPMPEDIT", "eXit")
prompt = QadMsg.translate("Command_MAPMPEDIT", "Enter an option [{0}] <{1}>: ").format(keyWords, default)
self.step = 2
self.getPointMapTool().setSelectionMode(QadGetPointSelectionModeEnum.NONE)
self.getPointMapTool().setDrawMode(QadGetPointDrawModeEnum.NONE)
keyWords += "_" + englishKeyWords
# si appresta ad attendere enter o una parola chiave
# msg, inputType, default, keyWords, nessun controllo
self.waitFor(prompt, \
QadInputTypeEnum.KEYWORDS, \
None, \
keyWords, QadInputModeEnum.NONE)
return False
示例5: waitForObjectSel
def waitForObjectSel(self):
self.step = 2
# imposto il map tool
self.getPointMapTool().setSelectionMode(QadGetPointSelectionModeEnum.ENTITY_SELECTION_DYNAMIC)
# solo layer lineari editabili che non appartengano a quote
layerList = []
for layer in qad_utils.getVisibleVectorLayers(self.plugIn.canvas): # Tutti i layer vettoriali visibili
if layer.geometryType() == QGis.Line and layer.isEditable():
if len(QadDimStyles.getDimListByLayer(layer)) == 0:
layerList.append(layer)
self.getPointMapTool().layersToCheck = layerList
self.getPointMapTool().setDrawMode(QadGetPointDrawModeEnum.NONE)
self.getPointMapTool().onlyEditableLayers = True
keyWords = QadMsg.translate("Command_TRIM", "Fence") + "/" + \
QadMsg.translate("Command_TRIM", "Crossing") + "/" + \
QadMsg.translate("Command_TRIM", "Edge") + "/" + \
QadMsg.translate("Command_TRIM", "Undo")
prompt = QadMsg.translate("Command_TRIM", "Select the object to trim or shift-select to extend or [{0}]: ").format(keyWords)
englishKeyWords = "Fence" + "/" + "Crossing" + "/" + "Edge" + "/" + "Undo"
keyWords += "_" + englishKeyWords
# si appresta ad attendere un punto o enter o una parola chiave
# msg, inputType, default, keyWords, nessun controllo
self.waitFor(prompt, \
QadInputTypeEnum.POINT2D | QadInputTypeEnum.KEYWORDS, \
None, \
keyWords, QadInputModeEnum.NONE)
示例6: getInvalidInputMsg
def getInvalidInputMsg(self):
"""
restituisce il messaggio di input non valido
"""
if self.inputType & QadInputTypeEnum.POINT2D or \
self.inputType & QadInputTypeEnum.POINT3D:
if self.inputType & QadInputTypeEnum.KEYWORDS and \
(self.inputType & QadInputTypeEnum.FLOAT or self.inputType & QadInputTypeEnum.ANGLE):
return QadMsg.translate("QAD", "\nE' richiesto un punto, un numero reale o la parola chiave di un'opzione.\n")
elif self.inputType & QadInputTypeEnum.KEYWORDS:
return QadMsg.translate("QAD", "\nE' richiesto un punto o la parola chiave di un'opzione.\n")
elif self.inputType & QadInputTypeEnum.FLOAT or self.inputType & QadInputTypeEnum.ANGLE:
return QadMsg.translate("QAD", "\nE' richiesto un punto o un numero reale.\n")
else:
return QadMsg.translate("QAD", "\nPunto non valido.\n")
elif self.inputType & QadInputTypeEnum.KEYWORDS:
return QadMsg.translate("QAD", "\nParola chiave dell'opzione non valida.\n")
elif self.inputType & QadInputTypeEnum.STRING:
return QadMsg.translate("QAD", "\nStringa non valida.\n")
elif self.inputType & QadInputTypeEnum.INT:
return QadMsg.translate("QAD", "\nNumero intero non valido.\n")
elif self.inputType & QadInputTypeEnum.LONG:
return QadMsg.translate("QAD", "\nNumero intero lungo non valido.\n")
elif self.inputType & QadInputTypeEnum.FLOAT or self.inputType & QadInputTypeEnum.ANGLE:
return QadMsg.translate("QAD", "\nNumero reale non valido.\n")
elif self.inputType & QadInputTypeEnum.BOOL:
return QadMsg.translate("QAD", "\nValore booleano non valido.\n")
else:
return ""
示例7: waitForObjectSel
def waitForObjectSel(self):
self.step = 2
# imposto il map tool
self.getPointMapTool().setSelectionMode(QadGetPointSelectionModeEnum.ENTITY_SELECTION)
# solo layer lineari editabili che non appartengano a quote
layerList = []
for layer in self.plugIn.canvas.layers():
if layer.type() == QgsMapLayer.VectorLayer and layer.geometryType() == QGis.Line and \
layer.isEditable():
if len(self.plugIn.dimStyles.getDimListByLayer(layer)) == 0:
layerList.append(layer)
self.getPointMapTool().layersToCheck = layerList
self.getPointMapTool().setDrawMode(QadGetPointDrawModeEnum.NONE)
self.getPointMapTool().onlyEditableLayers = True
keyWords = QadMsg.translate("Command_EXTEND", "iNTercetta") + "/" + \
QadMsg.translate("Command_EXTEND", "Interseca") + "/" + \
QadMsg.translate("Command_EXTEND", "Spigolo") + "/" + \
QadMsg.translate("Command_EXTEND", "Annulla")
prompt = QadMsg.translate("Command_EXTEND", "Selezionare oggetto da estendere o selezionare oggetto tenendo premuto il tasto Maiusc per tagliarlo o [{0}]: ").format(keyWords)
englishKeyWords = "Fence" + "/" + "Crossing" + "/" + "Edge" + "/" + "Undo"
keyWords += "_" + englishKeyWords
# si appresta ad attendere un punto o enter o una parola chiave
# msg, inputType, default, keyWords, nessun controllo
self.waitFor(prompt, \
QadInputTypeEnum.POINT2D | QadInputTypeEnum.KEYWORDS, \
None, \
keyWords, QadInputModeEnum.NONE)
示例8: delCurrentSubGeomToPolygon
def delCurrentSubGeomToPolygon(self):
"""
Cancella la sotto-geometria corrente dal poligono da modificare
"""
geom = self.poligonEntity.getGeometry()
# la posizione é espressa con una lista (<index ogg. princ> [<index ogg. sec.>])
part = self.currAtSubGeom[0]
if len(self.currAtSubGeom) == 2:
ring = self.currAtSubGeom[1]
if geom.deleteRing(ring + 1, part) == False: # cancello una isola (Ring 0 is outer ring and can't be deleted)
self.showMsg(QadMsg.translate("QAD", "Invalid object."))
return False
else:
if geom.deletePart(part) == False: # cancello una parte
self.showMsg(QadMsg.translate("QAD", "Invalid object."))
return False
f = self.poligonEntity.getFeature()
f.setGeometry(geom)
self.plugIn.beginEditCommand("Feature edited", self.poligonEntity.layer)
# plugIn, layer, feature, refresh, check_validity
if qad_layer.updateFeatureToLayer(self.plugIn, self.poligonEntity.layer, f, False, False) == False:
self.plugIn.destroyEditCommand()
return False
self.plugIn.endEditCommand()
self.nOperationsToUndo = self.nOperationsToUndo + 1
示例9: waitForObjectSelToMisure
def waitForObjectSelToMisure(self):
self.step = 1
# imposto il map tool
self.getPointMapTool().setMode(Qad_lengthen_maptool_ModeEnum.ASK_FOR_OBJ_TO_MISURE)
if self.plugIn.lastOpMode_lengthen == "DElta":
self.defaultValue = QadMsg.translate("Command_LENGTHEN", "DElta")
elif self.plugIn.lastOpMode_lengthen == "Percent":
self.defaultValue = QadMsg.translate("Command_LENGTHEN", "Percent")
elif self.plugIn.lastOpMode_lengthen == "Total":
self.defaultValue = QadMsg.translate("Command_LENGTHEN", "Total")
elif self.plugIn.lastOpMode_lengthen == "DYnamic":
self.defaultValue = QadMsg.translate("Command_LENGTHEN", "DYnamic")
else:
self.defaultValue = None
keyWords = QadMsg.translate("Command_LENGTHEN", "DElta") + "/" + \
QadMsg.translate("Command_LENGTHEN", "Percent") + "/" + \
QadMsg.translate("Command_LENGTHEN", "Total") + "/" + \
QadMsg.translate("Command_LENGTHEN", "DYnamic")
if self.defaultValue is None:
prompt = QadMsg.translate("Command_LENGTHEN", "Select an object or [{0}] <{1}>: ").format(keyWords, self.defaultValue)
else:
prompt = QadMsg.translate("Command_LENGTHEN", "Select an object or [{0}] <{1}>: ").format(keyWords, self.defaultValue)
englishKeyWords = "DElta" + "/" + "Percent" + "/" + "Total" + "/" + "DYnamic"
keyWords += "_" + englishKeyWords
# si appresta ad attendere un punto o enter o una parola chiave
# msg, inputType, default, keyWords, nessun controllo
self.waitFor(prompt, \
QadInputTypeEnum.POINT2D | QadInputTypeEnum.KEYWORDS, \
self.defaultValue, \
keyWords, QadInputModeEnum.NONE)
示例10: addSnapTypeByPopupMenu
def addSnapTypeByPopupMenu(self, _snapType):
value = QadVariables.get(QadMsg.translate("Environment variables", "OSMODE"))
if value & QadSnapTypeEnum.DISABLE:
value = value - QadSnapTypeEnum.DISABLE
QadVariables.set(QadMsg.translate("Environment variables", "OSMODE"), value | _snapType)
QadVariables.save()
self.plugIn.refreshCommandMapToolSnapType()
示例11: waitForPassagePt
def waitForPassagePt(self):
# imposto il map tool
self.getPointMapTool().setMode(Qad_offset_maptool_ModeEnum.ASK_FOR_PASSAGE_PT)
if self.multi == False:
keyWords = QadMsg.translate("Command_OFFSET", "Exit") + "/" + \
QadMsg.translate("Command_OFFSET", "Multiple") + "/" + \
QadMsg.translate("Command_OFFSET", "Undo")
defaultMsg = QadMsg.translate("Command_OFFSET", "Exit")
default = QadMsg.translate("Command_OFFSET", "Exit")
englishKeyWords = "Exit" + "/" + "Multiple" + "/" + "Undo"
else:
keyWords = QadMsg.translate("Command_OFFSET", "Exit") + "/" + \
QadMsg.translate("Command_OFFSET", "Undo")
defaultMsg = QadMsg.translate("Command_OFFSET", "next object")
default = None
englishKeyWords = "Exit" + "/" + "Undo"
if self.OnlySegment == False:
keyWords = keyWords + "/" + \
QadMsg.translate("Command_OFFSET", "Segment")
englishKeyWords = englishKeyWords + "/" + "Segment"
prompt = QadMsg.translate("Command_OFFSET", "Specify through point or [{0}] <{1}>: ")
keyWords += "_" + englishKeyWords
# si appresta ad attendere un punto o enter o una parola chiave
# msg, inputType, default, keyWords, valore nullo non permesso
self.waitFor(prompt.format(keyWords, defaultMsg), \
QadInputTypeEnum.POINT2D | QadInputTypeEnum.KEYWORDS, \
default, \
keyWords, QadInputModeEnum.NONE)
self.step = 4
示例12: displayPopupMenu
def displayPopupMenu(self, pos):
if self.selectedDimStyle is None:
return
popupMenu = QMenu(self)
action = QAction(QadMsg.translate("DimStyle_Dialog", "Set current"), popupMenu)
popupMenu.addAction(action)
QObject.connect(action, SIGNAL("triggered()"), self.setCurrentStyle)
action = QAction(QadMsg.translate("DimStyle_Dialog", "Rename"), popupMenu)
popupMenu.addAction(action)
QObject.connect(action, SIGNAL("triggered()"), self.startEditingItem)
action = QAction(QadMsg.translate("DimStyle_Dialog", "Modify description"), popupMenu)
popupMenu.addAction(action)
QObject.connect(action, SIGNAL("triggered()"), self.updDescrSelectedDimStyle)
action = QAction(QadMsg.translate("DimStyle_Dialog", "Remove"), popupMenu)
currDimStyleName = QadVariables.get(QadMsg.translate("Environment variables", "DIMSTYLE"))
if self.selectedDimStyle.name == currDimStyleName:
action.setDisabled(True)
popupMenu.addAction(action)
QObject.connect(action, SIGNAL("triggered()"), self.delSelectedDimStyle)
popupMenu.popup(self.dimStyleList.mapToGlobal(pos))
示例13: showAllProps
def showAllProps(self, dimStyle):
if self.tableWidget.model() is not None:
# Pulisce la tabella
self.tableWidget.model().reset()
self.tableWidget.setRowCount(0)
self.tableWidget.setColumnCount(2)
headerLabels = []
headerLabels.append(QadMsg.translate("DimStyle_Diff_Dialog", "Descrizione"))
headerLabels.append(dimStyle.name)
self.tableWidget.setHorizontalHeaderLabels(headerLabels)
self.tableWidget.horizontalHeader().show()
self.count = 0
propsDict = dimStyle.getPropList().items()
for prop in propsDict:
propName = prop[0]
propDescr = prop[1][0]
propValue = prop[1][1]
self.insertProp(propDescr, propValue)
self.tableWidget.sortItems(0)
self.tableWidget.horizontalHeader().setResizeMode(0, QHeaderView.ResizeToContents)
self.tableWidget.horizontalHeader().setResizeMode(1, QHeaderView.Interactive)
self.msg.setText(QadMsg.translate("DimStyle_Diff_Dialog", "Tutte le proprietà dello stile di quota: ") + dimStyle.name)
示例14: getInvalidInputMsg
def getInvalidInputMsg(self):
"""
restituisce il messaggio di input non valido
"""
if self.inputType & QadInputTypeEnum.POINT2D or \
self.inputType & QadInputTypeEnum.POINT3D:
if self.inputType & QadInputTypeEnum.KEYWORDS and \
(self.inputType & QadInputTypeEnum.FLOAT or self.inputType & QadInputTypeEnum.ANGLE):
return QadMsg.translate("QAD", "\nEnter a point, a real number or a keyword.\n")
elif self.inputType & QadInputTypeEnum.KEYWORDS:
return QadMsg.translate("QAD", "\nEnter a point or a keyword.\n")
elif self.inputType & QadInputTypeEnum.FLOAT or self.inputType & QadInputTypeEnum.ANGLE:
return QadMsg.translate("QAD", "\nEnter a point or a real number.\n")
else:
return QadMsg.translate("QAD", "\nPoint not valid.\n")
elif self.inputType & QadInputTypeEnum.KEYWORDS:
return QadMsg.translate("QAD", "\nKeyword not valid.\n")
elif self.inputType & QadInputTypeEnum.STRING:
return QadMsg.translate("QAD", "\nString not valid.\n")
elif self.inputType & QadInputTypeEnum.INT:
return QadMsg.translate("QAD", "\nInteger number not valid.\n")
elif self.inputType & QadInputTypeEnum.LONG:
return QadMsg.translate("QAD", "\nLong integer number not valid.\n")
elif self.inputType & QadInputTypeEnum.FLOAT or self.inputType & QadInputTypeEnum.ANGLE:
return QadMsg.translate("QAD", "\nReal number not valid.\n")
elif self.inputType & QadInputTypeEnum.BOOL:
return QadMsg.translate("QAD", "\nBoolean not valid.\n")
else:
return ""
示例15: refreshEntityGripPoints
def refreshEntityGripPoints(self, entitySet = None):
if entitySet is None:
entitySet = self.entitySet
gripObjLimit = QadVariables.get(QadMsg.translate("Environment variables", "GRIPOBJLIMIT"))
if gripObjLimit != 0: # When set to 0, grips are always displayed.
if entitySet.count() > gripObjLimit:
# Suppresses the display of grips when the selection set includes more than the specified number of objects
self.clearEntityGripPoints()
return
# cancello i grip delle entità che non sono in entitySet o che non sono in layer vettoriali modificabili
i = self.entitySetGripPoints.count() - 1
while i >= 0:
entityGripPoint = self.entitySetGripPoints.entityGripPoints[i]
if entitySet.containsEntity(entityGripPoint.entity) == False or \
entityGripPoint.entity.layer.type() != QgsMapLayer.VectorLayer or entityGripPoint.entity.layer.isEditable() == False:
self.entitySetGripPoints.entityGripPoints[i].removeItems() # lo stacco dal canvas
del self.entitySetGripPoints.entityGripPoints[i]
i = i - 1
entity = QadEntity()
for layerEntitySet in entitySet.layerEntitySetList:
# considero solo i layer vettoriali che sono modificabili
layer = layerEntitySet.layer
if layer.type() == QgsMapLayer.VectorLayer and layer.isEditable():
for featureId in layerEntitySet.featureIds:
entity.set(layer, featureId)
self.entitySetGripPoints.addEntity(entity, QadVariables.get(QadMsg.translate("Environment variables", "GRIPS")))