Changeset 25 for trunk


Ignore:
Timestamp:
May 18, 2006, 3:41:24 PM (15 years ago)
Author:
Eugene Romanenko
Message:

implemented D&D into view window

Location:
trunk/Lucide/SOURCE/gui
Files:
6 edited

Legend:

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

    r23 r25  
    1212#include "docViewer.h"
    1313#include "progressDlg.h"
     14#include "pluginman.h"
    1415#include "luutils.h"
    1516#include "lucide_res.h"
     
    13781379}
    13791380
     1381
     1382// handles DM_DRAGOVER
     1383MRESULT DocumentViewer::wmDragOver( PDRAGINFO dragInfo )
     1384{
     1385    PDRAGITEM dragItem;
     1386    USHORT    usOp, usIndicator;
     1387
     1388    usOp = 0;
     1389    usIndicator = DOR_NODROPOP;
     1390
     1391    DrgAccessDraginfo( dragInfo );
     1392
     1393    if ( dragInfo->usOperation == DO_DEFAULT )
     1394    {
     1395        dragItem = DrgQueryDragitemPtr( dragInfo, 0 );
     1396        if ( DrgQueryDragitemCount( dragInfo ) == 1 )
     1397        {
     1398            if ( DrgVerifyRMF( dragItem, "DRM_OS2FILE", NULL ) &&
     1399                 ( dragItem->hstrContainerName != NULLHANDLE ) &&
     1400                 ( dragItem->hstrSourceName != NULLHANDLE ) )
     1401            {
     1402                char fname[ CCHMAXPATHCOMP ] = "";
     1403                DrgQueryStrName( dragItem->hstrSourceName, CCHMAXPATHCOMP, fname );
     1404                char *ext = strrchr( fname, '.' );
     1405                if ( ext != NULL ) {
     1406                    if ( pluginMan->createDocumentForExt( ext + 1, true ) != NULL ) {
     1407                        usIndicator = DOR_DROP;
     1408                        usOp = DO_UNKNOWN;
     1409                    }
     1410                }
     1411            }
     1412        }
     1413    }
     1414
     1415    DrgFreeDraginfo( dragInfo );
     1416    return MRFROM2SHORT( usIndicator, usOp );
     1417}
     1418
     1419
     1420// handles DM_DROP
     1421void DocumentViewer::wmDrop( PDRAGINFO dragInfo )
     1422{
     1423    PDRAGITEM dragItem;
     1424
     1425    DrgAccessDraginfo( dragInfo );
     1426    dragItem = DrgQueryDragitemPtr( dragInfo, 0 );
     1427
     1428    char fname[ CCHMAXPATHCOMP ] = "";
     1429    char fpath[ CCHMAXPATH ] = "";
     1430    DrgQueryStrName( dragItem->hstrSourceName, CCHMAXPATHCOMP, fname );
     1431    DrgQueryStrName( dragItem->hstrContainerName, CCHMAXPATH, fpath );
     1432    DrgFreeDraginfo( dragInfo );
     1433
     1434    strcat( fpath, fname );
     1435    Lucide::loadDocument( fpath );
     1436}
     1437
    13801438// static, window procedure
    13811439MRESULT EXPENTRY DocumentViewer::docViewProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
     
    13931451            return (MRESULT)FALSE;
    13941452        }
     1453
     1454        case DM_DRAGOVER:
     1455            return _this->wmDragOver( (PDRAGINFO)mp1 );
     1456
     1457        case DM_DROP:
     1458            _this->wmDrop( (PDRAGINFO)mp1 );
     1459            return (MRESULT)FALSE;
    13951460
    13961461        case WM_ERASEBACKGROUND:
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r23 r25  
    5050        MRESULT vertScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
    5151        MRESULT horizScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
    52         void wmSize( HWND hwnd, MPARAM mp2 );
     52        MRESULT wmDragOver( PDRAGINFO dragInfo );
     53                void wmDrop( PDRAGINFO dragInfo );
     54                void wmSize( HWND hwnd, MPARAM mp2 );
    5355        void wmPaint( HWND hwnd );
    5456        void wmPaintCont( HWND hwnd );
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r24 r25  
    265265
    266266
    267 static void loadDocument( const char *fn )
     267void Lucide::loadDocument( const char *fn )
    268268{
    269269    char *msg = newstrdupL( MSGS_NO_SUIT_PLUG );
     
    277277    else
    278278    {
    279         doc = pluginMan->createDocumentForExt( ext + 1 );
    280         if ( doc == NULL ) {
     279        LuDocument *d = pluginMan->createDocumentForExt( ext + 1, false );
     280        if ( d == NULL ) {
    281281            WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
    282282                           NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
     
    285285        {
    286286            char *error = NULL;
    287             if ( doc->loadFile( ev, (char *)fn, NULL, &error ) ) {
     287            if ( d->loadFile( ev, (char *)fn, NULL, &error ) ) {
     288                delete doc;
     289                doc = d;
    288290                Lucide::setDocument( doc );
    289291            }
     
    302304                }
    303305
    304                 delete doc;
    305                 doc = NULL;
     306                delete d;
    306307            }
    307308        }
     
    310311}
    311312
    312 static void openDocument()
     313void Lucide::openDocument()
    313314{
    314315    PFILEDLG fd = new FILEDLG;
     
    337338static MRESULT EXPENTRY splProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
    338339{
     340
    339341    switch ( msg )
    340342    {
     
    345347            {
    346348                case CM_OPEN:
    347                     openDocument();
     349                    Lucide::openDocument();
    348350                    return (MRESULT)FALSE;
    349351
     
    508510    Lucide::checkMenus();
    509511    if ( argc > 1 ) {
    510         loadDocument( argv[1] );
     512        Lucide::loadDocument( argv[1] );
    511513    }
    512514
  • trunk/Lucide/SOURCE/gui/lucide.h

    r18 r25  
    1616                static bool dontSwitchPage;
    1717               
     18                static void openDocument();
     19                static void loadDocument( const char *fn );
    1820                static void setDocument( LuDocument *_doc );
    1921                static void checkNavigationMenus();
  • trunk/Lucide/SOURCE/gui/pluginman.cpp

    r2 r25  
    8787
    8888// returns NULL if not suitable plugin found
    89 LuDocument *PluginManager::createDocumentForExt( const char *ext )
     89// if checkOnly is true - just check if suitable plugin exist
     90LuDocument *PluginManager::createDocumentForExt( const char *ext, bool checkOnly )
    9091{
     92        if ( ext == NULL ) {
     93                return NULL;
     94        }
     95
    9196    LuDocument * APIENTRY (*pCreateObject)();
    9297
     
    114119                delete cExt;
    115120                delete cExts;
    116                 return pCreateObject();
     121
     122                if ( checkOnly ) {
     123                    return (LuDocument *)TRUE;
     124                }
     125                else {
     126                    return pCreateObject();
     127                }
    117128            }
    118129        }
     
    124135    return NULL;
    125136}
     137
    126138
    127139std::string PluginManager::getExtsMask()
  • trunk/Lucide/SOURCE/gui/pluginman.h

    r2 r25  
    44#include <vector>
    55#include <string>
    6 using namespace std;
    76
    87
     
    1716};
    1817
    19 typedef vector<PluginInfo> PluginInfoList;
     18typedef std::vector<PluginInfo> PluginInfoList;
    2019
    2120class PluginManager
     
    2827        ~PluginManager();
    2928        PluginInfoList *getPluginsList() { return plugins; }
    30         LuDocument *createDocumentForExt( const char *ext );
     29        LuDocument *createDocumentForExt( const char *ext, bool checkOnly );
    3130        std::string getExtsMask();
    3231};
    3332
     33
     34extern PluginManager *pluginMan;
     35
    3436#endif // __PLUGINMAN_H
Note: See TracChangeset for help on using the changeset viewer.