📄 mainform.cpp
字号:
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DocumentOpen(void)
{
Search1->Enabled = true;
SearchReplace1->Enabled = true;
Undo1->Enabled = true;
Redo1->Enabled = true;
Cut1->Enabled = true;
Copy1->Enabled = true;
if (cliphastext)
{
Paste1->Enabled = true;
ToolButton11->Enabled = true;
}
Save->Enabled = true;
Saveas->Enabled = true;
Close->Enabled = true;
Compile1->Enabled = true;
ToolButton4->Enabled = true;
ToolButton6->Enabled = true;
ToolButton7->Enabled = true;
ToolButton9->Enabled = true;
ToolButton10->Enabled = true;
ToolButton13->Enabled = true;
ToolButton15->Enabled = true;
ToolButton17->Enabled = true;
Print1->Enabled = true;
PrintPreview1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FindDialog1Find(TObject *Sender)
{
AnsiString temp;
SearchText = FindDialog1->FindTextA;
if (!FindDialog1->Options.Contains(frDown)) Options << ssoBackwards;
if (FindDialog1->Options.Contains(frMatchCase)) Options << ssoMatchCase;
if (FindDialog1->Options.Contains(frWholeWord)) Options << ssoWholeWord;
SearchAgain1Click (Sender);
SearchAgain1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SearchAgain1Click(TObject *Sender)
{
AnsiString temp;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
if (!ActSynEdit->SearchReplace(SearchText, ReplaceText, Options))
{
Application->MessageBox ("Not found", "Info", MB_OK | MB_ICONINFORMATION);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReplaceDialog1Find(TObject *Sender)
{
SearchText = ReplaceDialog1->FindText;
SearchAgain1Click (Sender);
SearchAgain1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReplaceDialog1Replace(TObject *Sender)
{
AnsiString temp;
SearchText = ReplaceDialog1->FindText;
ReplaceText = ReplaceDialog1->ReplaceText;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->SelStart = ActSynEdit->SelStart - 1;
ActSynEdit->SelEnd = ActSynEdit->SelStart;
if (!ReplaceDialog1->Options.Contains(frDown)) Options << ssoBackwards;
if (ReplaceDialog1->Options.Contains(frMatchCase)) Options << ssoMatchCase;
if (ReplaceDialog1->Options.Contains(frWholeWord)) Options << ssoWholeWord;
if (ReplaceDialog1->Options.Contains(frReplace)) Options << ssoReplace;
if (ReplaceDialog1->Options.Contains(frReplaceAll)) Options << ssoReplaceAll;
SearchAgain1Click (Sender);
Options >> ssoReplace >> ssoReplaceAll;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::New1Click(TObject *Sender)
{
TTreeNode *Node, *RootNode;
int i;
if (CheckForUnsavedFiles (true) == IDCANCEL) return;
CList->Clear ();
for (i = 0;i < HList->Count;i++)
{
if (HList->Objects[i] != NULL) delete HList->Objects[i];
}
HList->Clear ();
TreeView1->Items->Clear ();
TreeView1->Items->Add (NULL, "New Project");
Node = TreeView1->Items->Item[0];
TreeView1->Items->AddChild (Node, "C Files");
TreeView1->Items->AddChild (Node, "Header");
CNode = TreeView1->Items->Item[1];
HNode = TreeView1->Items->Item[2];
TreeView1->FullExpand ();
if (OptDlg->hasChanged)
if (Application->MessageBox ("Keep actual Compiler Settings ?",
"Info", MB_YESNO | MB_ICONINFORMATION) == IDNO)
{
ProjectPath = IncludeTrailingBackslash (GetCurrentDir ());
PgmDlg->LoadSettings (EnvIni);
OptDlg->LoadSettings (EnvIni);
}
OptDlg->OutputName = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString apppath;
bool t;
Application->OnIdle = AppIdle;
TreeView1->FullExpand ();
clipbrd = Clipboard ();
apppath = IncludeTrailingBackslash (ExtractFilePath (Application->ExeName));
apppath += "winavr.ini";
EnvIni = new TIniFile (apppath);
// Restore Window Positions
if (EnvIni->ReadBool ("Environment", "FormMax", true))
{
WindowState = wsMaximized;
}
else
{
Top = EnvIni->ReadInteger ("Environment", "FormTop", 10);
Left = EnvIni->ReadInteger ("Environment", "FormLeft", 10);
Height = EnvIni->ReadInteger ("Environment", "FormHeight", 500);
Width = EnvIni->ReadInteger ("Environment", "FormWidth", 700);
}
// Restore Component Positions
TreeView1->Width = EnvIni->ReadInteger ("Environment", "TreeWidth", 185);
PageControl1->Width = EnvIni->ReadInteger ("Environment", "TabWidth", 833);
Panel1->Height = EnvIni->ReadInteger ("Environment", "PanelHeight", 141);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AddFile1Click(TObject *Sender)
{
AnsiString fName, RelName, fullname;
TTreeNode *NewNode;
TStringList *depList;
OpenDialog1->Title = "Add File to Project";
OpenDialog1->Filter = "C Files,Header (*.c,*.h)|*.c;*.h";
OpenDialog1->DefaultExt = "c";
OpenDialog1->FileName = "";
if (OpenDialog1->Execute ())
{
fName = ExtractFileName (OpenDialog1->FileName);
RelName = ExtractRelativePath (ProjectPath, OpenDialog1->FileName);
fullname = OpenDialog1->FileName;
if (ExtractFileExt (fullname) == ".c")
{
if (CheckIfInList (CList, &fullname))
{
Application->MessageBox ("File already in Project", "Info", MB_OK | MB_ICONINFORMATION);
return;
}
TreeView1->Items->AddChild (CNode, fName);
CList->Add (RelName);
}
else
{
if (CheckIfInList (HList, &fullname))
{
Application->MessageBox ("File already in Project", "Info", MB_OK | MB_ICONINFORMATION);
return;
}
TreeView1->Items->AddChild (HNode, fName);
depList = new TStringList;
HList->AddObject (RelName, (TObject *)depList);
}
TreeView1->FullExpand ();
if (!TreeView1->Items->Item[0]->Text.Pos (" *"))
{
TreeView1->Items->Item[0]->Text += " *";
}
}
TreeView1->Invalidate ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1ContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled)
{
ActTreeNode = TreeView1->GetNodeAt (MousePos.x, MousePos.y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RemoveFile1Click(TObject *Sender)
{
if (ActTreeNode == NULL) return; // No Node selected
if (ActTreeNode->Parent == NULL) return; // Root Node
if (ActTreeNode == CNode || ActTreeNode == HNode) return;
if (ActTreeNode->Text.Pos (".c"))
{
CList->Delete (ActTreeNode->Index);
}
else
{
delete HList->Objects[ActTreeNode->Index];
HList->Delete (ActTreeNode->Index);
}
ActTreeNode->Delete ();
if (!TreeView1->Items->Item[0]->Text.Pos (" *"))
{
TreeView1->Items->Item[0]->Text += " *";
}
TreeView1->Invalidate ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Save1Click(TObject *Sender)
{
AnsiString temp;
TTreeNode *RootNode;
RootNode = TreeView1->Items->Item[0];
if (RootNode->Text == "New Project" || RootNode->Text == "New Project *")
{
SaveDialog1->Title = "Save Project as...";
SaveDialog1->Filter = "Project Files (*.prj)|*.prj";
SaveDialog1->DefaultExt = "prj";
SaveDialog1->FileName = "";
if (SaveDialog1->Execute ())
{
if (FileExists (SaveDialog1->FileName))
{
if (Application->MessageBox ("File already exists.\nOverwrite it ?",
"Info", MB_OKCANCEL | MB_ICONINFORMATION) != IDOK) return;
}
}
else return;
temp = SaveDialog1->FileName;
}
else
{
SetCurrentDir (ProjectPath);
temp = ExpandFileName (RootNode->Text);
}
SaveProjectFile (&temp);
RootNode->Text = ExtractFileName (temp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveProjectFile (AnsiString *fName)
{
AnsiString temp, t;
TStringList *depList;
int i, d;
TIniFile *prj;
if (fName->Pos (" *")) fName->SetLength (fName->Length () - 2);
if (FileExists (*fName)) DeleteFile (*fName);
OptDlg->SetOutputName (*fName);
prj = new TIniFile (*fName);
if (prj == NULL) Application->MessageBox ("Can't create Project File", "Error",
MB_OK | MB_ICONINFORMATION);
RedoRelPaths (&ExtractFileDir (*fName));
prj->WriteString ("WinAVRIDE", "Version", PROG_VER);
prj->WriteInteger ("C Files", "Count", CList->Count);
for (i = 0;i < CList->Count;i++)
{
temp = "File" + AnsiString ((int)i);
prj->WriteString ("C Files", temp, CList->Strings[i].c_str ());
}
prj->WriteInteger ("Header", "Count", HList->Count);
for (i = 0;i < HList->Count;i++)
{
temp = "File" + AnsiString ((int)i);
prj->WriteString ("Header", temp, HList->Strings[i].c_str ());
}
for (i = 0;i < HList->Count;i++)
{
depList = (TStringList *)HList->Objects[i];
t = "File" + AnsiString ((int)i);
prj->WriteInteger (t, "Count", depList->Count);
for (d = 0;d < depList->Count;d++)
{
temp = "File" + AnsiString ((int)d);
prj->WriteString (t, temp, depList->Strings[d].c_str ());
}
}
OptDlg->SaveSettings (prj);
TermForm->SaveSettings (prj);
PgmDlg->SaveSettings (prj);
delete prj;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RedoRelPaths (AnsiString *NewBasePath)
{
int i, d;
AnsiString temp;
TStringList *dlist;
*NewBasePath = IncludeTrailingBackslash (*NewBasePath);
SetCurrentDir (ProjectPath);
for (i = 0;i < CList->Count;i++)
{
temp = ExpandFileName (CList->Strings[i]);
CList->Strings[i] = ExtractRelativePath (*NewBasePath, temp);
}
for (i = 0;i < HList->Count;i++)
{
temp = ExpandFileName (HList->Strings[i]);
HList->Strings[i] = ExtractRelativePath (*NewBasePath, temp);
dlist = (TStringList *)HList->Objects[i];
for (d = 0;d < dlist->Count;d++)
{
temp = ExpandFileName (dlist->Strings[d]);
dlist->Strings[d] = ExtractRelativePath (*NewBasePath, temp);
}
}
ProjectPath = IncludeTrailingBackslash (*NewBasePath);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Open1Click(TObject *Sender)
{
TIniFile *prj;
TStringList *depList;
AnsiString temp, t, te;
int cnt, i, d, c;
if (CheckForUnsavedFiles (true) == IDCANCEL) return;
OpenDialog1->Title = "Load Project...";
OpenDialog1->Filter = "Project Files (*.prj)|*.prj";
OpenDialog1->DefaultExt = "prj";
OpenDialog1->FileName = "";
if (OpenDialog1->Execute ())
{
CloseAllTabs ();
prj = new TIniFile (OpenDialog1->FileName);
if (prj == NULL) return;
TreeView1->Items->Item[0]->Text = "New";
OptDlg->hasChanged = false; // Suppress 'Keep Compiler Settings' Dialog
New1Click (Sender);
ProjectPath = ExtractFileDir (OpenDialog1->FileName);
ProjectPath = IncludeTrailingBackslash (ProjectPath);
cnt = prj->ReadInteger ("C Files", "Count", 0);
for (i = 0;i < cnt;i++)
{
temp = "File" + AnsiString ((int)i);
t = prj->ReadString ("C Files", temp, NULL);
TreeView1->Items->AddChild (CNode, ExtractFileName (t));
CList->Add (t);
}
cnt = prj->ReadInteger ("Header", "Count", 0);
for (i = 0;i < cnt;i++)
{
temp = "File" + AnsiString ((int)i);
t = prj->ReadString ("Header", temp, NULL);
TreeView1->Items->AddChild (HNode, ExtractFileName (t));
depList = new TStringList;
HList->AddObject (t, (TObject *)depList);
c = prj->ReadInteger (temp, "Count", 0);
for (d = 0;d < c;d++)
{
t = "File" + AnsiString ((int)d);
te = prj->ReadString (temp, t, NULL);
depList->Add (te);
}
}
OptDlg->LoadSettings (prj);
OptDlg->SetOutputName (OpenDialog1->FileName);
TermForm->LoadSettings (prj);
PgmDlg->LoadSettings (prj);
delete prj;
TreeView1->Items->Item[0]->Text = ExtractFileName (OpenDialog1->FileName);
TreeView1->FullExpand ();
OptDlg->hasChanged = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Saveas1Click(TObject *Sender)
{
AnsiString temp;
TTreeNode *RootNode;
RootNode = TreeView1->Items->Item[0];
SaveDialog1->Title = "Save Project as...";
SaveDialog1->Filter = "Project Files (*.prj)|*.prj";
SaveDialog1->DefaultExt = "prj";
SaveDialog1->FileName = "";
if (SaveDialog1->Execute ())
{
if (FileExists (SaveDialog1->FileName))
{
if (Application->MessageBox ("File already exists.\nOverwrite it ?",
"Info", MB_OKCANCEL | MB_ICONINFORMATION) != IDOK) return;
}
temp = SaveDialog1->FileName;
SaveProjectFile (&temp);
RootNode->Text = ExtractFileName (temp);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1DblClick(TObject *Sender)
{
int index;
AnsiString temp;
if (TreeView1->Selected == NULL) return;
if (ExtractFileExt (TreeView1->Selected->Text) == ".c" ||
ExtractFileExt (TreeView1->Selected->Text) == ".h")
{
index = TreeView1->Selected->Index;
SetCurrentDir (ProjectPath);
if (ExtractFileExt (TreeView1->Selected->Text) == ".c")
temp = ExpandFileName (CList->Strings[index]);
if (ExtractFileExt (TreeView1->Selected->Text) == ".h")
temp = ExpandFileName (HList->Strings[index]);
for (index = 0;index < EdList->Count;index++)
{
if (EdList->Strings[index] == temp)
{
PageControl1->ActivePageIndex = index;
return;
}
}
LoadFileToEdit (temp);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1ContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled)
{
Handled = true;
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::CheckIfInList (TStringList *lst, AnsiString *file)
{
AnsiString temp;
int i;
SetCurrentDir (ProjectPath);
for (i = 0;i < lst->Count;i++)
{
temp = ExpandFileName (lst->Strings[i]);
if (temp == *file) return true;
}
return false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AddtoProject1Click(TObject *Sender)
{
AnsiString temp, fName, RelName;
TStringList *depList;
int c;
if (PageControl1->PageCount == 0) return;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
if (ActTabSheet->Caption == "New File *" || ActTabSheet->Caption == "New File")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -