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

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

some updates, added simple readme, about dialog

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