427 lines
13 KiB
C++
427 lines
13 KiB
C++
|
//
|
||
|
// LISTWIN.CPP
|
||
|
//
|
||
|
// Source file for ArchiveLib 2.0
|
||
|
//
|
||
|
// Copyright (c) Greenleaf Software, Inc. 1994-1996
|
||
|
// All Rights Reserved
|
||
|
//
|
||
|
// CONTENTS
|
||
|
//
|
||
|
// ALEntryList::FillListBox()
|
||
|
// ALEntryListFillListBox()
|
||
|
// ALEntryList::SetMarksFromListBox()
|
||
|
// ALEntryListSetMarksFromListBox()
|
||
|
// ALEntryList::MakeEntriesFromListBox()
|
||
|
// ALEntryListMakeEntriesFromListBox()
|
||
|
//
|
||
|
// DESCRIPTION
|
||
|
//
|
||
|
// A batch of functions that perform UI stuff for ALEntryList under
|
||
|
// the Windows GUI.
|
||
|
//
|
||
|
// REVISION HISTORY
|
||
|
//
|
||
|
// February 14, 1996 2.0A : New release
|
||
|
|
||
|
#include "arclib.h"
|
||
|
#if !defined( AL_IBM )
|
||
|
#pragma hdrstop
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// NAME
|
||
|
//
|
||
|
// ALEntryList::FillListBox()
|
||
|
//
|
||
|
// PLATFORMS/ENVIRONMENTS
|
||
|
//
|
||
|
// Windows
|
||
|
// C++ C PM VB
|
||
|
//
|
||
|
// 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
|
||
|
//
|
||
|
// Declare Function ALEntryListFillListBox Lib "AL20LW"
|
||
|
// (ByVal this_object&, ByVal hDlg%, ByVal list_box_id% ) as Integer
|
||
|
//
|
||
|
// DELPHI SYNOPSIS
|
||
|
//
|
||
|
// function ALEntryListFillListBox( this_object : hALEntryList;
|
||
|
// hDlg : HDlg;
|
||
|
// list_box_id : Integer ) : Integer;
|
||
|
//
|
||
|
// 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 Windows plications. 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 window;
|
||
|
|
||
|
if ( list_box_id != -1 )
|
||
|
window = GetDlgItem( hDlg, (short int) list_box_id );
|
||
|
else
|
||
|
window = hDlg;
|
||
|
SendMessage( window, LB_RESETCONTENT, 0, 0 );
|
||
|
ALEntry *job = GetFirstEntry();
|
||
|
int count = 0;
|
||
|
while ( job ) {
|
||
|
if ( job->GetMark() ) {
|
||
|
count++;
|
||
|
SendMessage( window,
|
||
|
LB_ADDSTRING,
|
||
|
0,
|
||
|
(LPARAM)( (LPSTR) job->mpStorageObject->mName ) );
|
||
|
}
|
||
|
job = job->GetNextEntry();
|
||
|
}
|
||
|
if ( count == 0 )
|
||
|
SendMessage( window,
|
||
|
LB_ADDSTRING,
|
||
|
0,
|
||
|
(LPARAM)( (LPSTR) "<none>" ) );
|
||
|
return count;
|
||
|
}
|
||
|
|
||
|
#if !defined( AL_NO_C )
|
||
|
|
||
|
extern "C" AL_LINKAGE int AL_FUNCTION
|
||
|
ALEntryListFillListBox( hALEntryList this_object, /* Tag public function */
|
||
|
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::SetMarksFromListBox()
|
||
|
//
|
||
|
// PLATFORMS/ENVIRONMENTS
|
||
|
//
|
||
|
// Windows
|
||
|
// C++ C VB Delphi
|
||
|
//
|
||
|
// 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
|
||
|
//
|
||
|
// Declare Function ALEntryListSetMarksFromListBox Lib "AL20LW"
|
||
|
// (ByVal this_object&, ByVal hDlg%, ByVal list_box_id%) As Integer
|
||
|
//
|
||
|
// DELPHI SYNOPSIS
|
||
|
//
|
||
|
// function ALEntryListSetMarksFromListBox( this_object : hALEntryList;
|
||
|
// hDlg : HWnd;
|
||
|
// list_box_id : Integer ) : Integer;
|
||
|
//
|
||
|
// 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 /* = -1 */ )
|
||
|
{
|
||
|
HWND window;
|
||
|
|
||
|
if ( list_box != -1 )
|
||
|
window = GetDlgItem( hDlg, (short int) list_box );
|
||
|
else
|
||
|
window = hDlg;
|
||
|
|
||
|
WORD count = (WORD) SendMessage( window, LB_GETSELCOUNT, 0, 0L );
|
||
|
int *items = new int[ count ];
|
||
|
if ( items == 0 )
|
||
|
return mStatus.SetError( AL_CANT_ALLOCATE_MEMORY,
|
||
|
"Memory allocation failure in SetMarksFromListBox()" );
|
||
|
#ifdef AL_FLAT_MODEL
|
||
|
if ( count != (WORD) SendMessage( window, LB_GETSELITEMS, count, (LPARAM) ( items ) ) ) {
|
||
|
#else
|
||
|
if ( count != (WORD) SendMessage( window, LB_GETSELITEMS, count, (LPARAM) ( (int _far * ) items ) ) ) {
|
||
|
#endif
|
||
|
mStatus.SetError( AL_LOGIC_ERROR,
|
||
|
"Logic error in SetMarksFromListBox()."
|
||
|
"Mismatch in select count from list box." );
|
||
|
delete[] items;
|
||
|
return AL_LOGIC_ERROR;
|
||
|
}
|
||
|
for ( WORD i = 0 ; i < count ; i++ ) {
|
||
|
WORD length = (WORD) SendMessage( window, LB_GETTEXTLEN, (short int) items[ i ], 0L );
|
||
|
AL_ASSERT( length != (WORD) LB_ERR, "SetMarksFromListBox: LB_ERR returned from list box" );
|
||
|
if ( length > 0 ) {
|
||
|
char *name = new char[ length + 1 ];
|
||
|
if ( name ) {
|
||
|
if ( SendMessage( window, LB_GETTEXT, (short int) items[ i ], (LPARAM)( (LPSTR) name ) ) >= 0 )
|
||
|
SetMarks( name );
|
||
|
delete[] name;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
delete[] items;
|
||
|
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::MakeEntriesFromListBox()
|
||
|
//
|
||
|
// PLATFORMS/ENVIRONMENTS
|
||
|
//
|
||
|
// Windows
|
||
|
// C++ C VB Delphi
|
||
|
//
|
||
|
// 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_id = -1 );
|
||
|
//
|
||
|
// C SYNOPSIS
|
||
|
//
|
||
|
// #include "arclib.h"
|
||
|
//
|
||
|
// int ALEntryListMakeEntriesFromListBox( hALEntryList this_object,
|
||
|
// HWND hDlg,
|
||
|
// int list_box_id );
|
||
|
//
|
||
|
// VB SYNOPSIS
|
||
|
//
|
||
|
// Declare Function ALEntryListMakeEntriesFromlistBox Lib "AL20LW"
|
||
|
// (ByVal this_object&, ByVal hDlg%, ByVal list_box_id% ) As Integer
|
||
|
//
|
||
|
// DELPHI SYNOPSIS
|
||
|
//
|
||
|
// function ALEntryListMakeEntriesFromlistBox( this_object : hALEntryList;
|
||
|
// hDlg : HWnd;
|
||
|
// list_box_id : Integer );
|
||
|
//
|
||
|
// 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
|
||
|
//
|
||
|
// November 13, 1995 2.00A : First release.
|
||
|
//
|
||
|
|
||
|
int AL_PROTO
|
||
|
ALEntryList::MakeEntriesFromListBox( HWND hDlg, /* Tag public function */
|
||
|
int list_box_id /* = -1 */ )
|
||
|
{
|
||
|
HWND window;
|
||
|
|
||
|
if ( list_box_id != -1 )
|
||
|
window = GetDlgItem( hDlg, (short int) list_box_id );
|
||
|
else
|
||
|
window = hDlg;
|
||
|
int count = (WORD) SendMessage( window, LB_GETSELCOUNT, 0, 0L );
|
||
|
if ( count == LB_ERR )
|
||
|
return AL_GETSEL_ERROR;
|
||
|
int *items = new int[ count ];
|
||
|
if ( items == 0 )
|
||
|
return AL_CANT_ALLOCATE_MEMORY;
|
||
|
#ifdef AL_FLAT_MODEL
|
||
|
if ( count != SendMessage( window, LB_GETSELITEMS, (short int) count, (LPARAM) items ) ) {
|
||
|
#else
|
||
|
if ( count != SendMessage( window, LB_GETSELITEMS, (short int) count, (LPARAM)(int _far *) items ) ) {
|
||
|
#endif
|
||
|
delete items;
|
||
|
return AL_GETSEL_ERROR;
|
||
|
}
|
||
|
for ( WORD i = 0 ; i < (WORD) count ; i++ ) {
|
||
|
WORD length = (WORD) SendMessage( window, LB_GETTEXTLEN, (short int) items[ i ], 0L );
|
||
|
if ( length > 0 ) {
|
||
|
char *name = new char[ length + 1 ];
|
||
|
if ( name ) {
|
||
|
if ( SendMessage( window, LB_GETTEXT, (short int) items[ i ], (LPARAM)( (LPSTR) name ) ) >= 0 ) {
|
||
|
new ALEntry( *this,
|
||
|
mToolKit.CreateStorageObject( name, AL_STORAGE_DEFAULT ),
|
||
|
mToolKit.CreateCompressor( AL_COMPRESSION_DEFAULT ),
|
||
|
mToolKit.CreateDecompressor( AL_COMPRESSION_DEFAULT ) );
|
||
|
}
|
||
|
delete name;
|
||
|
SendMessage( window,
|
||
|
LB_SETSEL,
|
||
|
0,
|
||
|
items[ i ] );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
delete items;
|
||
|
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
|
||
|
|