Feature Ideas

From Free Pascal wiki
Jump to navigationJump to search

Template:Feature Ideas

This Page is intended to collect ideas for features that could be included in Lazarus. Putting an idea here does not mean it WILL be put into Lazarus. It's just a place to gather ideas. Think of this as more of a wishlist.


IDE

Features that could be included in the IDE

Integrated and Working Debugger

Debugging from inside the IDE is near impossible. I believe this is a combination of GDB being more C/C++ centric. I think the ultimate solution is to write a custom debugger for use with FPC and Lazarus IDE. This way it will be possible for the debugger to support ALL Object Pascal and Lazarus IDE requirements. GDB does support Object Pascal, but not nearly at the level it does with C/C++.

This should become a bigger priority than more eye-candy for the IDE. A IDE without debugging support is a pretty useless IDE. This would also explain all the negative comments received in the Delphi non-technical newsgroup. Make no mistake, I love the many unique IDE features Lazarus has to offer.

Unfortunately with open source projects, contributors only contribute to fulfill their own needs, and not the needs of others. I would offer my help if I know how debuggers work, but I come from Delphi and Kylix, when integrated debugging just worked. I don't even know GDB command, except for how to retrieve a backtrace (thanks to another wiki page on this site). So I am limited to contributing in other areas of the IDE.

I know a custom written debugger was started some time ago (I think it was called fpdebugger), but I have no clue if anybody is working or it, or what state it was left in.

--Ggeldenhuys 23:32, 30 September 2009 (CEST)

An Integrated IDE

There are too many windows in the IDE. The more features you use the more they pile up on your desktop and become hidden behind other windows. This is confusing for the newbie and otherwise a mess. Docking windows as found in some IDEs might seem to give flexibility however in practice it is a two dimensional solution. You accidentally undock a window and have it hanging on your mouse while you try to put it back where it was. It would be better to use conventional splitters and tab controls to put it all together into a logical layout.

  • Associated windows should be converted to Frames and then placed on a single form or tab page on the main form
  • 1. There should be a Welcome Page having new project wizards, a list of recent projexts, help and resources
  • 2. A Development tab containing sub tabs for code and for form design
  • a. Code tab including Code Explorer, Source Editor and Project Manager
  • b. Form design tab including Object Inspector, Form designer and Component Palette
  • 3 Debug tab containing the Debug windows as Frames.

Easier Draging & Dropping

pool: after you add a component at Form, what is your next action? Editting Name/Caption in OI. Would be nice having OI focused and a key field like Name/Caption/Text selected. It would be very intuitive just having to type after droping the component.

Common

  • Open files in the same folder as the current tab editor, like SCite does, it's a bit annoying to navigate from folder to folder every time you need open a file related to the one we are editing at the moment.
  • enable menu access through access keys like under windows (i hate mouse sessions :o)

example: <alt>-<f> for file menu

Source Editor

  • (Done in 0.9.27) When focusing/selecting one BEGIN the respective END should be in RED to show where it really ends.
  • Multiple splitting (and close the split) the editor to horizontal and vertical views like with VIM, so I can do split for example Vertically, and inside do a split for Horizontal editor. And we can close each split by right click on the movable splitter and select it from a menu item.
  • VIM keyboard support - require implementation of a command line like that can accept keyboards like with the VIM text editor.
  • Movable tabs, so we can place tabs as we wish instead of keeping them where they where opened.
  • (Done in 0.9.27) Ability to have a way to fold code arbitrary by using comments with special chars such as
some code {% /* } <-- start folding 
 more code
 ...
 ...
and more code {% */ } <-- stop folding 

  • Multi linguistic spell checkers for strings and comments, using aspell, hspell, ispell etc... (aspell and hspell already have binding for FPC)
  • Color code on errors with special underline or some type of color that the user can select/change that will help to locate where the problem is (not instead of the error message that exists today).
  • Ability to keep the string mark (that added to 0.9.27) of a word/selected string as permanent with a toggle of a menu item/key/toolbar or something
  • Inline help for a command/reserve word that the mouse cursor/keyboard caret are under that word (not instead of the tooltip that exists today when the mouse is hover the command/variable).
  • When pressing on CTRL on a file/variable/type etc.. that we are trying to load, it will place a tooltip telling what is going to be opened (the file + the line number)
  • Ability to save and load color scheme for syntax highlight.

