add destroy method, minor doc updates

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@721 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Linas Vepstas 1998-03-25 07:33:32 +00:00
parent 2361bccd9d
commit 0b9528673d
2 changed files with 99 additions and 37 deletions

View File

@ -49,12 +49,12 @@ typedef struct _PopBox {
static void selectCB (Widget w, XtPointer cd, XtPointer cb ); static void selectCB (Widget w, XtPointer cd, XtPointer cb );
static void dropDownCB (Widget w, XtPointer cd, XtPointer cb ); static void dropDownCB (Widget w, XtPointer cd, XtPointer cb );
static void realizeCombo (struct _BasicCell *bcell, void *w, int width); static void realizeCombo (BasicCell *bcell, void *w, int width);
static void moveCombo (struct _BasicCell *bcell, int phys_row, int phys_col); static void moveCombo (BasicCell *bcell, int phys_row, int phys_col);
static void destroyCombo (struct _BasicCell *bcell); static void destroyCombo (BasicCell *bcell);
static void setComboValue (struct _BasicCell *bcell, const char *value); static void setComboValue (BasicCell *bcell, const char *value);
static const char * enterCombo (struct _BasicCell *bcell, const char *value); static const char * enterCombo (BasicCell *bcell, const char *value);
static const char * leaveCombo (struct _BasicCell *bcell, const char *value); static const char * leaveCombo (BasicCell *bcell, const char *value);
#define SET(cell,str) { \ #define SET(cell,str) { \
if ((cell)->value) free ((cell)->value); \ if ((cell)->value) free ((cell)->value); \
@ -76,12 +76,71 @@ void xaccInitComboCell (ComboCell *cell)
xaccInitBasicCell ( &(cell->cell)); xaccInitBasicCell ( &(cell->cell));
cell->cell.realize = realizeCombo; cell->cell.realize = realizeCombo;
cell->cell.set_value = setComboValue; cell->cell.set_value = setComboValue;
cell->cell.destroy = destroyCombo;
cell->menuitems = (char **) malloc (sizeof (char *)); cell->menuitems = (char **) malloc (sizeof (char *));
cell->menuitems[0] = NULL; cell->menuitems[0] = NULL;
} }
/* =============================================== */ /* =============================================== */
static
void destroyCombo (BasicCell *bcell)
{
ComboCell *cell;
cell = (ComboCell *) bcell;
/* the realize callback will be null if the cell
* gui has been realized. Therefore, if its null,
* destroy the gui
*/
if (!(cell->cell.realize)) {
PopBox *box;
box = (PopBox *) (cell->cell.gui_private);
moveCombo (bcell, -1, -1);
XtDestroyWidget (box->combobox);
free (box);
/* allow the widget to be created again */
cell->cell.gui_private = NULL;
cell->cell.realize = realizeCombo;
cell->cell.move = NULL;
cell->cell.enter_cell = NULL;
cell->cell.leave_cell = NULL;
cell->cell.destroy = NULL;
}
}
/* =============================================== */
void xaccDestroyComboCell (ComboCell *cell)
{
int n = 0;
char ** arr;
destroyCombo (&(cell->cell));
/* free malloced memory */
arr = cell->menuitems;
while (arr[n]) {
free (arr[n]);
n ++;
}
free (arr);
cell->menuitems = NULL;
cell->cell.realize = NULL;
cell->cell.set_value = NULL;
xaccDestroyBasicCell ( &(cell->cell));
}
/* =============================================== */
void void
xaccAddComboCellMenuItem (ComboCell *cell, char * menustr) xaccAddComboCellMenuItem (ComboCell *cell, char * menustr)
{ {
@ -156,7 +215,7 @@ xaccSetComboCellValue (ComboCell *cell, const char * str)
/* =============================================== */ /* =============================================== */
static void static void
setComboValue (struct _BasicCell *_cell, const char *str) setComboValue (BasicCell *_cell, const char *str)
{ {
ComboCell * cell = (ComboCell *) _cell; ComboCell * cell = (ComboCell *) _cell;
xaccSetComboCellValue (cell, str); xaccSetComboCellValue (cell, str);
@ -165,7 +224,7 @@ setComboValue (struct _BasicCell *_cell, const char *str)
/* =============================================== */ /* =============================================== */
static static
void realizeCombo (struct _BasicCell *bcell, void *w, int pixel_width) void realizeCombo (BasicCell *bcell, void *w, int pixel_width)
{ {
ComboCell *cell; ComboCell *cell;
PopBox *box; PopBox *box;
@ -246,7 +305,7 @@ void realizeCombo (struct _BasicCell *bcell, void *w, int pixel_width)
/* =============================================== */ /* =============================================== */
static static
void moveCombo (struct _BasicCell *bcell, int phys_row, int phys_col) void moveCombo (BasicCell *bcell, int phys_row, int phys_col)
{ {
ComboCell *cell; ComboCell *cell;
PopBox *box; PopBox *box;
@ -270,7 +329,7 @@ void moveCombo (struct _BasicCell *bcell, int phys_row, int phys_col)
/* =============================================== */ /* =============================================== */
static static
const char * enterCombo (struct _BasicCell *bcell, const char *value) const char * enterCombo (BasicCell *bcell, const char *value)
{ {
int phys_row, phys_col; int phys_row, phys_col;
String choice; String choice;
@ -327,7 +386,7 @@ const char * enterCombo (struct _BasicCell *bcell, const char *value)
/* =============================================== */ /* =============================================== */
static static
const char * leaveCombo (struct _BasicCell *bcell, const char *value) const char * leaveCombo (BasicCell *bcell, const char *value)
{ {
ComboCell *cell; ComboCell *cell;
PopBox *box; PopBox *box;
@ -350,31 +409,6 @@ const char * leaveCombo (struct _BasicCell *bcell, const char *value)
/* =============================================== */ /* =============================================== */
static
void destroyCombo (struct _BasicCell *bcell)
{
ComboCell *cell;
PopBox *box;
cell = (ComboCell *) bcell;
box = (PopBox *) (cell->cell.gui_private);
moveCombo (bcell, -1, -1);
XtDestroyWidget (box->combobox);
free (box);
/* allow the widget to be created again */
cell->cell.gui_private = NULL;
cell->cell.realize = realizeCombo;
cell->cell.move = NULL;
cell->cell.enter_cell = NULL;
cell->cell.leave_cell = NULL;
cell->cell.destroy = NULL;
}
/* =============================================== */
static void selectCB (Widget w, XtPointer cd, XtPointer cb ) static void selectCB (Widget w, XtPointer cd, XtPointer cb )
{ {

View File

@ -3,12 +3,38 @@
* combocell.h * combocell.h
* *
* FUNCTION: * FUNCTION:
* Implements a combobox cell * The ComboCell object implements a cell handler with a
* "combination-box" pull-down menu in it.
*
* On output, the currently selected menu item is displayed.
* On input, the user can select from a list in the pull-down menu,
* or use the keyboard to slect a menu entry by typing the first
* few menu characters.
*
* METHODS:
* The xaccAddComboCellMenuItem() method can be used to add a menu
* item to the list.
*
* *
* HISTORY: * HISTORY:
* Created Jan 1998 Linas Vepstas * Created Jan 1998 Linas Vepstas
* Copyright (c) 1998 Linas Vepstas * Copyright (c) 1998 Linas Vepstas
*/ */
/********************************************************************\
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License*
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
\********************************************************************/
#ifndef __XACC_COMBO_CELL_C__ #ifndef __XACC_COMBO_CELL_C__
#define __XACC_COMBO_CELL_C__ #define __XACC_COMBO_CELL_C__
@ -22,6 +48,8 @@ typedef struct _ComboCell {
ComboCell * xaccMallocComboCell (void); ComboCell * xaccMallocComboCell (void);
void xaccInitComboCell (ComboCell *); void xaccInitComboCell (ComboCell *);
void xaccDestroyComboCell (ComboCell *);
void xaccSetComboCellValue (ComboCell *, const char *); void xaccSetComboCellValue (ComboCell *, const char *);
void xaccAddComboCellMenuItem (ComboCell *, char * menustr); void xaccAddComboCellMenuItem (ComboCell *, char * menustr);