home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c016 / 3.ddi / MEDIADIB.PAK / DIBVIEW.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-07  |  9.5 KB  |  320 lines

  1. //---------------------------------------------------------
  2. //     DIBVIEW - TDIBDlgView source module
  3. //---------------------------------------------------------
  4. #include <owl\owlpch.h>
  5. #include <owl\validate.h>
  6. #include <owl\inputdia.h>
  7. #include "dibview.h"
  8.  
  9. ////////////////////////////////////////////////////////////////
  10. DEFINE_DOC_TEMPLATE_CLASS(TDIBDocument, TDibView, DIBDlgViewTmpl);
  11. DIBDlgViewTmpl BMPTmpl("Windows Bitmap Format", 
  12.                        "*.bmp;*.dib",
  13.                         0,
  14.                        "BMP",
  15.                                 dtAutoOpen|dtAutoDelete|dtUpdateDir|dtFileMustExist);
  16.  
  17. DIBDlgViewTmpl PCXTmpl("ZSOFT Bitmap Format",
  18.                        "*.pcx",
  19.                         0,
  20.                        "PCX",
  21.                                 dtAutoOpen|dtAutoDelete|dtUpdateDir|dtFileMustExist);
  22.  
  23. DIBDlgViewTmpl TGATmpl("TrueVision Targa Format",
  24.                        "*.tga",
  25.                         0,
  26.                        "TGA",
  27.                         dtAutoOpen|dtAutoDelete|dtUpdateDir|dtFileMustExist);
  28.  
  29. ////////////////////////////////////////////////////////////////
  30. DEFINE_RESPONSE_TABLE1(TDibView, TVbxPicBuf)
  31.   EV_VN_DOCOPENED,
  32.   EV_VN_DOCCLOSED,
  33.   EV_VN_VIEWOPENED,
  34.   EV_VN_VIEWCLOSED,
  35.   EV_VN_ISWINDOW,
  36.  
  37.   EV_COMMAND(CM_FILESAVE, CmFileSave),
  38.   EV_COMMAND(CM_FILESAVEAS, CmFileSaveAs),
  39.  
  40.   EV_COMMAND_ENABLE(CM_AUTOSCALE, CeAutoscale),
  41.   EV_COMMAND(CM_AUTOSCALE, CmAutoscale),
  42.   EV_COMMAND_ENABLE(CM_ZOOMFACTOR, CeZoomFactor),
  43.   EV_COMMAND(CM_ZOOMFACTOR, CmZoomFactor),
  44.  
  45.   EV_COMMAND(CM_IMKNEGATE, CmImkNegate),
  46.   EV_COMMAND(CM_IMKMIRRORHORZ, CmImkMirrorHorizontal),
  47.   EV_COMMAND(CM_IMKMIRRORVERT, CmImkMirrorVertical),
  48.   EV_COMMAND(CM_IMKROTATE, CmImkRotate),
  49.   EV_COMMAND(CM_IMKSHARPEN,CmImkSharpen),
  50.   EV_COMMAND(CM_IMKSOFTEN, CmImkSoften),
  51.  
  52.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_Click, PicBuf_EvClick),
  53.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_Change, PicBuf_EvChange),
  54.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_DblClick, PicBuf_EvDblClick),
  55.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_DragDrop, PicBuf_EvDragDrop),
  56.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_DragOver, PicBuf_EvDragOver),
  57.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_GotFocus, PicBuf_EvGotFocus),
  58.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_KeyDown, PicBuf_EvKeyDown),
  59.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_KeyPress, PicBuf_EvKeyPress),
  60.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_KeyUp, PicBuf_EvKeyUp),
  61.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_LostFocus, PicBuf_EvLostFocus),
  62.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_MouseDown, PicBuf_EvMouseDown),
  63.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_MouseMove, PicBuf_EvMouseMove),
  64.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_MouseUp, PicBuf_EvMouseUp),
  65.   EV_VBXEVENTINDEX(IDC_PICBUF, Event_PicBuf_Paint, PicBuf_EvPaint),
  66. END_RESPONSE_TABLE;
  67.  
  68.  
  69. ////////////////////////////////////////////////////////////////
  70. TDibView::TDibView(TDIBDocument& doc, TWindow* parent, const char* name,
  71.                          TModule* module) :
  72. TVbxPicBuf(parent, IDC_PICBUF, name, 0,0,1,1, 0, 0, module ? module : ::Module),
  73. TView(doc),
  74. DocPtr(&doc)
  75. {
  76.   //
  77.   // Set View's menu
  78.   //
  79.   SetViewMenu(new TMenuDescr("OPENDIBVIEW",0,2,1,0,0,0));
  80. }
  81.  
  82. TDibView::~TDibView()
  83. {
  84. }
  85.  
  86. ////////////////////////////////////////////////////////////////
  87. void TDibView::SetupWindow()
  88. {
  89.   TVbxPicBuf::SetupWindow();
  90.   SetPropBorderStyle(0);
  91.   SetPropDragMode(DragMode_1_Automatic);
  92.   PICTURE p;
  93.   p.Type = PICTURE_ICON;
  94.   p.Data.Icon.Icon = ::LoadIcon(*GetModule(), "IDI_COPYDIB");
  95.   SetPropDragIcon(VBXCreatePicture(&p));
  96.   FillViewData();
  97. }
  98.  
  99. ////////////////////////////////////////////////////////////////
  100. BOOL TDibView::CanClose()
  101. {
  102.   return DocPtr->CanClose();
  103. }
  104.  
  105. ////////////////////////////////////////////////////////////////
  106. void TDibView::FillViewData()
  107. {
  108.   SetPropFullPicture(int(DocPtr->GetHDIB()));
  109. }
  110.  
  111. ////////////////////////////////////////////////////////////////
  112. void TDibView::UpdateViewData()
  113. {
  114.   FillViewData();
  115. }
  116.  
  117. ////////////////////////////////////////////////////////////////
  118. BOOL TDibView::VnViewOpened(TView*)
  119. {
  120.   return TRUE;
  121. }
  122.  
  123. BOOL  TDibView::VnViewClosed(TView*)
  124. {
  125.   return TRUE;
  126. }
  127.  
  128. BOOL  TDibView::VnDocOpened(int /*omode*/)
  129. {
  130.   return TRUE;
  131. }
  132.  
  133. BOOL  TDibView::VnDocClosed(int /*omode*/)
  134. {
  135.   return TRUE;
  136. }
  137.  
  138. BOOL  TDibView::VnIsWindow(HWND hWnd)
  139. {
  140.   return Parent->HWindow == hWnd;  // Parent is TMDIChild
  141. }
  142.  
  143. ////////////////////////////////////////////////////////////////
  144. void TDibView::CmFileSave()
  145. {
  146.   if (!DocPtr->GetDocPath()) {
  147.     CmFileSaveAs();
  148.     return;
  149.   }
  150.   if (!DocPtr->IsDirty()) {
  151.     DocPtr->GetDocManager().PostDocError(*DocPtr, IDS_NOTCHANGED);
  152.     return;
  153.   }
  154.   DocPtr->Commit();  // should force write here?
  155. }
  156.  
  157. void TDibView::CmFileSaveAs()
  158. {
  159.   TDocTemplate* tpl;
  160.  
  161.   if ((tpl = DocPtr->GetDocManager().SelectAnySave(*DocPtr, FALSE)) == 0)
  162.     return;
  163.   if (tpl != DocPtr->GetTemplate())
  164.     DocPtr->SetTemplate(tpl);       // replace existing template
  165.   DocPtr->Commit(TRUE);             // force rewrite to new path
  166.   Parent->SetCaption(DocPtr->GetTitle()); // Parent is TMDIChild
  167. }
  168.  
  169. ////////////////////////////////////////////////////////////////
  170. void TDibView::CeAutoscale(TCommandEnabler& ce)
  171. {
  172.   BOOL autoscaleState;
  173.   GetPropAutoScale(autoscaleState);
  174.   ce.SetCheck(autoscaleState ? TCommandEnabler::Checked : TCommandEnabler::Unchecked);
  175. }
  176.  
  177. void TDibView::CmAutoscale()
  178. {
  179.   BOOL autoscaleState;
  180.   GetPropAutoScale(autoscaleState);
  181.   SetPropAutoScale(!autoscaleState);
  182. }
  183.  
  184. ////////////////////////////////////////////////////////////////
  185. void TDibView::CeZoomFactor(TCommandEnabler& ce)
  186. {
  187.   BOOL autoscaleState;
  188.   GetPropAutoScale(autoscaleState);
  189.   ce.Enable(!autoscaleState);
  190. }
  191.  
  192. void TDibView::CmZoomFactor()
  193. {
  194.   float zoomFactor;
  195.   GetPropZoomFactor(zoomFactor);
  196.  
  197.   char dlgBuffer[15];
  198.   gcvt(zoomFactor, 6, dlgBuffer);
  199.   TInputDialog dlgZoom(this, "Zoom Factor",
  200.                        "Enter Zoom Factor:", dlgBuffer,
  201.                        sizeof(dlgBuffer));
  202.  
  203.   if (dlgZoom.Execute() == IDOK) {
  204.     // Get Zoom entered
  205.     zoomFactor = atof(dlgBuffer);
  206.     SetPropZoomFactor(zoomFactor);
  207.   }
  208. }
  209.  
  210. ////////////////////////////////////////////////////////////////
  211. void TDibView::CmImkNegate()
  212. {
  213.   DocPtr->SetHDIB((HDIB)imkNegate((short)DocPtr->GetHDIB()));
  214.   UpdateViewData();
  215. }
  216.  
  217. void TDibView::CmImkMirrorHorizontal()
  218. {
  219.   DocPtr->SetHDIB((HDIB)imkMirror((short)DocPtr->GetHDIB(),TRUE,FALSE));
  220.   UpdateViewData();
  221. }
  222.  
  223. void TDibView::CmImkMirrorVertical()
  224. {
  225.   DocPtr->SetHDIB((HDIB)imkMirror((short)DocPtr->GetHDIB(),FALSE,TRUE));
  226.   UpdateViewData();
  227. }
  228.  
  229. void TDibView::CmImkRotate()
  230. {
  231.   char dlgBuffer[7] = "90";
  232.   TRangeValidator degreeValidator(0, 360);
  233.   TInputDialog dlgDegree(this, "Degrees of Rotation",
  234.                          "Enter degrees to rotate:", dlgBuffer,
  235.                          sizeof(dlgBuffer), 0, °reeValidator);
  236.  
  237.   if (dlgDegree.Execute() == IDOK) {
  238.     // Get Degree entered
  239.     int degree = atoi(dlgBuffer);
  240.  
  241.     // Get Background color
  242.     COLORREF backColor;
  243.     GetPropBackColor(backColor);
  244.  
  245.     // Create PaletteEntry for background color
  246.     PALETTEENTRY peBackColor;
  247.     peBackColor.peRed = GetRValue(backColor);
  248.     peBackColor.peGreen = GetGValue(backColor);
  249.     peBackColor.peBlue = GetBValue(backColor);
  250.     peBackColor.peFlags = 0;
  251.  
  252.     DocPtr->SetHDIB((HDIB)imkRotate((short)DocPtr->GetHDIB(), degree, peBackColor));
  253.     UpdateViewData();
  254.   }
  255. }
  256.  
  257. void TDibView::CmImkSharpen()
  258. {
  259.   char dlgBuffer[3] = "1";
  260.   TRangeValidator sharpnessValidator(1, 10);
  261.   TInputDialog dlgSharpen(this, "Degree of Sharpness",
  262.                           "Enter degrees to sharpen(1-10):", dlgBuffer,
  263.                           sizeof(dlgBuffer), 0, &sharpnessValidator);
  264.  
  265.   if (dlgSharpen.Execute() == IDOK) {
  266.     // Get Sharpness entered
  267.     DocPtr->SetHDIB((HDIB)imkSharpen((short)DocPtr->GetHDIB(), atoi(dlgBuffer)));
  268.     UpdateViewData();
  269.   }
  270. }
  271.  
  272. void TDibView::CmImkSoften()
  273. {
  274.   char dlgBuffer[3] = "1";
  275.   TRangeValidator softnessValidator(1, 10);
  276.   TInputDialog DlgSoften(this,"Degree of Softness",
  277.                          "Enter degrees to soften(1-10):", dlgBuffer,
  278.                           sizeof(dlgBuffer), 0, &softnessValidator);
  279.  
  280.   if (DlgSoften.Execute() == IDOK) {
  281.     // Get Softness entered
  282.     DocPtr->SetHDIB((HDIB)imkSoften((short)DocPtr->GetHDIB(), atoi(dlgBuffer)));
  283.     UpdateViewData();
  284.   }
  285. }
  286.  
  287. ////////////////////////////////////////////////////////////////
  288. void TDibView::PicBuf_EvDragDrop(VBXEVENT FAR* event) {
  289.   // Source As Control,X As Integer,Y As Integer
  290.   HCTL hCtl = VBX_EVENTARGNUM(event, HCTL, 0);
  291.   TVbxPicBuf* src = TYPESAFE_DOWNCAST(GetWindowPtr(VBXGetHwnd(hCtl)), TVbxPicBuf);
  292.  
  293.   if (src) {
  294.     int hDib;
  295.     src->GetPropFullPicture(hDib);
  296.     DocPtr->SetHDIB((HDIB)imkDuplicate(hDib));
  297.     DocPtr->SetDocPath(0);
  298.     TView::SetDocTitle(0, 0);
  299.     Parent->SetCaption(DocPtr->GetTitle()); // Parent is TMDIChild
  300.     UpdateViewData();
  301.   }
  302. }
  303.  
  304. ////////////////////////////////////////////////////////////////
  305. // Could implement selection rect by handling these events & setting
  306. // the SelectionXxx properties.
  307. //
  308. void TDibView::PicBuf_EvMouseDown(VBXEVENT FAR*) {
  309.   // Button As Integer,Shift As Integer,X As Integer,Y As Integer
  310. }
  311.  
  312. void TDibView::PicBuf_EvMouseMove(VBXEVENT FAR*) {
  313.   // Button As Integer,Shift As Integer,X As Integer,Y As Integer
  314. }
  315.  
  316. void TDibView::PicBuf_EvMouseUp(VBXEVENT FAR*) {
  317.   // Button As Integer,Shift As Integer,X As Integer,Y As Integer
  318. }
  319.  
  320.