Improvement of the menu and toolbars

  • to allow final-user customization
  • to obtain more styled menu (similar as Shagrouni xp-menu style)

Object Inspector

Search field

add a "search" text box at the top or bottom (preferred, maybe user settable) of Object Inspector to be able to search for a name or value (maybe with right click menu checkable options on whether Name or Value or both are searched) in the properties/events list

Question: What about sub properties?

Recent page

add a "Recent" tab to Object Inspector apart from the "Favorites" one, would be more useful than the Favorites one since it's automatic (would keep all properties/events that have been edited [fields that have either been changed or ENTER was pressed to CONFIRM/REset their current value - focus lost events shouldn't be considered editing if value of property/event field didn't change])

Question: How are items removed from the list?


Not registered component classes

Add a field in the object inspector to allow specify the real class that will be instantiated, with that will allow to uses derived classes without remake/link the IDE, of course the new fields for the real class will not be available to edit in designer. An example: We place a TEdit in a form, but we want to use a derived class we made that add a new field/property/method to TEdit and we will use that new field/property/method programming but in design time it's enough to work with TEdit, actually there is an option to change the class but only to another one that's already linked on the IDE.

Note: The class must be registered. This is needed for streaming and RTTI. If you don't want to register the real class, then register a fake class. It would be possible to create an artificial derived class from a registered component class on the fly. This has nothing to do with the OI. A dialog to manage all artificial classes must be implemented and a menu item must be added somewhere.

Refactoring

Global Variable/Method renaming

Proper renaming (as in if I rename a field in an object it can change everything that uses it but NOT other stuff that happens to have the same name) -Plugwash

Already implemented: See Source Editor -> popup menu -> refactoring -> rename identifier

Parameter Renaming in Methods

adding a parameter to a method (and updating everything that uses it) -Plugwash

How should that work? What should the IDE/codetools put as parameter at the places?
You specify that when you ask for the parameter to be added. Plugwash 05:09, 30 September 2006 (CEST)
For example, you add a parameter "b: boolean". The method is used a 100 times.
  • Possibility 1: You add a default parameter too. No change to the using methods is needed.
  • Possibility 2: You press compile and the compiler will jump to every occurence and you can decide, what to do.
  • Possibility 3: A new dialog is added to the IDE, where you can specify to insert a ",false" at every occurence.
  • Possibility 4: ?

Do you have 3 in mind or 4?

Parameter reordering

like Delphi. A dialog to add, remove, reorder parameters of a function, method, property.

Encapsulating Fields

though thats not really needed in object pascal because object pascal has properties but its vital in cleaning up thrown together java. -Plugwash

Please give an example.

Improvement of the IDE like GExperts does for Delphi

  • Backup tool...
  • Tab : provision to set Tab spacing

I have a dream of components : Jedi

Sure I switch immediatly from Delphi to Lazarus.

  • The Jedi components are a mix of OS dependant, Borland dependant and architecture specific code. I doubt these will ever work on anything but windows/x86. (and maybe win64 with a bit shoehorning). Example: To use a string routine in the strings unit of JCL, you have to fix like 12 units, some of which poke around in the Borland specific debug code. And then you haven't even reached the units of the JVCL, besides this there is a licensing problem. Marcov 18:27, 4 October 2008 (CEST)

Code completion

Create/Free objects

Declare an object myObj:TMyClass into a TForm class an type some Ctrl-Shift-Key, then the IDE adds a line myObj:=TMyClass.Create in FormCreate and myObj.Free in FormDestroy. -Rednaxel

Add list properties

Declaring an indexed property like 'property Items[i: integer]: TAType' and using this feature (Ctrl-Shift-Key, Menu), should popup a dialog to setup some parameters and then it should add a private variable fItems: TFPList; (or 'array of' or TList or ^AType), create code in the constructor, destroy code in the destructor and access methods GetItems, SetItems.

