📄 treeviewmain.cpp
字号:
ArrayLabelImage->Canvas->Font->Handle = CreateFontIndirect (&lf);
for (j=0;j<Cluster->Columns;j++)
{
ArrayLabelImage->Canvas->TextOut((j*ZoomImageScaleX), ArrayLabelImage->Height, Cluster->Arrays->Strings[j]);
}
}
void __fastcall TTreeViewMainForm::MakeArrayTree()
{
if (Cluster->TopArrayNode != NULL)
{
ArrayTreeSplitter->Visible = true;
if (ArrayTreePanel->Height == 0)
{
ArrayTreePanel->Height = 100;
ArrayTreeImage->Height = 0;
}
ArrayTreeImage->Canvas->Brush->Style = bsSolid;
ArrayTreeImage->Canvas->Brush->Color = clWhite;
ArrayTreeImage->Canvas->FillRect(ArrayTreeImage->ClientRect);
Cluster->TopArrayNode->Draw(ArrayTreeImage, ZoomImageScaleX);
}
else
{
ArrayTreeSplitter->Visible = false;
ArrayTreePanel->Height = 0;
ArrayTreeImage->Height = 0;
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::Splitter2Moved(TObject *Sender)
{
Redo();
}
void __fastcall TTreeViewMainForm::Redo()
{
//OverviewPanel->Width = OverviewScrollBox->ClientWidth;
OverviewPanel->Height = SmallGeneImage->Height;
CentralPanel->Width = Cluster->Columns * ZoomImageScaleX;
if (Cluster->TopNode != NULL)
{
//SmallGeneImage->Left = max(100,OverviewScrollBox->ClientWidth - SmallGeneImage->Width - 1);
SmallGeneImage->Left = max(50,SmallGeneImage->Left);
OverviewPanel->Width = max(SmallGeneImage->Left + SmallGeneImage->Width,
OverviewScrollBox->ClientWidth);
TreeImage->Width = SmallGeneImage->Left;
TreeImage->Height = SmallGeneImage->Height;
TreeImage->Picture->Bitmap->Width = TreeImage->Width;
TreeImage->Picture->Bitmap->Height = SmallGeneImage->Height;
}
else
{
TreeImage->Width = 0;
OverviewScrollBox->ClientWidth = SmallGeneImage->Width;
OverviewPanel->Width = max(SmallGeneImage->Width,OverviewScrollBox->ClientWidth);
SmallGeneImage->Left = 0;
}
TreeImage->Canvas->FillRect(TreeImage->ClientRect);
// SmallGeneImage->Left = TreeImage->Width;
if (Cluster->Loaded)
{
if (Cluster->TopArrayNode != NULL)
{
Cluster->TopArrayNode->SetCoor();
}
TreeImage->Canvas->Pen->Color = clBlack;
if (Cluster->TopNode != NULL)
{
Cluster->TopNode->SetCoor();
Cluster->TopNode->Draw(TreeImage, ImageScaleY);
}
MakeArrayTree();
MakeArrayLabels();
ZoomBoxShape->Left = SmallGeneImage->Left;
ZoomBoxShape->Width = SmallGeneImage->Width;
ZoomBoxShape->Top = (ImageScaleY * Cluster->MinCoor) - 2;
ZoomBoxShape->Height = (ImageScaleY * (Cluster->MaxCoor - Cluster->MinCoor + 1)) + 4;
// Highlight selected node
if (Cluster->BestNode != NULL)
{
TreeImage->Canvas->Pen->Color = clFuchsia;
Cluster->BestNode->Draw(TreeImage, ImageScaleY);
}
}
}
void __fastcall TTreeViewMainForm::Reset()
{
OverviewPanel->Height = ImageScaleY * Cluster->Genes->Count;
Cluster->MakeThumbnail(SmallGeneImage,ImageScaleX,ImageScaleY,ImageContrast,MaskVal,
PositiveColor,ZeroColor,NegativeColor,MissingColor);
Redo();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::Splitter1Moved(TObject *Sender)
{
// OverviewPanel->Width = OverviewScrollBox->ClientWidth;
// SmallGeneImage->Left = max(50,OverviewScrollBox->ClientWidth - SmallGeneImage->Width -1);
Redo();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::Load1Click(TObject *Sender)
{
int i;
if (OpenDialog1->Execute())
{
for (i=0;i<ControlCount;i++)
{
if (Controls[i]->Width == 0)
{
Controls[i]->Width = 25;
}
if (Controls[i]->Width == 0)
{
Controls[i]->Height = 25;
}
}
char Drive[3];
char Dir[260];
fnsplit(OpenDialog1->FileName.c_str(),Drive,Dir,NULL,NULL);
OpenDialog1->InitialDir = AnsiString(Drive) + AnsiString(Dir);
//Loading->Show();
//TCursor SaveCursor = Screen->Cursor;
Application->Minimize();
Application->ProcessMessages();
//Screen->Cursor = crHourGlass;
if (Cluster != NULL)
{
delete Cluster;
Cluster = new TGeneCluster();
}
else
{
Cluster = new TGeneCluster();
}
try
{
ImageContrast = 2 * Cluster->Load(OpenDialog1->FileName);
OptionsForm->ImageContrastEdit->Text = ImageContrast;
OverviewPanel->Height = ImageScaleY * Cluster->Genes->Count;
Cluster->MakeThumbnail(SmallGeneImage,ImageScaleX,ImageScaleY,ImageContrast,MaskVal,
PositiveColor,ZeroColor,NegativeColor,MissingColor);
Redo();
//Screen->Cursor = SaveCursor;
//Loading->Close();
}
catch (Exception &E)
{
}
Application->Restore();
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::Options1Click(TObject *Sender)
{
OptionsForm->ShowModal();
SmallGeneImage->Width = Cluster->Columns * ImageScaleX;
SmallGeneImage->Height = Cluster->Rows * ImageScaleY;
Redo();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SmallGeneImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Dragging = true;
DragRect.Top = Y;
DragRect.Bottom = Y;
ZoomBoxShape->Top = DragRect.Top - 2;
ZoomBoxShape->Height = DragRect.Bottom - DragRect.Top + 4;
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SmallGeneImageMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (Dragging)
{
DragRect.Bottom = Y;
ZoomBoxShape->Height = DragRect.Bottom - DragRect.Top + 4;
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SmallGeneImageMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Dragging)
{
DragRect.Bottom = Y;
if (DragRect.Bottom < DragRect.Top)
{
int Hold = DragRect.Top;
DragRect.Top = DragRect.Bottom;
DragRect.Bottom = Hold;
}
if (DragRect.Right < DragRect.Left)
{
int Hold = DragRect.Left;
DragRect.Left = DragRect.Right;
DragRect.Right = Hold;
}
DragRect.Top = max((int)DragRect.Top,0);
ZoomBoxShape->Height = DragRect.Bottom - DragRect.Top + 4;
Dragging = false;
}
if (Cluster->BestNode != NULL)
{
TreeImage->Canvas->Pen->Color = clBlack;
Cluster->BestNode->Draw(TreeImage, ImageScaleY);
}
Cluster->Include(DragRect.Top/ImageScaleY, min(Cluster->Rows-1,(int)(DragRect.Bottom/ImageScaleY)));
MakeZoom();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if ( (Key > 36) && (Key <41) )
{
ResetNode();
switch (Key)
{
case 37:
if (Cluster->BestNode->IsNode)
{
Cluster->BestNode = Cluster->BestNode->Child1;
MakeZoom();
}
break;
case 38:
if (Cluster->BestNode != Cluster->TopNode)
{
Cluster->BestNode = Cluster->BestNode->Parent;
MakeZoom();
}
break;
case 39:
if (Cluster->BestNode->IsNode)
{
Cluster->BestNode = Cluster->BestNode->Child2;
MakeZoom();
}
break;
case 40:
while (Cluster->BestNode->Corr > CorrSelectCutoff)
{
Cluster->BestNode = Cluster->BestNode->Parent;
}
MakeZoom();
break;
default:
break;
}
}
if (Key == VkKeyScan('n'))
{
//NoteForm->Show();
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SaveTreeImage1Click(
TObject *Sender)
{
if (SaveDialog1->Execute())
{
TreeImage->Picture->Bitmap->PixelFormat = 6;
TreeImage->Picture->Bitmap->SaveToFile(SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SaveThumbnailImage1Click(
TObject *Sender)
{
if (SaveDialog1->Execute())
{
SmallGeneImage->Picture->Bitmap->PixelFormat = 6;
SmallGeneImage->Picture->Bitmap->SaveToFile(SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SaveZoomedImage1Click(TObject *Sender)
{
if (Cluster->BestNode != NULL)
{
char FileRoot[100];
fnsplit(OpenDialog1->FileName.c_str(),NULL,NULL,FileRoot,NULL);
SaveDialog1->FileName = AnsiString(FileRoot) + "_" + Cluster->BestNode->Data->ID
+ ".bmp";
}
if (SaveDialog1->Execute())
{
Graphics::TBitmap *WholeZoomImage = new Graphics::TBitmap();
WholeZoomImage->PixelFormat = 6;
WholeZoomImage->Width = ZoomImage->Width + LabelPanel->Width;
WholeZoomImage->Height = ArrayTreeImage->Height +
ArrayLabelImage->Height +
NodeBarcodeImage->Height +
ZoomImage->Height;
WholeZoomImage->Height += 20;
WholeZoomImage->Canvas->CopyMode = cmSrcCopy;
TRect DestRect;
DestRect.Top = 0;
DestRect.Left = 0;
DestRect.Right = ArrayTreeImage->ClientWidth;
DestRect.Bottom = ArrayTreeImage->ClientHeight;
WholeZoomImage->Canvas->CopyRect(DestRect,ArrayTreeImage->Canvas,ArrayTreeImage->ClientRect);
DestRect.Top = DestRect.Bottom + 3;
DestRect.Left = 0;
DestRect.Right = ArrayLabelImage->ClientWidth;
DestRect.Bottom = DestRect.Top + ArrayLabelImage->ClientHeight;
WholeZoomImage->Canvas->CopyRect(DestRect,ArrayLabelImage->Canvas,ArrayLabelImage->ClientRect);
DestRect.Top = DestRect.Bottom + 3;
DestRect.Left = 0;
DestRect.Right = NodeBarcodeImage->ClientWidth;
DestRect.Bottom = DestRect.Top + NodeBarcodeImage->ClientHeight;
WholeZoomImage->Canvas->CopyRect(DestRect,NodeBarcodeImage->Canvas,NodeBarcodeImage->ClientRect);
DestRect.Top = DestRect.Bottom + 3;
DestRect.Left = 0;
DestRect.Right = ZoomImage->ClientWidth;
DestRect.Bottom = DestRect.Top + ZoomImage->ClientHeight;
WholeZoomImage->Canvas->CopyRect(DestRect,ZoomImage->Canvas,ZoomImage->ClientRect);
DestRect.Left = DestRect.Right;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -