📄 mainform.cpp
字号:
/**************************************************************************
Project: WinAVRIDE Class: MainForm
Copyright (C) 2005 Philipp Schober
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
History
19.Feb 2005 - First Release (V1.0)
****************************************************************************/
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
#include "DepForm.h"
#include "OptionsDlg.h"
#include "CompilerDlg.h"
#include "DirDialog.h"
#include "Programmer.h"
#include "RunFile.h"
#include "Terminal.h"
#include "PrgOptions.h"
#include "ToolsDlg.h"
#include "About.h"
#include "ExpMFile.h"
#include "PrtPrev.h"
#include "PrtSetup.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SynEdit"
#pragma link "SynEditHighlighter"
#pragma link "SynCompletionProposal"
#pragma link "SynEditPrint"
#pragma resource "*.dfm"
TForm1 *Form1;
#define PROG_VER "1.1"
#define GUTTER_OFFSET 1
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SynAVRCSyn1 = new TSynAVRCSyn (this);
SynNum = 0;
EditChanged = false;
CList = new TStringList;
HList = new TStringList;
EdList = new TStringList;
NoDocumentOpen ();
ProjectPath = GetCurrentDir ();
ProjectPath = IncludeTrailingBackslash (ProjectPath);
ErrorLine = 0;
ErrorEdit = NULL;
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
delete CList;
delete HList;
delete FuncList;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewClick(TObject *Sender)
{
NewSheet ();
DocumentOpen ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewSheet (void)
{
TTabSheet *NewTabSheet;
NewTabSheet = new TTabSheet (this);
NewTabSheet->PageControl = PageControl1;
NewTabSheet->Caption = "New File";
NewTabSheet->Name = "Tab" + AnsiString(int(SynNum));
ActSynEdit = new TSynEdit (NewTabSheet);
ActSynEdit->Options << eoHideShowScrollbars;
ActSynEdit->Options >> eoScrollPastEol;
ActSynEdit->Parent = NewTabSheet;
ActSynEdit->Color = SynAVRCSyn1->IdentifierAttri->Background;
ActSynEdit->Font->Color = SynAVRCSyn1->IdentifierAttri->Foreground;
ActSynEdit->Font->Style = SynAVRCSyn1->IdentifierAttri->Style;
ActSynEdit->Align = alClient;
ActSynEdit->Highlighter = SynAVRCSyn1;
ActSynEdit->OnChange = SynEditChange;
if (EnvOptions->LineNumbers)
{
ActSynEdit->Gutter->Visible = true;
ActSynEdit->Gutter->ShowLineNumbers = true;
}
else
{
ActSynEdit->Gutter->Visible = false;
ActSynEdit->Gutter->ShowLineNumbers = false;
}
ActSynEdit->Gutter->AutoSize = true;
ActSynEdit->Gutter->LeftOffset = GUTTER_OFFSET;
ActSynEdit->Name = "Syn" + AnsiString(int(SynNum++));
ActSynEdit->OnSpecialLineColors = SynEditSpecialLineColors;
ActSynEdit->WantTabs = true;
ActSynEdit->OnKeyUp = SynEditKeyUp;
ActSynEdit->SelectedColor->Foreground = SpLines.MLineFG;
ActSynEdit->SelectedColor->Background = SpLines.MLineBG;
ParamProposal->Editor = ActSynEdit;
EdList->Add ("New File");
PageControl1->ActivePage = NewTabSheet;
ActSynEdit->SetFocus ();
EditChanged = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::QuitClick(TObject *Sender)
{
SendMessage (Handle, WM_CLOSE, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CloseClick(TObject *Sender)
{
int t;
TTabSheet *ActTabSheet;
AnsiString temp;
if (PageControl1->PageCount == 0) return;
ActTabSheet = PageControl1->ActivePage;
if (!ActTabSheet->Caption.Pos (" *"))
{
EdList->Delete (ActTabSheet->PageIndex);
delete ActTabSheet;
}
else
{
t = Application->MessageBoxA ("File not saved!\nSave it ?", "Info",
MB_YESNOCANCEL | MB_ICONINFORMATION);
if (t == IDCANCEL) return;
if (t == IDYES) SaveClick (Sender);
EdList->Delete (ActTabSheet->PageIndex);
delete ActTabSheet;
}
if (PageControl1->PageCount == 0) NoDocumentOpen ();
else
{
ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ParamProposal->Editor = ActSynEdit;
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;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenClick(TObject *Sender)
{
OpenDialog1->Title = "Load File";
OpenDialog1->Filter = "C Files,Header (*.c,*.h)|*.c;*.h|All Files (*.*)|*.*";
OpenDialog1->DefaultExt = "c";
OpenDialog1->FileName = "";
if (OpenDialog1->Execute ())
{
LoadFileToEdit (OpenDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PageControl1Change(TObject *Sender)
{
TTabSheet *ActTabSheet;
AnsiString temp;
int x, y;
EditChanged = false;
ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ParamProposal->Editor = ActSynEdit;
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;
}
switch (ActSynEdit->SelectionMode)
{
case smNormal: StatusBar1->Panels->Items[1]->Text = "Selection Mode : Normal";
break;
case smLine: StatusBar1->Panels->Items[1]->Text = "Selection Mode : Line";
break;
case smColumn: StatusBar1->Panels->Items[1]->Text = "Selection Mode : Column";
}
x = ActSynEdit->CaretX;
y = ActSynEdit->CaretY;
temp = "Ln " + AnsiString ((int)y) + " : " + "Col " + AnsiString ((int)x);
StatusBar1->Panels->Items[2]->Text = temp;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SynEditChange(TObject *Sender)
{
AnsiString temp;
TSynEdit *syntemp;
if (!EditChanged)
{
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Caption;
if (!temp.AnsiPos ("*"))
{
temp = temp + " *";
ActTabSheet->Caption = temp;
}
}
EditChanged = true;
if (Sender == ErrorEdit)
{
syntemp = (TSynEdit *)Sender;
if (ErrorLine != 0) syntemp->Invalidate ();
ErrorLine = 0;
ErrorEdit = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveasClick(TObject *Sender)
{
AnsiString temp;
if (PageControl1->PageCount == 0) 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;
}
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->Lines->SaveToFile (SaveDialog1->FileName);
EdList->Delete (ActTabSheet->PageIndex);
EdList->Insert (ActTabSheet->PageIndex, SaveDialog1->FileName);
ActTabSheet->Caption = ExtractFileName (SaveDialog1->FileName);
if (ExtractFileExt (SaveDialog1->FileName) == ".c" || ExtractFileExt (SaveDialog1->FileName) == ".h")
{
ActSynEdit->Highlighter = SynAVRCSyn1;
}
else ActSynEdit->Highlighter = NULL;
ActSynEdit->SetFocus ();
}
EditChanged = false;
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::SavePage (TTabSheet *TempTabSheet)
{
AnsiString temp;
TSynEdit *TempSynEdit;
temp = TempTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
TempSynEdit = (TSynEdit *)TempTabSheet->FindComponent(temp);
if (TempTabSheet->Caption == "New File *" || TempTabSheet->Caption == "New File")
{
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 false;
}
}
else return false;
EdList->Delete (TempTabSheet->PageIndex);
EdList->Insert (TempTabSheet->PageIndex, SaveDialog1->FileName);
temp = SaveDialog1->FileName;
}
else temp = EdList->Strings[TempTabSheet->PageIndex];
if (temp.Pos (" *"))
{
temp.Delete (temp.Pos (" *"), 2);
}
TempSynEdit->Lines->SaveToFile (temp);
if (ExtractFileExt (temp) == ".c" || ExtractFileExt (temp) == ".h")
{
TempSynEdit->Highlighter = SynAVRCSyn1;
}
else TempSynEdit->Highlighter = NULL;
TempTabSheet->Caption = ExtractFileName (temp);
EditChanged = false;
return true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveClick(TObject *Sender)
{
AnsiString temp;
if (PageControl1->PageCount == 0) return;
if (!SavePage (PageControl1->ActivePage)) return;
ActSynEdit->SetFocus ();
EditChanged = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Undo1Click(TObject *Sender)
{
AnsiString temp;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->Undo ();
ActSynEdit->SetFocus ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Redo1Click(TObject *Sender)
{
AnsiString temp;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->Redo ();
ActSynEdit->SetFocus ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Cut1Click(TObject *Sender)
{
AnsiString temp;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->CutToClipboard ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Copy1Click(TObject *Sender)
{
AnsiString temp;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->CopyToClipboard ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Paste1Click(TObject *Sender)
{
AnsiString temp;
TTabSheet *ActTabSheet = PageControl1->ActivePage;
temp = ActTabSheet->Name;
temp.Delete (1, 3);
temp = "Syn" + temp;
ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
ActSynEdit->PasteFromClipboard ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Search1Click(TObject *Sender)
{
if (PageControl1->PageCount == 0) return;
if (!FindDialog1->Execute ()) return;
SearchReplace1->Enabled = false;
SearchAgain1->Enabled = false;
ToolButton14->Enabled = false;
ToolButton15->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SearchReplace1Click(TObject *Sender)
{
if (PageControl1->PageCount == 0) return;
if (!ReplaceDialog1->Execute ()) return;
Search1->Enabled = false;
SearchAgain1->Enabled = false;
ToolButton13->Enabled = false;
ToolButton14->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FindDialog1Close(TObject *Sender)
{
SearchReplace1->Enabled = true;
SearchAgain1->Enabled = true;
ToolButton14->Enabled = true;
ToolButton15->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReplaceDialog1Close(TObject *Sender)
{
Search1->Enabled = true;
SearchAgain1->Enabled = true;
ToolButton13->Enabled = true;
ToolButton14->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NoDocumentOpen(void)
{
Search1->Enabled = false;
SearchAgain1->Enabled = false;
SearchReplace1->Enabled = false;
Undo1->Enabled = false;
Redo1->Enabled = false;
Cut1->Enabled = false;
Copy1->Enabled = false;
Paste1->Enabled = false;
Save->Enabled = false;
Saveas->Enabled = false;
Close->Enabled = false;
Compile1->Enabled = false;
ToolButton4->Enabled = false;
ToolButton6->Enabled = false;
ToolButton7->Enabled = false;
ToolButton9->Enabled = false;
ToolButton10->Enabled = false;
ToolButton11->Enabled = false;
ToolButton13->Enabled = false;
ToolButton14->Enabled = false;
ToolButton15->Enabled = false;
ToolButton17->Enabled = false;
Print1->Enabled = false;
PrintPreview1->Enabled = false;
EdList->Clear ();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -