⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cpp

📁 用于开发Atmel的AVR系列单片机的GCC集成开发环境
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/**************************************************************************
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 + -