home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / samples / ioc / 2ddraw / 2dmenu.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  27.1 KB  |  827 lines

  1. /******************************************************************************
  2. * .FILE:         2d-menu.cpp                                                  *
  3. *                                                                             *
  4. * .DESCRIPTION:  2D Graphics Drawing Program :    Menu Class Implementation   *
  5. *                                                                             *
  6. * .CLASSES:      MainWindow                                                   *
  7. *                                                                             *
  8. * .COPYRIGHT:                                                                 *
  9. *    Licensed Material - Program-Property of IBM                              *
  10. *    (C) Copyright IBM Corp. 1992, 1995 - All Rights Reserved                 *
  11. *                                                                             *
  12. * .DISCLAIMER:                                                                *
  13. *   The following [enclosed] code is sample code created by IBM               *
  14. *   Corporation.  This sample code is not part of any standard IBM product    *
  15. *   and is provided to you solely for the purpose of assisting you in the     *
  16. *   development of your applications.  The code is provided 'AS IS',          *
  17. *   without warranty of any kind.  IBM shall not be liable for any damages    *
  18. *   arising out of your use of the sample code, even if they have been        *
  19. *   advised of the possibility of such damages.                               *
  20. *                                                                             *
  21. * .NOTE: WE RECOMMEND USING A FIXED SPACE FONT TO LOOK AT THE SOURCE          *
  22. *                                                                             *
  23. ******************************************************************************/
  24. #ifndef _IBASE_                         //Make sure ibase.hpp is included
  25.   #include <ibase.hpp>                  //  since that is where IC_<environ>
  26. #endif                                  //  is defined.
  27. #include <igbitmap.hpp>
  28. #include <ifontdlg.hpp>
  29. #include <ifiledlg.hpp>
  30. #include <igrect.hpp>
  31. #include <igline.hpp>
  32. #include <ireslib.hpp>
  33. #include "2ddraw.hpp"
  34.  
  35. /*------------------------------------------------------------------------------
  36. | MainWindow::command                                                          |
  37. |                                                                              |
  38. | Command handler for button bar and menu bar.                                 |
  39. ------------------------------------------------------------------------------*/
  40. IBase::Boolean MainWindow::command( ICommandEvent& event )
  41. {
  42.   Boolean fProcessed = false;
  43.   switch (event.commandId())
  44.   {
  45.     case  ID_BKCOL_WHT:
  46.     case  ID_BKCOL_BLK:
  47.     case  ID_BKCOL_DARKGRA:
  48.     case  ID_BKCOL_PALEGRA:
  49.     case  ID_BKCOL_BRO:
  50.     case  ID_BKCOL_DARKRED:
  51.     case  ID_BKCOL_RED:
  52.     case  ID_BKCOL_YEL:
  53.     case  ID_BKCOL_DARKGRE:
  54.     case  ID_BKCOL_GRE:
  55.     case  ID_BKCOL_DARKCYA:
  56.     case  ID_BKCOL_CYA:
  57.     case  ID_BKCOL_DARKBLU:
  58.     case  ID_BKCOL_BLU:
  59.     case  ID_BKCOL_DARKPIN:
  60.     case  ID_BKCOL_PIN:
  61.       menuBar.uncheckItem(lastPenColorId)
  62.              .checkItem(lastPenColorId = event.commandId());
  63.       drawingArea.setBackgroundColor(backColorFromId(event.commandId()))
  64.                  .refresh();
  65.  
  66.       fProcessed = true;
  67.     break;
  68.     case PALLET_NORM:
  69.     case PALLET_LINE:
  70.     case PALLET_DRAW:
  71.     case PALLET_RECTANGLE:
  72.     case PALLET_ELLIPSE:
  73.     case PALLET_POLYLINE:
  74.     case PALLET_POLYGON:
  75.     case PALLET_ARC:
  76.     case PALLET_PIE:
  77.     case PALLET_CHORD:
  78.     case PALLET_TEXT:
  79.     case PALLET_BITMAP:
  80.       drawingArea.setDrawObject((DrawingArea::DrawObject)event.commandId());
  81.       flyOver.setHelpText( drawingArea.handle(),
  82.                            IResourceId(0),
  83.                            IResourceId(event.commandId() + LONG_OFFSET ));
  84.       fProcessed = true;
  85.     break;
  86.     case  ID_COL_WHT:
  87.     case  ID_COL_BLK:
  88.     case  ID_COL_DARKGRA:
  89.     case  ID_COL_PALEGRA:
  90.     case  ID_COL_BRO:
  91.     case  ID_COL_DARKRED:
  92.     case  ID_COL_RED:
  93.     case  ID_COL_YEL:
  94.     case  ID_COL_DARKGRE:
  95.     case  ID_COL_GRE:
  96.     case  ID_COL_DARKCYA:
  97.     case  ID_COL_CYA:
  98.     case  ID_COL_DARKBLU:
  99.     case  ID_COL_BLU:
  100.     case  ID_COL_DARKPIN:
  101.     case  ID_COL_PIN:
  102.       menuBar.uncheckItem(lastPenColorId)
  103.              .checkItem(lastPenColorId = event.commandId());
  104.       drawingArea.graphicBundle().setPenColor(penColorFromId(lastPenColorId));
  105.       fProcessed = true;
  106.     break;
  107.     case ID_FLCOL_WHT:
  108.     case ID_FLCOL_BLK:
  109.     case ID_FLCOL_DARKGRA:
  110.     case ID_FLCOL_PALEGRA:
  111.     case ID_FLCOL_BRO:
  112.     case ID_FLCOL_DARKRED:
  113.     case ID_FLCOL_RED:
  114.     case ID_FLCOL_YEL:
  115.     case ID_FLCOL_DARKGRE:
  116.     case ID_FLCOL_GRE:
  117.     case ID_FLCOL_DARKCYA:
  118.     case ID_FLCOL_CYA:
  119.     case ID_FLCOL_DARKBLU:
  120.     case ID_FLCOL_BLU:
  121.     case ID_FLCOL_DARKPIN:
  122.     case ID_FLCOL_PIN:
  123.       menuBar.uncheckItem(lastFillColorId)
  124.              .checkItem(lastFillColorId = event.commandId());
  125.       drawingArea.graphicBundle().setFillColor(fillColorFromId(lastFillColorId));
  126.       fProcessed = true;
  127.     break;
  128.     case ID_PENPATTERN_SOLID:
  129.     case ID_PENPATTERN_NOSHADE:
  130.     case ID_PENPATTERN_DIAG4:
  131.     case ID_PENPATTERN_DIAG3:
  132.     case ID_PENPATTERN_DIAG2:
  133.     case ID_PENPATTERN_DIAG1:
  134.     case ID_PENPATTERN_VERT:
  135.     case ID_PENPATTERN_HORIZ:
  136.     case ID_PENPATTERN_DENSE8:
  137.     case ID_PENPATTERN_DENSE7:
  138.     case ID_PENPATTERN_DENSE6:
  139.     case ID_PENPATTERN_DENSE5:
  140.     case ID_PENPATTERN_DENSE4:
  141.     case ID_PENPATTERN_DENSE3:
  142.     case ID_PENPATTERN_DENSE2:
  143.     case ID_PENPATTERN_DENSE1:
  144.       menuBar.uncheckItem(lastPenPatternId)
  145.              .checkItem(lastPenPatternId = event.commandId());
  146.       drawingArea.graphicBundle().setPenPattern(patternFromId(lastPenPatternId));
  147.       fProcessed = true;
  148.     break;
  149.     case ID_FILLPATTERN_SOLID:
  150.     case ID_FILLPATTERN_NOSHADE:
  151.     case ID_FILLPATTERN_DIAG4:
  152.     case ID_FILLPATTERN_DIAG3:
  153.     case ID_FILLPATTERN_DIAG2:
  154.     case ID_FILLPATTERN_DIAG1:
  155.     case ID_FILLPATTERN_VERT:
  156.     case ID_FILLPATTERN_HORIZ:
  157.     case ID_FILLPATTERN_DENSE8:
  158.     case ID_FILLPATTERN_DENSE7:
  159.     case ID_FILLPATTERN_DENSE6:
  160.     case ID_FILLPATTERN_DENSE5:
  161.     case ID_FILLPATTERN_DENSE4:
  162.     case ID_FILLPATTERN_DENSE3:
  163.     case ID_FILLPATTERN_DENSE2:
  164.     case ID_FILLPATTERN_DENSE1:
  165.       menuBar.uncheckItem(lastFillPatternId)
  166.              .checkItem(lastFillPatternId = event.commandId());
  167.       drawingArea.graphicBundle().setFillPattern(patternFromId(lastFillPatternId));
  168.       fProcessed = true;
  169.     break;
  170.     case ID_PENTYPE_ALTERNATE:
  171.     case ID_PENTYPE_SOLID:
  172.     case ID_PENTYPE_DASHDOUBLEDOT:
  173.     case ID_PENTYPE_LONGDASH:
  174.     case ID_PENTYPE_DOUBLEDOT:
  175.     case ID_PENTYPE_DASHDOT:
  176.     case ID_PENTYPE_SHORTDASH:
  177.     case ID_PENTYPE_DOT:
  178.       menuBar.uncheckItem(lastPenTypeId)
  179.              .checkItem(lastPenTypeId = event.commandId());
  180.       drawingArea.graphicBundle().setPenType(penTypeFromId(lastPenTypeId));
  181.       fProcessed = true;
  182.     break;
  183.     case ID_PENWIDTH_1:
  184.     case ID_PENWIDTH_2:
  185.     case ID_PENWIDTH_3:
  186.     case ID_PENWIDTH_4:
  187.       menuBar.uncheckItem(lastPenWidthId)
  188.              .checkItem(lastPenWidthId = event.commandId());
  189.       drawingArea.graphicBundle().setPenWidth(penWidthFromId(lastPenWidthId));
  190.     break;
  191.     case ID_SETFONT:
  192.     {
  193.       IFont curFont(drawingArea.currentFont());
  194.       curFont.useVectorOnly( );
  195.       IFontDialog::Settings fsettings(&curFont);
  196.       fsettings.setTitle(TITLE_DIALOG);    //Set Open Dialog Title from Resource  .
  197.  
  198.       IFontDialog fontd(                    //Create Font Open Dialiog             .
  199.         (IWindow*)desktopWindow(),          //  Parent is Desktop                  .
  200.         (IWindow*)this,
  201.         IFontDialog::defaultStyle(),        //  Set default Style                  .
  202.         fsettings);                         //  settings                           .
  203.       if (fontd.pressedOK())                //Check if ok from Font open dialog    .
  204.       {                                     //                                     .
  205.         drawingArea.setCurrentFont( curFont );
  206.       } /* endif */                         //                                     .
  207.       fProcessed = true;
  208.     }
  209.     break;
  210.     case ID_SETBITMAP:
  211.     {
  212.       IResourceLibrary reslib;
  213.       IFileDialog::Settings fsettings;      //                                     .
  214.       fsettings.setTitle(STR_LOAD_IMG);//Set Open Dialog Title from Resource  .
  215.       fsettings.setFileName(reslib.loadString(STR_BMP_EXT)); //Set FileNames to *.bmp               .
  216.  
  217.       IFileDialog fd(                       //Create File Open Dialiog             .
  218.         (IWindow*)desktopWindow(),          //  Parent is Desktop                  .
  219.         (IWindow*)this, fsettings);         //  Owner is me with settings          .
  220.       if (fd.pressedOK())                   //Check if ok from file open dialog    .
  221.       {
  222.         drawingArea.setBitmapFileName(fd.fileName());
  223.       }
  224.     }
  225.     break;
  226.     case ID_FILL:
  227.       menuBar.uncheckItem(lastDrawOperationId)
  228.              .checkItem(lastDrawOperationId = event.commandId());
  229.       drawingArea.graphicBundle().setDrawOperation(IGraphicBundle::fill);
  230.       break;
  231.     case ID_FRAME:
  232.       menuBar.uncheckItem(lastDrawOperationId)
  233.              .checkItem(lastDrawOperationId = event.commandId());
  234.       drawingArea.graphicBundle().setDrawOperation(IGraphicBundle::frame);
  235.       break;
  236.     case ID_FILLANDFRAME:
  237.       menuBar.uncheckItem(lastDrawOperationId)
  238.              .checkItem(lastDrawOperationId = event.commandId());
  239.       drawingArea.graphicBundle().setDrawOperation(IGraphicBundle::fillAndFrame);
  240.       break;
  241.     break;
  242.  
  243.   } /* endswitch */
  244.  
  245.   return fProcessed;
  246. }
  247.  
  248.  
  249. /*------------------------------------------------------------------------------
  250. | MainWindow::setSize                                                          |
  251. |                                                                              |
  252. | Overloaded function from IMenuDrawItemHandler.  Sets the width and height    |
  253. | of the owner draw menu items.                                                |
  254. ------------------------------------------------------------------------------*/
  255. IBase::Boolean MainWindow::setSize(IMenuDrawItemEvent& evt, ISize& newSize)
  256. {
  257.   switch (evt.itemId())
  258.   {
  259.     case ID_PENTYPE_ALTERNATE:
  260.     case ID_PENTYPE_SOLID:
  261.     case ID_PENTYPE_DASHDOUBLEDOT:
  262.     case ID_PENTYPE_LONGDASH:
  263.     case ID_PENTYPE_DOUBLEDOT:
  264.     case ID_PENTYPE_DASHDOT:
  265.     case ID_PENTYPE_SHORTDASH:
  266.     case ID_PENTYPE_DOT:
  267.  
  268.     case ID_PENWIDTH_4:
  269.     case ID_PENWIDTH_3:
  270.     case ID_PENWIDTH_2:
  271.     case ID_PENWIDTH_1:
  272.       newSize.setWidth( 80 ).setHeight( 15 );
  273.     break;
  274.     default:
  275. #ifdef IC_PM
  276.       newSize.setWidth( 10 ).setHeight( 20 );
  277. #else
  278.       newSize.setWidth( 40 ).setHeight( 20 );
  279. #endif
  280.     break;
  281.   }
  282.   return true;
  283. }
  284.  
  285. /*------------------------------------------------------------------------------
  286. | MainWindow::draw                                                             |
  287. |                                                                              |
  288. | Overloaded function from IMenuDrawItemHandler.  Draws all of the owner       |
  289. | draw menu items.                                                             |
  290. ------------------------------------------------------------------------------*/
  291. IBase::Boolean MainWindow::draw(IMenuDrawItemEvent& evt, DrawFlag& flag)
  292. {
  293.   static int checkMarkHeight(0);
  294.  
  295.   IGraphicContext gc(evt.itemPresSpaceHandle());
  296.  
  297.   gc.setPenType( IGraphicBundle::invisible );
  298.  
  299.   if (evt.isSelected())
  300.   {
  301.     gc.setPenColor(IGUIColor(IGUIColor::menuHiliteText))
  302.       .setFillColor(IGUIColor(IGUIColor::menuHiliteBgnd))
  303.       .setBackgroundColor(IGUIColor(IGUIColor::menuHiliteBgnd));
  304.   }
  305.   else
  306.   {
  307.     gc.setPenColor(IGUIColor(IGUIColor::menuText))
  308.       .setFillColor(IGUIColor(IGUIColor::menuBgnd))
  309.       .setBackgroundColor(IGUIColor(IGUIColor::menuBgnd));
  310.   }
  311.   IGRectangle box( evt.itemRect());
  312.   box.drawOn( gc );
  313.  
  314.   gc.setPenType( IGraphicBundle::solid );
  315.  
  316.   flag = IMenuDrawItemHandler::drewSelected;
  317.  
  318.   if (evt.isChecked())
  319.   {
  320.     flag |= IMenuDrawItemHandler::drewChecked;
  321.     switch (evt.itemId())
  322.     {
  323.       default:
  324.       {
  325.         ISystemBitmapHandle temp = ISystemBitmapHandle( ISystemBitmapHandle::menuCheckMark );
  326.         IGBitmap checkMark( temp );
  327.         if (!checkMarkHeight)
  328.           checkMarkHeight = checkMark.size().height();
  329.         checkMark.moveTo( IPoint( evt.itemRect().minXMinY().x(),
  330.                                   evt.itemRect().minXMinY().y() +
  331.                                 ( evt.itemRect().height() - checkMarkHeight) /2));
  332.         checkMark.drawOn( gc );
  333.       }
  334.       break;
  335.     } /* endswitch */
  336.   }
  337.  
  338.   IRectangle rc(IPoint( evt.itemRect().bottomLeft().x()+20,
  339.                         evt.itemRect().bottomLeft().y()+3 ),
  340.                 IPoint( evt.itemRect().topRight().x()-3,
  341.                         evt.itemRect().topRight().y()-3 ));
  342.   switch (evt.itemId())
  343.   {
  344.     case ID_FLCOL_WHT:
  345.     case ID_FLCOL_BLK:
  346.     case ID_FLCOL_DARKGRA:
  347.     case ID_FLCOL_PALEGRA:
  348.     case ID_FLCOL_BRO:
  349.     case ID_FLCOL_DARKRED:
  350.     case ID_FLCOL_RED:
  351.     case ID_FLCOL_YEL:
  352.     case ID_FLCOL_DARKGRE:
  353.     case ID_FLCOL_GRE:
  354.     case ID_FLCOL_DARKCYA:
  355.     case ID_FLCOL_CYA:
  356.     case ID_FLCOL_DARKBLU:
  357.     case ID_FLCOL_BLU:
  358.     case ID_FLCOL_DARKPIN:
  359.     case ID_FLCOL_PIN:
  360.       gc.setFillColor(fillColorFromId(evt.itemId()));
  361.       box.setEnclosingRect(rc).drawOn(gc);
  362.     break;
  363.     case ID_BKCOL_WHT:
  364.     case ID_BKCOL_BLK:
  365.     case ID_BKCOL_DARKGRA:
  366.     case ID_BKCOL_PALEGRA:
  367.     case ID_BKCOL_BRO:
  368.     case ID_BKCOL_DARKRED:
  369.     case ID_BKCOL_RED:
  370.     case ID_BKCOL_YEL:
  371.     case ID_BKCOL_DARKGRE:
  372.     case ID_BKCOL_GRE:
  373.     case ID_BKCOL_DARKCYA:
  374.     case ID_BKCOL_CYA:
  375.     case ID_BKCOL_DARKBLU:
  376.     case ID_BKCOL_BLU:
  377.     case ID_BKCOL_DARKPIN:
  378.     case ID_BKCOL_PIN:
  379.     {
  380.       gc.setFillColor(backColorFromId(evt.itemId()));
  381.       box.setEnclosingRect(rc).drawOn(gc);
  382.     }
  383.     break;
  384.  
  385.     case ID_COL_WHT:
  386.     case ID_COL_BLK:
  387.     case ID_COL_DARKGRA:
  388.     case ID_COL_PALEGRA:
  389.     case ID_COL_BRO:
  390.     case ID_COL_DARKRED:
  391.     case ID_COL_RED:
  392.     case ID_COL_YEL:
  393.     case ID_COL_DARKGRE:
  394.     case ID_COL_GRE:
  395.     case ID_COL_DARKCYA:
  396.     case ID_COL_CYA:
  397.     case ID_COL_DARKBLU:
  398.     case ID_COL_BLU:
  399.     case ID_COL_DARKPIN:
  400.     case ID_COL_PIN:
  401.       gc.setFillColor(penColorFromId(evt.itemId()));
  402.       box.setEnclosingRect(rc).drawOn(gc);
  403.     break;
  404.     case ID_PENPATTERN_SOLID:
  405.     case ID_PENPATTERN_NOSHADE:
  406.     case ID_PENPATTERN_DIAG4:
  407.     case ID_PENPATTERN_DIAG3:
  408.     case ID_PENPATTERN_DIAG2:
  409.     case ID_PENPATTERN_DIAG1:
  410.     case ID_PENPATTERN_VERT:
  411.     case ID_PENPATTERN_HORIZ:
  412.     case ID_PENPATTERN_DENSE8:
  413.     case ID_PENPATTERN_DENSE7:
  414.     case ID_PENPATTERN_DENSE6:
  415.     case ID_PENPATTERN_DENSE5:
  416.     case ID_PENPATTERN_DENSE4:
  417.     case ID_PENPATTERN_DENSE3:
  418.     case ID_PENPATTERN_DENSE2:
  419.     case ID_PENPATTERN_DENSE1:
  420.     {
  421.       gc.setFillColor( IColor::blue )
  422.         .setPenPattern(patternFromId(evt.itemId()))
  423.         .setPenColor( IColor::blue )
  424.         .setPenWidth( rc.height() );
  425.       IGLine line(rc.leftCenter(),
  426.                   IPoint( rc.rightCenter().x()-3,
  427.                           rc.rightCenter().y() ));
  428.       line.drawOn( gc );
  429.     }
  430.     break;
  431.     case ID_FILLPATTERN_SOLID:
  432.     case ID_FILLPATTERN_NOSHADE:
  433.     case ID_FILLPATTERN_DIAG4:
  434.     case ID_FILLPATTERN_DIAG3:
  435.     case ID_FILLPATTERN_DIAG2:
  436.     case ID_FILLPATTERN_DIAG1:
  437.     case ID_FILLPATTERN_VERT:
  438.     case ID_FILLPATTERN_HORIZ:
  439.     case ID_FILLPATTERN_DENSE8:
  440.     case ID_FILLPATTERN_DENSE7:
  441.     case ID_FILLPATTERN_DENSE6:
  442.     case ID_FILLPATTERN_DENSE5:
  443.     case ID_FILLPATTERN_DENSE4:
  444.     case ID_FILLPATTERN_DENSE3:
  445.     case ID_FILLPATTERN_DENSE2:
  446.     case ID_FILLPATTERN_DENSE1:
  447.     {
  448.       gc.setFillColor( IColor::blue )
  449.         .setFillPattern(patternFromId(evt.itemId()))
  450.         .setPenColor( IColor::blue )
  451.         .setPenEndingStyle( IGraphicBundle::flat );
  452.       IGRectangle rect(rc);
  453.       rect.drawOn( gc );
  454.     }
  455.     break;
  456.     case ID_PENTYPE_ALTERNATE:
  457.     case ID_PENTYPE_SOLID:
  458.     case ID_PENTYPE_DASHDOUBLEDOT:
  459.     case ID_PENTYPE_LONGDASH:
  460.     case ID_PENTYPE_DOUBLEDOT:
  461.     case ID_PENTYPE_DASHDOT:
  462.     case ID_PENTYPE_SHORTDASH:
  463.     case ID_PENTYPE_DOT:
  464.       gc.setPenType( penTypeFromId( evt.itemId()));
  465.       {
  466.         gc.setPenColor( IColor::blue );
  467.         IGLine line( IPoint( evt.itemRect().bottomLeft().x()+20,
  468.                              evt.itemRect().leftCenter().y() ),
  469.                      IPoint( evt.itemRect().topRight().x()-3,
  470.                              evt.itemRect().leftCenter().y() ));
  471.         line.drawOn( gc );
  472.       }
  473.     break;
  474.     case ID_PENWIDTH_4:
  475.     case ID_PENWIDTH_3:
  476.     case ID_PENWIDTH_2:
  477.     case ID_PENWIDTH_1:
  478.       gc.setPenType( IGraphicBundle::solid )
  479.         .setPenColor( IColor::blue )
  480.         .setPenWidth( penWidthFromId( evt.itemId()));
  481.       {
  482.         IGLine line( IPoint( evt.itemRect().bottomLeft().x()+20,
  483.                              evt.itemRect().leftCenter().y() ),
  484.                      IPoint( evt.itemRect().topRight().x()-3,
  485.                              evt.itemRect().leftCenter().y() ));
  486.         line.drawOn( gc );
  487.       }
  488.     break;
  489.   }
  490.   return true;
  491. }
  492.  
  493. /*------------------------------------------------------------------------------
  494. | MainWindow::backColorFromId                                                  |
  495. |                                                                              |
  496. | Static function which maps menu id values to their corresponding IColor      |
  497. | equivalents.                                                                 |
  498. ------------------------------------------------------------------------------*/
  499. IColor MainWindow::backColorFromId( unsigned long Identifier )
  500. {
  501.   IColor::Color col;
  502.   switch (Identifier)
  503.   {
  504.     case ID_BKCOL_WHT:
  505.       col = IColor::white;
  506.     break;
  507.     case ID_BKCOL_BLK:
  508.       col = IColor::black;
  509.     break;
  510.     case ID_BKCOL_DARKGRA:
  511.       col = IColor::darkGray;
  512.     break;
  513.     case ID_BKCOL_PALEGRA:
  514.       col = IColor::paleGray;
  515.     break;
  516.     case ID_BKCOL_BRO:
  517.       col = IColor::brown;
  518.     break;
  519.     case ID_BKCOL_DARKRED:
  520.       col = IColor::darkRed;
  521.     break;
  522.     case ID_BKCOL_RED:
  523.       col = IColor::red;
  524.     break;
  525.     case ID_BKCOL_YEL:
  526.       col = IColor::yellow;
  527.     break;
  528.     case ID_BKCOL_DARKGRE:
  529.       col = IColor::darkGreen;
  530.     break;
  531.     case ID_BKCOL_GRE:
  532.       col = IColor::green;
  533.     break;
  534.     case ID_BKCOL_DARKCYA:
  535.       col = IColor::darkCyan;
  536.     break;
  537.     case ID_BKCOL_CYA:
  538.       col = IColor::cyan;
  539.     break;
  540.     case ID_BKCOL_DARKBLU:
  541.       col = IColor::darkBlue;
  542.     break;
  543.     case ID_BKCOL_BLU:
  544.       col = IColor::blue;
  545.     break;
  546.     case ID_BKCOL_DARKPIN:
  547.       col = IColor::darkPink;
  548.     break;
  549.     case ID_BKCOL_PIN:
  550.       col = IColor::pink;
  551.     break;
  552.   } /* endswitch */
  553.   return IColor( col );
  554. }
  555.  
  556. /*------------------------------------------------------------------------------
  557. | MainWindow::fillColorFromId                                                  |
  558. |                                                                              |
  559. | Static function which maps menu id values to their corresponding IColor      |
  560. | equivalents.                                                                 |
  561. ------------------------------------------------------------------------------*/
  562. IColor MainWindow::fillColorFromId( unsigned long Identifier )
  563. {
  564.   IColor::Color col;
  565.   switch (Identifier)
  566.   {
  567.     case ID_FLCOL_WHT:
  568.       col = IColor::white;
  569.     break;
  570.     case ID_FLCOL_BLK:
  571.       col = IColor::black;
  572.     break;
  573.     case ID_FLCOL_DARKGRA:
  574.       col = IColor::darkGray;
  575.     break;
  576.     case ID_FLCOL_PALEGRA:
  577.       col = IColor::paleGray;
  578.     break;
  579.     case ID_FLCOL_BRO:
  580.       col = IColor::brown;
  581.     break;
  582.     case ID_FLCOL_DARKRED:
  583.       col = IColor::darkRed;
  584.     break;
  585.     case ID_FLCOL_RED:
  586.       col = IColor::red;
  587.     break;
  588.     case ID_FLCOL_YEL:
  589.       col = IColor::yellow;
  590.     break;
  591.     case ID_FLCOL_DARKGRE:
  592.       col = IColor::darkGreen;
  593.     break;
  594.     case ID_FLCOL_GRE:
  595.       col = IColor::green;
  596.     break;
  597.     case ID_FLCOL_DARKCYA:
  598.       col = IColor::darkCyan;
  599.     break;
  600.     case ID_FLCOL_CYA:
  601.       col = IColor::cyan;
  602.     break;
  603.     case ID_FLCOL_DARKBLU:
  604.       col = IColor::darkBlue;
  605.     break;
  606.     case ID_FLCOL_BLU:
  607.       col = IColor::blue;
  608.     break;
  609.     case ID_FLCOL_DARKPIN:
  610.       col = IColor::darkPink;
  611.     break;
  612.     case ID_FLCOL_PIN:
  613.       col = IColor::pink;
  614.     break;
  615.   } /* endswitch */
  616.   return IColor( col );
  617. }
  618.  
  619. /*------------------------------------------------------------------------------
  620. | MainWindow::penColorFromId                                                   |
  621. |                                                                              |
  622. | Static function which maps menu id values to their corresponding IColor      |
  623. | equivalents.                                                                 |
  624. ------------------------------------------------------------------------------*/
  625. IColor MainWindow::penColorFromId( unsigned long Identifier )
  626. {
  627.   IColor::Color col;
  628.   switch (Identifier)
  629.   {
  630.     case ID_COL_WHT:
  631.       col = IColor::white;
  632.     break;
  633.     case ID_COL_BLK:
  634.       col = IColor::black;
  635.     break;
  636.     case ID_COL_DARKGRA:
  637.       col = IColor::darkGray;
  638.     break;
  639.     case ID_COL_PALEGRA:
  640.       col = IColor::paleGray;
  641.     break;
  642.     case ID_COL_BRO:
  643.       col = IColor::brown;
  644.     break;
  645.     case ID_COL_DARKRED:
  646.       col = IColor::darkRed;
  647.     break;
  648.     case ID_COL_RED:
  649.       col = IColor::red;
  650.     break;
  651.     case ID_COL_YEL:
  652.       col = IColor::yellow;
  653.     break;
  654.     case ID_COL_DARKGRE:
  655.       col = IColor::darkGreen;
  656.     break;
  657.     case ID_COL_GRE:
  658.       col = IColor::green;
  659.     break;
  660.     case ID_COL_DARKCYA:
  661.       col = IColor::darkCyan;
  662.     break;
  663.     case ID_COL_CYA:
  664.       col = IColor::cyan;
  665.     break;
  666.     case ID_COL_DARKBLU:
  667.       col = IColor::darkBlue;
  668.     break;
  669.     case ID_COL_BLU:
  670.       col = IColor::blue;
  671.     break;
  672.     case ID_COL_DARKPIN:
  673.       col = IColor::darkPink;
  674.     break;
  675.     case ID_COL_PIN:
  676.       col = IColor::pink;
  677.     break;
  678.   } /* endswitch */
  679.   return IColor( col );
  680. }
  681.  
  682.  
  683. /*------------------------------------------------------------------------------
  684. | MainWindow::patternFromId                                                    |
  685. |                                                                              |
  686. | Static function which maps menu id values to their corresponding pattern     |
  687. | equivalents.                                                                 |
  688. ------------------------------------------------------------------------------*/
  689. unsigned long MainWindow::patternFromId( unsigned long Identifier )
  690. {
  691.   unsigned long pattern;
  692.   switch (Identifier)
  693.   {
  694.     case ID_PENPATTERN_SOLID:
  695.     case ID_FILLPATTERN_SOLID:
  696.       pattern = IGraphicBundle::filled;
  697.     break;
  698.     case ID_PENPATTERN_NOSHADE:
  699.     case ID_FILLPATTERN_NOSHADE:
  700.       pattern = IGraphicBundle::hollow;
  701.     break;
  702.     case ID_PENPATTERN_DIAG4:
  703.     case ID_FILLPATTERN_DIAG4:
  704.       pattern = IGraphicBundle::backwardDiag2;
  705.     break;
  706.     case ID_PENPATTERN_DIAG3:
  707.     case ID_FILLPATTERN_DIAG3:
  708.       pattern = IGraphicBundle::backwardDiag1;
  709.     break;
  710.     case ID_PENPATTERN_DIAG2:
  711.     case ID_FILLPATTERN_DIAG2:
  712.       pattern = IGraphicBundle::forewardDiag2;
  713.     break;
  714.     case ID_PENPATTERN_DIAG1:
  715.     case ID_FILLPATTERN_DIAG1:
  716.       pattern = IGraphicBundle::forewardDiag1;
  717.     break;
  718.     case ID_PENPATTERN_VERT:
  719.     case ID_FILLPATTERN_VERT:
  720.       pattern = IGraphicBundle::vertical;
  721.     break;
  722.     case ID_PENPATTERN_HORIZ:
  723.     case ID_FILLPATTERN_HORIZ:
  724.       pattern = IGraphicBundle::horizontal;
  725.     break;
  726.     case ID_PENPATTERN_DENSE8:
  727.     case ID_FILLPATTERN_DENSE8:
  728.       pattern = IGraphicBundle::dense8;
  729.     break;
  730.     case ID_PENPATTERN_DENSE7:
  731.     case ID_FILLPATTERN_DENSE7:
  732.       pattern = IGraphicBundle::dense7;
  733.     break;
  734.     case ID_PENPATTERN_DENSE6:
  735.     case ID_FILLPATTERN_DENSE6:
  736.       pattern = IGraphicBundle::dense6;
  737.     break;
  738.     case ID_PENPATTERN_DENSE5:
  739.     case ID_FILLPATTERN_DENSE5:
  740.       pattern = IGraphicBundle::dense5;
  741.     break;
  742.     case ID_PENPATTERN_DENSE4:
  743.     case ID_FILLPATTERN_DENSE4:
  744.       pattern = IGraphicBundle::dense4;
  745.     break;
  746.     case ID_PENPATTERN_DENSE3:
  747.     case ID_FILLPATTERN_DENSE3:
  748.       pattern = IGraphicBundle::dense3;
  749.     break;
  750.     case ID_PENPATTERN_DENSE2:
  751.     case ID_FILLPATTERN_DENSE2:
  752.       pattern = IGraphicBundle::dense2;
  753.     break;
  754.     case ID_PENPATTERN_DENSE1:
  755.     case ID_FILLPATTERN_DENSE1:
  756.       pattern = IGraphicBundle::dense1;
  757.     break;
  758.   }
  759.   return pattern;
  760. }
  761.  
  762. /*------------------------------------------------------------------------------
  763. | MainWindow::patterFromId                                                     |
  764. |                                                                              |
  765. | Static function which maps menu id values to their corresponding pen type    |
  766. | equivalents.                                                                 |
  767. ------------------------------------------------------------------------------*/
  768. IGraphicBundle::PenType MainWindow::penTypeFromId( unsigned long Identifier )
  769. {
  770.   IGraphicBundle::PenType penType;
  771.   switch (Identifier)
  772.   {
  773.     case ID_PENTYPE_ALTERNATE:
  774.       penType = IGraphicBundle::alternate;
  775.     break;
  776.     case ID_PENTYPE_SOLID:
  777.       penType = IGraphicBundle::solid;
  778.     break;
  779.     case ID_PENTYPE_DASHDOUBLEDOT:
  780.       penType = IGraphicBundle::dashDoubleDot;
  781.     break;
  782.     case ID_PENTYPE_LONGDASH:
  783.       penType = IGraphicBundle::longDash;
  784.     break;
  785.     case ID_PENTYPE_DOUBLEDOT:
  786.       penType = IGraphicBundle::doubleDot;
  787.     break;
  788.     case ID_PENTYPE_DASHDOT:
  789.       penType = IGraphicBundle::dashDot;
  790.     break;
  791.     case ID_PENTYPE_SHORTDASH:
  792.       penType = IGraphicBundle::shortDash;
  793.     break;
  794.     case ID_PENTYPE_DOT:
  795.       penType = IGraphicBundle::dot;
  796.     break;
  797.   }
  798.   return penType;
  799. }
  800.  
  801. /*------------------------------------------------------------------------------
  802. | MainWindow::patterFromId                                                     |
  803. |                                                                              |
  804. | Static function which maps menu id values to their corresponding pen width   |
  805. | equivalents.                                                                 |
  806. ------------------------------------------------------------------------------*/
  807. unsigned long MainWindow::penWidthFromId( unsigned long Identifier )
  808. {
  809.   unsigned long width;
  810.   switch (Identifier)
  811.   {
  812.     case ID_PENWIDTH_1:
  813.       width = 1;
  814.     break;
  815.     case ID_PENWIDTH_2:
  816.       width = 2;
  817.     break;
  818.     case ID_PENWIDTH_3:
  819.       width = 4;
  820.     break;
  821.     case ID_PENWIDTH_4:
  822.       width = 6;
  823.     break;
  824.   } /* endswitch */
  825.   return width;
  826. }
  827.