summaryrefslogtreecommitdiffstats
path: root/kexi/doc/dev/TODO-Kexi-js
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/doc/dev/TODO-Kexi-js')
-rw-r--r--kexi/doc/dev/TODO-Kexi-js1098
1 files changed, 1098 insertions, 0 deletions
diff --git a/kexi/doc/dev/TODO-Kexi-js b/kexi/doc/dev/TODO-Kexi-js
new file mode 100644
index 00000000..5974845c
--- /dev/null
+++ b/kexi/doc/dev/TODO-Kexi-js
@@ -0,0 +1,1098 @@
+-----------------------------------------------------------------------------
+ Kexi Development TODO Document
+ From jstaniek's Point of View
+
+ Also includes: win32 porting and multiplatform
+ features, planning, improving ideas, details
+
+ Copyright (C) 2003-2007 Jaroslaw Staniek js at iidea.pl / OpenOffice Polska
+ Kexi home page: http://www.kexi-project.org/
+-----------------------------------------------------------------------------
+
+TODO: rename KexiTabBrowser to KexiProjectWindow
+TODO: rename KexiBrowser to KexiProjectListView
+TODO: rename KexiBrowserItem to KexiProjectListViewItem
+TODO: rename KexiDialogBase to KexiWindowBase
+
+TODO: Kexi can use database as only medium for storing _all_ project's data
+ and then can treat .kexi files as:
+ -just export/import format for Kexi projects
+ -medium for storing projects that use sqlite driver
+ -simply: shortcut to project stored in database
+
+HINT: DO NOT USE signals/slots for lowlevel data manipulation (e.g. loading data for tableviews)!
+
+TODO: add kexiinclude_HEADERS and kexiincludedir to Makefile.ams to install headers, see:
+http://developer.kde.org/documentation/other/makefile_am_howto.html
+
+TODO: after kexi main window is activated again (from minimized state),
+ always 1st opened subwindow is activated
+TODO: when editor in table cell is active: after click outside of it, editor should be closed (accepted)
+
+TODO: FIX: QMetaObject::findSignal:KexiQueryPart: Conflict
+ with KexiProjectHandler::itemListChanged(KexiProjectHandler*) in KexiView
+
+TODO: FIX vertical alignment in table view's cells based on corrent QFontMetrics (make tests for
+ different font sizes and names)
+
+TODO: change texts in projectwizard to more descriptive:
+"Authentication" --> "Database server's user authentication"
+"Database Location" --> "Database Server Location"
+
+TODO: [complexity=big] add command line kexi tools
+
+TODO: install kexi-specific icons in apps/kexi/icons not as global
+
+TODO(GUI):
+-add "Change data source" button in project wizard
+-after pressing this button, show "connections selection dialog"
+-create "connections selection dialog" instead of project wizard:
+--add "Always show me this advanced dialog" checkbox to connections selection dialog
+--add "Set selected connection as default" checkbox to connections selection dialog
+-old project wizard is now "connection wizard" (for creating new connection);
+ "connection" created by user stores full info needed to get databases list
+-connection data is a mime type of local xml file, so it can be used to create shortcuts
+-kexi project is just connection extended with providing database name and user (local)
+ settings for this given database
+-on startup: by default offer:
+--creating empty temporary db on startup with name "New database"
+--creating new database using database wizard
+--opening existing Kexi projects
+--importing existing non-kexi databases
+
+FIX: corrupted database can be created sometimes (eg. for tests/newapi sqlite dbcreation)
+ --reason: maybe file was not flushed and app too early exited?
+
+<SQLITE>
+from: http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
+
+TODO:
+"Although SQLite parses named transactions, the names are ignored.
+SQLite does not support nested transactions. If you split the SQL statements in a transaction
+over several sqlite_exec() calls, you must be prepared to handle failure in each of these calls.
+If a failure occurs SQLite will return a non-zero value. After that, SQLite will revert to the
+default behavior of giving each SQL statement its own transaction until a new transaction is started."
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+---so: check if any sqlite_exec() failed and if so - update connection state as if rollback has been done.
+
+TODO: use callbacks for fetching data (to avoid data copying)
+TODO: "The SQLite library includes functions sqlite_encode_binary() and sqlite_decode_binary()
+in "encode.c". They can be used to safely encode binary data in a string form suitable for storing
+in SQLite, and safe for use in SQL queries. These functions are an "addition" to the SQLite library.
+They are not compiled into the library by default, and are not present in the precompiled binaries
+distributed on the download page."
+
+TODO: add possibility in cursor: "Operating in-place on data returned by sqlite_get_table()"
+
+TODO: add custom collation using sqlite3_create_collation() for:
+ - non-latin1 characters
+ - non-latin1 characters with NOCASE option
+TODO: add option for use ":memory:" special file.
+ - Allow to use it also e.g. for migration, etc.
+ - Allow to attach it as special portion of db
+
+TODO: Use hints coming from "Understanding The Architecture Of SQLite" slides
+ (optimization, etc.), http://www.sqlite.org/php2004/slides-all.html
+
+TODO: table merge automaton:
+ Imagine you have a simple database with two tables, and a third to join them as a
+ many-to-many relationship. Someone sends me an SQLite database as a file which has the
+ same structure, but the data is different. I want to merge these two databases
+ together keeping all of the relationships intact, without duplicating data.
+
+ For example, if the tables were "customers" and "products" and the one in between
+ "orders", there is the possibility that some customers and/or products might be the
+ same, but with different primary keys. The problem is that since the databases were
+ independently created, a simple union will break the relationships since the primary
+ keys will overlap.
+
+ I can think of brute force ways to do this, but I was wondering if anyone might have a
+ good algorithm or technique to accomplish this efficiently.
+
+TODO: add support for PRAGMA page_size on new db creation,
+ and e.g. propose default values for win32
+ http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuningWindows
+ (see also other optimization mentioned here)
+
+TODO: In Memory database/tables: how to load an sqlite file to be entirely fit in the memory?
+ clever solution: "You could set the cache size as big as your database file (via pragma).
+ This should load all (used) data into memory. This is probably not a good solution
+ if your application does not run for a longer time. "
+TODO: add autovacuum support on SQLite db creation?
+
+TODO: use sqlite3_set_authorizer() to get fine-grained access control support
+TODO: use SQLite's > 3.3.6 ability to load new SQL functions and collating sequences from shared libraries and DLLs
+ http://www.sqlite.org/cvstrac/wiki?p=LoadableExtensions
+TODO: use Virtual Tables to get external virtual data like CSV live queries
+ http://www.sqlite.org/cvstrac/wiki?p=VirtualTables
+TODO: use triggers to get undo/redo: http://www.sqlite.org/cvstrac/wiki?p=UndoRedo
+
+TODO: implement autoincrement for any field (also multiple fields) using the triggers; example:
+ CREATE TABLE test (a integer, b integer, txt text);
+ CREATE TRIGGER test_a_seq_trigger AFTER INSERT ON test FOR EACH ROW BEGIN update test set a=(ifnull((select max(a)+1 from test), 1)) where rowid=new.rowid and new.a isnull; END;
+ CREATE TRIGGER test_b_seq_trigger AFTER INSERT ON test FOR EACH ROW BEGIN update test set b=(ifnull((select max(b)+1 from test), 1)) where rowid=new.rowid and new.b isnull; END;
+ insert into test values (null, null, 'foo');
+ insert into test values (null, 7, 'bar');
+ insert into test values (null, null, 'text');
+ a|b|txt
+ 1|1|foo
+ 2|7|bar
+ 3|8|text
+ Then, support the following grammar in KEXISQL:
+ CREATE TABLE test (a integer autoincrement, b integer autoincrement, txt text);
+ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^
+
+</SQLITE>
+
+<RENAME_PROPOSALS>
+ALSO TODO: move all simple widget classes (e.g. KexiSettings, KexiTabBrowser)
+from core, to more detailed dirs,
+and projectWizard/ to wizards/ (there will be more wizards soon)
+
+</RENAME_PROPOSALS>
+
+TODO:
+- add kexi__parts (p_id integer, p_type) table and appropriate part objects in kexi__objects
+
+
+
+MOST RECENT TODO:
+- reuse recent project tab as separate window for "More projects..." menu action [difficulty: 1]
+- implement contents update for "recentprojects" menu action [difficulty: 2]
+- implement: drag-and-drop of the project file to the outside of Kexi, [difficulty: 2]
+- saveas== saving another shortcut to a project if it is server-based [difficulty: 2]
+
+TODO: improve security for password information in .kexis files
+TODO: for .kexis files' conenction data - if password attr. is not present - ask for password
+IDEA: integrate password information in .kexis files with KWallet
+
+
+TODO: Put Connection::dropTable() and Conenction::dropQuery() INSIDE TRANSACTION!!!!!!!
+
+TOP REQUESTED FEATURES LIST @ PL EXPO 2004:
+- ODBC driver (hello mattr!)
+- Access -> Kexi migration tool (done)
+- scripting
+
+=== Kexi Parts TODO ===
+- kexipart.h: add KexiPart::AboutData : public KAboutData
+ and
+ #define KEXIPART_EXPORT_COMPONENT_FACTORY( libname, partClass, aboutData ) \
+ K_EXPORT_COMPONENT_FACTORY( libname, KGenericFactory<partClass>(aboutData) )
+- add gui for viewing full part information
+
+=== General TODO ===
+- avoid using veryvery long names for objects
+- IDEA: Learning module. A special optional pane which shows what commands are sent to server
+ for learning purposes.
+- IDEA: Server-side wrapper for db connections (very simple) that allows anonymous [1]
+ (or any predefined group of users [2])
+ -- wrapper handles connections by validating *virtual* usernames and passwords for [1] case,
+ or providing unique virtual user names and passwords for [2] case
+ -- on the server side, wrapper connects to database server (it can be available locally or remotely)
+ using it's private user name and password. Thus, we only need one *physical* user name and password
+ for multiple users. Virtual names/passwords are mapped to physical one.
+ This is a solution for hosted database servers where it's hard to create as many users
+ as actually needed.
+ -- Priviledges are mapped as well, and translated. By default, user A could be able to create his/her
+ own database and drop it. He/she couldn't be able to do the same with user's B databases,
+ until user B allow this. The same for creating tables, and writing data.
+ -- wrapper secures server from too large data sets being sent to server
+ (parameters need to be configurable)
+ -- it's all dedicated for Kexi; so it's NOT a generic wrapper for any database client.
+- add "ADVANCED" find dialog: like in Mozilla Advanced Address Book Search window
+
+=== USABILITY TODO ===
+-add "Simple/Advanced Usage" global option
+--for simple usage:
+--use captions everywhere possible, instead of names (tables, fiels, etc.); names should be autogenerated
+
+=== i18n ===
+- plugins/forms/kexiformpart.cpp "Best Fit" instead of "To Fit" (pl=Najlepsze dopasowanie)
+- KexiQueryDesignerGuiEditor::initTableColumns(): i18n("Visible") --> i18n("Column visible", "Visible")
+- add comment for translators: i18n("'empty' is an adjective here", "Empty database")
+-"Could rename table \"%1\" using the same name."
+ --> "Could NOT rename table \"%1\" using the same name."
+
+I am using update_kexi_po to recreate kexi.po file. THis will run cd koffice/ && make -f admin/Makefile.common package-messages
+
+
+=== Import/Export Framework TODO ===
+-KEXIDB: add lower level functions like: "getting table names list", "getting table schema",
+ "getting index schema"
+
+=== Combo box editor TODO ====
+-new layout: a lineedit + dropdown button + popup tableview, when needed
+-use (and add few) methods for tableview to enable adjusting it for use it as dropdown tv
+--add scrolling for mouse dragging
+-dropdown tv has to contain:
+--QSizeGrip at the bottom corner
+-in kexidb: implement combobox settings for the foreign field:
+--ordered set of fields that are visible in popup tableview (ie. just query that is bound with the column)
+-use multi-key relations from kexidb
+- copy should handle "displayed" value, not the real one
+ (maybe let's use a custom clipboard mimetype? (containing a bound value) -- otherwise
+ it will be not posible to paste the copied value)
+- fix support for query as the row source
+- (forms combo) repaint (remove focus rectangle) when other widget is focused using a mouse click
+
+=== Table View TODO ====
+- do not accept when enterind "-" for unsigned numeric types
+- add a functions for moving/cutting/copying/pasting rows
+- extended support for enums (combo boxes)
+- add top-left button that allow select all rows
+- enable clicked vheader button to select given row
+- enable column dragging
+- add action "restore original column order"
+- add possibility of renaming column by 1) dbl-clicking header 2) "rename column" action
+- more actions (as in Format and Insert menus of MSA2k3)
+- add own impl. (based on Qt) for date/time editor because:
+-- no focusSection(), etc. is available in current impl.
+-- frames cannot be easily removed
+-store last sorting column (and type) and load it on KexiTableView::setData()
+ (not it's only cleared)
+- replace KexiDB::RowData usage in KexiTableItem with something faster
+- TODO RELATED TO CELL EDITORS:
+ - signal on situation when user e.g. pressed alpha key when only numeric chars is allowed
+ - signal when null/empty value forcell isn't permitted
+ - signal when repeated value isn't permitted
+ - add support for cut, copy & paste of cell's contents (get shortcuts from KStdAccel)
+HINT: removing Qt::WStaticContents from KexiTableView ctor fixed repaint problem
+ the problem was with repainting when hscrollbar disapperars....
+- KexiTableView loads all data from the table: very slow and consumes a lot of memory:
+ (e.g. for each record with 3 fields: 1 integer, 1 text and 1 float consumed ~350B)
+ - ctors and dtors are WAY TOO SLOW!
+ - add an option: for bigger tables load only part of the table data
+ - optimize MySQL record size
+- add focus rectangles for cells:
+ http://mfc.dundas.com/mfc/grid/index.aspx?section=Grid&body=focusrectangles.htm
+- add more cell types & options:
+ http://mfc.dundas.com/mfc/grid/index.aspx?section=Grid&body=celltypes.htm
+ --including: red corner with a note; sliders; radio buttons
+- highlight sorted column's cells slightly darker, like in current KListView's impl.
+- clicking on a header section (to sort), it ensures current cell is visible, but
+ only y-position should be changed, not x
+- add support for crossed out rows - that can be used for results of DELETE queries
+ (see http://www.gnome-db.org/images/screenshots/mergeant_table_data.png)
+- add combo boxes for fields filtering in column headers,
+ as in http://www.sqlmanager.net/i/scr/mysql/manager/Main%20100.gif
+- display autonumber indicator in autonumbered column(s)
+- reimplement header widget to better show sorting indicators
+- display tooltip over cells that are to small to display entire contents
+- Add icons for conditional formatting: http://blogs.msdn.com/excel/archive/2006/05/09/594200.aspx
+ (displaying icons is already possible using custom properties, BTW)
+- display [null] values in boolean fields, e.g. as [?]
+- allow to select entire rows, columns and grids as in a spreadsheet;
+ offer copy/cut/paste/copy-to-file/clear for such selections
+- tooltips:
+-- implement tooltip manager (this will allow to create custom tooltips)
+-- use if ( QApplication::isEffectEnabled( UI_AnimateTooltip ) == FALSE ||....
+ as in qtooltip.cpp:564
+-- implement custom tooltip for large texts and BLOB, add "zoom" option at the bottom of the tooltip
+ (zooming should not show a modal dialog but rather a widget inside the TV)
+-- add the same zoom option to the context menu
+-- also show tooltips when the content is only partially visible
+- fix horizontal scrollbar's width updating: large tables like 'tabkodypocztowe1' hide the 'last' and 'new' buttons
+- display default values for BLOB types
+
+- add "None" option for editors supporting 3rdState, e.g. int, string (needed for "default"
+ property of the Table Designer)
+- fix repainting cells when moving down/up arrow at the window boundaries
+ (weird, win32 is not affected)
+
+- (e.g. in table designer): in an empty row 1. drop down a type combo. 2. do not select enything an click outside
+ of it. 3.
+- do not autoscroll vertically the contents if the current column is wider than the view
+ (my example: 'microsoft_terminology' table's 1st column) because the text us unreadable
+ valid even when we use arow keys only
+
+- KexiComboBoxTableEdit::createInternalEditor():
+ set d->internalEditor visible and use it to enable data entering by hand
+ (for now only types based that use KexiInputTableEdit (Text, Integer..) allows data entry using keyboard
+
+- display error message on top of table view if data fetching failed
+
+==== ALTER TABLE TODO: =============
+-add a function for editing indices (including multi-field indices)
+ 2 methods: 1) in additional dock 2) in property editor
+-add all missing properties (even when most are not working)
+-add "index" information icon @ the left hand of line with key(s) that is/are indexed
+-in propeditor: auto-sync pkey, unique, required & indexed properties on changing;
+ add message boxes if needed
+-for 'column width' property: add 'default' value at the beginning
+-propose index key (ask for name) on saving tables without index (allow to bypass this message)
+- re-add "tablepart_toggle_pkey" action after shared toggle actions fix:
+--when propeditor is focused, there's a problem with syncing on/off state of toolbar button
+ of "tablepart_toggle_pkey" action
+ --> altertable view doesn't receive the signal about toggling (because it's not focused)
+
+==== Forms TODO ====
+-add "datasheet view" to db-aware forms
+-add [NewFormDefaults] option group and:
+--add "autoTabStop" (bool)
+^^^ implement above so Form::autoAssignTabStops() will be called before form saving
+ and before switching to data mode (this is already performed in FormIO::saveFormToDom().
+- add setting expressions for data-aware widget's dataSource
+- add setting anonymous (not stored) queries as form's dataSource
+- display "Autonumber" string for data-aware widgets
+- implement shared action categories to filter out them in 'assigning actions to push buttons'
+- implement "restore default properties" action for widgets
+- allow form's surface resizing when there's global layout defined
+- fix repainting form's surface boundaries repainting when its size is changed by entering
+ value in the propeditor
+- fix spring behaviour: it cannot be shrinked if its inside a layout
+- KTextEdit doesn't allow to set custom cursor (also in Qt Designer)
+- support for multiple widgets selection in the property editor (requires changes to kexiproperty)
+- handle older and newer formats in FormIO::loadFormFromDom()
+- KAcceleratorManager::setNoAccel(QWidget*) - use it in data mode,
+ define "auto accels" form's property and if it's false
+- find a way to create more meaningfull default names for widgets than button1, button2.
+ Maybe convert widget text (if available) using string2Identifier()?
+ Maybe ask user to enter meaningfull name (+"do not ask this question again" checkbox)?
+ See also http://charlespetzold.com/etc/DoesVisualStudioRotTheMind.html
+- For newer widget types, add information for compatible widgets that
+ can be used instead of them. For best flexibility save this information in a form XML.
+ Example use: We have Kexi version N and N+1. In N+1 there's KexiFrame widget introduced that
+ extends QFrame with more features. Kexi N has no KexiFrame implemented but only QFrame.
+ When KexiFrame witget type has been encountered in the form's XML string,
+ Kexi N it is able to insert QFrame instead of KexiFrame (unsupported properties will be just ignored).
+ The result of substitution may be not accurate, so thing twice before adding such information
+ for a given widget type.
+- add "buttonStyle" property for pushbutton widget with following values:
+-- Button - the deafult
+-- Hiperlink - clickable hiperlink will be displayed instead of button itself
+-- Image - an clickable image will be displayed instead of button itself
+ For this value, aditional properties will make sense:
+--- image, mouseOverImage, mouseDownImage
+-- Thus, we'll have more consistent solution than MSA, which allows to
+ mess the form by setting hiperlinks directly also in Image box and Label widgets
+- add "icon" property for pushbutton
+- For "OnCLick" property:
+-- allow to set hiperlink (and anchor) as value (i.e. so called "target location")
+ (see MSA's hiperlinkaddress, hiperlinksubaddress properties)
+- frame widget:
+-- add such fancy frame: http://www.themaninblue.com/writing/perspective/2004/08/05/
+- tab widget: add color property for setting particular tab
+- add a Scratchpad as in QtDesigner4, allows to drag&drop widgets between forms...
+- Use RESET clause for Q_PROPERTY, eg. RESET unsetPalette for paletteBackgroundColor.
+ Then, use bool QMetaProperty::reset ( QObject * o ) const to reset property value in the propeditor.
+- Autoforms: allow to define groups of fields so the fileds can be displayed with nice groupo boxes.
+ (e.g. http://www.glom.org/screenshots/glom_data_details.png)
+ This definition shgould be made during table design, so we can reuse groupping information also in
+ autoreports and auto web forms. Especially usable for tables with lots of fields.
+ We could even define the groupping levels so top-level groups can be splitted using Tab Wigget.
+- fix support for blob visible values for the combo box widget
+
+==== Property Editor TODO: =========
+- text does not fit well inside combobox editor
+- double editor should be klineedit with doublevalidator, not spinbox
+- add a hint for propertybuffer to allow properties to be displayed side-by-side
+ e.g. width, height properties ca be displayed this way. See also property editor
+ at http://freshmeat.net/screenshots/41728/
+-KexiProperty: make it really shared (using QShared?)
+-for each row (property) allow to define double-click-action dependent on property type,
+ * e.g. bool editor: toggle true/false,
+ * enum editor: select next value (circularly),
+ * fire selection dialog for filename editor, color editor, pixmap editor, etc.
+ * expand children for cells of type like "Rect"
+ * other types- by default: just move cursor to editor
+- add support for "set" types (e.g. AlignTop|AlignBottom) and port form's objpropertybuffer to this
+- add "description" label on the bottom of the property editor;
+ it should reuse Property::description() text
+- support Variant type (needs update in Editor) so Property::setValue() won't show a "INCOMPATIBLE TYPES!" warning
+ (needed e.g. by KexiTableDesignerView for "defaultValue" property)
+
+==== Query Designer TODO: ======
+- add tables dropping from the browser
+- add a dialog for inserting multiple tables at a time
+- fix connections drawing
+- make "1" and "inf" signs a bit larger (scalable)
+- 'totals' are unused yet
+- update query after change in Connection cache
+- for queries like 'select * from a, b, c' allow to enter * in 'table' column
+--this should also work when we're recreating field rows on switching from SQL view to design view
+- query part: react on KexiProject::aboutItemDelete() and KexiProject::aboutItemRename() signals
+- query parameters:
+-- use a special dialog with validators compatible with the field type for getting query parameters
+ (currently KInputDialog is used)
+-- use dialog like KInputDialog::getItemList() for supporting multiple values as query parameters
+- support add "PARAMETERS [prompt1] datatype1, [prompt2] datatype2;" syntax to the parser,
+ and add query "Query parameters" dialog/pane, allowing to order parameters that user should
+ provide (Ks. eksp., p. 73)
+- ADDINs: a tree dialog showing query dependencies, and query templates like these http://www.4tops.com/query_tree.htm
+
+==== SQL Editor TODO: =====
+- intergrate editor's (KPart) actions with KexiMainWindow's Actions
+- win32: katepart on win32: void KateSyntaxDocument::setupModeList (bool force)
+ Works slowly for the 1st time because there is no cache.
+ Workaround: removed most of apps/katepart/syntax/*.xml files
+- win32: fix freeze on 1st char entering
+- win32: fix mmap for win9x (InterlockedCompareExchange() replacement is needed
+ -> see kdelibs/win/mmap.c)
+- call qApp->processEvents() on highlighting schema loading,
+ so 'wait' cursor can be visible on 1st loading.
+- allow saving invalid queries (KexiQueryDesignerSQLView::storeNewData())
+ (for invelid queries, after opening SQL view should be shown automatically)
+- allow to copy error message (e.g. using a copy button)
+ + allow to select message text (use active label?)
+
+==== Main window TODO ====
+- propeditor dock window is hidden when a window in data view mode is active
+ (or no window is present). This feature is partially disabled
+ (using PROPEDITOR_VISIBILITY_CHANGES), though,
+ --REENABLE when blinking and dock width changes will be removed in KMDI
+- add sorting projects information using KexiProjectData::lastOpened
+- also add this info as "Database>Open Recent" menu subentry
+- display errors when plugin library could not be instantiated due to a broken lib
+- Project Navigator: display multiline item names is needed
+- display progress bar (in the statusbar?) to indicate there're pending jobs
+- enlarge the default main window size, currently it's ~50% ofthe desktop size
+ - not convenient as user is forced to enlarge the window by hand (settings are stored though)
+- add "File->Save All" action
+- add settings dialog, KConfigXT based simple version
+ + about:config-like using kconfigeditor http://extragear.kde.org/apps/kconfigeditor/
+ (possible reuse of koproperty)
+
+TODO: add SharedAction::setVisible() and use QMenuData::setItemVisible() where needed
+
+CCPASTEUR:
+ -perhaps we'd reuse KDE Menu editor GUI?
+
+=== KexiDB TODO ===
+- add to field's properties list: input mask, validation rule, column width
+- improve Expression class, add code for generating expression
+ strings in Connection::queryStatement()
+- add dynamic resize for dict members like Connection::m_tables
+- make KexiDB really ASYNC, multithreaded!
+- implement relationships (foreign key information) between tables + storage
+-- Support tree standard types of integrity rules as described at http://allenbrowne.com/ser-64.html
+ plus: Cascade to Null Relations
+- implement GROUP BY clause + storage
+- add schema to kexi__* tables on createTable()
+- add support for creation temporary databases
+- look at Connection::isReadOnly() to see if we can perform certain operations
+ requiring write access (create db, update db props, etc.)
+- reuse ConnectionData::useLocalSocketFile for connections using socket file
+- Connection::alterTableName():
+--alter table name for server DB backends!
+--what about objects (queries/forms) that use old name?
+- PGSQL: use setval(sequence) to allow setting autonumber values by hand
+ http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html
+- optionally, introduce EDITABLE_AUTONUMBER_FIELDS driver flag
+PiggZ_ js: and to ensure you always have id 1 and 2, well.....they would be anyway at db creation time as sequence = 0
+ js PiggZ_: but users ofter want to enter it anyway
+ js eg. sqlite increments its autonumber to 1001 if you enter 1000
+ js we want nothing more that that
+ js s/than that
+ PiggZ_ personally, i never want to enter a value into autonumber.....autonumber usually = pkey, so its best to let the db handle it
+ js If use want strict sequences to be used, he can:
+ js 1) hide autonumber column at all
+ js 2) set it not-editable
+ js 3) or just do not touch this column
+ PiggZ_ well then, its probably best to set the value of the sequence if a value is manually entered...if possible
+
+- add an QAsciiDict of (reserved) SQL keywords and use it in Driver::escapeIdentifier()
+- add FieldType and move things like typeGroupString() there
+- CRASH: removing tables when a query still uses it.
+ HOW TO FIX: Add TableSchema::Ptr, QuerySchema::Ptr, etc.
+-- related to above: add a possibility to return all objects (and optionally all opened objects)
+ thad depend on a given table
+-- we could also add a GUI tree to show these dependencies
+- add permissions information to connection : and - for sqlite - check if file is RO
+ and then set RO flag
+- add kexi__toremove table, and use it to remove objects on begin connection
+- [Kexi 0.2?] sometimes a user has got only one database availaliable on a server
+ (eg. when server is commercially hosted). Somethime user isn't just able
+ to create database because of insuffficient privileges.
+ Solutions --> add a possibility of sharing multiple projects within the same database
+ * kexi__* tables will be shared
+ * prefixes can be needed for table names (add option to set or unset this)
+ * prefixes will be hidden (stripped out) by KexiDB from real names, eg. 'mydb_mytable' -> 'mytable'
+ * let's set default prefix equal to database name
+ * within a group of "projects sharing the same databse" it will be easier to:
+ ** mount (attach) external projects to an opened Kexi project
+ ** run queries using tables from many projects
+ * disadvantages:
+ ** decreased modularity and data encapsulation
+ ** possible problems with transactions and user access rights
+ ** custom table names can look weird outside Kexi
+ ** the feature adds another level of complexity to KexiDB
+-define "login timeout" setting (in seconds) so connecting can rely on this value.
+ The setting could be assigned to a given connection data,
+ but could be also defined globally for the application.
+ (note: db:login-timeout is defined by opendocument spec.)
+- take a look at agrep: http://www.tgries.de/agrep/ -- looks loke it manages to convert
+ non latin1 characters to latin1, eg. '' to 'a':
+ "* option -ia searches case-insensitive
+ ISO characters are mapped to the nearest lower ASCII equivalent."
+- support for COMPOUND KEYS, ie. keys with 2+ fields; http://en.wikipedia.org/wiki/Compound_key
+- OPTIMIZATION: use PREPARE and EXECUTE statements for some backends, eg. for pgsql:
+ (excerpt from http://www.postgresql.org/docs/8.0/interactive/sql-prepare.html)
+ 1. Create a prepared query for an INSERT statement, and then execute it:
+ PREPARE fooplan (int, text, bool, numeric) AS
+ INSERT INTO foo VALUES($1, $2, $3, $4);
+ EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);
+ 2. Create a prepared query for a SELECT statement, and then execute it:
+ PREPARE usrrptplan (int, date) AS
+ SELECT * FROM users u, logs l WHERE u.usrid=$1 AND u.usrid=l.usrid
+ AND l.date = $2;
+ EXECUTE usrrptplan(1, current_date);
+ 3. For completnedd, provide KexiDB API for "DEALLOCATE" as well
+- Implement "copy table" feature.
+ To copy table t1 as t2 with data use: "create table t2 as select * from t1"
+ To copy table t1 as t2 without data use: "create table t2 as select * from t1 limit 0"
+ NOTE: pkeys, triggers, default values are not copied?
+
+- BLOBs in MySQL: max_allowed_packet is 1MiB; read http://dev.mysql.com/doc/mysql/en/blob.html
+ and http://dev.mysql.com/doc/mysql/en/server-parameters.html
+-- http://bugs.mysql.com/bug.php?id=1605 "MySQL protocol (it does not send 'chunked streams'
+for blobs...The client has to read the _entire_ blob into memory."; use:
+ "select substring(document, 1, 10240) from documents where docid='3'" this to get chunks:
+ "select substring(document, 10241, 10240) from documents where docid='3'"
+ ....
+-- Other approach: store binary data using two tables 1st for metainfo about the data,
+ 2nd for data chunks (e.g. 64KiB each): http://php.dreamwerx.net/forums/viewtopic.php?t=6
+
+????? is it possible to just use a database and store the kexi stuff in a .kexi file?
+ jstaniek ruurd: you just dont want to create kexi__* tables on your database?
+ ruurd yes, and use an existing database.
+ jstaniek ruurd: that's planned but note:
+ jstaniek this option doesn't offer you atomic changes to database schema, by definition, because two database conenctions are started concurrently.
+ jstaniek So we'll need to behave with care...
+ jstaniek ruurd: of course this is easier to do with read only databases or even databases where you don't plan to change schema (but just process db records)
+- add Connection::ping() or so, using http://dev.mysql.com/doc/mysql/en/mysql-ping.html
+ and use it after being idle for a while (eg. call it every minute; also add an option for the delay)
+- Move ObjectStatus to kexidb. Merge with Object.
+- Support for opening .sql files: just import it on opening to in-memory database and dump it back into
+ .sql text on exisitng. Add optional compressing.
+- Add support for compressed kexi files (better keep the same .kexi extension instead of .kexiz)
+- Implement tree structures using idea #5 described here http://www.depesz.com/various-sqltrees.php
+ (does pgsql require this hack?)
+- double values are still rounded: consider storing them in memory as a decimal type
+ (e.g. using a special Q_LLONG+decimalplace class); needed e.g. in KexiQueryParameters::getParameters()
+- handle input mask using a special KexiDB::FieldInputMask class
+ --needed in forms (KexiDBLineEdit::setColumnInfo()) and table views
+- add setValue() to cursors: this will REQUIRE a buffered cursor, since we cannot run sql
+ before fetching is done... See http://kexi-project.org/cgi-bin/irclogger_log/kexi?date=2006-08-03,Thu&sel=229#l225
+- use ThreadWeaver library for threaded KexiDB version
+- tables can use queries as a row source for lookup fields, what can lead to infinite recursion;
+ FIX this by either: 1) not allowing to use such table in a query (see kexi/to_fix/Ksiazka_adresowa2_recursive_query_deadlock.kexi)
+ or 2) delayed loading of query column
+
+=== KexiDB Parser TODO ===
+- add a method for replacing a single given table name in the statement (useful on table renames)
+- add clever query relatins parsing
+ (needed for switching back to GUI editor from text mode)
+- add flexible support for date/time constants
+- store text position information (line, column) for every token so it can be used
+ in SQL editor to place cursor in case of errors
+- add translation method for SQL operators to driver,
+ so SQLite can return "CONCAT" and mysql return "||" for concatenation oeprator, and so on
+- improvement in terms of data recovery:
+ assume you're entering a long record and db connection is dead before saving...
+ the record could be buffered locally before closing Kexi application... and on next startup, re-sent.
+ This can work in simple cases (when complex transactions are not involved).
+- report "ambiguous field name 'id'" error for ambiguous queries like "SELECT a.id, b.id FROM a, b ORDER BY id"
+- add types checking to **Expr::validate()
+- consider switching from bison/flex to http://www.antlr.org/
+- make parser reentrant (for now we've used a workaround)
+
+=== KexiDB MySQL Driver TODO ===
+- use InnoDB instead of MyISAM tables because of transactions support
+ http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html
+ Kexi's MySQL driver uses MyISAM engine, but transaction support needs InnoDB
+ (there should be also an option available to set on CREATE TABLE, and on an default for CREATE DATABASE)
+
+=== KexiDB PostgreSQL Driver TODO ===
+- port to libpq
+- set version information in drv_useDatabase()
+ There's connection_base::server_version() in libpqxx trunk -
+ http://thaiopensource.org/development/libpqxx/file/trunk/include/pqxx/connection_base.hxx
+
+=== KEXIDB TESTS===
+- add tests for DatabaseProperties
+- add tests for PreparedStatement
+- add tests for migration
+
+=== Startup TODO ===
+- reuse KexiNameWidget in KexiNewProjectWizard!
+- use KPasswordDialog::disableCoreDumps() for security reasons
+- IDEA for connection shortcuts:
+ Mysql Query Browser has a simple xml file defined:
+ http://dev.mysql.com/doc/query-browser/en/mysql-gui-appendix-store-connections.html
+- allow to choose if the file should be locked (opened in EXCLUSIVE mode) or not
+ (THIS SHOULD BE DEFAULT BEHAVIOUR)
+- (linux) remove stupid message 'Please select the file to open'
+ when opening exisiting server project and clicking 'OK'
+- database files accessed remotely: make it work without copying a file to temp. dir.
+ (maybe even without copying entire file? - patching sqlite required)
+- add "Open read only" checkbox to the file browser
+ (Driver::ReadOnlyConnection option already allows to open in read only mode)
+
+=== CLI TODO ===
+- add kexicmd as a symlink to kexi binary, for totally non-gui usage
+- just drop all tables when database already exist
+ (so recreating database will be available even
+ if you have only access to one database).
+- GRANT privileges for non-root (current?) user for newly created db
+
+=== Mimetypes/icons TODO ===
+- new mimetypes:
+ application/x-vnd.kexi.project.sqlite2
+ application/x-vnd.kexi.project.sqlite3
+ application/x-vnd.kexi.project.shortcut
+ other:
+ application/x-vnd.kexi.connections.shortcut
+ application/x-vnd.kexi.table.shortcut
+ application/x-vnd.kexi.query.shortcut
+- remove x-vnd.kexi.desktop in kdelibs
+- copy mimetypes and magic def. to kdelibs (keep it within Kexi for compat.)
+- remake kexi mime type svg icons
+- copy kexi mime icons to kdelibs, remove old one
+** Ask SQLite devs for a possibility for adding a field to indicate kexi-sqlite
+ format without opening database
+
+
+=== Docs TODO ===
+
+-translate the current content from polish to english
+-?? migrate english content to wiki format
+-move polish content to .po translation file
+-Add this to the preface http://encyklopedia.helion.pl/index.php/Kartotekowa_baza_danych
+-www: mention what features are already available and what is planned in terms of:
+-- general features, example: http://www.e-cen.pl/index.php?co=wiecej&id=26&dzial=8
+-- scripting, example: http://www.e-cen.pl/index.php?co=wiecej&id=22&dzial=6
+- add chapters for:
+-- simple printouts
+-- "assign action" to a button
+-- CSV import/export/copy/paste (csv import is explained on kexi@kde.org ML; 2007-03-23)
+
+=== 2005 PRO TODO ===
+-greatly improve sql parser
+-greatly improve sql gui designer
+--totals (sum, avg)
+-more docs
+-more widgets for db-aware forms
+-add simple reporting
+-finish server support
+--connection creator
+--fix permission problems
+
+
+=== after-0.9 TODO ===
+TODO: add time zones support: 1994-11-05T08:15:30-05:00
+TODO: update to sqlite3.1 and use it's features http://www.sqlite.org/releasenotes310.html
+TODO: 0.2: reuse http://segfault.is-a-geek.net:8001/feedback-kinitiator/
+ gfx can be found here: http://cvs.sourceforge.net/viewcvs.py/kinitiator/
+
+TODO: look at recent Martin's stuff: http://homepages.cs.ncl.ac.uk/m.a.ellis/kexi/
+
+
+Core TODO:
+- update shared actons availability ONLY AFTER we've switched to other kexidialog base,
+ not just on LOST FOCUS
+- for now: clicking on empty menu bar's item (eg. "Format") causes to losing shared actions state
+- make core/ non-gui lib. Move data creation code out of KexiDialogBase.
+
+Reports TODO
+- reuse most of KexiFormPart code in KexiReportPart (eg. creating shared actions)
+- line widget should use special resize handle set -- with only two rectangles (Forms too)
+
+KMDI TODO
+- do not execute KMdiMainFrm::switchOffMaximizeModeForMenu() when true==QApplication::closingDown()
+
+QUICK TODO:
+Forms:
+-change form's object caption to "caption" property, when changed and conversely!
+
+TODO:::::::
+1. test dipesh.kexi - ID column is not used on row updating!!!
+
+2. dipesh np, I also found a crasher witch is maybe related.
+ dipesh just change a value, go to design mode and switch back to dataview...
+ dipesh [KCrash handler]
+ dipesh #3 0xb59b156f in KexiFormScrollView::createEditor ()
+ dipesh from /usr/lib/kde3/kexihandler_form.so
+ dipesh #4 0xb7e5f502 in KexiDataAwareObjectInterface::startEditCurrentCell ()
+ dipesh from /usr/lib/libkexidatatable.so.0
+ dipesh #5 0xb59b276a in KexiFormScrollView::valueChanged ()
+ dipesh from /usr/lib/kde3/kexihandler_form.so
+ dipesh I look where the crasher is coming from.
+ dipesh oh, in KexiFormScrollView::createEditor
+ dipesh column( col ) returns NULL
+ jstaniek dipesh: it's only within your example project...
+ dipesh therefore column( col )->readOnly() crashes...
+
+reuse KWallet http://events.kde.org/info/kastle/presentations/kwallet-kastle-2003.ps
+
+=== Interesting features ===
+- Add random names/surnames generator: http://www.ruf.rice.edu/~pound/
+ Good for generating good-looking random data for a given table.
+-- Autodetect 'name' columns or ask user to describe what he wants.
+ Comply with data validation rules.
+-- use famous 'Lorem ipsum dolor sit amet...' test text for longtext types
+
+
+=== QUICK TODO ===
+
+TODO: in KexiMainWindowImpl::slotProjectOpen() add support for starting new kexi instance for selected conn data
+ (we need to remember from what filename has been a conndata loaded)
+TODO: move ConnectionData::savePassword to QMap<ConnectionData*,bool> KexiDBConnectionSet::savePasswordMap or so
+TODO: Forms: fix label width resizing when entering text within inline editor
+TODO: Forms copy more properties (like palette) to inline editor from e.g. text label
+TODO: Forms: fix: double clicking unselected widget doesn't switch us to inline editing mode
+TODO: Forms: object tree: enable sorting by name after clicking "name" header;
+ enable sorting by class,name by clicking "class" header
+
+Startup TODO:
+- when using a startup item, touch the file for better sorting:
+http://www.koders.com/c/fid97791600CA5D0A2EA559490BD9444B0775B2370A.aspx
+
+- add "Save Special->Shortcut file for this project" action
+- add "Save Shortcut file for this connection" action
+- FOR SLOW CONNECTIONS: show progress bar on:
+-- retrieving a list of projects (in KexiProjectSelectorDialog)
+-- opening a project (in status bar?)
+- Also, add "cancel" button near the progress bar (reuse the one from KMail?)
+
+
+TODO: If a form has no focus, FormManager::windowChanged() and KexiFormView::setFocusInternal()
+ don't work properly (setFocus() is not available...)
+
+FORMS:
+-Image Box:
+--pasting large images makes chooser button invisible; maybe place it on top of the widget?
+--set better default for focusPolicy, implement setFocus()
+--add filter property (using KImageEffect)
+--make image-related actions undoable/redoable in design time
+--add 'print' action
+--add for movies/animations support using QMovie to KexiDBImageBox
+ or (most probably) inherit KexiDBImageBox as KexiDBMovieBox
+---KexiBLOBBuffer::pixmap() shouldn't be used but data() should be used to create QMovie object
+ in each movie widget itself because even if the same QMovie was used in many movie widgets:
+ a) speeds can vary between movie widgets, b) different forms can be opended in different moments
+ so playing starts in different moments, c) one or more movies can be stopped while others not
+---add following related properties: int playbackSpeed (in frames per second, 0==default),
+ bool autoStart (true==default), playbackControls (false==default), bool loopPlayback (true==default)
+ bool pauseAfterEnd (0==nothing==default)
+-property pane: shrink widget name displayed at the top by adding "..." to avoid problems
+ with pane's size when selected widget has very long name
+- resize handles are always black: this is bad on black background!
+- use KURLLabel as an option for push button widget
+
+
+Combo Box Editor
+- ADD "restrict to list" OPTION: don't copy 1st row's value if there's no value in the combo
+ --> needed for 1st column of Query Designer
+
+KEXIDB:
+- ConnectionData: make local sockets default for unix, instead of tcp/ip
+
+GENERAL:
+- removed conflict between standalone and KOffice version by:
+-- inserting "standalone" word into module names,
+ eg. kexidb_mysqldriver.so -> kexidb_mysqldriver_standalone.so
+-- renaming kexi to kexi-standalone
+- rename "data view mode" to "browse view mode" (as in Filemaker)
+- add "File->Mail..." action (requires closing and copying of the sqlite file, if locked)
+
+MARKETING:
+- add "Created With Kexi" page and a link to it from k-p.org and kexi.pl
+- when releasing new Kexi version publish: A first look at Kexi x.y" page, like this:
+ http://software.newsforge.com/article.pl?sid=05/09/28/1345228
+- short reasoning for using db abstraction layers:
+ http://developers.slashdot.org/comments.pl?sid=164824&cid=13755151
+
+
+ACCESIBILITY - Mouseless Operation Problems (KOffice 1.4.1):
+- MORE: http://accessibility.kde.org/reports/koffice-1.4.1-accessibility-assessment.pdf
+- It is not possible to select the data type of a
+field in the table editor. Alt+DownArrow does not work.
+- When editing the fields of a table, it is not
+obvious how to flag a field as a primary key.
+WORKAROUND: Use Popup Context Menu (Menu key) and select Primary Key, OR use Edit | Primary
+Key on the main menu, OR use Property Editor.
+- In the Property Editor, is not obvious how to
+change a boolean property. Alt+DownArrow does not work.
+- It is not possible to change the value of a
+property in the property editor that has a picklist of possible values, for example,
+SubType. Alt+DownArrow does not work.
+- When creating a query, it is not possible to add a table to the query.
+- Not possible to select a column, table,
+totals in Query Columns panel. Alt+DownArrow does not work.
+- It is not possible to add a widget to a form.
+- Pressing Tab key while focus is in the Form
+Editor window, but not on any widgets on the form, crashes Kexi.
+- It is not possible to change the size of a
+widget in the form editor without the mouse.
+
+TODO:
+- update conn dialog gui
+example: http://www.ntpb.co.uk/kexi/msn.png
+
+
+Migration (Import Project Wizard) TODO:
+- change drivers comboboxes to KexiDBDriverList
+ (impl. this one with drv name and description columns)
+- close currently opened file-based project if it's the same as imported one
+ (do not save anything)
+- 'select source db type' page: change "sqlite/msa/mysql/pg" to "sqlite/msa/server database"
+ because type of server db is in fact selected on the next page (source conn selection)
+- set the same path for "destination" file browser as for "source" one
+- add "do not create system tables" option to the wizard
+- reuse the migration framework to support "offline mode" - for instance usable while moving with
+ out of network with a laptop, by copying the relevant remote tables to a local temp db;
+ this is already implemnted e.g. in MSA 2k7:
+ http://blogs.msdn.com/access/archive/2006/10/13/sharepoint-apps-offline-and-intro-to-sharepoint-designer.aspx
+ coming back online requeres data merges what is not easy as resolving potential conflict may be needed
+ (example: http://clintc.officeisp.net/Blogs/2006/40%20-%20SharePoint%20Offline/10%20-%20Conflict%20Resolution%20UI.JPG)
+
+MDB Migration:
+- add checks for "no space left on device" error (otherwise Kexi will crash)
+- fix currency converting
+- use MSysRelationdhips table to read MSA db relationships (easy, it's not encoded)
+
+=== Kexi Web Site TODO ===
+- move to mediawiki (JJ?)
+- Add "Features" page like this http://www.agata.org.br/us/index.php?file=features.php
+- Extend "Credits" page with Gold Users/Translators, etc. like here:
+ http://www.agata.org.br/us/index.php?file=thanks.php
+
+AUTOFIELD:
+- copy/paste doesn't preserve caption text (maybe caption should be copied
+ to from QueryColumnInfo to a property)
+
+KexiFrame:
+- fix highlight for data mode! (very old bug)
+
+Migration:
+- fix: server as destination is broken
+
+CSV Import TODO:
+- switch from dialog to wizard; add filedlg widget as the 1st page
+- add better detection for CSV data with \t delimiters (needed for pasting from spreadsheets)
+- add option for storing import settings
+- always test using e.g. this file: http://cvs.sourceforge.net/viewcvs.py/*checkout*/wcuniverse/priv/units/units.csv
+- change boolean "First row contains column names" to 3-value combo:
+ "Get column names:" ["None", "From the first row", "From the first imported row"]
+- add "skip empty columns" and "skip empty rows" option
+- (advanced) there can be a column that is a result of exporting combo box visible values;
+ in this case add option for normalizing the table using existing (or new) lookup table
+- add clear message when :
+-- primary key cannot be set because of non-unique values
+-- number cannot be set because non-number values
+-- etc.
+- add "fix non-unique valuesID /add missing ID values" option for PK column
+- add option for skipping particular columns
+- add option for filtering import results afterwards:
+-- to limit number of rows stored in db and
+-- to process columns using expressions
+
+CSV Export TODO:
+- add progress bar and wizard
+- add "Include row count as first column - include row number in the first
+ column of each row" option
+- add "Include column types on top" option
+- add "Fixed columns width" option (can be extended to support "fixed width text" format)
+- add "Set text to (null) on NULL value - use the string "(null)" to represent
+ a NULL value in the document" option
+- add "Replace empty/Null fields with..." option
+- add "Lines terminated with.." option (\n or \r\n or \r)
+- add option for compression (gzip, zip, bzip2...)
+- MORE TODOs here: http://www.aquafold.com/docs-qw-save-results.html
+- by default, use delimiter=\t and quote=none for clipboard (needed for copying to spreadsheets)
+- add "Strip leading and trailing blanks off of text values" option
+- deal with lookup fields: for every such field
+-- add option for exporting lookup tables as separate files
+-- add option for exporting a) both visible values and indices b) indices only c) visible values only
+ -for now c) is supported
+
+XML Export TODO:
+- consider export to at least these three formats: http://csv2xml.sourceforge.net/xmlmodes.html
+ (templates/XSLT could be also supported)
+
+General TODO:
+- handle KApplication::shutDown()
+
+TODO:
+- on opening detect whether a table exists (empty table view should not be displayed)
+- Another Kexi instance started from KexiMainWindow using QProcess freezes after opening
+ 3rd table or so. Move to KProcess on Linux.
+
+TODO:
+- if you place e.g. a label in a container like a tabwidget and doubleclick it to edit the content,
+ the label jumps around. ccpasteur said he fixed it last year ;)
+- only change bg color of tab widget, not its outer area; fix changing tabs bg color
+
+Import
+- error "BLOB/TEXT column 'isbn' used in key specification without a key length"
+ when importing books.mdb into a mysql db
+
+Forms:
+- after setting "auto" tab order, we need to close and open the form to get tab stops to work properly
+
+TODO:
+- use KLineEdit::displayText() to get partially filled date or time values like 20__-__-__;
+ then use this for checking data validity (?)
+
+TODOs from Jeff Denman:
+- add command line option for performing a complete database import, especially for MSA files
+- instead of always displaying "object names" in the project navigator:
+ display "captions" but offer an option to display "names" instead;
+ AND, optionally: offer a full-width window with the list of database objects
+- import bug for MSA: no values for this field after import:
+ Field Size: Decimal
+ Precision: 10
+ Scale: 2
+ Decimal Places: Auto
+
+TODO Data Types
+-Currency
+ MS Access: Currency values and numeric data used in mathematical calculations involving data
+ with one to four decimal places. Accurate to 15 digits on the left side of the decimal separator
+ and to 4 digits on the right side.
+-Decimal Number (NUMERIC?)
+ MS Access: Decimal Stores numbers from -10^381 through 10^381 (.adp),
+ from -10^281 through 10^281 (.mdb); decimal precision: 28 B, storage size: 12 B
+
+
+TODO Migration from Native SQLite3
+- use sqlite3_column_decltype() http://sqlite.org/capi3ref.html#sqlite3_column_decltype
+ and sqlite3_column_name() to know column names and types.
+ Add reasonable case-insensitive mappings like "INTEGER|integer|INT|int" -> [integer]
+ - or: for import data from native-sqlite databases: use "pragma table_info(tablename)"
+ -- maybe also use "pragma table_info" for sanity checking, or more in kexidb driver??
+- use "pragma user_version={32bit int}" (http://www.sqlite.org/pragma.html) to set, say, kexidb version.
+ This information is stored in a fixed place in the sqlite3 header, so it's possible to read it using
+ KDE Mime Type system (a magic data defined in share/mimelnk/magic).
+
+MDB Import
+- FIXME sometimes order of imported fields is invalid: PKEY field jumps to end.. (books2.mdb)
+
+TODO: table view
+- for FP numbers: allow to start entering value from "." or ","
+
+Forms TODO
+- add "navigationCaption" property to table and form, so "Records:" Label in the record nav. becomes e.g. "Bananas:"
+ see: http://blogs.msdn.com/thirdoffive/archive/2006/04/06/560454.aspx
+
+Forms TODO
+- Checkbox widget with focus policy set to Tab has problems with KexiDataAwareObjectInterface::acceptEditor()
+ because m_editor is set to _currently focused_ widget (problem where there are e.g. >1 checkboxes)
+ Partially fixed by setting StrongFocus policy as default;
+ FIX THIS for other focus policies too...
+
+
+KDElibs4 TODO:
+- wizard
+- do not require .la in libltdl
+
+Kexi 2.0 TODOs:
+- decrease # of shared libs, see Clarification at the bottom
+ of http://people.redhat.com/drepper/no_static_linking.html
+
+== April 1 2007 TODO ==
+- show the screenshot of kexi displaying yes/no/maybe-dialogs, as for the "Woman edition"
+
+TODO:
+Kexi >2.0 (probably late 2007): Add SQLite >3.3 driver. Offer exporting similar to the one between 2.8->3.0.
+ Think about backporting the >3.3 driver to Kexi 1.1.
+
+
+
+- for table t1(a,b,c) delete column t1.c:
+
+CREATE TABLE t1_new(a,b);
+INSERT INTO t1_new SELECT a,b FROM t1;
+DROP TABLE t1;
+ALTER TABLE t1_new RENAME TO t1;
+
+- for table t1(a,b,c) rename column t1.c to t1.d:
+
+CREATE TABLE t1_new(a,b,d);
+INSERT INTO t1_new SELECT a,b,c FROM t1;
+DROP TABLE t1;
+ALTER TABLE t1_new RENAME TO t1;
+
+
+== Forms TODO ==
+- enable edit->copy, actions, etc. for Data View
+- ImageBox: show a tootip with large image and its name if the image was cropped
+ or only its name if the image is not cropped
+- AutoField: highlighting the label when the buddy is focused
+- AutoField: handle label editing after double clicking
+- AutoField: draw required field in bold (or optionally add (*))
+- display default values in other widgets showing text
+- new action for button widgets: open table/query
+ +with query parameters taken from a line edit
+- provide "Edit->Clear Table Contents" action in forms too
+- autofield: after setting form's data source to a valid value,
+ "unbound" mark should disappear in design time
+- rename "Source field" to "Widget's data source" in the data source pane
+- Designer bug: "Click a container widget (or a form surface itself),
+ where widgets are inserted and select one of the layout
+ types from the context menu item Layout Widgets. "
+ "I tried this with the Frame, the Group box and the Tab
+ widget, the menu item Layout Widgets is not available. You
+ have to select the widgets inserted in the contrainer widget
+ to make the menu item available. "
+- unhide "Editor type" property for auto fields (it's hidden in 1.1 due to a crash)
+
+TODO:
+- inform Raphael about koffice.org/1.5/ url, give him the php code
+
+Table Designer TODO
+- i18n("Lookup") == Odnosnik (Ks. eksperta, s. 53)
+- add setting for default length of the text type
+- allow to set default values for BLOB types (requires a change in KoProperty as well)
+- 2.0: Add drag-and-drop-to-create-lookup-column to the "lookup column" tab of the property pane.
+ This should be implemented by displaying a list of fields and allowing to drop one into the
+ table view. Then, lookup column properties should be autoconfigured.
+- lookup column: support these properties of LookupFieldSchema:
+ columnWidths(), columnHeadersVisible(), maximumListRows(), limitToList(), displayWidget()
+- show warning if there are no bound and visible columns defined (for now, this is just ignored
+ and user cannot select a value from the list in the data view)
+
+=== Simple Printouts TODO ===
+- cell contents can be too large for a single page - split it to man pages if needed (true for large texts, blobs..)
+- add support for BLOBs
+- fix printing and previewing for horizontal arragement
+
+
+Form/TV Shortcuts:
+
++To move to the record number box (record number box: A small box that displays the current record number
+ in the lower-left corner in Datasheet view and Form view. To move to a specific record, you can type
+ the record number in the box, and press ENTER.); then type the record number and press ENTER
+ F5
++ Add moving to next record when Tab is pressed at the last field
++ Add moving to prev record when BackTab is pressed at the 1st field
+
+
+== TODOs for 1.1.2 ==
+- support combo box within the autofield widget
+(done?): notify and update data source after schema changes
+- todo: fix things like SELECT *, cars.owner AS ab, 1.3 AS wyr1, persons.surname FROM cars LEFT OUTER JOIN persons ON cars.owner=persons.id WHERE cars.owner > 3
+ (crash - see Simple_Database.kexi - persons_and_cars query has lookup fields and OUTER JOIN is NOT PARSED
+ -- we should generate the SQL in a different way for the Query Designer)
+- fix horizontal scrollbar hiding in the "Available fields" list box (a problem with layouts?)
+- display a message when connection is lost...
+
+
+TODO:
+- fix crashes when table schema referenced by a combo box changes
+- replace QDate{Time}Edit in koproperty with KLineEdit, similar to the one in KexiTableView
+
+TODO: "Database "z3" created but could not be closed after creation." err. on win32 after creating a pgsql db
+TODO: PqxxMigrate::drv_copyTable(): we've switched from BLOBs to LongText
+ ==KexiDB::Field::LongText part shoud be removed; add other backward-copatibility code (how?)
+ if (fieldsExpanded.at(index)->field->type()==KexiDB::Field::BLOB || fieldsExpanded.at(index)->field->type()==KexiDB::Field::LongText)
+
+
+Startup templates
+- TODO: : use main/startup/TemplateItem.ui and main/startup/TemplateWidget.h
+ http://lxr.kde.org/source/KDE/kdebase/kicker/kicker/ui/addapplet.cpp?v=3.5-branch#188
+- TODO look at schemas at http://www.databaseanswers.org/data_models/index.htm
+
+Find/Replace REPLACE
+- use this for replace: virtual bool columnEditable(int col);