📄 mainform.cpp
字号:
{
if (Application->MessageBox ("Can't add unnamed File!\nSave it ?",
"Info", MB_YESNO | MB_ICONINFORMATION) == IDNO) return;
SaveDialog1->Title = "Save File as...";
SaveDialog1->Filter = "C Files (*.c)|*.c|Header (*.h)|*.h|All Files (*.*)|*.*";
SaveDialog1->DefaultExt = "c";
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;
EdList->Delete (ActTabSheet->PageIndex);
EdList->Insert (ActTabSheet->PageIndex, SaveDialog1->FileName);
temp = SaveDialog1->FileName;
if (temp.Pos (" *"))
{
temp.Delete (temp.Pos (" *"), 2);
}
ActSynEdit->Lines->SaveToFile (temp);
ActTabSheet->Caption = ExtractFileName (temp);
}
else temp = EdList->Strings[ActTabSheet->PageIndex];
fName = ExtractFileName (temp);
RelName = ExtractRelativePath (ProjectPath, temp);
if (ExtractFileExt (temp) == ".c")
{
if (CheckIfInList (CList, &temp))
{
Application->MessageBox ("File already in Project", "Info",
MB_OK | MB_ICONINFORMATION);
return;
}
TreeView1->Items->AddChild (CNode, fName);
CList->Add (RelName);
}
else if (ExtractFileExt (temp) == ".h")
{
if (CheckIfInList (HList, &temp))
{
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);
}
else
{
Application->MessageBox ("Can only ad *.c or *.h\nFiles to Project", "Info",
MB_OK | MB_ICONINFORMATION);
return;
}
TreeView1->FullExpand ();
if (!TreeView1->Items->Item[0]->Text.Pos (" *"))
{
TreeView1->Items->Item[0]->Text += " *";
}
ActSynEdit->SetFocus ();
EditChanged = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LoadFileToEdit (AnsiString filename)
{
TTabSheet *NewTabSheet;
NewTabSheet = new TTabSheet (this);
NewTabSheet->PageControl = PageControl1;
NewTabSheet->Name = "Tab" + AnsiString(int(SynNum));
ActSynEdit = new TSynEdit (NewTabSheet);
ActSynEdit->Options << eoHideShowScrollbars;
ActSynEdit->Options >> eoScrollPastEol;
ActSynEdit->Color = clWhite;
ActSynEdit->Font->Color = clBlack;
ActSynEdit->Parent = NewTabSheet;
ActSynEdit->Align = alClient;
if (ExtractFileExt (filename) == ".c" || ExtractFileExt (filename) == ".h")
{
ActSynEdit->Highlighter = SynAVRCSyn1;
}
ActSynEdit->Color = SynAVRCSyn1->IdentifierAttri->Background;
ActSynEdit->Font->Color = SynAVRCSyn1->IdentifierAttri->Foreground;
ActSynEdit->Font->Style = SynAVRCSyn1->IdentifierAttri->Style;
ActSynEdit->OnChange = SynEditChange;
ActSynEdit->OnStatusChange = SynEditStatChange;
if (EnvOptions->LineNumbers)
{
ActSynEdit->Gutter->Visible = true;
ActSynEdit->Gutter->ShowLineNumbers = true;
}
else
{
ActSynEdit->Gutter->Visible = false;
ActSynEdit->Gutter->ShowLineNumbers = false;
}
ActSynEdit->Gutter->LeftOffset = GUTTER_OFFSET;
ActSynEdit->Name = "Syn" + AnsiString(int(SynNum++));
ActSynEdit->Lines->LoadFromFile (filename);
ActSynEdit->OnSpecialLineColors = SynEditSpecialLineColors;
NewTabSheet->Caption = ExtractFileName (filename);
ActSynEdit->WantTabs = true;
ActSynEdit->OnKeyUp = SynEditKeyUp;
ActSynEdit->SelectedColor->Foreground = SpLines.MLineFG;
ActSynEdit->SelectedColor->Background = SpLines.MLineBG;
ParamProposal->Editor = ActSynEdit;
EdList->Add (filename);
PageControl1->ActivePage = NewTabSheet;
ActSynEdit->SetFocus ();
EditChanged = false;
DocumentOpen ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SynEditStatChange(TObject *Sender, TSynStatusChanges Changes)
{
AnsiString temp;
int x, y;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
x = ActSynEdit->CaretX;
y = ActSynEdit->CaretY;
temp = "Ln " + AnsiString ((int)y) + " : " + "Col " + AnsiString ((int)x);
StatusBar1->Panels->Items[2]->Text = temp;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Dependencies1Click(TObject *Sender)
{
if (ActTreeNode == NULL) return;
if (ExtractFileExt (ActTreeNode->Text) != ".h") return;
Form2->Caption = "Dependencies of " + ActTreeNode->Text;
Form2->ShowWindow ((TStringList *)HList->Objects[ActTreeNode->Index], CList);
if (Form2->ModalResult == mrOk)
{
if (!TreeView1->Items->Item[0]->Text.Pos (" *")) TreeView1->Items->Item[0]->Text += " *";
TreeView1->Invalidate ();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Environment1Click(TObject *Sender)
{
EnvOptions->AssignSettings (SynAVRCSyn1, TreeView1, Memo1, &SpLines);
EnvOptions->ShowModal ();
if (PageControl1->PageCount != 0)
{
ActSynEdit->SelectedColor->Foreground = SpLines.MLineFG;
ActSynEdit->SelectedColor->Background = SpLines.MLineBG;
if (EnvOptions->LineNumbers)
{
ActSynEdit->Gutter->Visible = true;
ActSynEdit->Gutter->ShowLineNumbers = true;
}
else
{
ActSynEdit->Gutter->Visible = false;
ActSynEdit->Gutter->ShowLineNumbers = false;
}
ActSynEdit->Color = SynAVRCSyn1->IdentifierAttri->Background;
ActSynEdit->Font->Color = SynAVRCSyn1->IdentifierAttri->Foreground;
ActSynEdit->Font->Style = SynAVRCSyn1->IdentifierAttri->Style;
ActSynEdit->InvalidateLine (ErrorLine);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Save3Click(TObject *Sender)
{
EnvIni->WriteString ("WinAVRIDE", "Version", PROG_VER);
EnvOptions->AssignSettings (SynAVRCSyn1, TreeView1, Memo1, &SpLines);
EnvOptions->SaveSettings (EnvIni);
DirDlg->SaveSettings (EnvIni);
PgmDlg->SaveSettings (EnvIni);
PrgOpt->SaveSettings (EnvIni);
ToolDlg->SaveSettings (EnvIni);
//OptDlg->SaveSettings (EnvIni);
EnvIni->WriteInteger ("Environment", "TreeWidth", TreeView1->Width);
EnvIni->WriteInteger ("Environment", "MemoHeight", Memo1->Height);
EnvIni->WriteInteger ("Environment", "MemoTop", Memo1->Top);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Settings2Click(TObject *Sender)
{
OptDlg->ShowWindow ();
if (OptDlg->ModalResult == mrOk)
{
if (!TreeView1->Items->Item[0]->Text.Pos (" *")) TreeView1->Items->Item[0]->Text += " *";
TreeView1->Invalidate ();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Compile1Click(TObject *Sender)
{
AnsiString temp, t;
int r;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = EdList->Strings[ActTabSheet->PageIndex];
if (temp == "New File" || temp == "New File *")
{
r = Application->MessageBox ("Can't Compile unsaved Files\nSave it?", "Info",
MB_YESNO | MB_ICONINFORMATION);
if (r == IDNO) return;
SaveasClick (Sender);
temp = EdList->Strings[ActTabSheet->PageIndex];
}
else if (ActTabSheet->Caption.Pos (" *"))
{
r = Application->MessageBox ("Can't Compile unsaved Files\nSave it?", "Info",
MB_YESNO | MB_ICONINFORMATION);
if (r == IDNO) return;
SaveClick (Sender);
}
if (ExtractFileExt (temp) != ".c")
{
Application->MessageBox ("Can only Compile Source Files", "Error",
MB_OK | MB_ICONINFORMATION);
return;
}
CompDlg->MemoOut = Memo1;
CompDlg->DoCompile (temp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Make1Click(TObject *Sender)
{
int r;
r = CheckForUnsavedFiles (false);
if (r == IDNO)
{
Application->MessageBox ("Can't compile unsaved Files", "Info",
MB_OK | MB_ICONEXCLAMATION);
return;
}
else if (r == IDCANCEL) return;
CompDlg->MemoOut = Memo1;
CompDlg->DoMake (CList, HList, ProjectPath, DO_MAKE);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Makeall1Click(TObject *Sender)
{
int r;
r = CheckForUnsavedFiles (false);
if (r == IDNO)
{
Application->MessageBox ("Can't compile unsaved Files", "Info",
MB_OK | MB_ICONEXCLAMATION);
return;
}
else if (r == IDCANCEL) return;
CompDlg->MemoOut = Memo1;
CompDlg->DoMake (CList, HList, ProjectPath, DO_MAKE_ALL);
}
//---------------------------------------------------------------------------
int __fastcall TForm1::CheckForUnsavedFiles (bool proj)
{
int i, d, r, cnt;
AnsiString temp, msg;
TTabSheet *ActTabSheet;
SetCurrentDir (ProjectPath);
if (proj) // Check for unsaved Project File
{
if (TreeView1->Items->Item[0]->Text.Pos (" *"))
{
r = Application->MessageBox ("Current Project has changed\nSave it?", "Info",
MB_YESNOCANCEL | MB_ICONINFORMATION);
if (r == IDCANCEL) return r;
if (r == IDYES) Save1Click (this);
}
}
cnt = PageControl1->PageCount;
if (cnt == 0) return r;
r = 0;
for (i = 0;i < cnt;i++)
{
ActTabSheet = PageControl1->Pages[i];
if (ActTabSheet->Caption.Pos (" *"))
{
msg = "One or more File(s) not saved\nSave it ?";
Application->ProcessMessages ();
if (r != IDYES) r = Application->MessageBox (msg.c_str (), "Info", MB_YESNOCANCEL | MB_ICONINFORMATION);
if (r == IDYES)
{
DelayMS (50);
SavePage (ActTabSheet);
}
else break;
}
}
return r;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1DblClick(TObject *Sender)
{
TPoint pos;
int line, i, step = 0, p = 0, len, c = 0;
char tbuf[512];
AnsiString temp, filename;
pos = Memo1->CaretPos;
temp = Memo1->Lines->Strings[pos.y];
len = temp.Length ();
// First we extract the Filename
for (i = 0;i < len;i++)
{
if (temp[c + 1] == ':') step++;
if (step == 2) break;
if (temp[c + 1] == '/') tbuf[p++] = '\\';
else tbuf[p++] = temp[c + 1];
c++;
}
if (step != 2 || len == 0) return;
tbuf[p] = 0;
filename = tbuf;
for (i = 0, p = 0;i < len;i++)
{
c++;
if (temp[c + 1] >= '0' && temp[c + 1] <= '9') tbuf[p++] = temp[c + 1];
else break;
}
tbuf[p] = 0;
temp = tbuf;
if (i == 0 || temp.Length () == 0) return;
line = temp.ToInt ();
for (i = 0, step = 0;i < EdList->Count;i++)
{
if (EdList->Strings[i] == filename)
{
PageControl1->ActivePageIndex = i;
step = 1;
break;
}
}
if (!FileExists (filename)) return;
if (!step) LoadFileToEdit (filename);
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->CaretX = 1;
ActSynEdit->CaretY = line;
ErrorLine = line;
ActSynEdit->Invalidate ();
ErrorEdit = (TObject *)ActSynEdit;
ActSynEdit->SetFocus ();
ActSynEdit->SelectedColor->Foreground = SpLines.MLineFG;
ActSynEdit->SelectedColor->Background = SpLines.MLineBG;
ActSynEdit->Color = SynAVRCSyn1->IdentifierAttri->Background;
ActSynEdit->Font->Color = SynAVRCSyn1->IdentifierAttri->Foreground;
ActSynEdit->Font->Style = SynAVRCSyn1->IdentifierAttri->Style;
if (EnvOptions->LineNumbers)
{
ActSynEdit->Gutter->Visible = true;
ActSynEdit->Gutter->ShowLineNumbers = true;
}
else
{
ActSynEdit->Gutter->Visible = false;
ActSynEdit->Gutter->ShowLineNumbers = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CloseAllTabs (void)
{
int cnt, i;
cnt = PageControl1->PageCount;
for (i = 0;i < cnt;i++)
{
delete PageControl1->ActivePage;
}
EdList->Clear ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SynEditSpecialLineColors(TObject *Sender,
int Line, bool &Special, TColor &FG, TColor &BG)
{
if (Line == ErrorLine && Sender == ErrorEdit)
{
FG = SpLines.ELineFG;
BG = SpLines.ELineBG;
Special = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Directories1Click(TObject *Sender)
{
DirDlg->ShowWindow ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
AnsiString apppath;
int i, d, t;
TMenuItem *mitem;
EnvOptions->AssignSettings (SynAVRCSyn1, TreeView1, Memo1, &SpLines);
EnvOptions->LoadSettings (EnvIni);
PrtSetForm->LoadSettings (EnvIni);
DirDlg->LoadSettings (EnvIni);
PgmDlg->LoadSettings (EnvIni);
PrgOpt->LoadSettings (EnvIni);
ToolDlg->LoadSettings (EnvIni);
OptDlg->LoadSettings (EnvIni);
d = ToolDlg->Tools->Count;
for (i = 0;i < d;i++)
{
mitem = new TMenuItem (this);
mitem->Caption = ToolDlg->Tools->Strings[i];
mitem->OnClick = ToolsMenuClick;
mitem->ImageIndex = 32;
MainMenu1->Items->Items[4]->Add (mitem);
}
BuildFuncTable ();
AboutDlg->Version->Caption = PROG_VER;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StatusBar1Resize(TObject *Sender)
{
int width, i;
for (i = 1, width = 0; i < StatusBar1->Panels->Count; i++)
{
width += StatusBar1->Panels->Items[i]->Width;
}
StatusBar1->Panels->Items[0]->Width = StatusBar1->ClientWidth - width;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if (GetKeyState (VK_NUMLOCK) & 0x01) StatusBar1->Panels->Items[3]->Text = "NUM";
else StatusBar1->Panels->Items[3]->Text = " ";
if (GetKeyState (VK_CAPITAL) & 0x01) StatusBar1->Panels->Items[4]->Text = "CAPS";
else StatusBar1->Panels->Items[4]->Text = " ";
if (GetKeyState (VK_SCROLL) & 0x01) StatusBar1->Panels->Items[5]->Text = "SCRL";
else StatusBar1->Panels->Items[5]->Text = " ";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AppIdle (TObject* Sender, bool &Done)
{
if (GetKeyState (VK_NUMLOCK) & 0x01) StatusBar1->Panels->Items[3]->Text = "NUM";
else StatusBar1->Panels->Items[3]->Text = " ";
if (GetKeyState (VK_CAPITAL) & 0x01) StatusBar1->Panels->Items[4]->Text = "CAPS";
else StatusBar1->Panels->Items[4]->Text = " ";
if (GetKeyState (VK_SCROLL) & 0x01) StatusBar1->Panels->Items[5]->Text = "SCRL";
else StatusBar1->Panels->Items[5]->Text = " ";
if (clipbrd->HasFormat (CF_TEXT))
{
cliphastext = true;
if (EdList->Count)
{
Paste1->Enabled = true;
ToolButton11->Enabled = true;
}
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -