Ignore:
Timestamp:
Aug 2, 2007, 6:20:51 PM (14 years ago)
Author:
Eugene Romanenko
Message:
  • If the filename does not have an extension or the extension is unknown, it will check file data to determine a suitable plugin (closes #43)
File:
1 edited

Legend:

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

    r213 r215  
    384384    char *msg = newstrdupL( MSGS_NO_SUIT_PLUG );
    385385
    386     // find extension
    387     char *ext = strrchr( fn, '.' );
    388     if ( ext == NULL )
     386    // test if file supported and then close previous opened document
     387    if ( pluginMan->createDocumentForFile( fn, true ) == NULL )
    389388    {
    390389        WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
     
    393392    else
    394393    {
    395         // test if extension supported and then close previous opened document
    396         if ( pluginMan->createDocumentForExt( ext + 1, true ) == NULL )
     394        closeDocument();
     395
     396        doc = pluginMan->createDocumentForFile( fn, false );
     397        if ( doc == NULL )
    397398        {
    398399            WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
     
    401402        else
    402403        {
    403             closeDocument();
    404 
    405             doc = pluginMan->createDocumentForExt( ext + 1, false );
    406             if ( doc == NULL )
     404            strcpy( docFullName, fn );
     405            if ( password != NULL ) {
     406                delete password;
     407                password = NULL;
     408            }
     409            bool once = true;
     410            while ( once || ( password != NULL ) )
    407411            {
    408                 WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
    409                                NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
    410             }
    411             else
    412             {
    413                 strcpy( docFullName, fn );
     412                once = false;
     413                docLoaded = false;
     414                loadError = NULL;
     415
     416                // Load document asynchronously
     417                loadProgressDlg = new ProgressDlg( hWndFrame );
     418                char *ldmsg = newstrdupL( MSGS_LOADING_DOCUMENT );
     419                loadProgressDlg->setText( ldmsg );
     420                delete ldmsg;
     421                loadProgressDlg->show( loadthread, NULL ); // doc will be loaded
     422                delete loadProgressDlg;
     423
    414424                if ( password != NULL ) {
    415425                    delete password;
    416426                    password = NULL;
    417427                }
    418                 bool once = true;
    419                 while ( once || ( password != NULL ) )
     428
     429                if ( docLoaded )
    420430                {
    421                     once = false;
    422                     docLoaded = false;
    423                     loadError = NULL;
    424 
    425                     // Load document asynchronously
    426                     loadProgressDlg = new ProgressDlg( hWndFrame );
    427                     char *ldmsg = newstrdupL( MSGS_LOADING_DOCUMENT );
    428                     loadProgressDlg->setText( ldmsg );
    429                     delete ldmsg;
    430                     loadProgressDlg->show( loadthread, NULL ); // doc will be loaded
    431                     delete loadProgressDlg;
    432 
    433                     if ( password != NULL ) {
    434                         delete password;
    435                         password = NULL;
    436                     }
    437 
    438                     if ( docLoaded )
     431                    char *t = new char[ 2048 ];
     432                    char _fn[ _MAX_FNAME ];
     433                    char _ex[ _MAX_EXT ];
     434                    _splitpath( fn, NULL, NULL, _fn, _ex );
     435                    strcpy( docFileName, _fn );
     436                    strcat( docFileName, _ex );
     437                    snprintf( t, 2048, "%s - %s", docFileName, title );
     438                    WinSetWindowText( hWndFrame, t );
     439                    delete t;
     440                    setDocument( doc );
     441                }
     442                else
     443                {
     444                    if ( loadErrorCode == LU_LDERR_NO_ERROR )
    439445                    {
    440                         char *t = new char[ 2048 ];
    441                         char _fn[ _MAX_FNAME ];
    442                         char _ex[ _MAX_EXT ];
    443                         _splitpath( fn, NULL, NULL, _fn, _ex );
    444                         strcpy( docFileName, _fn );
    445                         strcat( docFileName, _ex );
    446                         snprintf( t, 2048, "%s - %s", docFileName, title );
    447                         WinSetWindowText( hWndFrame, t );
    448                         delete t;
    449                         setDocument( doc );
     446                        char *m = newstrdupL( MSGS_FILE_LOAD_ERROR );
     447                        WinMessageBox( HWND_DESKTOP, hWndFrame, m,
     448                                       NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
     449                        delete m;
    450450                    }
    451451                    else
    452452                    {
    453                         if ( loadErrorCode == LU_LDERR_NO_ERROR )
     453                        std::string msgTempl = getLocalizedString( MSGS_LDERR );
     454
     455                        const int errmsgLen = 1024;
     456                        char *errmsg = new char[ errmsgLen ];
     457                        memset( errmsg, 0, errmsgLen );
     458
     459                        if ( loadErrorCode == LU_LDERR_CUSTOM )
    454460                        {
    455                             char *m = newstrdupL( MSGS_FILE_LOAD_ERROR );
    456                             WinMessageBox( HWND_DESKTOP, hWndFrame, m,
    457                                            NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
    458                             delete m;
     461                            snprintf( errmsg, errmsgLen, msgTempl.c_str(), loadError );
     462                            SOMFree( loadError );
    459463                        }
    460464                        else
    461465                        {
    462                             std::string msgTempl = getLocalizedString( MSGS_LDERR );
    463 
    464                             const int errmsgLen = 1024;
    465                             char *errmsg = new char[ errmsgLen ];
    466                             memset( errmsg, 0, errmsgLen );
    467 
    468                             if ( loadErrorCode == LU_LDERR_CUSTOM )
     466                            const char *lmsg = NULL;
     467                            switch ( loadErrorCode )
    469468                            {
    470                                 snprintf( errmsg, errmsgLen, msgTempl.c_str(), loadError );
    471                                 SOMFree( loadError );
     469                                case LU_LDERR_OUT_OF_MEMORY:
     470                                    lmsg = MSGS_LDERR_OUT_OF_MEMORY;
     471                                    break;
     472                                case LU_LDERR_OPEN_ERROR:
     473                                    lmsg = MSGS_LDERR_OPEN_ERROR;
     474                                    break;
     475                                case LU_LDERR_READ_ERROR:
     476                                    lmsg = MSGS_LDERR_READ_ERROR;
     477                                    break;
     478                                case LU_LDERR_DAMAGED:
     479                                    lmsg = MSGS_LDERR_DAMAGED;
     480                                    break;
     481                                case LU_LDERR_WRONG_FORMAT:
     482                                    lmsg = MSGS_LDERR_WRONG_FORMAT;
     483                                    break;
     484                                case LU_LDERR_ENCRYPTED:
     485                                    {
     486                                        lmsg = MSGS_LDERR_ENCRYPTED;
     487
     488                                        PasswordDlg *pd = new PasswordDlg( hWndFrame );
     489                                        if ( pd->showDialog() == DID_OK ) {
     490                                            password = newstrdup( pd->getPassword() );
     491                                        }
     492                                        delete pd;
     493                                    }
     494                                    break;
    472495                            }
    473                             else
    474                             {
    475                                 const char *lmsg = NULL;
    476                                 switch ( loadErrorCode )
    477                                 {
    478                                     case LU_LDERR_OUT_OF_MEMORY:
    479                                         lmsg = MSGS_LDERR_OUT_OF_MEMORY;
    480                                         break;
    481                                     case LU_LDERR_OPEN_ERROR:
    482                                         lmsg = MSGS_LDERR_OPEN_ERROR;
    483                                         break;
    484                                     case LU_LDERR_READ_ERROR:
    485                                         lmsg = MSGS_LDERR_READ_ERROR;
    486                                         break;
    487                                     case LU_LDERR_DAMAGED:
    488                                         lmsg = MSGS_LDERR_DAMAGED;
    489                                         break;
    490                                     case LU_LDERR_WRONG_FORMAT:
    491                                         lmsg = MSGS_LDERR_WRONG_FORMAT;
    492                                         break;
    493                                     case LU_LDERR_ENCRYPTED:
    494                                         {
    495                                             lmsg = MSGS_LDERR_ENCRYPTED;
    496 
    497                                             PasswordDlg *pd = new PasswordDlg( hWndFrame );
    498                                             if ( pd->showDialog() == DID_OK ) {
    499                                                 password = newstrdup( pd->getPassword() );
    500                                             }
    501                                             delete pd;
    502                                         }
    503                                         break;
    504                                 }
    505 
    506                                 if ( lmsg != NULL ) {
    507                                     snprintf( errmsg, errmsgLen, msgTempl.c_str(),
    508                                               getLocalizedString( lmsg ).c_str() );
    509                                 }
     496
     497                            if ( lmsg != NULL ) {
     498                                snprintf( errmsg, errmsgLen, msgTempl.c_str(),
     499                                          getLocalizedString( lmsg ).c_str() );
    510500                            }
    511 
    512                             if ( password == NULL )
    513                             {
    514                                 WinMessageBox( HWND_DESKTOP, hWndFrame, errmsg, NULL, 0,
    515                                                MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
    516                             }
    517                             delete errmsg;
    518                         } // ( loadErrorCode == LU_LDERR_NO_ERROR )
    519 
    520                         if ( password == NULL ) {
    521                             delete doc;
    522                             doc = NULL;
    523501                        }
    524                     } // ( docLoaded )
    525                 } // while ( once || ( password != NULL ) )
    526             } // ( doc == NULL )
    527         } // ( pluginMan->createDocumentForExt( ext + 1, true ) == NULL )
    528     } // ( ext == NULL )
     502
     503                        if ( password == NULL )
     504                        {
     505                            WinMessageBox( HWND_DESKTOP, hWndFrame, errmsg, NULL, 0,
     506                                           MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
     507                        }
     508                        delete errmsg;
     509                    } // ( loadErrorCode == LU_LDERR_NO_ERROR )
     510
     511                    if ( password == NULL ) {
     512                        delete doc;
     513                        doc = NULL;
     514                    }
     515                } // ( docLoaded )
     516            } // while ( once || ( password != NULL ) )
     517        } // ( doc == NULL )
     518    } // ( pluginMan->createDocumentForFile( fn, true ) == NULL )
    529519    delete msg;
    530520}
     
    750740{
    751741    char *param = NULL;
    752    
     742
    753743    if ( file != NULL )
    754744    {
Note: See TracChangeset for help on using the changeset viewer.