static void iMatrixMarkItem(Ihandle* ih, int lin1, int col1, int mark, IFniii markedit_cb, IFnii mark_cb) { int lin, col; if (ih->data->mark_full1 == IMAT_PROCESS_LIN) { if (ih->data->mark_mode == IMAT_MARK_CELL) { for (col = 1; col < ih->data->columns.num; col++) iMatrixMarkCellSet(ih, lin1, col, mark, markedit_cb, mark_cb); } else { iMatrixMarkLinSet(ih, lin1, mark); iupMatrixDrawTitleLines(ih, lin1, lin1); if (ih->data->columns.num_noscroll>1) iupMatrixDrawCells(ih, lin1, 1, lin1, ih->data->columns.num_noscroll-1); } iupMatrixDrawCells(ih, lin1, 1, lin1, ih->data->columns.num-1); } else if (ih->data->mark_full1 == IMAT_PROCESS_COL) { if (ih->data->mark_mode == IMAT_MARK_CELL) { for(lin = 1; lin < ih->data->lines.num; lin++) iMatrixMarkCellSet(ih, lin, col1, mark, markedit_cb, mark_cb); } else { iMatrixMarkColSet(ih, col1, mark); iupMatrixDrawTitleColumns(ih, col1, col1); if (ih->data->lines.num_noscroll>1) iupMatrixDrawCells(ih, 1, col1, ih->data->lines.num_noscroll-1, col1); } iupMatrixDrawCells(ih, 1, col1, ih->data->lines.num-1, col1); } else if (ih->data->mark_mode == IMAT_MARK_CELL) { iMatrixMarkCellSet(ih, lin1, col1, mark, markedit_cb, mark_cb); iupMatrixDrawCells(ih, lin1, col1, lin1, col1); } }
int iupMatrixSetMarkedAttrib(Ihandle* ih, const char* value) { int lin, col, mark; IFniii markedit_cb; if (ih->data->mark_mode == IMAT_MARK_NO) return 0; if (!value) iupMatrixMarkClearAll(ih, 1); else if (*value == 'C' || *value == 'c') /* columns */ { if (ih->data->mark_mode == IMAT_MARK_LIN) return 0; value++; /* skip C mark */ if ((int)strlen(value) != ih->data->columns.num-1) return 0; markedit_cb = (IFniii)IupGetCallback(ih, "MARKEDIT_CB"); for(col = 1; col < ih->data->columns.num; col++) { if (*value++ == '1') mark = 1; else mark = 0; /* mark all the cells for that column */ if (ih->data->mark_mode == IMAT_MARK_CELL) { for(lin = 1; lin < ih->data->lines.num; lin++) iMatrixMarkCellSet(ih, lin, col, mark, markedit_cb, NULL); } else iMatrixMarkColSet(ih, col, mark); } if (ih->data->mark_mode & IMAT_MARK_LIN) iMatrixMarkAllLinCol(&(ih->data->lines), 0); } else if (*value == 'L' || *value == 'l') /* lines */ { if (ih->data->mark_mode == IMAT_MARK_COL) return 0; value++; /* skip L mark */ if ((int)strlen(value) != ih->data->lines.num-1) return 0; markedit_cb = (IFniii)IupGetCallback(ih, "MARKEDIT_CB"); for(lin = 1; lin < ih->data->lines.num; lin++) { if (*value++ == '1') mark = 1; else mark = 0; /* Mark all the cells for that line */ if (ih->data->mark_mode == IMAT_MARK_CELL) { for(col = 1; col < ih->data->columns.num; col++) iMatrixMarkCellSet(ih, lin, col, mark, markedit_cb, NULL); } else iMatrixMarkLinSet(ih, lin, mark); } if (ih->data->mark_mode & IMAT_MARK_COL) iMatrixMarkAllLinCol(&(ih->data->columns), 0); } else if (ih->data->mark_mode == IMAT_MARK_CELL) /* cells */ { if ((int)strlen(value) != (ih->data->lines.num-1)*(ih->data->columns.num-1)) return 0; markedit_cb = (IFniii)IupGetCallback(ih, "MARKEDIT_CB"); for(lin = 1; lin < ih->data->lines.num; lin++) { for(col = 1; col < ih->data->columns.num; col++) { if (*value++ == '1') mark = 1; else mark = 0; iMatrixMarkCellSet(ih, lin, col, mark, markedit_cb, NULL); } } } if (ih->handle) iupMatrixDraw(ih, 1); return 0; }
void iupMatrixMarkBlockSet(Ihandle* ih, int ctrl, int lin1, int col1) { int mark = 1, mark_full_all, lin, col; IFniii markedit_cb = NULL; IFnii mark_cb = NULL; iupMatrixMarkBlockReset(ih); iupMatrixPrepareDrawData(ih); if (!ih->data->mark_multiple || ih->data->mark_continuous || !ctrl) { iupMatrixMarkClearAll(ih, 1); iupMatrixDraw(ih, 0); } else mark = -1; /* toggle mark state */ ih->data->mark_full1 = 0; mark_full_all = 0; if (lin1 == 0 && col1 == 0) { if ((ih->data->mark_mode == IMAT_MARK_CELL && ih->data->mark_multiple) || ih->data->mark_mode == IMAT_MARK_COL || ih->data->mark_mode == IMAT_MARK_LIN) mark_full_all = 1; } /* If it was pointing for a column title... */ else if (lin1 == 0) { if ((ih->data->mark_mode == IMAT_MARK_CELL && ih->data->mark_multiple) || ih->data->mark_mode & IMAT_MARK_COL) ih->data->mark_full1 = IMAT_PROCESS_COL; } /* If it was pointing for a line title... */ else if (col1 == 0) { if ((ih->data->mark_mode == IMAT_MARK_CELL && ih->data->mark_multiple) || ih->data->mark_mode & IMAT_MARK_LIN) ih->data->mark_full1 = IMAT_PROCESS_LIN; } if (ih->data->mark_mode == IMAT_MARK_CELL && ih->data->callback_mode) { markedit_cb = (IFniii)IupGetCallback(ih, "MARKEDIT_CB"); mark_cb = (IFnii)IupGetCallback(ih, "MARK_CB"); } if (mark_full_all) { if (ih->data->mark_mode == IMAT_MARK_CELL) { for (col = 1; col < ih->data->columns.num; col++) { for(lin = 1; lin < ih->data->lines.num; lin++) iMatrixMarkCellSet(ih, lin, col, mark, markedit_cb, mark_cb); } } else if (ih->data->mark_mode == IMAT_MARK_LIN) { for(lin = 1; lin < ih->data->lines.num; lin++) iMatrixMarkLinSet(ih, lin, mark); iupMatrixDrawTitleLines(ih, 1, ih->data->lines.num-1); } else if (ih->data->mark_mode == IMAT_MARK_COL) { for (col = 1; col < ih->data->columns.num; col++) iMatrixMarkColSet(ih, col, mark); iupMatrixDrawTitleColumns(ih, 1, ih->data->columns.num-1); } iupMatrixDrawCells(ih, 1, 1, ih->data->lines.num-1, ih->data->columns.num-1); } else iMatrixMarkItem(ih, lin1, col1, mark, markedit_cb, mark_cb); ih->data->mark_lin1 = lin1; ih->data->mark_col1 = col1; ih->data->mark_block = 1; }