#include "ide.h" #pragma hdrstop #define LLOG(x) // LOG(x) int CharFilterVar(int c) { return IsAlNum(c) || c == '_' ? c : 0; } void DlCharset(DropList& d) { d.Add(CHARSET_UTF8, "UTF8"); for(int i = 1; i < CharsetCount(); i++) d.Add(i, CharsetName(i)); } class FontSelectManager { DropList *face; DropList *height; Option *bold; Option *italic; Option *naa; void FaceSelect(); void Select(); public: Callback WhenAction; typedef FontSelectManager CLASSNAME; void Set(DropList& _face, DropList& _height, Option& _bold, Option& _italic, Option& _naa); void Set(Font f); Font Get(); }; void FontSelectManager::FaceSelect() { int f = face->GetData(); int h = -1; int lh = height->GetData(); int lhh = -1; height->Clear(); #ifdef PLATFORM_WIN32 int i; for(i = 1; i < 32; i++) { FontInfo fi = Font(f, i).Info(); int hh = fi.GetHeight(); if(hh != h) { height->Add(hh); if(hh >= lh && lhh < 0) lhh = hh; h = hh; } } if(lhh >= 0) height->SetData(lhh); else if(height->GetCount()) height->SetIndex(0); #else for(int i = 6; i < 32; i++) height->Add(i); #endif Select(); } void FontSelectManager::Select() { WhenAction(); } void FontSelectManager::Set(DropList& _face, DropList& _height, Option& _bold, Option& _italic, Option& _naa) { face = &_face; face->WhenAction = THISBACK(FaceSelect); height = &_height; height->WhenAction = THISBACK(Select); bold = &_bold; bold->WhenAction = THISBACK(Select); italic = &_italic; italic->WhenAction = THISBACK(Select); naa = &_naa; naa->WhenAction = THISBACK(Select); face->Clear(); for(int i = 0; i < Font::GetFaceCount(); i++) if(Font::GetFaceInfo(i) & Font::FIXEDPITCH) { face->Add(i, Font::GetFaceName(i)); LLOG("Face: " << Font::GetFaceName(i)); } face->SetIndex(0); FaceSelect(); } void FontSelectManager::Set(Font f) { face->SetData(f.GetFace()); FaceSelect(); height->SetData(f.GetHeight()); for(int i = 0; i < height->GetCount(); i++) { int q = height->GetKey(i); if(f.GetHeight() <= q) { height->SetData(q); break; } } *bold = f.IsBold(); *italic = f.IsItalic(); *naa = f.IsNonAntiAliased(); } Font FontSelectManager::Get() { Font f(face->GetData(), height->GetData()); if(*bold) f.Bold(); if(*italic) f.Italic(); if(*naa) f.NonAntiAliased(); return f; } void Ide::UpdateFormat(CodeEditor& editor, IdeQuickTabs& tabs) { if(!IsActiveFile() || ActiveFile().tabsize <= 0) editor.TabSize(editortabsize); if(filetabs) editor.SetFrame(tabs); else editor.SetFrame(FieldFrame()); editor.IndentSpaces(indent_spaces); editor.IndentAmount(indent_amount); editor.ShowTabs(show_tabs); editor.NoParenthesisIndent(no_parenthesis_indent); editor.HiliteScope(hilite_scope); editor.HiliteBracket(hilite_bracket); editor.HiliteIfDef(hilite_ifdef); editor.HiliteIfEndif(hilite_if_endif); editor.LineNumbers(line_numbers); editor.AutoEnclose(auto_enclose); editor.BorderColumn(bordercolumn, bordercolor); editor.Refresh(); } void Ide::UpdateFormat() { SetupEditor(); UpdateFormat(editor, tabs); UpdateFormat(editor2, tabs2); console.SetFont(consolefont); console.WrapText(wrap_console_text); statusbar.Show(show_status_bar); SetupBars(); } struct FormatDlg : TabDlg { ColorPusher hl_color[CodeEditor::HL_COUNT]; }; void HlPusherFactory(One& ctrl) { ctrl.Create().NotNull().Track(); } void Ide::ReadHlStyles(ArrayCtrl& hlstyle) { hlstyle.Clear(); for(int i = 0; i < CodeEditor::HL_COUNT; i++) { const CodeEditor::HlStyle& s = editor.GetHlStyle(i); hlstyle.Add(editor.GetHlName(i), s.color, s.bold, s.italic, s.underline); } } void Ide::SetupFormat() { FormatDlg dlg; dlg.Title("Format setup"); WithSetupFontLayout fnt; WithSetupHlLayout hlt; WithSetupEditorLayout edt; WithSetupIdeLayout ide; dlg.Add(fnt, "Fonts"); dlg.Add(hlt, "Syntax highlighting"); dlg.Add(edt, "Editor"); dlg.Add(ide, "IDE"); dlg.WhenClose = dlg.Acceptor(IDYES); FontSelectManager ed, vf, con, f1, f2; ed.Set(fnt.face, fnt.height, fnt.bold, fnt.italic, fnt.naa); vf.Set(fnt.vface, fnt.vheight, fnt.vbold, fnt.vitalic, fnt.vnaa); con.Set(fnt.cface, fnt.cheight, fnt.cbold, fnt.citalic, fnt.cnaa); f1.Set(fnt.face1, fnt.height1, fnt.bold1, fnt.italic1, fnt.naa1); f2.Set(fnt.face2, fnt.height2, fnt.bold2, fnt.italic2, fnt.naa2); ed.Set(editorfont); vf.Set(veditorfont); con.Set(consolefont); f1.Set(font1); f2.Set(font2); DlCharset(edt.charset); edt.tabsize.MinMax(1, 100).NotNull(); edt.tabsize <<= editortabsize; edt.indent_amount.MinMax(1, 100).NotNull(); edt.indent_amount <<= indent_spaces ? indent_amount : editortabsize; edt.indent_amount.Enable(indent_spaces); CtrlRetriever rtvr; int hs = hilite_scope; rtvr (hlt.hilite_scope, hs) (hlt.hilite_bracket, hilite_bracket) (hlt.hilite_ifdef, hilite_ifdef) (hlt.hilite_if_endif, hilite_if_endif) (edt.indent_spaces, indent_spaces) (edt.no_parenthesis_indent, no_parenthesis_indent) (edt.showtabs, show_tabs) (edt.filetabs, filetabs) (edt.numbers, line_numbers) (edt.bookmark_pos, bookmark_pos) (edt.header_guards, header_guards) (edt.insert_include, insert_include) (edt.auto_enclose, auto_enclose) (edt.bordercolumn, bordercolumn) (edt.bordercolor, bordercolor) (ide.show_status_bar, show_status_bar) (ide.toolbar_in_row, toolbar_in_row) (ide.splash_screen, splash_screen) (ide.mute_sounds, mute_sounds) (ide.wrap_console_text, wrap_console_text) (ide.browser_clickpos, browser.clickpos) (ide.browser_closeesc, browser_closeesc) (ide.assist, editor.auto_assist) (ide.commentdp, editor.commentdp) (ide.hydra1_threads, hydra1_threads) (ide.chstyle, chstyle) ; hlt.hlstyle.AddColumn("Style"); hlt.hlstyle.AddColumn("Color").Ctrls(HlPusherFactory); hlt.hlstyle.AddColumn("Bold").Ctrls