📄 treeviewmain.cpp
字号:
DestRect.Right = DestRect.Left + LabelPanel->ClientWidth;
//WholeZoomImage->Canvas->CopyRect(DestRect,LabelPanel->Canvas,LabelPabel->ClientRect);
int i,X,Y;
for (i=Cluster->MinCoor;i<=Cluster->MaxCoor;i++)
{
WholeZoomImage->Canvas->Font = ZoomFontDialog->Font;
WholeZoomImage->Canvas->Font->Height = - ZoomImageScaleY;
Y = DestRect.Top + ((i - Cluster->MinCoor) * ZoomImageScaleY);
X = DestRect.Left + 5;
WholeZoomImage->Canvas->TextOut(X,Y,((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Name);
}
WholeZoomImage->SaveToFile(SaveDialog1->FileName);
delete WholeZoomImage;
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::ZoomScrollBoxClick(TObject *Sender)
{
//GeneInfoForm->Show();
//GeneInfoForm->Repaint();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::Find(AnsiString FindString)
{
int index = -1;
int i;
if ( (FindString.SubString(1,4) == "NODE") && (Cluster->TopNode != NULL) )
{
TGeneTreeNode *MatchedNode = Cluster->TopNode->FindNode(FindString);
if (MatchedNode != NULL)
{
ResetNode();
Cluster->BestNode = MatchedNode;
Cluster->BestNode->Limits(&Cluster->MinCoor,&Cluster->MaxCoor);
MakeZoom();
//TreeViewMainForm->Caption = "Gene Tree View " + Cluster->BestNode->Data->ID + " " + AnsiString(Cluster->BestNode->Corr);
}
}
else
{
for (i=LastIndex+1;i<Cluster->GeneNames->Count;i++)
{
if ((Cluster->GeneNames->Strings[i].UpperCase()).Pos(FindString.UpperCase()) > 0)
{
index = i;
i = Cluster->GeneNames->Count;
}
}
if (index > -1)
{
if (Cluster->BestNode != NULL)
{
TreeImage->Canvas->Pen->Color = clBlack;
Cluster->BestNode->Draw(TreeImage, ImageScaleY);
}
Cluster->MinCoor = index;
Cluster->MaxCoor = index;
Cluster->Include(index, index);
MakeZoom();
}
LastIndex = index;
}
SetOverviewScrollPos();
}
void __fastcall TTreeViewMainForm::Gene1Click(TObject *Sender)
{
FindForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::Help1Click(TObject *Sender)
{
HelpForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::About1Click(TObject *Sender)
{
AboutForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::ArrayTreeSplitterMoved(TObject *Sender)
{
MakeArrayTree();
LabelPanel->Top = ArrayLabelImage->Height + ArrayLabelSplitter->Height +
ArrayTreeImage->Height + ArrayTreeSplitter->Height;
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::ArrayLabelSplitterMoved(TObject *Sender)
{
MakeArrayLabels();
OuterLabelPanel->Top = ArrayLabelImage->Height + ArrayLabelSplitter->Height +
ArrayTreeImage->Height + ArrayTreeSplitter->Height;
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::ArrayTreePanelResize(TObject *Sender)
{
ArrayTreeImage->Picture->Bitmap->Width = ArrayTreePanel->Width;
ArrayTreeImage->Picture->Bitmap->Height = ArrayTreePanel->Height;
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::ArrayLabelPanelResize(TObject *Sender)
{
ArrayLabelImage->Picture->Bitmap->Width = ArrayLabelPanel->Width;
ArrayLabelImage->Picture->Bitmap->Height = ArrayLabelPanel->Height;
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::ScrollBar1Change(TObject *Sender)
{
//CentralPanel->Top = -ScrollBar1->Position;
ZoomImage->Top = -ScrollBar1->Position;
LabelPanel->Top = -ScrollBar1->Position;
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::CentralPanelResize(TObject *Sender)
{
if (CentralPanel->Height > CentralScrollBox->ClientHeight)
{
ScrollBar1->Visible = true;
ScrollBar1->Min = 0;
ScrollBar1->Max = CentralPanel->Height -CentralScrollBox->ClientHeight;
}
else
{
ScrollBar1->Visible = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::Splitter3Moved(TObject *Sender)
{
SmallGeneImage->Left = Splitter3->Left + Splitter3->Width;
Redo();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SaveList1Click(TObject *Sender)
{
if (Cluster->BestNode != NULL)
{
char FileRoot[100];
fnsplit(OpenDialog1->FileName.c_str(),NULL,NULL,FileRoot,NULL);
SaveListDialog->FileName = AnsiString(FileRoot) + "_" + Cluster->BestNode->Data->ID
+ ".txt";
}
if (SaveListDialog->Execute())
{
int i;
TStringList *IDList = new TStringList();
for (i=Cluster->MinCoor;i<=Cluster->MaxCoor;i++)
{
AnsiString ID =
((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->ID;
IDList->Add(ID);
}
IDList->SaveToFile(SaveListDialog->FileName);
delete IDList;
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SaveData1Click(TObject *Sender)
{
if (Cluster->BestNode != NULL)
{
char FileRoot[100];
fnsplit(OpenDialog1->FileName.c_str(),NULL,NULL,FileRoot,NULL);
SaveDataDialog->FileName = AnsiString(FileRoot) + "_" + Cluster->BestNode->Data->ID
+ ".txt";
}
if (SaveDataDialog->Execute())
{
int i,j;
TStringList *DataList = new TStringList();
AnsiString Line;
Line = Cluster->UniqueID + "\tNAME";
if (Cluster->UniqueID == "ID")
{
Line = "UID\tNAME";
}
for (j=0;j<Cluster->Columns;j++)
{
Line += "\t" +
Cluster->Arrays->Strings[j];
}
DataList->Add(Line);
for (i=Cluster->MinCoor;i<=Cluster->MaxCoor;i++)
{
Line =
((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->ID +
"\t" +
((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Name;
for (j=0;j<Cluster->Columns;j++)
{
Line += "\t";
if (((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Mask[j])
{
Line += AnsiString(((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Data[j]);
}
}
DataList->Add(Line);
}
DataList->SaveToFile(SaveDataDialog->FileName);
delete DataList;
}
}
void __fastcall TTreeViewMainForm::MakeSimplePS()
{
if (SavePSDialog->Execute())
{
TStringList *File = new TStringList();
//
// PostScript Header
//
File->Add("%!PS-Adobe-3.0");
File->Add("%%Creator: GeneClust1.0");
File->Add("%%CreationDate: Fri Jul 31 12:35:39 1998");
File->Add("%%Pages: (atend)");
File->Add("%%EndComments");
File->Add("%%BeginSetup");
File->Add("/ln { newpath moveto lineto stroke closepath } bind def");
File->Add("/tx { newpath moveto show closepath } bind def");
File->Add("/sl { setlinewidth } def");
File->Add("/sc { setlinecap } def");
File->Add("/sr { setrgbcolor } def");
File->Add("/sf { exch findfont exch scalefont setfont } def");
File->Add("/tr { translate } def");
File->Add("/sp { 1 sc 1 sl 0.0 0.0 0.0 sr 18.00000 13.00000 tr 0.96000 0.98205 scale tr } def");
AnsiString Temp = "/fillbox {newpath moveto " +
AnsiString(ZoomImageScaleX) + " 0 rlineto 0 " +
AnsiString(ZoomImageScaleY) + " rlineto -" +
AnsiString(ZoomImageScaleX) + " 0 rlineto closepath fill} def";
File->Add(Temp);
File->Add("%%EndSetup");
File->Add("%%Page: tree 1");
File->Add("%%PageResources: (atend)");
File->Add("%%BeginPageSetup");
File->Add("/pgsave save def");
File->Add("%%EndPageSetup");
File->Add("0 setlinewidth");
File->Add("/Courier findfont");
Temp = AnsiString(ZoomImageScaleY) + " scalefont";
File->Add(Temp);
File->Add("setfont");
int i,j,x,y;
double Red, Green, Blue, Val;
AnsiString Name;
for (i=Cluster->MinCoor;i<=Cluster->MaxCoor;i++)
{
Name =
((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Name;
TReplaceFlags Flags;
Flags << rfReplaceAll;
Name = StringReplace(Name,"(","",Flags);
Name = StringReplace(Name,")","",Flags);
for (j=0;j<Cluster->Columns;j++)
{
x = j * ZoomImageScaleX;
y = (i - Cluster->MinCoor) * ZoomImageScaleY;
if (((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Mask[j])
{
Red = 0.0;
Green = 0.0;
Blue = 0.0;
Val = ((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Data[j];
if (Val > 0)
{
Red = max(min(1.0,Val / ImageContrast),0.0);
}
else
{
Green = max(min(1.0,-Val / ImageContrast),0.0);
}
}
else
{
Red = 0.5;
Green = 0.5;
Blue = 0.5;
}
TFloatFormat Format = ffFixed;
AnsiString GreenString = FloatToStrF(Green,Format,6,4);
AnsiString RedString = FloatToStrF(Red,Format,6,4);
AnsiString BlueString = FloatToStrF(Blue,Format,6,4);
Temp = RedString + " " + GreenString + " " + BlueString
+ " setrgbcolor";
File->Add(Temp);
Temp = AnsiString(x) + " " + AnsiString(y) + " fillbox";
File->Add(Temp);
}
x = ZoomImageScaleX * Cluster->Columns + 10;
y = (i - Cluster->MinCoor) * ZoomImageScaleY;
File->Add("0.0 setgray");
Temp = AnsiString(x) + " " + AnsiString(y) + " moveto";
File->Add(Temp);
Temp = "(" + Name + ") show";
File->Add(Temp);
}
//Temp = "%%BoundingBox: 0 0 " + AnsiString(Cluster->Columns * ZoomImageScaleX + 1000) + AnsiString(" ")
// + AnsiString(ZoomImageScaleY * (Cluster->MaxCoor - Cluster->MinCoor + 1));
//File->Insert(3,Temp);
File->SaveToFile(SavePSDialog->FileName);
delete File;
}
}
void __fastcall TTreeViewMainForm::SavePSAll(AnsiString PSFileName)
{
int ScaleX, ScaleY;
TGeneTreeNode *Node;
int MinC, MaxC;
if (SavePSAllForm->UseSelectedCheckBox->Checked == true)
{
Node = Cluster->BestNode;
MinC = Cluster->MinCoor;
MaxC = Cluster->MaxCoor;
}
else
{
Node = Cluster->TopNode;
MinC = 0;
MaxC = Cluster->Rows-1;
}
try
{
ScaleX = SavePSAllForm->XBlockSizeEdit->Text.ToInt();
ScaleY = SavePSAllForm->YBlockSizeEdit->Text.ToInt();
}
catch (EConvertError &E)
{
ScaleX = 8;
ScaleY = 8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -