home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / gfx / edit / tsmorph / handlesettings.c < prev    next >
C/C++ Source or Header  |  1993-12-21  |  25KB  |  845 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. //    $Author: M_J_Paddock $
  21. //    $Date: 1993/09/04 17:45:18 $
  22. //    $Revision: 1.10 $
  23.  
  24. // include precompiled headers (if not already)
  25. #ifndef TSMORPH_H
  26. #include "TSMorph.h"
  27. #endif
  28.  
  29. /* Remove menus from all windows allowing
  30.  * them to be updated
  31.  */
  32. void
  33. RemoveMenus(void) {
  34.     if (TSMorphWnd) {
  35.         ClearMenuStrip(TSMorphWnd);
  36.     }
  37.     if (ControlWindow) {
  38.         ClearMenuStrip(Pic1.Win);
  39.         ClearMenuStrip(Pic2.Win);
  40.         ClearMenuStrip(ControlWindow);
  41.     }
  42. }
  43.  
  44. /* Add the menus back again after
  45.  * calling RemoveMenus() and updating
  46.  */
  47. void
  48. AddMenus(void) {
  49.     if (TSMorphWnd) {
  50.         ResetMenuStrip(TSMorphWnd,TSMorphMenus);
  51.     }
  52.     if (ControlWindow) {
  53.         ResetMenuStrip(ControlWindow,MyMenu);
  54.         ResetMenuStrip(Pic1.Win,MyMenu);
  55.         ResetMenuStrip(Pic2.Win,MyMenu);
  56.     }
  57. }
  58.  
  59. /* Update the save format menu items
  60.  * Parameter: remove - set to TRUE to remove and add the menus
  61.  *                         to FALSE if menus have already been removed (for lots of updates)
  62.  */
  63. void
  64. UpdateSaveFormat(BOOL remove) {
  65.     if (remove) {
  66.         RemoveMenus();
  67.     }
  68.     if (TSMorphWnd) {
  69.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_ILBM24)))->Flags &= ~CHECKED;
  70.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24)))->Flags &= ~CHECKED;
  71.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24T)))->Flags &= ~CHECKED;
  72.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24F)))->Flags &= ~CHECKED;
  73.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24FT)))->Flags &= ~CHECKED;
  74.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_JPEG)))->Flags &= ~CHECKED;
  75.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_JPEGT)))->Flags &= ~CHECKED;
  76.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_PBM)))->Flags &= ~CHECKED;
  77.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_BW16)))->Flags &= ~CHECKED;
  78.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_BW256)))->Flags &= ~CHECKED;
  79.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_HAM6)))->Flags &= ~CHECKED;
  80.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_HAM8)))->Flags &= ~CHECKED;
  81.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_DCTV3)))->Flags &= ~CHECKED;
  82.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_DCTV4)))->Flags &= ~CHECKED;
  83.     }
  84.     if (ControlWindow) {
  85.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_ILBM24)))->Flags &= ~CHECKED;
  86.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24)))->Flags &= ~CHECKED;
  87.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24T)))->Flags &= ~CHECKED;
  88.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24F)))->Flags &= ~CHECKED;
  89.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24FT)))->Flags &= ~CHECKED;
  90.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_JPEG)))->Flags &= ~CHECKED;
  91.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_JPEGT)))->Flags &= ~CHECKED;
  92.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_PBM)))->Flags &= ~CHECKED;
  93.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_BW16)))->Flags &= ~CHECKED;
  94.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_BW256)))->Flags &= ~CHECKED;
  95.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_HAM6)))->Flags &= ~CHECKED;
  96.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_HAM8)))->Flags &= ~CHECKED;
  97.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_DCTV3)))->Flags &= ~CHECKED;
  98.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_DCTV4)))->Flags &= ~CHECKED;
  99.     }
  100.     if (TSMorphWnd) {
  101.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,SaveFormat)))->Flags |= CHECKED;
  102.     }
  103.     if (ControlWindow) {
  104.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,SaveFormat)))->Flags |= CHECKED;
  105.     }
  106.     if (remove) {
  107.         AddMenus();
  108.     }
  109. }
  110.  
  111. /* Update the render mode menu items
  112.  * see UpdateSaveFormat() for parameter
  113.  */
  114. void
  115. UpdateRenderMode(BOOL remove) {
  116.     if (remove) {
  117.         RemoveMenus();
  118.     }
  119.     if (TSMorphWnd) {
  120.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE0)))->Flags &= ~CHECKED;
  121.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE1)))->Flags &= ~CHECKED;
  122.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE2)))->Flags &= ~CHECKED;
  123.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE3)))->Flags &= ~CHECKED;
  124.     }
  125.     if (ControlWindow) {
  126.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE0)))->Flags &= ~CHECKED;
  127.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE1)))->Flags &= ~CHECKED;
  128.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE2)))->Flags &= ~CHECKED;
  129.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE3)))->Flags &= ~CHECKED;
  130.     }
  131.     if (TSMorphWnd) {
  132.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,RenderMode)))->Flags |= CHECKED;
  133.     }
  134.     if (ControlWindow) {
  135.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,RenderMode)))->Flags |= CHECKED;
  136.     }
  137.     if (remove) {
  138.         AddMenus();
  139.     }
  140. }
  141.  
  142. /* Update the open mode menu items
  143.  * see UpdateSaveFormat() for parameter
  144.  */
  145. void
  146. UpdateOpenMode(BOOL remove) {
  147.     if (remove) {
  148.         RemoveMenus();
  149.     }
  150.     if (TSMorphWnd) {
  151.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_ALWAYS)))->Flags &= ~CHECKED;
  152.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_IFILBM)))->Flags &= ~CHECKED;
  153.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_IFCOLOURS)))->Flags &= ~CHECKED;
  154.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_REMAP)))->Flags &= ~CHECKED;
  155.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_OPAL)))->Flags &= ~CHECKED;
  156.     }
  157.     if (ControlWindow) {
  158.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_ALWAYS)))->Flags &= ~CHECKED;
  159.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_IFILBM)))->Flags &= ~CHECKED;
  160.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_IFCOLOURS)))->Flags &= ~CHECKED;
  161.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_REMAP)))->Flags &= ~CHECKED;
  162.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_OPAL)))->Flags &= ~CHECKED;
  163.     }
  164.     if (TSMorphWnd) {
  165.         (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,OpenMode)))->Flags |= CHECKED;
  166.     }
  167.     if (ControlWindow) {
  168.         (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,OpenMode)))->Flags |= CHECKED;
  169.     }
  170.     if (remove) {
  171.         AddMenus();
  172.     }
  173. }
  174.  
  175. /* UnZoom the image windows
  176.  * i.e. currently displayed 2x and
  177.  * want to display 1x
  178.  */
  179. void
  180. UnZoom(void) {
  181.     // Already zoomed - set number of windows resized (change window box may not work)
  182.     // see the main loop on how the messages are then handled
  183.     changedboxcount = 0;
  184.     // Copy image 1 to superbitmap and resync
  185.     BltBitMap(Pic1.ilbm->brbitmap,0,0,&(Pic1.BitMap),0,0,Pic1.ilbm->Bmhd.w,Pic1.ilbm->Bmhd.h,0xC0,0xff,NULL);
  186.     LockLayerRom(Pic1.Win->RPort->Layer);
  187.     CopySBitMap(Pic1.Win->RPort->Layer);
  188.     UnlockLayerRom(Pic1.Win->RPort->Layer);
  189.     /* Resize gadgets and window (if too big)
  190.      * Window limits are reset and points
  191.      * redrawn with IDCMP_CHANGEWINDOW
  192.      */
  193.     SetGadgetAttrs(Pic1.BotGad, Pic1.Win, NULL,
  194.                         PGA_Total,    Pic1.ilbm->Bmhd.w,
  195.                         TAG_END);
  196.     SetGadgetAttrs(Pic1.SideGad, Pic1.Win, NULL,
  197.                         PGA_Total,    Pic1.ilbm->Bmhd.h,
  198.                         TAG_END);
  199.     ChangeWindowBox(Pic1.Win,Pic1.Win->LeftEdge,Pic1.Win->TopEdge,
  200.                          min(Pic1.Win->Width,Pic1.ilbm->Bmhd.w+Pic1.Screen->WBorLeft+SIZEIMAGE_W(n)),
  201.                          min(Pic1.Win->Height,Pic1.ilbm->Bmhd.h+Pic1