/* Draw the line titles, visible, between lin and lastlin, include it. Line titles marked will be draw with the appropriate feedback. -> lin1 - First line to have its title drawn -> lin2 - Last line to have its title drawn */ void iupMatrixDrawLineTitle(Ihandle* ih, int lin1, int lin2) { int x1, y1, x2, y2; int lin, alignment, active; char str[100]; long framecolor; IFniiiiiiC draw_cb; if (!ih->data->columns.sizes[0]) return; if (lin1 > ih->data->lines.last || lin2 < ih->data->lines.first) return; if (lin1 < ih->data->lines.first) lin1 = ih->data->lines.first; if (lin2 > ih->data->lines.last) lin2 = ih->data->lines.last; /* Start the position of the line title */ x1 = 0; x2 = ih->data->columns.sizes[0]; y1 = ih->data->lines.sizes[0]; for(lin = ih->data->lines.first; lin < lin1; lin++) y1 += ih->data->lines.sizes[lin]; framecolor = cdIupConvertColor(iupAttribGetStr(ih, "FRAMECOLOR")); active = iupdrvIsActive(ih); draw_cb = (IFniiiiiiC)IupGetCallback(ih, "DRAW_CB"); alignment = iMatrixDrawGetColAlignment(ih, 0, str); /* Draw the titles */ for(lin = lin1; lin <= lin2; lin++) { /* If it is a hidden line (size = 0), don't draw the title */ if(ih->data->lines.sizes[lin] == 0) continue; y2 = y1 + ih->data->lines.sizes[lin]; /* If it doesn't have title, the loop just calculate the final position */ if (ih->data->columns.sizes[0]) { int marked = iupMatrixLineIsMarked(ih, lin); iMatrixDrawFrameRectTitle(ih, lin, 0, x1, x2, y1, y2, framecolor, str); iMatrixDrawBackground(ih, x1, x2, y1, y2, marked, active, lin, 0); iMatrixDrawCellValue(ih, x1, x2, y1, y2, alignment, marked, active, lin, 0, draw_cb); } y1 = y2; } }
/* Draw the line titles, visible, between lin and lastlin, include it. Line titles marked will be draw with the appropriate feedback. -> lin1 - First line to have its title drawn -> lin2 - Last line to have its title drawn */ void iupMatrixDrawTitleLines(Ihandle* ih, int lin1, int lin2) { int x1, y1, x2, y2, first_lin; int lin, alignment, active, framehighlight; long framecolor; IFniiiiiiC draw_cb; if (!ih->data->columns.dt[0].size) return; if (ih->data->lines.num_noscroll>1 && lin1==1 && lin2==ih->data->lines.num_noscroll-1) { first_lin = 0; y1 = 0; } else { if (lin1 > ih->data->lines.last || lin2 < ih->data->lines.first) return; if (lin1 < ih->data->lines.first) lin1 = ih->data->lines.first; if (lin2 > ih->data->lines.last) lin2 = ih->data->lines.last; first_lin = ih->data->lines.first; y1 = 0; for (lin = 0; lin< ih->data->lines.num_noscroll; lin++) y1 += ih->data->lines.dt[lin].size; } /* Start the position of the line title */ x1 = 0; x2 = ih->data->columns.dt[0].size; iupMATRIX_CLIPAREA(ih, x1, x2, y1, ih->data->h-1); cdCanvasClip(ih->data->cd_canvas, CD_CLIPAREA); /* Find the initial position of the first line */ if (first_lin == ih->data->lines.first) y1 -= ih->data->lines.first_offset; for(lin = first_lin; lin < lin1; lin++) y1 += ih->data->lines.dt[lin].size; framecolor = cdIupConvertColor(iupAttribGetStr(ih, "FRAMECOLOR")); framehighlight = iupAttribGetInt(ih, "FRAMETITLEHIGHLIGHT"); active = iupdrvIsActive(ih); draw_cb = (IFniiiiiiC)IupGetCallback(ih, "DRAW_CB"); alignment = iMatrixDrawGetColAlignment(ih, 0); /* Draw the titles */ for(lin = lin1; lin <= lin2; lin++) { /* If it is a hidden line (size = 0), don't draw the title */ if(ih->data->lines.dt[lin].size == 0) continue; y2 = y1 + ih->data->lines.dt[lin].size; /* If it doesn't have title, the loop just calculate the final position */ if (ih->data->columns.dt[0].size) { int marked = iupMatrixLineIsMarked(ih, lin); iMatrixDrawBackground(ih, x1, x2, y1, y2, marked, active, lin, 0); iMatrixDrawFrameRectTitle(ih, lin, 0, x1, x2, y1, y2, framecolor, framehighlight); iMatrixDrawCellValue(ih, x1, x2, y1, y2, alignment, marked, active, lin, 0, draw_cb, framecolor); } y1 = y2; } cdCanvasClip(ih->data->cd_canvas, CD_CLIPOFF); }