427 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			427 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| //
 | |
| // 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
 | |
| 
 |