Ignore:
Timestamp:
Aug 5, 2007, 4:57:03 PM (14 years ago)
Author:
Eugene Romanenko
Message:

subsequently load supported files in same directory, Next/Previous? menuitem (part of ticket #66)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r215 r222  
    4141
    4242#include <string>
     43#include <set>
    4344#include <stdio.h>
    4445#include <process.h>
     46#include <dos.h>
    4547
    4648#include <ludoc.xh>
     
    106108char         Lucide::docFullName[ CCHMAXPATH ]     = "";
    107109char         Lucide::docFileName[ CCHMAXPATHCOMP ] = "";
     110char         Lucide::docDirName[ CCHMAXPATHCOMP ]  = "";
    108111char        *Lucide::password                      = NULL;
    109112ActiveWindow Lucide::activeWindow                  = AwView;
     
    116119int          Lucide::thumbnailDataLen              = 0;
    117120
     121// List of files in current directory
     122static std::set<std::string> fileList;
     123static std::set<std::string>::const_iterator fileListIterator;
    118124
    119125HMODULE _hmod = NULLHANDLE;
     
    430436                {
    431437                    char *t = new char[ 2048 ];
     438                    char _dr[ _MAX_DRIVE ];
     439                    char _di[ _MAX_DIR ];
    432440                    char _fn[ _MAX_FNAME ];
    433441                    char _ex[ _MAX_EXT ];
    434                     _splitpath( fn, NULL, NULL, _fn, _ex );
     442                    _splitpath( fn, _dr, _di, _fn, _ex );
     443                    strcpy( docDirName, _dr );
     444                    strcat( docDirName, _di );
    435445                    strcpy( docFileName, _fn );
    436446                    strcat( docFileName, _ex );
     
    520530}
    521531
     532void Lucide::readMask( const char *mask )
     533{
     534    char *buf = new char[ CCHMAXPATH ];
     535    strcpy( buf, docFullName );
     536    char *r = strrchr( buf, '\\' );
     537    if ( r != NULL )
     538    {
     539        *( r + 1 ) = 0;
     540        strcat( buf, mask );
     541
     542        struct find_t ffblk;
     543        unsigned done = _dos_findfirst( buf, _A_RDONLY | _A_NORMAL, &ffblk );
     544        while ( done == 0 )
     545        {
     546            fileList.insert( ffblk.name );
     547            done = _dos_findnext( &ffblk );
     548        }
     549        _dos_findclose( &ffblk );
     550
     551    }
     552    delete buf;
     553}
     554
     555void Lucide::loadFileList()
     556{
     557    fileList.clear();
     558
     559    char *exts = newstrdup( pluginMan->getExtsMask().c_str() );
     560
     561    char *p = strtok( exts, ";" );
     562    while( p != NULL )
     563    {
     564        readMask( p );
     565        p = strtok( NULL, ";" );
     566    }
     567    delete exts;
     568
     569    fileListIterator = fileList.find( docFileName );
     570}
     571
    522572void Lucide::openDocument()
    523573{
     
    542592
    543593        loadDocument( fd->szFullFile );
     594        loadFileList();
    544595    }
    545596    delete fd;
     
    783834}
    784835
     836void Lucide::gotoFile( FileList file )
     837{
     838    if ( file == ListFirst ) {
     839        fileListIterator = fileList.begin();
     840    }
     841    else if ( file == ListPrevious )
     842    {
     843        if ( fileListIterator == fileList.begin() ) {
     844            fileListIterator = fileList.end();
     845        }
     846        fileListIterator--;
     847    }
     848    else if ( file == ListNext )
     849    {
     850        fileListIterator++;
     851        if ( fileListIterator == fileList.end() ) {
     852            fileListIterator = fileList.begin();
     853        }
     854    }
     855    else if ( file == ListLast ) {
     856        fileListIterator = fileList.end();
     857        fileListIterator--;
     858    }
     859
     860    std::string fname = *fileListIterator;
     861    char *fn = new char[ CCHMAXPATH ];
     862    strcpy( fn, docDirName );
     863    strcat( fn, fname.c_str() );
     864
     865    loadDocument( fn );
     866    delete fn;
     867}
     868
    785869static MRESULT EXPENTRY splProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
    786870{
     
    821905                    return (MRESULT)FALSE;
    822906
     907                case CM_FILEFIRST:
     908                    Lucide::gotoFile( ListFirst );
     909                    return (MRESULT)FALSE;
     910
     911                case CM_FILEPREVIOUS:
     912                    Lucide::gotoFile( ListPrevious );
     913                    return (MRESULT)FALSE;
     914
     915                case CM_FILENEXT:
     916                    Lucide::gotoFile( ListNext );
     917                    return (MRESULT)FALSE;
     918
     919                case CM_FILELAST:
     920                    Lucide::gotoFile( ListLast );
     921                    return (MRESULT)FALSE;
     922
    823923                case CM_PRINT:
    824924                {
    825                     PrintDlg *d = new PrintDlg( hWndFrame, doc, Lucide::docFileName, docViewer->getCurrentPage() + 1 );
     925                    PrintDlg *d = new PrintDlg( hWndFrame, doc, Lucide::docFileName,
     926                                                docViewer->getCurrentPage() + 1 );
    826927                    if ( d->showDialog() == DID_OK )
    827928                    {
Note: See TracChangeset for help on using the changeset viewer.