amxmodx/editor/studio/UnitfrmMain.pas
Christian Hammacher 7c21deb0f2 Fixed memory leak
Updated Modified-Event (now only one parameter [the modified text])
2005-09-07 22:20:28 +00:00

2820 lines
98 KiB
ObjectPascal
Executable File

unit UnitfrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SpTBXItem, TB2Item, TBX, TB2Dock, TB2Toolbar, Menus, ImgList,
TBXSwitcher, { Themes -> } TBXAluminumTheme, TBXDreamTheme, TBXEosTheme,
TBXMonaiTheme, TBXNexos2Theme, TBXNexos3Theme, TBXNexos4Theme, TBXNexos5Theme,
TBXOffice11AdaptiveTheme, TBXOfficeCTheme, TBXOfficeKTheme, TBXOfficeXPTheme,
TBXReliferTheme, TBXSentimoXTheme, TBXTristanTheme, TBXTristan2Theme,
TBXXitoTheme, { <- Themes } SpTBXTabs, ExtCtrls, SpTBXDkPanels, TFlatSplitterUnit,
SciLexer, SciLexerMemo, SciLexerMod, SciCallTips, ComCtrls, mbTBXTreeView,
StdCtrls, mbTBXRichEdit, TBXDkPanels, TBXToolPals, SciPropertyMgr,
mbTBXHint, mbTBXHotKeyEdit, SciAutoComplete, sciKeyBindings,
sciPrint, mxFlatControls, ClipBrd, ActnList, SciSearchReplace,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdFTP,
ShellAPI, IdFTPCommon, IdAntiFreezeBase, IdAntiFreeze, JvComponent,
JvInspector, JvExControls, JvPluginManager, JvgLanguageLoader,
JvWndProcHook, CommCtrl, JvPageList, JvPageListTreeView;
type
TfrmMain = class(TForm)
TBXSwitcher: TTBXSwitcher;
ilImages: TImageList;
ppmOutput: TSpTBXPopupMenu;
tbxTopDock: TSpTBXDock;
tbxMenu: TSpTBXToolbar;
mnuFile: TSpTBXSubmenuItem;
mnuNew: TSpTBXSubmenuItem;
mnuEmptyPlugin: TSpTBXItem;
mnuNewPlugin: TSpTBXItem;
mnuHeaderPAWN: TSpTBXItem;
mnuNewModule: TSpTBXItem;
mnuNewUnit: TSpTBXItem;
mnuNewHeaderCPP: TSpTBXItem;
sepFile1: TSpTBXSeparatorItem;
mnuOpen: TSpTBXItem;
sepFile2: TSpTBXSeparatorItem;
mnuSave: TSpTBXItem;
mnuSaveAs: TSpTBXItem;
mnuSaveAllFiles: TSpTBXItem;
sepFile3: TSpTBXSeparatorItem;
mnuClose: TSpTBXItem;
mnuCloseAllFiles: TSpTBXItem;
sepFile4: TSpTBXSeparatorItem;
mnuPrint: TSpTBXItem;
sepFile5: TSpTBXSeparatorItem;
mnuExit: TSpTBXItem;
mnuEdit: TSpTBXSubmenuItem;
mnuUndo: TSpTBXItem;
mnuRedo: TSpTBXItem;
sepEdit1: TSpTBXSeparatorItem;
mnuCut: TSpTBXItem;
mnuCopy: TSpTBXItem;
mnuPaste: TSpTBXItem;
sepEdit2: TSpTBXSeparatorItem;
mnuSelectAll: TSpTBXItem;
mnuSearch: TSpTBXSubmenuItem;
mnuSearchDialog: TSpTBXItem;
mnuSearchAgain: TSpTBXItem;
sepSearch1: TSpTBXSeparatorItem;
mnuReplace: TSpTBXItem;
sepSearch2: TSpTBXSeparatorItem;
mnuGoToLine: TSpTBXItem;
mnuView: TSpTBXSubmenuItem;
mnuChangeTheme: TSpTBXSubmenuItem;
mnuThemes: TSpTBXThemeGroupItem;
mnuSelectHighlighter: TSpTBXSubmenuItem;
mnuHPAWN: TSpTBXItem;
mnuHCPP: TSpTBXItem;
mnuHHTML: TSpTBXItem;
mnuHSQL: TSpTBXItem;
mnuHXML: TSpTBXItem;
sepHighlighter: TSpTBXSeparatorItem;
mnuHNone: TSpTBXItem;
sepView2: TSpTBXSeparatorItem;
mnuShowFileTB: TSpTBXItem;
mnuShowEditTB: TSpTBXItem;
mnuShowCodeSnippets: TSpTBXItem;
mnuShowCodeToolsWindow: TSpTBXItem;
mnuCompile: TSpTBXSubmenuItem;
mnuDoCompile: TSpTBXItem;
sepCompile1: TSpTBXSeparatorItem;
mnuCompileAndStartHL: TSpTBXItem;
mnuCompileAndUpload: TSpTBXItem;
sepCompile2: TSpTBXSeparatorItem;
mnuRegisterPluginsIniLocal: TSpTBXItem;
mnuRegisterPluginsIniWeb: TSpTBXItem;
mnuTools: TSpTBXSubmenuItem;
mnuIndenter: TSpTBXItem;
mnuUnindenter: TSpTBXItem;
sepTools1: TSpTBXSeparatorItem;
mnuSocketTerminal: TSpTBXItem;
sepTools2: TSpTBXSeparatorItem;
mnuPluginsIniEditor: TSpTBXItem;
sepTools3: TSpTBXSeparatorItem;
mnuSettings: TSpTBXItem;
mnuGenerators: TSpTBXSubmenuItem;
mnuHudmessage: TSpTBXItem;
mnuMOTDGenerator: TSpTBXItem;
mnuHelp: TSpTBXSubmenuItem;
mnuOpenHelp: TSpTBXItem;
sepHelp1: TSpTBXSeparatorItem;
mnuSearchForums: TSpTBXItem;
mnuOpenScriptingForum: TSpTBXItem;
tbxToolbar: TTBXToolbar;
mnuTNew: TSpTBXItem;
mnuTOpen: TSpTBXItem;
mnuTSave: TSpTBXItem;
sepToolbar1: TSpTBXSeparatorItem;
mnuTSearch: TSpTBXItem;
sepToolbar2: TSpTBXSeparatorItem;
mnuTCompile: TSpTBXItem;
tbxCodeSnippets: TSpTBXToolbar;
mnuCodeSnippets: TSpTBXRightAlignSpacerItem;
mnuPawn: TSpTBXItem;
mnuCPP: TSpTBXItem;
sepCodeSnippets: TSpTBXSeparatorItem;
tbxEdit: TSpTBXToolbar;
mnuTUndo: TSpTBXItem;
mnuTRedo: TSpTBXItem;
sepTEdit1: TSpTBXSeparatorItem;
mnuTCopy: TSpTBXItem;
mnuTCut: TSpTBXItem;
mnuTPaste: TSpTBXItem;
sepTEdit2: TSpTBXSeparatorItem;
mnuTSelectAll: TSpTBXItem;
tsMain: TSpTBXTabSet;
tiPAWN: TSpTBXTabItem;
tiCPP: TSpTBXTabItem;
tsDocuments: TSpTBXTabSet;
tiDocument1: TSpTBXTabItem;
spcLeft1: TImage;
spcRight1: TImage;
sciCallTips: TSciCallTips;
sbStatus: TSpTBXStatusBar;
sepGenerators1: TSpTBXSeparatorItem;
infoNewAMXX: TSpTBXRightAlignSpacerItem;
infoNewCPP: TSpTBXRightAlignSpacerItem;
sepNew1: TSpTBXSeparatorItem;
mnuPaster: TSpTBXItem;
tiOther: TSpTBXTabItem;
sciPropertyLoader: TSciPropertyLoader;
odOpen: TOpenDialog;
sdSave: TSaveDialog;
sepNew3: TSpTBXSeparatorItem;
infoNewOther: TSpTBXRightAlignSpacerItem;
mnuNewTextfile: TSpTBXItem;
mnuNewHTML: TSpTBXItem;
mnuNewSQL: TSpTBXItem;
mnuNewXML: TSpTBXItem;
sepHelp2: TSpTBXSeparatorItem;
mnuInfo: TSpTBXItem;
mnuFilename: TSpTBXRightAlignSpacerItem;
sepStatus2: TSpTBXSeparatorItem;
mnuCaret: TSpTBXRightAlignSpacerItem;
sepStatus3: TSpTBXSeparatorItem;
mnuModified: TSpTBXRightAlignSpacerItem;
sepStatus1: TSpTBXSeparatorItem;
mnuShowCodeTools: TSpTBXItem;
mnuOther: TSpTBXItem;
mnuFoldAll: TSpTBXItem;
sepView1: TSpTBXSeparatorItem;
sciPrinter: TSciPrinter;
pnlParent: TPanel;
sciEditor: TScintilla;
splRight: TSplitter;
tcTools: TSpTBXTabControl;
tiTools: TSpTBXTabItem;
tiNotes: TSpTBXTabItem;
tsNotes: TSpTBXTabSheet;
imgRight4: TImage;
imgBottom4: TImage;
imgTop4: TImage;
imgLeft4: TImage;
tbxNotes: TSpTBXToolbar;
mnuBold: TSpTBXItem;
mnuItalic: TSpTBXItem;
mnuUnderline: TSpTBXItem;
sepNotes: TSpTBXSeparatorItem;
mnuSelectColor: TSpTBXSubmenuItem;
cpNotes: TTBXColorPalette;
rtfNotes: TRichEdit;
tsExplorer: TSpTBXTabSheet;
spcBottom2: TImage;
spcLeft2: TImage;
spcRight2: TImage;
lstOutput: TListBox;
splOutput: TSplitter;
mnuCopyMessage: TSpTBXItem;
mnuCopyAll: TSpTBXItem;
mnuSaveToFile: TSpTBXItem;
sepOutput: TSpTBXSeparatorItem;
alControlChars: TActionList;
acControlChar1: TAction;
acControlChar2: TAction;
acControlChar3: TAction;
acControlChar4: TAction;
acControlChar5: TAction;
acControlChar6: TAction;
acControlChar7: TAction;
acControlChar8: TAction;
acControlChar9: TAction;
acControlChar10: TAction;
acControlChar11: TAction;
acControlChar12: TAction;
acControlChar13: TAction;
acControlChar14: TAction;
acControlChar15: TAction;
acControlChar16: TAction;
acControlChar17: TAction;
acControlChar18: TAction;
acControlChar19: TAction;
acControlChar20: TAction;
acControlChar22: TAction;
acControlChar23: TAction;
acControlChar24: TAction;
acControlChar25: TAction;
acControlChar21: TAction;
acControlChar26: TAction;
acControlChar27: TAction;
acControlChar28: TAction;
acControlChar29: TAction;
acControlChar30: TAction;
acControlChar31: TAction;
acControlChar32: TAction;
acControlChar33: TAction;
ppmEditor: TSpTBXPopupMenu;
mnuEditorCopy: TSpTBXItem;
mnuEditorPaste: TSpTBXItem;
mnuEditorCut: TSpTBXItem;
sepEditorMenu2: TSpTBXSeparatorItem;
mnuEditorUndo: TSpTBXItem;
mnuEditorRedo: TSpTBXItem;
sepEditorMenu3: TSpTBXSeparatorItem;
mnuToogleBookmark: TSpTBXItem;
mnuGoToBookmark: TSpTBXItem;
mnuEditorDelete: TSpTBXItem;
sepEditorMenu1: TSpTBXSeparatorItem;
mnuEditorSelectAll: TSpTBXItem;
sciSearchReplace: TSciSearchReplace;
acControlChar34: TAction;
acControlChar35: TAction;
acControlChar36: TAction;
acControlChar37: TAction;
IdFTP: TIdFTP;
acControlChar38: TAction;
pnlLoading: TSpTBXPanel;
pbLoading: TSpTBXProgressBar;
cmdCancel: TSpTBXButton;
acControlChar39: TAction;
acControlChar40: TAction;
sciAutoComplete: TSciAutoComplete;
mnuHTML: TSpTBXItem;
ppmDocuments: TSpTBXPopupMenu;
mnuPClose: TSpTBXItem;
mnuPSave: TSpTBXItem;
sepDocuments: TSpTBXSeparatorItem;
mnuPCloseAllFiles: TSpTBXItem;
mnuMenuGenerator: TSpTBXItem;
pnlDock: TSpTBXMultiDock;
pnlCodeExplorer: TSpTBXDockablePanel;
trvExplorer: TTreeView;
pnlCodeInspector: TSpTBXDockablePanel;
JvInspectorDotNETPainter: TJvInspectorDotNETPainter;
jviCode: TJvInspector;
mnuConnectionGen: TSpTBXItem;
acControlChar41: TAction;
sepView3: TSpTBXSeparatorItem;
mnuShowCodeExplorer: TSpTBXItem;
mnuShowCodeInspector: TSpTBXItem;
procedure FormConstrainedResize(Sender: TObject; var MinWidth,
MinHeight, MaxWidth, MaxHeight: Integer);
procedure mnuExitClick(Sender: TObject);
procedure OnCodeSnippetSelect(Sender: TObject);
procedure cpNotesChange(Sender: TObject);
procedure mnuBoldClick(Sender: TObject);
procedure mnuItalicClick(Sender: TObject);
procedure mnuUnderlineClick(Sender: TObject);
procedure rtfNotesMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure rtfNotesKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure trvExplorerCollapsed(Sender: TObject; Node: TTreeNode);
procedure trvExplorerExpanded(Sender: TObject; Node: TTreeNode);
procedure mnuSettingsClick(Sender: TObject);
procedure tsMainActiveTabChange(Sender: TObject; ItemIndex: Integer);
procedure tsDocumentsActiveTabChange(Sender: TObject;
ItemIndex: Integer);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure mnuTOpenClick(Sender: TObject);
procedure mnuTSaveClick(Sender: TObject);
procedure mnuTSearchClick(Sender: TObject);
procedure mnuTCompileClick(Sender: TObject);
procedure mnuTUndoClick(Sender: TObject);
procedure mnuTRedoClick(Sender: TObject);
procedure mnuTCopyClick(Sender: TObject);
procedure mnuTCutClick(Sender: TObject);
procedure mnuTPasteClick(Sender: TObject);
procedure mnuTSelectAllClick(Sender: TObject);
procedure mnuEmptyPluginClick(Sender: TObject);
procedure mnuNewPluginClick(Sender: TObject);
procedure mnuHXMLClick(Sender: TObject);
procedure mnuHNoneClick(Sender: TObject);
procedure mnuOpenClick(Sender: TObject);
procedure mnuNewTextfileClick(Sender: TObject);
procedure mnuNewHTMLClick(Sender: TObject);
procedure mnuNewSQLClick(Sender: TObject);
procedure mnuNewXMLClick(Sender: TObject);
procedure mnuUndoClick(Sender: TObject);
procedure mnuSaveClick(Sender: TObject);
procedure mnuSaveAsClick(Sender: TObject);
procedure mnuThemesClick(Sender: TObject);
procedure mnuInfoClick(Sender: TObject);
procedure mnuRedoClick(Sender: TObject);
procedure mnuCutClick(Sender: TObject);
procedure mnuCopyClick(Sender: TObject);
procedure mnuPasteClick(Sender: TObject);
procedure mnuSelectAllClick(Sender: TObject);
procedure mnuCloseClick(Sender: TObject);
procedure mnuShowCodeToolsClick(Sender: TObject);
procedure sciEditorClick(Sender: TObject);
procedure sciEditorKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure sciEditorKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure mnuFoldAllClick(Sender: TObject);
procedure tbxToolbarVisibleChanged(Sender: TObject);
procedure mnuShowFileTBClick(Sender: TObject);
procedure tbxEditVisibleChanged(Sender: TObject);
procedure mnuShowEditTBClick(Sender: TObject);
procedure tbxCodeSnippetsVisibleChanged(Sender: TObject);
procedure mnuShowCodeSnippetsClick(Sender: TObject);
procedure mnuCopyMessageClick(Sender: TObject);
procedure mnuCopyAllClick(Sender: TObject);
procedure mnuSaveToFileClick(Sender: TObject);
procedure ppmOutputInitPopup(Sender: TObject; PopupView: TTBView);
procedure mnuSearchForumsClick(Sender: TObject);
procedure mnuOpenScriptingForumClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure acControlCharHandler(Sender: TObject);
procedure mnuEditorUndoClick(Sender: TObject);
procedure mnuEditorRedoClick(Sender: TObject);
procedure mnuEditorCopyClick(Sender: TObject);
procedure mnuEditorCutClick(Sender: TObject);
procedure mnuEditorPasteClick(Sender: TObject);
procedure mnuToogleBookmarkClick(Sender: TObject);
procedure mnuEditorDeleteClick(Sender: TObject);
procedure mnuEditorSelectAllClick(Sender: TObject);
procedure mnuGoToBookmarkClick(Sender: TObject);
procedure mnuSearchDialogClick(Sender: TObject);
procedure mnuReplaceClick(Sender: TObject);
procedure mnuSearchAgainClick(Sender: TObject);
procedure mnuGoToLineClick(Sender: TObject);
procedure mnuPrintClick(Sender: TObject);
procedure mnuSaveAllFilesClick(Sender: TObject);
procedure sciEditorKeyPress(Sender: TObject; var Key: Char);
procedure mnuCloseAllFilesClick(Sender: TObject);
procedure mnuIndenterClick(Sender: TObject);
procedure mnuUnindenterClick(Sender: TObject);
procedure mnuPasterClick(Sender: TObject);
procedure mnuPluginsIniEditorClick(Sender: TObject);
procedure cmdCancelClick(Sender: TObject);
procedure mnuSocketTerminalClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure trvExplorerDblClick(Sender: TObject);
procedure tiPAWNClick(Sender: TObject);
procedure tiCPPClick(Sender: TObject);
procedure tiOtherClick(Sender: TObject);
procedure mnuOpenHelpClick(Sender: TObject);
procedure mnuHudmessageClick(Sender: TObject);
procedure mnuDoCompileClick(Sender: TObject);
procedure lstOutputMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure lstOutputDblClick(Sender: TObject);
procedure lstOutputMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure sciEditorMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure lstOutputEnter(Sender: TObject);
procedure mnuCompileAndStartHLClick(Sender: TObject);
procedure mnuCompileAndUploadClick(Sender: TObject);
procedure mnuRegisterPluginsIniLocalClick(Sender: TObject);
procedure mnuRegisterPluginsIniWebClick(Sender: TObject);
procedure sciAutoCompleteBeforeShow(Sender: TObject;
const Position: Integer; ListToDisplay: TStrings;
var CancelDisplay: Boolean);
procedure mnuMOTDGeneratorClick(Sender: TObject);
procedure mnuHeaderPAWNClick(Sender: TObject);
procedure OnTabSelect(Sender: TTBCustomItem; Viewer: TTBItemViewer;
Selecting: Boolean);
procedure mnuPCloseClick(Sender: TObject);
procedure mnuPCloseAllFilesClick(Sender: TObject);
procedure mnuTNewClick(Sender: TObject);
procedure jviCodeItemValueChanged(Sender: TObject;
Item: TJvCustomInspectorItem);
procedure mnuMenuGeneratorClick(Sender: TObject);
procedure JvPluginManagerPlugInError(Sender: TObject;
AError: Exception);
procedure mnuNewModuleClick(Sender: TObject);
procedure mnuNewUnitClick(Sender: TObject);
procedure mnuNewHeaderCPPClick(Sender: TObject);
procedure tcToolsActiveTabChange(Sender: TObject; ItemIndex: Integer);
procedure sciEditorModified(Sender: TObject; const position,
modificationType: Integer; text: PAnsiChar; const len, linesAdded,
line, foldLevelNow, foldLevelPrev: Integer);
procedure sciEditorDblClick(Sender: TObject);
procedure sciCallTipsBeforeShow(Sender: TObject;
const Position: Integer; ListToDisplay: TStrings;
var CancelDisplay: Boolean);
procedure sciEditorCallTipClick(Sender: TObject;
const position: Integer);
procedure sciEditorAutoCSelection(Sender: TObject; text: PAnsiChar);
procedure pnlCodeInspectorVisibleChanged(Sender: TObject);
procedure pnlCodeExplorerVisibleChanged(Sender: TObject);
procedure mnuShowCodeExplorerClick(Sender: TObject);
procedure mnuShowCodeInspectorClick(Sender: TObject);
procedure mnuConnectionGenClick(Sender: TObject);
private
procedure UpdateNotes;
public
IRCPasterStop: Boolean;
eErrorLine: Integer;
SelectedTab: TSpTBXTabItem;
procedure OnCodeSnippetClick(Sender: TObject);
procedure OnCustomClick(Sender: TObject);
procedure SetErrorLine(eLine: Integer);
procedure OnCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
end;
var
frmMain: TfrmMain;
eCPP: Boolean;
implementation
uses UnitfrmSettings, UnitMainTools, UnitLanguages, UnitfrmInfo,
UnitCodeSnippets, UnitfrmSearch, UnitfrmReplace, UnitfrmGoToLine,
UnitfrmAllFilesForm, UnitCodeUtils, UnitfrmPluginsIniEditor,
UnitfrmSocketsTerminal, UnitfrmSplashscreen, UnitCodeExplorerUpdater,
UnitTextAnalyze, UnitfrmHudMsgGenerator, UnitCompile, UnitfrmAutoIndent,
UnitfrmHTMLPreview, UnitCodeInspector, UnitfrmMOTDGen,
UnitfrmMenuGenerator, UnitfrmClose, UnitPlugins, UnitfrmConnGen,
UnitMenuGenerators, UnitfrmIRCPaster;
{$R *.dfm}
procedure TfrmMain.FormConstrainedResize(Sender: TObject; var MinWidth,
MinHeight, MaxWidth, MaxHeight: Integer);
begin
pnlLoading.Left := sciEditor.Left + 3 + (sciEditor.Width div 2) - (pnlLoading.Width div 2);
pnlLoading.Top := tsDocuments.Top + sciEditor.Top + ((sciEditor.Height * 5) div 6) - (pnlLoading.Height div 2);
if (Canvas.TextWidth(ActiveDoc.FileName) +10 > mnuFilename.CustomWidth) then
mnuFilename.Caption := ExtractFileName(ActiveDoc.FileName)
else
mnuFilename.Caption := ActiveDoc.FileName;
end;
procedure TfrmMain.mnuExitClick(Sender: TObject);
begin
Close;
end;
{ Notes -> }
procedure TfrmMain.OnCodeSnippetSelect(Sender: TObject);
begin
mnuPAWN.Checked := Sender = mnuPAWN;
mnuCPP.Checked := Sender = mnuCPP;
mnuHTML.Checked := Sender = mnuHTML;
mnuOther.Checked := Sender = mnuOther;
LoadCodeSnippets((Sender As TSpTBXItem).Caption);
end;
procedure TfrmMain.cpNotesChange(Sender: TObject);
begin
rtfNotes.SelAttributes.Color := cpNotes.Color;
end;
procedure TfrmMain.UpdateNotes;
begin
cpNotes.Color := rtfNotes.SelAttributes.Color;
mnuBold.Checked := fsBold in rtfNotes.SelAttributes.Style;
mnuItalic.Checked := fsItalic in rtfNotes.SelAttributes.Style;
mnuUnderline.Checked := fsUnderline in rtfNotes.SelAttributes.Style;
end;
procedure TfrmMain.mnuBoldClick(Sender: TObject);
begin
if fsBold in rtfNotes.SelAttributes.Style then
rtfNotes.SelAttributes.Style := rtfNotes.SelAttributes.Style - [fsBold]
else
rtfNotes.SelAttributes.Style := rtfNotes.SelAttributes.Style + [fsBold];
end;
procedure TfrmMain.mnuItalicClick(Sender: TObject);
begin
if fsItalic in rtfNotes.SelAttributes.Style then
rtfNotes.SelAttributes.Style := rtfNotes.SelAttributes.Style - [fsItalic]
else
rtfNotes.SelAttributes.Style := rtfNotes.SelAttributes.Style + [fsItalic];
end;
procedure TfrmMain.mnuUnderlineClick(Sender: TObject);
begin
if fsUnderline in rtfNotes.SelAttributes.Style then
rtfNotes.SelAttributes.Style := rtfNotes.SelAttributes.Style - [fsUnderline]
else
rtfNotes.SelAttributes.Style := rtfNotes.SelAttributes.Style + [fsUnderline];
end;
procedure TfrmMain.rtfNotesMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
UpdateNotes;
end;
procedure TfrmMain.rtfNotesKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
UpdateNotes;
end;
{ <- Notes - Code-Explorer -> }
procedure TfrmMain.trvExplorerCollapsed(Sender: TObject; Node: TTreeNode);
begin
Node.ImageIndex := 42;
Node.SelectedIndex := 42;
end;
procedure TfrmMain.trvExplorerExpanded(Sender: TObject; Node: TTreeNode);
begin
Node.ImageIndex := 43;
Node.SelectedIndex := 43;
end;
{ <- Code Explorer }
procedure TfrmMain.mnuSettingsClick(Sender: TObject);
var i: integer;
eModified: Boolean;
begin
CopyFile(PChar(ExtractFilePath(ParamStr(0)) + 'config\PAWN.csl'), PChar(ExtractFilePath(ParamStr(0)) + 'config\PAWN.bak'), False);
CopyFile(PChar(ExtractFilePath(ParamStr(0)) + 'config\C++.csl'), PChar(ExtractFilePath(ParamStr(0)) + 'config\C++.bak'), False);
CopyFile(PChar(ExtractFilePath(ParamStr(0)) + 'config\Other.csl'), PChar(ExtractFilePath(ParamStr(0)) + 'config\Other.bak'), False);
eModified := ActiveDoc.Modified;
if frmSettings.ShowModal = mrOk then begin
{ Shortcuts }
for i := 0 to frmSettings.lvShortcuts.Items.Count - 1 do
TSciKeyCommand(frmSettings.lvShortcuts.Items[i].Data).ShortCut := (TextToShortCut(frmSettings.lvShortcuts.Items[i].SubItems[0]));
{ Tools }
if frmSettings.chkIndentGuides.Checked then
sciEditor.Indentation := sciEditor.Indentation + [IndentationGuides]
else
sciEditor.Indentation := sciEditor.Indentation - [IndentationGuides];
sciEditor.BraceHilite := frmSettings.chkHighlightBraces.Checked;
sciEditor.ClearUndoAfterSave := frmSettings.chkClearUndoAfterSave.Checked;
sciEditor.AutoCloseBraces := frmSettings.chkAutoCloseBraces.Checked;
sciEditor.AutoCloseQuotes := frmSettings.chkAutoCloseQuotes.Checked;
if frmSettings.chkWordWrap.Checked then
sciEditor.WordWrap := sciWrap
else
sciEditor.WordWrap := sciNoWrap;
case frmSettings.cboCodeFolding.ItemIndex of
0: sciEditor.FoldMarkerType := sciMarkArrows;
1: sciEditor.FoldMarkerType := sciMarkBox;
2: sciEditor.FoldMarkerType := sciMarkCircle;
3: sciEditor.FoldMarkerType := sciMarkPlusMinus;
end;
if frmSettings.cboCodeFolding.ItemIndex = 4 then
sciEditor.Folding := sciEditor.Folding - [foldFold]
else
sciEditor.Folding := sciEditor.Folding + [foldFold];
sciEditor.Caret.ForeColor := frmSettings.CaretFore;
sciEditor.Caret.LineBackColor := frmSettings.CaretBack;
sciEditor.Caret.LineVisible := frmSettings.chkShowCaret.Checked;
sciEditor.Caret.Period := StrToInt(frmSettings.txtPeriod.Text);
eConfig.WriteBool('Editor', 'Auto-Indent', frmSettings.chkAutoIndent.Checked);
eConfig.WriteBool('Editor', 'IndentOpeningBrace', frmAutoIndent.chkIndentOpeningBrace.Checked);
eConfig.WriteBool('Editor', 'UnindentClosingBrace', frmAutoIndent.chkUnindentPressingClosingBrace.Checked);
eConfig.WriteBool('Editor', 'UnindentEmptyLine', frmAutoIndent.chkUnindentLine.Checked);
{ Editor }
eConfig.WriteBool('Editor', 'LimitCaretRestore', frmSettings.chkRestoreCaret.Checked);
eConfig.WriteString('Editor', 'LimitCaretRestoreVal', frmSettings.txtLines.Text);
if FileExists(sciPropertyLoader.FileName) then
sciPropertyLoader.Save;
{ Compiler }
eConfig.WriteString('Pawn-Compiler', 'Path', frmSettings.txtPAWNCompilerPath.Text);
eConfig.WriteString('Pawn-Compiler', 'Args', frmSettings.txtPAWNArgs.Text);
eConfig.WriteString('Pawn-Compiler', 'DefaultOutput', frmSettings.txtPAWNOutput.Text);
eConfig.WriteString('CPP-Compiler', 'Path', frmSettings.txtCPPCompilerPath.Text);
eConfig.WriteString('CPP-Compiler', 'Args', frmSettings.txtCPPCompilerArguments.Text);
eConfig.WriteString('CPP-Compiler', 'DefaultOutput', frmSettings.txtCPPOutput.Text);
{ HL }
eConfig.WriteString('Half-Life', 'Filename', frmSettings.txtHLExec.Text);
eConfig.WriteString('Half-Life', 'Params', frmSettings.txtCustomParameters.Text);
eConfig.WriteString('Half-Life', 'AMXXListen', frmSettings.txtAMXXDir.Text);
{ FTP Settings }
eConfig.WriteString('FTP', 'Host', frmSettings.txtHost.Text);
eConfig.WriteString('FTP', 'Port', frmSettings.txtPort.Text);
eConfig.WriteString('FTP', 'Username', frmSettings.txtUsername.Text);
eConfig.WriteString('FTP', 'Password', frmSettings.txtPassword.Text);
eConfig.WriteString('FTP', 'DefaultDir', frmSettings.txtDefaultDir.Text);
eConfig.WriteBool('FTP', 'Passive', frmSettings.chkPassive.Checked);
{ FTP Proxy }
eConfig.WriteInteger('Proxy', 'ProxyType', frmSettings.cboProxy.ItemIndex);
eConfig.WriteString('Proxy', 'Host', frmSettings.txtProxyHost.Text);
eConfig.WriteString('Proxy', 'Port', frmSettings.txtProxyPort.Text);
eConfig.WriteString('Proxy', 'Username', frmSettings.txtUsername.Text);
eConfig.WriteString('Proxy', 'Password', frmSettings.txtProxyPassword.Text);
{ Misc }
eConfig.WriteString('Misc', 'DefaultPluginName', frmSettings.txtDefaultName.Text);
eConfig.WriteString('Misc', 'DefaultPluginVersion', frmSettings.txtDefaultVersion.Text);
eConfig.WriteString('Misc', 'DefaultPluginAuthor', frmSettings.txtDefaultAuthor.Text);
if frmSettings.optFileComment.Checked then
eConfig.WriteInteger('Misc', 'SaveNotesTo', 0)
else if frmSettings.optConfig.Checked then
eConfig.WriteInteger('Misc', 'SaveNotesTo', 1)
else
eConfig.WriteInteger('Misc', 'SaveNotesTo', 3);
eConfig.WriteInteger('Misc', 'CPUSpeed', frmSettings.sldSpeed.Value);
eConfig.WriteBool('Misc', 'ShowStatusbar', frmSettings.chkShowStatusbar.Checked);
end
else begin
{ Restore Code-Snippets }
DeleteFile(ExtractFilePath(ParamStr(0)) + 'config\PAWN.csl');
DeleteFile(ExtractFilePath(ParamStr(0)) + 'config\C++.csl');
DeleteFile(ExtractFilePath(ParamStr(0)) + 'config\Other.csl');
CopyFile(PChar(ExtractFilePath(ParamStr(0)) + 'config\PAWN.bak'), PChar(ExtractFilePath(ParamStr(0)) + 'config\PAWN.csl'), False);
CopyFile(PChar(ExtractFilePath(ParamStr(0)) + 'config\C++.bak'), PChar(ExtractFilePath(ParamStr(0)) + 'config\C++.csl'), False);
CopyFile(PChar(ExtractFilePath(ParamStr(0)) + 'config\Other.bak'), PChar(ExtractFilePath(ParamStr(0)) + 'config\Other.csl'), False);
end;
if mnuPawn.Checked then
LoadCodeSnippets('Pawn')
else if mnuCPP.Checked then
LoadCodeSnippets('C++')
else if mnuHTML.Checked then
LoadCodeSnippets('HTML')
else
LoadCodeSnippets('Other');
DeleteFile(ExtractFilePath(ParamStr(0)) + 'config\PAWN.bak');
DeleteFile(ExtractFilePath(ParamStr(0)) + 'config\C++.bak');
DeleteFile(ExtractFilePath(ParamStr(0)) + 'config\Other.bak');
if FileExists(sciPropertyLoader.FileName) then
sciPropertyLoader.Load;
ReloadIni;
sciEditor.Modified := eModified;
ActiveDoc.Modified := eModified;
if eModified then
mnuModified.Caption := lModified
else
mnuModified.Caption := '';
sciEditor.Gutter1.MarginType := gutLineNumber;
sciEditor.Gutter1.Width := 40;
end;
{ Change Tab -> }
procedure TfrmMain.tsMainActiveTabChange(Sender: TObject;
ItemIndex: Integer);
begin
if (not Started) or (frmMain.pnlLoading.Visible) then exit;
if (lstOutput.Visible) then begin
if Plugin_VisibleControlChange(CTRL_OUTPUT, False) then begin
splOutput.Hide;
lstOutput.Hide;
Plugin_VisibleControlChange(CTRL_OUTPUT, False);
end;
end;
case tsMain.ActiveTabIndex of
0: begin
mnuTNew.Caption := 'New Plugin';
end;
1: begin
mnuTNew.Caption := 'New Unit';
sciCallTips.ApiStrings.Clear;
sciAutoComplete.AStrings.Clear;
end;
2: begin
mnuTNew.Caption := 'New Textfile';
sciCallTips.ApiStrings.Clear;
sciAutoComplete.AStrings.Clear;
end;
end;
ActivateProjects(ItemIndex, True);
trvExplorer.Items.Clear;
FillCodeExplorer(GetCurrLang.Name);
end;
procedure TfrmMain.tsDocumentsActiveTabChange(Sender: TObject;
ItemIndex: Integer);
var Collection: TDocCollection;
begin
if (not Started) or (pnlLoading.Visible) then exit;
if (lstOutput.Visible) then begin
if Plugin_VisibleControlChange(CTRL_OUTPUT, False) then begin
splOutput.Hide;
lstOutput.Hide;
Plugin_VisibleControlChange(CTRL_OUTPUT, False);
end;
end;
case tsMain.ActiveTabIndex of
0: Collection := PAWNProjects; // PAWN
1: Collection := CPPProjects; // C++
else Collection := OtherProjects; // Other
end;
Collection.Activate(ItemIndex, True);
end;
{ <- Change Tab | Settings -> }
procedure TfrmMain.FormShow(Sender: TObject);
begin
if (Screen.Cursor = crDefault) and (not pnlLoading.Visible) then begin
Started := True;
TCodeExplorerUpdater.Create(False);
ReloadIni;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
end;
{ <- Settings | Toolbars -> }
procedure TfrmMain.mnuTOpenClick(Sender: TObject);
begin
mnuOpen.Click;
end;
procedure TfrmMain.mnuTSaveClick(Sender: TObject);
begin
mnuSave.Click;
end;
procedure TfrmMain.mnuTSearchClick(Sender: TObject);
begin
mnuSearch.Click;
end;
procedure TfrmMain.mnuTCompileClick(Sender: TObject);
begin
mnuDoCompile.Click;
end;
procedure TfrmMain.mnuTUndoClick(Sender: TObject);
begin
mnuUndo.Click;
end;
procedure TfrmMain.mnuTRedoClick(Sender: TObject);
begin
mnuRedo.Click;
end;
procedure TfrmMain.mnuTCopyClick(Sender: TObject);
begin
mnuCopy.Click;
end;
procedure TfrmMain.mnuTCutClick(Sender: TObject);
begin
mnuCut.Click;
end;
procedure TfrmMain.mnuTPasteClick(Sender: TObject);
begin
mnuPaste.Click;
end;
procedure TfrmMain.mnuTSelectAllClick(Sender: TObject);
begin
mnuSelectAll.Click;
end;
procedure TfrmMain.mnuEmptyPluginClick(Sender: TObject);
begin
if not Plugin_CreateNewFile(NEW_PAWN_EMPTYPLUGIN, True) then exit;
if tsMain.ActiveTabIndex <> 0 then
ActivateProjects(0, False);
PAWNProjects.Activate(PAWNProjects.Add(''), True);
Plugin_CreateNewFile(NEW_PAWN_EMPTYPLUGIN, False);
end;
procedure TfrmMain.mnuNewPluginClick(Sender: TObject);
begin
if not Plugin_CreateNewFile(NEW_PAWN_PLUGIN, True) then exit;
if tsMain.ActiveTabIndex <> 0 then
ActivateProjects(0, False);
PAWNProjects.Activate(PAWNProjects.Add(''), False);
sciEditor.Lines.Add('/* Plugin generated by AMXX-Studio */');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('#include <amxmodx>');
sciEditor.Lines.Add('#include <amxmisc>');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('#define PLUGIN "' + eConfig.ReadString('Misc', 'DefaultPluginName', 'New Plugin') + '"');
sciEditor.Lines.Add('#define VERSION "' + eConfig.ReadString('Misc', 'DefaultPluginVersion', '1.0') + '"');
sciEditor.Lines.Add('#define AUTHOR "' + eConfig.ReadString('Misc', 'DefaultPluginAuthor', 'Your name') + '"');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('public plugin_init() {');
sciEditor.Lines.Add(' register_plugin(PLUGIN, VERSION, AUTHOR)');
sciEditor.Lines.Add(' ');
sciEditor.Lines.Add(' // Add your code here...');
sciEditor.Lines.Add('}');
Plugin_CreateNewFile(NEW_PAWN_PLUGIN, False);
end;
procedure TfrmMain.mnuHXMLClick(Sender: TObject);
begin
SelectLanguage((Sender As TSpTBXItem).Caption);
end;
procedure TfrmMain.mnuHNoneClick(Sender: TObject);
begin
SelectLanguage('null');
end;
procedure TfrmMain.mnuOpenClick(Sender: TObject);
var eExt: String;
begin
if Assigned(Sender) then begin
if not odOpen.Execute then
exit;
end;
eExt := ExtractFileExt(odOpen.FileName);
eExt := LowerCase(eExt);
if (eExt = '.sma') or (eExt = '.inc') then begin // Pawn files
if tsMain.ActiveTabIndex <> 0 then
ActivateProjects(0, False);
PAWNProjects.Open(odOpen.FileName);
end
else if (eExt = '.cpp') or (eExt = '.h') then begin // C++ files
if not eCPP then
MessageBox(Handle, PChar(lNoCPP), PChar(Application.Title), MB_ICONWARNING)
else begin
if tsMain.ActiveTabIndex <> 1 then
ActivateProjects(1, False);
CPPProjects.Open(odOpen.FileName);
end;
end
else if (eExt = '.htm') or (eExt = '.html') then begin // HTML files
if tsMain.ActiveTabIndex <> 1 then
ActivateProjects(2, False);
OtherProjects.Open(odOpen.FileName, 'HTML');
end
else if (eExt = '.sql') then begin // SQL databases
if tsMain.ActiveTabIndex <> 1 then
ActivateProjects(2, False);
OtherProjects.Open(odOpen.FileName, 'SQL');
end
else if (eExt = '.xml') then begin // XML files
if tsMain.ActiveTabIndex <> 1 then
ActivateProjects(2, False);
OtherProjects.Open(odOpen.FileName, 'XML');
end
else begin // Other files and/or Textfiles
if tsMain.ActiveTabIndex <> 1 then
ActivateProjects(2, False);
OtherProjects.Open(odOpen.FileName, 'null');
end;
end;
procedure TfrmMain.mnuNewTextfileClick(Sender: TObject);
begin
if not Plugin_CreateNewFile(NEW_OTHER_TEXTFILE, True) then exit;
if tsMain.ActiveTabIndex <> 2 then
ActivateProjects(2, False);
OtherProjects.Activate(OtherProjects.Add(''), True);
Plugin_CreateNewFile(NEW_OTHER_TEXTFILE, False);
end;
procedure TfrmMain.mnuNewHTMLClick(Sender: TObject);
begin
if not Plugin_CreateNewFile(NEW_OTHER_HTML, True) then exit;
if tsMain.ActiveTabIndex <> 2 then
ActivateProjects(2, False);
OtherProjects.Activate(OtherProjects.Add('', 'HTML'), True);
sciEditor.Lines.Add('<html>');
sciEditor.Lines.Add(#9'<head>');
sciEditor.Lines.Add(#9#9'<title>Your Title</title>');
sciEditor.Lines.Add(#9'</head>');
sciEditor.Lines.Add(#9'<body>');
sciEditor.Lines.Add(#9#9'<-- Your text here -->');
sciEditor.Lines.Add(#9'</body>');
sciEditor.Lines.Add('</html>');
Plugin_CreateNewFile(NEW_OTHER_HTML, False);
end;
procedure TfrmMain.mnuNewSQLClick(Sender: TObject);
begin
if not Plugin_CreateNewFile(NEW_OTHER_SQL, True) then exit;
if tsMain.ActiveTabIndex <> 2 then
ActivateProjects(2, False);
OtherProjects.Activate(OtherProjects.Add('', 'SQL'), True);
Plugin_CreateNewFile(NEW_OTHER_SQL, False);
end;
procedure TfrmMain.mnuNewXMLClick(Sender: TObject);
begin
if not Plugin_CreateNewFile(NEW_OTHER_XML, True) then exit;
if tsMain.ActiveTabIndex <> 2 then
ActivateProjects(2, False);
OtherProjects.Activate(OtherProjects.Add('', 'XML'), True);
Plugin_CreateNewFile(NEW_OTHER_XML, False);
end;
procedure TfrmMain.mnuUndoClick(Sender: TObject);
begin
sciEditor.Undo;
end;
procedure TfrmMain.mnuSaveClick(Sender: TObject);
begin
if ActiveDoc.Untitled then
mnuSaveAs.Click
else begin
ActiveDoc.Save;
mnuModified.Caption := '';
end;
end;
procedure TfrmMain.mnuSaveAsClick(Sender: TObject);
begin
if sdSave.Execute then begin
ActiveDoc.FileName := AddExtension(sdSave.FileName, ActiveDoc.Highlighter);
ActiveDoc.Save;
// Don't know why tsDocuments.Items[0].Caption := '???'; not works, but this does:
TSpTBXTabItem(tsDocuments.Items[ActiveDoc.Index]).Caption := ActiveDoc.Title;
end;
end;
procedure TfrmMain.mnuThemesClick(Sender: TObject);
begin
if Started then
eConfig.WriteString('Misc', 'Theme', TBXCurrentTheme);
Plugin_ThemeChange(TBXCurrentTheme);
end;
procedure TfrmMain.mnuInfoClick(Sender: TObject);
begin
if Plugin_ShowHelp(HELP_ABOUT) then
frmInfo.ShowModal;
end;
procedure TfrmMain.mnuRedoClick(Sender: TObject);
begin
sciEditor.Redo;
end;
procedure TfrmMain.mnuCutClick(Sender: TObject);
begin
sciEditor.Cut;
end;
procedure TfrmMain.mnuCopyClick(Sender: TObject);
begin
sciEditor.Copy;
end;
procedure TfrmMain.mnuPasteClick(Sender: TObject);
begin
sciEditor.Paste;
end;
procedure TfrmMain.mnuSelectAllClick(Sender: TObject);
begin
sciEditor.SelectAll;
end;
procedure TfrmMain.mnuCloseClick(Sender: TObject);
begin
CloseDocument(ActiveDoc);
end;
procedure TfrmMain.mnuShowCodeToolsClick(Sender: TObject);
begin
if not Plugin_VisibleControlChange(CTRL_CODETOOLS_MAIN, not tcTools.Visible) then exit;
tcTools.Visible := (Sender As TSpTBXItem).Checked;
splRight.Visible := (Sender As TSpTBXItem).Checked;
mnuShowCodeTools.Checked := (Sender As TSpTBXItem).Checked;
mnuShowCodeToolsWindow.Checked := (Sender As TSpTBXItem).Checked;
Application.ProcessMessages;
Plugin_VisibleControlChange(CTRL_CODETOOLS_MAIN, tcTools.Visible);
end;
procedure TfrmMain.sciEditorClick(Sender: TObject);
begin
mnuCaret.Caption := Format(lLnCh, [sciEditor.GetCurrentLineNumber +1, sciEditor.GetCaretInLine +1]);
Plugin_EditorClick(False);
Plugin_UpdateSel(sciEditor.SelStart, sciEditor.SelLength, sciEditor.GetFirstVisibleLine);
end;
procedure TfrmMain.sciEditorKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var i: integer;
begin
mnuCaret.Caption := Format(lLnCh, [sciEditor.GetCurrentLineNumber +1, sciEditor.GetCaretInLine +1]);
Plugin_UpdateSel(sciEditor.SelStart, sciEditor.SelLength, sciEditor.GetFirstVisibleLine);
if Key = 46 then begin
mnuModified.Caption := lModified;
ActiveDoc.Modified := True;
end;
if sciEditor.Caret.LineVisible <> frmSettings.chkShowCaret.Checked then
sciEditor.Caret.LineVisible := frmSettings.chkShowCaret.Checked;
if sciEditor.Caret.LineBackColor <> frmSettings.CaretBack then begin
sciEditor.Caret.LineBackColor := frmSettings.CaretBack;
sciEditor.Colors.SelBack := clHighlight;
i := sciEditor.SelLength;
sciEditor.SelLength := 0;
sciEditor.SelStart := sciEditor.SelStart +i;
end;
end;
procedure TfrmMain.sciEditorKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var eStr: String;
begin
if not Started then exit;
mnuCaret.Caption := Format(lLnCh, [sciEditor.GetCurrentLineNumber +1, sciEditor.GetCaretInLine +1]);
Plugin_UpdateSel(sciEditor.SelStart, sciEditor.SelLength, sciEditor.GetFirstVisibleLine);
if (Key = 13) and (frmSettings.chkAutoIndent.Checked) and (Trim(sciEditor.Lines[sciEditor.GetCurrentLineNumber]) = '') then begin
if (sciEditor.LanguageManager.SelectedLanguage = 'Pawn') or (sciEditor.LanguageManager.SelectedLanguage = 'C++') then begin
eStr := Trim(RemoveStringsAndComments(sciEditor.Lines[sciEditor.GetCurrentLineNumber -1], True));
if (Copy(eStr, Length(eStr), 1) = '{') and (frmAutoIndent.chkIndentOpeningBrace.Checked) then
sciEditor.SelText := #9;
if (eStr = '') and (frmAutoIndent.chkUnindentLine.Checked) then begin
sciEditor.Lines[sciEditor.GetCurrentLineNumber] := Copy(sciEditor.Lines[sciEditor.GetCurrentLineNumber], 1, Length(sciEditor.Lines[sciEditor.GetCurrentLineNumber]) -1); // remove last indent..
sciEditor.SelStart := sciEditor.SelStart + Length(sciEditor.Lines[sciEditor.GetCurrentLineNumber]); // and jump to last position
end;
end;
end;
Application.ProcessMessages;
UpdateCI;
end;
procedure TfrmMain.mnuFoldAllClick(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
sciEditor.FoldAll;
Screen.Cursor := crDefault;
end;
procedure TfrmMain.tbxToolbarVisibleChanged(Sender: TObject);
begin
mnuShowFileTB.Checked := tbxToolbar.Visible;
end;
procedure TfrmMain.mnuShowFileTBClick(Sender: TObject);
begin
tbxToolbar.Visible := mnuShowFileTB.Checked;
end;
procedure TfrmMain.tbxEditVisibleChanged(Sender: TObject);
begin
mnuShowEditTB.Checked := tbxEdit.Visible;
end;
procedure TfrmMain.mnuShowEditTBClick(Sender: TObject);
begin
tbxEdit.Visible := mnuShowEditTB.Checked;
end;
procedure TfrmMain.tbxCodeSnippetsVisibleChanged(Sender: TObject);
begin
mnuShowCodeSnippets.Checked := tbxCodeSnippets.Visible;
end;
procedure TfrmMain.mnuShowCodeSnippetsClick(Sender: TObject);
begin
tbxCodeSnippets.Visible := mnuShowCodeSnippets.Checked;
end;
procedure TfrmMain.OnCodeSnippetClick(Sender: TObject);
begin
if Plugin_CodeSnippetClick(TSpTBXItem(Sender).Caption, GetCat, GetSnippet(GetCat, (Sender As TSpTBXItem).Caption)) then
sciEditor.SelText := GetSnippet(GetCat, (Sender As TSpTBXItem).Caption);
end;
procedure TfrmMain.mnuCopyMessageClick(Sender: TObject);
begin
if lstOutput.ItemIndex <> -1 then
Clipboard.SetTextBuf(PChar(lstOutput.Items[lstOutput.ItemIndex]));
end;
procedure TfrmMain.mnuCopyAllClick(Sender: TObject);
begin
Clipboard.SetTextBuf(PChar(lstOutput.Items.Text));
end;
procedure TfrmMain.mnuSaveToFileClick(Sender: TObject);
begin
sdSave.FilterIndex := 7;
if sdSave.Execute then
lstOutput.Items.SaveToFile(sdSave.FileName);
end;
procedure TfrmMain.ppmOutputInitPopup(Sender: TObject; PopupView: TTBView);
begin
mnuCopyMessage.Enabled := lstOutput.ItemIndex <> -1;
end;
procedure TfrmMain.mnuSearchForumsClick(Sender: TObject);
begin
if Plugin_ShowHelp(HELP_SEARCH) then
ShellExecute(Handle, 'open', 'http://www.amxmodx.org/forums/search.php', nil, nil, SW_SHOW);
end;
procedure TfrmMain.mnuOpenScriptingForumClick(Sender: TObject);
begin
if Plugin_ShowHelp(HELP_FORUMS) then
ShellExecute(Handle, 'open', 'http://www.amxmodx.org/forums/viewforum.php?f=8', nil, nil, SW_SHOW);
end;
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Shift = [ssCtrl, ssShift]) then begin
if Key = 16 then
Key := 0;
end;
end;
procedure TfrmMain.acControlCharHandler(Sender: TObject);
function TriggerMenuShortcut(eShortcut: TShortcut; Item: TTBCustomItem): Boolean;
var i: integer;
begin
Result := False;
for i := 0 to Item.Count -1 do begin
if Item.Items[i].ShortCut = eShortcut then begin
Item.Items[i].OnClick(Self);
Result := True;
exit;
end
else
TriggerMenuShortcut(eShortcut, Item.Items[i]);
end;
end;
var i: integer;
begin
Application.ProcessMessages;
// stop IRC Paster if escape is pressed
if ShortCutToText((Sender As TAction).ShortCut) = 'Esc' then
IRCPasterStop := True;
if sciEditor.CallTipActive then
sciEditor.CallTipCancel;
if sciEditor.AutoCActive then
sciEditor.AutoCCancel;
// Some menu commands are suppressed by the controlchars thingy, so they will be triggered manually
for i := 0 to tbxMenu.Items.Count -1 do begin
if TriggerMenuShortcut((Sender As TAction).ShortCut, tbxMenu.Items[i]) then
exit;
end;
Application.ProcessMessages;
end;
procedure TfrmMain.mnuEditorUndoClick(Sender: TObject);
begin
mnuUndo.Click;
end;
procedure TfrmMain.mnuEditorRedoClick(Sender: TObject);
begin
mnuRedo.Click;
end;
procedure TfrmMain.mnuEditorCopyClick(Sender: TObject);
begin
mnuCopy.Click;
end;
procedure TfrmMain.mnuEditorCutClick(Sender: TObject);
begin
mnuCut.Click;
end;
procedure TfrmMain.mnuEditorPasteClick(Sender: TObject);
begin
mnuPaste.Click;
end;
procedure TfrmMain.mnuToogleBookmarkClick(Sender: TObject);
begin
sciEditor.BookmarkToggle(sciEditor.GetCurrentLineNumber);
end;
procedure TfrmMain.mnuEditorDeleteClick(Sender: TObject);
begin
sciEditor.Clear;
end;
procedure TfrmMain.mnuEditorSelectAllClick(Sender: TObject);
begin
sciEditor.SelectAll;
end;
procedure TfrmMain.mnuGoToBookmarkClick(Sender: TObject);
begin
sciEditor.BookmarkNext;
end;
procedure TfrmMain.mnuSearchDialogClick(Sender: TObject);
begin
Plugin_Search(frmSearch.cboSearchFor.Items.Text, frmSearch.cboSearchFor.Text, True, False, frmSearch.chkCaseSensivity.Checked, frmSearch.chkWholeWordsOnly.Checked, frmSearch.chkSearchFromCaret.Checked, frmSearch.chkSelectedTextOnly.Checked, frmSearch.chkRegularExpression.Checked, frmSearch.chkForward.Checked);
if frmSearch.ShowModal = mrOk then begin
if not Plugin_Search(frmSearch.cboSearchFor.Items.Text, frmSearch.cboSearchFor.Text, False, False, frmSearch.chkCaseSensivity.Checked, frmSearch.chkWholeWordsOnly.Checked, frmSearch.chkSearchFromCaret.Checked, frmSearch.chkSelectedTextOnly.Checked, frmSearch.chkRegularExpression.Checked, frmSearch.chkForward.Checked) then
exit;
with sciSearchReplace do begin
SearchBackwards := frmSearch.chkBackward.Checked;
SearchCaseSensitive := frmSearch.chkCaseSensivity.Checked;
SearchFromCaret := frmSearch.chkSearchFromCaret.Checked;
SearchSelectionOnly := frmSearch.chkSelectedTextOnly.Checked;
SearchWholeWords := frmSearch.chkWholeWordsOnly.Checked;
SearchRegex := frmSearch.chkRegularExpression.Checked;
SearchText := frmSearch.cboSearchFor.Text;
Screen.Cursor := crHourGlass;
DoSearchReplaceText(False, frmSearch.chkBackward.Checked);
Screen.Cursor := crDefault;
end;
end;
end;
procedure TfrmMain.mnuReplaceClick(Sender: TObject);
var Stop: Boolean;
begin
if frmReplace.ShowModal = mrOk then begin
if not Plugin_SearchReplace(frmReplace.cboSearchFor.Text, frmReplace.cboReplaceWith.Text, frmReplace.cboSearchFor.Items.Text, frmReplace.cboReplaceWith.Items.Text, frmSearch.chkCaseSensivity.Checked, frmSearch.chkWholeWordsOnly.Checked, frmSearch.chkSearchFromCaret.Checked, frmSearch.chkSelectedTextOnly.Checked, frmSearch.chkRegularExpression.Checked, frmSearch.chkForward.Checked) then
exit;
with sciSearchReplace do begin
SearchBackwards := frmReplace.chkBackward.Checked;
SearchCaseSensitive := frmReplace.chkCaseSensivity.Checked;
SearchFromCaret := frmReplace.chkSearchFromCaret.Checked;
SearchSelectionOnly := frmReplace.chkSelectedTextOnly.Checked;
SearchWholeWords := frmReplace.chkWholeWordsOnly.Checked;
SearchRegex := frmReplace.chkRegularExpression.Checked;
SearchText := frmReplace.cboSearchFor.Text;
Stop := False;
Screen.Cursor := crHourGlass;
repeat
DoSearchReplaceText(False, frmReplace.chkBackward.Checked);
if sciEditor.SelLength = 0 then
Stop := True
else
sciEditor.SelText := frmReplace.cboReplaceWith.Text;
until (not frmReplace.chkReplaceAll.Checked) or (Stop);
Screen.Cursor := crDefault;
end;
end;
end;
procedure TfrmMain.mnuSearchAgainClick(Sender: TObject);
begin
if not Plugin_Search(frmSearch.cboSearchFor.Items.Text, frmSearch.cboSearchFor.Text, False, True, frmSearch.chkCaseSensivity.Checked, frmSearch.chkWholeWordsOnly.Checked, frmSearch.chkSearchFromCaret.Checked, frmSearch.chkSelectedTextOnly.Checked, frmSearch.chkRegularExpression.Checked, frmSearch.chkForward.Checked) then
exit;
sciSearchReplace.SearchText := frmSearch.cboSearchFor.Text;
sciSearchReplace.SearchFromCaret := True;
Screen.Cursor := crHourGlass;
sciSearchReplace.DoSearchReplaceText(False, frmSearch.chkBackward.Checked);
Screen.Cursor := crDefault;
end;
procedure TfrmMain.mnuGoToLineClick(Sender: TObject);
begin
if frmGoToLine.ShowModal = mrOk then begin
sciEditor.GotoLineEnsureVisible(StrToInt(frmGoToLine.txtGoToLine.Text) -1);
UpdateCI;
end;
end;
procedure TfrmMain.mnuPrintClick(Sender: TObject);
begin
sciPrinter.Title := ExtractFileName(ActiveDoc.FileName);
sciPrinter.PrintRange := prAllPages;
if sciEditor.SelLength <> 0 then begin
case MessageBox(Handle, PChar(lPrintSelection), PChar(Application.Title), MB_ICONQUESTION + MB_YESNOCANCEL) of
mrYes: sciPrinter.PrintRange := prSelection;
mrCancel: exit;
end;
end;
sciPrinter.Print;
end;
procedure TfrmMain.mnuSaveAllFilesClick(Sender: TObject);
var a,b: integer;
Collection: TDocCollection;
begin
case tsMain.ActiveTabIndex of
0: Collection := PAWNProjects;
1: Collection := CPPProjects;
else Collection := OtherProjects;
end;
frmAllFilesForm.Caption := lSaveAllCaption1;
frmAllFilesForm.lblCaption.Caption := lSaveAllCaption2;
frmAllFilesForm.lstFiles.Clear;
for a := 0 to Collection.Count -1 do begin
if TDocument(Collection.Items[a]).Modified then
frmAllFilesForm.lstFiles.Checked[frmAllFilesForm.lstFiles.Items.AddObject(IntToStr(a +1) + ') ' + ExtractFileName(TDocument(Collection.Items[a]).FileName), TObject(a))] := True;
end;
if frmAllFilesForm.lstFiles.Items.Count = 0 then begin
MessageBox(Handle, PChar(lNoFilesToSave), PChar(Application.Title), MB_ICONINFORMATION);
exit;
end;
if frmAllFilesForm.ShowModal = mrOk then begin
for a := 0 to frmAllFilesForm.lstFiles.Items.Count -1 do begin
if frmAllFilesForm.lstFiles.Checked[a] then begin
b := Integer(frmAllFilesForm.lstFiles.Items.Objects[a]);
if TDocument(Collection.Items[b]).Untitled then begin
if sdSave.Execute then begin
TDocument(Collection.Items[b]).FileName := AddExtension(sdSave.FileName, TDocument(Collection.Items[b]).Highlighter);
TDocument(Collection.Items[b]).Save;
TSpTBXTabItem(tsDocuments.Items[b]).Caption := TDocument(Collection.Items[b]).Title;
end
else
exit;
end
else
TDocument(Collection.Items[b]).Save;
if ActiveDoc = Collection.Items[b] then
mnuModified.Caption := '';
end;
end;
end;
end;
procedure TfrmMain.sciEditorKeyPress(Sender: TObject; var Key: Char);
begin
if Started then begin
if not Plugin_KeyPress(Key) then begin
Key := #0;
exit;
end;
mnuModified.Caption := lModified;
ActiveDoc.Modified := True;
if (Key = '}') and (frmSettings.chkAutoIndent.Checked) then begin
if (Trim(sciEditor.Lines[sciEditor.GetCurrentLineNumber]) = '') and (frmAutoIndent.chkUnindentPressingClosingBrace.Checked) then begin
if (sciEditor.LanguageManager.SelectedLanguage = 'Pawn') or (sciEditor.LanguageManager.SelectedLanguage = 'C++') then begin
sciEditor.Lines[sciEditor.GetCurrentLineNumber] := Copy(sciEditor.Lines[sciEditor.GetCurrentLineNumber], 1, Length(sciEditor.Lines[sciEditor.GetCurrentLineNumber]) -1); // remove last indent..
sciEditor.SelStart := sciEditor.SelStart + Length(sciEditor.Lines[sciEditor.GetCurrentLineNumber]); // and jump to last position
end;
end;
end;
end;
end;
procedure TfrmMain.mnuCloseAllFilesClick(Sender: TObject);
var i: integer;
Collection: TDocCollection;
begin
case tsMain.ActiveTabIndex of
0: Collection := PAWNProjects;
1: Collection := CPPProjects;
else Collection := OtherProjects;
end;
frmAllFilesForm.Caption := lCloseAllCaption1;
frmAllFilesForm.lblCaption.Caption := lCloseAllCaption2;
frmAllFilesForm.lstFiles.Clear;
for i := 0 to Collection.Count -1 do
frmAllFilesForm.lstFiles.Checked[frmAllFilesForm.lstFiles.Items.Add(IntToStr(i +1) + ') ' + ExtractFileName(TDocument(Collection.Items[i]).FileName))] := True;
if frmAllFilesForm.ShowModal = mrOk then begin
for i := Collection.Count -1 downto 0 do begin
if not CloseDocument(TDocument(Collection.Items[i])) then
exit;
end;
end;
end;
procedure TfrmMain.mnuIndenterClick(Sender: TObject);
begin
IndentCode;
end;
procedure TfrmMain.mnuUnindenterClick(Sender: TObject);
begin
UnindentCode;
end;
procedure TfrmMain.mnuPasterClick(Sender: TObject);
var i: integer;
eTo, eFrom: Integer;
eLine: String;
begin
if FindWindow('mirc', nil) = 0 then begin
MessageBox(Handle, PChar(lNoMIRCWindowOpen), PChar(Application.Title), MB_ICONERROR);
exit;
end;
frmIRCPaster.chkDelay.Checked := Pos('gamesurge', LowerCase(mIRCGet('mIRC', 'SERVER', 'SERVER'))) = 0;
if frmIRCPaster.ShowModal = mrOk then begin
{ All }
if frmIRCPaster.optAll.Checked then begin
eFrom := 0;
eTo := sciEditor.Lines.Count -1;
end
{ Special Lines }
else if frmIRCPaster.optLines.Checked then begin
eFrom := StrToInt(frmIRCPaster.txtFrom.Text) -1;
eTo := StrToInt(frmIRCPaster.txtTo.Text) -1;
end
{ Selected }
else begin
eFrom := LineFromPos(sciEditor.SelStart);
eTo := LineFromPos(sciEditor.SelStart + sciEditor.SelLength);
end;
pbLoading.Max := eTo - eFrom;
pbLoading.Position := 0;
ShowProgress;
for i := eFrom to eTo do begin
if (FindWindow('mirc', nil) = 0) or (Application.Terminated) or (IRCPasterStop) then
break;
pbLoading.Position := i;
SetProgressStatus('Pasting code...');
eLine := sciEditor.Lines[i];
eLine := Trim(eLine);
eLine := StringReplace(eLine, #9, #32, [rfReplaceAll]);
if frmIRCPaster.chkColors.Checked then
mIRCDDE('mIRC', 'COMMAND', '/msg ' + frmIRCPaster.txtChannel.Text + #32 + GetColoredLine(i))
else
mIRCDDE('mIRC', 'COMMAND', '/msg ' + frmIRCPaster.txtChannel.Text + #32 + eLine);
if frmIRCPaster.chkDelay.Checked then
Delay(eConfig.ReadInteger('Misc', 'IRCPasteDelay', 2500));
end;
HideProgress;
end;
end;
procedure TfrmMain.mnuPluginsIniEditorClick(Sender: TObject);
begin
frmPluginsIniEditor.txtFile.Clear;
if FileExists(GetAMXXDir(True) + 'configs\plugins.ini') then
frmPluginsIniEditor.chkEditLocal.Click
else if (frmSettings.txtHost.Text <> '') and (frmPluginsIniEditor.chkEditFTP.Checked) then
frmPluginsIniEditor.chkEditFTP.Click
else
frmPluginsIniEditor.chkEditLocal.Click;
if frmPluginsIniEditor.txtFile.Text = '' then exit;
if frmPluginsIniEditor.ShowModal = mrOk then begin
Screen.Cursor := crHourGlass;
if frmPluginsIniEditor.chkEditFTP.Checked then begin
if not IdFTP.Connected then begin
if TryConnect <> 0 then
exit;
end;
try
IdFTP.ChangeDir(frmSettings.txtDefaultDir.Text + 'configs/');
except
IdFTP.Disconnect;
MessageBox(Handle, PChar(lInvalidDirectory), PChar(Application.Title), MB_ICONERROR);
Screen.Cursor := crDefault;
exit;
end;
frmPluginsIniEditor.txtFile.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + 'plugins.ini');
IdFTP.TransferType := ftASCII;
IdFTP.Put(ExtractFilePath(ParamStr(0)) + 'plugins.ini', 'plugins.ini');
DeleteFile(ExtractFilePath(ParamStr(0)) + 'plugins.ini');
end
else
frmPluginsIniEditor.txtFile.Lines.SaveToFile(frmPluginsIniEditor.odOpen.FileName);
Screen.Cursor := crDefault;
end;
end;
procedure TfrmMain.cmdCancelClick(Sender: TObject);
begin
Cancel := True;
HideProgress;
Screen.Cursor := crDefault;
end;
procedure TfrmMain.mnuSocketTerminalClick(Sender: TObject);
begin
frmSocketsTerminal.ShowModal;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var i, k: integer;
eRoot: TTreeNode;
eItem: TDocument;
eSavedFiles: TStringList;
begin
ActiveDoc.Code.Text := sciEditor.Lines.Text;
frmClose.trvFiles.Items.Clear;
{ PAWN Projects }
eRoot := frmClose.trvFiles.Items.Add(nil, tsMain.Items[0].Caption);
for i := 0 to PAWNProjects.Count -1 do begin
if TDocument(PAWNProjects.Items[i]).Modified then
frmClose.trvFiles.Items.AddChild(eRoot, IntToStr(i +1) + '. ' + ExtractFileName(TDocument(PAWNProjects.Items[i]).FileName));
end;
if eRoot.Count = 0 then
eRoot.Destroy
else
eRoot.Expand(False);
{ C++ Projects }
eRoot := frmClose.trvFiles.Items.Add(nil, tsMain.Items[1].Caption);
for i := 0 to CPPProjects.Count -1 do begin
if TDocument(CPPProjects.Items[i]).Modified then
frmClose.trvFiles.Items.AddChild(eRoot, IntToStr(i +1) + '. ' + ExtractFileName(TDocument(CPPProjects.Items[i]).FileName));
end;
if eRoot.Count = 0 then
eRoot.Destroy
else
eRoot.Expand(False);
{ Other Projects }
eRoot := frmClose.trvFiles.Items.Add(nil, tsMain.Items[1].Caption);
for i := 0 to OtherProjects.Count -1 do begin
if TDocument(OtherProjects.Items[i]).Modified then
frmClose.trvFiles.Items.AddChild(eRoot, IntToStr(i +1) + '. ' + ExtractFileName(TDocument(OtherProjects.Items[i]).FileName));
end;
if eRoot.Count = 0 then
eRoot.Destroy
else
eRoot.Expand(False);
eSavedFiles := TStringList.Create;
eSavedFiles.Clear;
for i := 0 to frmSettings.lvPlugins.Items.Count -1 do begin
if frmSettings.lvPlugins.Items[i].Data <> nil then
eSavedFiles.Add('LOADED ' + frmSettings.lvPlugins.Items[i].SubItems[0])
else
eSavedFiles.Add('UNLOADED ' + frmSettings.lvPlugins.Items[i].SubItems[0]);
end;
eSavedFiles.SaveToFile(ExtractFilePath(ParamStr(0)) + 'config\Plugins.cfg');
eSavedFiles.Clear;
if frmClose.trvFiles.Items.Count <> 0 then begin
frmClose.cmdSave.Caption := lCloseCaption;
if (frmClose.ShowModal = mrOk) then begin
if frmClose.cmdSave.Caption = lSaveCaption then begin
for i := 0 to frmClose.trvFiles.Items.Count -1 do begin
{ PAWN Projects }
if frmClose.trvFiles.Items[i].Text = tsMain.Items[0].Caption then begin
with frmClose.trvFiles.Items[i] do begin
for k := 0 to Count -1 do begin
if frmClose.trvFiles.Checked[Item[k]] then begin
eItem := TDocument(PAWNProjects.Items[StrToInt(Copy(Item[k].Text, 1, Pos('.', Item[k].Text) -1)) -1]);
// Process item here
if not eItem.Untitled then
eItem.Save
else begin
frmMain.sdSave.FilterIndex := 1;
if frmMain.sdSave.Execute then begin
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter);
eItem.Save;
end
else begin
Action := caNone;
exit;
end;
end;
eSavedFiles.Add(eItem.FileName);
end;
end;
end;
end;
{ C++ Projects }
if frmClose.trvFiles.Items[i].Text = tsMain.Items[1].Caption then begin
with frmClose.trvFiles.Items[i] do begin
for k := 0 to Count -1 do begin
if frmClose.trvFiles.Checked[Item[k]] then begin
eItem := TDocument(CPPProjects.Items[StrToInt(Copy(Item[k].Text, 1, Pos('.', Item[k].Text) -1)) -1]);
// Process item here
if not eItem.Untitled then
eItem.Save
else begin
frmMain.sdSave.FilterIndex := 2;
if frmMain.sdSave.Execute then begin
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter);
eItem.Save;
end
else begin
Action := caNone;
exit;
end;
end;
eSavedFiles.Add(eItem.FileName);
end;
end;
end;
end;
{ Other Projects }
if frmClose.trvFiles.Items[i].Text = tsMain.Items[2].Caption then begin
with frmClose.trvFiles.Items[i] do begin
for k := 0 to Count -1 do begin
if frmClose.trvFiles.Checked[Item[k]] then begin
eItem := TDocument(OtherProjects.Items[StrToInt(Copy(Item[k].Text, 1, Pos('.', Item[k].Text) -1)) -1]);
// Process item here
if not eItem.Untitled then
eItem.Save
else begin
frmMain.sdSave.FilterIndex := 0;
if frmMain.sdSave.Execute then begin
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter);
eItem.Save;
end
else begin
Action := caNone;
exit;
end;
end;
eSavedFiles.Add(eItem.FileName);
end;
end;
end;
end;
end;
end;
Application.Terminate;
Started := False;
end
else begin
Action := caNone;
exit;
end;
end
else begin
Application.Terminate;
Started := False;
end;
if eSavedFiles.Count = 0 then begin
for i := 0 to PAWNProjects.Count -1 do begin
if (not TDocument(PAWNProjects.Items[i]).Untitled) then
eSavedFiles.Add(TDocument(PAWNProjects.Items[i]).FileName);
end;
for i := 0 to CPPProjects.Count -1 do begin
if (not TDocument(CPPProjects.Items[i]).Untitled) then
eSavedFiles.Add(TDocument(CPPProjects.Items[i]).FileName);
end;
for i := 0 to OtherProjects.Count -1 do begin
if (not TDocument(OtherProjects.Items[i]).Untitled) then
eSavedFiles.Add(TDocument(OtherProjects.Items[i]).FileName);
end;
end;
eSavedFiles.SaveToFile(ExtractFilePath(ParamStr(0)) + 'config\Cache.cfg');
eSavedFiles.Destroy;
end;
procedure TfrmMain.trvExplorerDblClick(Sender: TObject);
begin
if Assigned(trvExplorer.Selected) then begin
if (trvExplorer.Selected.ImageIndex <> 42) and (trvExplorer.Selected.ImageIndex <> 43) then begin
sciEditor.GotoLineEnsureVisible(Integer(trvExplorer.Selected.Data));
sciEditor.SetFocus;
UpdateCI;
end;
end;
end;
procedure TfrmMain.tiPAWNClick(Sender: TObject);
begin
trvExplorer.Enabled := True;
jviCode.Enabled := True;
mnuGenerators.Visible := True;
mnuIndenter.Enabled := True;
mnuCompile.Visible := True;
mnuRegisterPluginsIniLocal.Enabled := True;
mnuRegisterPluginsIniWeb.Enabled := True;
UpdateCI;
end;
procedure TfrmMain.tiCPPClick(Sender: TObject);
begin
trvExplorer.Enabled := False;
jviCode.Clear;
AddField('', 'This language is not supported.', '');
jviCode.Enabled := False;
mnuGenerators.Visible := False;
mnuIndenter.Enabled := True;
mnuCompile.Visible := True;
mnuRegisterPluginsIniLocal.Enabled := False;
mnuRegisterPluginsIniWeb.Enabled := False;
end;
procedure TfrmMain.tiOtherClick(Sender: TObject);
begin
trvExplorer.Enabled := False;
jviCode.Clear;
AddField('', 'This language is not supported.', '');
jviCode.Enabled := False;
mnuGenerators.Visible := False;
mnuIndenter.Enabled := False;
mnuCompile.Visible := False;
mnuRegisterPluginsIniLocal.Enabled := False;
mnuRegisterPluginsIniWeb.Enabled := False;
end;
procedure TfrmMain.mnuOpenHelpClick(Sender: TObject);
begin
if Plugin_ShowHelp(HELP_DEFAULT) then
ShellExecute(Handle, 'open', 'http://www.amxmodx.org/doc/', nil, nil, SW_SHOW);
end;
procedure TfrmMain.mnuHudmessageClick(Sender: TObject);
function Dot(eIn: String): String;
begin
Result := StringReplace(eIn, ',', '.', [rfReplaceAll]);
end;
var eStr: String;
begin
frmHudMsgGenerator.chkXCenter.Checked := False;
frmHudMsgGenerator.chkYCenter.Checked := False;
frmHudMsgGenerator.txtXPos.Text := '0,00';
frmHudMsgGenerator.txtYPos.Text := '0,00';
frmHudMsgGenerator.lblHudMsg.Left := 0;
frmHudMsgGenerator.lblHudMsg.Top := 0;
frmHudMsgGenerator.lblHudMsg.Font.Color := clRed;
frmHudMsgGenerator.txtText.Text := '';
frmHudMsgGenerator.CurrColor := clRed;
if frmHudMsgGenerator.ShowModal = mrOk then begin
eStr := Format(GetIndents + 'set_hudmessage(%u, %u, %u, %s, %s, 0, 6.0, %s)', [GetRValue(frmHudMsgGenerator.CurrColor), GetGValue(frmHudMsgGenerator.CurrColor), GetBValue(frmHudMsgGenerator.CurrColor), Dot(frmHudMsgGenerator.txtXPos.Text), Dot(frmHudMsgGenerator.txtYPos.Text), Dot(frmHudMsgGenerator.txtTimeToShow.Text)]);
eStr := eStr + #13#10 + GetIndents + 'show_hudmessage(id, "' + frmHudMsgGenerator.txtText.Text + '")';
sciEditor.Lines.Insert(sciEditor.GetCurrentLineNumber, eStr);
end;
end;
procedure TfrmMain.mnuDoCompileClick(Sender: TObject);
begin
if not Plugin_Compile(COMP_DEFAULT, GetCurrLang.Name, ActiveDoc.FileName, True) then
exit;
if (LowerCase(ExtractFileExt(ActiveDoc.FileName)) = '.inc') or (LowerCase(ExtractFileExt(ActiveDoc.FileName)) = '.h') then exit;
if tsMain.ActiveTabIndex = 0 then
DoCompilePAWN(COMP_DEFAULT)
else if (LowerCase(ExtractFileExt(ActiveDoc.FileName)) = '.htm') or (LowerCase(ExtractFileExt(ActiveDoc.FileName)) = '.html') then begin
if IEInstalled then
frmHTMLPreview.Show
else
MessageBox(Handle, PChar(lInternetExplorerRequired), PChar(Application.Title), MB_ICONINFORMATION);
end;
end;
procedure TfrmMain.lstOutputMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var eItem: Integer;
begin
eItem := lstOutput.ItemAtPos(Point(X, Y), True);
if eItem = -1 then
lstOutput.Hint := ''
else begin
if (lstOutput.Hint <> lstOutput.Items[eItem]) and (Canvas.TextWidth(lstOutput.Items[eItem]) > lstOutput.Width) then
lstOutput.Hint := lstOutput.Items[eItem];
end;
end;
procedure TfrmMain.lstOutputDblClick(Sender: TObject);
var eLine: Integer;
eStr: String;
begin
if not Plugin_OutputDblClick(lstOutput.ItemIndex) then
exit;
if (lstOutput.ItemIndex <> -1) then begin
eStr := lstOutput.Items[lstOutput.ItemIndex];
while Pos(#32, eStr) <> 0 do
Delete(eStr, 1, 1);
if IsNumeric(eStr) then begin
eLine := StrToInt(eStr);
SetErrorLine(eLine);
end;
end;
end;
procedure TfrmMain.lstOutputMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbRight) and (Plugin_OutputPopup(lstOutput.ItemIndex)) then begin
lstOutput.ItemIndex := lstOutput.ItemAtPos(Point(X, Y), True);
mnuCopyMessage.Enabled := lstOutput.ItemAtPos(Point(X, Y), True) <> -1;
ppmOutput.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
end;
procedure TfrmMain.SetErrorLine(eLine: Integer);
begin
eLine := eLine -1;
sciEditor.SetFocus;
sciEditor.SelLength := 0;
sciEditor.GotoLineEnsureVisible(eLine);
sciEditor.SelLength := Length(sciEditor.Lines[eLine]);
sciEditor.Caret.LineVisible := True;
sciEditor.Caret.LineBackColor := clMaroon;
sciEditor.Colors.SelBack := clMaroon;
eErrorLine := eLine;
end;
procedure TfrmMain.sciEditorMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var i: integer;
begin
if not Started then exit;
if sciEditor.Caret.LineVisible <> frmSettings.chkShowCaret.Checked then
sciEditor.Caret.LineVisible := frmSettings.chkShowCaret.Checked;
if sciEditor.Caret.LineBackColor <> frmSettings.CaretBack then begin
sciEditor.Caret.LineBackColor := frmSettings.CaretBack;
sciEditor.Colors.SelBack := clHighlight;
i := sciEditor.SelLength;
sciEditor.SelLength := 0;
sciEditor.SelStart := sciEditor.SelStart +i;
end;
UpdateCI;
end;
procedure TfrmMain.lstOutputEnter(Sender: TObject);
var i: integer;
begin
if sciEditor.Caret.LineVisible <> frmSettings.chkShowCaret.Checked then
sciEditor.Caret.LineVisible := frmSettings.chkShowCaret.Checked;
if sciEditor.Caret.LineBackColor <> frmSettings.CaretBack then begin
sciEditor.Caret.LineBackColor := frmSettings.CaretBack;
sciEditor.Colors.SelBack := clHighlight;
i := sciEditor.SelLength;
sciEditor.SelLength := 0;
sciEditor.SelStart := sciEditor.SelStart +i;
end;
end;
procedure TfrmMain.mnuCompileAndStartHLClick(Sender: TObject);
begin
if not Plugin_Compile(COMP_STARTHL, GetCurrLang.Name, ActiveDoc.FileName, True) then
exit;
if tsMain.ActiveTabIndex = 0 then
DoCompilePAWN(COMP_STARTHL);
end;
procedure TfrmMain.mnuCompileAndUploadClick(Sender: TObject);
begin
if not Plugin_Compile(COMP_UPLOAD, GetCurrLang.Name, ActiveDoc.FileName, True) then
exit;
if tsMain.ActiveTabIndex = 0 then
DoCompilePAWN(COMP_UPLOAD);
end;
procedure TfrmMain.mnuRegisterPluginsIniLocalClick(Sender: TObject);
function RemComments(eLine: String): String;
var a, b: integer;
begin
if Length(eLine) > 0 then begin
b := 0;
for a := 1 to Length(eLine) -1 do begin
if (eLine[a] = ';') or (eLine[a] = '/') then begin
b := a;
break;
end;
end;
if (b = 0) and (Pos(' debug', LowerCase(eLine)) <> 0) then
b := Pos(' debug', LowerCase(eLine));
if b <> 0 then
eLine := Trim(Copy(eLine, 1, b -1));
end;
Result := Trim(eLine);
end;
var eStr: TStringList;
i: integer;
eFound: Boolean;
begin
if ActiveDoc.Untitled then begin
MessageBox(Handle, PChar(lNoUntitledRegister), PChar(Application.Title), MB_ICONINFORMATION);
exit;
end;
if FileExists(GetAMXXDir(True) + 'configs\plugins.ini') then begin
eFound := False;
eStr := TStringList.Create;
eStr.LoadFromFile(GetAMXXDir(True) + 'configs\plugins.ini');
for i := 0 to eStr.Count -1 do begin
if (Copy(eStr[i], 1, 1) <> ';') and (Copy(eStr[i], 1, 2) <> '//') then begin
if LowerCase(RemComments(eStr[i])) = LowerCase(ChangeFileExt(ExtractFileName(ActiveDoc.FileName), '.amxx')) then begin
eFound := True;
break;
end;
end;
end;
if eFound then
MessageBox(Handle, PChar(lAlreadyRegistered), PChar(Application.Title), MB_ICONINFORMATION)
else begin
eStr.Add(ChangeFileExt(ExtractFileName(ActiveDoc.FileName), '.amxx'));
eStr.SaveToFile(GetAMXXDir(True) + 'configs\plugins.ini');
MessageBox(Handle, PChar(lSuccessfulRegistered), PChar(Application.Title), MB_ICONINFORMATION);
end;
eStr.Destroy;
end;
end;
procedure TfrmMain.mnuRegisterPluginsIniWebClick(Sender: TObject);
function RemComments(eLine: String): String;
var a, b: integer;
begin
if Length(eLine) > 0 then begin
b := 0;
for a := 1 to Length(eLine) -1 do begin
if (eLine[a] = ';') or (eLine[a] = '/') then begin
b := a;
break;
end;
end;
eLine := Trim(Copy(eLine, 1, b -1));
end;
Result := eLine;
end;
var eStr: TStringList;
i: integer;
eFound: Boolean;
begin
if ActiveDoc.Untitled then begin
MessageBox(Handle, PChar(lNoUntitledRegister), PChar(Application.Title), MB_ICONINFORMATION);
exit;
end;
Screen.Cursor := crHourGlass;
if not IdFTP.Connected then begin
if TryConnect <> 0 then
exit;
end;
try
IdFTP.ChangeDir(frmSettings.txtDefaultDir.Text + 'configs/');
IdFTP.Get('plugins.ini', ExtractFilePath(ParamStr(0)) + 'plugins.ini');
except
Screen.Cursor := crDefault;
MessageBox(Handle, PChar(lFailedUpdatePluginsIni), PChar(Application.Title), MB_ICONERROR);
end;
eFound := False;
eStr := TStringList.Create;
eStr.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'plugins.ini');
for i := 0 to eStr.Count -1 do begin
if (Copy(eStr[i], 1, 1) <> ';') and (Copy(eStr[i], 1, 2) <> '//') then begin
if LowerCase(RemComments(eStr[i])) = LowerCase(ChangeFileExt(ExtractFileName(ActiveDoc.FileName), '.amxx')) then begin
eFound := True;
break;
end;
end;
end;
if eFound then begin
Screen.Cursor := crDefault;
MessageBox(Handle, PChar(lAlreadyRegistered), PChar(Application.Title), MB_ICONINFORMATION);
exit;
end
else begin
eStr.Add(ChangeFileExt(ExtractFileName(ActiveDoc.FileName), '.amxx'));
eStr.SaveToFile(ExtractFilePath(ParamStr(0)) + 'plugins.ini');
Screen.Cursor := crDefault;
MessageBox(Handle, PChar(lSuccessfulRegistered), PChar(Application.Title), MB_ICONINFORMATION);
end;
eStr.Destroy;
try
IdFTP.TransferType := ftASCII;
IdFTP.Put(ExtractFilePath(ParamStr(0)) + 'plugins.ini', 'plugins.ini');
IdFTP.Disconnect;
except
Screen.Cursor := crDefault;
MessageBox(Handle, PChar(lFailedUpdatePluginsIni), PChar(Application.Title), MB_ICONERROR);
end;
end;
procedure TfrmMain.sciAutoCompleteBeforeShow(Sender: TObject;
const Position: Integer; ListToDisplay: TStrings;
var CancelDisplay: Boolean);
var eCurrStyle: Integer;
begin
if not Plugin_AutoCompleteShow(ListToDisplay.GetText) then begin
CancelDisplay := True;
exit;
end;
if (Started) and (Assigned(GetStyleAt(sciEditor.SelStart))) then begin
eCurrStyle := GetStyleAt(sciEditor.SelStart).StyleNumber;
if (ActiveDoc.Highlighter = 'Pawn') or (ActiveDoc.Highlighter = 'C++') then begin
CancelDisplay := (eCurrStyle = 12) or (eCurrStyle = 1) or (eCurrStyle = 2) or (eCurrStyle = 3) or (eCurrStyle = 15);
CancelDisplay := (CancelDisplay) or (Pos('#', Trim(sciEditor.Lines[sciEditor.GetCurrentLineNumber])) = 1);
CancelDisplay := (CancelDisplay) or (IsAtStart('new', sciEditor.Lines[sciEditor.GetCurrentLineNumber], False));
end;
end;
end;
procedure TfrmMain.mnuMOTDGeneratorClick(Sender: TObject);
var eStr: TStringList;
i: integer;
begin
if (GetCurrLang.Name = 'HTML') then begin
eStr := TStringList.Create;
eStr.Text := StringReplace(sciEditor.Lines.Text, #9, '', [rfReplaceAll]);
for i := 0 to eStr.Count -1 do
eStr[i] := '"' + eStr[i] + '\n" +';
frmMOTDGen.txtMOTD.Lines.Assign(eStr);
eStr.Destroy;
frmMOTDGen.ShowModal;
end
else begin
mnuNewHTML.Click;
if IEInstalled then
frmHTMLPreview.Show;
MessageBox(Handle, PChar(lUseMOTDAgain), PChar(Application.Title), MB_ICONINFORMATION);
end;
end;
procedure TfrmMain.mnuHeaderPAWNClick(Sender: TObject);
begin
if not Plugin_CreateNewFile(NEW_PAWN_HEADER, True) then exit;
if tsMain.ActiveTabIndex <> 0 then
ActivateProjects(0, False);
PAWNProjects.Activate(PAWNProjects.Add('Untitled.inc'), False);
sciEditor.Lines.Add('/* Header generated by AMXX-Studio*/');
sciEditor.Lines.Add('');
Plugin_CreateNewFile(NEW_PAWN_HEADER, False);
end;
procedure TfrmMain.OnTabSelect(Sender: TTBCustomItem;
Viewer: TTBItemViewer; Selecting: Boolean);
begin
if (GetAsyncKeyState(VK_RBUTTON) <> 0) and (not pnlLoading.Visible) and (not Selecting) then begin
SelectedTab := TSpTBXTabItem(Sender);
ppmDocuments.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
end;
procedure TfrmMain.mnuPCloseClick(Sender: TObject);
var Collection: TDocCollection;
begin
try
case tsMain.ActiveTabIndex of
0: Collection := PAWNProjects; // PAWN
1: Collection := CPPProjects; // C++
else Collection := OtherProjects; // Other
end;
if tsDocuments.Items.IndexOf(SelectedTab) <> -1 then
CloseDocument(TDocument(Collection.Items[tsDocuments.Items.IndexOf(SelectedTab)]));
except
Application.ProcessMessages; // :o
end;
end;
procedure TfrmMain.mnuPCloseAllFilesClick(Sender: TObject);
begin
mnuCloseAllFiles.Click;
end;
procedure TfrmMain.mnuTNewClick(Sender: TObject);
begin
case tsMain.ActiveTabIndex of
0: mnuNewPlugin.Click;
1: mnuNewUnit.Click;
2: mnuNewTextfile.Click;
end;
end;
procedure TfrmMain.jviCodeItemValueChanged(Sender: TObject;
Item: TJvCustomInspectorItem);
function FindItem(eParent: TJvCustomInspectorItem; eName: String): TJvCustomInspectorItem;
var i: integer;
begin
Result := nil;
for i := 0 to eParent.Count -1 do begin
if eParent.Items[i].DisplayName = eName then
Result := eParent.Items[i];
end;
end;
var eLine, eTemp: String;
i: integer;
begin
if (Assigned(Item.Parent)) then begin
// Variables and Constants
if (Pos('Constant', Item.Parent.DisplayName) = 1) or (Pos('Variable', Item.Parent.DisplayName) = 1) then begin
eLine := eFormatSettings;
for i := 0 to jviCode.Root.Count -1 do begin
eTemp := '';
if Pos('Constant', jviCode.Root.Items[i].DisplayName) = 1 then begin
if (FindItem(jviCode.Root.Items[i], 'Name').DisplayValue <> '') then begin
eTemp := eTemp + ', ';
if Assigned(FindItem(jviCode.Root.Items[i], 'Type')) then
eTemp := eTemp + FindItem(jviCode.Root.Items[i], 'Type').DisplayValue + ':';
eTemp := eTemp + FindItem(jviCode.Root.Items[i], 'Name').DisplayValue;
eTemp := eTemp + ' = ' + FindItem(jviCode.Root.Items[i], 'Value').DisplayValue;
end;
end
else begin
if (FindItem(jviCode.Root.Items[i], 'Name').DisplayValue <> '') then begin
eTemp := eTemp + ', ';
if Assigned(FindItem(jviCode.Root.Items[i], 'Type')) then
eTemp := eTemp + FindItem(jviCode.Root.Items[i], 'Type').DisplayValue + ':';
eTemp := eTemp + FindItem(jviCode.Root.Items[i], 'Name').DisplayValue;
end;
end;
if jviCode.Root.Count = 1 then
eLine := StringReplace(eLine, '-' + jviCode.Root.Items[i].DisplayName + ' 1-', eTemp, [])
else
eLine := StringReplace(eLine, '-' + jviCode.Root.Items[i].DisplayName + '-', eTemp, []);
end;
Delete(eLine, 1, 2);
eLine := GetIndents + 'new ' + eLine;
sciEditor.Lines[sciEditor.GetCurrentLineNumber] := eLine;
end
// If-Conditions
else if Pos('If-Condition', Item.Parent.DisplayName) = 1 then begin
eLine := '';
for i := 0 to jviCode.Root.Count -1 do begin
eLine := eLine + FindItem(jviCode.Root.Items[i], 'Condition').DisplayValue;
if i <> jviCode.Root.Count -1 then
eLine := eLine + #32 + FindItem(jviCode.Root.Items[i], 'Operator').DisplayValue + #32;
end;
eLine := StringReplace(eFormatSettings, #1#3#3#7, '(' + eLine + ')', []);
sciEditor.Lines[sciEditor.GetCurrentLineNumber] := eLine;
end
// Defined
else if Item.Parent.DisplayName = 'Defined' then begin
eLine := GetIndents + '#define ';
eLine := eLine + Item.Parent.Items[0].DisplayValue;
eLine := eLine + ' ' + Item.Parent.Items[1].DisplayValue;
sciEditor.Lines[sciEditor.GetCurrentLineNumber] := eLine;
end
// Included
else if Item.Parent.DisplayName = 'Included' then begin
eLine := StringReplace(eFormatSettings, '-Filename-', Item.DisplayValue, []);
eLine := GetIndents + eLine;
sciEditor.Lines[sciEditor.GetCurrentLineNumber] := eLine;
end
// Assignment
else if Item.Parent.DisplayName = 'Assignment' then begin
eLine := GetIndents + Item.Parent.Items[0].DisplayValue;
eLine := eLine + #32 + Item.Parent.Items[2].DisplayValue + #32 + Item.Parent.Items[1].DisplayValue;
sciEditor.Lines[sciEditor.GetCurrentLineNumber] := eLine;
end;
end;
end;
procedure TfrmMain.mnuMenuGeneratorClick(Sender: TObject);
begin
frmMenuGenerator.ShowModal;
end;
procedure TfrmMain.JvPluginManagerPlugInError(Sender: TObject;
AError: Exception);
begin
MessageBox(Handle, PChar(lPluginError + #13 + AError.Message), PChar(Application.Title), MB_ICONERROR);
end;
procedure TfrmMain.mnuNewModuleClick(Sender: TObject);
begin
Plugin_CreateNewFile(NEW_CPP_MODULE, True);
end;
procedure TfrmMain.mnuNewUnitClick(Sender: TObject);
begin
Plugin_CreateNewFile(NEW_CPP_UNIT, True);
end;
procedure TfrmMain.mnuNewHeaderCPPClick(Sender: TObject);
begin
Plugin_CreateNewFile(NEW_CPP_HEADER, True);
end;
procedure TfrmMain.tcToolsActiveTabChange(Sender: TObject;
ItemIndex: Integer);
begin
Plugin_VisibleControlChange(CTRL_CODETOOLS_ITEM, ItemIndex = 0);
Plugin_VisibleControlChange(CTRL_NOTES, ItemIndex = 1);
end;
procedure TfrmMain.sciEditorModified(Sender: TObject; const position,
modificationType: Integer; text: PAnsiChar; const len, linesAdded, line,
foldLevelNow, foldLevelPrev: Integer);
begin
if Started then
Plugin_Modified(text);
end;
procedure TfrmMain.sciEditorDblClick(Sender: TObject);
begin
Plugin_EditorClick(True);
end;
procedure TfrmMain.sciCallTipsBeforeShow(Sender: TObject;
const Position: Integer; ListToDisplay: TStrings;
var CancelDisplay: Boolean);
begin
CancelDisplay := not Plugin_CallTipShow(ListToDisplay.GetText);
end;
procedure TfrmMain.sciEditorCallTipClick(Sender: TObject;
const position: Integer);
begin
if not Plugin_CallTipClick(position) then
sciEditor.CallTipCancel;
end;
procedure TfrmMain.sciEditorAutoCSelection(Sender: TObject;
text: PAnsiChar);
begin
Plugin_AutoCompleteSelect(text);
end;
procedure TfrmMain.OnCustomClick(Sender: TObject);
begin
Plugin_CustomItemClick((Sender As TTBXCustomItem).Caption);
end;
procedure TfrmMain.pnlCodeInspectorVisibleChanged(Sender: TObject);
begin
mnuShowCodeInspector.Checked := pnlCodeInspector.Visible;
end;
procedure TfrmMain.pnlCodeExplorerVisibleChanged(Sender: TObject);
begin
mnuShowCodeExplorer.Checked := pnlCodeExplorer.Visible;
end;
procedure TfrmMain.mnuShowCodeExplorerClick(Sender: TObject);
begin
pnlCodeExplorer.Visible := mnuShowCodeExplorer.Checked;
end;
procedure TfrmMain.mnuShowCodeInspectorClick(Sender: TObject);
begin
pnlCodeInspector.Visible := mnuShowCodeInspector.Checked;
end;
procedure TfrmMain.mnuConnectionGenClick(Sender: TObject);
var eIncluded: Integer;
eRegLine: Integer;
eIndents: String;
begin
eRegLine := PluginInitLine;
if (frmConnGen.ShowModal = mrOk) and (eRegLine <> -1) then begin
// Add include and add var
eIncluded := GetLast('#include', True);
if eIncluded = -1 then
eIncluded := 0;
sciEditor.Lines.Insert(eIncluded +1, 'new sck' + frmConnGen.txtName.Text);
eRegLine := eRegLine +1;
AddIfDoesntExist('sockets');
// CVar stuff
eIndents := GetIndents(eRegLine +1);
sciEditor.Lines.Insert(eRegLine +2, eIndents + '/* Init CVars for the socket "' + frmConnGen.txtName.Text + '" */');
sciEditor.Lines.Insert(eRegLine +3, eIndents + 'if (cvar_exists("amx_' + frmConnGen.txtName.Text + '_socket")) {');
sciEditor.Lines.Insert(eRegLine +4, eIndents + #9 + 'sck' + frmConnGen.txtName.Text + ' = get_cvar_num("amx_' + frmConnGen.txtName.Text + '_socket")');
sciEditor.Lines.Insert(eRegLine +5, eIndents + #9 + 'read_' + frmConnGen.txtName.Text + '()');
sciEditor.Lines.Insert(eRegLine +6, eIndents + '}');
sciEditor.Lines.Insert(eRegLine +7, eIndents + 'else');
sciEditor.Lines.Insert(eRegLine +8, eIndents + #9 + 'register_cvar("amx_' + frmConnGen.txtName.Text + '_socket", "0", FCVAR_PROTECTED&FCVAR_UNLOGGED)');
sciEditor.Lines.Insert(eRegLine +9, eIndents + '/* End */');
// Functions
sciEditor.Lines.Add('');
sciEditor.Lines.Add('/* Socket ' + frmConnGen.txtName.Text + ' */');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('public connect_' + frmConnGen.txtName.Text + '() {');
sciEditor.Lines.Add(#9 + 'new error = 0');
sciEditor.Lines.Add(#9 + 'sck' + frmConnGen.txtName.Text + ' = socket_open("' + frmConnGen.txtHost.Text + '", ' + frmConnGen.txtPort.Text + ', ' + frmConnGen.cboProtocol.Text + ', error)');
sciEditor.Lines.Add(#9 + 'if (sck' + frmConnGen.txtName.Text + ' > 0) {');
sciEditor.Lines.Add(#9 + #9 + '/* Connect successful */');
sciEditor.Lines.Add(#9 + #9 + 'read_' + frmConnGen.txtName.Text + '()');
sciEditor.Lines.Add(#9 + '}');
sciEditor.Lines.Add(#9 + 'else {');
sciEditor.Lines.Add(#9 + #9 + 'switch (error) {');
sciEditor.Lines.Add(#9 + #9 + #9 + 'case 1: { /* Error creating socket */ }');
sciEditor.Lines.Add(#9 + #9 + #9 + 'case 2: { /* Could not resolve hostname */ }');
sciEditor.Lines.Add(#9 + #9 + #9 + 'case 3: { /* Could not connect to given host:port */ }');
sciEditor.Lines.Add(#9 + #9 + '}');
sciEditor.Lines.Add(#9 + '}');
sciEditor.Lines.Add('}');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('public read_' + frmConnGen.txtName.Text + '() {');
sciEditor.Lines.Add(#9 + 'if (socket_change(sck' + frmConnGen.txtName.Text + ', 100)) {');
sciEditor.Lines.Add(#9 + #9 + 'new buf[512], lines[30][100], count = 0');
sciEditor.Lines.Add(#9 + #9 + 'socket_recv(sck' + frmConnGen.txtName.Text + ', buf, 511)');
sciEditor.Lines.Add(#9 + #9 + 'count = ExplodeString(lines, 50, 119, buf, 13)');
sciEditor.Lines.Add(#9 + #9 + 'for(new i=0;i<count;i++) {');
sciEditor.Lines.Add(#9 + #9 + #9 + '/* Process items here */');
sciEditor.Lines.Add(#9 + #9 + '}');
sciEditor.Lines.Add(#9 + '}');
sciEditor.Lines.Add(#9 + '');
sciEditor.Lines.Add(#9 + 'if (sck' + frmConnGen.txtName.Text + ' != 0)');
sciEditor.Lines.Add(#9 + #9 + 'set_task(0.5, "read_' + frmConnGen.txtName.Text + '")');
sciEditor.Lines.Add(#9 + 'else {');
sciEditor.Lines.Add(#9 + #9 + 'set_cvar_num("amx_' + frmConnGen.txtName.Text + '_socket", 0)');
sciEditor.Lines.Add(#9 + #9 + 'disconnect_' + frmConnGen.txtName.Text + '()');
sciEditor.Lines.Add(#9 + '}');
sciEditor.Lines.Add('}');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('public write_' + frmConnGen.txtName.Text + '(text[512]) {');
sciEditor.Lines.Add(#9 + 'socket_send(sck' + frmConnGen.txtName.Text + ', text, 511)');
sciEditor.Lines.Add('}');
sciEditor.Lines.Add('');
sciEditor.Lines.Add('public disconnect_' + frmConnGen.txtName.Text + '() {');
sciEditor.Lines.Add(#9 + '/* Disconnected */');
sciEditor.Lines.Add('}');
if GetLine('stock ExplodeString', True, True) = -1 then begin
sciEditor.Lines.Add('');
sciEditor.Lines.Add('stock ExplodeString( p_szOutput[][], p_nMax, p_nSize, p_szInput[], p_szDelimiter ) { // Function by xeroblood');
sciEditor.Lines.Add(#9 + 'new nIdx = 0, l = strlen(p_szInput)');
sciEditor.Lines.Add(#9 + 'new nLen = (1 + copyc( p_szOutput[nIdx], p_nSize, p_szInput, p_szDelimiter ))');
sciEditor.Lines.Add(#9 + 'while( (nLen < l) && (++nIdx < p_nMax) )');
sciEditor.Lines.Add(#9 + #9 + 'nLen += (1 + copyc( p_szOutput[nIdx], p_nSize, p_szInput[nLen], p_szDelimiter ))');
sciEditor.Lines.Add(#9 + 'return nIdx');
sciEditor.Lines.Add('}');
end;
end;
end;
procedure TfrmMain.OnCopyData(var Msg: TWMCopyData);
var eData: String;
eIntData: Integer;
eMessage: Integer;
eBMP: TBitmap;
eTemp: String;
eItem: TSpTBXItem;
ePage: TJvStandardPage;
eStr: TStringList;
eValues: array of string;
i: integer;
begin
eData := String(PChar(Msg.CopyDataStruct.lpData));
eIntData := Msg.CopyDataStruct.dwData;
eMessage := Msg.From;
try
Msg.Result := 1;
case eMessage of
SCM_SHOWPROGRESS: ShowProgress;
SCM_HIDEPROGRESS: HideProgress;
SCM_UPDATEPROGRESS: begin
pbLoading.Position := eIntData;
SetProgressStatus(eData);
end;
SCM_LOADCODESNIPPETS: LoadCodeSnippets(eData);
SCM_CODESNIPPETCLICK: begin
if Plugin_CodeSnippetClick(eData, GetCat, GetSnippet(GetCat, eData)) then
sciEditor.SelText := GetSnippet(GetCat, eData);
end;
SCM_MIRC_CMD: mIRCDDE('mIRC', 'COMMAND', eData);
SCM_RELOADINI: ReloadIni;
SCM_SELECTLANGUAGE: SelectLanguage(eData);
SCM_LOADFILE: begin
odOpen.FileName := eData;
mnuOpenClick(nil);
end;
SCM_CURRPROJECTS: Msg.Result := tsMain.ActiveTabIndex;
SCM_COMPILE: mnuDoCompile.Click;
SCM_COMPILE_UPLOAD: mnuCompileAndUpload.Click;
SCM_COMPILE_STARTHL: mnuCompileAndStartHL.Click;
SCM_MENU_LOADIMAGE: begin
eBMP := TBitmap.Create;
eBMP.LoadFromFile(eData);
if eIntData = -1 then
Msg.Result := ilImages.Add(eBMP, nil)
else
Msg.Result := ilImages.AddMasked(eBMP, eIntData);
eBMP.Destroy;
end;
SCM_MENU_ADDITEM: begin
if Pos('->', eData) <> 0 then begin
eTemp := Copy(eData, 1, Pos('->', eData) -1);
eData := Copy(eData, Pos('->', eData) +2, Length(eData));
end
else
eTemp := '';
eItem := TSpTBXItem.Create(tbxMenu.Items);
with eItem do begin
Caption := eData;
Images := ilImages;
ImageIndex := eIntData;
OnClick := OnCustomClick;
end;
if Assigned(GetMenuItem(eTemp)) then
GetMenuItem(eTemp).Add(eItem)
else
tbxMenu.Items.Add(eItem);
end;
SCM_MENU_ADDSUBITEM: begin
if Pos('->', eData) <> 0 then begin
eTemp := Copy(eData, 1, Pos('->', eData) -1);
eData := Copy(eData, Pos('->', eData) +2, Length(eData));
end
else
eTemp := '';
eItem := TSpTBXSubMenuItem.Create(tbxMenu.Items);
with eItem do begin
Caption := eData;
Images := ilImages;
ImageIndex := eIntData;
OnClick := OnCustomClick;
end;
if Assigned(GetMenuItem(eTemp)) then
GetMenuItem(eTemp).Add(eItem)
else
tbxMenu.Items.Add(eItem);
end;
SCM_MENU_FAKECLICK: begin
if Assigned(GetMenuItem(eData)) then
GetMenuItem(eData).Click
else
Msg.Result := 0;
end;
SCM_MENU_SHOWITEM: begin
if Assigned(GetMenuItem(eData)) then
GetMenuItem(eData).Visible := True
else
Msg.Result := 0;
end;
SCM_MENU_HIDEITEM: begin
if Assigned(GetMenuItem(eData)) then
GetMenuItem(eData).Visible := False
else
Msg.Result := 0;
end;
SCM_PLUGIN_LOAD: begin
if eData <> '' then begin
Msg.Result := 0;
for i := 0 to frmSettings.lvPlugins.Items.Count -1 do begin
if LowerCase(frmSettings.lvPlugins.Items[i].SubItems[0]) = LowerCase(eData) then begin
LoadPlugin(frmSettings.lvPlugins.Items[i]);
Msg.Result := 1;
break;
end;
end;
end
else
LoadPlugin(frmSettings.lvPlugins.Items[eIntData]);
end;
SCM_PLUGIN_UNLOAD: begin
if eData <> '' then begin
Msg.Result := 0;
for i := 0 to frmSettings.lvPlugins.Items.Count -1 do begin
if LowerCase(frmSettings.lvPlugins.Items[i].SubItems[0]) = LowerCase(eData) then begin
UnloadPlugin(frmSettings.lvPlugins.Items[i]);
Msg.Result := 1;
break;
end;
end;
end
else
UnloadPlugin(frmSettings.lvPlugins.Items[eIntData]);
end;
SCM_SETTINGS_CREATEPAGE: begin
if Pos('->', eData) <> 0 then begin
eTemp := Copy(eData, 1, Pos('->', eData) -1);
eData := Copy(eData, Pos('->', eData) +2, Length(eData));
end
else
eTemp := '';
ePage := TJvStandardPage.Create(frmSettings.jplSettings);
ePage.Caption := eData;
TJvPageIndexNode(frmSettings.trvSettings.Items.AddChild(FindSettingsNode(eTemp), eData)).PageIndex := ePage.PageIndex;
Msg.Result := ePage.Handle;
end;
SCM_CODEINSPECTOR_CLEAR: jviCode.Root.Clear;
SCM_CODEINSPECTOR_ADD: begin
eStr := TStringList.Create;
eStr.Text := eData;
if eStr.Count = 3 then
AddField(eStr[0], eStr[1], eStr[2])
else
Msg.Result := 0;
eStr.Destroy;
end;
SCM_CODEINSPECTOR_ADDCOMBO: begin
eStr := TStringList.Create;
eStr.Text := eData;
if eStr.Count > 3 then begin
SetLength(eValues, eStr.Count -2);
for i := 0 to eStr.Count -4 do
eValues[i] := eStr[i +3];
AddCombo(eStr[0], eStr[1], eStr[2], eValues);
end
else
Msg.Result := 0;
eStr.Destroy;
end;
SCM_CODEINSPECTOR_SETVALUE: begin
eStr := TStringList.Create;
eStr.Text := eData;
if eStr.Count = 2 then begin
if Assigned(GetCIItem(eStr[0])) then
GetCIItem(eStr[0]).DisplayValue := eStr[1]
else
Msg.Result := 0;
end
else
Msg.Result := 0;
end;
SCM_CODEINSPECTOR_SETNAME: begin
eStr := TStringList.Create;
eStr.Text := eData;
if eStr.Count = 2 then begin
if Assigned(GetCIItem(eStr[0])) then
GetCIItem(eStr[0]).DisplayName := eStr[1]
else
Msg.Result := 0;
end
else
Msg.Result := 0;
end;
SCM_CODEINSPECTOR_GETVALUE: begin
if Assigned(GetCIItem(eData)) then
Msg.Result := Integer(PChar(GetCIItem(eData).DisplayValue))
else
Msg.Result := Integer(PChar(''));
end;
SCM_CODEINSPECTOR_GETNAME: begin
if Assigned(GetCIItemByValue(eData)) then
Msg.Result := Integer(PChar(GetCIItemByValue(eData).DisplayName))
else
Msg.Result := Integer(PChar(''));
end;
SCM_CODEINSPECTOR_COUNT: Msg.Result := jviCode.Root.Count;
SCM_CODEINSPECTOR_BEGINUPDATE: jviCode.BeginUpdate;
SCM_CODEINSPECTOR_ENDUPDATE: jviCode.EndUpdate;
SCM_CODEINSPECTOR_DELETE: begin
if Assigned(GETCIItem(eData)) then
jviCode.Root.Delete(GETCIItem(eData))
else
Msg.Result := 0;
end;
SCM_PAWN_NEWFILE: PawnProjects.Add(eData, '');
SCM_PAWN_SAVEFILE: begin
if (eData = '') and (TDocument(PawnProjects.Items[eIntData]).Untitled) then
Msg.Result := 0
else
PawnProjects.Save(eIntData, eData);
end;
SCM_PAWN_CLOSEFILE: PawnProjects.Close(eIntData);
SCM_PAWN_ISUNTITLED: begin
try
if TDocument(PawnProjects.Items[eIntData]).Untitled then
Msg.Result := 1
else
Msg.Result := 0;
except
Msg.Result := -1;
end;
end;
SCM_PAWN_ACTIVATE: begin
if tsMain.ActiveTabIndex <> 0 then
ActivateProjects(0, eIntData = 1)
else
Msg.Result := 0;
end;
SCM_PAWN_ACTIVATEDOC: PawnProjects.Activate(eIntData, Pos('r', eData) <> 0, Pos('s', eData) <> 0);
SCM_PAWN_GETNOTES: begin
if (tsMain.ActiveTabIndex = 0) and (tsDocuments.ActiveTabIndex = eIntData) then
Msg.Result := Integer(PChar(GetRTFText(rtfNotes)))
else
Msg.Result := Integer(PChar(TDocument(PawnProjects.Items[eIntData]).NotesText));
end;
SCM_PAWN_SETNOTES: begin
if (tsMain.ActiveTabIndex = 0) and (tsDocuments.ActiveTabIndex = eIntData) then
SetRTFText(rtfNotes, eData)
else
TDocument(PawnProjects.Items[eIntData]).NotesText := eData;
end;
SCM_PAWN_GETFILENAME: Msg.Result := Integer(PChar(TDocument(PawnProjects.Items[eIntData]).FileName));
SCM_PAWN_GETTEXT: begin
if (tsMain.ActiveTabIndex = 0) and (tsDocuments.ActiveTabIndex = eIntData) then
Msg.Result := Integer(sciEditor.Lines.GetText)
else
Msg.Result := Integer(TDocument(PawnProjects.Items[eIntData]).Code.GetText);
end;
SCM_CPP_NEWFILE: begin
if eCPP then
CPPProjects.Add(eData)
else
Msg.Result := 0;
end;
SCM_CPP_SAVEFILE: begin
if eCPP then begin
if (eData = '') and (TDocument(CPPProjects.Items[eIntData]).Untitled) then
Msg.Result := 0
else
CPPProjects.Save(eIntData, eData);
end;
end;
SCM_CPP_CLOSEFILE: begin
if eCPP then
CPPProjects.Close(eIntData)
else
Msg.Result := 0;
end;
SCM_CPP_ISUNTITLED: begin
try
if TDocument(CPPProjects.Items[eIntData]).Untitled then
Msg.Result := 1
else
Msg.Result := 0;
except
Msg.Result := -1;
end;
end;
SCM_CPP_ACTIVATE: begin
if (eCPP) and (tsMain.ActiveTabIndex <> 1) then
ActivateProjects(1, eIntData = 1)
else
Msg.Result := 0;
end;
SCM_CPP_ACTIVATEDOC: begin
if eCPP then
CPPProjects.Activate(eIntData, Pos('r', eData) <> 0, Pos('s', eData) <> 0)
else
Msg.Result := 0;
end;
SCM_CPP_ACTIVATEIDE: begin
eCPP := eIntData = 1;
if eCPP then begin
tiCPP.Enabled := True;
mnuNewHeaderCPP.Enabled := True;
mnuNewModule.Enabled := True;
mnuNewUnit.Enabled := True;
end
else begin
tiCPP.Enabled := False;
mnuNewHeaderCPP.Enabled := False;
mnuNewModule.Enabled := False;
mnuNewUnit.Enabled := False;
end;
end;
SCM_CPP_GETNOTES: begin
if (tsMain.ActiveTabIndex = 1) and (tsDocuments.ActiveTabIndex = eIntData) then
Msg.Result := Integer(PChar(GetRTFText(rtfNotes)))
else
Msg.Result := Integer(PChar(TDocument(CPPProjects.Items[eIntData]).NotesText));
end;
SCM_CPP_SETNOTES: begin
if (tsMain.ActiveTabIndex = 1) and (tsDocuments.ActiveTabIndex = eIntData) then
SetRTFText(rtfNotes, eData)
else
TDocument(CPPProjects.Items[eIntData]).NotesText := eData;
end;
SCM_CPP_GETFILENAME: Msg.Result := Integer(PChar(TDocument(CPPProjects.Items[eIntData]).FileName));
SCM_CPP_GETTEXT: begin
if (tsMain.ActiveTabIndex = 1) and (tsDocuments.ActiveTabIndex = eIntData) then
Msg.Result := Integer(sciEditor.Lines.GetText)
else
Msg.Result := Integer(TDocument(CPPProjects.Items[eIntData]).Code.GetText);
end;
SCM_OTHER_NEWFILE: OtherProjects.Add(eData);
SCM_OTHER_SAVEFILE: begin
if (eData = '') and (TDocument(CPPProjects.Items[eIntData]).Untitled) then
Msg.Result := 0
else
OtherProjects.Save(eIntData, eData);
end;
SCM_OTHER_CLOSEFILE: OtherProjects.Delete(eIntData);
SCM_OTHER_ISUNTITLED: begin
try
if TDocument(OtherProjects.Items[eIntData]).Untitled then
Msg.Result := 1
else
Msg.Result := 0;
except
Msg.Result := -1;
end;
end;
SCM_OTHER_ACTIVATE: begin
if tsMain.ActiveTabIndex <> 2 then
ActivateProjects(2, eIntData = 1)
else
Msg.Result := 0;
end;
SCM_OTHER_ACTIVATEDOC: OtherProjects.Activate(eIntData, Pos('r', eData) <> 0, Pos('s', eData) <> 0);
SCM_OTHER_GETNOTES: begin
if (tsMain.ActiveTabIndex = 2) and (tsDocuments.ActiveTabIndex = eIntData) then
Msg.Result := Integer(PChar(GetRTFText(rtfNotes)))
else
Msg.Result := Integer(PChar(TDocument(OtherProjects.Items[eIntData]).NotesText));
end;
SCM_OTHER_SETNOTES: begin
if (tsMain.ActiveTabIndex = 2) and (tsDocuments.ActiveTabIndex = eIntData) then
SetRTFText(rtfNotes, eData)
else
TDocument(OtherProjects.Items[eIntData]).NotesText := eData;
end;
SCM_OUTPUT_SHOW: begin
splOutput.Show;
lstOutput.Show;
end;
SCM_OUTPUT_HIDE: begin
splOutput.Hide;
lstOutput.Hide;
end;
SCM_OUTPUT_ADD: Msg.Result := lstOutput.Items.Add(eData);
SCM_OUTPUT_CLEAR: lstOutput.Items.Clear;
SCM_OUTPUT_DELETE: lstOutput.Items.Delete(eIntData);
SCM_OUTPUT_GETTEXT: Msg.Result := Integer(lstOutput.Items.GetText);
SCM_OUTPUT_GETITEM: begin
try
Msg.Result := Integer(PChar(lstOutput.Items[eIntData]));
except
Msg.Result := Integer(PChar(''));
end;
end;
SCM_OUTPUT_INDEXOF: Msg.Result := lstOutput.Items.IndexOf(eData);
SCM_ACTIVE_DOCUMENT: Msg.Result := tsDocuments.ActiveTabIndex;
SCM_ACTIVE_PROJECTS: Msg.Result := tsMain.ActiveTabIndex;
SCM_EDITOR_SETTEXT: sciEditor.Lines.SetText(Msg.CopyDataStruct.lpData);
SCM_EDITOR_GETTEXT: Msg.Result := Integer(sciEditor.Lines.GetText);
SCM_EDTIOR_SETCALLTIPS: sciCallTips.ApiStrings.Text := eData;
SCM_EDITOR_SHOWCALLTIP: sciEditor.CallTipShow(eIntData, Msg.CopyDataStruct.lpData);
SCM_EDITOR_SETAUTOCOMPLETE: sciAutoComplete.AStrings.Text := eData;
SCM_EDITOR_SHOWAUTOCOMPLETE: sciEditor.AutoCShow(eIntData, Msg.CopyDataStruct.lpData);
SCM_EDITOR_GETSELSTART: Msg.Result := sciEditor.SelStart;
SCM_EDTIOR_GETSELLENGTH: Msg.Result := sciEditor.SelLength;
SCM_EDITOR_SETSELSTART: sciEditor.SelStart := eIntData;
SCM_EDITOR_SETSELLENGH: sciEditor.SelLength := eIntData;
SCM_REMOVE_MENUITEM: begin
if Assigned(GetMenuItem(eData)) then begin
if Assigned(GetMenuItem(eData).Parent) then
GetMenuItem(eData).Parent.Remove(GetMenuItem(eData))
else
tbxMenu.Items.Remove(GetMenuItem(eData));
Msg.Result := 1;
end
else
Msg.Result := 0;
end;
SCM_REMOVE_IMAGE: ilImages.Delete(eIntData);
SCM_SETTHEME: TBXSetTheme(eData);
SCM_GETTHEME: Msg.Result := Integer(PChar(TBXCurrentTheme));
end;
except
Msg.Result := 0;
end;
end;
end.