/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ /*----------------------------------------------------------------------*/ /* */ /* Name: */ /* */ /* Description: XmLGrid misc utilities. They are here in order not to */ /* continue bloating Grid.c beyond hope. */ /* */ /* Author: Ramiro Estrugo */ /* */ /* Created: Thu May 28 21:55:45 PDT 1998 */ /* */ /*----------------------------------------------------------------------*/ #include "GridP.h" #include /*----------------------------------------------------------------------*/ /* extern */ int XmLGridGetRowCount(Widget w) { XmLGridWidget g = (XmLGridWidget) w; assert( g != NULL ); #ifdef DEBUG_ramiro { int rows = 0; XtVaGetValues(w,XmNrows,&rows,NULL); assert( rows == g->grid.rowCount ); } #endif return g->grid.rowCount; } /*----------------------------------------------------------------------*/ /* extern */ int XmLGridGetColumnCount(Widget w) { XmLGridWidget g = (XmLGridWidget) w; assert( g != NULL ); #ifdef DEBUG_ramiro { int columns = 0; XtVaGetValues(w,XmNcolumns,&columns,NULL); assert( columns == g->grid.colCount ); } #endif return g->grid.colCount; } /*----------------------------------------------------------------------*/ /* extern */ void XmLGridXYToCellTracking(Widget widget, int x, /* input only args. */ int y, /* input only args. */ Boolean * m_inGrid, /* input/output args. */ int * m_lastRow, /* input/output args. */ int * m_lastCol, /* input/output args. */ unsigned char * m_lastRowtype, /* input/output args. */ unsigned char * m_lastColtype,/* input/output args. */ int * outRow, /* output only args. */ int * outCol, /* output only args. */ Boolean * enter, /* output only args. */ Boolean * leave) /* output only args. */ { int m_totalLines = 0; int m_numcolumns = 0; int row = 0; int column = 0; unsigned char rowtype = XmCONTENT; unsigned char coltype = XmCONTENT; if (0 > XmLGridXYToRowColumn(widget, x, y, &rowtype, &row, &coltype, &column)) { /* In grid; but, not in any cells */ /* treat it as a leave */ *enter = FALSE; *leave = TRUE; return; }/* if */ m_totalLines = XmLGridGetRowCount(widget); m_numcolumns = XmLGridGetColumnCount(widget); if ((row < m_totalLines) && (column < m_numcolumns) && ((*m_lastRow != row)|| (*m_lastCol != column) || (*m_lastRowtype != rowtype)|| (*m_lastColtype != coltype))) { *outRow = (rowtype == XmHEADING)?-1:row; *outCol = column; if (*m_inGrid == False) { *m_inGrid = True; /* enter a cell */ *enter = TRUE; *leave = FALSE; }/* if */ else { /* Cruising among cells */ *enter = TRUE; *leave = TRUE; }/* else */ *m_lastRow = row; *m_lastCol = column; *m_lastRowtype = rowtype ; *m_lastColtype = coltype ; }/* row /col in grid */ } /*----------------------------------------------------------------------*/