home *** CD-ROM | disk | FTP | other *** search
/ Mastering Visual Basic 6 / mastvb6.iso / leadtools / ocx32.lt / Annotvw.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-15  |  24.0 KB  |  893 lines

  1. // annotVw.cpp : implementation of the CAnnotateView class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "annotate.h"
  6.  
  7. #include "annotDoc.h"
  8. #include "annotVw.h"
  9. #include "rangeann.h"
  10. #include "leaddlg.h"
  11. #include "..\..\..\..\include\ltdlgocx.h"
  12. #include "linkdlg.h"
  13. #include "passdlg.h"
  14.  
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20.  
  21. extern CAnnotateApp theApp;
  22.  
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CAnnotateView
  25.  
  26. IMPLEMENT_DYNCREATE(CAnnotateView, CFormView)
  27.  
  28. BEGIN_MESSAGE_MAP(CAnnotateView, CFormView)
  29.     //{{AFX_MSG_MAP(CAnnotateView)
  30.     ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
  31.     ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  32.     ON_WM_SIZE()
  33.     ON_UPDATE_COMMAND_UI(IDM_FITIMAGE, OnUpdateFitimage)
  34.     ON_COMMAND(IDM_FITIMAGE, OnFitimage)
  35.     ON_COMMAND(IDM_NORMAL, OnNormal)
  36.     ON_UPDATE_COMMAND_UI(IDM_NORMAL, OnUpdateNormal)
  37.     ON_COMMAND(IDM_ZOOM, OnZoom)
  38.     ON_UPDATE_COMMAND_UI(IDM_ZOOM, OnUpdateZoom)
  39.     ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
  40.     ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
  41.     ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
  42.     ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
  43.     ON_UPDATE_COMMAND_UI(IDM_USERNONE, OnUpdateUsernone)
  44.     ON_COMMAND(IDM_USERNONE, OnUsernone)
  45.     ON_UPDATE_COMMAND_UI(IDM_USERRUN, OnUpdateUserrun)
  46.     ON_COMMAND(IDM_USERRUN, OnUserrun)
  47.     ON_COMMAND(IDM_USERDESIGN, OnUserdesign)
  48.     ON_UPDATE_COMMAND_UI(IDM_USERDESIGN, OnUpdateUserdesign)
  49.     ON_COMMAND(IDM_TOOLAUDIO, OnToolaudio)
  50.     ON_UPDATE_COMMAND_UI(IDM_TOOLAUDIO, OnUpdateToolaudio)
  51.     ON_COMMAND(IDM_TOOLBUTTON, OnToolbutton)
  52.     ON_UPDATE_COMMAND_UI(IDM_TOOLBUTTON, OnUpdateToolbutton)
  53.     ON_COMMAND(IDM_TOOLELLIPSE, OnToolellipse)
  54.     ON_UPDATE_COMMAND_UI(IDM_TOOLELLIPSE, OnUpdateToolellipse)
  55.     ON_COMMAND(IDM_TOOLFREEHAND, OnToolfreehand)
  56.     ON_UPDATE_COMMAND_UI(IDM_TOOLFREEHAND, OnUpdateToolfreehand)
  57.     ON_COMMAND(IDM_TOOLHILITE, OnToolhilite)
  58.     ON_UPDATE_COMMAND_UI(IDM_TOOLHILITE, OnUpdateToolhilite)
  59.     ON_COMMAND(IDM_TOOLHOTSPOT, OnToolhotspot)
  60.     ON_UPDATE_COMMAND_UI(IDM_TOOLHOTSPOT, OnUpdateToolhotspot)
  61.     ON_COMMAND(IDM_TOOLLINE, OnToolline)
  62.     ON_UPDATE_COMMAND_UI(IDM_TOOLLINE, OnUpdateToolline)
  63.     ON_COMMAND(IDM_TOOLNOTE, OnToolnote)
  64.     ON_UPDATE_COMMAND_UI(IDM_TOOLNOTE, OnUpdateToolnote)
  65.     ON_COMMAND(IDM_TOOLPOINTER, OnToolpointer)
  66.     ON_UPDATE_COMMAND_UI(IDM_TOOLPOINTER, OnUpdateToolpointer)
  67.     ON_COMMAND(IDM_TOOLPOLYGON, OnToolpolygon)
  68.     ON_UPDATE_COMMAND_UI(IDM_TOOLPOLYGON, OnUpdateToolpolygon)
  69.     ON_COMMAND(IDM_TOOLPOLYLINE, OnToolpolyline)
  70.     ON_UPDATE_COMMAND_UI(IDM_TOOLPOLYLINE, OnUpdateToolpolyline)
  71.     ON_COMMAND(IDM_TOOLRECT, OnToolrect)
  72.     ON_UPDATE_COMMAND_UI(IDM_TOOLRECT, OnUpdateToolrect)
  73.     ON_COMMAND(IDM_TOOLREDACT, OnToolredact)
  74.     ON_UPDATE_COMMAND_UI(IDM_TOOLREDACT, OnUpdateToolredact)
  75.     ON_COMMAND(IDM_TOOLSELECT, OnToolselect)
  76.     ON_UPDATE_COMMAND_UI(IDM_TOOLSELECT, OnUpdateToolselect)
  77.     ON_COMMAND(IDM_TOOLSTAMP, OnToolstamp)
  78.     ON_UPDATE_COMMAND_UI(IDM_TOOLSTAMP, OnUpdateToolstamp)
  79.     ON_COMMAND(IDM_TOOLTEXT, OnTooltext)
  80.     ON_UPDATE_COMMAND_UI(IDM_TOOLTEXT, OnUpdateTooltext)
  81.     ON_COMMAND(IDM_TOOLRULER, OnToolruler)
  82.     ON_UPDATE_COMMAND_UI(IDM_TOOLRULER, OnUpdateToolruler)
  83.     ON_COMMAND(ID_EDIT_LOCKANNOTATIONS, OnEditLockannotations)
  84.     ON_UPDATE_COMMAND_UI(ID_EDIT_LOCKANNOTATIONS, OnUpdateEditLockannotations)
  85.     ON_COMMAND(ID_EDIT_UNLOCKANNOTATIONS, OnEditUnlockannotations)
  86.     ON_UPDATE_COMMAND_UI(ID_EDIT_UNLOCKANNOTATIONS, OnUpdateEditUnlockannotations)
  87.     ON_COMMAND(ID_EDIT_SHOWLOCKEDOBJECTS, OnEditShowlockedobjects)
  88.     ON_UPDATE_COMMAND_UI(ID_EDIT_SHOWLOCKEDOBJECTS, OnUpdateEditShowlockedobjects)
  89.     ON_COMMAND(ID_EDIT_REALIZEREDACTOBJECTS, OnEditRealizeredactobjects)
  90.     ON_UPDATE_COMMAND_UI(ID_EDIT_REALIZEREDACTOBJECTS, OnUpdateEditRealizeredactobjects)
  91.     ON_COMMAND(ID_EDIT_RESTOREREDACTOBJECTS, OnEditRestoreredactobjects)
  92.     ON_UPDATE_COMMAND_UI(ID_EDIT_RESTOREREDACTOBJECTS, OnUpdateEditRestoreredactobjects)
  93.     ON_MESSAGE(WM_DOREALIZE, OnDoRealize)
  94.     ON_COMMAND(ID_EDIT_WANGCOMPATIBLETAGMODE, OnEditWangcompatibletagmode)
  95.     ON_UPDATE_COMMAND_UI(ID_EDIT_WANGCOMPATIBLETAGMODE, OnUpdateEditWangcompatibletagmode)
  96.     //}}AFX_MSG_MAP
  97.     // Standard printing commands
  98.     ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
  99.     ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
  100.     ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
  101. END_MESSAGE_MAP()
  102.  
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CAnnotateView construction/destruction
  105.  
  106. CAnnotateView::CAnnotateView()
  107.     : CFormView(CAnnotateView::IDD)
  108. {
  109.     //{{AFX_DATA_INIT(CAnnotateView)
  110.         // NOTE: the ClassWizard will add member initialization here
  111.     //}}AFX_DATA_INIT
  112.  
  113.    m_iTag = 0;
  114.    m_bWangMode = FALSE;
  115. }
  116.  
  117. CAnnotateView::~CAnnotateView()
  118. {
  119. }
  120.  
  121. void CAnnotateView::DoDataExchange(CDataExchange* pDX)
  122. {
  123.     CFormView::DoDataExchange(pDX);
  124.     //{{AFX_DATA_MAP(CAnnotateView)
  125.     DDX_Control(pDX, IDC_LEADCTRL1, m_Lead);
  126.     //}}AFX_DATA_MAP
  127. }
  128.  
  129. BOOL CAnnotateView::PreCreateWindow(CREATESTRUCT& cs)
  130. {
  131.     // TODO: Modify the Window class or styles here by modifying
  132.     //  the CREATESTRUCT cs
  133.  
  134.     return CFormView::PreCreateWindow(cs);
  135. }
  136.  
  137. /////////////////////////////////////////////////////////////////////////////
  138. // CAnnotateView printing
  139.  
  140. BOOL CAnnotateView::OnPreparePrinting(CPrintInfo* pInfo)
  141. {
  142.     // default preparation
  143.     return DoPreparePrinting(pInfo);
  144. }
  145.  
  146. void CAnnotateView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  147. {
  148.     // TODO: add cleanup after printing
  149. }
  150.  
  151. /////////////////////////////////////////////////////////////////////////////
  152. // CAnnotateView diagnostics
  153.  
  154. #ifdef _DEBUG
  155. void CAnnotateView::AssertValid() const
  156. {
  157.     CFormView::AssertValid();
  158. }
  159.  
  160. void CAnnotateView::Dump(CDumpContext& dc) const
  161. {
  162.     CFormView::Dump(dc);
  163. }
  164.  
  165. CAnnotateDoc* CAnnotateView::GetDocument() // non-debug version is inline
  166. {
  167.     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAnnotateDoc)));
  168.     return (CAnnotateDoc*)m_pDocument;
  169. }
  170. #endif //_DEBUG
  171.  
  172. /////////////////////////////////////////////////////////////////////////////
  173. // CAnnotateView message handlers
  174.  
  175. void CAnnotateView::GetAnnName(LPSTR szFilename, LPSTR szAnnName)
  176. {
  177.    LPSTR lp;
  178.    if( (lp = strrchr(szFilename,'.')) == NULL )
  179.    {
  180.       strcpy(szAnnName,szFilename);
  181.       strcat(szAnnName,".ann");
  182.    }
  183.    else
  184.    {
  185.       memcpy(szAnnName,szFilename,lp-szFilename);
  186.       strcpy(szAnnName+(lp-szFilename),".ann");
  187.    }
  188. }
  189.  
  190. void CAnnotateView::OnFileOpen() 
  191. {
  192.     int nRet;
  193.    CLeadDlg LTCommDlg;
  194.    RECT rcWin;
  195.    BOOL bContinue=FALSE;
  196.    char szAnnFile[256];
  197.    CString sFileName;
  198.    OFSTRUCT of;
  199.  
  200.    ::SetRect(&rcWin, 0, 0, 1, 1);
  201.  
  202.    if(LTCommDlg.Create(NULL,0,rcWin,this,100))
  203.    {
  204.       LTCommDlg.SetEnableMethodErrors(FALSE);
  205.       LTCommDlg.SetFilter("Graphics|*.cmp;*.jpg;*.jff;*.jtf;*.bmp;*.tif;*.tga;*.pcx;*.cal;*.mac;*.mac;*.img;*.msp;*.wpg;*.wpg;*.ras;*.pct;*.pcd;*.eps;*.wmf");
  206.       LTCommDlg.SetFileDlgFlags(0);
  207.       LTCommDlg.SetDialogTitle("Open File");
  208.       LTCommDlg.SetUIFlags( DLG_FO_MULTIPAGE | 
  209.                             DLG_FO_FILEINFO |
  210.                             DLG_FO_SHOWPREVIEW |
  211.                             DLG_FO_SHOWSTAMP |
  212.                             DLG_FO_95STYLE );
  213.       nRet = LTCommDlg.FileOpen((long)this->m_hWnd);
  214.       if(nRet == 0)
  215.          bContinue = TRUE;
  216.    }
  217.    if(bContinue)
  218.    {
  219.       sFileName = LTCommDlg.GetFileName();
  220.       nRet = m_Lead.Load((LPCTSTR)sFileName,0,(short)LTCommDlg.GetPageNumber(),1);
  221.       if( nRet )
  222.       {
  223.          theApp.DisplayLEADError(nRet);
  224.          return;
  225.       }
  226.       RecalcSizes();
  227.  
  228.       // don't generate exceptions if there is an error
  229.       m_Lead.SetEnableMethodErrors(FALSE);
  230.  
  231.       //attempt to load annotations from the file, in case it is a TIFF
  232.       //with Wang ann tag
  233.       nRet = m_Lead.AnnLoad(LTCommDlg.GetFileName(), (short)LTCommDlg.GetPageNumber());
  234.  
  235.       //if it fails, then look for a .ann file
  236.       if (nRet != 0)
  237.       {
  238.           // get the name of the annotation file (same name, extension .ann)
  239.          GetAnnName((char*)(LPCTSTR)sFileName,szAnnFile);
  240.          if( OpenFile(szAnnFile,&of,OF_EXIST) != HFILE_ERROR )
  241.             m_Lead.AnnLoad(szAnnFile, (short)LTCommDlg.GetPageNumber());
  242.       }
  243.  
  244.       // restore EnableMethodErrors
  245.       m_Lead.SetEnableMethodErrors(TRUE);
  246.    }
  247.    return;
  248. }
  249.  
  250. void CAnnotateView::OnFileSaveAs() 
  251. {
  252.     int nRet;
  253.    CLeadDlg LTCommDlg;
  254.    RECT rcWin;
  255.    BOOL bContinue=FALSE;
  256.    char szAnnFile[256];
  257.    CString sFileName;
  258.    int nMode=0;
  259.  
  260.    ::SetRect(&rcWin, 0, 0, 1, 1);
  261.  
  262.    if(LTCommDlg.Create(NULL,0,rcWin,this,100))
  263.    {
  264.       LTCommDlg.SetEnableMethodErrors(FALSE);
  265.       LTCommDlg.SetFileDlgFlags(0);
  266.       LTCommDlg.SetUIFlags(DLG_FS_95STYLE | DLG_FS_QFACTOR);
  267.       LTCommDlg.SetSaveFormatFlags(DLG_FS_ALL);
  268.       nRet = LTCommDlg.FileSave((long)this->m_hWnd);
  269.       if(nRet == 0)
  270.          bContinue = TRUE;
  271.    }
  272.  
  273.    switch(LTCommDlg.GetSaveFormat())
  274.    {
  275.       case FILE_JTIF:
  276.       case FILE_LEAD2JTIF:
  277.       case FILE_LEAD1JTIF:
  278.       case FILE_TIFLZW:
  279.       case FILE_TIFLZW_CMYK:
  280.       case FILE_TIFLZW_YCC:
  281.       case FILE_TIF:
  282.       case FILE_TIF_CMYK:
  283.       case FILE_TIF_YCC:
  284.       case FILE_TIF_PACKBITS:
  285.       case FILE_TIF_PACKBITS_CMYK:
  286.       case FILE_TIF_PACKBITS_YCC:
  287.       case FILE_CCITT:
  288.       case FILE_CCITT_GROUP3_1DIM:
  289.       case FILE_CCITT_GROUP3_2DIM:
  290.       case FILE_CCITT_GROUP4:
  291.          if (m_bWangMode)
  292.             nMode = ANNFMT_WANGTAG;
  293.          else
  294.             nMode = ANNFMT_TIFFTAG;
  295.          m_Lead.AnnSaveTag(nMode, FALSE);
  296.          break;
  297.    }
  298.       
  299.    sFileName = LTCommDlg.GetFileName();
  300.    nRet = m_Lead.Save( (LPCTSTR)sFileName,
  301.                        LTCommDlg.GetSaveFormat(),
  302.                        LTCommDlg.GetSaveBitsPerPixel(),
  303.                        LTCommDlg.GetSaveQFactor(),
  304.                        LTCommDlg.GetSaveMulti() );
  305.    if( nRet )
  306.    {
  307.       theApp.DisplayLEADError(nRet);
  308.       return;
  309.    }
  310.  
  311.    // if format was not TIFF flavor, need to save annotations
  312.    // in a .ann file
  313.    if (nMode == 0)
  314.    {
  315.       GetAnnName((char*)(LPCTSTR)sFileName,szAnnFile);
  316.       nRet = m_Lead.AnnSave(szAnnFile, ANNFMT_NATIVE, FALSE);
  317.    }
  318. }
  319.  
  320. void CAnnotateView::SetZoom(int percent)
  321. {
  322.    m_Lead.SetAutoRepaint(FALSE);
  323.    m_Lead.SetDstRect(m_Lead.GetDstLeft(), m_Lead.GetDstTop(), m_Lead.GetBitmapWidth() * percent / 100, m_Lead.GetBitmapHeight() * percent / 100);
  324.    m_Lead.SetDstClipRect(m_Lead.GetDstLeft(), m_Lead.GetDstTop(), m_Lead.GetDstWidth(), m_Lead.GetDstHeight());
  325.    m_Lead.SetAutoRepaint(TRUE);
  326. }
  327.  
  328. void CAnnotateView::OnSize(UINT nType, int cx, int cy) 
  329. {
  330.     CFormView::OnSize(nType, cx, cy);
  331.  
  332.    if( IsWindow(m_Lead.m_hWnd) )
  333.    {
  334.       m_Lead.MoveWindow(0,0,cx,cy,TRUE);
  335.  
  336.       if( m_Lead.GetBitmap() )
  337.          RecalcSizes();
  338.    }
  339. }
  340.  
  341. void CAnnotateView::OnInitialUpdate() 
  342. {
  343.     CFormView::OnInitialUpdate();
  344.  
  345.    UNLOCKSUPPORT(m_Lead); // Unlock support for the LZW files and express capabilities
  346.    fFitToWindow = FALSE;
  347.    ZoomPercent = 100;
  348.     m_Lead.SetAnnUserMode(ANNUSERMODE_DESIGN);
  349.    m_Lead.SetAnnTool(ANNTOOL_SELECT);
  350. }
  351.  
  352. void CAnnotateView::OnUpdateFitimage(CCmdUI* pCmdUI) 
  353. {
  354.     pCmdUI->Enable(m_Lead.GetBitmap() != 0);
  355.    pCmdUI->SetCheck(fFitToWindow);
  356. }
  357.  
  358. void CAnnotateView::OnFitimage() 
  359. {
  360.     fFitToWindow = TRUE;
  361.    RecalcSizes();
  362. }
  363.  
  364. void CAnnotateView::OnNormal() 
  365. {
  366.     fFitToWindow = FALSE;
  367.    ZoomPercent = 100;
  368.    RecalcSizes();
  369. }
  370.  
  371. void CAnnotateView::OnUpdateNormal(CCmdUI* pCmdUI) 
  372. {
  373.     pCmdUI->Enable(m_Lead.GetBitmap() != 0);
  374.    pCmdUI->SetCheck(!fFitToWindow && ZoomPercent == 100);
  375. }
  376.  
  377. void CAnnotateView::OnZoom() 
  378. {
  379.    CRangeDlg dlg;
  380.  
  381.    dlg.m_strTitle = _T("Zoom");
  382.    dlg.m_strLabel = _T("&Amount");
  383.    dlg.m_nValue = ZoomPercent;
  384.    dlg.m_nMin = 1;
  385.    dlg.m_nMax = 800;
  386.    dlg.m_nPage = 100;
  387.  
  388.    if(dlg.DoModal() == IDOK)
  389.    {
  390.        fFitToWindow = FALSE;
  391.       ZoomPercent = dlg.m_nValue;
  392.       RecalcSizes();
  393.    }
  394. }
  395.  
  396. void CAnnotateView::OnUpdateZoom(CCmdUI* pCmdUI) 
  397. {
  398.     pCmdUI->Enable(m_Lead.GetBitmap() != 0);
  399.    pCmdUI->SetCheck(!fFitToWindow && ZoomPercent != 100);
  400. }
  401.  
  402. void CAnnotateView::OnUpdateEditCopy(CCmdUI* pCmdUI) 
  403. {
  404.     pCmdUI->Enable(m_Lead.GetBitmap() != 0);
  405. }
  406.  
  407. void CAnnotateView::OnEditCopy() 
  408. {
  409.     m_Lead.Copy(COPY_DIB | COPY_DDB | COPY_PALETTE);
  410.    m_Lead.AnnCopy(ANNFMT_NATIVE, FALSE, FALSE);
  411. }
  412.  
  413. void CAnnotateView::OnUpdateEditPaste(CCmdUI* pCmdUI) 
  414. {
  415.     pCmdUI->Enable(m_Lead.Paste(PASTE_ISREADY) != 0);
  416. }
  417.  
  418. void CAnnotateView::OnEditPaste() 
  419. {
  420.     m_Lead.Paste(0);
  421.    if(m_Lead.GetAnnPasteReady() == TRUE )
  422.       m_Lead.AnnPaste();
  423.    RecalcSizes();
  424. }
  425.  
  426. void CAnnotateView::RecalcSizes() 
  427. {
  428.    if( fFitToWindow )
  429.    {
  430.       int cxZoom, cyZoom; 
  431.       cxZoom = (int) ((long) m_Lead.GetScaleWidth() * 100 / m_Lead.GetBitmapWidth());
  432.       cyZoom = (int) ((long) m_Lead.GetScaleHeight() * 100 / m_Lead.GetBitmapHeight());
  433.       SetZoom(max(min(cxZoom, cyZoom), 1));
  434.    }
  435.    else
  436.       SetZoom(ZoomPercent);
  437. }
  438.  
  439.  
  440. void CAnnotateView::OnUpdateUsernone(CCmdUI* pCmdUI) 
  441. {
  442.    pCmdUI->Enable(TRUE);
  443.    pCmdUI->SetCheck(m_Lead.GetAnnUserMode() == ANNUSERMODE_NONE);
  444. }
  445.  
  446. void CAnnotateView::OnUpdateUserdesign(CCmdUI* pCmdUI) 
  447. {
  448.    pCmdUI->Enable(TRUE);
  449.    pCmdUI->SetCheck(m_Lead.GetAnnUserMode() == ANNUSERMODE_DESIGN);
  450. }
  451.  
  452. void CAnnotateView::OnUpdateUserrun(CCmdUI* pCmdUI) 
  453. {
  454.    pCmdUI->Enable(TRUE);
  455.    pCmdUI->SetCheck(m_Lead.GetAnnUserMode() == ANNUSERMODE_RUN);
  456. }
  457.  
  458. void CAnnotateView::OnUsernone() 
  459. {
  460.    m_Lead.SetAnnUserMode(ANNUSERMODE_NONE);
  461. }
  462.  
  463. void CAnnotateView::OnUserdesign() 
  464. {
  465.    m_Lead.SetAnnUserMode(ANNUSERMODE_DESIGN);
  466. }
  467.  
  468. void CAnnotateView::OnUserrun() 
  469. {
  470.    m_Lead.SetAnnUserMode(ANNUSERMODE_RUN);
  471. }
  472.  
  473.  
  474. void CAnnotateView::OnToolaudio() 
  475. {
  476.    m_Lead.SetAnnTool(ANNTOOL_AUDIO);
  477. }
  478.  
  479. void CAnnotateView::OnUpdateToolaudio(CCmdUI* pCmdUI) 
  480. {
  481.    pCmdUI->Enable(TRUE);
  482.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_AUDIO);
  483. }
  484.  
  485. void CAnnotateView::OnToolbutton() 
  486. {
  487.    m_Lead.SetAnnTool(ANNTOOL_BUTTON);
  488. }
  489.  
  490. void CAnnotateView::OnUpdateToolbutton(CCmdUI* pCmdUI) 
  491. {
  492.    pCmdUI->Enable(TRUE);
  493.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_BUTTON);
  494. }
  495.  
  496. void CAnnotateView::OnToolellipse() 
  497. {
  498.    m_Lead.SetAnnTool(ANNTOOL_ELLIPSE);
  499. }
  500.  
  501. void CAnnotateView::OnUpdateToolellipse(CCmdUI* pCmdUI) 
  502. {
  503.    pCmdUI->Enable(TRUE);
  504.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_ELLIPSE);
  505. }
  506.  
  507. void CAnnotateView::OnToolfreehand() 
  508. {
  509.    m_Lead.SetAnnTool(ANNTOOL_FREEHAND);
  510. }
  511.  
  512. void CAnnotateView::OnUpdateToolfreehand(CCmdUI* pCmdUI) 
  513. {
  514.    pCmdUI->Enable(TRUE);
  515.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_FREEHAND);
  516. }
  517.  
  518. void CAnnotateView::OnToolhilite() 
  519. {
  520.    m_Lead.SetAnnTool(ANNTOOL_HILITE);
  521. }
  522.  
  523. void CAnnotateView::OnUpdateToolhilite(CCmdUI* pCmdUI) 
  524. {
  525.    pCmdUI->Enable(TRUE);
  526.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_HILITE);
  527. }
  528.  
  529. void CAnnotateView::OnToolhotspot() 
  530. {
  531.    m_Lead.SetAnnTool(ANNTOOL_HOTSPOT);
  532. }
  533.  
  534. void CAnnotateView::OnUpdateToolhotspot(CCmdUI* pCmdUI) 
  535. {
  536.    pCmdUI->Enable(TRUE);
  537.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_HOTSPOT);
  538. }
  539.  
  540. void CAnnotateView::OnToolline() 
  541. {
  542.    m_Lead.SetAnnTool(ANNTOOL_LINE);
  543. }
  544.  
  545. void CAnnotateView::OnUpdateToolline(CCmdUI* pCmdUI) 
  546. {
  547.    pCmdUI->Enable(TRUE);
  548.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_LINE);
  549. }
  550.  
  551. void CAnnotateView::OnToolnote() 
  552. {
  553.    m_Lead.SetAnnTool(ANNTOOL_NOTE);
  554. }
  555.  
  556. void CAnnotateView::OnUpdateToolnote(CCmdUI* pCmdUI) 
  557. {
  558.    pCmdUI->Enable(TRUE);
  559.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_NOTE);
  560. }
  561.  
  562. void CAnnotateView::OnToolpointer() 
  563. {
  564.    m_Lead.SetAnnTool(ANNTOOL_POINTER);
  565. }
  566.  
  567. void CAnnotateView::OnUpdateToolpointer(CCmdUI* pCmdUI) 
  568. {
  569.    pCmdUI->Enable(TRUE);
  570.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_POINTER);
  571. }
  572.  
  573. void CAnnotateView::OnToolpolygon() 
  574. {
  575.    m_Lead.SetAnnTool(ANNTOOL_POLYGON);
  576. }
  577.  
  578. void CAnnotateView::OnUpdateToolpolygon(CCmdUI* pCmdUI) 
  579. {
  580.    pCmdUI->Enable(TRUE);
  581.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_POLYGON);
  582. }
  583.  
  584. void CAnnotateView::OnToolpolyline() 
  585. {
  586.    m_Lead.SetAnnTool(ANNTOOL_POLYLINE);
  587. }
  588.  
  589. void CAnnotateView::OnUpdateToolpolyline(CCmdUI* pCmdUI) 
  590. {
  591.    pCmdUI->Enable(TRUE);
  592.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_POLYLINE);
  593. }
  594.  
  595. void CAnnotateView::OnToolrect() 
  596. {
  597.    m_Lead.SetAnnTool(ANNTOOL_RECT);
  598. }
  599.  
  600. void CAnnotateView::OnUpdateToolrect(CCmdUI* pCmdUI) 
  601. {
  602.    pCmdUI->Enable(TRUE);
  603.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_RECT);
  604. }
  605.  
  606. void CAnnotateView::OnToolredact() 
  607. {
  608.    m_Lead.SetAnnTool(ANNTOOL_REDACT);
  609. }
  610.  
  611. void CAnnotateView::OnUpdateToolredact(CCmdUI* pCmdUI) 
  612. {
  613.    pCmdUI->Enable(TRUE);
  614.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_REDACT);
  615. }
  616.  
  617. void CAnnotateView::OnToolselect() 
  618. {
  619.    m_Lead.SetAnnTool(ANNTOOL_SELECT);
  620. }
  621.  
  622. void CAnnotateView::OnUpdateToolselect(CCmdUI* pCmdUI) 
  623. {
  624.    pCmdUI->Enable(TRUE);
  625.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_SELECT);
  626. }
  627.  
  628. void CAnnotateView::OnToolstamp() 
  629. {
  630.    m_Lead.SetAnnTool(ANNTOOL_STAMP);
  631. }
  632.  
  633. void CAnnotateView::OnUpdateToolstamp(CCmdUI* pCmdUI) 
  634. {
  635.    pCmdUI->Enable(TRUE);
  636.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_STAMP);
  637. }
  638.  
  639. void CAnnotateView::OnTooltext() 
  640. {
  641.    m_Lead.SetAnnTool(ANNTOOL_TEXT);
  642. }
  643.  
  644. void CAnnotateView::OnUpdateTooltext(CCmdUI* pCmdUI) 
  645. {
  646.    pCmdUI->Enable(TRUE);
  647.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_TEXT);
  648. }
  649. void CAnnotateView::OnToolruler() 
  650. {
  651.    m_Lead.SetAnnTool(ANNTOOL_RULER);
  652. }
  653.  
  654. void CAnnotateView::OnUpdateToolruler(CCmdUI* pCmdUI) 
  655. {
  656.    pCmdUI->Enable(TRUE);
  657.    pCmdUI->SetCheck(m_Lead.GetAnnTool() == ANNTOOL_RULER);
  658. }
  659.  
  660. void CAnnotateView::OnDraw(CDC* pDC) 
  661. {
  662.    CRect rcClip;
  663.    CSize winext;
  664.    CSize viewext;
  665.    CSize paintext;
  666.  
  667.    if( m_Lead.GetBitmap() != 0 )
  668.       if(pDC->IsPrinting())
  669.       {
  670.          pDC->SaveDC();
  671.          winext = pDC->GetWindowExt();
  672.          viewext = pDC->GetViewportExt();
  673.          paintext.cx = MulDiv((int) m_Lead.GetBitmapWidth(), viewext.cx, winext.cx);
  674.          paintext.cy = MulDiv((int) m_Lead.GetBitmapHeight(), viewext.cy, winext.cy);
  675.          pDC->SetMapMode(MM_TEXT);                
  676.          m_Lead.Render((OLE_HANDLE) pDC->m_hDC, (float) 0, (float) 0, (float) paintext.cx, (float) paintext.cy);
  677.          pDC->RestoreDC(-1);
  678.       }
  679. }
  680.  
  681. LRESULT CAnnotateView::OnDoRealize(WPARAM wParam, LPARAM lParam)
  682. {
  683.     if( !IsWindow(m_Lead.m_hWnd) || !m_Lead.GetBitmap() )
  684.         return FALSE;
  685.     if(lParam)
  686.     {
  687.         return m_Lead.SendMessage(WM_PALETTECHANGED, wParam);
  688.     }
  689.     else
  690.     {
  691.         UINT nColorsChanged = 0;
  692.         CDC* pdc;
  693.  
  694.         pdc = theApp.m_pMainWnd->GetDC();
  695.         HPALETTE hpal = (HPALETTE)m_Lead.GetPalette((OLE_HANDLE) pdc->m_hDC);
  696.         if(hpal)
  697.         {
  698.             CPalette pal;
  699.  
  700.             pal.Attach(hpal);
  701.             CPalette* oldPalette = pdc->SelectPalette(&pal, (BOOL) lParam);
  702.             nColorsChanged = pdc->RealizePalette();
  703.             if (nColorsChanged > 0)
  704.                 m_Lead.InvalidateRect(NULL, FALSE);
  705.             pdc->SelectPalette(oldPalette, TRUE);
  706.         }
  707.         theApp.m_pMainWnd->ReleaseDC(pdc);
  708.         return ((LRESULT) (BOOL) (nColorsChanged > 0));
  709.     }
  710. }
  711.  
  712. void CAnnotateView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
  713. {
  714.     CFormView::OnActivateView(bActivate, pActivateView, pDeactiveView);
  715.  
  716.     if (bActivate)
  717.     {
  718.         ASSERT(pActivateView == this);
  719.         OnDoRealize((WPARAM)theApp.m_pMainWnd->m_hWnd, (LPARAM) FALSE);   // same as SendMessage(WM_DOREALIZE);
  720.     }
  721. }
  722.  
  723. BEGIN_EVENTSINK_MAP(CAnnotateView, CFormView)
  724.     //{{AFX_EVENTSINK_MAP(CAnnotateView)
  725.     ON_EVENT(CAnnotateView, IDC_LEADCTRL1, 10 /* AnnClicked */, OnAnnClickedLeadctrl1, VTS_I4)
  726.     ON_EVENT(CAnnotateView, IDC_LEADCTRL1, 8 /* AnnCreate */, OnAnnCreateLeadctrl1, VTS_I4)
  727.     ON_EVENT(CAnnotateView, IDC_LEADCTRL1, 11 /* AnnDrawn */, OnAnnDrawnLeadctrl1, VTS_I4)
  728.     ON_EVENT(CAnnotateView, IDC_LEADCTRL1, 21 /* AnnHyperlink */, OnAnnHyperlinkLeadctrl1, VTS_I4 VTS_I2 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4)
  729.     ON_EVENT(CAnnotateView, IDC_LEADCTRL1, 22 /* AnnHyperlinkMenu */, OnAnnHyperlinkMenuLeadctrl1, VTS_VARIANT VTS_I2)
  730.     //}}AFX_EVENTSINK_MAP
  731. END_EVENTSINK_MAP()
  732.  
  733. void CAnnotateView::OnAnnClickedLeadctrl1(long hObject) 
  734. {
  735.    CString string;
  736.  
  737.    switch(m_Lead.AnnGetType(hObject))
  738.    {
  739.    case ANNOBJECT_BUTTON:
  740.       string.Format("Button with tag %ld was clicked", m_Lead.AnnGetTag(hObject));
  741.       break;
  742.    case ANNOBJECT_HOTSPOT:
  743.       string.Format("Hot Spot with tag %ld was clicked", m_Lead.AnnGetTag(hObject));
  744.       break;
  745.    }
  746.    MessageBox( string, "CLICK notification" );
  747. }
  748.  
  749. void CAnnotateView::OnAnnCreateLeadctrl1(long hObject) 
  750. {
  751.    /* set tags only for buttons and HotSpots */
  752.    switch(m_Lead.AnnGetType(hObject))
  753.    {
  754.    case ANNOBJECT_BUTTON:
  755.    case ANNOBJECT_HOTSPOT:
  756.       m_iTag++;
  757.       m_Lead.AnnSetTag(hObject, m_iTag);
  758.       break;
  759.    }
  760. }
  761.  
  762. void CAnnotateView::OnAnnDrawnLeadctrl1(long hObject) 
  763. {
  764.    /* reset the tool to select after each object is created */
  765.    m_Lead.SetAnnTool(ANNTOOL_SELECT);
  766. }
  767.  
  768. void CAnnotateView::OnEditLockannotations() 
  769. {
  770.    CPassDlg PassDlg;
  771.  
  772.    if(PassDlg.DoModal() == IDOK)
  773.       m_Lead.AnnLock(m_Lead.GetAnnContainer(), PassDlg.m_csKey, TRUE);
  774. }
  775.  
  776. void CAnnotateView::OnUpdateEditLockannotations(CCmdUI* pCmdUI) 
  777. {
  778.    if (m_Lead.GetAnnContainer() > 0)
  779.       pCmdUI->Enable(TRUE);
  780.    else
  781.       pCmdUI->Enable(FALSE);
  782. }
  783.  
  784. void CAnnotateView::OnEditUnlockannotations() 
  785. {
  786.    CPassDlg PassDlg;
  787.  
  788.    if(PassDlg.DoModal() == IDOK)
  789.       m_Lead.AnnUnlock(m_Lead.GetAnnContainer(), PassDlg.m_csKey);
  790. }
  791.  
  792. void CAnnotateView::OnUpdateEditUnlockannotations(CCmdUI* pCmdUI) 
  793. {
  794.    if (m_Lead.GetAnnContainer() > 0)
  795.       pCmdUI->Enable(TRUE);
  796.    else
  797.       pCmdUI->Enable(FALSE);
  798. }
  799.  
  800. void CAnnotateView::OnEditShowlockedobjects() 
  801. {
  802.     m_Lead.SetAnnShowLockedIcon(!m_Lead.GetAnnShowLockedIcon());
  803. }
  804.  
  805. void CAnnotateView::OnUpdateEditShowlockedobjects(CCmdUI* pCmdUI) 
  806. {
  807.    if (m_Lead.GetAnnContainer() > 0)
  808.       pCmdUI->Enable(TRUE);
  809.    else
  810.       pCmdUI->Enable(FALSE);
  811.    pCmdUI->SetCheck(m_Lead.GetAnnShowLockedIcon());
  812. }
  813.  
  814. void CAnnotateView::OnEditRealizeredactobjects() 
  815. {
  816.    m_Lead.AnnRealize(TRUE);
  817. }
  818.  
  819. void CAnnotateView::OnUpdateEditRealizeredactobjects(CCmdUI* pCmdUI) 
  820. {
  821.    if (m_Lead.GetAnnContainer() > 0)
  822.       pCmdUI->Enable(TRUE);
  823.    else
  824.       pCmdUI->Enable(FALSE);
  825. }
  826.  
  827. void CAnnotateView::OnEditRestoreredactobjects() 
  828. {
  829.     int nRet;
  830.     
  831.     nRet = m_Lead.AnnUnrealize(m_Lead.GetAnnContainer(), FALSE);
  832.     if (nRet == ERROR_ANN_LOCKED)
  833.       AfxMessageBox("Some redact objects are locked and cannot be restored");
  834. }
  835.  
  836. void CAnnotateView::OnUpdateEditRestoreredactobjects(CCmdUI* pCmdUI) 
  837. {
  838.    if (m_Lead.GetAnnContainer() > 0)
  839.       pCmdUI->Enable(TRUE);
  840.    else
  841.       pCmdUI->Enable(FALSE);
  842. }
  843.  
  844. void CAnnotateView::OnEditWangcompatibletagmode() 
  845. {
  846.    m_bWangMode = !m_bWangMode;
  847. }
  848.  
  849. void CAnnotateView::OnUpdateEditWangcompatibletagmode(CCmdUI* pCmdUI) 
  850. {
  851.    if (m_Lead.GetAnnContainer() > 0)
  852.       pCmdUI->Enable(TRUE);
  853.    else
  854.       pCmdUI->Enable(FALSE);
  855.    pCmdUI->SetCheck(m_bWangMode);
  856. }
  857.  
  858. void CAnnotateView::OnAnnHyperlinkLeadctrl1(long hObject, short iParamCount, long lParam1, long lParam2, long lParam3, long lParam4, long lParam5) 
  859. {
  860.     AfxMessageBox("Object's Hyperlink was activated!");
  861. }
  862.  
  863. void CAnnotateView::OnAnnHyperlinkMenuLeadctrl1(const VARIANT FAR& aObjects, short uCount) 
  864. {
  865.    long x;
  866.    int hObject;
  867.     
  868.    CLinkDlg LinkDlg;
  869.  
  870.    if(LinkDlg.DoModal() == IDOK)
  871.    {    
  872.       switch(LinkDlg.m_nType)
  873.       {
  874.          case ANNLINK_NONE:
  875.          case ANNLINK_ANNEVENT:
  876.             for(x=0; x<uCount; x++)
  877.             {
  878.                SafeArrayGetElement(aObjects.parray, &x, &hObject);
  879.                m_Lead.AnnSetHyperlinkMsg(hObject, LinkDlg.m_nType, 0, 0, 0, 0, 0);
  880.             }
  881.             break;
  882.          case ANNLINK_RUN:
  883.          case ANNLINK_WEBPAGE:
  884.             for(x=0; x<uCount; x++)
  885.             {
  886.                SafeArrayGetElement(aObjects.parray, &x, &hObject);
  887.                m_Lead.AnnSetHyperlinkString(hObject, LinkDlg.m_nType, LinkDlg.m_csLink);
  888.             }
  889.             break;
  890.       }
  891.     }
  892. }
  893.