Changeset 213


Ignore:
Timestamp:
Jul 26, 2007, 3:07:09 PM (14 years ago)
Author:
Eugene Romanenko
Message:

Opening external files from links in document

Location:
trunk/Lucide
Files:
6 edited

Legend:

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

    r212 r213  
    17651765                        }
    17661766                    }
     1767                    else if ( links[ pg ]->_buffer[i].link.type == LU_LINK_TYPE_EXTERNAL_FILE )
     1768                    {
     1769                        char *uri = links[ pg ]->_buffer[i].link.uri;
     1770                        if ( uri != NULL ) {
     1771                                Lucide::newWindow( uri, true );   
     1772                        }
     1773                    }
    17671774                    else if ( links[ pg ]->_buffer[i].link.type == LU_LINK_TYPE_TITLE )
    17681775                    {
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r212 r213  
    747747}
    748748
    749 void Lucide::newWindow()
    750 {
     749void Lucide::newWindow( char *file, bool addDir )
     750{
     751    char *param = NULL;
     752   
     753    if ( file != NULL )
     754    {
     755        if ( addDir )
     756        {
     757            param = new char[ CCHMAXPATH ];
     758            strcpy( param, docFullName );
     759            char *lastSlash = strrchr( param, '\\' );
     760            if ( lastSlash != NULL ) {
     761                *( lastSlash + 1 ) = 0;
     762            }
     763            strcat( param, file );
     764        }
     765        else {
     766            param = newstrdup( file );
     767        }
     768    }
     769
    751770    PROGDETAILS pd;
    752771    pd.Length                      = sizeof( PROGDETAILS );
     
    769788    pd.swpInitial.ulReserved2      = 0;
    770789
    771     WinStartApp( NULLHANDLE, &pd, NULL, NULL, 0 );
     790    WinStartApp( NULLHANDLE, &pd, param, NULL, 0 );
     791
     792    delete param;
    772793}
    773794
     
    799820            {
    800821                case CM_NEW_WINDOW:
    801                     Lucide::newWindow();
     822                    Lucide::newWindow( NULL, false );
    802823                    return (MRESULT)FALSE;
    803824
  • trunk/Lucide/SOURCE/gui/lucide.h

    r211 r213  
    8585                static ActiveWindow activeWindow;
    8686       
    87         static void newWindow();
     87        static void newWindow( char *file, bool addDir );
    8888        static void openDocument();
    8989        static void closeDocument();
  • trunk/Lucide/SOURCE/plugins/ludoc/lutypes.h

    r155 r213  
    4949#define LU_LINK_TYPE_PAGE          1
    5050#define LU_LINK_TYPE_EXTERNAL_URI  2
     51#define LU_LINK_TYPE_EXTERNAL_FILE 3
     52#define LU_LINK_TYPE_LAUNCH        4
    5153
    5254
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.cpp

    r183 r213  
    575575}
    576576
     577static long find_dest_r_page( LinkDest *link_dest )
     578{
     579    long page_num = 0;
     580
     581    if ( link_dest == NULL ) {
     582        return page_num;
     583    }
     584
     585    if ( !link_dest->isPageRef() ) {
     586        page_num = link_dest->getPageNum() - 1;
     587    }
     588
     589    return page_num;
     590}
     591
    577592static void build_goto_dest( PDFDoc *doc, LuLink *evlink, LinkGoTo *link )
    578593{
     
    598613}
    599614
     615static void build_goto_r_dest( LuLink *evlink, LinkGoToR *link )
     616{
     617    LinkDest *link_dest;
     618    UGooString *named_dest;
     619
     620    if ( !link->isOk() ) {
     621        return;
     622    }
     623
     624    link_dest  = link->getDest();
     625    named_dest = link->getNamedDest();
     626
     627    char *file = link->getFileName()->getCString();
     628    if ( file != NULL ) {
     629        evlink->uri = somstrdup( file );
     630    }
     631    evlink->page = find_dest_r_page( link_dest );
     632}
     633
    600634static void build_link( PDFDoc *doc, LuLink *evlink,
    601635                        const char *title, LinkAction *link_action )
    602636{
    603637    evlink->title = somstrdup( title );
    604     evlink->uri = NULL;
    605     evlink->type = LU_LINK_TYPE_TITLE;
    606     evlink->page = 0;
     638    evlink->uri   = NULL;
     639    evlink->type  = LU_LINK_TYPE_TITLE;
     640    evlink->page  = 0;
    607641
    608642    if ( link_action == NULL ) {
     
    617651                LinkGoTo *lgt = dynamic_cast <LinkGoTo *> (link_action);
    618652                build_goto_dest( doc, evlink, lgt );
     653            }
     654            break;
     655
     656        case actionGoToR:
     657            {
     658                evlink->type = LU_LINK_TYPE_EXTERNAL_FILE;
     659                LinkGoToR *lgt = dynamic_cast <LinkGoToR *> (link_action);
     660                build_goto_r_dest( evlink, lgt );
    619661            }
    620662            break;
  • trunk/Lucide/changelog

    r212 r213  
    99  - Ctrl+Shift++/Ctrl+Shift+- hotkeys for rotate CW/CCW, Ctrl+P for Print
    1010    (closed ticket #108).
     11  - Opening external files from links in document.
    1112  - Updated NLS-files: Czech, French, Dutch.
    1213
Note: See TracChangeset for help on using the changeset viewer.