source: trunk/Lucide/SOURCE/gui/lucide.cpp @ 25

Last change on this file since 25 was 25, checked in by Eugene Romanenko, 15 years ago

implemented D&D into view window

File size: 18.7 KB
Line 
1#define INCL_WIN
2#define INCL_DOS
3#include <os2.h>
4
5#include <string>
6#include <stdio.h>
7//#include <stdlib.h>
8
9#include <ludoc.xh>
10
11#include "Lucide.h"
12#include "pluginman.h"
13#include "pluginViewDlg.h"
14#include "fontsInfoDlg.h"
15#include "docInfoDlg.h"
16#include "findDlg.h"
17#include "docViewer.h"
18#include "indexWindow.h"
19#include "luutils.h"
20#include "tb_spl.h"
21#include "Lucide_res.h"
22#include "messages.h"
23
24
25const char *appName = "Lucide";
26const char *fwp = "FrameWindowPos";
27const char *lvd = "LastViewedDir";
28
29
30HWND createToolbar( HWND hwnd );
31
32HAB   hab;
33HWND  hWndFrame;
34HWND  hWndMenu;
35HWND  hToolBar;
36
37Environment    *ev        = somGetGlobalEnvironment();
38LuDocument     *doc       = NULL;
39PluginManager  *pluginMan = NULL;
40DocumentViewer *docViewer = NULL;
41IndexWindow    *indexWin  = NULL;
42FindDlg        *findDlg   = NULL;
43
44bool Lucide::dontSwitchPage = false;
45
46PFNWP pOldSplProc;
47
48void Lucide::enableCopy( bool enable )
49{
50    WinEnableMenuItem( hWndMenu, CM_COPY, enable );
51}
52
53static void setOfPages( long pages )
54{
55    char *pgfrm = newstrdupL( TB_PAGENUM );
56    char pgnum[ 32 ];
57    snprintf( pgnum, sizeof( pgnum ), pgfrm, pages );
58    delete pgfrm;
59    WinSetDlgItemText( hToolBar, TBID_OFPAGES, pgnum );
60    WinSendDlgItemMsg( hToolBar, TBID_PAGENUM, SPBM_SETLIMITS, (MPARAM)pages, (MPARAM)1 );
61}
62
63void Lucide::checkNavigationMenus()
64{
65    BOOL enfirst = ( docViewer->getCurrentPage() != 0 );
66    BOOL enlast = ( docViewer->getCurrentPage() != ( doc->getPageCount( ev ) - 1 ) );
67    WinEnableMenuItem( hWndMenu, CM_FIRSTPAGE, enfirst );
68    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FIRSTPAGE), (MPARAM)enfirst );
69    WinEnableMenuItem( hWndMenu, CM_PREVPAGE, enfirst );
70    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_PREVPAGE), (MPARAM)enfirst );
71    WinEnableMenuItem( hWndMenu, CM_NEXTPAGE, enlast );
72    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_NEXTPAGE), (MPARAM)enlast );
73    WinEnableMenuItem( hWndMenu, CM_LASTPAGE, enlast );
74    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_LASTPAGE), (MPARAM)enlast );
75
76    dontSwitchPage = true;
77    WinSendDlgItemMsg( hToolBar, TBID_PAGENUM, SPBM_SETCURRENTVALUE,
78                       MPFROMLONG( docViewer->getCurrentPage() + 1 ), MPVOID );
79    dontSwitchPage = false;
80    indexWin->goToPage( NULL, docViewer->getCurrentPage() );
81}
82
83void enableZoomMenus()
84{
85    BOOL scalable = doc->isScalable( ev );
86    WinEnableMenuItem( hWndMenu, CM_FITWINDOW, scalable );
87    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FITWINDOW), (MPARAM)scalable );
88    WinEnableMenuItem( hWndMenu, CM_ACTSIZE, scalable );
89    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_ACTSIZE), (MPARAM)scalable );
90    WinEnableMenuItem( hWndMenu, CM_FITWIDTH, scalable );
91    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FITWIDTH), (MPARAM)scalable );
92    WinEnableControl( hToolBar, TBID_ZOOM, scalable );
93    BOOL rotable = doc->isRotable( ev );
94    WinEnableMenuItem( hWndMenu, CM_ROTATE90CW, rotable );
95    WinEnableMenuItem( hWndMenu, CM_ROTATE90CCW, rotable );
96}
97
98
99void setZoomChecks( SHORT cmd, SHORT cbind, double zoom )
100{
101    if ( cmd != -1 )
102    {
103        WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( cmd, TRUE ),
104                            MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) );
105        WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT( cmd ), (MPARAM)TRUE );
106    }
107
108    if ( cbind != -1 )
109    {
110        char buf[ 255 ] = "";
111        WinSendDlgItemMsg( hToolBar, TBID_ZOOM, LM_QUERYITEMTEXT,
112                           MPFROM2SHORT( cbind, sizeof( buf ) ), MPFROMP( buf ) );
113        WinSetDlgItemText( hToolBar, TBID_ZOOM, buf );
114    }
115
116    if ( zoom != 0 )
117    {
118        std::string z = str( zoom * 100.0 ) + "%";
119        WinSetDlgItemText( hToolBar, TBID_ZOOM, z.c_str() );
120    }
121}
122
123void Lucide::checkZoomMenus()
124{
125    double zoom = docViewer->getZoom();
126
127    WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( CM_FITWINDOW, TRUE ),
128                        MPFROM2SHORT( MIA_CHECKED, FALSE ) );
129    WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT(CM_FITWINDOW), (MPARAM)FALSE );
130    WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( CM_ACTSIZE, TRUE ),
131                        MPFROM2SHORT( MIA_CHECKED, FALSE ) );
132    WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT(CM_ACTSIZE), (MPARAM)FALSE );
133    WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( CM_FITWIDTH, TRUE ),
134                        MPFROM2SHORT( MIA_CHECKED, FALSE ) );
135    WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT(CM_FITWIDTH), (MPARAM)FALSE );
136
137    if ( zoom == -2 ) {
138        setZoomChecks( CM_FITWINDOW, 1, 0 );
139    } else if ( zoom == -1 ) {
140        setZoomChecks( CM_FITWIDTH, 2, 0 );
141    } else if ( zoom == 1 ) {
142        setZoomChecks( CM_ACTSIZE, 0, 0 );
143    } else {
144        setZoomChecks( -1, -1, zoom );
145    }
146}
147
148void Lucide::checkMenus()
149{
150    // pre-set "Actual size"
151    setZoomChecks( CM_ACTSIZE, 0, 0 );
152
153    if ( doc == NULL )
154    {
155        // "single page" mode by default
156        WinSendMsg( hWndMenu, MM_SETITEMATTR,
157                    MPFROM2SHORT( CM_SINGLEPAGE, TRUE ),
158                    MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) );
159
160        WinEnableMenuItem( hWndMenu, CM_SAVEAS, FALSE );
161        WinEnableMenuItem( hWndMenu, CM_EXPORTTOPS, FALSE );
162        WinEnableMenuItem( hWndMenu, CM_PAGESETUP, FALSE );
163        WinEnableMenuItem( hWndMenu, CM_PRINT, FALSE );
164        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_PRINT), (MPARAM)FALSE );
165        WinEnableMenuItem( hWndMenu, CM_DOCINFO, FALSE );
166        WinEnableMenuItem( hWndMenu, CM_FONTSINFO, FALSE );
167
168        WinEnableMenuItem( hWndMenu, CM_COPY, FALSE );
169        WinEnableMenuItem( hWndMenu, CM_SELECTALL, FALSE );
170        WinEnableMenuItem( hWndMenu, CM_FIND, FALSE );
171        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FIND), (MPARAM)FALSE );
172        WinEnableMenuItem( hWndMenu, CM_FINDAGAIN, FALSE );
173
174        WinEnableMenuItem( hWndMenu, CM_FIRSTPAGE, FALSE );
175        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FIRSTPAGE), (MPARAM)FALSE );
176        WinEnableMenuItem( hWndMenu, CM_PREVPAGE, FALSE );
177        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_PREVPAGE), (MPARAM)FALSE );
178        WinEnableMenuItem( hWndMenu, CM_NEXTPAGE, FALSE );
179        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_NEXTPAGE), (MPARAM)FALSE );
180        WinEnableMenuItem( hWndMenu, CM_LASTPAGE, FALSE );
181        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_LASTPAGE), (MPARAM)FALSE );
182        WinEnableMenuItem( hWndMenu, CM_GOTOPAGE, FALSE );
183
184        WinEnableMenuItem( hWndMenu, CM_FITWINDOW, FALSE );
185        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FITWINDOW), (MPARAM)FALSE );
186        WinEnableMenuItem( hWndMenu, CM_ACTSIZE, FALSE );
187        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_ACTSIZE), (MPARAM)FALSE );
188        WinEnableMenuItem( hWndMenu, CM_FITWIDTH, FALSE );
189        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FITWIDTH), (MPARAM)FALSE );
190        WinEnableControl( hToolBar, TBID_ZOOM, FALSE );
191
192        WinEnableMenuItem( hWndMenu, CM_ROTATE90CW, FALSE );
193        WinEnableMenuItem( hWndMenu, CM_ROTATE90CCW, FALSE );
194        WinEnableMenuItem( hWndMenu, CM_NAVPANE, FALSE );
195        WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_NAVPANE), (MPARAM)FALSE );
196        WinEnableMenuItem( hWndMenu, CM_SINGLEPAGE, FALSE );
197        WinEnableMenuItem( hWndMenu, CM_CONTINUOUS, FALSE );
198
199        setOfPages( 0 );
200        return;
201    }
202
203
204    checkNavigationMenus();
205    enableZoomMenus();
206    checkZoomMenus();
207
208    setOfPages( doc->getPageCount( ev ) );
209    WinEnableMenuItem( hWndMenu, CM_FONTSINFO, doc->isHaveFontInfo( ev ) );
210    WinEnableMenuItem( hWndMenu, CM_DOCINFO, TRUE );
211
212    BOOL haveText = doc->isHaveText( ev );
213    WinEnableMenuItem( hWndMenu, CM_FIND, haveText );
214    WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_FIND), (MPARAM)haveText );
215
216    WinEnableMenuItem( hWndMenu, CM_SINGLEPAGE, TRUE );
217    WinEnableMenuItem( hWndMenu, CM_CONTINUOUS, TRUE );
218}
219
220void Lucide::goToPage( long page )
221{
222    if ( docViewer != NULL ) {
223        docViewer->goToPage( page );
224    }
225}
226
227void Lucide::setZoom( double zoom )
228{
229    if ( docViewer != NULL ) {
230        docViewer->setZoom( zoom );
231        checkZoomMenus();
232    }
233}
234
235void Lucide::setDocument( LuDocument *_doc )
236{
237    docViewer->setDocument( _doc );
238    indexWin->setDocument( _doc );
239    Lucide::checkMenus();
240}
241
242void Lucide::setViewMode( ViewMode mode )
243{
244    if ( mode == SinglePage )
245    {
246        WinSendMsg( hWndMenu, MM_SETITEMATTR,
247                    MPFROM2SHORT( CM_SINGLEPAGE, TRUE ),
248                    MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) );
249        WinSendMsg( hWndMenu, MM_SETITEMATTR,
250                    MPFROM2SHORT( CM_CONTINUOUS, TRUE ),
251                    MPFROM2SHORT( MIA_CHECKED, FALSE ) );
252    }
253    else
254    {
255        WinSendMsg( hWndMenu, MM_SETITEMATTR,
256                    MPFROM2SHORT( CM_SINGLEPAGE, TRUE ),
257                    MPFROM2SHORT( MIA_CHECKED, FALSE ) );
258        WinSendMsg( hWndMenu, MM_SETITEMATTR,
259                    MPFROM2SHORT( CM_CONTINUOUS, TRUE ),
260                    MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) );
261    }
262
263    docViewer->setViewMode( mode );
264}
265
266
267void Lucide::loadDocument( const char *fn )
268{
269    char *msg = newstrdupL( MSGS_NO_SUIT_PLUG );
270
271    // find extension
272    char *ext = strrchr( fn, '.' );
273    if ( ext == NULL ) {
274        WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
275                       NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
276    }
277    else
278    {
279        LuDocument *d = pluginMan->createDocumentForExt( ext + 1, false );
280        if ( d == NULL ) {
281            WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
282                           NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
283        }
284        else
285        {
286            char *error = NULL;
287            if ( d->loadFile( ev, (char *)fn, NULL, &error ) ) {
288                delete doc;
289                doc = d;
290                Lucide::setDocument( doc );
291            }
292            else
293            {
294                if ( error == NULL ) {
295                    char *m = newstrdupL( MSGS_FILE_LOAD_ERROR );
296                    WinMessageBox( HWND_DESKTOP, hWndFrame, m,
297                                   NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
298                    delete m;
299                }
300                else {
301                    WinMessageBox( HWND_DESKTOP, hWndFrame, error,
302                                   NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
303                    SOMFree( error );
304                }
305
306                delete d;
307            }
308        }
309    }
310    delete msg;
311}
312
313void Lucide::openDocument()
314{
315    PFILEDLG fd = new FILEDLG;
316    memset( fd, 0, sizeof( FILEDLG ) );
317    fd->cbSize = sizeof( FILEDLG );
318    fd->fl = FDS_CENTER | FDS_OPEN_DIALOG;
319    PrfQueryProfileString( HINI_USERPROFILE, appName, lvd, "",
320                           fd->szFullFile, sizeof( fd->szFullFile ) );
321    strcat( fd->szFullFile, pluginMan->getExtsMask().c_str() );
322    WinFileDlg( HWND_DESKTOP, hWndFrame, fd );
323    if ( fd->lReturn == DID_OK )
324    {
325        char drv[ _MAX_DRIVE ] = "";
326        char dir[ _MAX_PATH ] = "";
327        char buf[ _MAX_PATH ] = "";
328        _splitpath( fd->szFullFile, drv, dir, NULL, NULL );
329        _makepath( buf, drv, dir, NULL, NULL );
330        PrfWriteProfileString( HINI_USERPROFILE, appName, lvd, buf );
331
332        loadDocument( fd->szFullFile );
333    }
334    delete fd;
335}
336
337
338static MRESULT EXPENTRY splProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
339{
340
341    switch ( msg )
342    {
343
344        case WM_COMMAND:
345        {
346            switch ( SHORT1FROMMP(mp1) )
347            {
348                case CM_OPEN:
349                    Lucide::openDocument();
350                    return (MRESULT)FALSE;
351
352                case CM_EXIT:
353                    WinPostMsg( hWndFrame, WM_CLOSE, NULL, NULL );
354                    return (MRESULT)FALSE;
355
356                case CM_DOCINFO:
357                {
358                    LuDocumentInfo *dinfo = doc->getDocumentInfo( ev );
359                    DocInfoDlg *d = new DocInfoDlg( hWndFrame, dinfo );
360                    d->doDialog();
361                    LuDocument::freeDocumentInfo( ev, dinfo );
362                    return (MRESULT)FALSE;
363                }
364
365                case CM_FONTSINFO:
366                {
367                    FontsInfoDlg *d = new FontsInfoDlg( hWndFrame, doc );
368                    d->doDialog();
369                    return (MRESULT)FALSE;
370                }
371
372                case CM_PLUGINSLIST:
373                {
374                    PluginViewDlg *d = new PluginViewDlg( hWndFrame,
375                                                pluginMan->getPluginsList() );
376                    d->doDialog();
377                    return (MRESULT)FALSE;
378                }
379
380                case CM_COPY:
381                    docViewer->copyToClipbrd();
382                    return (MRESULT)FALSE;
383
384                case CM_FIND:
385                    if ( findDlg->showDialog() == DID_OK ) {
386                        if ( strlen( findDlg->getSearchString() ) > 0 )
387                        {
388                            docViewer->searchDocument( findDlg->getSearchString(),
389                                            findDlg->isCaseSensitive(), false );
390
391                            WinEnableMenuItem( hWndMenu, CM_FINDAGAIN, TRUE );
392                        }
393                    }
394                    return (MRESULT)FALSE;
395
396                case CM_FINDAGAIN:
397                    docViewer->searchDocument( findDlg->getSearchString(),
398                                               findDlg->isCaseSensitive(), true );
399                    return (MRESULT)FALSE;
400
401                case CM_FIRSTPAGE:
402                    Lucide::goToPage( 0 );
403                    return (MRESULT)FALSE;
404
405                case CM_NEXTPAGE:
406                    Lucide::goToPage( docViewer->getCurrentPage() + 1 );
407                    return (MRESULT)FALSE;
408
409                case CM_PREVPAGE:
410                    Lucide::goToPage( docViewer->getCurrentPage() - 1 );
411                    return (MRESULT)FALSE;
412
413                case CM_LASTPAGE:
414                    Lucide::goToPage( doc->getPageCount( ev ) - 1 );
415                    return (MRESULT)FALSE;
416
417                case CM_FITWINDOW:
418                    Lucide::setZoom( -2 );
419                    return (MRESULT)FALSE;
420
421                case CM_ACTSIZE:
422                    Lucide::setZoom( 1 );
423                    return (MRESULT)FALSE;
424
425                case CM_FITWIDTH:
426                    Lucide::setZoom( -1 );
427                    return (MRESULT)FALSE;
428
429                case CM_SINGLEPAGE:
430                    Lucide::setViewMode( SinglePage );
431                    return (MRESULT)FALSE;
432
433                case CM_CONTINUOUS:
434                    Lucide::setViewMode( Continuous );
435                    return (MRESULT)FALSE;
436            }
437        }
438        break;
439    }
440    return pOldSplProc( hwnd, msg, mp1, mp2 );
441}
442
443
444char deffont[] = "9.WarpSans";
445int deffontlen = sizeof( deffont );
446
447int main( int argc, char **argv )
448{
449    PPIB pib;
450    PTIB tib;
451    DosGetInfoBlocks(&tib, &pib);
452    pib->pib_ultype = 3;
453
454    HMQ   hmq;
455    QMSG  qmsg;
456    hab = WinInitialize( 0 );
457    hmq = WinCreateMsgQueue( hab, 0 );
458
459    loadLang();
460
461    pluginMan = new PluginManager;
462
463    InitPMSplitterClass( hab );
464    InitPMToolbarClass( hab );
465
466    ULONG ulFrameFlags = FCF_TITLEBAR | FCF_SIZEBORDER | FCF_SYSMENU |
467                         FCF_MINMAX | FCF_TASKLIST | FCF_NOBYTEALIGN;
468    char *title = newstrdupL( MSGS_MAIN_WIN_TITLE );
469    hWndFrame = WinCreateStdWindow( HWND_DESKTOP, 0, &ulFrameFlags, NULL, title,
470                                    WS_SYNCPAINT|WS_VISIBLE, NULLHANDLE, 100, NULL );
471    delete title;
472    WinSetAccelTable( hab, WinLoadAccelTable( hab, NULLHANDLE, IDA_MAINACCEL ), hWndFrame );
473    hWndMenu = WinLoadMenu( hWndFrame, NULLHANDLE, IDM_MAINMENU );
474    localizeMenu( hWndMenu );
475    WinSetWindowUShort( hWndMenu, QWS_ID, FID_MENU );
476
477    // Vertical splitter and his windows - Index and Document view
478    HWND hVertSplitter = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
479                                          WS_VISIBLE | SBS_VSPLIT,
480                                          0, 0, 0, 0, hWndFrame, HWND_TOP,
481                                          0, NULL, NULL );
482
483    indexWin = new IndexWindow( hab, hWndFrame );
484
485    DocumentViewer::registerClass( hab );
486
487    docViewer = new DocumentViewer( hab, hWndFrame );
488
489    WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
490                MPFROMHWND( indexWin->getHWND() ), MPFROMHWND( docViewer->getHWND() ) );
491    WinSendMsg( hVertSplitter, SBM_SETSPLITTERPOS, MPFROMSHORT( 80 ), MPVOID );
492
493    // Horizontal splitter and its windows - Toolbar and Vertical splitter
494    // Horizontal splitter is client window
495    HWND hHorizSplitter = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
496                                           WS_VISIBLE | SBS_HSPLIT | SBS_SECONDFIXED,
497                                           0, 0, 0, 0, hWndFrame, HWND_TOP,
498                                           FID_CLIENT, NULL, NULL );
499    pOldSplProc = WinSubclassWindow( hHorizSplitter, splProc );
500
501    hToolBar = createToolbar( hWndFrame );
502
503    WinSendMsg( hHorizSplitter, SBM_SETWINDOWS,
504                MPFROMHWND( hVertSplitter ), MPFROMHWND( hToolBar ) );
505    // ãáâ ­®¢šâì 䚪ášà®¢ ­­ë© à §¬¥à €«ï âã«¡ à 
506    WinSendMsg( hHorizSplitter, SBM_SETFIXEDSIZE,
507                MPFROMSHORT( DEFAULT_PICTSIZE + TOOLBAR_HEIGHT_ADD ), MPVOID );
508
509    findDlg = new FindDlg( hWndFrame );
510    Lucide::checkMenus();
511    if ( argc > 1 ) {
512        Lucide::loadDocument( argv[1] );
513    }
514
515    // ®ª § âì ®ª­® ¯à®£à ¬¬ë
516    if ( !PMRestoreWindowPos( NULL, appName, fwp, hWndFrame,
517                              TRUE, TRUE, FALSE, FALSE, FALSE ) )
518    {
519        WinSetWindowPos( hWndFrame, HWND_TOP, 100, 100, 630, 400,
520                         SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ACTIVATE );
521    }
522
523    // Messsage loop
524    while ( WinGetMsg( hab, &qmsg, 0, 0, 0 ) ) {
525        WinDispatchMsg( hab, &qmsg );
526    }
527
528    if ( WinIsWindow( hab, hWndFrame ) ) {
529        PMStoreWindowPos( NULL, appName, fwp, hWndFrame );
530    }
531
532    WinDestroyWindow( hWndFrame );
533    WinDestroyMsgQueue( hmq );
534    WinTerminate( hab );
535
536    delete docViewer;
537    delete indexWin;
538    // must be freed _before_ plugin manager
539    delete doc;
540    // must be freed _after_ document
541    delete pluginMan;
542
543    delete findDlg;
544
545    return 0;
546}
547
Note: See TracBrowser for help on using the repository browser.