//--------------------------------------------------------------------------- #include #pragma hdrstop #include "ModeView_F.h" #include "MainImage.h" #include "Palette.h" #include "fullview.h" //--------------------------------------------------------------------------- #define IDS_ZOOMIN StringTable[0] #define IDS_ZOOMOUT StringTable[1] //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "TPImage" #pragma link "TPTextileImage" #pragma resource "*.dfm" TViewForm *ViewForm; //--------------------------------------------------------------------------- __fastcall TViewForm::TViewForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TViewForm::FormCreate(TObject *Sender) { StringTable.Create(DirectoryItem, Language, "viewform"); SetSmallFont(Font); sbZoomOut->Caption = IDS_ZOOMOUT; sbZoomIn->Caption = IDS_ZOOMIN; FullViewForm->OnChangeZoom = ChangeZoom; } //--------------------------------------------------------------------------- void __fastcall TViewForm::FormClose(TObject *Sender, TCloseAction &Action) { if (FOnCloseForm) FOnCloseForm(); } //--------------------------------------------------------------------------- void __fastcall TViewForm::FormShow(TObject *Sender) { MainImageForm->OnReDraw = ReDrawImage; TTexpiaBitmap *Bmp = MainImageForm->Plan->ModeBitmap; if (!Image->Bitmap->Create(Bmp->Width, Bmp->Height, 16)) goto fail; Image->Bitmap->Copy(Bmp, SRCCOPY); Image->SetZoom(1, 1); Image->Canvas->Font->Size = 12; Image->Canvas->Font->Color = clRed; Left = 460; Top = 5; ScrollBarStatus(); ChangeZoom(); return; fail : EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); return; } //--------------------------------------------------------------------------- void __fastcall TViewForm::FormDestroy(TObject *Sender) { MainImageForm->OnReDraw = NULL; FullViewForm->OnChangeZoom = NULL; } //--------------------------------------------------------------------------- void __fastcall TViewForm::ScrollBarHScroll(TObject *Sender, TScrollCode ScrollCode, int &ScrollPos) { Image->PositionX = ScrollPos / Image->ZoomIn; Image->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TViewForm::ScrollBarVScroll(TObject *Sender, TScrollCode ScrollCode, int &ScrollPos) { Image->PositionY = ScrollPos / Image->ZoomIn; Image->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TViewForm::ImageMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button==mbMiddle || (Shift.Contains(ssShift) && Button==mbLeft)) { WORD yarn = MainImageForm->Plan->GetYarn(X, Y, true); if ((yarn & 0x8000) == 0) { PaletteForm->DIB256Palette->ChoiceIndex = MainImageForm->Plan->Yarn->Choice[(yarn>>11)&3].Color[(yarn>>8)&7][(yarn>>3)&0x1F]->Index; } else { PaletteForm->DIB256Palette->ChoiceIndex = 1; } } } //--------------------------------------------------------------------------- void __fastcall TViewForm::ImageMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (MainImageForm->bChoiceExchange == false) { WORD yarn = MainImageForm->Plan->GetYarn(X, Y, true); if ((yarn & 0x8000) == 0) { if (MainImageForm->Plan->Yarn->Choice[(yarn>>11)&3].Color[(yarn>>8)&7]) { if (((yarn>>3)&0x1F) < MainImageForm->Plan->Yarn->Choice[(yarn>>11)&3].Data->Colors) { PaletteForm->DIB256Palette->CursorIndex = MainImageForm->Plan->Yarn->Choice[(yarn>>11)&3].Color[(yarn>>8)&7][(yarn>>3) & 0x1F]->Index; } } } else { PaletteForm->DIB256Palette->CursorIndex = 1; } } } //--------------------------------------------------------------------------- void __fastcall TViewForm::sbZoomOutClick(TObject *Sender) { AnsiString str; switch (Image->ZoomIn) { case 1: switch (Image->ZoomOut) { case 1: Image->SetZoom(1, 2); str = "1/2"; break; case 2: Image->SetZoom(1, 4); str = "1/4"; break; case 4: Image->SetZoom(1, 8); str = "1/8"; break; case 8: Image->SetZoom(1, 16); str = "1/16"; break; case 16: return; } break; case 2: Image->SetZoom(1, 1); str = "1"; break; case 4: Image->SetZoom(2, 1); str = "2"; break; case 8: Image->SetZoom(4, 1); str = "4"; break; case 16: Image->SetZoom(8, 1); str = "8"; break; } stZoom->Caption = str; ScrollBarStatus(); Image->Repaint(); MainImageForm->ZoomChange(Image->ZoomIn, Image->ZoomOut); } //--------------------------------------------------------------------------- void __fastcall TViewForm::sbZoomInClick(TObject *Sender) { AnsiString str; switch (Image->ZoomIn) { case 1: switch (Image->ZoomOut) { case 1: Image->SetZoom(2, 1); str = "2"; break; case 2: Image->SetZoom(1, 1); str = "1"; break; case 4: Image->SetZoom(1, 2); str = "1/2"; break; case 8: Image->SetZoom(1, 4); str = "1/4"; break; case 16: Image->SetZoom(1, 8); str = "1/8"; break; } break; case 2: Image->SetZoom(4, 1); str = "4"; break; case 4: Image->SetZoom(8, 1); str = "8"; break; case 8: Image->SetZoom(16, 1); str = "16"; break; case 16: return; } stZoom->Caption = str; ScrollBarStatus(); Image->Repaint(); MainImageForm->ZoomChange(Image->ZoomIn, Image->ZoomOut); } //--------------------------------------------------------------------------- //// Private /////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- void __fastcall TViewForm::ScrollBarStatus() { double zo = (double) Image->ZoomIn / Image->ZoomOut; if (Image->Width < Image->Bitmap->Width * zo) { ScrollBarH->Enabled = true; ScrollBarH->Max = Image->Bitmap->Width * zo - Image->Width; } else { ScrollBarH->Enabled = false; } if (Image->Height < Image->Bitmap->Height * zo) { ScrollBarV->Enabled = true; ScrollBarV->Max = Image->Bitmap->Height * zo - Image->Height; } else { ScrollBarV->Enabled = false; } } //--------------------------------------------------------------------------- void __fastcall TViewForm::DrawText(HDC hdc, int sx, int sy, int i) { HBRUSH hOldBrush; HPEN hOldPen; int nDrawMode, formDC; AnsiString str = "T" + IntToStr(i); formDC = SaveDC(hdc); /* needed because we select a region */ hOldBrush = SelectObject(hdc, GetStockObject(WHITE_BRUSH)); hOldPen = SelectObject(hdc, GetStockObject(WHITE_PEN)); nDrawMode = GetROP2(hdc); SetROP2(hdc, R2_NOT); Rectangle(hdc, sx, sy, sx + 18, sy + 18); TextOut(hdc, sx + 3, sy + 3, str.c_str(), str.Length()); SetROP2(hdc, nDrawMode); SelectObject(hdc, hOldBrush); SelectObject(hdc, hOldPen); RestoreDC(hdc, formDC); } //--------------------------------------------------------------------------- void __fastcall TViewForm::ReDrawImage() { Image->Bitmap->Copy(MainImageForm->Plan->ModeBitmap, SRCCOPY); Image->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TViewForm::ChangeZoom() { AnsiString str; int in, out; in = MainImageForm->iMainImage->ZoomIn; out = MainImageForm->iMainImage->ZoomOut; Image->SetZoom(in, out); if (in > 1) str = IntToStr(in); else if (out > 1) str = Format("%d / %d", OPENARRAY(TVarRec, (in, out))); else str = "1"; stZoom->Caption = str; ScrollBarStatus(); Image->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TViewForm::ImagePaintZoom(TObject *Sender, HDC dc) { int sx, sy, dh, cnt = MainImageForm->Plan->Texture->Count; double zo = (double) Image->ZoomIn / Image->ZoomOut; if (MainImageForm->Plan->Dsim.machine == TRICOT) { dh = MainImageForm->Plan->ModeBitmap->Height / cnt; for (int i = 0; i < cnt; i++) { sx = 10; sy = (dh * i + 10 - Image->PositionY) * zo; DrawText(dc, sx, sy, i+1); } } } //---------------------------------------------------------------------------