// // LISTPM.CPP // // Source file for ArchiveLib 2.0 // // Copyright (c) Greenleaf Software, Inc. 1994-1996 // All Rights Reserved // // CONTENTS // // ALEntryList::SetMarksFromListBox() // ALEntryListSetMarksFromListBox() // ALEntryList::FillListBox() // ALEntryListFillListBox() // ALEntryList::MakeEntriesFromListBox() // ALEntryListMakeEntriesFromListBox() // // DESCRIPTION // // This file contains the ALEntryList functions that interact with OS/2 // list boxes. // // REVISION HISTORY // // February 14, 1996 2.0A : New release #include "arclib.h" #if !defined( AL_IBM ) #pragma hdrstop #endif // // NAME // // ALEntryList::SetMarksFromListBox() // // PLATFORMS/ENVIRONMENTS // // PM // C++ C // // SHORT DESCRIPTION // // Set marks in an ALEntryList based on selections in a list box. // // C++ SYNOPSIS // // #include "arclib.h" // // int ALEntryList::SetMarksFromListBox( HWND hDlg, // int list_box_id = -1 ); // // C SYNOPSIS // // #include "arclib.h" // // int ALEntryListSetMarksFromListBox( hALEntryList this_object, // HWND hDlg, // int list_box_id ); // // VB SYNOPSIS // // None, VB and OS/2 don't mix. // // DELPHI SYNOPSIS // // None, Delphi and OS/2 don't work. // // ARGUMENTS // // this_object : A reference or pointer to the ALEntryList object that // is have some marks set. Note that the C++ member function // version of this call doesn't have an explicit argument // here, since it has access to 'this' implicitly. // // hDlg : This argument is a window handle. If the next parameter, // list_box_id, is set to -1, it means this is the handle of // the list box. If list_box_id is not -1, it means this // argument is the window handle of a dialog box that // contains the list box. // // list_box_id : The id of the list box. If set to -1, it means the list // box is not in a dialog box, and the hDlg parameter is the // actual handle of the list box. // // DESCRIPTION // // This function is called after you have given a user the opportunity // to set and clear items in a multiselection list box. Once the user // has done so, you can call this function, which will go through the // list and set all the marks that have been set in the list box by the // user. Note that it will not clear the marks on any of the ALEntry // objects in the list, you might want to do that first. // // RETURNS // // A count of the items that have had their marks set. // // EXAMPLE // // SEE ALSO // // REVISION HISTORY // // February 14, 1996 2.0A : New release // int AL_PROTO ALEntryList::SetMarksFromListBox( HWND hDlg, /* Tag public function */ int list_box_id /* = -1 */ ) { int mresReply = LIT_NONE; int oldmresReply = LIT_NONE; HWND window; char name[ 256 ]; int count = 0; if ( list_box_id == -1 ) window = hDlg; else window = WinWindowFromID( hDlg, list_box_id ); mresReply = (int) WinSendMsg( window, LM_QUERYSELECTION, MPFROMSHORT( mresReply ), 0 ); oldmresReply = mresReply; if ( mresReply != LIT_NONE ) { do { int l = (int) WinSendMsg( window, LM_QUERYITEMTEXTLENGTH, MPFROMSHORT( (SHORT) mresReply), 0 ); if ( l > 255 ) l = 255; WinQueryLboxItemText( window, mresReply, name, l ); name[ l ] = '\0'; count += SetMarks( name ); mresReply = (int) WinSendMsg( window, LM_QUERYSELECTION, MPFROMSHORT( (SHORT) mresReply ), 0 ); if( mresReply == oldmresReply ) break; } while( mresReply != LIT_NONE ); } return count; } #if !defined( AL_NO_C ) extern "C" AL_LINKAGE int AL_FUNCTION ALEntryListSetMarksFromListBox( hALEntryList this_object, /* Tag public function */ HWND hDlg, int list_box_id ) { AL_ASSERT_OBJECT( this_object, ALEntryList, "ALEntryListSetMarksFromListBox" ); return ( (ALEntryList *) this_object)->SetMarksFromListBox( hDlg, list_box_id ); } #endif // // NAME // // ALEntryList::FillListBox() // // PLATFORMS/ENVIRONMENTS // // PM // C++ C // // SHORT DESCRIPTION // // Fill a list box with the object names from an ALEntryList. // // C++ SYNOPSIS // // #include "arclib.h" // // int ALEntryList::FillListBox( HWND hDlg, // int list_box_id = -1 ); // // C SYNOPSIS // // #include "arclib.h" // // int ALEntryListFillListBox( hALEntryList this_object, // HWND hDlg, // int list_box_id ) // // VB SYNOPSIS // // None, VB won't run under OS/2. // // DELPHI SYNOPSIS // // None, Delphi won't run under OS/2. // // ARGUMENTS // // this_object : A reference or pointer to the ALEntryList object that // is going to supply all the entry names that are going // to be displayed in the list box. // // hDlg : This argument is a window handle. If the next parameter, // list_box_id, is set to -1, it means this is the handle of // the list box. If list_box_id is not -1, it means this // argument is the window handle of a dialog box that // contains the list box. // // list_box_id : The id of the list box. If set to -1, it means the list // box is not in a dialog box, and the hDlg parameter is the // actual handle of the list box. // // DESCRIPTION // // This function is a handy helper when writing PM applications. It goes // through an ALEntryList, and finds all the marked entries. For every // marked entry, it stuffs the name of the storage object into the list box. // This means that if you are planning on letting the user select a list // of storage objects, you can initialize the list with just one // function call. // // RETURNS // // The number of entries that were stuffed in the list box. // // EXAMPLE // // SEE ALSO // // REVISION HISTORY // // February 14, 1996 2.0A : New release // int AL_PROTO ALEntryList::FillListBox( HWND hDlg, /* Tag public function */ int list_box_id /* = -1 */ ) { HWND hwnd; if ( list_box_id != -1 ) hwnd = WinWindowFromID( hDlg, list_box_id ); else hwnd = hDlg; WinSendMsg( hwnd, LM_DELETEALL, 0, 0 ); ALEntry *job = GetFirstEntry(); int count = 0; while ( job ) { if ( job->GetMark() ) { count++; WinSendMsg( hwnd, LM_INSERTITEM, MPFROMSHORT( LIT_END ), MPFROMP( (PSZ) job->mpStorageObject->mName ) ); } job = job->GetNextEntry(); } if( count == 0 ) WinSendMsg( hwnd, LM_INSERTITEM, MPFROMSHORT( LIT_END ), MPFROMP( (PSZ) "" ) ); return count; } #if !defined( AL_NO_C ) extern "C" AL_LINKAGE int AL_FUNCTION ALEntryListFillListBox( hALEntryList this_object, HWND hDlg, int list_box_id ) { AL_ASSERT_OBJECT( this_object, ALEntryList, "ALEntryListFillListBox" ); return ( (ALEntryList *) this_object )->FillListBox( hDlg, list_box_id ); } #endif // // NAME // // ALEntryList::MakeEntriesFromListBox() // // PLATFORMS/ENVIRONMENTS // // PM // C++ C // // SHORT DESCRIPTION // // Create new entries in a list based on selected items in a list box. // // C++ SYNOPSIS // // #include "arclib.h" // // int ALEntryList::MakeEntriesFromListBox( HWND hDlg, // int list_box = -1 ); // // C SYNOPSIS // // #include "arclib.h" // // int ALEntryListMakeEntriesFromListBox( hALEntryList this_object, // HWND hDlg, // int list_box_id ); // // VB SYNOPSIS // // None, VB and PM don't mix. // // DELPHI SYNOPSIS // // None. // // ARGUMENTS // // this_object : A reference or pointer to the ALEntryList object that // is going to have new entries added. Note that the C++ // member function version of this call doesn't have an // an explicit argument here, since it has access to 'this' // implicitly. // // hDlg : This argument is a window handle. If the next parameter, // list_box_id, is set to -1, it means this is the handle of // the list box. If list_box_id is not -1, it means this // argument is the window handle of a dialog box that // contains the list box. // // list_box_id : The id of the list box. If set to -1, it means the list // box is not in a dialog box, and the hDlg parameter is the // actual handle of the list box. // // DESCRIPTION // // This function goes through a list box, and picks out all the // highlighted entries. It creates a new ALEntry object for each // of the marked entires, using the storage objects and engines that // are present in the toolkit owned by this ALEntryList. // // RETURNS // // The number of new entries created from the list box. // // EXAMPLE // // SEE ALSO // // REVISION HISTORY // // February 14, 1996 2.0A : New release // int AL_PROTO ALEntryList::MakeEntriesFromListBox( HWND hDlg, /* Tag public function */ int list_box_id /* = -1 */ ) { int mresReply = LIT_NONE; int oldmresReply = LIT_NONE; char name[ 256 ]; HWND hwnd; int count = 0; if ( list_box_id != -1 ) hwnd = WinWindowFromID( hDlg, list_box_id ); else hwnd = hDlg; mresReply = (int) WinSendMsg( hwnd, LM_QUERYSELECTION, MPFROMSHORT( (SHORT) mresReply ), 0 ); oldmresReply = mresReply; if ( mresReply != LIT_NONE ) { do { int l = (int) WinSendMsg( hwnd, LM_QUERYITEMTEXTLENGTH, MPFROMSHORT( (SHORT) mresReply), 0 ); if ( l > 255 ) l = 255; WinQueryLboxItemText( hwnd, mresReply, name, l ); name[ l ]='\0'; new ALEntry( *this, mToolKit.CreateStorageObject( name, AL_STORAGE_DEFAULT ), mToolKit.CreateCompressor( AL_COMPRESSION_DEFAULT ), mToolKit.CreateDecompressor( AL_COMPRESSION_DEFAULT ) ); count++; WinSendMsg( hwnd, LM_SELECTITEM, MPFROMSHORT( mresReply ), MPFROMSHORT( 0 ) ); mresReply = (int) WinSendMsg( hwnd, LM_QUERYSELECTION, MPFROMSHORT( (SHORT) mresReply ), 0 ); if ( mresReply == oldmresReply ) break; } while ( mresReply != LIT_NONE ); } return count; } #if !defined( AL_NO_C ) extern "C" AL_LINKAGE int AL_FUNCTION ALEntryListMakeEntriesFromListBox( hALEntryList this_object, /* Tag public function */ HWND hDlg, int list_box_id ) { AL_ASSERT_OBJECT( this_object, ALEntryList, "ALEntryListMakeEntriesFromListBox" ); return ( (ALEntryList *) this_object )->MakeEntriesFromListBox( hDlg, list_box_id ); } #endif