diff options
| author | 2006-12-18 01:34:15 +0000 | |
|---|---|---|
| committer | 2006-12-18 01:34:15 +0000 | |
| commit | c75b9f00eaeee4b8503ba662b3d7ccc9e1914096 (patch) | |
| tree | a5e7ee244fa4124588a114732c4ecbc248c7c199 /src/modules/editor | |
| parent | Switching from cvs to svn, initial import (diff) | |
| download | KVIrc-c75b9f00eaeee4b8503ba662b3d7ccc9e1914096.tar.gz KVIrc-c75b9f00eaeee4b8503ba662b3d7ccc9e1914096.tar.bz2 KVIrc-c75b9f00eaeee4b8503ba662b3d7ccc9e1914096.zip | |
Switching from cvs to svn, initial import
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@14 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/editor')
| -rw-r--r-- | src/modules/editor/.svnignore | 10 | ||||
| -rw-r--r-- | src/modules/editor/Makefile.am | 20 | ||||
| -rwxr-xr-x | src/modules/editor/editor.vcproj | 172 | ||||
| -rw-r--r-- | src/modules/editor/editor_vc05.vcproj | 261 | ||||
| -rw-r--r-- | src/modules/editor/kvieditor.dsp | 147 | ||||
| -rw-r--r-- | src/modules/editor/kvieditor.dsw | 29 | ||||
| -rw-r--r-- | src/modules/editor/libkvieditor.cpp | 94 | ||||
| -rw-r--r-- | src/modules/editor/scripteditor.cpp | 1157 | ||||
| -rw-r--r-- | src/modules/editor/scripteditor.h | 189 |
9 files changed, 2079 insertions, 0 deletions
diff --git a/src/modules/editor/.svnignore b/src/modules/editor/.svnignore new file mode 100644 index 000000000..f16d58afa --- /dev/null +++ b/src/modules/editor/.svnignore @@ -0,0 +1,10 @@ +Makefile.in +Makefile +.deps +*.o +*.lo +*.la +*.moc +moc_*.cpp +.libs +moc_editor.cpp diff --git a/src/modules/editor/Makefile.am b/src/modules/editor/Makefile.am new file mode 100644 index 000000000..beb22541e --- /dev/null +++ b/src/modules/editor/Makefile.am @@ -0,0 +1,20 @@ +############################################################################### +# KVirc IRC client Makefile - 10.03.2000 Szymon Stefanek <stefanek@tin.it> +############################################################################### + +AM_CPPFLAGS = -I$(SS_TOPSRCDIR)/src/kvilib/include/ -I$(SS_TOPSRCDIR)/src/kvirc/include/ \ +$(SS_INCDIRS) $(SS_CPPFLAGS) -DGLOBAL_KVIRC_DIR=\"$(globalkvircdir)\" -DKVIRC_SSEX + +pluglib_LTLIBRARIES = libkvieditor.la + +libkvieditor_la_LDFLAGS = -module -avoid-version $(SS_LDFLAGS) $(SS_LIBDIRS) + +nodist_libkvieditor_la_SOURCES = moc_scripteditor.cpp +libkvieditor_la_SOURCES = libkvieditor.cpp scripteditor.cpp +libkvieditor_la_LIBADD = $(SS_LIBLINK) ../../kvilib/build/libkvilib.la + +noinst_HEADERS= scripteditor.h + +moc_%.cpp: %.h + $(SS_QT_MOC) $< -o $@ + diff --git a/src/modules/editor/editor.vcproj b/src/modules/editor/editor.vcproj new file mode 100755 index 000000000..0e7a29ecb --- /dev/null +++ b/src/modules/editor/editor.vcproj @@ -0,0 +1,172 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="editor" + ProjectGUID="{4D437B7D-2BA6-426C-9E9F-2EA05E51ABD6}" + Keyword="Win32Proj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(SolutionDir)\win32build\bin\modules" + IntermediateDirectory="Debug" + ConfigurationType="2" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(ProjectDir)\..\..\kvilib\tal";"$(ProjectDir)\..\..\kvilib\system";"$(ProjectDir)\..\..\kvilib\irc";"$(ProjectDir)\..\..\kvilib\file";"$(ProjectDir)\..\..\kvilib\ext";"$(ProjectDir)\..\..\kvilib\net";"$(ProjectDir)\..\..\kvilib\core\wstring";"$(ProjectDir)\..\..\kvilib\core";"$(ProjectDir)\..\..\kvilib\config";"$(SSLINCDIR)";"$(QTDIR)\include";"$(ProjectDir)\..\..\kvirc\kvs";"$(ProjectDir)\..\..\kvirc\module";"$(ProjectDir)\..\..\kvirc\uparser\scripttoolbar";"$(ProjectDir)\..\..\kvirc\uparser";"$(ProjectDir)\..\..\kvirc\sparser";"$(ProjectDir)\..\..\kvirc\kernel";"$(ProjectDir)\..\..\kvirc\ui"" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;EDITOR_EXPORTS" + MinimalRebuild="TRUE" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="4"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="qt-mtnc321.lib qtmain.lib libeay32.lib SSLeay32.lib ws2_32.lib kvilib.lib kvirc.lib msvcrt.lib" + OutputFile="$(OutDir)/kvi$(ProjectName).dll" + LinkIncremental="2" + AdditionalLibraryDirectories=""$(SSLLIBDIR)";"$(QTDIR)\lib";"$(SolutionDir)\win32build\bin"" + IgnoreAllDefaultLibraries="TRUE" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/editor.pdb" + SubSystem="2" + ImportLibrary="$(OutDir)/editor.lib" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(SolutionDir)\win32build\bin\modules" + IntermediateDirectory="Release" + ConfigurationType="2" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + GlobalOptimizations="TRUE" + InlineFunctionExpansion="2" + FavorSizeOrSpeed="1" + OmitFramePointers="TRUE" + AdditionalIncludeDirectories=""$(ProjectDir)\..\..\kvilib\tal";"$(ProjectDir)\..\..\kvilib\system";"$(ProjectDir)\..\..\kvilib\irc";"$(ProjectDir)\..\..\kvilib\file";"$(ProjectDir)\..\..\kvilib\ext";"$(ProjectDir)\..\..\kvilib\net";"$(ProjectDir)\..\..\kvilib\core\wstring";"$(ProjectDir)\..\..\kvilib\core";"$(ProjectDir)\..\..\kvilib\config";"$(SSLINCDIR)";"$(QTDIR)\include";"$(ProjectDir)\..\..\kvirc\kvs";"$(ProjectDir)\..\..\kvirc\module";"$(ProjectDir)\..\..\kvirc\uparser\scripttoolbar";"$(ProjectDir)\..\..\kvirc\uparser";"$(ProjectDir)\..\..\kvirc\sparser";"$(ProjectDir)\..\..\kvirc\kernel";"$(ProjectDir)\..\..\kvirc\ui"" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;EDITOR_EXPORTS" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="3"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="qt-mtnc321.lib qtmain.lib libeay32.lib SSLeay32.lib ws2_32.lib kvilib.lib kvirc.lib msvcrt.lib" + OutputFile="$(OutDir)/kvi$(ProjectName).dll" + LinkIncremental="1" + AdditionalLibraryDirectories=""$(SSLLIBDIR)";"$(QTDIR)\lib";"$(SolutionDir)\win32build\bin"" + IgnoreAllDefaultLibraries="TRUE" + GenerateDebugInformation="TRUE" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + OptimizeForWindows98="1" + ImportLibrary="$(OutDir)/editor.lib" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> + <File + RelativePath=".\libkvieditor.cpp"> + </File> + <File + RelativePath=".\moc_scripteditor.cpp"> + </File> + <File + RelativePath=".\scripteditor.cpp"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> + <File + RelativePath=".\scripteditor.h"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCustomBuildTool" + CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\moc_$(InputName).cpp" "$(InputDir)\$(InputFileName)" +" + Outputs="$(InputDir)\moc_$(InputName).cpp"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCustomBuildTool" + CommandLine="$(QTDIR)\bin\moc -o $(InputDir)\moc_$(InputName).cpp $(InputDir)\$(InputFileName) +" + Outputs="$(InputDir)\moc_$(InputName).cpp"/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/src/modules/editor/editor_vc05.vcproj b/src/modules/editor/editor_vc05.vcproj new file mode 100644 index 000000000..afe8249b8 --- /dev/null +++ b/src/modules/editor/editor_vc05.vcproj @@ -0,0 +1,261 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8,00" + Name="editor" + ProjectGUID="{4D437B7D-2BA6-426C-9E9F-2EA05E51ABD6}" + RootNamespace="editor" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(SolutionDir)\win32build\bin\modules\" + IntermediateDirectory="Debug" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(ProjectDir)\..\..\kvilib\tal";"$(ProjectDir)\..\..\kvilib\system";"$(ProjectDir)\..\..\kvilib\irc";"$(ProjectDir)\..\..\kvilib\file";"$(ProjectDir)\..\..\kvilib\ext";"$(ProjectDir)\..\..\kvilib\net";"$(ProjectDir)\..\..\kvilib\core\wstring";"$(ProjectDir)\..\..\kvilib\core";"$(ProjectDir)\..\..\kvilib\config";"$(SSLINCDIR)";"$(QTDIR)\include";"$(ProjectDir)\..\..\kvirc\kvs";"$(ProjectDir)\..\..\kvirc\module";"$(ProjectDir)\..\..\kvirc\uparser\scripttoolbar";"$(ProjectDir)\..\..\kvirc\uparser";"$(ProjectDir)\..\..\kvirc\sparser";"$(ProjectDir)\..\..\kvirc\kernel";"$(ProjectDir)\..\..\kvirc\ui"" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;EDITOR_EXPORTS;_CRT_SECURE_NO_DEPRECATE" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="qt-$(QTTAG).lib qtmain.lib libeay32.lib SSLeay32.lib ws2_32.lib kvilib.lib kvirc.lib msvcrt.lib perl58.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib" + OutputFile="$(OutDir)/kvi$(ProjectName).dll" + LinkIncremental="2" + AdditionalLibraryDirectories=""$(SSLLIBDIR)";"$(PERLDIR)\lib\CORE";"$(QTDIR)\lib";"$(SolutionDir)\win32build\bin";"$(ZLIBLIBDIR)"" + GenerateManifest="true" + IgnoreAllDefaultLibraries="true" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)/editor.pdb" + SubSystem="2" + TurnOffAssemblyGeneration="true" + ImportLibrary="$(OutDir)/editor.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + EmbedManifest="true" + VerboseOutput="true" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(SolutionDir)\win32build\bin\modules" + IntermediateDirectory="Release" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="1" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="2" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(ProjectDir)\..\..\kvilib\tal";"$(ProjectDir)\..\..\kvilib\system";"$(ProjectDir)\..\..\kvilib\irc";"$(ProjectDir)\..\..\kvilib\file";"$(ProjectDir)\..\..\kvilib\ext";"$(ProjectDir)\..\..\kvilib\net";"$(ProjectDir)\..\..\kvilib\core\wstring";"$(ProjectDir)\..\..\kvilib\core";"$(ProjectDir)\..\..\kvilib\config";"$(SSLINCDIR)";"$(QTDIR)\include";"$(ProjectDir)\..\..\kvirc\kvs";"$(ProjectDir)\..\..\kvirc\module";"$(ProjectDir)\..\..\kvirc\uparser\scripttoolbar";"$(ProjectDir)\..\..\kvirc\uparser";"$(ProjectDir)\..\..\kvirc\sparser";"$(ProjectDir)\..\..\kvirc\kernel";"$(ProjectDir)\..\..\kvirc\ui"" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;EDITOR_EXPORTS;_CRT_SECURE_NO_DEPRECATE" + StringPooling="true" + MinimalRebuild="true" + ExceptionHandling="1" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="qt-$(QTTAG).lib qtmain.lib libeay32.lib SSLeay32.lib ws2_32.lib kvilib.lib kvirc.lib msvcrt.lib perl58.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib" + OutputFile="$(OutDir)/kvi$(ProjectName).dll" + LinkIncremental="1" + AdditionalLibraryDirectories=""$(SSLLIBDIR)";"$(PERLDIR)\lib\CORE";"$(QTDIR)\lib";"$(SolutionDir)\win32build\bin";"$(ZLIBLIBDIR)"" + GenerateManifest="true" + IgnoreAllDefaultLibraries="true" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + OptimizeForWindows98="1" + LinkTimeCodeGeneration="1" + TurnOffAssemblyGeneration="true" + ImportLibrary="$(OutDir)/editor.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + EmbedManifest="true" + VerboseOutput="true" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\libkvieditor.cpp" + > + </File> + <File + RelativePath=".\moc_scripteditor.cpp" + > + </File> + <File + RelativePath=".\scripteditor.cpp" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\scripteditor.h" + > + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCCustomBuildTool" + CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\moc_$(InputName).cpp" "$(InputDir)\$(InputFileName)"
" + Outputs="$(InputDir)\moc_$(InputName).cpp" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + > + <Tool + Name="VCCustomBuildTool" + CommandLine="$(QTDIR)\bin\moc -o "$(InputDir)\moc_$(InputName).cpp" "$(InputDir)\$(InputFileName)"
" + Outputs="$(InputDir)\moc_$(InputName).cpp" + /> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/src/modules/editor/kvieditor.dsp b/src/modules/editor/kvieditor.dsp new file mode 100644 index 000000000..879972d85 --- /dev/null +++ b/src/modules/editor/kvieditor.dsp @@ -0,0 +1,147 @@ +# Microsoft Developer Studio Project File - Name="kvieditor" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=kvieditor - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "kvieditor.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "kvieditor.mak" CFG="kvieditor - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "kvieditor - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "kvieditor - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "kvieditor - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EDITOR_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "$(QTDIR)\include" /I "..\..\kvilib\tal" /I "..\..\kvilib\system" /I "..\..\kvilib\irc" /I "..\..\kvilib\file" /I "..\..\kvilib\ext" /I "..\..\kvilib\net" /I "..\..\kvilib\core\wstring" /I "..\..\kvilib\core" /I "..\..\kvilib\config" /I "..\..\kvirc\kvs" /I "..\..\kvirc\module" /I "..\..\kvirc\uparser\scripttoolbar" /I "..\..\kvirc\uparser" /I "..\..\kvirc\sparser" /I "..\..\kvirc\kernel" /I "..\..\kvirc\ui" /I "C:\ssl" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EDITOR_EXPORTS" /D "QT_DLL" /D "QT_THREAD_SUPPORT" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 $(QTDIR)\lib\qt-mtnc321.lib $(QTDIR)\lib\qtmain.lib libeay32.lib SSLeay32.lib ws2_32.lib kvilib.lib kvirc.lib msvcrt.lib /nologo /dll /machine:I386 /out:"..\..\..\win32build\bin\modules\kvieditor.dll" /libpath:"C:\OpenSSL\lib\VC" /libpath:"..\..\kvilib\Release" /libpath:"..\..\kvirc\Release" + +!ELSEIF "$(CFG)" == "kvieditor - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EDITOR_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "_$(QTDIR)\include" /I "$(QTDIR)\include" /I "..\..\kvilib\tal" /I "..\..\kvilib\system" /I "..\..\kvilib\irc" /I "..\..\kvilib\file" /I "..\..\kvilib\ext" /I "..\..\kvilib\net" /I "..\..\kvilib\core\wstring" /I "..\..\kvilib\core" /I "..\..\kvilib\config" /I "..\..\kvirc\kvs" /I "..\..\kvirc\module" /I "..\..\kvirc\uparser\scripttoolbar" /I "..\..\kvirc\uparser" /I "..\..\kvirc\sparser" /I "..\..\kvirc\kernel" /I "..\..\kvirc\ui" /I "C:\ssl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EDITOR_EXPORTS" /D "QT_DLL" /D "QT_THREAD_SUPPORT" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 $(QTDIR)\lib\qt-mtnc321.lib $(QTDIR)\lib\qtmain.lib libeay32.lib SSLeay32.lib ws2_32.lib kvilib.lib kvirc.lib msvcrt.lib /nologo /dll /incremental:no /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\..\..\win32build\KviDebug\modules\kvieditor.dll" /libpath:"C:\OpenSSL\lib\VC" /libpath:"..\..\kvilib\Debug" /libpath:"..\..\kvirc\Debug" +# SUBTRACT LINK32 /debug + +!ENDIF + +# Begin Target + +# Name "kvieditor - Win32 Release" +# Name "kvieditor - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\libkvieditor.cpp +# End Source File +# Begin Source File + +SOURCE=.\moc_scripteditor.cpp +# End Source File +# Begin Source File + +SOURCE=.\scripteditor.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\scripteditor.h + +!IF "$(CFG)" == "kvieditor - Win32 Release" + +# Begin Custom Build +InputDir=. +InputPath=.\scripteditor.h +InputName=scripteditor + +"$(InputDir)\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + %qtdir%\bin\moc.exe $(InputDir)\$(InputName).h -o $(InputDir)\moc_$(InputName).cpp + +# End Custom Build + +!ELSEIF "$(CFG)" == "kvieditor - Win32 Debug" + +# Begin Custom Build +InputDir=. +InputPath=.\scripteditor.h +InputName=scripteditor + +"$(InputDir)\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + %qtdir%\bin\moc.exe $(InputDir)\$(InputName).h -o $(InputDir)\moc_$(InputName).cpp + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/src/modules/editor/kvieditor.dsw b/src/modules/editor/kvieditor.dsw new file mode 100644 index 000000000..59b10af71 --- /dev/null +++ b/src/modules/editor/kvieditor.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "kvieditor"=.\kvieditor.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/src/modules/editor/libkvieditor.cpp b/src/modules/editor/libkvieditor.cpp new file mode 100644 index 000000000..3e027f261 --- /dev/null +++ b/src/modules/editor/libkvieditor.cpp @@ -0,0 +1,94 @@ +// +// File : libkvieditor.cpp +// Creation date : Mon Sep 11 2000 12:19:00 by Szymon Stefanek +// +// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net) +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// + +#include "kvi_module.h" + +#include "kvi_window.h" + +#include "scripteditor.h" + +KviModule * g_pEditorModulePointer = 0; + +KviPtrList<KviScriptEditorImplementation> * g_pScriptEditorWindowList = 0; + +static bool editor_module_init(KviModule * m) +{ + g_pScriptEditorWindowList = new KviPtrList<KviScriptEditorImplementation>; + g_pScriptEditorWindowList->setAutoDelete(false); + + g_pEditorModulePointer = m; + + return true; +} + +static bool editor_module_cleanup(KviModule *m) +{ + while(g_pScriptEditorWindowList->first()) + { + QObject * w = g_pScriptEditorWindowList->first()->parent();; + while(w) + { + //debug("%s %s %i %s",__FILE__,__FUNCTION__,__LINE__,w->className()); + if(w->inherits("KviWindow")) + { + // debug("%s %s %i",__FILE__,__FUNCTION__,__LINE__); + ((KviWindow *)w)->close(); + // debug("%s %s %i",__FILE__,__FUNCTION__,__LINE__); + break; + } + w = w->parent(); + } + delete g_pScriptEditorWindowList->first(); + } + delete g_pScriptEditorWindowList; + g_pScriptEditorWindowList = 0; + + return true; +} + +static bool editor_module_can_unload(KviModule *m) +{ + return ((g_pScriptEditorWindowList == 0) || (g_pScriptEditorWindowList->count() == 0)); +} + +KVIRC_MODULE( + "Editor", // module name + "1.0.0", // module version + "Copyright (C) 2000 Szymon Stefanek (pragma at kvirc dot net)", // author & (C) + "Text editor extension", + editor_module_init, + editor_module_can_unload, + 0, + editor_module_cleanup +) + +// We want C linkage on this one: we want to be able to dlsym() it with a simple name +// FIXME: Is this portable enough ? Or is better to have a table entry ? + +KVIMODULEEXPORTFUNC KviScriptEditor * editor_module_createScriptEditor(QWidget * par) +{ + return new KviScriptEditorImplementation(par); +} + +KVIMODULEEXPORTFUNC void editor_module_destroyScriptEditor(KviScriptEditor * e) +{ + delete ((KviScriptEditorImplementation *)e); +} diff --git a/src/modules/editor/scripteditor.cpp b/src/modules/editor/scripteditor.cpp new file mode 100644 index 000000000..46e13fa0e --- /dev/null +++ b/src/modules/editor/scripteditor.cpp @@ -0,0 +1,1157 @@ +//============================================================================= +// +// File : scripteditor.cpp +// Created on Sun Mar 28 1999 16:11:48 CEST by Szymon Stefanek +// Code improvements by Carbone Alessandro & Tonino Imbesi +// +// This file is part of the KVIrc IRC client distribution +// Copyright (C) 1999-2004 Szymon Stefanek <pragma at kvirc dot net> +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +//============================================================================= + +#include "scripteditor.h" + +#include <qlayout.h> +#include <qtoolbutton.h> +#include <qgroupbox.h> +#include <qpopupmenu.h> +#include <qmessagebox.h> +#include <qtimer.h> +#include <qobjectlist.h> +#include <qcursor.h> +#include <qfont.h> +#include <qrect.h> + +#include "kvi_fileutils.h" +#include "kvi_locale.h" +#include "kvi_filedialog.h" +#include "kvi_qstring.h" +#include "kvi_config.h" +#include "kvi_module.h" +#include "kvi_list.h" +// +#include "kvi_app.h" +#include "kvi_console.h" +#include "kvi_window.h" +#include "kvi_iconmanager.h" +#include "kvi_kvs_kernel.h" + +#include <qlayout.h> + + +extern KviPtrList<KviScriptEditorImplementation> * g_pScriptEditorWindowList; +extern KviModule * g_pEditorModulePointer; + + +static QColor g_clrBackground(0,0,0); +static QColor g_clrNormalText(100,255,0); +static QColor g_clrBracket(255,0,0); +static QColor g_clrComment(0,120,0); +static QColor g_clrFunction(255,255,0); +static QColor g_clrKeyword(120,120,150); +static QColor g_clrVariable(200,200,200); +static QColor g_clrPunctuation(180,180,0); +static QColor g_clrFind(187,221,255); + +static QFont g_fntNormal("Fixed",12); + +KviCompletionBox::KviCompletionBox(QWidget * parent = 0, const char * name = 0, WFlags f = 0) +: QListBox(parent,name,f) +{ + setPaletteForegroundColor(QColor(0,0,0)); + setPaletteBackgroundColor(QColor(255,255,255)); + setHScrollBarMode(QScrollView::AlwaysOff); + QFont listfont=font(); + listfont.setPointSize(8); + setFont(listfont); + setVariableWidth(false); + setFixedWidth(200); + //completelistbox->setColumnMode(QListBox::Variable); + hide(); +} + +void KviCompletionBox::updateContents(QString buffer) +{ + buffer=buffer.stripWhiteSpace(); + KviPtrList<QString> list; + clear(); + + QString szModule; + QChar* pCur = (QChar *)buffer.ucs2(); + + int pos=buffer.find('.'); + + if(pos>0) + { + szModule=buffer.left(pos); + if(szModule[0].unicode()=='$') + szModule.remove(0,1); + } + + if(pCur->unicode() == '$') + { + buffer.remove(0,1); + if(!buffer.isEmpty()) + { + if(szModule.isEmpty()) + KviKvsKernel::instance()->completeFunction(buffer,&list); + else + debug("we need a module completion!"); + for ( QString* szCurrent = list.first(); szCurrent; szCurrent = list.next() ) + { + szCurrent->prepend('$'); + //szCurrent->append('('); + insertItem(*szCurrent); + } + } + } + else + { + if(szModule.isEmpty()) + KviKvsKernel::instance()->completeCommand(buffer,&list); + else + debug("we need a module completion!"); + for ( QString* szCurrent = list.first(); szCurrent; szCurrent = list.next() ) + { + szCurrent->append(' '); + insertItem(*szCurrent); + } + } +// debug("%s %s %i %i",__FILE__,__FUNCTION__,__LINE__,count()); +} + +void KviCompletionBox::keyPressEvent(QKeyEvent * e) +{ +// debug("%s %s %i %x",__FILE__,__FUNCTION__,__LINE__,e->key()); + switch(e->key()) + { + case Qt::Key_Escape: + hide(); + setFocus(); + break; + case Qt::Key_Return: + break; + default: + if(!e->text().isEmpty()) + { + e->ignore(); + } + + } + QListBox::keyPressEvent(e); +} + +KviScriptEditorWidgetColorOptions::KviScriptEditorWidgetColorOptions(QWidget * pParent) +: QDialog(pParent) +{ + m_pSelectorInterfaceList = new KviPtrList<KviSelectorInterface>; + m_pSelectorInterfaceList->setAutoDelete(false); + setCaption(__tr2qs_ctx("Preferences","editor")); + QGridLayout * g = new QGridLayout(this,3,3,4,4); + + KviFontSelector * f = new KviFontSelector(this,__tr2qs_ctx("Font:","editor"),&g_fntNormal,true); + g->addMultiCellWidget(f,0,0,0,2); + m_pSelectorInterfaceList->append(f); + QGroupBox * gbox = new QGroupBox(1,QGroupBox::Horizontal,__tr2qs("Colors" ),this); + g->addMultiCellWidget(gbox,1,1,0,2); + KviColorSelector * s = addColorSelector(gbox,__tr2qs_ctx("Background:","editor"),&g_clrBackground,true); + s = addColorSelector(gbox,__tr2qs_ctx("Normal text:","editor"),&g_clrNormalText,true); + s = addColorSelector(gbox,__tr2qs_ctx("Brackets:","editor"),&g_clrBracket,true); + s = addColorSelector(gbox,__tr2qs_ctx("Comments:","editor"),&g_clrComment,true); + s = addColorSelector(gbox,__tr2qs_ctx("Functions:","editor"),&g_clrFunction,true); + s = addColorSelector(gbox,__tr2qs_ctx("Keywords:","editor"),&g_clrKeyword,true); + s = addColorSelector(gbox,__tr2qs_ctx("Variables:","editor"),&g_clrVariable,true); + s = addColorSelector(gbox,__tr2qs_ctx("Punctuation:","editor"),&g_clrPunctuation,true); + s = addColorSelector(gbox,__tr2qs_ctx("Find:","editor"),&g_clrFind,true); + + QPushButton * b = new QPushButton(__tr2qs_ctx("&OK","editor"),this); + b->setDefault(true); + connect(b,SIGNAL(clicked()),this,SLOT(okClicked())); + g->addWidget(b,2,1); + + b = new QPushButton(__tr2qs_ctx("Cancel","editor"),this); + connect(b,SIGNAL(clicked()),this,SLOT(reject())); + g->addWidget(b,2,2); + + + g->setRowStretch(0,1); + g->setColStretch(0,1); +} + +KviScriptEditorWidgetColorOptions::~KviScriptEditorWidgetColorOptions() +{ + delete m_pSelectorInterfaceList; +} + +KviColorSelector * KviScriptEditorWidgetColorOptions::addColorSelector(QWidget * pParent,const QString & txt,QColor * pOption,bool bEnabled) +{ + KviColorSelector * s = new KviColorSelector(pParent,txt,pOption,bEnabled); + m_pSelectorInterfaceList->append(s); + return s; +} + +void KviScriptEditorWidgetColorOptions::okClicked() +{ + for(KviSelectorInterface * i = m_pSelectorInterfaceList->first();i;i = m_pSelectorInterfaceList->next()) + { + i->commit(); + } + + accept(); +} + + +KviScriptEditorWidget::KviScriptEditorWidget(QWidget * pParent) +: QTextEdit(pParent) +{ + setWordWrap(QTextEdit::NoWrap); + m_pParent=pParent; + m_szHelp="Nothing"; + updateOptions(); + m_szFind=""; + completelistbox=new KviCompletionBox(this,"completelistbox"); + connect (completelistbox,SIGNAL(selected(const QString &)),this,SLOT(slotComplete(const QString &))); +} + +KviScriptEditorWidget::~KviScriptEditorWidget() +{ + +} + +QPopupMenu * KviScriptEditorWidget::createPopupMenu( const QPoint& pos ) +{ + QPopupMenu *pop=QTextEdit::createPopupMenu(pos); + pop->insertItem(__tr2qs("Context sensitive help"),this,SLOT(slotHelp()),CTRL+Key_H); + pop->insertItem(__tr2qs("&Replace"),this,SLOT(slotReplace()),CTRL+Key_R); + return pop; +} + +void KviScriptEditorWidget::slotFind() +{ + m_szFind=((KviScriptEditorImplementation*)m_pParent)->getFindlineedit()->text(); + setText(text()); +} + +void KviScriptEditorWidget::slotReplace() +{ + KviScriptEditorReplaceDialog *dialog=new KviScriptEditorReplaceDialog(this,tr("Find & Repalce")); + connect (dialog,SIGNAL(replaceAll(const QString &,const QString &)),m_pParent,SLOT(slotReplaceAll(const QString &,const QString &))); + connect (dialog,SIGNAL(initFind()),m_pParent,SLOT(slotInitFind())); + connect (dialog,SIGNAL(nextFind(const QString &)),m_pParent,SLOT(slotNextFind(const QString &))); + if(dialog->exec()){}; + +} +void KviScriptEditorWidget::slotHelp() +{ + contextSensitiveHelp(); +} + + +void KviScriptEditorWidget::updateOptions() +{ + setPaper(QBrush(g_clrBackground)); + setFont(g_fntNormal); + setColor(g_clrNormalText); + + QPalette p = palette(); + p.setColor(QColorGroup::Text,g_clrNormalText); + setPalette(p); + + setTextFormat(QTextEdit::PlainText); + + // this will rehighlight everything + setText(text()); // an "hack" to ensure Update all in the editor + KviScriptSyntaxHighlighter *h = new KviScriptSyntaxHighlighter(this); + (void)h; + ((KviScriptEditorImplementation*)m_pParent)->getFindlineedit()->setPaletteForegroundColor(g_clrFind); +} + +void KviScriptEditorWidget::keyPressEvent(QKeyEvent * e) +{ + if(e->state() == Qt::ControlButton) + { + switch(e->key()) + { + case Qt::Key_B: + insert("$b"); + return; + case Qt::Key_K: + insert("$k"); + return; + case Qt::Key_O: + insert("$o"); + return; + case Qt::Key_U: + insert("$u"); + return; + case Qt::Key_Enter: + case Qt::Key_Return: + case Qt::Key_Backspace: + case Qt::Key_PageUp: + e->ignore(); // allow the parent to process it + return; + break; + } + } + + if(e->state() == Qt::ShiftButton) + { + if (e->key() == Qt::Key_Insert) + { + completition(); + return; + } + } + switch(e->key()) + { + case Qt::Key_Period: + case Qt::Key_Left: + case Qt::Key_Right: + if(!completelistbox->isVisible()) completition(0); + break; + case Qt::Key_Up: + case Qt::Key_Escape: + case Qt::Key_PageUp: + case Qt::Key_PageDown: + case Qt::Key_End: + case Qt::Key_Home: + if(completelistbox->isVisible()) completelistbox->hide(); + break; + case Qt::Key_Down: + if(completelistbox->isVisible()) + { + completelistbox->setFocus(); + completelistbox->setCurrentItem(0); + return; + } + break; + case Qt::Key_Return: + QTextEdit::keyPressEvent(e); + int para,pos; + getCursorPosition(¶,&pos); + if(para > 0) + { + QString szPrev=text(para-1); + if(!szPrev.isEmpty()) + { + if(szPrev.at(szPrev.length() - 1).unicode() == ' ') + szPrev.remove(szPrev.length() - 1,1); + QString szCur; + const QChar * pCur = (const QChar *)szPrev.ucs2(); + if(pCur) + { + while(pCur->unicode() && pCur->isSpace()) + { + szCur.append(*pCur); + pCur++; + } + } + insertAt(szCur,para,0); + setCursorPosition(para,szCur.length()+pos); + } +// debug("|%i|",pos); + } + return; + default: + setFocus(); + break; + } + QTextEdit::keyPressEvent(e); + emit keyPressed(); + if(completelistbox->isVisible()) + completition(0); +} + +void KviScriptEditorWidget::contentsMousePressEvent(QMouseEvent *e) +{ + completelistbox->hide(); + if (e->button() == Qt::RightButton) + { +// bool bIsFirstWordInLine; + QString buffer; + int para = paragraphAt(e->pos()); + int index=charAt(e->pos(),¶); + buffer=this->text(para); + getWordOnCursor(buffer,index); + QString tmp=buffer; + KviPtrList<QString> l; + if (tmp.left(1) == "$") + { + tmp.remove(0,1); + KviKvsKernel::instance()->completeFunction(tmp,&l); + if (l.count() != 1) buffer=""; + else buffer=*(l.at(0)); + } + else + { + KviKvsKernel::instance()->completeCommand(tmp,&l); + if (l.count() != 1) buffer=""; + else buffer=*(l.at(0)); + } + //debug (buffer); + m_szHelp=buffer; + } + QTextEdit::contentsMousePressEvent(e); + +} + +bool KviScriptEditorWidget::contextSensitiveHelp() const +{ + QString buffer; + int para,index; + getCursorPosition(¶,&index); + buffer=text(para); + + getWordOnCursor(buffer,index); + + /* + QString tmp=buffer; + KviPtrList<QString> * l; + if(tmp.left(1) == "$") + { + tmp.remove(0,1); + l = g_pUserParser->completeFunctionAllocateResult(tmp); + } else { + l = g_pUserParser->completeCommandAllocateResult(tmp); + } + + bool bOk = false; + if(l) + { + for(QString * s = l->first();s;s = l->next()) + { + if(KviQString::equalCI(*s,buffer)) + { + l->last(); + bOk = true; + } + } + } + g_pUserParser->freeCompletionResult(l); + if(!bOk)return false; + */ + + QString parse; + KviQString::sprintf(parse,"timer -s (help,0){ help -s %Q; }",&buffer); + KviKvsScript::run(parse,(KviWindow*)g_pApp->activeConsole()); + + return true; +} + + +void KviScriptEditorWidget::getWordOnCursor(QString &buffer,int index) const +{ + QRegExp re("[ \t=,\\(\\)\"}{\\[\\]\r\n+-*><;@!]"); + //debug("BUFFER IS %s",buffer.utf8().data()); + int start = buffer.findRev(re,index); + int end = buffer.find(re,index); + + QString tmp; + if(start!=end) + { + if(start<0)start=0; + else start++; + if(end<0)end=index; + tmp = buffer.mid(start,end-start); + } + buffer = tmp; + //debug("BUFFER NOW IS %s",buffer.utf8().data()); +} + +void KviScriptEditorWidget::completition(bool bCanComplete) +{ + int line,index; + QString buffer; + QString word; + getCursorPosition(&line,&index); + buffer=this->text(line); + bool bIsFirstWordInLine; + getWordBeforeCursor(buffer,index,&bIsFirstWordInLine); + if(!buffer.isEmpty()) + completelistbox->updateContents(buffer); + if (completelistbox->count() == 1) word=completelistbox->text(0); + if (!word.isEmpty() && bCanComplete) + { + insert(word); + completelistbox->hide(); + } + if( completelistbox->count() == 0 ) + completelistbox->hide(); + else if(!completelistbox->isVisible()) + { + if (completelistbox->count() <6) completelistbox->resize(completelistbox->width(),(completelistbox->count()*completelistbox->fontMetrics().height()+20)); + else completelistbox->resize(completelistbox->width(),6*completelistbox->fontMetrics().height()+20); + int posy=paragraphRect(line).bottom(); + int posx=fontMetrics().width(this->text(line).left(index)); + completelistbox->move(posx,posy); + completelistbox->show(); + } +} + +void KviScriptEditorWidget::getWordBeforeCursor(QString &buffer,int index,bool *bIsFirstWordInLine) +{ + QString tmp = buffer.left(index); + buffer=tmp; + int idx = buffer.findRev(' '); + int idx1 = buffer.findRev("="); + int idx2 = buffer.findRev(','); + int idx3 = buffer.findRev('('); + int idx4 = buffer.findRev('"'); + if(idx1 > idx) idx= idx1; + if(idx2 > idx)idx = idx2; + if(idx3 > idx)idx = idx3; + if(idx4 > idx)idx = idx4; + *bIsFirstWordInLine = false; + if(idx > -1)buffer.remove(0,idx); + else + { + *bIsFirstWordInLine = true; + buffer.insert(0," "); + } + +} + +void KviScriptEditorWidget::slotComplete(const QString &str) +{ + QString complete=str; + int line,index; + getCursorPosition(&line,&index); + QString buffer; + buffer=this->text(line); + bool bIsFirstWordInLine; + getWordBeforeCursor(buffer,index,&bIsFirstWordInLine); + int len=buffer.length(); +// if (buffer[1].unicode() == '$') len --; + complete.remove(0,len-1); + if (buffer[1].unicode() == '$') complete.append("("); + else complete.append(" "); + insert (complete); + completelistbox->hide(); + setFocus(); +} + +KviScriptSyntaxHighlighter::KviScriptSyntaxHighlighter(KviScriptEditorWidget * pWidget) +: QSyntaxHighlighter(pWidget) +{ +} + +KviScriptSyntaxHighlighter::~KviScriptSyntaxHighlighter() +{ +} + +#define IN_COMMENT 1 +#define IN_LINE 2 +#define IN_STRING 4 + +int KviScriptSyntaxHighlighter::highlightParagraph(const QString &text,int endStateOfLastPara) + +{ + const QChar * pBuf = (const QChar *)text.ucs2(); + const QChar * c = pBuf; + if(!c)return endStateOfLastPara; + + if(endStateOfLastPara < 0)endStateOfLastPara = 0; + + bool bNewCommand = !(endStateOfLastPara & IN_LINE); + bool bInComment = endStateOfLastPara & IN_COMMENT; + bool bInString = endStateOfLastPara & IN_STRING; + + const QChar * pBegin; + + + while(c->unicode()) + { + if(bInComment) + { + pBegin = c; + while(c->unicode() && (c->unicode() != '*'))c++; + if(!c->unicode()) + { + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrComment); + return IN_COMMENT; + } + c++; + if(c->unicode() == '/') + { + // end of the comment! + c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrComment); + bInComment = false; + bNewCommand = true; + } + continue; + } + + if(c->isSpace()) + { + while(c->unicode() && c->isSpace())c++; + if(!c->unicode())continue; + } + + pBegin = c; + + // this does not break the bNewCommand flag + if((c->unicode() == '{') || (c->unicode() == '}')) + { + c++; + setFormat(pBegin - pBuf,1,g_fntNormal,g_clrBracket); + continue; + } + + + if(bNewCommand) + { + bNewCommand = false; + + if(c->unicode() == '#') + { + if(c > pBuf) + { + const QChar * prev = c - 1; + if((prev->unicode() == ']') || (prev->unicode() == '}')) + { + // array or hash count + c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrPunctuation); + continue; + } + } + // comment until the end of the line + while(c->unicode())c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrComment); + continue; + } + if(c->unicode() == '/') + { + c++; + if(c->unicode() == '/') + { + while(c->unicode())c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrComment); + continue; + } else if(c->unicode() == '*') + { + c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrComment); + bInComment = true; + continue; + } + c--; + } + if(c->unicode() && (c->isLetterOrNumber() || (c->unicode() == '_'))) + { + c++; + while(c->unicode() && (c->isLetterOrNumber() || (c->unicode() == '.') || (c->unicode() == '_') || (c->unicode() == ':')))c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrKeyword); + // special processing for callbacks and magic commands + if(pBegin->unicode() == 'e') + { + if(c - pBegin == 4) + { + // might be "else" + QString tmp(pBegin,4); + if(tmp.lower() == "else")bNewCommand = true; + continue; + } + } + // not an else... FIXME: should check for callbacks.. but that's prolly too difficult :) + continue; + } + } + if(c->unicode() == '$') + { + c++; + if(c->unicode() == '$') + { + c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrKeyword); + } else { + while(c->unicode() && (c->isLetterOrNumber() || (c->unicode() == '.') || (c->unicode() == '_') || (c->unicode() == ':')))c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrFunction); + } + continue; + } + + if(c->unicode() == '-') + { + QChar * pTmp =(QChar *) c; + c++; + if(c->unicode() == '-') c++; + if(c->isLetter()) + { + while(c->unicode() && (c->isLetterOrNumber() || (c->unicode() == '_')))c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrKeyword); + continue; + } else { + while(c!=pTmp) c--; + } + } + + if(c->unicode() == '%') + { + c++; + if(c->unicode() && (c->isLetterOrNumber() || (c->unicode() == ':') || (c->unicode() == '_'))) + { + while(c->unicode() && (c->isLetterOrNumber() || (c->unicode() == ':') || (c->unicode() == '_')))c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrVariable); + continue; + } + c--; + } + + if(!c->unicode())continue; + + if(c->isLetterOrNumber() || c->unicode() == '_') + { + c++; + while(c->unicode() && c->isLetterOrNumber() || (c->unicode() == '_'))c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrNormalText); + continue; + } + + if(c->unicode() == '\\') + { + c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrPunctuation); + // the next char is to be interpreted as normal text + pBegin = c; + if(c->unicode() && (c->unicode() != '\n')) + { + c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrNormalText); + continue; + } + // this is never returned since Qt sux in string processing + // it sets the newlines to spaces and we have no secure way to undestand that this was the end of a line + return IN_LINE; + } + + if(c->unicode() == '"') + { + bInString = !bInString; + c++; + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrPunctuation); + continue; + } else if(c->unicode() == ';') + { + if(!bInString) bNewCommand = true; // the next will be a new command + } + + c++; + if(bInString) + { + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrNormalText); + } else { + setFormat(pBegin - pBuf,c - pBegin,g_fntNormal,g_clrPunctuation); + } + } + + bool i=TRUE; + QString szFind=((KviScriptEditorWidget *)textEdit())->m_szFind; + if (!szFind.isEmpty()) + { + int index=0; + while (i) + { + index=text.find(szFind,index,false); + if (index != -1) + { + setFormat(index,szFind.length(),g_clrFind); + index += szFind.length(); + } + else i=false; + } + } + if(bInString) + return IN_LINE | IN_STRING; + else + return 0; +} + +// 22.02.2005 :: 00:01 +// valgrind --leak-check=yes --num-callers=10 -v kvirc -f +// +//==30299== Warning: SIGSEGV not in user code; either from syscall kill() +//==30299== or possible Valgrind bug. This message is only shown 3 times. +//==30299== Warning: SIGSEGV not in user code; either from syscall kill() +//==30299== or possible Valgrind bug. This message is only shown 3 times. +//==30299== Warning: SIGSEGV not in user code; either from syscall kill() +//==30299== or possible Valgrind bug. This message is only shown 3 times. + + +KviScriptEditorImplementation::KviScriptEditorImplementation(QWidget * par) +:KviScriptEditor(par) +{ + if(g_pScriptEditorWindowList->isEmpty())loadOptions(); + g_pScriptEditorWindowList->append(this); + m_lastCursorPos=QPoint(0,0); + QGridLayout * g = new QGridLayout(this,2,3,0,0); + + m_pFindLineedit = new QLineEdit(" ",this); + m_pFindLineedit->setFrameStyle(QFrame::Sunken | QFrame::Panel); + m_pFindLineedit->setText(""); + m_pFindLineedit->setPaletteForegroundColor(g_clrFind); + + m_pEditor = new KviScriptEditorWidget(this); + g->addMultiCellWidget(m_pEditor,0,0,0,3); + g->setRowStretch(0,1); + + QToolButton * b = new QToolButton(DownArrow,this); + b->setMinimumWidth(24); + g->addWidget(b,1,0); + + QPopupMenu * pop = new QPopupMenu(b); + pop->insertItem(__tr2qs_ctx("&Open...","editor"),this,SLOT(loadFromFile())); + pop->insertItem(__tr2qs_ctx("&Save As...","editor"),this,SLOT(saveToFile())); + pop->insertSeparator(); + pop->insertItem(__tr2qs_ctx("&Configure Editor...","editor"),this,SLOT(configureColors())); + b->setPopup(pop); + b->setPopupDelay(1); + + g->setColStretch(1,1); + g->setColStretch(2,10); + g->addWidget(m_pFindLineedit,1,2); + QLabel *lab= new QLabel("find",this); + lab->setText(tr("Find")); + + g->addWidget(lab,1,1); + m_pRowColLabel = new QLabel("0",this); + m_pRowColLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel); + m_pRowColLabel->setMinimumWidth(80); + g->addWidget(m_pRowColLabel,1,3); + + connect(m_pFindLineedit,SIGNAL(returnPressed()),m_pEditor,SLOT(slotFind())); + connect(m_pFindLineedit,SIGNAL(returnPressed()),this,SLOT(slotFind())); + connect(m_pEditor,SIGNAL(keyPressed()),this,SLOT(updateRowColLabel())); + connect(m_pEditor,SIGNAL(textChanged()),this,SLOT(updateRowColLabel())); + connect(m_pEditor,SIGNAL(selectionChanged()),this,SLOT(updateRowColLabel())); + m_lastCursorPos = QPoint(-1,-1); +} + +KviScriptEditorImplementation::~KviScriptEditorImplementation() +{ + g_pScriptEditorWindowList->removeRef(this); + if(g_pScriptEditorWindowList->isEmpty())saveOptions(); +} + +void KviScriptEditorImplementation::loadOptions() +{ + QString tmp; + g_pEditorModulePointer->getDefaultConfigFileName(tmp); + + KviConfig cfg(tmp,KviConfig::Read); + + g_clrBackground = cfg.readColorEntry("Background",QColor(0,0,0));; + g_clrNormalText = cfg.readColorEntry("NormalText",QColor(100,255,0)); + g_clrBracket = cfg.readColorEntry("Bracket",QColor(255,0,0)); + g_clrComment = cfg.readColorEntry("Comment",QColor(0,120,0)); + g_clrFunction = cfg.readColorEntry("Function",QColor(255,255,0)); + g_clrKeyword = cfg.readColorEntry("Keyword",QColor(120,120,150)); + g_clrVariable = cfg.readColorEntry("Variable",QColor(200,200,200)); + g_clrPunctuation = cfg.readColorEntry("Punctuation",QColor(180,180,0)); + g_clrFind = cfg.readColorEntry("Find",QColor(255,0,0)); + + g_fntNormal = cfg.readFontEntry("Font",QFont("Fixed",12)); +} + +bool KviScriptEditorImplementation::isModified() +{ + return m_pEditor->isModified(); +} + +void KviScriptEditorImplementation::slotFind() +{ + emit find(m_pFindLineedit->text()); + +} +void KviScriptEditorImplementation::slotNextFind(const QString &text) +{ +// emit nextFind(const QString &text); + +}void KviScriptEditorImplementation::slotInitFind() +{ + emit initFind(); + +} +void KviScriptEditorImplementation::slotReplaceAll(const QString &txt,const QString &txt1) +{ + emit replaceAll(txt,txt1); +} +void KviScriptEditorImplementation::saveOptions() +{ + QString tmp; + g_pEditorModulePointer->getDefaultConfigFileName(tmp); + + KviConfig cfg(tmp,KviConfig::Write); + + cfg.writeEntry("Background",g_clrBackground);; + cfg.writeEntry("NormalText",g_clrNormalText); + cfg.writeEntry("Bracket",g_clrBracket); + cfg.writeEntry("Comment",g_clrComment); + cfg.writeEntry("Function",g_clrFunction); + cfg.writeEntry("Keyword",g_clrKeyword); + cfg.writeEntry("Variable",g_clrVariable); + cfg.writeEntry("Punctuation",g_clrPunctuation); + cfg.writeEntry("Find",g_clrFind); + cfg.writeEntry("Font",g_fntNormal); +} + +void KviScriptEditorImplementation::setFocus() +{ + m_pEditor->setFocus(); +} + + + +void KviScriptEditorImplementation::focusInEvent(QFocusEvent *) +{ + m_pEditor->setFocus(); +} + + +void KviScriptEditorImplementation::setEnabled(bool bEnabled) +{ + QWidget::setEnabled(bEnabled); + m_pEditor->setEnabled(bEnabled); + m_pRowColLabel->setEnabled(bEnabled); +} + +void KviScriptEditorImplementation::saveToFile() +{ + QString fName; + if(KviFileDialog::askForSaveFileName(fName, + __tr2qs_ctx("Choose a Filename - KVIrc","editor"), + QString::null, + QString::null,false,true,true)) + { + QString buffer = m_pEditor->text(); + + //if(tmp.isEmpty())tmp = ""; + //KviStr buffer = tmp.utf8().data(); + if(!KviFileUtils::writeFile(fName,buffer)) + { + QString tmp; + QMessageBox::warning(this, + __tr2qs_ctx("Save Failed - KVIrc","editor"), + KviQString::sprintf(tmp,__tr2qs_ctx("Can't open the file %s for writing.","editor"),&fName)); + } + } +} + +void KviScriptEditorImplementation::setText(const QCString &txt) +{ + m_pEditor->setText(txt.data()); + m_pEditor->setTextFormat(QTextEdit::PlainText); + m_pEditor->moveCursor(QTextEdit::MoveEnd,false); + m_pEditor->setModified(false); + updateRowColLabel(); +} + +void KviScriptEditorImplementation::getText(QCString &txt) +{ + txt = m_pEditor->text(); +} +QLineEdit * KviScriptEditorImplementation::getFindlineedit() +{ + return m_pFindLineedit; +} +void KviScriptEditorImplementation::setText(const QString &txt) +{ + m_pEditor->setText(txt); + m_pEditor->setTextFormat(QTextEdit::PlainText); + m_pEditor->moveCursor(QTextEdit::MoveEnd,false); + m_pEditor->setModified(false); + updateRowColLabel(); +} + +void KviScriptEditorImplementation::getText(QString &txt) +{ + txt = m_pEditor->text(); +} +void KviScriptEditorImplementation::setFindText(const QString &txt) +{ + m_pFindLineedit->setText(txt); + m_pEditor->slotFind(); + +} + +void KviScriptEditorImplementation::setFindLineeditReadOnly(bool b) +{ + m_pFindLineedit->setReadOnly(b); + +} + + +void KviScriptEditorImplementation::updateRowColLabel() +{ + int iRow,iCol; + m_pEditor->getCursorPosition(&iRow,&iCol); + if(iRow != m_lastCursorPos.x() || iCol != m_lastCursorPos.y()) + { + m_lastCursorPos = QPoint(iRow,iCol); + QString tmp; + KviQString::sprintf(tmp,__tr2qs_ctx("Row: %d Col: %d","editor"),iRow,iCol); + m_pRowColLabel->setText(tmp); + } +} + +QPoint KviScriptEditorImplementation::getCursor() +{ + return m_lastCursorPos; +} +void KviScriptEditorImplementation::setCursorPosition(QPoint pos) +{ + m_pEditor->setCursorPosition(pos.x(),pos.y()); + m_pEditor->setFocus(); + m_pEditor->ensureCursorVisible(); + QString tmp; + KviQString::sprintf(tmp,__tr2qs_ctx("Row: %d Col: %d","editor"),pos.x(),pos.y()); + m_pRowColLabel->setText(tmp); + + m_lastCursorPos=pos; +} + +void KviScriptEditorImplementation::loadFromFile() +{ + QString fName; + if(KviFileDialog::askForOpenFileName(fName, + __tr2qs_ctx("Load Script File - KVIrc","editor"), + QString::null, + QString::null,false,true)) + { + QString buffer; + if(KviFileUtils::loadFile(fName,buffer)) + { + m_pEditor->setText(buffer); + m_pEditor->moveCursor(QTextEdit::MoveEnd,false); + updateRowColLabel(); + } else { + QString tmp; + QMessageBox::warning(this, + __tr2qs_ctx("Open Failed - KVIrc","editor"), + KviQString::sprintf(tmp,__tr2qs_ctx("Can't open the file %s for reading.","editor"),&fName)); + } + } +} + +void KviScriptEditorImplementation::configureColors() +{ + KviScriptEditorWidgetColorOptions dlg(this); + if(dlg.exec() == QDialog::Accepted) + + { + m_pEditor->updateOptions(); + saveOptions(); + } +} +KviScriptEditorReplaceDialog::KviScriptEditorReplaceDialog( QWidget* parent, const char* name) + : QDialog( parent) +{ + m_pParent=parent; + emit initFind(); + setPaletteForegroundColor( QColor( 0, 0, 0 ) ); + setPaletteBackgroundColor( QColor( 236, 233, 216 ) ); + QGridLayout *layout = new QGridLayout( this, 1, 1, 11, 6, "replace layout"); + + m_pFindlineedit = new QLineEdit( this, "findlineedit" ); + m_pFindlineedit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, m_pFindlineedit->sizePolicy().hasHeightForWidth() ) ); + m_pFindlineedit->setFrameShape( QLineEdit::LineEditPanel ); + m_pFindlineedit->setFrameShadow( QLineEdit::Sunken ); + + layout->addMultiCellWidget( m_pFindlineedit, 2, 2, 1, 2 ); + + m_pReplacelineedit = new QLineEdit( this, "replacelineedit" ); + m_pReplacelineedit->setFrameShape( QLineEdit::LineEditPanel ); + m_pReplacelineedit->setFrameShadow( QLineEdit::Sunken ); + + layout->addMultiCellWidget( m_pReplacelineedit, 3, 3, 1, 2 ); + + m_pFindlineedit->setFocus(); + + QLabel *findlabel = new QLabel( this, "findlabel" ); + findlabel->setText(tr("Word to Find")); + findlabel->setAutoResize(true); + + layout->addWidget( findlabel, 2, 0 ); + + QLabel *replacelabel = new QLabel( this, "replacelabel" ); + replacelabel->setText(tr("Replace with")); + replacelabel->setAutoResize(true); + + layout->addWidget( replacelabel, 3, 0 ); + + QPushButton *cancelbutton = new QPushButton( this, "cancelButton" ); + cancelbutton->setText(tr("&Cancel")); + layout->addWidget( cancelbutton, 5, 2 ); + + replacebutton = new QPushButton( this, "replacebutton" ); + replacebutton->setText(tr("&Replace")); + replacebutton->setEnabled( FALSE ); + layout->addWidget( replacebutton, 5, 0 ); + + checkReplaceAll = new KviStyledCheckBox( this, "replaceAll" ); + checkReplaceAll->setText(tr("&Replace in all Aliases")); + layout->addWidget( checkReplaceAll, 4, 0 ); + + findNext = new QPushButton(this, "findNext(WIP)" ); + findNext->setText(tr("&Findnext")); + layout->addWidget( findNext, 2, 3 ); + findNext->setEnabled(false); + + replace = new QPushButton(this, "replace" ); + replace->setText(tr("&Replace(WIP)")); + layout->addWidget( replace, 3, 3 ); + replace->setEnabled(false); + + clearWState( WState_Polished ); + + setTabOrder(m_pFindlineedit,m_pReplacelineedit); + // signals and slots connections + connect( replacebutton, SIGNAL( clicked() ), this, SLOT( slotReplace() ) ); + connect( findNext, SIGNAL( clicked() ),this,SLOT( slotNextFind())); + connect( cancelbutton, SIGNAL( clicked() ), this, SLOT( reject() ) ); + connect( m_pFindlineedit, SIGNAL( textChanged(const QString &)), this, SLOT( textChanged(const QString &))); + +} + + +KviScriptEditorReplaceDialog::~KviScriptEditorReplaceDialog() +{ +} + +void KviScriptEditorReplaceDialog::textChanged(const QString &txt) +{ + if (!txt.isEmpty()) replacebutton->setEnabled(TRUE); + else replacebutton->setEnabled(FALSE); + +} +void KviScriptEditorReplaceDialog::slotReplace() +{ + QString txt=((KviScriptEditorWidget *)m_pParent)->text(); + if (checkReplaceAll->isChecked()) emit replaceAll(m_pFindlineedit->text(),m_pReplacelineedit->text()); + else txt.replace(m_pFindlineedit->text(),m_pReplacelineedit->text(),false); + ((KviScriptEditorWidget *)m_pParent)->setText(txt); + m_pFindlineedit->setText(""); + m_pReplacelineedit->setText(""); + setTabOrder(m_pFindlineedit,m_pReplacelineedit); +} + + +void KviScriptEditorReplaceDialog::slotNextFind() +{ + emit nextFind(m_pFindlineedit->text()); +} diff --git a/src/modules/editor/scripteditor.h b/src/modules/editor/scripteditor.h new file mode 100644 index 000000000..914f9bd15 --- /dev/null +++ b/src/modules/editor/scripteditor.h @@ -0,0 +1,189 @@ +#ifndef _SCRIPTEDITOR_H_ +#define _SCRIPTEDITOR_H_ + +//============================================================================= +// +// File : scripteditor.h +// Created on Sun Mar 28 1999 16:11:48 CEST by Szymon Stefanek +// +// This file is part of the KVIrc IRC client distribution +// Copyright (C) 1999-2004 Szymon Stefanek <pragma at kvirc dot net> +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +//============================================================================= + +#include "kvi_scripteditor.h" + +#include <qlabel.h> +#include <qcstring.h> +#include <qtextedit.h> +#include <qsyntaxhighlighter.h> +#include <qdialog.h> +#include <qcheckbox.h> +#include <qlistbox.h> +#include <qevent.h> + +#include "kvi_list.h" +#include "kvi_selectors.h" +typedef KviPtrList<int> ColumnList; + +class KviCompletionBox: public QListBox +{ + Q_OBJECT +public: + KviCompletionBox(QWidget * parent, const char * name, WFlags f); + ~KviCompletionBox(){}; + + void updateContents(QString word); +protected: + virtual void keyPressEvent(QKeyEvent * e); +}; + +class KviScriptEditorWidget : public QTextEdit +{ + Q_OBJECT + Q_PROPERTY(bool contextSensitiveHelp READ contextSensitiveHelp) +public: + KviScriptEditorWidget(QWidget * pParent); + virtual ~KviScriptEditorWidget(); +public: + void updateOptions(); + void find1(); + QString m_szFind; + KviCompletionBox *completelistbox; + void completition(bool bCanComplete = 1); + void getWordBeforeCursor(QString &buffer,int index,bool *); + void getWordOnCursor(QString &buffer,int index) const; + bool contextSensitiveHelp() const; +public slots: + void slotFind(); + void slotHelp(); + void slotReplace(); + void slotComplete(const QString &str); + +signals: + void keyPressed(); +protected: + virtual void keyPressEvent(QKeyEvent * e); + void contentsMousePressEvent(QMouseEvent *); + QPopupMenu *createPopupMenu( const QPoint& pos ); + QWidget *m_pParent; + QString m_szHelp; + +}; + + +class KviScriptSyntaxHighlighter : public QSyntaxHighlighter +{ +public: + KviScriptSyntaxHighlighter(KviScriptEditorWidget * pWidget); + virtual ~KviScriptSyntaxHighlighter(); +public: + virtual int highlightParagraph(const QString & text,int endStateOfLastPara); +}; + +class KviScriptEditorWidgetColorOptions : public QDialog +{ + Q_OBJECT +public: + KviScriptEditorWidgetColorOptions(QWidget * pParent); + ~KviScriptEditorWidgetColorOptions(); +private: + KviPtrList<KviSelectorInterface> * m_pSelectorInterfaceList; +protected: + KviColorSelector * addColorSelector(QWidget * pParent,const QString & txt,QColor * pOption,bool bEnabled); + +protected slots: + void okClicked(); +}; + +class QTimer; + +class KviScriptEditorImplementation : public KviScriptEditor +{ + Q_OBJECT +public: + KviScriptEditorImplementation(QWidget * par); + virtual ~KviScriptEditorImplementation(); +protected: + KviScriptEditorWidget * m_pEditor; + QLabel * m_pRowColLabel; + QPoint m_lastCursorPos; +public: + virtual void setText(const QString &txt); + virtual void getText(QString &txt); + virtual void setText(const QCString &txt); + virtual void getText(QCString &txt); + virtual void setFindText(const QString & text); + virtual void setEnabled(bool bEnabled); + virtual void setFocus(); + virtual bool isModified(); + void setFindLineeditReadOnly(bool b); + void setCursorPosition(QPoint); + QPoint getCursor(); + QLineEdit *m_pFindlineedit; + QLineEdit * getFindlineedit(); +protected: + virtual void focusInEvent(QFocusEvent *e); + void loadOptions(); + void saveOptions(); +protected slots: + void saveToFile(); + void loadFromFile(); + void configureColors(); + void updateRowColLabel(); + void slotFind(); + void slotReplaceAll(const QString &,const QString &); + void slotInitFind(); + void slotNextFind(const QString &); +signals: + void find( const QString &); + void replaceAll( const QString &, const QString &); + void initFind(); + void nextFind(const QString &); +}; + +class KviScriptEditorReplaceDialog: public QDialog +{ + Q_OBJECT +public: + KviScriptEditorReplaceDialog( QWidget* parent = 0, const char* name = 0); + ~KviScriptEditorReplaceDialog(); + QLineEdit *m_pFindlineedit; + QLineEdit *m_pReplacelineedit; +protected: + QLabel *findlabel; + QLabel *replacelabel; + QPushButton *replacebutton; + QPushButton *replace; + QPushButton *findNext; + +// QPushButton *cancelbutton; + KviStyledCheckBox *checkReplaceAll; + QWidget *m_pParent; +protected slots: + void textChanged(const QString &); + void slotReplace(); + void slotNextFind(); +signals: + void replaceAll( const QString &,const QString &); + void initFind(); + void nextFind(const QString &); + +}; + + +#endif //!_SCRIPTEDITOR_H_ |
