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

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

remember nav pane position/visibility

File size: 21.0 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        LuDocument *d = pluginMan->createDocumentForExt( ext + 1, false );
287        if ( d == NULL ) {
288            WinMessageBox( HWND_DESKTOP, hWndFrame, msg,
289                           NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
290        }
291        else
292        {
293            char *error = NULL;
294            if ( d->loadFile( ev, (char *)fn, NULL, &error ) ) {
295                docViewer->close();
296                delete doc;
297                doc = d;
298                setDocument( doc );
299            }
300            else
301            {
302                if ( error == NULL ) {
303                    char *m = newstrdupL( MSGS_FILE_LOAD_ERROR );
304                    WinMessageBox( HWND_DESKTOP, hWndFrame, m,
305                                   NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
306                    delete m;
307                }
308                else {
309                    WinMessageBox( HWND_DESKTOP, hWndFrame, error,
310                                   NULL, 0, MB_OK | MB_ICONEXCLAMATION | MB_MOVEABLE );
311                    SOMFree( error );
312                }
313
314                delete d;
315            }
316        }
317    }
318    delete msg;
319}
320
321void Lucide::openDocument()
322{
323    PFILEDLG fd = new FILEDLG;
324    memset( fd, 0, sizeof( FILEDLG ) );
325    fd->cbSize = sizeof( FILEDLG );
326    fd->fl = FDS_CENTER | FDS_OPEN_DIALOG;
327    PrfQueryProfileString( HINI_USERPROFILE, appName, lvd, "",
328                           fd->szFullFile, sizeof( fd->szFullFile ) );
329    strcat( fd->szFullFile, pluginMan->getExtsMask().c_str() );
330    WinFileDlg( HWND_DESKTOP, hWndFrame, fd );
331    if ( fd->lReturn == DID_OK )
332    {
333        char drv[ _MAX_DRIVE ] = "";
334        char dir[ _MAX_PATH ] = "";
335        char buf[ _MAX_PATH ] = "";
336        _splitpath( fd->szFullFile, drv, dir, NULL, NULL );
337        _makepath( buf, drv, dir, NULL, NULL );
338        PrfWriteProfileString( HINI_USERPROFILE, appName, lvd, buf );
339
340        loadDocument( fd->szFullFile );
341    }
342    delete fd;
343}
344
345void Lucide::checkNavpane()
346{
347    if ( Lucide::showIndex )
348    {
349        WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( CM_NAVPANE, TRUE ),
350                MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) );
351        WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT( CM_NAVPANE ), (MPARAM)TRUE );
352    }
353    else
354    {
355        WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( CM_NAVPANE, TRUE ),
356                MPFROM2SHORT( MIA_CHECKED, FALSE ) );
357        WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT( CM_NAVPANE ), (MPARAM)FALSE );
358    }
359}
360
361static MRESULT EXPENTRY splProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
362{
363
364    switch ( msg )
365    {
366        case WM_CONTROL:
367        {
368            if ( ( SHORT1FROMMP( mp1 ) == ID_SPLITTER ) &&
369                 ( SHORT2FROMMP( mp1 ) == SBN_POSITIONCHANGED ) )
370            {
371                SHORT pos = SHORT1FROMMP( mp2 );
372                if ( pos > 0 ) {
373                    Lucide::splitterPos = pos;
374                    Lucide::showIndex = true;
375                }
376                else {
377                    Lucide::showIndex = false;
378                }
379                Lucide::checkNavpane();
380            }
381        }
382        break;
383
384        case WM_COMMAND:
385        {
386            switch ( SHORT1FROMMP(mp1) )
387            {
388                case CM_OPEN:
389                    Lucide::openDocument();
390                    return (MRESULT)FALSE;
391
392                case CM_EXIT:
393                    WinPostMsg( hWndFrame, WM_CLOSE, NULL, NULL );
394                    return (MRESULT)FALSE;
395
396                case CM_DOCINFO:
397                {
398                    LuDocumentInfo *dinfo = doc->getDocumentInfo( ev );
399                    DocInfoDlg *d = new DocInfoDlg( hWndFrame, dinfo );
400                    d->doDialog();
401                    LuDocument::freeDocumentInfo( ev, dinfo );
402                    return (MRESULT)FALSE;
403                }
404
405                case CM_FONTSINFO:
406                {
407                    FontsInfoDlg *d = new FontsInfoDlg( hWndFrame, doc );
408                    d->doDialog();
409                    return (MRESULT)FALSE;
410                }
411
412                case CM_PLUGINSLIST:
413                {
414                    PluginViewDlg *d = new PluginViewDlg( hWndFrame,
415                                                pluginMan->getPluginsList() );
416                    d->doDialog();
417                    return (MRESULT)FALSE;
418                }
419
420                case CM_COPY:
421                    docViewer->copyToClipbrd();
422                    return (MRESULT)FALSE;
423
424                case CM_FIND:
425                    if ( findDlg->showDialog() == DID_OK ) {
426                        if ( strlen( findDlg->getSearchString() ) > 0 )
427                        {
428                            docViewer->searchDocument( findDlg->getSearchString(),
429                                            findDlg->isCaseSensitive(), false );
430
431                            WinEnableMenuItem( hWndMenu, CM_FINDAGAIN, TRUE );
432                        }
433                    }
434                    return (MRESULT)FALSE;
435
436                case CM_FINDAGAIN:
437                    docViewer->searchDocument( findDlg->getSearchString(),
438                                               findDlg->isCaseSensitive(), true );
439                    return (MRESULT)FALSE;
440
441                case CM_FIRSTPAGE:
442                    Lucide::goToPage( 0 );
443                    return (MRESULT)FALSE;
444
445                case CM_NEXTPAGE:
446                    Lucide::goToPage( docViewer->getCurrentPage() + 1 );
447                    return (MRESULT)FALSE;
448
449                case CM_PREVPAGE:
450                    Lucide::goToPage( docViewer->getCurrentPage() - 1 );
451                    return (MRESULT)FALSE;
452
453                case CM_LASTPAGE:
454                    Lucide::goToPage( doc->getPageCount( ev ) - 1 );
455                    return (MRESULT)FALSE;
456
457                case CM_FITWINDOW:
458                    Lucide::setZoom( -2 );
459                    return (MRESULT)FALSE;
460
461                case CM_ACTSIZE:
462                    Lucide::setZoom( 1 );
463                    return (MRESULT)FALSE;
464
465                case CM_FITWIDTH:
466                    Lucide::setZoom( -1 );
467                    return (MRESULT)FALSE;
468
469                case CM_SINGLEPAGE:
470                    Lucide::setViewMode( SinglePage );
471                    return (MRESULT)FALSE;
472
473                case CM_CONTINUOUS:
474                    Lucide::setViewMode( Continuous );
475                    return (MRESULT)FALSE;
476
477                case CM_NAVPANE:
478                    {
479                        Lucide::showIndex = !Lucide::showIndex;
480                        Lucide::checkNavpane();
481                        WinSendMsg( hVertSplitter, SBM_SETSPLITTERPOS,
482                            MPFROMSHORT( Lucide::showIndex ? Lucide::splitterPos : 0 ), MPVOID );
483                    }
484                    return (MRESULT)FALSE;
485            }
486        }
487        break;
488    }
489    return pOldSplProc( hwnd, msg, mp1, mp2 );
490}
491
492
493char deffont[] = "9.WarpSans";
494int deffontlen = sizeof( deffont );
495
496int main( int argc, char **argv )
497{
498    PPIB pib;
499    PTIB tib;
500    DosGetInfoBlocks(&tib, &pib);
501    pib->pib_ultype = 3;
502
503    HMQ   hmq;
504    QMSG  qmsg;
505    hab = WinInitialize( 0 );
506    hmq = WinCreateMsgQueue( hab, 0 );
507
508    loadLang();
509
510    pluginMan = new PluginManager;
511
512    InitPMSplitterClass( hab );
513    InitPMToolbarClass( hab );
514
515    ULONG ulFrameFlags = FCF_TITLEBAR | FCF_SIZEBORDER | FCF_SYSMENU |
516                         FCF_MINMAX | FCF_TASKLIST | FCF_NOBYTEALIGN;
517    char *title = newstrdupL( MSGS_MAIN_WIN_TITLE );
518    hWndFrame = WinCreateStdWindow( HWND_DESKTOP, 0, &ulFrameFlags, NULL, title,
519                                    WS_SYNCPAINT|WS_VISIBLE, NULLHANDLE, 100, NULL );
520    delete title;
521    WinSetAccelTable( hab, WinLoadAccelTable( hab, NULLHANDLE, IDA_MAINACCEL ), hWndFrame );
522    hWndMenu = WinLoadMenu( hWndFrame, NULLHANDLE, IDM_MAINMENU );
523    localizeMenu( hWndMenu );
524    WinSetWindowUShort( hWndMenu, QWS_ID, FID_MENU );
525
526    // Vertical splitter and his windows - Index and Document view
527    hVertSplitter = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
528                                     WS_VISIBLE | SBS_VSPLIT,
529                                     0, 0, 0, 0, hWndFrame, HWND_TOP,
530                                     ID_SPLITTER, NULL, NULL );
531
532    indexWin = new IndexWindow( hab, hWndFrame );
533
534    DocumentViewer::registerClass( hab );
535
536    docViewer = new DocumentViewer( hab, hWndFrame );
537
538    WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
539                MPFROMHWND( indexWin->getHWND() ), MPFROMHWND( docViewer->getHWND() ) );
540    Lucide::splitterPos = PrfQueryProfileInt( HINI_USERPROFILE, appName, splpos, Lucide::splitterPos );
541    Lucide::showIndex = PrfQueryProfileInt( HINI_USERPROFILE, appName, showind, Lucide::showIndex );
542    WinSendMsg( hVertSplitter, SBM_SETSPLITTERPOS,
543                MPFROMSHORT( Lucide::showIndex ? Lucide::splitterPos : 0 ), MPVOID );
544
545    // Horizontal splitter and its windows - Toolbar and Vertical splitter
546    // Horizontal splitter is client window
547    HWND hHorizSplitter = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
548                                           WS_VISIBLE | SBS_HSPLIT | SBS_SECONDFIXED,
549                                           0, 0, 0, 0, hWndFrame, HWND_TOP,
550                                           FID_CLIENT, NULL, NULL );
551    pOldSplProc = WinSubclassWindow( hHorizSplitter, splProc );
552
553    hToolBar = createToolbar( hWndFrame );
554
555    WinSendMsg( hHorizSplitter, SBM_SETWINDOWS,
556                MPFROMHWND( hVertSplitter ), MPFROMHWND( hToolBar ) );
557    // ãáâ ­®¢šâì 䚪ášà®¢ ­­ë© à §¬¥à €«ï âã«¡ à 
558    WinSendMsg( hHorizSplitter, SBM_SETFIXEDSIZE,
559                MPFROMSHORT( DEFAULT_PICTSIZE + TOOLBAR_HEIGHT_ADD ), MPVOID );
560
561    findDlg = new FindDlg( hWndFrame );
562    Lucide::checkMenus();
563    if ( argc > 1 ) {
564        Lucide::loadDocument( argv[1] );
565    }
566
567    Lucide::checkNavpane();
568
569    // ®ª § âì ®ª­® ¯à®£à ¬¬ë
570    if ( !PMRestoreWindowPos( NULL, appName, fwp, hWndFrame,
571                              TRUE, TRUE, FALSE, FALSE, FALSE ) )
572    {
573        WinSetWindowPos( hWndFrame, HWND_TOP, 100, 100, 630, 400,
574                         SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ACTIVATE );
575    }
576
577    // Messsage loop
578    while ( WinGetMsg( hab, &qmsg, 0, 0, 0 ) ) {
579        WinDispatchMsg( hab, &qmsg );
580    }
581
582    if ( WinIsWindow( hab, hWndFrame ) )
583    {
584        char valbuf[ 3 ] = "";
585        PrfWriteProfileString( HINI_USERPROFILE, appName, splpos,
586                               itoa( Lucide::splitterPos, valbuf, 10 ) );
587        PrfWriteProfileString( HINI_USERPROFILE, appName, showind,
588                               itoa( Lucide::showIndex, valbuf, 10 ) );
589        PMStoreWindowPos( NULL, appName, fwp, hWndFrame );
590    }
591
592    WinDestroyWindow( hWndFrame );
593    WinDestroyMsgQueue( hmq );
594    WinTerminate( hab );
595
596    delete docViewer;
597    delete indexWin;
598    // must be freed _before_ plugin manager
599    delete doc;
600    // must be freed _after_ document
601    delete pluginMan;
602
603    delete findDlg;
604
605    return 0;
606}
607
Note: See TracBrowser for help on using the repository browser.