static void iMatrixDrawMatrix(Ihandle* ih) { iupMatrixPrepareDrawData(ih); /* fill the background because there will be empty cells */ if ((ih->data->lines.num == 1) || (ih->data->columns.num == 1)) { cdCanvasBackground(ih->data->cd_canvas, cdIupConvertColor(ih->data->bgcolor_parent)); cdCanvasClear(ih->data->cd_canvas); } /* Draw the corner between line and column titles, if necessary */ iMatrixDrawTitleCorner(ih); /* If there are columns, then draw their titles */ if (ih->data->columns.num_noscroll>1) iupMatrixDrawTitleColumns(ih, 1, ih->data->columns.num_noscroll-1); iupMatrixDrawTitleColumns(ih, ih->data->columns.first, ih->data->columns.last); /* If there are lines, then draw their titles */ if (ih->data->lines.num_noscroll>1) iupMatrixDrawTitleLines(ih, 1, ih->data->lines.num_noscroll-1); iupMatrixDrawTitleLines(ih, ih->data->lines.first, ih->data->lines.last); /* If there are ordinary cells, then draw them */ if (ih->data->columns.num_noscroll>1 && ih->data->lines.num_noscroll>1) iupMatrixDrawCells(ih, 1, 1, ih->data->lines.num_noscroll-1, ih->data->columns.num_noscroll-1); if (ih->data->columns.num_noscroll>1) iupMatrixDrawCells(ih, ih->data->lines.first, 1, ih->data->lines.last, ih->data->columns.num_noscroll-1); if (ih->data->lines.num_noscroll>1) iupMatrixDrawCells(ih, 1, ih->data->columns.first, ih->data->lines.num_noscroll-1, ih->data->columns.last); iupMatrixDrawCells(ih, ih->data->lines.first, ih->data->columns.first, ih->data->lines.last, ih->data->columns.last); }
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 iupMatrixDrawSetRedrawAttrib(Ihandle* ih, const char* value) { int type; if (value == NULL) type = 0; else if(value[0] == 'L' || value[0] == 'l') type = IMAT_PROCESS_LIN; else if(value[0] == 'C' || value[0] == 'c') type = IMAT_PROCESS_COL; else type = 0; if (type) /* lines or columns, including their titles */ { int min = 0, max = 0; value++; /* compatibility code */ if (strchr(value, ':')!=NULL) { if(iupStrToIntInt(value, &min, &max, ':') != 2) max = min; } else { if(iupStrToIntInt(value, &min, &max, '-') != 2) max = min; } if (min > max) return 0; iupMatrixPrepareDrawData(ih); if (ih->data->need_calcsize) iupMatrixAuxCalcSizes(ih); /* ignore empty area, draw only cells */ iMatrixDrawTitleCorner(ih); if (type == IMAT_PROCESS_LIN) { if (min==0) { if (ih->data->columns.num_noscroll>1) iupMatrixDrawTitleColumns(ih, 1, ih->data->columns.num_noscroll-1); iupMatrixDrawTitleColumns(ih, ih->data->columns.first, ih->data->columns.last); } iupMatrixDrawTitleLines(ih, min, max); if (ih->data->columns.num_noscroll>1) iupMatrixDrawCells(ih, min, 1, max, ih->data->columns.num_noscroll-1); iupMatrixDrawCells(ih, min, ih->data->columns.first, max, ih->data->columns.last); } else { if (min==0) { if (ih->data->lines.num_noscroll>1) iupMatrixDrawTitleLines(ih, 1, ih->data->lines.num_noscroll-1); iupMatrixDrawTitleLines(ih, ih->data->lines.first, ih->data->lines.last); } iupMatrixDrawTitleColumns(ih, min, max); if (ih->data->lines.num_noscroll>1) iupMatrixDrawCells(ih, 1, min, ih->data->lines.num_noscroll-1, max); iupMatrixDrawCells(ih, ih->data->lines.first, min, ih->data->lines.last, max); } } else { /* Force CalcSize */ iupMatrixAuxCalcSizes(ih); iMatrixDrawMatrix(ih); } ih->data->need_redraw = 0; iupMatrixDrawUpdate(ih); 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; }