Visual Form Inheritance

VFI (Visual From Inheritance) works in Lazarus but there are some missing features:

  • When ancestor and descendant are open in the IDE and a property of the ancestor is changed, then change the descendant too.

Conditional Compiler Options

See Conditional Compiler Options.

Help

A small tutorial for Object Oriented Programming

I wish to have in Lazarus as in Eclipse in the Help menu a Tutorial for Object Oriented Programming.

  • This is a good idea, but I think a offline help browser is first required. Lucky for you, I am working on just such a beast. :-) I also have a few old programming manuals around that could contribute to the contents. I know Borland released the OOP chapter what was included in the Turbo Pascal 6 manuals for everybody to use (freely downloadable, but I can't remember the link). So maybe that will be the best place to start. I still have my original Turbo Pascal manuals around. --Ggeldenhuys 23:49, 30 September 2009 (CEST)

Better Macro support by making them easier to find

See the feature request #14558 in Mantis. In summary, add a button next to EditBox controls which support macro usage. Clicking the button will display a popup menu with available macros at that level and insert the selected macro into the EditBox at the cursor position.

LCL

Components

Components that are possible to make that will work across all platforms supported by Lazarus

Visual

  • Already implemented: Help system for apps created by Laz! It is a plugin system. That's why it supports cross-platform help system and using the OS's native help system.
  • The current LCL TStringGrid is a nice improvement over Delphi's feeble control with the same name. Would be great if it could be improved even more!
    • Support for data validation event handler, similar to Orpheus grid's OnUserValidation event. There are many events, for example OnEditing todo this. Please be more specific, what this OnUserValidation is.
    • Support for retrieving, displaying, editing and storing data that are stored in an existing memory structure or in a file rather than in grid itself, similar to the Orpheus grid's OnGetCellData and OnGetCellAttributes events. There is the TTIGrid, that can show TCollection, TList and TFPList of TPersistent. What else do you need?
    • An TImage Component wich support transparent winxp alpha 32 bit icon images
  • TTrayIcon
    • Add a TImageList property in TTrayIcon to change TrayIcon icon or animate it
  • TDBLookupComboBox
    • a component similar to TDBLookupComboBox (as of Delphi) would be very helpful.

NonVisual

  • Clipboard and TTimer that don't depend on LCL. If you use these in a library or console app, the compiler drags in a lot of unused and unneeded LCL code. If you have multiple DLL's, this code is duplicated in each. Current implementations appear to follow the Delphi design approach, where Clipboard and TTimer have dependencies on the VCL - this probably wasn't necessary.
    • TfpTimer is a non-LCL timer already available in FPC in unit fptimer.pp. Online help is available here. --Ggeldenhuys 14:38, 2 September 2009 (CEST)
    • This may be true on Windows, but it´s False for Linux. I recently implemented TTimer for qt interface and the implementation calls Qt API. I think the same applies to Clipboard, since the clipboard depends on the widgetset used too (gtk or qt for example), not only on the operating system. --Sekelsenmat 20:40, 5 Mar 2006 (CET)
    • The LCL is a visual component library. None visual components are provided by the FCL.
    • Lazarus will only provide components based on the LCL.
      • Well, that's not entirely true. LCL bases a lot of components on FCL classes. TCustomCanvas, TAction etc. :-) --Ggeldenhuys 17:17, 4 October 2008 (CEST)

PDA Support

Something that currently does not exist is a complete multiplatform solution for PDAs. If we can implement this, Lazarus will become the first multiplatform RAD for PDAs ever created. Some devices work with Java, some work with c++ and Qtopia, some work with their particular APIs, there is no single solution currently that can embrace a large portion of PDAs. Application have to be redone for every PDA or simply just run on one of them (what most people do).

The LCL implements many things. It is not necessary to implement them all to have a reasonably working Lazarus PDA widgetset. The most important things to be implementeded for PDAs are:

  • TApplication
  • TForm
  • TScreen
  • TCanvas and painting
  • Most Events (onClick and OnPaint at least)
  • Basic widgets like: TButton, TLabel, TEdit, TMemo.
  • Only minimum nessary LCLIntf functions to make TCanvas work. (GetDC, ReleaseDC, BeginPaint, EndPaint and some painting functions)

Others can be easely implemented by people who need them after those are ready.

Here is a list of some PDAs and the status of their support on Free Pascal / Lazarus:

  • Windows CE - The compiler already works really well cross compiling for Windows CE. The Windows CE Interface is under implementation.
  • Symbian OS - Possible for their ARM devices. Requires first adding a new Runtime Library for this OS to the Compiler. This OS has it's own API. There are open source projects for python and c to work on Symbian OS, so Free Pascal should work as well when a RTL is written.
  • Qtopia - For Zaurus and other linux-based PDAs. This is much easier now that basic Qt4 widgetset has being implemented, because Qtopia is very similar to Qt4. Some magick on the bindings is expected to make the same widgetset code to run for both Qtopia and Qt4.
  • Java - Some handheld devices, specially phones, only support java bytecode. May seam a little odd, but there is a Pascal Compiler capable of compiling the source into a jar and then into bytecode. It's name is Midlet Pascal http://www.midletpascal.com/ It may be possible to develop a similar technology that adds a java bytecode target for Free Pascal.
  • Palm OS - PalmOS 5 Garnet support requires that first the 68k compiler is working (runs on ARM processor with a kind of emulation) and then a RTL for palmos needs to be written. Only Free Pascal 1.0 supports 68k, this wasn't updated and the new compiler 2.0 doesn't support it yet (work in progress by fpc:User:Chain-Q), so will be a problem.

PalmOS 6 Cobalt is fully arm, so it only requires a rtl, but it has zero devices working on it currently and won't be on the market until 2007 at least.

Other compilers that support this target: Pascal & Palm Compiler and HsPascal. Unfortunately those compilers are not open source, so we can't use their code, we need to implement PalmOS RTL from zero.

More Interfaces

  • Cocoa - Requires that first OpenSTEP bindings are created for Free Pascal.
    • This is already in progress in Lazarus, thanks to Felipe. — Ggeldenhuys 17:40, 4 October 2008 (CEST)
  • BeAPI - interface for Haiku, ZetaOS and BeOS. There is no powerful RAD on this OS.
  • SDL - something like what was done in Pixel Image Editor.
  • MacApp 2.0 - For 68k-based Mac computers. MacApp was Apple Computer's primary object oriented application framework for the Mac OS for much of the 1990s. First released in 1985, it is arguably the first such system to be widely used, notably on a microcomputer platform. Microsoft's MFC and Borland's OWL were both based directly on MacApp concepts. This framework was completely written on Object Pascal, so it should integrate really nicely with Free Pascal and Lazarus. When Apple moved to PowerPC it also dropped Object Pascal support, but that's another story. A emulator for 68k-Mac can be easely set up with BasiliskII. There is also a project called MacApp2PPC that upgraded MacApp pascal code to run on Power PCs.
  • OS/2 native - Free Pascal works well with OS/2, so this should be quite possible.
  • Solaris - OpenSolaris versions exist and it's quite similar to Linux so why not ?
  • Web Interface - Application compiles to an embedded HTTP Server who serves forms in ajax pages (or compiles it to an Apache Module), like Intraweb in Delphi. Discussion in http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&t=2489
  • fpGUI - A widget set written in Free Pascal without any large library requirements. fpGUI talks directly to the underlying graphics library and is very easy to port to new platforms. Currently it supports Linux, ARM-Linux, FreeBSD, Windows and WinCE. - Under development here: fpGUI_Interface

Lua

Fixes branch releases

Currently we only have snapshots of the fixes branch, and it would be nice to also have them as releases. To have releases, those builds would have to be tested by someone, so I volunteer for that. What is needed is a testing checklist, and the start of it can be found on my page, User:Arny. Any further ideas are welcome!