int iupMatrixSetMarkAttrib(Ihandle* ih, int lin, int col, const char* value) { if (ih->data->mark_mode == IMAT_MARK_NO) return 0; if (lin >= 0 && col >= 0) /* both are specified */ { if (!iupMatrixCheckCellPos(ih, lin, col)) return 0; if (ih->data->mark_mode == IMAT_MARK_CELL) { int mark, ret = 0; if (lin == 0 || col == 0) /* title can NOT have a mark */ return 0; mark = iupStrBoolean(value); if (ih->data->callback_mode) { IFniii markedit_cb = (IFniii)IupGetCallback(ih, "MARKEDIT_CB"); if (markedit_cb && !ih->data->inside_markedit_cb) { ih->data->inside_markedit_cb = 1; markedit_cb(ih, lin, col, mark); ih->data->inside_markedit_cb = 0; } else { if (mark) { iupAttribSetId2(ih, "MARK", lin, col, "1"); ret = 1; } else iupAttribSetId2(ih, "MARK", lin, col, NULL); } } else { if (mark) ih->data->cells[lin][col].flags |= IMAT_IS_MARKED; else ih->data->cells[lin][col].flags &= ~IMAT_IS_MARKED; } if (ih->handle) { /* This assumes that the matrix has been draw completely previously */ iupMatrixPrepareDrawData(ih); iupMatrixDrawCells(ih, lin, col, lin, col); } return ret; } else { int mark = iupStrBoolean(value); if (ih->data->mark_mode & IMAT_MARK_LIN && lin>0) { if (mark) ih->data->lines.dt[lin].flags |= IMAT_IS_MARKED; else ih->data->lines.dt[lin].flags &= ~IMAT_IS_MARKED; } if (ih->data->mark_mode & IMAT_MARK_COL && col>0) { if (mark) ih->data->columns.dt[col].flags |= IMAT_IS_MARKED; else ih->data->columns.dt[col].flags &= ~IMAT_IS_MARKED; } if (ih->handle) { /* This assumes that the matrix has been drawn completely previously */ iupMatrixPrepareDrawData(ih); iupMatrixDrawCells(ih, lin, col, lin, col); } } } return 0; }
int iupMatrixSetMarkAttrib(Ihandle* ih, const char* name_id, const char* value) { int lin = 0, col = 0; if (ih->data->mark_mode == IMAT_MARK_NO) return 0; if (iupStrToIntInt(name_id, &lin, &col, ':') == 2) { if (!iupMatrixCheckCellPos(ih, lin, col)) return 0; if (ih->data->mark_mode == IMAT_MARK_CELL) { int mark; if (lin == 0 || col == 0) /* title can NOT have a mark */ return 0; mark = iupStrBoolean(value); if (ih->data->callback_mode) { IFniii markedit_cb = (IFniii)IupGetCallback(ih, "MARKEDIT_CB"); if (markedit_cb) markedit_cb(ih, lin, col, mark); else if (mark) return 1; /* store the attribute */ } else { if (mark) ih->data->cells[lin][col].flags |= IUPMAT_MARK; else ih->data->cells[lin][col].flags &= ~IUPMAT_MARK; } if (ih->handle) { /* This assumes that the matrix has been draw completely previously */ iupMatrixPrepareDrawData(ih); iupMatrixDrawCells(ih, lin, col, lin, col); } } else { int mark = iupStrBoolean(value); if (ih->data->mark_mode & IMAT_MARK_LIN && lin!=0) { if (mark) ih->data->lines.flags[lin] |= IUPMAT_MARK; else ih->data->lines.flags[lin] &= ~IUPMAT_MARK; } if (ih->data->mark_mode & IMAT_MARK_COL && col!=0) { if (mark) ih->data->columns.flags[col] |= IUPMAT_MARK; else ih->data->columns.flags[col] &= ~IUPMAT_MARK; } if (ih->handle) { /* This assumes that the matrix has been draw completely previously */ iupMatrixPrepareDrawData(ih); iupMatrixDrawCells(ih, lin, col, lin, col); } } } return 0; }