[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference bulova::decw_jan-89_to_nov-90

Title:DECWINDOWS 26-JAN-89 to 29-NOV-90
Notice:See 1639.0 for VMS V5.3 kit; 2043.0 for 5.4 IFT kit
Moderator:STAR::VATNE
Created:Mon Oct 30 1989
Last Modified:Mon Dec 31 1990
Last Successful Update:Fri Jun 06 1997
Number of topics:3726
Total number of notes:19516

322.0. "Deselecting items in a list box" by DSTR04::COCKS (I found the next to last bug!) Tue Feb 28 1989 16:55

My list box has single_selection set to false.  You can select as many items 
as you want but shift clicking on a selected item does not deselect it.  How
do you program a list box to do this?

Also, how do you program a list box to allow shift click drag to select multiple
items?

Thanks,
Tom

T.RTitleUserPersonal
Name
DateLines
322.1DwtListBoxDeselectPos ?EWBV37::HIMEThu Aug 10 1989 03:1514
>My list box has single_selection set to false.  You can select as many items 
>as you want but shift clicking on a selected item does not deselect it.  How
>do you program a list box to do this?

 I tried to realize it using DwtListBoxDeselectPos in a ExtendCallBack.
 But it does not work fine.                       
 DwtListBoxDeselectPos Deselects all items selected.

 Is this a bug or a feature ?


 Toru.

322.2CB750C::BOLGATZMon Aug 14 1989 10:4811
    clicking on a selected listbox item is not supposed to deselect it.

    > DwtListBoxDeselectPos Deselects all items selected.
    
    this works correctly in my test driver -- can you provide more details?
    Would you like me to mail my driver?
    
    Let me know
    
    Jay

322.3Please show me your program....EWBV37::HIMETue Aug 15 1989 01:42151
  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); 
    }
}