Ignore:
Timestamp:
Aug 27, 2007, 6:11:21 PM (14 years ago)
Author:
Eugene Romanenko
Message:

fix for ticket #86, testing needed

File:
1 edited

Legend:

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

    r232 r238  
    1010
    1111#include "globals.h"
     12#include "pluginman.h"
    1213#include "lucide_res.h"
    1314#include "luutils.h"
     
    1516
    1617
    17 static HWND hWndFrame = NULLHANDLE;
     18static HWND hWndFrame            = NULLHANDLE;
     19static char *szAllSupportedTypes = NULL;
    1820
    1921void previewFile( HWND hwnd, const char *fn );
     
    143145}
    144146
     147static bool isAllFiles( HWND hwnd )
     148{
     149    char ftext[ 200 ];
     150    WinQueryDlgItemText( hwnd, DID_FILTER_CB, sizeof( ftext ), ftext );
     151    return ( strcmp( ftext, szAllSupportedTypes ) != 0 );
     152}
     153
     154static BOOL checkFile( char *file, std::vector<std::string> *extList )
     155{
     156    BOOL rVal = FALSE;
     157    std::vector<std::string>::const_iterator iter;
     158    for ( iter = extList->begin(); iter != extList->end(); iter++ )
     159    {
     160        char ext[ 100 ];
     161        ext[0] = '.';
     162        ext[1] = 0;
     163        strcat( ext, (*iter).c_str() );
     164        int flen = strlen( file );
     165        int elen = strlen( ext );
     166
     167        if ( flen < elen ) {
     168            continue;
     169        }
     170
     171        char *compare_pos = file + flen - elen;
     172        if ( stricmp( compare_pos, ext ) == 0 ) {
     173            rVal = TRUE;
     174            break;
     175        }
     176    }
     177
     178    return rVal;
     179}
     180
     181
     182struct LcdFDlgData
     183{
     184    bool isAllFiles;
     185    std::vector<std::string> *extList;
     186
     187    LcdFDlgData() {
     188        isAllFiles = false;
     189        extList = new std::vector<std::string>;
     190    }
     191
     192    ~LcdFDlgData() {
     193        delete extList;
     194    }
     195};
    145196
    146197static MRESULT EXPENTRY LcdFileDlgProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
    147198{
     199    FILEDLG *pfild = (FILEDLG *)WinQueryWindowULong( hwnd, QWL_USER );
     200
    148201    switch ( msg )
    149202    {
     
    154207            centerWindow( hWndFrame, hwnd );
    155208            previewImageCreate( WinWindowFromID( hwnd, IDC_PREVIEW ) );
     209            SHORT sInx = SHORT1FROMMR( WinSendDlgItemMsg( hwnd, DID_FILTER_CB, LM_SEARCHSTRING,
     210                    MPFROM2SHORT( LSS_CASESENSITIVE, 0 ), MPFROMP( szAllSupportedTypes ) ) );
     211            WinSendDlgItemMsg( hwnd, DID_FILTER_CB, LM_SELECTITEM,
     212                               MPFROMSHORT( sInx ), MPFROMSHORT( TRUE ) );
     213
     214            ((LcdFDlgData *)pfild->ulUser)->isAllFiles = isAllFiles( hwnd );
    156215        }
    157216        break;
    158217
     218        case FDM_FILTER:
     219            if ( ((LcdFDlgData *)pfild->ulUser)->isAllFiles ) {
     220                return (MRESULT)TRUE;
     221            }
     222            else {
     223                return (MRESULT)checkFile( (char *)mp1,
     224                                           ((LcdFDlgData *)pfild->ulUser)->extList );
     225            }
     226
    159227        case WM_CONTROL:
    160228        {
    161             switch (SHORT1FROMMP(mp1))
     229            switch ( SHORT1FROMMP(mp1) )
    162230            {
    163231                case DID_FILES_LB:
    164232                    if (SHORT2FROMMP(mp1) == LN_SELECT)
    165233                    {
    166                         const MRESULT mr = WinDefFileDlgProc(hwnd, msg, mp1, mp2);
     234                        const MRESULT mr = WinDefFileDlgProc( hwnd, msg, mp1, mp2 );
    167235
    168236                        const HWND lbHwnd = HWNDFROMMP(mp2);
     
    170238
    171239                        char itemText[ CCHMAXPATH ] = { 0 };
    172 
    173240
    174241                        if ( index >= 0 )
    175242                        {
    176243                            char fn[ CCHMAXPATH ] = { 0 };
    177                             FILEDLG *pfild = (FILEDLG *)WinQueryWindowULong(hwnd, QWL_USER);
    178244                            WinQueryLboxItemText( lbHwnd, (SHORT)index, itemText, CCHMAXPATH );
    179245                            strcpy( fn, pfild->szFullFile );
     
    185251                    }
    186252                    break;
     253
     254                case DID_FILTER_CB:
     255                    ((LcdFDlgData *)pfild->ulUser)->isAllFiles = isAllFiles( hwnd );
     256                    break;
    187257            }
    188258        }
     
    198268{
    199269    hWndFrame = hwndO;
     270    if ( szAllSupportedTypes == NULL ) {
     271        szAllSupportedTypes = newstrdupL( FDLG_ALL_SUPPORTED_TYPES );
     272    }
    200273
    201274    pfild->fl |= FDS_CUSTOM;
     
    208281    pfild->usDlgId = IDD_LCD_FILEDLG;
    209282
    210     return WinFileDlg( hwndP, hwndO, pfild );
     283    char **apsz;
     284    apsz = (char **)malloc( sizeof( char* ) * 2 );
     285    apsz[ 0 ] = szAllSupportedTypes;
     286    apsz[ 1 ] = NULL;
     287    pfild->papszITypeList = (PAPSZ)apsz;
     288    pfild->ulUser = (ULONG)new LcdFDlgData;
     289    pluginMan->getExtsList( ((LcdFDlgData *)pfild->ulUser)->extList );
     290    HWND hDlg = WinFileDlg( hwndP, hwndO, pfild );
     291    free( apsz );
     292    delete ((LcdFDlgData *)pfild->ulUser);
     293    return hDlg;
    211294}
    212295
Note: See TracChangeset for help on using the changeset viewer.