static int iMatrixListEdition_CB(Ihandle *ih, int lin, int col, int mode, int update) { ImatrixListData* mtxList = (ImatrixListData*)iupAttribGet(ih, "_IUPMTXLIST_DATA"); int lines_num = ih->data->lines.num; IFniiii listedition_cb = (IFniiii)IupGetCallback(ih, "LISTEDITION_CB"); /* allow editing only at the label column */ if (col != mtxList->label_col) return IUP_IGNORE; /* allow editing only if active */ if (!IupGetIntId2(ih, "ITEMACTIVE", lin, col)) return IUP_IGNORE; /* call application callback before anything */ if (listedition_cb && listedition_cb(ih, lin, col, mode, update)==IUP_IGNORE) return IUP_IGNORE; if (mode==1 && mtxList->image_col) { if (!IupGetInt(ih, "SHOWDELETE")) IupSetAttributeId(ih, "LINEDELETE", lin, "Yes"); IupSetfAttribute(ih, "REDRAW", "C%d", mtxList->image_col); } /* adding a new line */ if (mtxList->editable && lin == lines_num-1 && mode == 0) { /* clear any edition if not updating */ if (update==0) { IupSetAttribute(ih, "VALUE", ""); IupSetfAttribute(ih, "REDRAW", "L%d", lin); } else { /* check if entered a non empty value */ char* value = IupGetAttribute(ih, "VALUE"); if (value && value[0]!=0) { IFni listinsert_cb = (IFni)IupGetCallback(ih, "LISTINSERT_CB"); /* notify the application that a line will be inserted */ if (listinsert_cb && listinsert_cb(ih, lin) == IUP_IGNORE) { IupSetAttribute(ih, "VALUE", ""); IupSetfAttribute(ih, "REDRAW", "L%d", lin); } else { /* Add a new empty line */ IupSetInt(ih, "ADDLIN", lin); } } } } if (mode==0) { if (!IupGetInt(ih, "SHOWDELETE")) { /* turn off drawing, but prepare for delete */ if (update && ih->data->edit_hidden_byfocus) iupAttribSetInt(ih, "_IUPMTXLIST_DELETE", (int)clock()); IupSetAttributeId(ih, "LINEDELETE", lin, NULL); } IupSetfAttribute(ih, "REDRAW", "C%d", mtxList->image_col); } return IUP_DEFAULT; }
int IupMatGetInt(Ihandle* ih, const char* name, int lin, int col) { return IupGetIntId2(ih, name, lin, col); }