From b40eb43250f6afc2d5e69d1626d3c2f966c39d29 Mon Sep 17 00:00:00 2001 From: "slamm%netscape.com" Date: Thu, 15 Oct 1998 20:52:11 +0000 Subject: [PATCH] Improve column resizing. --- cmd/xfe/Microline3.0/XmL/Grid.c | 49 ++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/cmd/xfe/Microline3.0/XmL/Grid.c b/cmd/xfe/Microline3.0/XmL/Grid.c index 33bd40c9d1d4..51559b4a54c4 100644 --- a/cmd/xfe/Microline3.0/XmL/Grid.c +++ b/cmd/xfe/Microline3.0/XmL/Grid.c @@ -230,7 +230,8 @@ static void UnhideAction(Widget w, XEvent *event, String *, Cardinal *); static void setHideUnhideSensitivity(Widget w); static void MenuArm(Widget w, XEvent *event, String *, Cardinal *); static void MenuDisarm(Widget w, XEvent *event, String *, Cardinal *); -static int SizeColumnsToFit(XmLGridWidget g, int start_at); +static void ResizeColumnToFit(XmLGridWidget g, int x); +static int SizeColumnsToFit(XmLGridWidget g, int start_at); static void GridCrossingEH(Widget w, XtPointer closure, XEvent *event, Boolean *ctd); static void GridInvokeCellCrossingCallbacks(Widget w,XtCallbackList list, @@ -2149,6 +2150,8 @@ DrawResizeLine(XmLGridWidget g, { if (g->grid.inMode != InResize) return; + if (g->grid.hsPolicy == XmRESIZE_IF_POSSIBLE && !g->grid.resizeIsVert) + return; DrawXORRect(g, xy, 2, g->grid.resizeIsVert, erase); } @@ -6967,7 +6970,11 @@ ButtonMotion(Widget w, if (g->grid.resizeIsVert) DrawResizeLine(g, me->y, 0); else + { DrawResizeLine(g, me->x, 0); + if (g->grid.hsPolicy == XmRESIZE_IF_POSSIBLE) + ResizeColumnToFit(g, me->x); + } } /* drag scrolling */ @@ -7750,17 +7757,6 @@ Select(Widget w, (rect.width - GetColWidth(g, c)); if (width < 6 && g->grid.allowColHide == False) width = 6; - if (g->grid.hsPolicy == XmRESIZE_IF_POSSIBLE) - { - /* Resize all columns to the right */ - XmLGridColumn colp; - colp = (XmLGridColumn)XmLArrayGet(g->grid.colArray, - cbs.column); - colp->grid.width = width; - SizeColumnsToFit(g, cbs.column + 1); - HorizLayout(g, 0); - DrawArea(g, DrawAll, 0, 0); - } XtVaSetValues((Widget)g, XmNcolumnType, cbs.columnType, XmNcolumn, cbs.column, @@ -11095,6 +11091,33 @@ MenuDisarm(Widget w, g->grid.inMode = InNormal; } +static void +ResizeColumnToFit(XmLGridWidget g, int new_x) +{ + XmLGridColumn colp; + int width = 0; + XRectangle rect; + if (!RowColToXY(g, 0, g->grid.resizeCol, False, &rect)) + { + if (new_x > rect.x) + width = (new_x - rect.x) - + (rect.width - GetColWidth(g, g->grid.resizeCol)); + if (width < g->grid.minColWidth) + width = g->grid.minColWidth; + + /*printf("col(%d) resize_xy(%3d) colx(%3d) colw(%3d) column_width(%3d) new_width(%3d)\n", g->grid.resizeCol, g->grid.resizeLineXY, rect.x, rect.width, GetColWidth(g, g->grid.resizeCol), width);*/ + + /* Resize all columns to the right */ + colp = (XmLGridColumn)XmLArrayGet(g->grid.colArray, + g->grid.resizeCol); + colp->grid.width = width; + SizeColumnsToFit(g, g->grid.resizeCol + 1); + HorizLayout(g, 0); + DrawArea(g, DrawAll, 0, 0); + g->grid.resizeLineXY = rect.x + width; + } +} + static int SizeColumnsToFit(XmLGridWidget g, int starting_at) @@ -11156,7 +11179,7 @@ SizeColumnsToFit(XmLGridWidget g, int starting_at) { int col_width; int col_delta; - Dimension new_col_width; + int new_col_width; colp = (XmLGridColumn)XmLArrayGet(g->grid.colArray, ii); col_width = colp->grid.width;