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

📄 mainform.cpp

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