|
Packit |
b099d7 |
/* $XConsortium: ScrollFrameT.c /main/5 1995/07/15 20:55:20 drk $ */
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include "XmI.h"
|
|
Packit |
b099d7 |
#include <Xm/TraitP.h>
|
|
Packit |
b099d7 |
#include <Xm/ScrollFrameT.h>
|
|
Packit |
b099d7 |
#include <Xm/NavigatorT.h>
|
|
Packit |
b099d7 |
#include "MessagesI.h"
|
|
Packit |
b099d7 |
#include "ScrollFramTI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define SWMessage3 _XmMMsgScrollFrameT_0000
|
|
Packit |
b099d7 |
#define SWMessage4 _XmMMsgScrollFrameT_0001
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmSFAddNavigator convenience function
|
|
Packit |
b099d7 |
* Entering here, sf is an initialized scrollframe, and
|
|
Packit |
b099d7 |
* scroll_frame_data is always valid (but the move_cb field can be
|
|
Packit |
b099d7 |
* NULL, for pure APP_DEFINED case support).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmSFAddNavigator(
|
|
Packit |
b099d7 |
Widget sf,
|
|
Packit |
b099d7 |
Widget nav,
|
|
Packit |
b099d7 |
Mask dimMask,
|
|
Packit |
b099d7 |
XmScrollFrameData scroll_frame_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNavigatorTrait nav_trait ;
|
|
Packit |
b099d7 |
XmNavigatorDataRec nav_data ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((nav_trait = (XmNavigatorTrait)
|
|
Packit |
b099d7 |
XmeTraitGet((XtPointer) XtClass(nav), XmQTnavigator)) != NULL) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* check for NULL move_cb */
|
|
Packit |
b099d7 |
if (scroll_frame_data->move_cb)
|
|
Packit |
b099d7 |
nav_trait -> changeMoveCB(nav, scroll_frame_data->move_cb,
|
|
Packit |
b099d7 |
(XtPointer) scroll_frame_data->scrollable,
|
|
Packit |
b099d7 |
True) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
nav_data.valueMask = NavDimMask ;
|
|
Packit |
b099d7 |
nav_data.dimMask = dimMask ;
|
|
Packit |
b099d7 |
nav_trait -> setValue(nav, &nav_data, False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (scroll_frame_data->num_nav_list ==
|
|
Packit |
b099d7 |
scroll_frame_data->num_nav_slots) {
|
|
Packit |
b099d7 |
/* Allocate more space */
|
|
Packit |
b099d7 |
scroll_frame_data->num_nav_slots += 2;
|
|
Packit |
b099d7 |
scroll_frame_data->nav_list =
|
|
Packit |
b099d7 |
(WidgetList) XtRealloc((char*)scroll_frame_data->nav_list,
|
|
Packit |
b099d7 |
scroll_frame_data->num_nav_slots * sizeof(Widget));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
scroll_frame_data->nav_list[scroll_frame_data->num_nav_list] = nav;
|
|
Packit |
b099d7 |
scroll_frame_data->num_nav_list++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
XmeWarning(sf, SWMessage3);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmSFRemoveNavigator convenience function
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmSFRemoveNavigator(
|
|
Packit |
b099d7 |
Widget sf,
|
|
Packit |
b099d7 |
Widget nav,
|
|
Packit |
b099d7 |
XmScrollFrameData scroll_frame_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal position, i;
|
|
Packit |
b099d7 |
XmNavigatorTrait nav_trait ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((nav_trait = (XmNavigatorTrait)
|
|
Packit |
b099d7 |
XmeTraitGet((XtPointer) XtClass(nav), XmQTnavigator)) != NULL) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* remove the move callback */
|
|
Packit |
b099d7 |
if (scroll_frame_data->move_cb)
|
|
Packit |
b099d7 |
nav_trait -> changeMoveCB(nav, scroll_frame_data->move_cb,
|
|
Packit |
b099d7 |
(XtPointer) scroll_frame_data->scrollable,
|
|
Packit |
b099d7 |
False) ;
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
XmeWarning(sf, SWMessage4);
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (position = 0; position<scroll_frame_data->num_nav_list; position++) {
|
|
Packit |
b099d7 |
if (scroll_frame_data->nav_list[position] == nav) {
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (position == scroll_frame_data->num_nav_list) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
scroll_frame_data->num_nav_list--;
|
|
Packit |
b099d7 |
for (i = position; i < scroll_frame_data->num_nav_list; i++) {
|
|
Packit |
b099d7 |
scroll_frame_data->nav_list[i] = scroll_frame_data->nav_list[i+1];
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmSFUpdateNavigatorsValues convenience function
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmSFUpdateNavigatorsValue(
|
|
Packit |
b099d7 |
Widget sf,
|
|
Packit |
b099d7 |
XmNavigatorData nav_data,
|
|
Packit |
b099d7 |
Boolean notify)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal i, num_nav_list ;
|
|
Packit |
b099d7 |
Widget * nav_list ;
|
|
Packit |
b099d7 |
Boolean inited ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* there is a possibility that the SW was not inited for
|
|
Packit |
b099d7 |
navigation business: APP_DEFINED where no scrollbar have
|
|
Packit |
b099d7 |
been added yet */
|
|
Packit |
b099d7 |
inited = ((XmScrollFrameTrait)
|
|
Packit |
b099d7 |
XmeTraitGet((XtPointer) XtClass(sf), XmQTscrollFrame))
|
|
Packit |
b099d7 |
->getInfo(sf, NULL, &nav_list, &num_nav_list);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!inited) return ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* loop over the associated navigator list and call the change value
|
|
Packit |
b099d7 |
method for each navigator */
|
|
Packit |
b099d7 |
/* Updating the first navigator only if notify is True is not
|
|
Packit |
b099d7 |
enough, since the dimension is pertinent */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i=0; i < num_nav_list; i++) {
|
|
Packit |
b099d7 |
Widget nav = nav_list[i] ;
|
|
Packit |
b099d7 |
XmNavigatorSetValueProc nav_setValue =
|
|
Packit |
b099d7 |
((XmNavigatorTrait)
|
|
Packit |
b099d7 |
XmeTraitGet((XtPointer) XtClass(nav), XmQTnavigator))->setValue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
nav_setValue(nav, nav_data, notify);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|