Cross-platform 'code edit' control (with syntax highlighting, etc) - editor

Currently, I have found Scintilla. It has a Cocoa port, but I am not sure how stable it is. And I think it is bloated. Any simple, cross-platform edit control with syntax highlighting (and possibly 'code folding')?
Note: No need for a GUI. Just the 'guts' are fine.
Update: I was actually mistaken somewhat. I was confusing 'Rich Edit' control with 'Code Editing' control. Scintilla is a 'Code Editing' control, and that is what I am interested in. A control that has the best of both worlds would be icing on the cake.

From your mention of Cocoa I suspect you want to develop for iOS.
If this is the case maybe this question can help you Rich text editor library for iOS
Edit: http://cocoadev.com/index.pl?TextEditors there you find a lot of cocoa TextEditors (also for code, e.g. BBEdit or TextWrangler

Related

delphi integrate custom file editor into IDE

I have deveoped a custom file type, together with a custom editor (basically a tree with several data pages attached and a few extra buttons). OK, I can run it stand alone and that is fine, and even add it to the tools menu, but I would like to integrate it into the Delphi IDE so that my custom editor (or a similar new version) appears in the IDE, rather like a DFM file has a custom editor. I can find references to most extensions in the Delphi IDE, but not this one. Any guiding hands? Note that this is not a property or component editor (the file type has nothing to do with either of these) nor is it simply syntax highlighting of a text file.
AFAIK it currently isn't possible to reliably integrate a custom editor into the Delphi IDE. The required API simply isn't there. See QC89028 Custom Module support.
During the Delphi 2010 and XE betas I spent most my spare time trying to get a resource editor integrated. Although the effort had the official blessing of Embarcadero and got some, half hearted, support from the IDE engineer, I was never able to get them to deliver on their promises and surface the module API. I eventually abandoned the project.
Update: I've now checked my old correspondence regarding this and it turns out part of the problem was that IOTAModuleCreator (used to implement File|New for custom file types) and IOTAEditorContent (used to transfer data to/from the custom module) only supports text data. Binary data gets mangled.
You can probably do this via an IDE plugin that uses the ToolsAPI (see ToolsAPI.pas in the IDE's source folder (e.g. Program Files (x86)\Embarcadero\Studio\source\ToolsAPI\ToolsAPI.pas.)
For information on writing a plugin in general, see David G Hoyle's excellent blog. Once you know the basics - i.e., write a 'wizard' and get it to do something - you will need to work on integrating your editor.
I have never done this, and so I can't guarantee it is possible. However, some interfaces that look worth investigating and implementing are INTACustomEditorView, which represents a 'view' (file tab when that file is open - think the code editor, Welcome view, type library editor, etc) and IOTAEditorViewServices, to register your custom view. I do not know how you associate a view type with a file type, sorry - possibly something to do with the personality interfaces. You might also be interested in INTACustomEditorSubView which is what creates a tab on the bottom of a file.
Good luck, and if you find a solution please write here so that other people can learn too!

Display the Procedure/Function the cursor is in

Does the IDE display the current Procedure or Function that the cursor is inside of? If I search for myVariable is there any way to know (without having to scroll up) which function I landed inside of?
If it is not native are there any plugins that support this feature?
This functionality is not available in the IDE itself.
The an open-source CNPack Wizards have this functionality. See the images below, particularly the highlighted areas of the toolbar and code editor window. (Image from Delphi 2007 IDE, but CNWizards support later versions of Delphi up to and including XE5.)
It works with code that contains procedural (non-OOP) code as well. Here are two captures of separate procedural functions/procedures, with the relevant portions of the toolbar and code editor highlighted:
Castalia has this feature, among other things.
Since it is not an existing IDE functionality, various 3rd party tool providers have added it to their product.
On the list of existing tools is ModelMaker Code Explorer.
On the list of past tools, I'd like to add CodeRush as it was among the first to implement it. A screenshot can be found here (scroll down a bit).

Is there any Delphi Open Source project that Implement a basic IDE structure?

I have written a framework for Android and Windows, and got some tool that draw the forms and scripting that run on both enviroments. Just another solution like thousands.
What I want to do now is using Delphi (Xe2 in my case) to write an IDE like Delphi itself. That I could manage source files in a project and have forms. I have much of it already on DevExpress components. But I was wondering if there is anything that I could reuse to not invent the wheel again.
Certanly the drawing form should be necessary to have changes for my particular case, however it being capable of drawing forms with buttons, text, those common controls we find in majority of the platforms.
Right now I am using Balsamiq Mockup to draw and export xml to my compiler to integrate on the framework, it is nice, because it is a great drawing product, howeve there is a need to have all that IDE properties integrated and the need to put events on each control, for that an IDE all in one solution is better.
TMS Scripter -> I have found this commercial package, that comes with basically everything I need, scripting (I need VB but with different flavor, I believe it could be changed), form designer, project management, etc... It is very nice indeed. However I would like to hear of open source solutions
How about Lazarus? I think that's free, and it certainly has an extensive IDE.
http://www.lazarus.freepascal.org/
It's not a Delphi Open Source IDE, but I think it is free for use and feature rich:
MS Visual Studio Shell
what-is-the-visual-studio-shell-standalone-shell-good-for
RemObject use it for there tools. So it fits also for Delphi.

Updates for controls in Win3.1 palette

Some people are saying that I must update the controls in Win3.1 palette (especially TFilterComboBox) with modern ones. But does Delphi provide such new controls?
I need to create a GUI (somehow similar to Windows Explorer, consisting in a DirectoryListBox, FileListBox and a FilterComboBox) where I allow the user to easily explore for files of a specific type. Since the interface is centered around this Explorer, a TOpenDialog will be like hitting the customer with a hammer in the middle of his head. I need an 'easy to use' solution.
Unfortunately Shell Controls are not stable enough to be used as replacement.
The Shell Controls that come as a demo with Delphi only have to be installed, and you'll have some nice shell controls. There is, IMO, no big need to get 3rd party components for that.
Look for ShellCtls (or similar, can't check right now) in your demos folder. That Demos folder can be accessed from the Windows Start menu for your version of Delphi.
Update
They are not in a Demos folder, it is called Samples now. They can be found in Samples\Delphi\VCL\ShellControls. Install vclshlctrls.dproj first and then dclshlctrls.dproj.
In our application we use tpShellShock which works rather well. You may need to tweak it a little for Unicode Delphi, but if I recall correctly that was pretty simple to do.
Here's what it looks like:

Recommendations for a docking library for Delphi / C++Builder?

My team is currently thinking of moving our existing MDI-based application to a more modern, docking-based approach. We're still thinking, but we'd like to move it to something like VS2010's docking and visual look:
This has the following features:
Shows a blended outline where the window will dock
Docks into tabs, as well as side-by-side
Allows docking by dragging and releasing over an image showing the dock position (I call this a 'docking widget' below)
Looks pretty good too (theme / UI-wise)
I am having trouble finding a good-quality docking library to use with RAD Studio 2010 and am seeking advice on either what library/ies I haven't found, or how to use the ones I have found to achieve something like this.
Update: I ended up buying AutomatedQA's docking library. I think it's the best. More details below in the section about it.
Update 2, July 2011: This question looked at every single docking library available for Delphi/C++Builder, so I'm trying to keep it up to date. Two changes that I'm aware of:
SmartBear, who now own AutomatedQA, have end-of-lifed AutomatedQA's docking library. This the one one I recommended buying. They are considering open-sourcing it.
The one problem I had with DevExpress docking (that made it not worthy buying) was its lack of support for VS2008/10-style docking, with a docking widget, transparent overlay as you dragged, etc. They are now implementing it. Because of this, and since AQDocking is no longer being sold, if I asked this question now my accepted answer would be to buy DevExpress Docking.
I've found the following libraries. Here's an overview:
Inbuilt VCL docking
This allows forms to be docked on other forms or TWinControls, but appears to be quite basic. Forms drag using an XOR painted outline, which works very badly on Vista and Win7. There is a TTabDockSet control for tabbed docked forms, but I can't figure out how to control how the docked forms' titles render once docked. I think implementing docking side-by-side will have to be done manually, creating new docksite panels on the fly. The RAD Studio IDE's docking windows are a bit slicker than this (transparent rectangles when dragging a form, for example) which is odd, since I thought it used the VCL docking support.
JVCL docking
This looks a bit more of a decent solution that the inbuilt VCL docking. It supports docking on any edge or the client, and shows an alphablended rectangle where the form will dock.
It appears to be quite buggy (dropping a second form on top of a first is allowed, but freezes the program) and has no inbuilt tabbed dock support or any kind of drop-location widget.
LMD Docking Pack
This looks promising: while it doesn't seem to directly dock forms, it has docking panels and controls / frames are placed on that. Existing forms could be migrated to frames. It also has a docking widget and tabbed dock support.
However, the demo seems to be quite unreliable. I've got the latest evaluation version installed, and creating a new project with a dock site and several panels and pressing Run causes the following:
This is crashing in the form component streaming. Visually examining the DFM file doesn't show anything wrong, but there's an opaque binary blob for the layout information that may be causing it. This is not especially encouraging in an evaluation version.
DevExpress ExpressDocking
I had high hopes for this: I've never used any DevExpress controls before but they have a good reputation. But their demo program was really disappointing:
The control is flickery and doesn't seem to theme well with Windows, even using the XP style. It does have tabbed docking but it uses an XOR-ed outline - something that doesn't work well on XP or Vista. It also does not have any sort of docking widget. Frankly, it looks like it hasn't been updated since the Windows XP days. Update July 2011: This is being improved.
AutomatedQA / SmartBear docking library
This is the most promising of all the libraries so far.
I regularly use AQTime, an excellent profiler which appears to be written using their own docking library, and it works well. However, the latest version of the docking library trial download is for RAD Studio 2009, and the advice given for installing into 2010 is that it's unsupported, and you should recompile the source. The demo doesn't come with source, and we don't have RS2009, and the installer refuses to install unless we do, and even if we manged to get it to install we can't use it since we would need to recompile the non-existent source.
I've been in touch with their support team, and they pointed me to this thread. I also found another thread with customers asking much the same thing. I've replied and hope to hear better news. I'm not keen to recommend we buy a product I can't evaluate, especially when it's not supported for our IDE.
Update: I have ended up buying this library. In spite of problems evaluating (it works in D2007, and I had a copy of that) it seems the easiest to use of all the libraries, and also the most powerful - it's easy to write a theme for it, for example. I'd definitely recommend it if you need to select a docking library too.
Update July 2011: This library is no longer being sold, but may be open-sourced soon.
What have I missed?
That's everything I've found so far. What now?
Have I missed any good docking libraries for Delphi / C++ Builder / RAD Studio 2010?
Have I missed any features in the libraries I've lookd at so far? An answer like "You missed FooBar" or "JVCL does indeed have a docking widget, and you can use it like so..." would be pretty awesome to hear.
What would you recommend as my next step?
Thanks for your input :)
I am a jedi JVCL developer, and I have used JvDocking in my own commercial in-house projects, and found it to be solid and reliable.
Also, it's free. It's easy to extend. It creates a look and feel about the same as visual studio 2008 era docking.
I haven't found a single library that does everything that I would like, so after doing some experimenting I found that I could do almost everything I wanted by using the Native VCL Docking (NVCLD) controls with a series of custom modifications and some additional controls.
The following is a list things that I've run across in getting the NVCLD to work the way I wanted. I haven't had many problems porting between versions, but that's because I've got the src as well.
If your not looking to roll your own or you really want to use a 3rd party library then you can probably stop reading the rest of this. :)
Additional Components:
TDockPanel
This heavily modified docking panel is the workhorse my system. I found the original on the net but have modified it since to provide a little greater flexibility for my needs.
Custom Docking Forms (Base form)
By using a custom base class for my docking forms and inheriting it when needed I have less modifications to do on all of the descendant forms.
Custom Modifications
These are modifications to the .pas files of the NVCLD components themselves. Most of these modifications no longer have to be done because of some enhancements made to the base controls starting with D2009. You should be able to just create a new descendant and implement the changes in the there instead of modifying the default src files directly.
Transparent Docking Forms
By default (pre-2009 for sure) the NVCLD doesn't support the transparent form movement. There was a JVCL patch released a couple of years back that added that support to the JVCL which was simple to incorporate into a NVLCD patch.
Docking Manager
The default docking manager (pre-2009 for sure) didn't allow for newer/custom button images or docking header changes. This was rectified in D2009 I believe when the necessary methods where made virtual.
Tabbed Docking
To support the Additional docking components I needed to modify the DockTabSet.pas file to support additional docking properties used by the additional components. Most of this was corrected when the Docking Manager was modified as mentions previously.
As I stated most of these changes I made directly to the Delphi Src files and you shouldn't need to do that for newer versions of Delphi. My point is that with a little bit of work up front you can have a fairly robust docking system with out resorting to using a 3rd party library. Not that there is anything wrong with any of them, but I prefer not to use them unless I have no other choice or don't have the time to make it work my way.
I have used JCL, I have LMD, DevExpress and Automated QA Docking Library.
The closest you will find that will meet your need is the AutomatedQA Docking Library. I use it in my work for one of my projects.
Your next step, buy the AutomatedQA Library :)
from a Happy Customer.

Resources