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

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

added asynch open document, but disabled due to unexpectable crashes

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