|
Thank you for your reply Jay.
> this works correctly in my test driver -- can you provide more details?
Yes, I can show you my program to reproduce my ploblems.
> Would you like me to mail my driver?
Yes, please show me your driver.
Toru.
/*
The following program reproduce my problems.
That is...
1. Select a few items using Shift+MB1 as follow.
Item1
Item2 < MB1
Item3 < Shift+MB1
Item4 < Shift+MB1
Item5
2. Press MB1 on a Item2 to deselect it.
Then all items deselected as a result of DwtListBoxDeselectPos.
1. Select a few items using Shift+MB1 as follow.
Item1
Item2 < MB1
Item3 < Shift+MB1
Item4 < Shift+MB1
Item5
2. Press Shift+MB1 on a Item2 to deselect it.
It is to no effect by using DwtListBoxDeselectPos in a Extend Callback.
*/
#include <stdio>
#include<decw$include/DwtJWidget.h>
Widget top_level,main_window;
static void s_select();
static void e_select();
static DwtCallback select_callback[] = {
{ s_select, NULL },
{ NULL, NULL }
};
static DwtCallback extend_callback[] = {
{ e_select, NULL },
{ NULL, NULL }
};
static int flag_table[11];
static int previous;
static Arg arglist[26];
main(argc,argv)
int argc;
char **argv;
{
Widget listbox,label;
top_level = XtInitialize("Hi","Common",
NULL,
0,
&argc,
argv);
XtSetArg (arglist[0], XtNallowShellResize, TRUE);
XtSetValues (top_level, arglist, 1);
main_window = DwtDialogBox(top_level,"main_window",TRUE,
0,0,"main",DwtModeless,0,0);
XtSetArg (arglist[0], DwtNwidth, 150);
XtSetValues (main_window, arglist, 1);
XtSetArg(arglist[0],DwtNitems,0);
XtSetArg(arglist[1],DwtNitemsCount,0);
XtSetArg(arglist[2],DwtNvisibleItemsCount,5);
XtSetArg(arglist[3],DwtNsingleCallback,select_callback);
XtSetArg(arglist[4],DwtNextendCallback,extend_callback);
XtSetArg(arglist[5],DwtNsingleSelection,False);
XtSetArg(arglist[6],DwtNx,1);
XtSetArg(arglist[7],DwtNy,30);
XtSetArg(arglist[8],DwtNwidth,150);
listbox = DwtListBoxCreate(main_window,"listbox",
arglist,9);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 1"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 2"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 3"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 4"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 5"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 6"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 7"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 8"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item 9"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item10"),0);
DwtListBoxAddItem(listbox,DwtLatin1String("Item11"),0);
label = DwtLabel(main_window,"label",1,1,
DwtLatin1String("Press button once\nto select Item\ntwice to deselect"),
0);
XtSetArg (arglist[0], DwtNwidth, 150);
XtSetValues (label, arglist, 1);
XtManageChild(listbox);
XtManageChild(label);
XtManageChild(main_window);
XtMainLoop();
}
char *msg[] = { "DeSelect Item#",
"Selected Item#" };
static void s_select(widget,tag,reason)
Widget widget;
char *tag;
DwtListBoxCallbackStruct *reason;
{
flag_table[reason -> item_number] = flag_table[reason -> item_number] ^ 1;
printf("\n%s%d",msg[flag_table[reason -> item_number]],
reason -> item_number);
if (flag_table[reason -> item_number] == 0 ) {
DwtListBoxDeselectPos(widget,reason -> item_number);
}
if (previous != reason -> item_number ) {
flag_table[previous] = 0;
}
previous = reason -> item_number;
}
static void e_select(widget,tag,reason)
Widget widget;
char *tag;
DwtListBoxCallbackStruct *reason;
{
flag_table[reason -> item_number] = flag_table[reason -> item_number] ^ 1;
printf("\n%s%d%s",msg[flag_table[reason -> item_number]],
reason -> item_number,
" by Extend CallBack");
if (flag_table[reason -> item_number] == 0 ) {
DwtListBoxDeselectPos(widget,reason -> item_number);
}
}
|