Changeset 238


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

fix for ticket #86, testing needed

Location:
trunk/Lucide
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/BIN/Lucide.lng

    r230 r238  
    247247FDLG_CANCEL=~Cancel
    248248FDLG_NO_PREVIEW_AVAILABLE=No preview available
     249FDLG_ALL_SUPPORTED_TYPES=<All supported types>
  • trunk/Lucide/BIN/Lucide_ru.lng

    r230 r238  
    246246FDLG_CANCEL=Žâª §
    247247FDLG_NO_PREVIEW_AVAILABLE=à¥€¯à®á¬®âà ­¥€®áâ㯥­
     248FDLG_ALL_SUPPORTED_TYPES=<‚ᥠ¯®€€¥àŠš¢ ¥¬ë¥ ⚯ë>
  • 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
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r237 r238  
    588588void Lucide::openDocument()
    589589{
    590     char dirbuf[ CCHMAXPATH ];
    591590    PFILEDLG fd = new FILEDLG;
    592591    memset( fd, 0, sizeof( FILEDLG ) );
     
    594593    fd->fl = FDS_CENTER | FDS_OPEN_DIALOG;
    595594    PrfQueryProfileString( HINI_USERPROFILE, appName, lvd, "",
    596                            dirbuf, sizeof( dirbuf ) );
    597     snprintf( fd->szFullFile, sizeof( fd->szFullFile ),
    598               "%s%s", dirbuf, pluginMan->getExtsMask().c_str() );
     595                           fd->szFullFile, sizeof( fd->szFullFile ) );
    599596    LcdFileDlg( HWND_DESKTOP, hWndFrame, fd );
    600597    if ( fd->lReturn == DID_OK )
  • trunk/Lucide/SOURCE/gui/messages.cpp

    r230 r238  
    131131// Open file dialog
    132132const char *FDLG_NO_PREVIEW_AVAILABLE = "FDLG_NO_PREVIEW_AVAILABLE";
     133const char *FDLG_ALL_SUPPORTED_TYPES  = "FDLG_ALL_SUPPORTED_TYPES";
  • trunk/Lucide/SOURCE/gui/messages.h

    r230 r238  
    132132// Open file dialog
    133133extern const char *FDLG_NO_PREVIEW_AVAILABLE;
     134extern const char *FDLG_ALL_SUPPORTED_TYPES;
    134135
    135136
  • trunk/Lucide/SOURCE/gui/pluginman.cpp

    r234 r238  
    315315            p = strtok( NULL, ";" );
    316316        }
     317        delete tmpexts;
    317318    }
    318319    return cRet;
    319320}
    320321
    321 
     322void PluginManager::getExtsList( std::vector<std::string> *list )
     323{
     324    for ( int i = 0; i < plugins->size(); i++ )
     325    {
     326        PluginInfo *pi = &(*plugins)[ i ];
     327        char *tmpexts = newstrdup( pi->extensions.c_str() );
     328        char *p = strtok( tmpexts, ";" );
     329        while ( p != NULL ) {
     330            list->push_back( p );
     331            p = strtok( NULL, ";" );
     332        }
     333        delete tmpexts;
     334    }
     335}
     336
     337
  • trunk/Lucide/SOURCE/gui/pluginman.h

    r217 r238  
    6767        LuDocument *createDocumentForExt( const char *ext, bool checkOnly );
    6868        std::string getExtsMask();
     69        void getExtsList( std::vector<std::string> *list );
    6970};
    7071
Note: See TracChangeset for help on using the changeset viewer.