Changeset 177 for trunk/Lucide/SOURCE


Ignore:
Timestamp:
Jan 5, 2007, 4:18:35 PM (15 years ago)
Author:
Eugene Romanenko
Message:

Ask for password, if document password-protected

Location:
trunk/Lucide/SOURCE/gui
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/Lucide_res.H

    r162 r177  
    160160#define IDC_SELECTED_FORM       31
    161161
     162#define IDD_PASSWORD        1009
     163#define IDC_PASSWORD        10
     164
    162165
    163166#endif // __LUCIDE_RES_H
  • trunk/Lucide/SOURCE/gui/dialogs.rc

    r162 r177  
    213213END
    214214
     215
     216DLGTEMPLATE IDD_PASSWORD
     217BEGIN
     218        DIALOG "PSW_TITLE", 100, 6, 115, 206, 50, WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR
     219        BEGIN
     220                CONTROL "PSW_PASSWORD", -1, 4, 27, 56, 12, WC_STATIC, SS_TEXT | DT_LEFT | DT_VCENTER | DT_MNEMONIC | WS_VISIBLE | WS_GROUP
     221                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
     222                CONTROL "", IDC_PASSWORD, 64, 28, 136, 10, WC_ENTRYFIELD, ES_LEFT | ES_AUTOSCROLL | ES_MARGIN | ES_UNREADABLE | ES_ANY | WS_VISIBLE | WS_GROUP | WS_TABSTOP
     223                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
     224                DEFPUSHBUTTON "PSW_OK", DID_OK, 96, 4, 51, 14
     225                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
     226                PUSHBUTTON "PSW_CANCEL", DID_CANCEL, 150, 4, 51, 14
     227                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
     228        END
     229
     230END
     231
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r164 r177  
    5555#include "progressDlg.h"
    5656#include "settingsDlg.h"
     57#include "passwordDlg.h"
    5758#include "docViewer.h"
    5859#include "indexWindow.h"
     
    105106char         Lucide::docFullName[ CCHMAXPATH ]     = "";
    106107char         Lucide::docFileName[ CCHMAXPATHCOMP ] = "";
     108char        *Lucide::password                      = NULL;
    107109// static data for asynch loading document
    108110ProgressDlg *Lucide::loadProgressDlg               = NULL;
     
    356358}
    357359
    358 void Lucide::loadthread( void *p )
     360void Lucide::loadthread( void* )
    359361{
    360362    HAB thab = WinInitialize( 0 );
    361363    HMQ thmq = WinCreateMsgQueue( thab, 0 );
    362364
    363     docLoaded = doc->loadFile( ev, docFullName, NULL, &loadErrorCode, &loadError );
     365    docLoaded = doc->loadFile( ev, docFullName, password, &loadErrorCode, &loadError );
    364366    if ( docLoaded ) {
    365367        if ( doc->isCreateFileThumbnail( ev ) && isThumbNeeded( docFullName ) ) {
     
    381383    // find extension
    382384    char *ext = strrchr( fn, '.' );
    383     if ( ext == NULL ) {
     385    if ( ext == NULL )
     386    {
    384387        WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
    385388                       NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
     
    398401
    399402            doc = pluginMan->createDocumentForExt( ext + 1, false );
    400             if ( doc == NULL ) {
     403            if ( doc == NULL )
     404            {
    401405                WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
    402406                               NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
     
    405409            {
    406410                strcpy( docFullName, fn );
    407                 docLoaded = false;;
    408                 loadError = NULL;
    409 
    410                 // Load document asynchronously
    411                 loadProgressDlg = new ProgressDlg( hWndFrame );
    412                 char *ldmsg = newstrdupL( MSGS_LOADING_DOCUMENT );
    413                 loadProgressDlg->setText( ldmsg );
    414                 delete ldmsg;
    415                 loadProgressDlg->show( loadthread, NULL ); // doc will be loaded
    416                 delete loadProgressDlg;
    417 
    418                 if ( docLoaded )
     411                if ( password != NULL ) {
     412                    delete password;
     413                    password = NULL;
     414                }
     415                bool once = true;
     416                while ( once || ( password != NULL ) )
    419417                {
    420                     char *t = new char[ 2048 ];
    421                     char _fn[ _MAX_FNAME ];
    422                     char _ex[ _MAX_EXT ];
    423                     _splitpath( fn, NULL, NULL, _fn, _ex );
    424                     strcpy( docFileName, _fn );
    425                     strcat( docFileName, _ex );
    426                     snprintf( t, 2048, "%s - %s", docFileName, title );
    427                     WinSetWindowText( hWndFrame, t );
    428                     delete t;
    429                     setDocument( doc );
    430                 }
    431                 else
    432                 {
    433                     if ( loadErrorCode == LU_LDERR_NO_ERROR )
     418                    once = false;
     419                    docLoaded = false;
     420                    loadError = NULL;
     421
     422                    // Load document asynchronously
     423                    loadProgressDlg = new ProgressDlg( hWndFrame );
     424                    char *ldmsg = newstrdupL( MSGS_LOADING_DOCUMENT );
     425                    loadProgressDlg->setText( ldmsg );
     426                    delete ldmsg;
     427                    loadProgressDlg->show( loadthread, NULL ); // doc will be loaded
     428                    delete loadProgressDlg;
     429
     430                    if ( password != NULL ) {
     431                        delete password;
     432                        password = NULL;
     433                    }
     434
     435                    if ( docLoaded )
    434436                    {
    435                         char *m = newstrdupL( MSGS_FILE_LOAD_ERROR );
    436                         WinMessageBox( HWND_DESKTOP, hWndFrame, m,
    437                                        NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
    438                         delete m;
     437                        char *t = new char[ 2048 ];
     438                        char _fn[ _MAX_FNAME ];
     439                        char _ex[ _MAX_EXT ];
     440                        _splitpath( fn, NULL, NULL, _fn, _ex );
     441                        strcpy( docFileName, _fn );
     442                        strcat( docFileName, _ex );
     443                        snprintf( t, 2048, "%s - %s", docFileName, title );
     444                        WinSetWindowText( hWndFrame, t );
     445                        delete t;
     446                        setDocument( doc );
    439447                    }
    440448                    else
    441449                    {
    442                         std::string msgTempl = getLocalizedString( MSGS_LDERR );
    443 
    444                         const int errmsgLen = 1024;
    445                         char *errmsg = new char[ errmsgLen ];
    446                         memset( errmsg, 0, errmsgLen );
    447 
    448                         if ( loadErrorCode == LU_LDERR_CUSTOM )
     450                        if ( loadErrorCode == LU_LDERR_NO_ERROR )
    449451                        {
    450                             snprintf( errmsg, errmsgLen, msgTempl.c_str(), loadError );
    451                             SOMFree( loadError );
     452                            char *m = newstrdupL( MSGS_FILE_LOAD_ERROR );
     453                            WinMessageBox( HWND_DESKTOP, hWndFrame, m,
     454                                           NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
     455                            delete m;
    452456                        }
    453457                        else
    454458                        {
    455                             const char *lmsg = NULL;
    456                             switch ( loadErrorCode )
     459                            std::string msgTempl = getLocalizedString( MSGS_LDERR );
     460
     461                            const int errmsgLen = 1024;
     462                            char *errmsg = new char[ errmsgLen ];
     463                            memset( errmsg, 0, errmsgLen );
     464
     465                            if ( loadErrorCode == LU_LDERR_CUSTOM )
    457466                            {
    458                                 case LU_LDERR_OUT_OF_MEMORY:
    459                                     lmsg = MSGS_LDERR_OUT_OF_MEMORY;
    460                                     break;
    461                                 case LU_LDERR_OPEN_ERROR:
    462                                     lmsg = MSGS_LDERR_OPEN_ERROR;
    463                                     break;
    464                                 case LU_LDERR_READ_ERROR:
    465                                     lmsg = MSGS_LDERR_READ_ERROR;
    466                                     break;
    467                                 case LU_LDERR_DAMAGED:
    468                                     lmsg = MSGS_LDERR_DAMAGED;
    469                                     break;
    470                                 case LU_LDERR_WRONG_FORMAT:
    471                                     lmsg = MSGS_LDERR_WRONG_FORMAT;
    472                                     break;
    473                                 case LU_LDERR_ENCRYPTED:
    474                                     lmsg = MSGS_LDERR_ENCRYPTED;
    475                                     break;
     467                                snprintf( errmsg, errmsgLen, msgTempl.c_str(), loadError );
     468                                SOMFree( loadError );
    476469                            }
    477 
    478                             if ( lmsg != NULL ) {
    479                                 snprintf( errmsg, errmsgLen, msgTempl.c_str(),
    480                                           getLocalizedString( lmsg ).c_str() );
     470                            else
     471                            {
     472                                const char *lmsg = NULL;
     473                                switch ( loadErrorCode )
     474                                {
     475                                    case LU_LDERR_OUT_OF_MEMORY:
     476                                        lmsg = MSGS_LDERR_OUT_OF_MEMORY;
     477                                        break;
     478                                    case LU_LDERR_OPEN_ERROR:
     479                                        lmsg = MSGS_LDERR_OPEN_ERROR;
     480                                        break;
     481                                    case LU_LDERR_READ_ERROR:
     482                                        lmsg = MSGS_LDERR_READ_ERROR;
     483                                        break;
     484                                    case LU_LDERR_DAMAGED:
     485                                        lmsg = MSGS_LDERR_DAMAGED;
     486                                        break;
     487                                    case LU_LDERR_WRONG_FORMAT:
     488                                        lmsg = MSGS_LDERR_WRONG_FORMAT;
     489                                        break;
     490                                    case LU_LDERR_ENCRYPTED:
     491                                        {
     492                                            lmsg = MSGS_LDERR_ENCRYPTED;
     493
     494                                            PasswordDlg *pd = new PasswordDlg( hWndFrame );
     495                                            if ( pd->showDialog() == DID_OK ) {
     496                                                password = newstrdup( pd->getPassword() );
     497                                            }
     498                                            delete pd;
     499                                        }
     500                                        break;
     501                                }
     502
     503                                if ( lmsg != NULL ) {
     504                                    snprintf( errmsg, errmsgLen, msgTempl.c_str(),
     505                                              getLocalizedString( lmsg ).c_str() );
     506                                }
    481507                            }
     508
     509                            if ( password == NULL )
     510                            {
     511                                WinMessageBox( HWND_DESKTOP, hWndFrame, errmsg, NULL, 0,
     512                                               MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
     513                            }
     514                            delete errmsg;
     515                        } // ( loadErrorCode == LU_LDERR_NO_ERROR )
     516
     517                        if ( password == NULL ) {
     518                            delete doc;
     519                            doc = NULL;
    482520                        }
    483 
    484                         WinMessageBox( HWND_DESKTOP, hWndFrame, errmsg,
    485                                        NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
    486                         delete errmsg;
    487                     }
    488 
    489                     delete doc;
    490                     doc = NULL;
    491                 }
    492             }
    493 
    494         }
    495 
    496     }
     521                    } // ( docLoaded )
     522                } // while ( once || ( password != NULL ) )
     523            } // ( doc == NULL )
     524        } // ( pluginMan->createDocumentForExt( ext + 1, true ) == NULL )
     525    } // ( ext == NULL )
    497526    delete msg;
    498527}
     
    769798                {
    770799                    PrintDlg *d = new PrintDlg( hWndFrame, doc, Lucide::docFileName, docViewer->getCurrentPage() + 1 );
    771                     if ( d->showDialog() == DID_OK ) 
     800                    if ( d->showDialog() == DID_OK )
    772801                    {
    773802                        // print
  • trunk/Lucide/SOURCE/gui/lucide.h

    r161 r177  
    6161                static ProgressDlg *loadProgressDlg;
    6262                static char docFullName[ CCHMAXPATH ];
     63                static char *password;
    6364                static bool docLoaded;
    6465                static long loadErrorCode;
  • trunk/Lucide/SOURCE/gui/makefile

    r171 r177  
    3737       fontsInfoDlg.obj docInfoDlg.obj findDlg.obj progressDlg.obj \
    3838       aboutDlg.obj settingsDlg.obj lusettings.obj printDlg.obj \
    39        print.obj stbrowser.obj pipemon.obj lucidethumbs.obj neuquant.obj
     39       print.obj stbrowser.obj pipemon.obj lucidethumbs.obj neuquant.obj \
     40       passwordDlg.obj
    4041
    4142lucide.dll: $(OBJS) lucide.res
     
    7273file $(OBJDIR)\lucidethumbs.obj
    7374file $(OBJDIR)\neuquant.obj
     75file $(OBJDIR)\passwordDlg.obj
    7476name $(EXEDIR)\lucide
    7577lib ..\plugins\ludoc\ludoc
     
    134136stbrowser.obj:      stbrowser.c
    135137neuquant.obj:       neuquant.cpp
     138passwordDlg.obj:    passwordDlg.cpp
    136139lcd.obj:            lcd.c               makefile
    137140
Note: See TracChangeset for help on using the changeset viewer.