campo-sirio/al/cpp_ui.pm/listpm.cpp
alex 714dd74636 Archive Library versione 2.00
git-svn-id: svn://10.65.10.50/trunk@5350 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-09 16:09:54 +00:00

430 lines
13 KiB
C++
Executable File

//
// 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) "<none>" ) );
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