Difference between revisions of "Development/Plans"

From Glom
Jump to: navigation, search
m (Reverted edits by Isijujemiru (talk) to last revision by Murrayc)
 
(45 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
Please consider funding my work on Glom so that I can implement all these features. [[MurrayCumming|Murray Cumming]]
 
Please consider funding my work on Glom so that I can implement all these features. [[MurrayCumming|Murray Cumming]]
  
== 1.0 Features ==
+
Or you could just donate via PayPal: [https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=murrayc.paypalgermany@murrayc.com&item_name=SupportGlom&currency_code=EUR&amount=100&return=http%3a%2f%2fwww.glom.org%2fwiki%2f%3Ftitle%3DThank_You_For_Donating http://www.paypal.com/images/x-click-but04.gif]
  
===Done===
+
Many thanks to our [[Supporters]] so far.
  
* '''Table Add/Remove''': Plus set a startup default, and hide secondary tables from users.
+
See also:
* '''Field Definitions''': Just the basics.
+
* [[1.0 Features]] (Done)
* '''Calculated Fields''': For instance, totals, concatenation. Uses python. Recalculates existing values when changing the calculation.
+
* [[1.2 Features]] (Done)
* '''Relationship Definitions'''
+
* [[1.4 Features]] (Done)
* '''List and Details views'''
+
* [[1.6 Features]] (Done)
* '''Automatic Layout''': No awkward pixel-perfect positioning and no mess when translating.
+
* [[1.8 Features]] (Done)
* '''Layout Design''': Not pretty, but it works.
+
* [http://bugzilla.gnome.org/buglist.cgi?product=Glom&bug_status=NEW&bug_status=REOPENED&bug_status=ASSIGNED&bug_status=UNCONFIRMED Open Bugs]
* '''Related Fields''': Show fields from related records, such as a contact name. Optionally create/edit related records via this.
+
* '''Related Records''': Show a list of related records on the layout, such as invoice lines. Create related records automatically.
+
* '''Lookups''': Store values from related records, such as a product price.
+
* '''Drop-down choices''' "Value Lists" in FileMaker. For instance, a list of products when entering a product code.
+
* '''Internationalized input and display''': For instance, commas instead of dots for German numbers.
+
* '''Access Control''': Define groups (containing users) and their create/delete/view/edit rights for each table.
+
* '''Finding''': Let the user enter text in the regular layout and just click Find. No query language, no choosing fields, no explicit boolean nonsense. Do substring case-insensitive searching instead of for exact matches.
+
* '''Printing''': Simple default print layout, to HTML in the browser.
+
* '''Simple "By" Reports'''
+
* '''Minimal formatting options''': Optional thousands separator, optional currency, decimal places. With check box to specify default formatting instead, with default formatting options as part of the field definition dialog.
+
* '''Image fields''': Show and save pictures in the database.
+
* '''Related field Details button''': A button next to IDs, when that is part of a to-one relationship, which takes the user to the full details for that related record.
+
* '''Find ID button''': A button next to lookup keys (fields used by looked-up fields) that opens a find dialog, to find an ID. Necessary when a drop-down list would be too big.
+
* '''Remember Position''': When returning to a table, in the same session, show the same layout (list or details) and the same record as last time.
+
* '''Quick Find''': Add an Entry to the layout in Find mode, use the input to search all fields, google-style. '''Time''': 30 hours.
+
* '''Find-Set information''': Show whether we are looking at all records or just the result of a find. Allow us to change to all records '''Time''': 20 hours.
+
* '''Internationalization''': Allow developers to enter titles (tables, fields, reports, relationships) for non-english languages. '''Time''': 60 hours.
+
* '''Scripting''': Buttons may be added to the layout. When clicked they run custom python code.
+
* '''System Properties relationship''': Add "system properties" relationship to all lists of relationships, to provide access to, for instance, the organisation address. '''Time''': 30 hours.
+
* '''Doubly Related fields''': For instance, allow Character::Actor(via Character::contact_id)::Agent(via Contacts::agent_id)::name on a Character details view.
+
* '''Tabs''': Add a notebook layout part. For instance, this would allow multiple related portals without making the layout huge.  
+
* '''Sort Found Set''': Click on list column headers to sort.
+
  
===To Do===
+
== Post-1.14 Features ==
  
* '''[[Development/Tests|Tests]]''': Make sure it all works together.
+
=== Easier tasks ===
  
 +
* Easier use of [[pg_dump when upgrading PostgreSQL]] (or ideally, invisible use of this, is both PostgreSQL versions are installed).
 +
* '''GUI for configuring a central postgres server.
 +
:* For instance, creating the [[Initial_Postgres_Configuration|initial user]]''', after asking for the root password.
 +
:* This can be a completely separate program. It can be in any programming language (Python with pygtk might be appropriate).
 +
:* It should parse the postgres configuration files, and then change them where necessary.
 +
:* To ask for, and gain, root (or superuser) rights, do whatever synaptic or gnome-system-tools does. There is commented-out code to get root rights in this way already, in connectionpool.cc
 +
* '''Warn when deleting used fields and relationships''': If a field or relationship is on a layout or report, or a field is in a relationship, warn before deleting.
 +
:* Create a new warning dialog in the Glade file, and create a C++ class for it.
 +
:* Add methods to the Document_Glom class, such as bool get_field_used(). Extra output parameters could return a string describing the use, or specific information about the layout, relationship, report, etc, on which it is used.
 +
:* Whenever the UI allows someone to delete one of these things, call the method and show a dialog if necessary.
 +
:* Depending on the dialog response, continue or cancel the deletion.
  
== Post-1.0 Features ==
+
* '''Quickly add Relationship/Field''': For instance, when adding a field to a layout, quickly add a relationship so that you can add a field from it, without closing the layout window, opening the relationships window, and opening the layout window again. Or to quickly add a field to the current table when adding a field to the layout dialog. Or, when specifying a related choices lists (in a Field'a default formatting). (30 hours)
 +
:* Add buttons to the dialogs in Glade.
 +
:* Create signal handlers for those buttons in the dialog classes.
 +
:* In the button signal handlers, open the appropriate dialogs - see the code that does the same from the regular menu signal handlers. Then update the current dialog to show the new available choices.
 +
:* Ideally, think of a way to avoid this causing so many windows to be open at once, on top of each other.
  
* '''Deal with lots of data''' Glom seems to get all records at once when viewing a table, though the custom tree model should theoretically progressively get only the records that are visible in the scrolled window.
+
 
* '''Custom Print Layout''': For instance, a perfect-looking official invoice. Implement with CSS fixed positioning? '''Time''': 80 hours.
+
=== Tasks requiring more experience ===
 +
 
 +
Some of these require you to have experience of, or learn about, the technologies marked in bold, such as Cairo, Avahi, or libgda.
 +
 
 +
* '''Custom Print Layout''': For instance, a perfect-looking official invoice. Implement with '''Cairo''' and the GTK+ 2.10 printing API. '''Time''': 80 hours. (Partly done in 1.8)
 +
* '''Automatic Server Detection''': Patch postgres to use '''Avahi''' for ZeroConf/Bonjour/Rendezvous service broadcast. Postgres already uses Bonjour on MacOS X. 
 +
* '''Scripting''': Most common actions should be standard features without the awkwardness of scripting, but maybe we need some way via the custom buttons to, for instance, on Contacts details create a related Invoice and take you to the Invoice details. For this, we must just present a python API for some parts of the Glom structure in addition to the current record object. This requires knowledge of the '''Python C API''', which is used already for calculated fields. Alternatively, you may use '''boost::python''' if you are already familiar with it.
 
* '''Non-Indexed Calculated Fields''': Optionally don't store values - just recalc them when seen/used, and therefore don't allow their use in relationships, though that's awkwardly technical when seen in FileMaker. '''Time-to-complete''': 60 hours.
 
* '''Non-Indexed Calculated Fields''': Optionally don't store values - just recalc them when seen/used, and therefore don't allow their use in relationships, though that's awkwardly technical when seen in FileMaker. '''Time-to-complete''': 60 hours.
* '''Internationalization via .po files''': Add Export and Import buttons to Translations Window, so translators can use their usual .po file tools. '''Time''': 10 hours.
 
 
* '''Locking''': Don't let a second user edit the same record. (Delay unlock for 5 seconds after entry loses focus). Update the display when the second user changes the same record. '''Time''': 50 hours.
 
* '''Locking''': Don't let a second user edit the same record. (Delay unlock for 5 seconds after entry loses focus). Update the display when the second user changes the same record. '''Time''': 50 hours.
* '''Drag-and-drop layout''': Add a panel of available items and show visual feedback as they are moved around on the layout. But still use the automatic-layout system. '''Time''': 60 hours.
 
* '''Relationships Overview''': See a picture of all the tables, with all their relationships to each other. Use a canvas and let the user drag the tables around. '''Time''': 70 hours.
 
* '''Choose Date From Calendar''': Add a calendar button next to date fields.
 
* '''Related Records as Calendar''': Display a portal of related records in a calendar, using a specified field as the date.
 
* '''Warn when deleting used fields and relationships''': If a field or relationship is on a layout or report, or a field is in a relationship, warn before deleting.
 
* '''Scripting''': Most common actions should be standard features without the awkwardness of scripting, but maybe we need some way via the custom buttons to, for instance, on Contacts details create a related Invoice and take you to the Invoice details. For this, we must just present a python API for some parts of the Glom structure in addition to the current record object.
 
 
* '''Multi-column relationships''': Match on 2 key fields instead of just one. '''Time''': 30 hours.
 
* '''Multi-column relationships''': Match on 2 key fields instead of just one. '''Time''': 30 hours.
 
* '''Performance:''': Keep connection alive, do less by-value copying, more caching and hashing. libgda 2.0 (when finished) should help with this.
 
* '''Performance:''': Keep connection alive, do less by-value copying, more caching and hashing. libgda 2.0 (when finished) should help with this.
* '''GUI for creating the [[Initial_Postgres_Configuration|initial user]]''', after asking for the root password.
+
* '''[[/WebUI|Web UI]]''': Possible in principle, although it probably wouldn't be as responsive as a desktop application. All the needed information is in the .glom document. Something for a web developer, and there's no need to choose a favourite language/platform - just do it.
* '''Windows Port''': Shouldn't be too difficult. All dependencies are portable. '''Time''': 60 hours.
+
* '''[[/EmbeddedGlom|Embedded Glom]]''': Port to Maemo and add new features to help.
* '''Web UI''': Possible in principle, though it couldn't be so responsive as a desktop application. All the needed information is in the .glom document. Something for a web developer, and there's no need to choose a favourite language/platform - just do it.
+
 
* '''Alien Tables''': Allows some tables to get/set data in non-postgres sources, such as evolution-data-server, so people don't need to enter their contact information twice.
 
* '''Alien Tables''': Allows some tables to get/set data in non-postgres sources, such as evolution-data-server, so people don't need to enter their contact information twice.
 +
* '''Multimedia Fields''':
 +
** We currently have Image fields that can store images in almost any format, but the image is actually converted to PNG before saving in the database, so we always know what format the data has. To preserve original formats, and to support audio and video, we would need to store the mime type as well. We would need to define a binary format for the data, so we could store the mime type along with the data. An existing format would be best.
 +
** Then we would need to implement video and audio playing widgets, and we should offer to open the appropriate external application where we can't "play" the data inline.
 +
** '''Time''': 80 hours.

Latest revision as of 14:57, 23 November 2010

Please consider funding my work on Glom so that I can implement all these features. Murray Cumming

Or you could just donate via PayPal: x-click-but04.gif

Many thanks to our Supporters so far.

See also:

Post-1.14 Features

Easier tasks

  • Easier use of pg_dump when upgrading PostgreSQL (or ideally, invisible use of this, is both PostgreSQL versions are installed).
  • GUI for configuring a central postgres server.
  • For instance, creating the initial user, after asking for the root password.
  • This can be a completely separate program. It can be in any programming language (Python with pygtk might be appropriate).
  • It should parse the postgres configuration files, and then change them where necessary.
  • To ask for, and gain, root (or superuser) rights, do whatever synaptic or gnome-system-tools does. There is commented-out code to get root rights in this way already, in connectionpool.cc
  • Warn when deleting used fields and relationships: If a field or relationship is on a layout or report, or a field is in a relationship, warn before deleting.
  • Create a new warning dialog in the Glade file, and create a C++ class for it.
  • Add methods to the Document_Glom class, such as bool get_field_used(). Extra output parameters could return a string describing the use, or specific information about the layout, relationship, report, etc, on which it is used.
  • Whenever the UI allows someone to delete one of these things, call the method and show a dialog if necessary.
  • Depending on the dialog response, continue or cancel the deletion.
  • Quickly add Relationship/Field: For instance, when adding a field to a layout, quickly add a relationship so that you can add a field from it, without closing the layout window, opening the relationships window, and opening the layout window again. Or to quickly add a field to the current table when adding a field to the layout dialog. Or, when specifying a related choices lists (in a Field'a default formatting). (30 hours)
  • Add buttons to the dialogs in Glade.
  • Create signal handlers for those buttons in the dialog classes.
  • In the button signal handlers, open the appropriate dialogs - see the code that does the same from the regular menu signal handlers. Then update the current dialog to show the new available choices.
  • Ideally, think of a way to avoid this causing so many windows to be open at once, on top of each other.


Tasks requiring more experience

Some of these require you to have experience of, or learn about, the technologies marked in bold, such as Cairo, Avahi, or libgda.

  • Custom Print Layout: For instance, a perfect-looking official invoice. Implement with Cairo and the GTK+ 2.10 printing API. Time: 80 hours. (Partly done in 1.8)
  • Automatic Server Detection: Patch postgres to use Avahi for ZeroConf/Bonjour/Rendezvous service broadcast. Postgres already uses Bonjour on MacOS X.
  • Scripting: Most common actions should be standard features without the awkwardness of scripting, but maybe we need some way via the custom buttons to, for instance, on Contacts details create a related Invoice and take you to the Invoice details. For this, we must just present a python API for some parts of the Glom structure in addition to the current record object. This requires knowledge of the Python C API, which is used already for calculated fields. Alternatively, you may use boost::python if you are already familiar with it.
  • Non-Indexed Calculated Fields: Optionally don't store values - just recalc them when seen/used, and therefore don't allow their use in relationships, though that's awkwardly technical when seen in FileMaker. Time-to-complete: 60 hours.
  • Locking: Don't let a second user edit the same record. (Delay unlock for 5 seconds after entry loses focus). Update the display when the second user changes the same record. Time: 50 hours.
  • Multi-column relationships: Match on 2 key fields instead of just one. Time: 30 hours.
  • Performance:: Keep connection alive, do less by-value copying, more caching and hashing. libgda 2.0 (when finished) should help with this.
  • Web UI: Possible in principle, although it probably wouldn't be as responsive as a desktop application. All the needed information is in the .glom document. Something for a web developer, and there's no need to choose a favourite language/platform - just do it.
  • Embedded Glom: Port to Maemo and add new features to help.
  • Alien Tables: Allows some tables to get/set data in non-postgres sources, such as evolution-data-server, so people don't need to enter their contact information twice.
  • Multimedia Fields:
    • We currently have Image fields that can store images in almost any format, but the image is actually converted to PNG before saving in the database, so we always know what format the data has. To preserve original formats, and to support audio and video, we would need to store the mime type as well. We would need to define a binary format for the data, so we could store the mime type along with the data. An existing format would be best.
    • Then we would need to implement video and audio playing widgets, and we should offer to open the appropriate external application where we can't "play" the data inline.
    • Time: 80 hours.