int setLayerDisplayIndex(Layer* pLayer, uint32_t newIndex) { if (pLayer == NULL) { setLastError(SIMPLE_BAD_PARAMS); return 1; } SpatialDataView* pView = dynamic_cast<SpatialDataView*>(pLayer->getView()); if (pView == NULL) { setLastError(SIMPLE_WRONG_VIEW_TYPE); return 1; } if (!pView->setLayerDisplayIndex(pLayer, newIndex)) { setLastError(SIMPLE_OTHER_FAILURE); return 1; } setLastError(SIMPLE_NO_ERROR); return 0; }
/** * Move a layer to a new position in the layer list. * * @param[in] [1] * The name of the layer to move. * @param[in] INDEX * The new 0 based index for the layer. * @param[in] WINDOW @opt * The name of the window. Defaults to the active window. * @rsof * @usage print,set_layer_position("data.tif", INDEX=0) * @endusage */ IDL_VPTR set_layer_position(int argc, IDL_VPTR pArgv[], char* pArgk) { IDL_VPTR idlPtr; typedef struct { IDL_KW_RESULT_FIRST_FIELD; int windowExists; IDL_STRING windowName; int indexExists; IDL_LONG index; } KW_RESULT; //IDL_KW_FAST_SCAN is the type of scan we are using, following it is the //name of the keyword, followed by the type, the mask(which should be 1), //flags, a boolean whether the value was populated and finally the value itself static IDL_KW_PAR kw_pars[] = { IDL_KW_FAST_SCAN, {"INDEX", IDL_TYP_LONG, 1, 0, reinterpret_cast<int*>(IDL_KW_OFFSETOF(indexExists)), reinterpret_cast<char*>(IDL_KW_OFFSETOF(index))}, {"WINDOW", IDL_TYP_STRING, 1, 0, reinterpret_cast<int*>(IDL_KW_OFFSETOF(windowExists)), reinterpret_cast<char*>(IDL_KW_OFFSETOF(windowName))}, {NULL} }; IdlFunctions::IdlKwResource<KW_RESULT> kw(argc, pArgv, pArgk, kw_pars, 0, 1); std::string windowName; int index = -1; std::string name; if (kw->indexExists) { index = kw->index; } if (kw->windowExists) { windowName = IDL_STRING_STR(&kw->windowName); } if (argc < 2) { IDL_Message(IDL_M_GENERIC, IDL_MSG_RET, "set_layer_position takes a layer name as a parameter with a " "window as an optional keyword. A keyword 'index' is needed to specify the position."); return IDL_StrToSTRING("failure"); } //the name of the layer to set the posisiton of name = IDL_VarGetString(pArgv[0]); bool bSuccess = false; SpatialDataView* pView = dynamic_cast<SpatialDataView*>(IdlFunctions::getViewByWindowName(windowName)); if (pView != NULL) { Layer* pLayer = IdlFunctions::getLayerByName(windowName, name, false); if (pLayer != NULL) { pView->setLayerDisplayIndex(pLayer, index); bSuccess = true; } } if (bSuccess) { idlPtr = IDL_StrToSTRING("success"); } else { idlPtr = IDL_StrToSTRING("failure"); } return idlPtr; }