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

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

fixes

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