diff options
Diffstat (limited to 'iup/srccontrols/matrix/iupmatrix.c')
-rwxr-xr-x | iup/srccontrols/matrix/iupmatrix.c | 90 |
1 files changed, 69 insertions, 21 deletions
diff --git a/iup/srccontrols/matrix/iupmatrix.c b/iup/srccontrols/matrix/iupmatrix.c index 20d618d..9e379e2 100755 --- a/iup/srccontrols/matrix/iupmatrix.c +++ b/iup/srccontrols/matrix/iupmatrix.c @@ -76,10 +76,13 @@ static int iMatrixSetOriginAttrib(Ihandle* ih, const char* value) return 0; ih->data->columns.first = col; + ih->data->columns.first_offset = 0; ih->data->lines.first = lin; + ih->data->lines.first_offset = 0; - iupMatrixAuxUpdateVisiblePos(ih, IMAT_PROCESS_COL); - iupMatrixAuxUpdateVisiblePos(ih, IMAT_PROCESS_LIN); + /* when "first" is changed must update scroll pos */ + iupMatrixAuxUpdateScrollPos(ih, IMAT_PROCESS_COL); + iupMatrixAuxUpdateScrollPos(ih, IMAT_PROCESS_LIN); iupMatrixDraw(ih, 1); return 0; @@ -109,7 +112,7 @@ static int iMatrixSetShowAttrib(Ihandle* ih, const char* value) if((lin < 1) || (col < 1)) return 0; - if (!iupMatrixAuxIsCellFullVisible(ih, lin, col)) + if (!iupMatrixAuxIsCellStartVisible(ih, lin, col)) iupMatrixScrollToVisible(ih, lin, col); return 0; @@ -173,6 +176,23 @@ static char* iMatrixGetUseTitleSizeAttrib(Ihandle* ih) return "NO"; } +static int iMatrixSetHiddenTextMarksAttrib(Ihandle* ih, const char* value) +{ + if (iupStrBoolean(value)) + ih->data->hidden_text_marks = 1; + else + ih->data->hidden_text_marks = 0; + return 0; +} + +static char* iMatrixGetHiddenTextMarksAttrib(Ihandle* ih) +{ + if (ih->data->hidden_text_marks) + return "YES"; + else + return "NO"; +} + static int iMatrixSetValueAttrib(Ihandle* ih, const char* value) { if (IupGetInt(ih->data->datah, "VISIBLE")) @@ -228,14 +248,14 @@ static char* iMatrixGetMultilineAttrib(Ihandle* ih) static char* iMatrixGetNumLinAttrib(Ihandle* ih) { char* num = iupStrGetMemory(100); - sprintf(num, "%d", ih->data->lines.num-1); + sprintf(num, "%d", ih->data->lines.num-1); /* the attribute does not include the title */ return num; } static char* iMatrixGetNumColAttrib(Ihandle* ih) { char* num = iupStrGetMemory(100); - sprintf(num, "%d", ih->data->columns.num-1); + sprintf(num, "%d", ih->data->columns.num-1); /* the attribute does not include the title */ return num; } @@ -427,13 +447,19 @@ static char* iMatrixGetAlignmentAttrib(Ihandle* ih, const char* name_id) align = iupAttribGet(ih, str); if (!align) { - int col; - if (iupStrToInt(name_id, &col)) + align = iupAttribGet(ih, "ALIGNMENT"); + if (align) + return align; + else { - if (col == 0) - return "ALEFT"; - else - return "ACENTER"; + int col; + if (iupStrToInt(name_id, &col)) + { + if (col == 0) + return "ALEFT"; + else + return "ACENTER"; + } } } @@ -642,7 +668,7 @@ static int iMatrixCreateMethod(Ihandle* ih, void **params) /* Create the edit fields */ iupMatrixEditCreate(ih); - /* defaults */ + /* defaults that are non zero */ ih->data->datah = ih->data->texth; ih->data->mark_continuous = 1; ih->data->columns.num = 1; @@ -656,7 +682,6 @@ static int iMatrixCreateMethod(Ihandle* ih, void **params) ih->data->mark_col1 = -1; ih->data->mark_lin2 = -1; ih->data->mark_col2 = -1; - ih->data->use_title_size = 0; return IUP_NOERROR; } @@ -700,11 +725,34 @@ static void iMatrixUnMapMethod(Ihandle* ih) iupMatrixMemRelease(ih); } +static char* iMatrixGetDefault(Ihandle* ih, const char* name) +{ + int inherit; + char *def_value; + iupClassObjectGetAttributeInfo(ih, name, &def_value, &inherit); + return def_value; +} + +static int iMatrixGetInt(Ihandle* ih, const char* name) +{ + char *value = iupAttribGet(ih, name); + if (!value) value = iMatrixGetDefault(ih, name); + if (value) + { + int i = 0; + if (iupStrToInt(value, &i)) + return i; + } + return 0; +} + static int iMatrixGetNaturalWidth(Ihandle* ih) { int width = 0, num, col; - num = iupAttribGetInt(ih, "NUMCOL_VISIBLE")+1; /* include the title column */ + /* must use this custom function because + the get method for this attribute returns a value with a different meaning */ + num = iMatrixGetInt(ih, "NUMCOL_VISIBLE")+1; /* include the title column */ if (iupAttribGetInt(ih, "NUMCOL_VISIBLE_LAST")) { @@ -716,9 +764,7 @@ static int iMatrixGetNaturalWidth(Ihandle* ih) } else { - if (num > ih->data->columns.num) - num = ih->data->columns.num; - for(col = 0; col < num; col++) + for(col = 0; col < num; col++) /* num can be > numcol */ width += iupMatrixAuxGetColumnWidth(ih, col); } @@ -729,7 +775,9 @@ static int iMatrixGetNaturalHeight(Ihandle* ih) { int height = 0, num, lin; - num = iupAttribGetInt(ih, "NUMLIN_VISIBLE")+1; /* include the title line */ + /* must use this custom function because + the get method for this attribute returns a value with a different meaning */ + num = iMatrixGetInt(ih, "NUMLIN_VISIBLE")+1; /* include the title line */ if (iupAttribGetInt(ih, "NUMLIN_VISIBLE_LAST")) { @@ -741,9 +789,7 @@ static int iMatrixGetNaturalHeight(Ihandle* ih) } else { - if (num > ih->data->lines.num) - num = ih->data->lines.num; - for(lin = 0; lin < num; lin++) + for(lin = 0; lin < num; lin++) /* num can be > numlin */ height += iupMatrixAuxGetLineHeight(ih, lin); } @@ -902,6 +948,8 @@ Iclass* iupMatrixGetClass(void) /* IupMatrix Attributes - GENERAL */ iupClassRegisterAttribute(ic, "USETITLESIZE", iMatrixGetUseTitleSizeAttrib, iMatrixSetUseTitleSizeAttrib, IUPAF_SAMEASSYSTEM, "NO", IUPAF_NOT_MAPPED|IUPAF_NO_INHERIT); + iupClassRegisterAttribute(ic, "HIDDENTEXTMARKS", iMatrixGetHiddenTextMarksAttrib, iMatrixSetHiddenTextMarksAttrib, IUPAF_SAMEASSYSTEM, "NO", IUPAF_NOT_MAPPED|IUPAF_NO_INHERIT); + iupClassRegisterAttribute(ic, "FRAMECOLOR", NULL, NULL, IUPAF_SAMEASSYSTEM, "100 100 100", IUPAF_NO_INHERIT); iupClassRegisterAttribute(ic, "READONLY", NULL, NULL, NULL, NULL, IUPAF_NOT_MAPPED|IUPAF_NO_INHERIT); iupClassRegisterAttribute(ic, "RESIZEMATRIX", NULL, NULL, NULL, NULL, IUPAF_NOT_MAPPED|IUPAF_NO_INHERIT); |