summaryrefslogtreecommitdiffstats
path: root/kexi/doc
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/doc
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/doc')
-rw-r--r--kexi/doc/README7
-rw-r--r--kexi/doc/common/bottom1.pngbin0 -> 167 bytes
-rw-r--r--kexi/doc/common/bottom2.pngbin0 -> 6978 bytes
-rw-r--r--kexi/doc/common/docheadergears.pngbin0 -> 5959 bytes
-rw-r--r--kexi/doc/common/doctop1a-online.pngbin0 -> 443 bytes
-rw-r--r--kexi/doc/common/doxygen.css147
-rw-r--r--kexi/doc/common/footer.html14
-rw-r--r--kexi/doc/common/grad.pngbin0 -> 247 bytes
-rw-r--r--kexi/doc/common/header.html34
-rw-r--r--kexi/doc/common/headerbg.pngbin0 -> 492 bytes
-rw-r--r--kexi/doc/common/kde-common.css32
-rw-r--r--kexi/doc/common/kde-default.css187
-rw-r--r--kexi/doc/common/kde-web.css178
-rw-r--r--kexi/doc/common/kmenu.pngbin0 -> 844 bytes
-rw-r--r--kexi/doc/common/shadow.pngbin0 -> 212 bytes
-rw-r--r--kexi/doc/common/web-docbottom.pngbin0 -> 6761 bytes
-rwxr-xr-xkexi/doc/dev/CHANGELOG-Kexi-js5867
-rw-r--r--kexi/doc/dev/INTERESTING29
-rw-r--r--kexi/doc/dev/TODO-Kexi-js1098
-rw-r--r--kexi/doc/dev/advantages.txt17
-rw-r--r--kexi/doc/dev/alter_table_type_conversions.odsbin0 -> 13520 bytes
-rw-r--r--kexi/doc/dev/auto_update_service.txt29
-rw-r--r--kexi/doc/dev/compile_time_options.txt158
-rw-r--r--kexi/doc/dev/kexi_alter_table.txt110
-rw-r--r--kexi/doc/dev/kexi_final_mode.txt21
-rw-r--r--kexi/doc/dev/kexi_general_import_export.txt53
-rw-r--r--kexi/doc/dev/kexi_guidelines.txt35
-rw-r--r--kexi/doc/dev/kexi_i18n_guidelines.txt39
-rw-r--r--kexi/doc/dev/kexi_import.txt61
-rw-r--r--kexi/doc/dev/kexi_issues.txt30
-rw-r--r--kexi/doc/dev/kexidb_api_changes.txt125
-rw-r--r--kexi/doc/dev/kexidb_issues.txt211
-rw-r--r--kexi/doc/dev/kexidb_sql.txt36
-rw-r--r--kexi/doc/dev/kexisql_grammar_notes.txt62
-rw-r--r--kexi/doc/dev/lib_dependency.odgbin0 -> 10317 bytes
-rw-r--r--kexi/doc/dev/lib_dependency.pngbin0 -> 19560 bytes
-rw-r--r--kexi/doc/dev/mysql_bugs.txt6
-rw-r--r--kexi/doc/dev/naming_conventions.txt137
-rw-r--r--kexi/doc/dev/pgsql_issues.txt7
-rw-r--r--kexi/doc/dev/settings.txt168
-rw-r--r--kexi/doc/dev/sql_engine_specifics.txt22
-rw-r--r--kexi/doc/dev/sqlite_issues.txt200
-rw-r--r--kexi/doc/dev/tableview_issues.txt27
-rw-r--r--kexi/doc/handbook/docbook-status.txt163
-rw-r--r--kexi/doc/handbook/html.tmp/01_01_00_what_is_db.html34
-rw-r--r--kexi/doc/handbook/html.tmp/01_02_00_db_spreadsheet.html206
-rw-r--r--kexi/doc/handbook/html.tmp/01_03_00_design.html8
-rw-r--r--kexi/doc/handbook/html.tmp/01_04_00_who_needs.html24
-rw-r--r--kexi/doc/handbook/html.tmp/01_05_00_db_software.html54
-rw-r--r--kexi/doc/handbook/html.tmp/02_00_00_idx_intro_to_kexi.html7
-rw-r--r--kexi/doc/handbook/html.tmp/02_01_00_what_is_kexi.html25
-rw-r--r--kexi/doc/handbook/html.tmp/02_02_00_features_of_kexi.html15
-rw-r--r--kexi/doc/handbook/html.tmp/02_03_00_is_kexi_for_me.html12
-rw-r--r--kexi/doc/handbook/html.tmp/02_04_00_differences.html103
-rw-r--r--kexi/doc/handbook/html.tmp/04_00_00_idx_basics_kexi.html3
-rw-r--r--kexi/doc/handbook/html.tmp/04_01_00_project_files.html13
-rw-r--r--kexi/doc/handbook/html.tmp/04_02_00_running_kexi.html25
-rw-r--r--kexi/doc/handbook/html.tmp/04_03_00_creating_database.html18
-rw-r--r--kexi/doc/handbook/html.tmp/04_04_00_project_opening.html59
-rw-r--r--kexi/doc/handbook/html.tmp/04_05_00_help_on_help.html10
-rw-r--r--kexi/doc/handbook/html.tmp/04_06_00_main_application_elements.html21
-rw-r--r--kexi/doc/handbook/html.tmp/04_06_01_project_navigator.html33
-rw-r--r--kexi/doc/handbook/html.tmp/04_06_02_object_windows.html35
-rw-r--r--kexi/doc/handbook/html.tmp/04_06_03_property_editor.html44
-rw-r--r--kexi/doc/handbook/html.tmp/05_00_00_idx_building_simple_database.html18
-rw-r--r--kexi/doc/handbook/html.tmp/05_01_00_table_designing.html109
-rw-r--r--kexi/doc/handbook/html.tmp/05_02_00_entering_data_into_tables.html38
-rwxr-xr-xkexi/doc/handbook/html.tmp/05_03_00_query_designing.html37
-rw-r--r--kexi/doc/handbook/html.tmp/05_04_00_form_designing.html510
-rw-r--r--kexi/doc/handbook/html.tmp/05_05_00_data_entering_into_forms.html12
-rw-r--r--kexi/doc/handbook/html.tmp/08_00_00_kexi_tuning.html11
-rw-r--r--kexi/doc/handbook/html.tmp/08_01_00_mdi.html20
-rw-r--r--kexi/doc/handbook/html.tmp/08_02_00_dock_undock.html32
-rw-r--r--kexi/doc/handbook/html.tmp/08_03_00_conf_keys.html32
-rw-r--r--kexi/doc/handbook/translation-status.txt111
-rw-r--r--kexi/doc/kexidb/kexidb.doxygen220
-rw-r--r--kexi/doc/plan/kexi-announce.txt42
77 files changed, 11251 insertions, 0 deletions
diff --git a/kexi/doc/README b/kexi/doc/README
new file mode 100644
index 00000000..6eabdfcf
--- /dev/null
+++ b/kexi/doc/README
@@ -0,0 +1,7 @@
+
+common/ - Common files for Doxygen-generated html documentation
+dev/ - Development Documentation: thoughts, ideas, notes
+handbook/ - temporary files for Kexi Handbook; do not look there
+ unless you're the Handbook author/reviewer
+kexidb/ - place for Doxygen-generated KexiDB Module Documentation
+plan/ - other file(s) related to development
diff --git a/kexi/doc/common/bottom1.png b/kexi/doc/common/bottom1.png
new file mode 100644
index 00000000..25abc204
--- /dev/null
+++ b/kexi/doc/common/bottom1.png
Binary files differ
diff --git a/kexi/doc/common/bottom2.png b/kexi/doc/common/bottom2.png
new file mode 100644
index 00000000..bdf86daa
--- /dev/null
+++ b/kexi/doc/common/bottom2.png
Binary files differ
diff --git a/kexi/doc/common/docheadergears.png b/kexi/doc/common/docheadergears.png
new file mode 100644
index 00000000..ac8dab96
--- /dev/null
+++ b/kexi/doc/common/docheadergears.png
Binary files differ
diff --git a/kexi/doc/common/doctop1a-online.png b/kexi/doc/common/doctop1a-online.png
new file mode 100644
index 00000000..1b65b7d9
--- /dev/null
+++ b/kexi/doc/common/doctop1a-online.png
Binary files differ
diff --git a/kexi/doc/common/doxygen.css b/kexi/doc/common/doxygen.css
new file mode 100644
index 00000000..a8be4adc
--- /dev/null
+++ b/kexi/doc/common/doxygen.css
@@ -0,0 +1,147 @@
+/*******************************************************************************
+
+ Style sheet for kdelibs doxygen documentation.
+ Copyright (c) Anders Lund <anders@alweb.dk> 2002
+
+ This script is made available under the terms of the General Public Licence.
+ You should have received a copy of the GNU General Public License
+ along with this software; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+********************************************************************************/
+
+body {
+ margin: 0px;
+ background-color: white;
+}
+
+/* decorative header */
+div.header {
+ background-color: #0855C5;
+ background-image: url("headerbg.png");
+}
+div.header table {
+ padding: 0px;
+ margin: 0px
+}
+div.header table tr td h1 {
+ color: white;
+ font: bold 20pt courier;
+ padding-top: 0.5em;
+}
+
+/* global lind buttons at bottom of decorative header */
+table.links {
+ float: right;
+ border:0;
+ padding-left:1px
+}
+table.links td a {
+ color: white
+}
+table.links td:hover {
+ background-color:#0C4293;
+}
+table.links td a:hover {
+ color: white;
+ background-color:#0C4293
+}
+table.links td {
+ border-left: 1px solid #4A81D5;
+ padding: 0px 12px 0px 12px;
+ background-color:#0E4EAF;
+ font-size:9pt;
+ /*font-weight: bold;*/
+}
+
+/* little gradient below decorative/navigation header */
+div#hgrad {
+ height: 12px;
+ background-image: url("grad.png");
+}
+
+/* contents part of page */
+div.text {
+ margin: 12px
+}
+
+/* contents, mostly equivalent to the default doxugen style sheet */
+H1 { text-align: center; }
+CAPTION { font-weight: bold }
+A.qindex {}
+A.qindexRef {}
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #4444ee }
+A.codeRef { font-weight: normal; color: #4444ee }
+A:hover { text-decoration: none; background-color: #ececec }
+DL.el { margin-left: -1cm }
+DIV.fragment { width: 100%; border: none; background-color: #ffffee; padding: 12px }
+DIV.ah { background-color: navy; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #ececec; font-weight: bold; }
+TD.mdname1 { background-color: #ececec; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #ececec; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
+BODY { background: white }
+TD.indexkey {
+ background-color: #e0eef8;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+TD.indexvalue {
+ background-color: #e0eef8;
+ font-style: normal;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+FONT.keyword { color: #008000 }
+FONT.keywordtype { color: #604020 }
+FONT.keywordflow { color: #e08000 }
+FONT.comment { color: #800000 }
+FONT.preprocessor { color: #806020 }
+FONT.stringliteral { color: #002080 }
+FONT.charliteral { color: #008080 }
+
+
+
+/* kde decoration at bottom */
+div#bottom-nav {
+ position : relative;
+ background-color: transparent;
+ /*width : 100%;*/
+ /*top: 0px;
+ left: 0px;
+ right: 0px;
+ margin-left: 0px;
+ margin-right:0px;*/
+ margin-top: 12px;
+ height: 50px;
+ background-image : url('bottom1.png');
+ background-repeat : repeat-x;
+}
+
+/* copyright etc at bottom */
+div.bottom {
+ margin: 12px;
+ font-size: 9pt;
+ text-align: right;
+}
+div.bottom a {
+ color: #aaaaaa
+}
+
diff --git a/kexi/doc/common/footer.html b/kexi/doc/common/footer.html
new file mode 100644
index 00000000..34a49967
--- /dev/null
+++ b/kexi/doc/common/footer.html
@@ -0,0 +1,14 @@
+</div>
+<div id="bottom-nav">
+<img src="../../common/bottom2.png" align="right" height="59" width="227" alt="KDE Logo">
+</div>
+<div class="bottom">
+This file is part of the documentation for $projectname $projectnumber.
+</div>
+<div class="bottom" style="color:#cccccc">
+Documentation copyright &copy; 2003 the Kexi Team.<br>
+Generated on $datetime by
+<a href="http://www.doxygen.org/index.html">doxygen</a> $doxygenversion written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, &copy;&nbsp;1997-2003
+</div>
+</body>
+</html>
diff --git a/kexi/doc/common/grad.png b/kexi/doc/common/grad.png
new file mode 100644
index 00000000..06c5028d
--- /dev/null
+++ b/kexi/doc/common/grad.png
Binary files differ
diff --git a/kexi/doc/common/header.html b/kexi/doc/common/header.html
new file mode 100644
index 00000000..63f47eb9
--- /dev/null
+++ b/kexi/doc/common/header.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>$title ($projectname)</title>
+ <link href="../../common/doxygen.css" rel="stylesheet" type="text/css">
+</head>
+<div class="header">
+<table border="0" cellspacing="0" cellpadding="0">
+<tr>
+<td rowspan="2" width="92">
+<a href="index.html" title="The API documentation main page"><img src="../../common/docheadergears.png" style="border:0px;" alt=""></a>
+</td>
+<td width="95%">
+<h1>$projectname API Documentation</h1>
+</td>
+</tr>
+<tr>
+<td valign="bottom">
+<table class="links" border=0 cellspacing=0>
+<tr>
+<td><a href="index.html">Overview</a></td>
+<td><a href="hierarchy.html" title="Inheritance list, sorted roughly alphabetically">Class&nbsp;Hierarchy</a></td>
+<td><a href="classes.html" title="Alphabetical list of classes">Classes</a></td>
+<td><a href="annotated.html" title="Classes, structs, unions and interfaces with brief descriptions">Classes&nbsp;(annotated)</a></td>
+<td><a href="functions.html" title="Documented class members with links to the classes they belong to">Members</a></td>
+<!-- td><a href="namespaces.html" title="All documented namespaces with brief descriptions">Namespaces</a></td-->
+<td><a href="files.html" title="A list of all documented files with brief descriptions">Source&nbsp;Files</a></td>
+</tr>
+</table>
+</td></tr></table>
+</div>
+<div id="hgrad"></div>
+<div class="text">
diff --git a/kexi/doc/common/headerbg.png b/kexi/doc/common/headerbg.png
new file mode 100644
index 00000000..b72738a2
--- /dev/null
+++ b/kexi/doc/common/headerbg.png
Binary files differ
diff --git a/kexi/doc/common/kde-common.css b/kexi/doc/common/kde-common.css
new file mode 100644
index 00000000..5898199b
--- /dev/null
+++ b/kexi/doc/common/kde-common.css
@@ -0,0 +1,32 @@
+/*
+ KDE-wide persistent CSS for HTML documentation (all media types).
+ Copyright (C) 2000 Frederik Fouvry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Send comments, suggestions, etc. to Frederik Fouvry
+ <fouvry@sfs.nphil.uni-tuebingen.de>.
+*/
+
+/*
+ Important note: these setting cannot be overridden, except by switching
+ off style sheets alltogether.
+
+ Any updates should be validated, e.g. http://jigsaw.w3.org/css-validator/
+
+ Check out http://www.richinstyle.com/ where many of the declarations and
+ setup in the KDE CSS are obtained from. In fact, do not change
+ anything without checking on those pages whether it is wise to do so.
+*/
diff --git a/kexi/doc/common/kde-default.css b/kexi/doc/common/kde-default.css
new file mode 100644
index 00000000..032a00db
--- /dev/null
+++ b/kexi/doc/common/kde-default.css
@@ -0,0 +1,187 @@
+/*
+ KDE-wide default CSS for HTML documentation (all media types).
+ Copyright (C) 2000 Frederik Fouvry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Send comments, suggestions, etc. to Frederik Fouvry
+ <fouvry@sfs.nphil.uni-tuebingen.de>. */
+
+/*
+ Important note: these setting may be overridden by localised CSS. Do not
+ add here any localisation-sensitive style declarations.
+
+ Any updates should be validated, e.g. http://jigsaw.w3.org/css-validator/ */
+
+/* Note: "should be inherit" means that in a proper browser inherit should work.
+ Somehow Netscape manages to interpret "inherit" as bright green.
+ Yuck. */
+
+/* Make the main contents of the page not slide up under the top banner */
+
+/* #body_text { position: relative;
+ top: 100px; } */
+
+/* This is a horrible awful hack.. to once again fix the sliding
+navigation problem. */
+
+body { padding-top: 100px; background-color:
+white; color: black;}
+
+/* Nice link colors for the main text, and bottom navigation
+ Setting text-decoration seems to fix a nasty redraw problem in KHC */
+
+:link { color: rgb(170,0,0);
+ text-decoration: underline;
+ background-color: white; /* should be inherit */ }
+:visited { color: rgb(170,0,85);
+ text-decoration: underline;
+ background-color: white; /* should be inherit */ }
+:active { color: rgb(170,0,0);
+ text-decoration: underline;
+ background-color: white; /* should be inherit */ }
+
+/* Link colors for the top navigation */
+
+.left :link, .center :link, .right :link { color: rgb(255,255,255);
+ text-decoration: underline;
+ background-color: rgb(82,80,82); }
+
+.left :visited, .center :visited, .right :visited { color: rgb(186,182,186);
+ text-decoration: underline;
+ background-color: rgb(82,80,82); }
+
+/* Giving this a background color breaks things, and it's not necessary for
+ either navigation or orientation.. so transparent */
+
+.center {color: rgb(255,255,255);
+ background-color: transparent; }
+
+
+:active {color: rgb(186,182,186);
+ background-color: transparent; }
+
+/* A little bit of padding makes the tables for keybindings etc much easier to read */
+
+TABLE { padding: 5px; }
+DT { margin-top: 1em; }
+DIV.toc DT { margin-top: 0px; }
+DIV.SCREENSHOT { margin-bottom: 1em;
+ margin-top: 1em; }
+DIV.INFORMALEXAMPLE { border-style: dotted;
+ padding: 10px; }
+
+/* But no padding for navigation elements */
+
+.shadow, .headline, .bulb, .end { padding: 0px; }
+
+TABLE.programlisting
+TABLE.screen { border-style: none;
+ background-color: rgb(224,224,224);
+ table-layout: auto; /* 100%? */
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+/* Same as previous block, but more general (previous is HTML only)
+ Not all browsers understand this yet.
+TABLE[class~=programlisting]
+TABLE[class~=screen] { border-style: none;
+ background-color: rgb(224,224,224);
+ table-layout: auto;
+ color: inherit;
+ }
+*/
+
+P { text-align: justify; }
+
+/* More specific settings */
+
+DIV.navbar P { text-align: right; }
+
+/* Temporary patch: browsers break on bad HTML */
+/* P, H1, H2, H3, H4, H5, TD, TH { font-family: Helvetica, Arial, sans-serif;
+ } */
+
+P, H1, H2, H3, H4, H5, TD, TH { font-family: sans-serif;
+ }
+
+
+
+/* Visual cues for GUI elements etc in the text */
+
+.guimenu, .guimenuitem, .guisubmenu { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.guilabel, .interface, .guibutton { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.shortcut { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.shortcut .keycap { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.question { font-weight: bolder; }
+
+.accel { background-color: rgb(240,240,240);
+ color: rgb(0,0,0);
+ text-decoration: underline;
+ }
+
+.option, .command { background-color: rgb(255,255,255);
+ color: rgb(0,96,160);
+ font-weight: bold;
+ }
+
+h1, h2, h3, h4, h5, h6 { color: rgb(82,80,82);
+ }
+.arg, .parameter, .replaceable{ background-color: rgb(255,255,255);
+ color: rgb(0,128,64);
+ font-style: italic;
+ }
+
+DIV.mediaobject { /* float: right; */
+ /* might make it much nicer. although someone has to
+ understand the rules ;-) You also don't want it to be
+ surrounded by text it doesn't refer to ... But that
+ may be among others a question of writing style. */
+ text-align: center; /* a bit of a hack: it should
+ position _images_ */
+ }
+
+.caption { margin: 0em 2em 3em 2em; }
+
+.inlinemediaobject { vertical-align: baseline;
+ padding-right: 1em;
+ padding-left: 1em; }
+
+/* An idea that could be nice: a search engine looking for specific
+classes could display them in some conspicuous colour. All that is
+needed is an on the fly generated style element/style sheet. */
+
+/* Only used in the hand-made HTML license texts */
+BODY.license { background-color: rgb(255,255,255);
+ text-align: justify;
+ color: rgb(0,0,0);
+ }
+PRE.license { background-color: rgb(255,255,255);
+ font-family: monospace;
+ color: rgb(0,0,0);
+ }
+
diff --git a/kexi/doc/common/kde-web.css b/kexi/doc/common/kde-web.css
new file mode 100644
index 00000000..e61fa32a
--- /dev/null
+++ b/kexi/doc/common/kde-web.css
@@ -0,0 +1,178 @@
+/*
+ KDE-wide default CSS for HTML documentation (all media types).
+ Copyright (C) 2000 Frederik Fouvry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Send comments, suggestions, etc. to Frederik Fouvry
+ <fouvry@sfs.nphil.uni-tuebingen.de>. */
+
+/*
+ Important note: these setting may be overridden by localised CSS. Do not
+ add here any localisation-sensitive style declarations.
+
+ Any updates should be validated, e.g. http://jigsaw.w3.org/css-validator/ */
+
+/* Note: "should be inherit" means that in a proper browser inherit should work.
+ Somehow Netscape manages to interpret "inherit" as bright green.
+ Yuck. */
+
+/* Make the main contents of the page not slide up under the top banner */
+
+/* #body_text { position: relative;
+ top: 100px; } */
+
+/* This is a horrible awful hack.. to once again fix the sliding
+navigation problem. */
+
+body { background-color: white;
+ width: 596px;
+ color: black;
+ align: center;}
+
+/* Nice link colors for the main text, and bottom navigation */
+
+:link { color: rgb(170,0,0);
+ background-color: white; /* should be inherit */ }
+:visited { color: rgb(170,0,85);
+ background-color: white; /* should be inherit */ }
+:active { color: rgb(170,0,0);
+ background-color: white; /* should be inherit */ }
+
+/* Link colors for the top navigation */
+
+.left :link, .center :link, .right :link { color: rgb(255,255,255);
+ background-color: rgb(82,80,82); }
+
+.left :visited, .center :visited, .right :visited { color: rgb(186,182,186);
+ background-color: rgb(82,80,82); }
+
+/* Giving this a background color breaks things, and it's not necessary for
+ either navigation or orientation.. so transparent */
+
+.center {color: rgb(255,255,255);
+ background-color: transparent; }
+
+
+:active {color: rgb(186,182,186);
+ background-color: transparent; }
+
+/* A little bit of padding makes the tables for keybindings etc much easier to read */
+
+TABLE { padding: 5px; }
+DT { margin-top: 1em; }
+DIV.SCREENSHOT { margin-bottom: 1em;
+ margin-top: 1em; }
+DIV.INFORMALEXAMPLE { border-style: dotted;
+ padding: 10px; }
+
+/* But no padding for navigation elements */
+
+.shadow, .headline, .bulb, .end { padding: 0px; }
+
+TABLE.programlisting
+TABLE.screen { border-style: none;
+ background-color: rgb(224,224,224);
+ table-layout: auto; /* 100%? */
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+/* Same as previous block, but more general (previous is HTML only)
+ Not all browsers understand this yet.
+TABLE[class~=programlisting]
+TABLE[class~=screen] { border-style: none;
+ background-color: rgb(224,224,224);
+ table-layout: auto;
+ color: inherit;
+ }
+*/
+
+P { text-align: justify; }
+
+/* More specific settings */
+
+DIV.navbar P { text-align: right; }
+
+/* Temporary patch: browsers break on bad HTML */
+/* P, H1, H2, H3, H4, H5, TD, TH { font-family: Helvetica, Arial, sans-serif;
+ } */
+
+P, H1, H2, H3, H4, H5, TD, TH { font-family: sans-serif;
+ }
+
+
+
+/* Visual cues for GUI elements etc in the text */
+
+.guimenu, .guimenuitem, .guisubmenu { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.guilabel, .interface, .guibutton { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.shortcut { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.shortcut .keycap { background-color: rgb(240,240,240);
+ color: rgb(0,0,0); /* should be inherit */
+ }
+
+.question { font-weight: bolder; }
+
+.accel { background-color: rgb(240,240,240);
+ color: rgb(0,0,0);
+ text-decoration: underline;
+ }
+
+.option, .command { background-color: rgb(255,255,255);
+ color: rgb(0,96,160);
+ font-weight: bold;
+ }
+
+h1, h2, h3, h4, h5, h6 { color: rgb(82,80,82);
+ }
+.arg, .parameter, .replaceable{ background-color: rgb(255,255,255);
+ color: rgb(0,128,64);
+ font-style: italic;
+ }
+
+DIV.mediaobject { /* float: right; */
+ /* might make it much nicer. although someone has to
+ understand the rules ;-) You also don't want it to be
+ surrounded by text it doesn't refer to ... But that
+ may be among others a question of writing style. */
+ text-align: center; /* a bit of a hack: it should
+ position _images_ */
+ }
+
+/* An idea that could be nice: a search engine looking for specific
+classes could display them in some conspicuous colour. All that is
+needed is an on the fly generated style element/style sheet. */
+
+/* Only used in the hand-made HTML license texts */
+BODY.license { background-color: rgb(255,255,255);
+ text-align: justify;
+ color: rgb(0,0,0);
+ }
+PRE.license { background-color: rgb(255,255,255);
+ font-family: monospace;
+ color: rgb(0,0,0);
+ }
+
+.topbanner { background-repeat: no-repeat;
+ } \ No newline at end of file
diff --git a/kexi/doc/common/kmenu.png b/kexi/doc/common/kmenu.png
new file mode 100644
index 00000000..5efb18b6
--- /dev/null
+++ b/kexi/doc/common/kmenu.png
Binary files differ
diff --git a/kexi/doc/common/shadow.png b/kexi/doc/common/shadow.png
new file mode 100644
index 00000000..7f837083
--- /dev/null
+++ b/kexi/doc/common/shadow.png
Binary files differ
diff --git a/kexi/doc/common/web-docbottom.png b/kexi/doc/common/web-docbottom.png
new file mode 100644
index 00000000..eb43ef35
--- /dev/null
+++ b/kexi/doc/common/web-docbottom.png
Binary files differ
diff --git a/kexi/doc/dev/CHANGELOG-Kexi-js b/kexi/doc/dev/CHANGELOG-Kexi-js
new file mode 100755
index 00000000..9b74a65d
--- /dev/null
+++ b/kexi/doc/dev/CHANGELOG-Kexi-js
@@ -0,0 +1,5867 @@
+-----------------------------------------------------------------------------
+ Kexi Development CHANGELOG Document
+ From jstaniek's Point of View
+
+ Copyright (C) 2003-2007 Jaroslaw Staniek js at iidea.pl / OpenOffice Polska
+ Kexi home page: http://www.kexi-project.org/
+-----------------------------------------------------------------------------
+
+For most important commits use: CCMAIL:kexi-devel@kde.org
+For interesting commits use:
+FEATURE: <desctiption>
+CCMAIL:danny@commit-digest.org
+For bugfixes use CCMAIL:###-done@bugs.kde.org
+Legend:
+= -a fix for recently introduced bug or a minor/too technical fix not worth
+ mentioning in the public changelog
+
+TODO: fix displaying default values in comboboxes (form and tableview)
+TODO: use KCompletionBox in (editable/noneditable) comboboxes
+
+2007-04-11
+Forms
+- forms having parameter query as data source now ask for parameters
+2.0: merged
+
+2007-03-21, 22
+Table Designer
+- clear command history after successful saving of the design
+- on switching to data view, do not warn about removing data,
+ if the data will stay untouched
+2.0: merged
+Query Designer
+- removed possible crash in data view
+2.0: merged
+
+2007-03-16
+Query Designer
+- fixed table sizes in the Design View
+- fixed displaying relation connection lines when connected field is not visible
+- fixed mouse drop position when target points on a field of table with
+ scrolled-down contents
+- do not show internal relationships for visible lookup fields (JOINs) in SQL view
+2.0: merged
+Table View
+- make column readonly if query-based data source itself is stored (i.e. has connection)
+ and lookup column is defined
+2.0: merged
+
+2007-03-15
+KexiDB
+- SQL parser can work recursively now (needed when multiple parsers are used
+ in the same thread, removed possible crash)
+2.0: merged
+
+2007-03-12..14
+Main Window
+- main window is activated after closing "Insert image" file dialog
+= "find" action: restart searching from start for "Search all rows" mode if:
+== user has changed the value to find since previous searching, or
+== user has recently changed direction to "Search all rows"
+- searching is performed within lookup values as well
+Simple Printouts
+- fixed problem with records printed between page boundaries
+- fixed problem with updating print preview's page navigator when number of pages differs
+ compared to previous preview
+2.0: merged
+
+Table View
+- usability: within cells of type "Image" pressing Tab, Shift+Tab, Left
+ or Right keys now closes the popup and moves the cursor
+2.0: merged
+
+2007-03-07
+Simple Printouts
+- fixed refreshing print preview after table data or query results changed
+2.0: merged
+
+2007-03-02
+Simple Printouts
+- added support for printing and previewing images
+- improved previewing quality
+- fixed landscape mode
+2.0: merged
+
+2007-02-27
+Forms
+- hide popup in combo box or image box as soon as it loses focus
+- changes made to combo box selection is cancelled if the popup
+ loses focus without accepting
+- hide popup in combo box or image box as soon as user moves
+ to other record (usually with a shortcut)
+- fixed handling page down/page up keys within combo box popups
+ (previously it moved to other record)
+2.0: merged
+
+2007-02-23
+Forms
+- for buttons, left/up and right/down keys act like tab/backtab
+2.0: merged
+
+2007-02-19
+Forms
+- fixed displaying margin for image boxes
+- fixed assigning static images to image boxes without saving form's design;
+ the images can now be saved also in data view mode
+- fixed handling tab key for image boxes
+- automatic tab order:
+-- fixed ordering for widgets within containers (e.g. a group box)
+-- widgets within tab widget pages are ordered by page number
+-- widgets inside tab widget that are not visible are skipped when moving
+ focus using Tab/Shift+Tab key
+- Ctrl+Tab shortcut (for switching between tabs) works on windows
+ if multiline text editor is focused
+2.0: merged
+
+2007-02-12
+Forms
+- fields dragging & dropping works for containers (tab widgets, frames and group boxes)
+2.0: merged
+
+2007-02-09..14
+Main Window
+- Edit->Find action added, works within table, query and form views as a global,
+ context-dependent tool window.
+2.0: merged
+
+~~~~~~~~~~~~~~~~ 1.1.2 bugfix release (with KOffice 1.6.2) ~~~~~~~~~~~~~~~~
+
+2007-02-09
+Table View
+- added more actions to the context menu in data view
+
+2007-02-08
+Tools
+- added "Delete column" tool for deleting table columns without removing data;
+ translation enabled; with GUI wrapper
+- fixes for "Add column" tool
+2.0: merged
+
+2007-02-07
+KexiDB
+= fixed possible crash when running a query without primary key included
+ (encountered e.g. when a form contains static images)
+2.0: merged
+Tools
+- added GUI version of "Add column" tool (with translation enabled)
+- the tool is now installed
+2.0: merged
+
+2007-02-06
+KexiDB
+- queries are supported as row source for lookup fields
+- sort query results by primary key fields if there is no explicit sorting specified
+ (especially useful when there are complex joins)
+2.0: merged
+
+2007-02-05
+Query Designer
+- fixed crash if column being removed has sorting set up
+2.0: merged
+
+2007-01-26..2007-02-05
+Table Designer
+- added support for multiple visible columns in the combo box editor
+ (the same for forms)
+- on altering table, remove old lookup field schema objects;
+ make sure you do not save empty type/name fields to XML
+- fixed updating "lookup column" tab's contents
+2.0: merged
+
+2007-01-24..25
+Table Designer
+- fixed altering table schema when lookup column has been changed
+2.0: merged
+Forms
+- align autofield's label to left if it is on the top
+- do not show popup after clicking on combo box
+- fixed popup position of combo boxes inside a container
+- fixed saving property values of type "enum" for subwidgets
+2.0: merged
+
+2007-01-23
+Table Designer
+- fixed crash on saving design with lookup columns defined
+2.0: merged
+Forms
+- fixed handling "align" property for image boxes when scaling is off
+2.0: merged
+
+2007-01-09
+Table Designer
+- some changes do not require table removing now:
+ e.g. field's caption, description, text width, defaultValue,
+ visibleDecimalPlaces
+- fixed updating default value when field type changes
+2.0: merged
+Forms
+- floating point values:
+-- values are now formatted in the same way as in table view,
+ so "decimal places" property of the field is honoured
+-- locale-dependent decimal symbol can be entered instead of '.'
+2.0: merged
+
+2007-01-08
+Build system
+= fixed generating examples when Kexi binaries are not installed
+ (it's the case for fresh compilation)
+2.0: merged
+General
+- Fixed crash related to QtCurve widget style.
+2.0: merged
+
+2007-01-03
+Kexi
+- use transliteration table generated by a shell script
+ to generate identifiers out of unicode characters;
+ plus some adjustments made by hand
+BUG: 133170
+2.0: merged
+
+2007-01-02
+Startup
+- Command line option "--show-navigator" added - shows the Project Navigator
+ side pane even if Kexi runs in User Mode.
+2.0: merged
+Kexi
+= Example files are generated usign a standard automake rule and are installed
+to the Kexi's data dir (so packagers can ship it).
+2.0: merged
+
+2006-12-21..28
+Kexi 2.0
+= formeditor lib ported to KDE4 (not tested)
+Startup, Main Window
+- "User Mode" implemented; command line option --final-mode replaced with --user-mode
+ as described at http://kexi-project.org/wiki/wikiview/index.php?UserMode;
+ all actions related to design are hidden as well as property editor and navigator panes
+2.0: merged
+General
+= removed usage of KEXI_SERVER_SUPPORT macro
+2.0: merged
+
+2006-12-18..20
+Forms
+- "Assign Action" dialog:
+-- added 'create new' and 'close view' actions with a given context
+-- "Current form" actions category added with actions like
+ "go to next record", "go to new record"
+-- more design actions like 'undo' moved to the global category
+2.0: merged
+Main Window
+- action tooltips made generic (not only for tables),
+ e.g. "Save changes made to the current row"
+2.0: merged
+
+2006-12-13..15
+Startup
+= do not recreate kexi__blobs table when connection is readonly;
+- projects created with older Kexi versions can be now opened
+ in readonly mode too
+2.0: merged
+Project Migration
+- fixed copying existing objects to the destination database
+- MySQL and PostgreSQL
+-- fixed importing unicode text and static images if present in the source database (BLOBs)
+-- data types are better handled for import
+2.0: merged
+Forms
+- action selection dialog:
+-- the list of menu commands now contains tooltips instead of action texts to improve
+ readability and is displayed with full width
+-- actions are now categorized, so actions that have no practical use are hidden
+2.0: merged
+
+General
+= typos fixed in API docs
+BUG:138542
+2.0: merged
+
+2006-12-07
+Tools
+- added 'add column' utility:
+ This script adds a new empty column to a table in a .kexi (SQLite 3)
+ database file without removing data from the table.
+2.0: merged
+
+2006-12-06..12
+Forms
+- action selection dialog:
+-- moved "Macros" and "Scripts" to "category" list,
+ which also supports opening tables/queries/forms, running macros/scripts
+-- added "Action type" column so it is possible to assign printing
+ and opening in objects design view
+-- added "Execute form's action" category
+2.0: merged
+Main Window
+- Project Navigator:
+== widget moved to widgets/ for reuse
+-- double/single clicking on executable objects (macro, script) executes them
+2.0: merged
+
+2006-12-05
+General
+- missing i18n()
+2.0: merged
+Query Designer
+- display "(All Columns)" near the "*"
+- SQL editor on Unix: initially, clear undo/redo buffer
+ (otherwise Ctrl+Z clears the contents)
+2.0: merged
+KexiDB
+- fixed problem with constructing SQL statements:
+ for multi-table queries "ORDER BY column" prepends "table" only if "column"
+ is not a name of alias
+2.0: merged
+
+~~~~~~~~~~~~~~~~ 2007 (OOPL) ~~~~~~~~~~~~~~~~
+
+2006-11-28..29
+Examples
+- added parametrized query 'Owners by age'
+= update the parameter query: remove joins because there's still one related bug
+2.0: merged
+
+2006-11-27
+Examples
+- "Simple Database" example updated: added "Ownership" form and a macro
+- "Simple Database": added "write_simple_text_report" Python script
+2.0: merged
+
+2006-11-21
+Table View
+- fixed crash when combo box drop down button is clicked but bound column
+ is not defined for lookup field
+2.0: merged
+Forms
+- fixed possible crash when auto field is used for field with lookup
+ column defined
+- sane icon for the Auto Field widget and Label, improved button icon
+2.0: merged
+
+2006-11-17
+CSV Export
+- export visible values for lookup columns instead of internal values
+Simple Printouts
+- print visible values for lookup columns instead of internal values
+2.0: merged
+KexiDB
+- generate aliases for lookup table names to avoid errors because
+ of ambiguous table names when the same lookup table is used more than once;
+ For example, use persons1 and persons1 aliases here:
+ SELECT service.id, service.emploee, service.service_man, persons1.surname,
+ persons2.surname, service.OID FROM service
+ LEFT OUTER JOIN persons AS persons1 ON service.emploee=persons1.id
+ LEFT OUTER JOIN persons AS persons2 ON service.service_man=persons2.id;
+2.0: merged
+
+~~~~~~~~~~~~~~~~ 1.1.1 bugfix release (with KOffice 1.6.1) ~~~~~~~~~~~~~~~~
+Query Designer
+- propery initialize newly appended rows
+2.0: merged
+
+2006-11-16
+Table View
+- fixed updating contents of the combobox's internal text editor after
+ pressing F2 or Enter key
+- fixed possible crash on application's close
+- fixed copying/pasting values from the combo box (visible text is now copied/pasted)
+2.0: merged
+
+2006-11-15
+Query Designer
+- fixed setting up sorting in the design view
+- fixed setting up string constants as criteria
+2.0: merged
+Table View
+- fixed copying time and date/time values to clipboard
+- fixed pasting time, date and date/time values from clipboard
+2.0: merged
+
+2006-11-14
+Forms
+- fixed displaying Date/Time values
+- fixed crash when "Esc" key is pressed to "cancel row changes"
+ and a combobox widget is focused
+- fixed handling Ctrl+Delete key for "Delete current row" action
+- fixed crash when an autofield's subwidget is painted but the parent
+ is about to be deleted
+2.0: merged
+Table View
+- fixed displaying visible values (usually a text) for lookup columns
+ when there's a default value defined in the referenced table
+- visible values of types other than text or numbers are properly
+ displayed (including images)
+2.0: merged
+Queries
+- fixed retrieving parameters of type Text
+2.0: merged
+
+2006-11-07..13
+Main Window
+- switch contents of custom property tabs after switching the current tab/window
+ (needed for Table Designer's tab)
+- added a warning message box with "Errors encountered during loading plugins"
+ message, controled by dontShowWarningsRelatedToPluginsLoading configuration setting.
+- groups and items for nonexisting plugins are not visible now
+2.0: merged
+Query Designer
+- show more error messages on opening query in design view
+ (e.g. for unsupported column expressions)
+- fixed saving relationships: removed too strict checking for datatypes when creating
+ relationships (signedness)
+2.0: merged
+KexiDB
+- Parser: improved types evaluation for expressions
+- kexi__objectdata.o_data field type changed from BLOB to LongText (backward compatible)
+ to improve human-readability
+2.0: merged
+Forms
+- fixed problem with setting "invalid" flag for fields with invalid data source
+2.0: merged
+Core
+= fixed possible crash on application exit when data changes listener is removed
+2.0: merged
+General
+- Simple_Database.kexi example updated: combo boxes are now used; example data looks better
+2.0: merged
+
+~~~~~~~~~~~~~~~~ 1.1.1-pre ~~~~~~~~~~~~~~~~
+
+2006-10-30..2006-11-06
+Table View
+- better displaying tooltips for columns with lookup data
+- sorting columns with lookup data works
+= various improvements for combo boxes
+2.0: merged
+Forms
+- database-aware combo box form widget works, improved data displaying,
+ mouse and keyboard handling
+- fixed bug #136688 - displaying dates (e.g. with dd.mm.yyyy format)
+= do not block Escape key if there are no data changes to cancel;
+ do not block shortcuts like Shift+Left arrow
+2.0: merged
+
+2006-10-27
+Forms
+- display proper record when a new row was saved and user moved to previous record
+= fixed possible crash inside the row buffer
+2.0: merged
+Table View
+= fixed handling data in lookup fields and cursor moving
+= fixed adjusting width of column containing lookup field
+2.0: merged
+
+2006-10-24..26
+Query Designer
+- New: Added support for parameter queries in design and SQL view.
+ User is asked for entering value of a parameter in a dialog window.
+ Paramers can be of any type except Object.
+ (see also: MSA 2002 Bible, p. 767)
+2.0: merged
+Table Designer
+- Byte datatype is always set to unsigned now
+- "Double precision" datatype is now the default for the floating point
+ type group instead of Float (so we get better precision by default)
+2.0: merged
+Table View
+- fixed validating Big Integer numbers
+2.0: merged
+Forms
+- fixed validating Big Integer numbers
+2.0: merged
+
+2006-10-20
+Forms
+= fixed default size of combo box widgets
+= removed crash when a combobox without a data source was clicked
+2.0: merged
+Main Window
+- accessibility: property editor can be focused using an accelerator key;
+ moreover, Alt+2 now focuses main area and Alt+3 focuses Property Editor
+2.0: merged
+Table Designer
+- "combo" icon is displayed near the field name that have lookup column defined
+2.0: merged
+
+2006-10-16
+Query Designer
+- refresh design view after a sequence of switches:
+ text view -> data view -> design view
+2.0: merged
+KexiDB
+= saving "lookup column" metadata supported
+2.0: merged
+
+2006-10-12
+Forms
+- fixed displaying contents "Data Source" property for multiple selections;
+ unnecessary updates removed (GUI is updated only after adding
+ the last widget to the selection)
+2.0: merged
+Table Designer
+- "Lookup column" property tab added to the property pane
+2.0: merged
+
+2006-10-11
+KFormDesigner
+- removed crash on close and problems with displaying properties
+2.0: merged
+Forms
+- do not update the property editor for every form (only one is active anyway)
+2.0: merged
+
+2006-10-09..10
+Table View
+- fixed drawing selection highlighting for the horizontal header immediately after
+ scrolling the table
+2.0: merged
+Query Designer
+- column sorting is also supported for columns with cleared "visible" flag
+- SQL view's section header now provides an accelerator
+2.0: merged
+
+~~~~~~~~~~~~~~~~ 1.1 stable (with KOffice 1.6) ~~~~~~~~~~~~~~~~
+
+2006-10-06
+KexiDB
+= fixed constructing ORDER BY part of SQL statements (ambiguous fields)
+= when creating "columns by name" cache, also remeber "table.alias" identifiers
+= QuerySchema: retrieving infromation about columns much improved
+ (needed by the parser and designer)
+2.0: merged
+Query Designer
+= fixes for handling ordering information in design mode when there're asterisks
+ in the query
+2.0: merged
+Forms
+- fixed bug #134976: Yes/No field default value does not work properly
+ (for required field: if you add a checkbox that points to a Yes/No
+ field that has a default value the default value is not accepted)
+2.0: merged
+Table View
+- fixed problem with editing floating-point values when there's default
+ value set to 0.0
+2.0: merged
+
+2006-10-04, 05
+Table View
+= fixed displaying values for combobox fields
+= it is now possible to have empty combobox item: selecting it clears
+ the value of combobox
+2.0: merged
+Query Designer
+- invalid input (e.g. criteria or sorting) now displays a message box with
+ "Correct" and "Discard Changes" buttons
+- added support for setting order of columns in Design and SQL views (ORDER BY)
+- fields were sometimes added twice
+2.0: merged
+KexiDB
+= fixed handling information about columns ordering
+2.0: ported
+KoProperty
+= Property: added a method for clearing "modified" flag
+2.0: ported
+
+2006-10-03
+Forms
+- solution for bug #134773: hide "Editor type" property for auto fields
+ Kexi 2.0 will have it unhidden.
+2.0: ported
+- fixed updating property values of enum type
+2.0: merged
+Core
+- fixed bug #134977: enabling/disabling of actions in query editor
+2.0: merged
+Main Window
+- fixed bug #134975: "Data actions do not appear on first open"
+ workaround used before Kexi 2.0: the Data toolbar is always visible
+2.0: merged
+
+~ ~ ~ ~ End of aKademy 2006, Dublin ~ ~ ~ ~
+
+2006-09-30
+KexiDB
+= support for ORDER BY while generating SQL statements
+2.0: ported
+
+2006-09-29
+Form
+- fixed bug #134504 "Several glitches in Kexi GUI"
+2.0: ported
+Docs
+- fixed bug #134503 "Typos in several Kexi docs"
+
+2006-09-28
+KexiDB
+= use COUNT(*), not COUNT() -- fixes MySQL support
+= missing ORDER BY usage while generating SQL statements
+2.0: ported
+2.0: 'parser' target added
+
+2006-09-25
+Forms
+- The first widget of a given kind should be named "widget" by default,
+ the second - "widget2" and so on. (thanks to Natalie)
+2.0: ported
+
+2006-09-21..27
+KexiDB
+- added support for ORDER BY clause
+2.0: ported
+
+~ ~ ~ ~ aKademy 2006, Dublin ~ ~ ~ ~
+
+2006-09-19
+Forms
+- double clicking items of "Available fields" list inserts a new auto field
+- fixed form's selecting data source via the data source pane
+2.0: merged
+KexiDB
+= fixed retrieving autonumber data
+2.0: merged
+
+~~~~~~~~~~~~ 1.1 RC1 release (with KOffice 1.6 RC1) ~~~~~~~~~~~~
+
+2006-09-14
+KoProperty
+- property is not changed when new and old value are both null
+- spin boxes for integer and double values: deleting the contents
+ now sets null value
+= consider unsigner long long and long long values as compatible
+2.0: merged
+KexiDB
+- do not try to insert default values into a column with unique
+ flag declared (or even PK)
+2.0: merged
+Table View
+- Fixed repainting after "Edit->Clear Table Contents" action
+= display question mark for null values in boolean column even
+ if it has to be "notNull"
+2.0: merged
+Table Designer
+- set "false" as default value for columns with Yes/No types
+- when column type changes, default value is updated to match the new type
+ (e.g. casted from integer to text; incompatible values are removed)
+2.0: merged
+
+2006-09-11..13
+KoProperty
+= fixed group widget's height
+2.0: merged
+Table View
+= fixed drawing drop-down arrow for styles like ThinKeramik
+2.0: merged
+- more shortcuts added, shortcuts are now usable and a bit MSA-like
+-- CTRL+End now moves to the last field in the last record
+ (previously: the last record)
+-- CTRL+Home now moves to the first field in the first record
+ (previously: the first record)
+-- CTRL+PgDown now moves to the next record
+-- CTRL+PgUp now moves to the previous record
+-- CTRL+Plus or CTRL+= now moves to the new record
+= some common code moved to KexiDataAwareObjectInterface from KexiTableView,
+ thus allowing to reuse it in forms
+2.0: merged
+Forms
+- fixed tab/backtab key handling
+- fixed displaying custom label text when "Auto Label" property is off
+- handling of global shortcuts like CTRL+PgDown is now shared with
+ Table View (accesibility: it is now possible to move to next/previous
+ record using keyboard)
+- moving to new row sets the focus in the first data-aware widget
+ (in tab order)
+- fixed leaving from "editing" state on "accept row changes" or moving
+ to other record
+2.0: merged
+
+2006-09-08
+Table Designer
+- fixed inserting fields of type "Object"
+= "subType" has no longer a special meaning for BLOB types,
+ "objectType" is used for this purpose
+2.0: merged
+KexiDB
+= fixed saving custom property values
+2.0: merged
+
+2006-09-07
+Forms
+- custom widget factories can be now loaded properly
+= X-KFormDesigner-XMLGUIFileName variable added
+ to the KFormDesigner/WidgetFactory service type, so it's now
+ possible to specify XMLGUI file for defining toolbar actions
+ for custom widget factories
+2.0: merged
+KexiDB
+= Added SimpleCommandLineApp class - an utility for writing small
+ command line programs and tests that support database connections
+ out of the box and provide required arguments.
+= debug areas fixed
+2.0: merged
+
+2006-09-04
+Kexi docs
+- things like 'e.g.' moved to &eg;
+- use <procedure> where appropriate
+- a chapter about forms translated to english
+i18n
+= Stephan Binner's fixes #579553 and #579330 ported to 2.0
+Forms
+- hide QRadioButton widget - current implementation is no-op
+
+~~~~~~~~~~~~ 1.1 beta 1 release (with KOffice 1.6 beta 1) ~~~~~~~~~~~~
+
+2006-09-01
+Forms
+= added KEXI_DB_COMBOBOX_WIDGET define required
+ to add support for combobox form widget (disabled by default for beta 1)
+2.0: merged
+KexiDB
+= dependency on newer (>=4.1) client library removed:
+ MySQL driver now uses 'SELECT @@version' SQL statement instead of dedicated
+ API function
+= added possibility for switching off "LIMIT 1" optmization
+ for methods like Connection::querySingleString()
+ (e.g. needed for 'SELECT @@version')
+2.0: merged
+
+2006-08-29
+General
+- Added unicode->latin1 mappings for Czech characters
+2.0: merged
+
+2006-08-25
+Table View
+= tooltips are displayed also for "insert" row, if needed
+Forms
+= fixed displaying widget names for unbound auto fields
+ and image boxes while in design mode
+= fixed setting data source for auto field
+- initial version of the combo box widget (will be disabled for beta 1)
+2.0: merged
+
+2006-08-24
+Table View
+= displaying cell's selection background fixed for nonstandard font
+2.0: merged
+
+2006-08-22..23
+Forms
+- display default values in the new row;
+ default text is displayed with a special style (italic blue) as in table view;
+ cancelling changes in a widget reverts its contents to default value
+ (if available); the special style is removed as soon as the editing starts
+- "redo" action removed from the data-aware widgets' context menu
+ (to avoid problems with data handling)
+2.0: merged
+Table Designer
+= fixed setting subtype by user
+2.0: merged
+
+2006-08-21
+CSV Import Dialog
+= fixed delimiter change using the combo box (introduced by the prev commit)
+= unnecessary rows are removed after delimiter changes
+2.0: merged
+Table View
+- do not display default values for autonumbered fields
+- do not fill default values for already filled fields
+= boolean editor in tristate mode: fixed switching between true/false/NULL values
+- display default boolean values in blue
+- display tooltip with row number when the vertical scrollbar is dragged
+= fixed displaying tooltips for default values in the "insert" row
+2.0: merged
+
+2006-08-17
+Table View
+- tooltips are displayed for cells with too large contents
+2.0: merged
+CSV Import Dialog
+- delimiter detection is now even more clever, allowing to import more complex data:
+ characters outside quotes have higher priority; additional algorithm counting
+ number of candidates for delimiters is used.
+2.0: merged
+
+2006-08-14
+Table View
+- default values are displayed and work properly with editing
+- current row and column are marked as selection on the vertical
+ and horizontal header sections
+2.0: merged
+KexiDB
+= improved table name altering
+= row edit buffer now handles default values
+2.0: merged
+
+2006-08-11
+KoProperty
+= "3rdState" option for boolean types now uses a combo box with 3 items
+= removed unmaintained QT_ONLY code
+2.0: merged
+= 2.0: some dependency on Qt3 removed
+
+CSV Export
+= fixed crash on exporting to clipboard
+- time and object values: fixed exporting or copying to clipboard
+2.0: merged
+Main Window
+= "copy special" action is available after switching back to table data view
+2.0: merged
+
+2006-08-09
+KoProperty
+= "3rdState" option added for BoolEdit - i18n'd QString, if not empty,
+ the the editor's button accept third "null" state with name equal to this string.
+ When this value is selected, Widget::value() returns null QVariant.
+ This option is used for example in the "defaultValue" property for a field
+ of type boolean (in Kexi Table Designer). Third, "null" value of the property
+ means there is no "defaultValue" specified.
+Table Designer
+- Added "defaultValue" property to the designer
+= Alter Table Test Suite: added "i" variable support (including operator++),
+ closeWindow command, quit command, and optional "clipboard" flag
+ for showSchema, showActions, showTableData. Improved showTableData command.
+ Added "defaultvalues" test.
+2.0: merged
+KexiDB
+= added BLOB-encoding/decoding-related functions
+= improved storing and retrieving "defaultValue" property of table field
+2.0: merged
+
+2006-08-08
+General
+= operator tristate::bool() removed (unsafe, comparison with false was broken)
+2.0: merged
+Table Designer, KexiDB
+- fields of type yes/no have default value set to false (by default)
+= schema editing improved; on table altering, default values are inserted
+ and not-empty values are used is there's no default
+2.0: merged
+
+2006-08-07
+KexiDB
+= improved version-related parts of the API
+= server version information is retrieved
+2.0: merged
+
+2006-08-03
+KexiDB
+= PostgreSQL: use TIMESTAMP, not DATETIME for date/time data type
+2.0: merged
+
+2006-08-02
+CSV Export
+= GUI-less exporting is supported in the API (usable for tests)
+2.0: merged
+General
+- "skip-startup-dialog" command line option added
+2.0: merged
+KexiDB
+= Field::typeForString() and Field::typeGroupForString() are now case-insensitive.
+= added missing support for "indexed" and "type" properties for functions
+ like KexiDB::setFieldProperty()
+2.0: merged
+KoProperty
+= Property::oldValue() should not return value() if no value is available.
+2.0: merged
+Table Designer
+= fixed setting types and subtypes
+= fixed a crash when there are more than 50 "alter table" actions
+2.0: merged
+
+2006-08-01
+Table Designer
+= A test suite added for table altering
+2.0: merged
+
+~~~~~~~~~~~~ 1.1 alpha 1 release (with KOffice 1.6 alpha 1) ~~~~~~~~~~~~
+
+2006-07-31
+KexiDB
+= custom properties can be set for Field objects
+2.0: merged
+Table View
+- deleting cell contents containing Yes/No values
+- do not display drop-down buttons for read-only data
+2.0: merged
+Query Designer
+- possible crash fixed when new design is saved in the data view:
+ only rebuild schema if it has not been rebuilt previously
+1.0/2.0: ported
+
+2006-07-28
+Table Designer
+- fields of Yes/No type have "not null" set by default
+- fixed clearing "not null" property
+2.0: merged
+Table View
+- boolean "not null" field displays "false" instead of null in the new row
+= fixed column width adjustment
+= unused code removed
+2.0: merged
+
+2006-07-26..27
+Property Editor
+- fixed image scaling in the image editor
+2.0: merged
+Forms
+- image box: (in data view) do not allow to show context menu using keyboard
+ for static image (i.e. if no data source is assigned);
+ such a widget also ignores focus events (effective focus policy is NoFocus then);
+ focus frame is painted when needed
+2.0: merged
+
+2006-07-24
+Main Window
+- fixed setting focus after switching between views
+2.0: merged
+
+2006-07-18..2006-07-25
+KexiDB
+- added support for db-aware lookup fields
+2.0: merged
+Table View
+- added support for db-aware combobox fields
+- displaying values in combo box popup fixed
+2.0: merged
+CSV Import Dialog
+- leading 0xFEFF "BOM" unicode character is skipped
+ (http://www.unicode.org/charts/PDF/UFFF0.pdf)
+- added "Strip leading and trailing blanks off of text values" option
+- fixed changing options
+2.0: merged
+
+2006-07-17
+Forms
+- fixed maintaining focus when menu has been clicked
+- fixed tab/backtab for button widget (non-db-aware widgets in general)
+2.0: merged
+
+2006-07-10..14
+Forms
+- context menus now have consistent title: "<objectname> : <objecttype>"
+- cut/copy/paste shared actions work for form widgets in data view
+2.0: merged
+Table View
+- context menu from image box reused in the Table View's cell editor
+- cut/copy/paste/clear actions work for the image cells, including shortcuts
+- cut/copy/paste/clear actions work for text/number/boolean cells
+- fractional character ("," or ".") can be entered as the first character for
+ floating-point data types, what means 0.xxxxx
+- fixed updating row number info in the record navigator and updating the current
+ cell after column sorting
+- BLOB data is sorted by size
+2.0: merged
+KexiDB
+- SQLite driver: read only connections work again
+2.0: merged
+
+2006-07-07
+Forms
+- AutoField, Image Box: fixed setting background color;
+ drop-down button keeps its default color
+2.0: merged
+Table View
+- added drop down button as image cell editor
+2.0: merged
+
+~~~~~~~~~~~~~~~~ 1.0.2 bugfix release (with KOffice 1.5.2) ~~~~~~~~~~~~~~~~
+~ Now, as 1.0.x is closed for changes, all the changes are merged into 2.0 only ~~
+
+2006-07-06
+Forms
+- Data Source tab of the Property Pane: fixed entering field or table/query
+ name by hand: pressing return accepts selection; focus-out accepts selection;
+ entering in-progress clears previous selection
+2.0: merged
+- displaying images optimized: no background is cached or painted
+2.0: merged
+- text box widget now displays text aligned to the left after loosing the focus
+2.0: merged
+- possible crash removed when changing property of enum type
+1.0/2.0: ported
+Table View
+- Image cell editor: appearance improved, tooltip with a thumbnail added,
+ dropdown button with context menu added (the same as in Image Box form widget)
+2.0: merged
+KoProperty
+- fixed handling groups
+(1.0.2)
+Forms
+- improvements related to data editing within forms backported from 1.1
+(1.0.2)
+
+2006-07-05
+Forms
+- AutoField: fixed handling foreground and background colors;
+ added "foregroundLabelColor" and "backgroundLabelColor" properties;
+ subproperties coming from super classes are now visible;
+ better handling internal layout depending on label's position
+2.0: merged
+- "tristate" property for check box widget redefined:
+ supports DefaultTristate, TristateYes, TristateNo values.
+ Thus, for bound widgets null values can be set
+ and for unbound widgets only Yes or No values can be set (by default).
+2.0: merged
+- fixed creating modified property objects of enum type
+2.0: merged
+KoProperty
+- fixed possible crash when clicking "undo" button causing
+ the full property set's reload (it was the case for "Editor Type"
+ property of the AutoField widget)
+1.0/2.0: ported
+
+2006-07-04
+KexiDB
+- fixed copying index and table objects
+1.0/2.0: ported
+
+2006-07-03
+Forms
+- AutoField: focus label's associated widget (editor)
+ when user clicked the label
+2.0: merged
+- AutoField: update data source and values for subproperties on form loading
+ also when we're switching from design to data view
+1.0/2.0: ported
+- AutoField: removed crash when table field has been renamed in the data source
+1.0/2.0: ported
+
+2006-06-28
+KexiDB
+- SQLite 3.2: fixed opening databases with non-latin1 pathnames
+2.0: merged
+CSV Import Dialog
+- parsing data improved: values without leading zeros, like 1/2/2006 work;
+ Since apps like MS Access in the USA creates csv files with date
+ format month/day/year, (and without leading zeros), text with "/"
+ inside is assumed to be in this format.
+1.0/2.0: ported
+
+2006-06-27
+Forms
+- Image Box widget: now supports saving data in the database!
+ Fixed filling duplicated data widgets; fixed editing;
+ "Drop-Down Button Visible" property added.
+2.0: merged
+
+2006-06-26
+Forms
+- AutoField widget: changing value of "Widget Type" property reloads the entire
+ property set, so new properties can appear and unused properties can be hidden
+ in the Property Editor.
+2.0: merged
+KoProperty
+- delayed deleting of editors on setting a new property set
+1.0/2.0: ported
+- added additional, internal "property change" signal so it will be always emitted
+ _before_ the public one; thus e.g. it is legal to reload the property set within
+ the "property change" handler
+2.0: merged
+
+2006-06-19..23
+Forms
+- ImageBox widget: drop-down button moved to bottom-right, usability improved
+ (e.g. keyboard handling for popup), db-awareness added,
+ frame-related properties added, tab/backtab handling fixed,
+ fixed updating position of image when the frame changes
+2.0: merged
+- AutoField widget: added support for Image (Object) type,
+ fixed handling color properties, internal editor's properties are
+ automatically inherited by the AutoField widget as so-called subproperties
+2.0: merged
+- removed flickering of the Property Pane after dropping a new field
+ onto the form
+2.0: merged
+
+2006-06-06
+CSV Import Dialog
+- fixed recursion when importing clipboard data
+1.0/2.0: ported
+- allow to change the delimiter when importing clipboard data
+1.0/2.0: ported
+Migration
+- improved usability for selecting type of destination database
+ (no mention of SQLite for now)
+2.0: merged
+KexiDB
+- renaming table fields works, table schema is recreated when needed,
+ and just altered in-place when it's enough to do so
+2.0: merged
+Table View
+- cell editor: the contents are marked as changed only when the original
+ value differs from the current
+1.0/2.0: ported
+Table Designer
+- changing field's description is supported by undo/redo commands
+ and by alter table actions.
+2.0: merged
+- Internal Debugger: added "Real alter table" button,
+ for convenience, "save" action now uses the old alter table code
+2.0: merged
+
+2006-06-05
+KoProperty
+- clear all properties and group names when using operator =
+1.0/2.0: ported
+KexiDB
+- SQLite library upgraded from 3.0.7 to 3.2.8 (backward compatible),
+ to get "table renaming" function.
+2.0: merged
+- optimization: "rename table" action now uses "ALTER TABLE RENAME TO"
+ SQL statement, O(1).
+2.0: merged
+- X-Kexi-DoNotAllowProjectImportingTo KexiDB driver property added, false by defaut
+2.0: merged
+
+2006-06-02
+KexiDB
+- fixed setting database filename when relative path has been provided
+1.0/2.0: ported
+- minor utilities added usable for altering
+2.0: merged
+- table altering improved for SQLite: changing data types will be possible soon
+2.0: merged
+
+2006-05-31
+KoProperty
+- methods in Set::Iterator are now const
+2.0: merged
+- added propertyValues(const Set& set) utility function
+2.0: merged
+
+2006-05-30
+Table View
+- spreadsheet mode: fixed inserting empty rows and deleting rows
+1.0/2.0: ported
+Table Designer
+- improved undo/redo actions: deleting and redoing actions fixed
+2.0: merged
+- added title to the context menu
+2.0: merged
+KexiDB
+- improved alter table machinery; now fields are identified by UIDs
+ to avoid problems with multiple fields sharing the same name
+2.0: merged
+
+2006-05-29
+KoProperty
+- animate clicking on the group title's area
+2.0: merged
+- added a container widget that can be used to split information into hideable sections
+2.0: merged
+Form Designer
+- data source pane splitted vertically into two sections for clarity
+2.0: merged
+Table Designer
+- clear PK when selecting non-integer type
+2.0: merged
+
+2006-05-27
+KoProperty
+- Possible fix for crash. Not sure this is the definitive fix for bug 124917.
+ Thanks to Jaime Torres
+2.0: merged
+- group items now have rather pretty appearance styled with KDE style
+2.0: merged
+- fixed groups order, API changed: now it's possible to get order of groups
+2.0: merged
+- sorting disabled when groups are present
+2.0: merged
+- icons can be defined and displayed within the group items
+2.0: merged
+
+2006-05-26
+KexiDB
+- improved handling extended table schema information
+- improved alter table
+2.0: merged
+Table Designer
+- improved undo/redo actions; prepared for reuse
+ in the table-altering machinery of KexiDB
+2.0: merged
+
+2006-05-25
+Forms
+- set the data source readonly if it comes from query
+1.0/2.0: ported
+- "Read only" property is now supported by all data-aware widgets,
+ and form itself
+2.0: merged
+- background color of the line edit in read-only mode is blended with white
+ to get lighter gray
+2.0: merged
+- accessibility+usability: read only line edit widget now shows the caret
+2.0: merged
+- display field caption as title for editor's context menu
+2.0: merged
+
+~~~~~~~~~~~~~~~~ 2006.1.1 (OOPL, bugfix) ~~~~~~~~~~~~~~~~
+
+2006-05-18
+Table Designer
+- improved support Undo/Redo actions
+2.0: merged
+Forms
+- fixed saving data changes for db-aware checkboxes
+ (fixed by setting StrongFocus policy as default)
+1.0/2.0: ported
+
+~~~~~~~~~~~~~~~~ 1.0.1 bugfix release (with KOffice 1.5.1) ~~~~~~~~~~~~~~~~
+
+2006-05-17
+Main Window
+- Project Navigator: remove Enter and CTRL+Enter accels,
+ as these blocks other actions
+- Project Navigator: fix setting focus
+1.0/2.0: ported
+
+2006-05-16
+Migration
+- display error for not found import/export driver
+1.0/2.0: ported
+Startup
+- (temporary) do not propose importing broken SQLite databases files
+ as there is no import driver implemented yet; display error message instead
+1.0/2.0: ported
+Table Designer
+- fixed saving boolean types for table design
+1.0/2.0: ported
+
+2006-05-15
+General
+- -execute command line option added; useful for executing macros, scripts, etc.
+2.0: merged
+Table View
+- small API and source code improvements (s/buf/set)
+2.0: merged
+KoProperty
+- fixed making a deep copy of Set object containing custom properties
+- deep copy of Set object now maintains the original order
+- fixed possible crash on deleting Set object created by copy constructor
+1.0/2.0: ported
+
+2006-05-09
+KoProperty
+- API changed: a few methods are now const; optimization
+2.0: merged
+
+2006-05-08
+KexiDB
+- fixed converting floating-point values to SQL-compatible strings when the number
+ was provided as string QVariant
+1.0/2.0: ported
+Forms
+- fixed entering floating-point values for locales where ',', not '.' is the fractional point
+1.0/2.0: ported
+Query Designer
+- show error message when switching to other view failed (i18n-safe)
+- just show empty editor when opening a design in text view and there is no sql
+ statement found in the backend
+1.0/2.0: ported
+MDB Import
+- fixed importing decimal (numeric) values
+ (by fixing setting fractional point's position and adding negative sign when needed)
+1.0: ported
+
+2006-05-05
+Table Designer
+- Undo/Redo actions added and integrated with table altering
+Internal
+- "AlterTable" tab added to the "Kexi Internal Debugger" window
+
+~~~~~~~~~~~~~~~~ 2006.1 (OOPL) ~~~~~~~~~~~~~~~~
+
+2006-05-04
+Main Window
+- fixed crash when double (or single, depending on the settings) clicking
+ on the empty area of the Project Browser
+1.0/2.0: ported
+Query Designer
+- fix saving design changes while in Data View
+1.0/2.0: ported
+
+2006-05-02
+CSV Import Dialog
+- fixed importing floating-point values where there are integer
+ and floating-point values mixed
+1.0/2.0: ported
+MDB Import
+- fixed importing floating-point or decimal values (there is still a bug in mdbtools
+ with fetching decimal values)
+KexiDB
+- fixed building SQL INSERT statements for "prepared statement"
+1.0/2.0: ported
+
+2006-05-01
+KexiDB
+- ported to Qt4; tests/newapi works
+
+2006-04-28
+KexiDB
+- SQLite3 driver: report error when closing database failed
+1.0/2.0: ported
+Core
+- KexiProject: report error when closing database failed
+Query Data View
+- properly destroy cursor on view removing; this also fixes the problem
+ with compacting Kexi database when it cannot be reopened read/write when
+ there was opened view with query data because of db cursor blocking the database
+- properly close as soon as the data is fetched (temporary solution)
+General
+- "Kexi Internal Debugger" introduced to help in Kexi development;
+ "showKexiDBDebuger" in [General] should be set to true and KEXI_DEBUG_GUI defined
+ to use this.
+Form Designer
+- fixed possible crash on closing form
+1.0/2.0: ported
+
+2006-04-27
+KexiDB
+- "visibleDecimalPlaces" property added for table fields of type floating point
+ (will be added for decimal and currency too); "Auto" state is supported
+ as default so only meaningful fractional digits are be displayed
+Table Designer
+- "visibleDecimalPlaces" property supported for floating point types
+Table View
+- "visibleDecimalPlaces" property supported when displaying and editing
+ floating point values
+MDB Import
+- on importing table rows: report failure when inserting row failed
+
+2006-04-25
+CSV Import
+- simplify whitespace of text in cells (for preview only)
+- fixed delimiter detecting
+- priority in delimiter detection changed: now ";" has priority over ","
+1.0/2.0: ported
+Form Designer
+- hide minimumSize and maximumSize widget properties
+1.0/2.0: ported
+
+2006-04-13
+Kexi 2.0
+- merged changes since revision 523723
+KexiDB
+- fixed loading length of text fields within table schema
+0.9/1.0/2.0: ported
+
+2006-04-12
+CSV Import
+- fixed problem with importing data with more than 100 columns (for default settings)
+1.0/2.0: ported
+- only the first 10KiB of data is loaded for the preview by default; can be adjusted
+ by setting ImportExport/MaximumBytesForPreviewInImportDialog option in kexirc
+1.0/2.0: ported
+- display rows number on the top of the window
+2.0: merged
+
+2006-04-11
+Forms Designer
+- fixed prossible crash while clearing "data source" field name;
+ now setting the autofield to unbound state works
+
+2006-04-10
+KexiDB
+- QuerySchema(TableSchema* tableSchema) ctor:
+ To avoid problems (e.g. with fields added outside of Kexi using ALTER TABLE)
+ we do not use "all-tables query asterisk" (see QueryAsterisk) item
+ but instead we add all the fields explicity.
+0.9/1.0/2.0: ported
+- PostgreSQL driver: fixed crash when a new field has been added to existing
+ table outside of Kexi
+0.9/1.0/2.0: ported
+Table Designer
+- More intrusive warning when altering table design
+1.0: ported (except the message)
+2.0: merged
+Forms Designer
+- fixed possible crash when switching to data view mode unbound autofield widgets
+- while in data mode, do not display "(unbound)" text for unbound autofield widgets
+
+2006-04-08
+KexiDB
+- use SQL-compliant TRUE and FALSE constants for PostgreSQL
+ (1 and 0 are unsupported)
+0.9/1.0/2.0: ported
+
+2006-04-07
+Table View & Form View
+- "invalid data warning" tool tip improved and reused in Kexi forms
+- many fixes related to handling date, time and date/time values
+
+2006-04-05
+Form Designer
+- KexiDBDoubleSpinBox and KexiDBIntSpinBox replaced line edit with validator because
+ of problems with handling null data and signalling changes.
+ (there's no backward compatibility problems as these two widgets were used internally
+ in the AutoField data widget)
+- fixed saving data changes made within auto field widgets
+- fixed support for tab/backtab key within auto field widgets
+- fixed problem when sometimes form was not filled with data after change of the design
+1.0/2.0: ported
+
+2006-04-04
+CSV Import
+- possible crash fixed after switching character encoding
+1.0/2.0: ported
+Main Window
+- "Compact Database": now closing the current project is required;
+ if there's no project is opened, user is asked for picking one
+Property Editor
+- possible crash fixed when bool editor's state is quickly switched
+1.0/2.0: ported
+
+2006-03-29
+Main Window
+- "Compact Database" admin action added
+KexiDB
+- API version increased to 1.8
+- "Compact Database" implemented for SQLite3 databases
+
+2006-03-28
+Startup
+- --readonly command line option added
+TableView
+- boolean editor: only accept clicking on the [x] rect
+1.0/2.0: ported
+
+TODO: merge trunk with revision 523723
+
+~~~~~~~~~~~~~~~~ 1.0 stable (with KOffice 1.5) ~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~ 1.0 rc1 (with KOffice 1.5 rc1) ~~~~~~~~~~~~~~~~
+
+2006-03-20
+KexiDB
+- use local sockets by default for local server connections, if possible
+
+2006-03-16
+KexiDB
+- added simple encryption for stored passwords
+- allow to save empty password in .kexis and .kexic files
+Startup
+- ask for password (without storing it) for connection data without stored password
+
+~~~~~~~~~~~~~~~~ 1.0 beta 2 (with KOffice 1.5) ~~~~~~~~~~~~~~~~
+
+2006-02-28, 03-03
+PostgreSQL driver
+- fix for displaying unicode error messages
+- fixed escaping binary data (octal values are used for special characters)
+- fixed loading and saving BLOB data (images within forms work now)
+
+~~~~~~~~~~~~~~~~ 2006 (OOPL) ~~~~~~~~~~~~~~~~
+
+2006-02-22
+CSV Import Dialog
+- fixed updating "primary key" checkbox
+
+2006-02-21
+Table View
+- row highlighting fixed for combo box popup, now it's used for any table view
+
+2006-02-20
+Project Import Wizard
+- do not ask about overwriting file if server-based destination has been selected
+
+2006-02-17
+Query Designer
+- fixed crash on saving new query design
+Main Window
+- disabled complex and redundant action 'View -> Tool Docks' menu.
+ This comes from KMDI, not Kexi itself and will be completely removed
+ in KDE4 version. IIRC, we could not hide it now as this may cause crashes.
+
+Form Designer
+- text label widgets: "word wrap" is turned on by default
+- fixed update "word wrap" property for label widgets
+- fixed random cursor setting for the form surface
+- fixed problems with inserting widgets in a random position
+ and random rectangles painting problems
+ (all this due to MouseButtonRelease event coming BEFORE MouseButtonPress event)
+
+2006-02-16
+Query Designer
+- Row editing within the "Columns" area is accepted before saving.
+ If the editing cannot be accepted, saving is aborted.
+Table Designer
+- set property editor to read-only mode for read-only database connections
+Data Table
+- disable combobox editor's dropdown button for read-only database connections
+Property Editor
+- fix for read-only mode: support it also globally at property set level
+- disable editing for read-only widgets
+- fix for displaying double values for current locale
+
+2006-02-15
+General
+- when query design has been changed and saved, subsequent openings of a form using
+ it will reload its definition. The same for 'page setup' dialogs, etc.
+- fixed crash when 'page setup' dialog is opened, closed, and opened again for
+ the same data object
+
+2006-02-10, 14
+Main Window
+- closing dialog is now marked as 'pending job', the same as for opening
+- When there are pending jobs, 'quit' and 'close project' actions are
+ delayed and executed after last pending job finishes. This removed possible
+ crashes when user closed application's main window (or closed project)
+ when there are pending jobs.
+
+2006-02-03,07
+Forms
+- fixed painting "geometry" rectangle when inserting new widget
+- update tab stops information before displaying "Tab Stops" dialog
+- fixed invalid resizing for widget's inline editor
+- 'edit->tab order' action is available also when form design is not focused
+
+2006-02-01
+KexiDB
+- MySQL: added temporary (unoptimized) implementation of Prepared Statement
+- MySQL, SQLite: fixed inserting BLOB data (without Prepared Statements)
+- MySQL: fixed fetching BLOB data (without Prepared Statements)
+- MySQL, PostgreSQL: fixed entering strings containing characters like ' \ "
+- most debug lines commented out
+CSV Import Dialog
+- fixed importing for MySQL backend
+Form Designer
+- fixed saving images (binary data) to MySQL backend
+
+2006-01-31
+CSV Export Wizard
+- When data is copied to clipboard, default delimiter is tabulator
+ and options are hidden.
+
+2006-01-30
+Form Designer
+- fixed saving new forms for MySQL databases
+CSV Import Dialog
+- fixed crash when importing CSV files smaller than 200 bytes
+
+2006-01-25,26
+KexiDB
+- SQLite3 driver & kexisql3: fixes for read-only opening
+Main Window
+- fixed usability: read-only flag of the db connection is now visible
+ in the statusbar
+- added question about opening db file as read-only when it is already opened
+- disable actions that require write access to the db if it's opened as readonly
+Startup
+- fixed support for "-print-preview" command line option
+Simple Printing
+- enlarge default zoom
+Property Editor
+- fixed editor refreshing after contents loading
+Table View
+- 'inserting enabled' flag is always false for read-only objects
+
+2006-01-24
+KexiDB
+- Unicode support fixed for MySQL
+
+2006-01-23
+Table View
+- fixed acceping am/pm for entering time values
+- various fixes for entering date, time and date/time values
+- time can be entered without seconds
+- small passive warning box is displayed when entered value is invalid
+ (currently for date, time and date/time types)
+
+~~~~~~~~~~~~~~~~ 1.0 beta 1 (with KOffice 1.5) ~~~~~~~~~~~~~~~~
+
+Main Window
+- 'single click opens' is mode is off by default, can be turned on
+Table Designer
+- Object type hidden for beta1
+Table View
+- date, time and date/time values are displayed using KDE settings
+
+2006-01-20
+General
+- examples/ directory in the source code tree now contains
+ example database(s)
+Form Designer
+- Data source pane: disable widget's data source combo box
+ when there is no form's data source defined
+- temporary disable AutoField
+- temporary disable cursor property
+Query Designer
+- fixed displaying criteria if WHERE section contains '('
+- tables positions are preserved if possible when
+ relations view updating is needed
+
+2006-01-18, 19
+Form Designer
+- widget library naming made more verbose to avoid potential
+ conflicts between packages
+- versioning added for widget library plugins; this can also
+ avoid conflicts between plugins as we've just renamed them
+Query Designer
+- fixed displaying criteria for table view rows when 'visible'
+ column is set to false
+- all-tables-asterisk is also hidden when last table is hidden
+- temporary data member isolated; fixed possible crash when
+ switching back from SQL View to Design View
+
+2006-01-17
+KexiDB
+- even more verbose error messages for failed SQL statement execution
+CSV Import Dialog
+- tabulator is default field delimiter for clipboard data
+- delimiter detection improved
+General
+- "Dangerous" flag set for potentially destructive dialogs
+- a few redundant i18n strings removed
+Table View
+- data for large table view is destroyed without blocking GUI
+
+2006-01-16
+Project Import Wizard
+- hide Kexi file extensions in source connection file dialog's filter
+Main Window
+- fixed saving Project Navigator Side Panel's visibility
+- do not allow to open the same dialog twice - it was possible
+ for slowly loading dialogs with large data (e.g. a table view with 10^4 rows);
+ pending 'open' actions are now known
+Simple Printing
+- do not paint invalid values of type time, date or date/time
+Table Designer
+- fixed selecting subtypes
+KexiDB
+- SQLite driver: missing {} in PreparedStatement
+- testing connection executes "USE DATABASE" if needed (e.g. for PostgreSQL)
+
+2006-01-12
+Table View
+- Usability: Date, Date/Time and Time cell editors reimplemented
+
+2006-01-11
+Migration
+- fixed opening project after import if user wanted this
+
+2006-01-09
+Form Designer
+- infinite loop removed when updating multiple selection
+0.9: backported
+0.8: backported
+- "Assign Action" dialog cleaned
+KexiDB
+- generate cleaner query statements:
+ if there's single table in query schema, skip "table." prefix in resulting
+ SQL string, e.g. build "SELECT a, b FROM t" instead of "SELECT t.a, t.b from t".
+Query Designer
+- "Totals" column hidden as it is not implemented
+
+2006-01-05..6, 10
+CSV Import Dialog
+- optimalization for large data: only about 100 rows are loaded for preview
+- progress dialog added on dialog creation (opening can be cancelled)
+- layout fixes
+- missing column with primary key is added if user wants it
+- optimized importing large (many thousands of rows) tables:
+ GUI is not used to store entire table before importing;
+ only current record is kept in memory buffer
+- progress dialog added on importing (importing can be cancelled)
+
+2006-01-02..04
+Startup
+- "--skip-dialog" command line option added.
+ Skips displaying connection dialog\n"
+ and connects directly. Available when opening .kexic
+ or .kexis shortcut files.
+- opening server-based projects works in File->Open when
+ there's already project opened.
+- "--connection <shortcut_filename>" command line option added.
+ Specifies a database connection shortcut .kexic file containing
+ connection data. Can be used with --createdb or --create-opendb
+ for convenience instead of using options like --user, --host
+ or --port. Note: Options like --user, --host have precedence
+ over settings defined in the shortcut file.
+- creating server-based projects works in File->New when
+ there's already project opened.
+Migration
+- Project Migration Wizard is proposed if a server-based database
+ is incompatible with Kexi and cannot be opened
+- if a destination for imported project is a server, it is also
+ opened after import, if user wanted this
+
+2005-12-23, 29
+General
+- (data forms, table view): fixed entering row number in the row navigator
+- win32: fixed saving recently displayed directories in file dialogs
+KexiDB
+- SQLite: opened files are now locked for read/write by default;
+ related error messages improved
+Simple Printouts
+- pages to print can be selected
+- number of copies can be entered
+- pages collation switch on or off (i.e. 1-2..n; 1-2..n.... for collation
+ and 1-1-...1; 2-2..2; .. for "no collation")
+- page count is properly computed and printed on the footer as "Page x of y"
+- "Page Setup" action added;
+ now it's window is only presented when user really wants this
+- text of the page title properly updated
+
+2005-12-12..22
+Simple Printouts
+- added Simple Printouts window with print preview and settings
+Table View
+- failed accepting of row editing now cancels window closing
+- fixes for updating row data (this was sometimes visible in Table Designer)
+Table Designer
+- avoid asking twice for saving changes to the design on window closing
+- find unique name for autogenerated primary key fields
+Kexi Core
+- possibility of adding non-db-aware windows/tabs in Kexi
+General
+- added --print and --print-preview command line options
+- (temporary) mini-kolibs added to get print settings stuff and remain
+ independent on kolibs
+
+2005-12-09
+Forms
+- memory for data is now properly freed before closing a form
+0.9: backported
+0.8: backported
+CSV Export
+- CRLF characters are used as in RFC 4180
+- fixed gcc compiler-specific crash
+- quote characters are escaped inside strings
+- date/time values are exported without "T" inside (from ISO format)
+CSV Import
+- fixed handling line endings inside strings
+- time and date/time types import and detection added
+
+2005-12-05..08
+Property Editor
+- repaint fixes when column width changes or when persistent selection is set
+- Property::captionForDisplaying() added: beter support for multiline property captions
+- method names improved in Factory
+- do not steal focus when selection is preserved
+- possible crashes fixed when property values are changed in an instant reaction
+ on changing a property value in the editor; this is the case e.g. in Kexi Table Designer
+- API docs updated
+General
+- custom "Identifier" property type and editor added (allows only entering identifiers);
+ used in Table/Form/Report Designers
+Table Designer
+- Field captions can be now entered by users instead of names.
+ Field names are then automatically generated.
+- fixed problem with undo button for subtype combo box
+- support for BLOB (Object) type; "Image" is now the only subtype of this type
+- "unique" and "indexed" properties hidden for BLOB type
+Table View
+- clearing text removes value in combo box field for "enum" mode
+
+2005-12-02
+Main Window
+- usability: for IDEAl mode tabs are also visible when one window is opened
+ (otherwise user could not know what the window's caption is)
+- usability: added "close" button to the tab widget for IDEAl mode
+- 'hover close button' is now turned off by default for IDEAl mode
+ (added HoverCloseButtonForTabs setting to kexirc for changing this)
+
+2005-11-29..12-01
+General
+- file dialog's filters now contain only filters that make sense,
+ e.g. there's no "mdb" filter when we're writing to a file.
+- usability: file dialogs now store recent directory paths
+ in the config file, and this is now used everywhere in Kexi
+- default extension is properly added when there's multiple filters set
+ in the file dialog
+Startup Dialog
+- check for existence of a file user has selected to open
+CSV Files Export
+- CSV Export dialog added (also for copying to clipboard)
+ with storable export options
+CSV Files Import
+- usability: integer spin box used for "Start at line" option instead
+ of a combo box
+
+2005-11-28
+Main Window
+- "File->Export->Data Table" and "Edit->Copy Special->As Data Table"
+ actions added
+Parts
+- X-Kexi-PartVersion increased to 2
+- added boolean servicetype property: X-Kexi-SupportsDataExport;
+ true for tables and queries
+CSV Import
+- space saved: radio buttons replaced by combo boxes
+- added "Always use this encoding when importing CSV data files" option
+ to "CSV Import Options" dialog (saved to Kexi config file).
+
+2005-11-26
+Project Migration
+- added "Always use this encoding in similar situations" option
+ to "Advanced options" dialog (saved to Kexi config file).
+
+2005-11-25
+Project Migration
+(API CHANGED)
+- Added versioning for migration drivers (current one is 1.1)
+- Added properties support for migration drivers
+- All error messages are displayed on the last "Failure" page
+- Added "Advanced options" button and dialog, currently with "Encoding" parameter
+ for source database. Currently used by MDB driver for MSJet3 files.
+General
+- KexiCharacterEncodingComboBox added - a combobox widget providing
+ a list of possible character encodings
+
+2005-11-22..23
+Project Migration
+- "All Supported Files" filter added to Kexi file dialogs
+- Files like MS Access .mdb can be now clicked and then Import Wizard will pop up
+ with preselected parameters. This also works using command line.
+- Import Wizard's GUI: improved messages, added real Finish page
+- No need to select source driver, it's enought to select a filename or db connection
+Startup
+- Better usablity of 'Open Existing' tab page
+- Better usablity of 'New project wizard'
+
+General
+- compile fix for some compilers
+0.9: backported
+0.8: backported
+
+2005-11-15
+Forms
+- AutoField widget: update m_label for font/palette change
+- AutoField widget: display "Unbounded Auto Field" text when
+ no data source is set (in design time, like for image box)
+
+2005-11-09..14
+Forms
+- AutoField widget: improved behaviour in design time
+ (setting caption/type/label position)
+- frameColor property added for widgets like text label or frame:
+ behaves well also for "raised" frame shapes
+- new widget KexiFrame, will provide more features; backward compatible
+ with QFrame
+- do not allow to move top-level widget's position using arrow keys
+Property Editor
+- fix entering text into string-type editors with 'autoSync' flag
+
+2005-11-07
+Startup
+- When opening connection (most often using .kexic file), connection dialog is shown
+ so user can adjust connetion parameters, (optionally save them) and finally perform
+ the connection to see available databases. If connection failed, connection dialog
+ is popping up again.
+
+2005-11-02..04
+2005-10-31
+Project Migration
+- call KexiProject is used to create destination database instead of KexiDB::Connection
+ because tables like kexi__parts and kexi__blobs have to be created.
+- Moving kexi projects from database servers to database files works.
+ kexi__objects table contents are properly copied if existed in source database,
+ so queries, forms etc. are properly imported
+- Wizard's GUI improvements
+KexiDB
+- More verbose error messages:
+ Error messages and result numbers can be now inherited by using
+ Object::setError( KexiDB::Object *obj, const QString& prependMessage ),
+ so less information will be lost while displaying message e.g.
+ on failed cursor opening.
+- mysql/pgsql/sqlite/mdb drivers updated for the current API
+
+- Tables: fixed retrieving field captions and descriptions
+ 0.9: backported
+ 0.8: backported
+
+2005-10-27
+KexiDB
+- kexi__parts internal table is now created within KexiProject,
+ not KexiDB::Connection
+- kexi__useractions and kexi__final are no longer created
+Project Migration
+- speedup: table creation and data copying is performed within transactions
+- Added possibility of migrating Kexi projects from one backend to another
+ (e.g. from MySql server to SQLite file) internal kexi__ tables are properly recreated;
+ data, e.g. for kexi__parts and kexi__blobs is properly copied
+
+2005-10-24..26
+Forms
+- Property editor widget for pixmaps now uses KexiBLOBBuffer
+- forms manager turned into singleton,
+ and two widget libraries are now created: one for forms and one for reports
+Property Editor
+- show preview box in visible area
+KexiDB
+- DatabaseProperties utility class added to API
+Table View
+- Fixed ugly bug for switching sorting order (thanks Aaron)
+ 0.9: backported
+ 0.8: backported
+- Better sorting:
+-- NULL values are smaller than everything else
+-- Special sorting for data/time/datetime/bin integers/floating point numbers
+ 0.9: backported
+ 0.8: backported
+
+2005-10-19
+Forms
+- image box doesn't provide popup in data view mode when
+ no data source is assigned
+- Kexi Form widgets code splitted
+
+2005-10-18
+KexiDB
+- Connection::querySingleRecord() improved
+- QuerySchema::addToWhereExpression() added
+- SQLite driver: fixed BLOBs retrieval
+
+2005-10-15
+Table View
+- crash fixed in combo box
+ CCBUG: 114697
+ 0.9: backported
+ 0.8: backported
+- alt+down shortcut can be used to drop down combo box (previously only F4 worked)
+ 0.9: backported
+ 0.8: backported
+- combo box editor's popup:
+ row repainting fixed after current highlighted row has changed
+ 0.9: backported
+ 0.8: backported
+Table Designer
+- avoid possible infinite recursion
+- selecting non-integer type group using 'type combo' clears PKEY flagm, if set
+
+2005-10-14
+Forms
+- It was not possible to change the tab order of
+widgets in the Edit Tab Order dialog with keyboard.
+
+2005-10-12
+Project Import Wizard
+- usability++: after successful import, the project is opened
+
+Query Designer
+- conditions: ambiguous expressions fixed:
+ "t1.id > 100" is used instead of "id > 100" in queries like
+ SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id > 100
+- fixed possible crash when invalid query design is loaded in design view
+- fixed switching to design mode after invalid query was opened directly in text mode
+- eat parentheses on criteria loading, in WHERE conditions like (a.id = value)
+- also accept tableName.fieldName on criteria loading, not only tableName
+- also accept e.g. "2 = variable" as condition, not only "variable = 2"
+- graphical representation of joins is generated back from SQL statement not only
+ based on explicit query schema's relations but are also retrieved
+ from "[t1.]f1 = [t2.]f2" expressions within WHERE section
+
+TODO: joins are not visible when switching from design to text mode (and conversely)
+ when there are no columns selected in FROM section, eg. "select from a, b"
+
+2005-10-06
+KexiCore
+- Fixed autogenerating object names (e.g. tables, queries) based on caption:
+ latin1 base name can be now chosen by translator
+BUG: 104858
+
+2005-10-05
+KexiDB
+- PreparedStatement introduced
+- mysql, sqlite drivers: avoid double freeing data member in ConnectionInternal implementations
+
+2005-09-27..29
+Forms
+- Images are stored in memory in original form, converting to QPixmap is only performed
+ for displayoing purposes. Such original pixmap can be saved back to file.
+ Original file name is also kept. KexiImageBox handles pixmap data with QByteArray member
+- KexiBLOBBuffer introduced: Application-wide buffer for local (static) BLOB data like pixmaps.
+ For now only pixmaps are supported. Used on design time before objects are stored.
+ This allows to copy multimegabyte pixmaps within Kexi without unnecessary memory loss.
+- KexiCustomPropertyFactory introduced: handles Kexi-specific property editor items
+
+2005-09-26
+KoProperty lib
+- Editor: possible crash fixed
+- Property: guarded ptrs are used to store pointers to Set objects
+ to avoid dangling pointers
+
+2005-09-24
+General
+- KEXI_STANDALONE compile time definition added
+- description in 'about data' mentions whether it is a standalone or 'bundled'
+ Kexi version
+- .po files are now prefixed with "standalone_" for standalone versions
+ to avoid conflicts with KOffice installations
+- yes, 1.0 is marked as standalone version
+- custom defines cleaned up
+
+2005-09-21..22
+MDB Driver
+- all strings are now properly decoded (object names and data):
+ MDB(UCS2)->MDBTOOLS(UTF8, using libiconv)->KEXI_MDB(QString)
+- non latin1 filenames handling fixed
+- fixed date, date/time types handling (including Y2k problem for years >=1930)
+- fixed currency handling (double type is assumed for now)
+Table View; Data Interface
+- fixed possible crashes for comboboxes within non-db-aware table views
+Table Designer
+- fixed 'subtype' combo refreshing within property editor
+KexiDB
+- DriverManager: to avoid conflicts with other copies of KexiDB,
+ eg. in ShowImg application, "kexidb_" prefix is required for KexiDB
+ driver files (KDE modules)
+- some docs and above information added for Doxygen
+
+2005-09-17..20
+KexiProject
+- createInternalStructures() added; semi-internal (not well suited for kexidb itself)
+ structures like kexi__blobs table are created now if not yet exist
+- internal kexi__blobs table introduced: for BLOB storage
+General
+- some i18n strings fixed
+- KEXI_NO_AUTOFIELD_WIDGET, KEXI_NO_IMAGEBOX_WIDGET temp. compile time options added
+
+2005-09-16
+Forms
+- FormIO: some fixes in method's naming
+KexiDB
+- tristate type is used in some more methods, so it's now possible
+ to catch "no data" cases, not only "server errors"
+- InternalTableSchema class added (to avoid polluting TableSchema/Conenction APIs)
+
+2005-09-15
+Kexi supports static and data-aware images boxes
+- properties implemented: scaling (aspect ration can be kept),
+ horizontal/vertical alignment
+Project Migration
+- cleaned up the code a bit
+- 'back' button works well on "dest. type" page when file-based driver is used
+- user is warned when no source filename was specified
+Forms
+- view mode (design/preview) is now also passed as option
+ to WidgetFactory::createWidget() so widget's look&feel can differ depending
+ on the view mode
+
+2005-09-14
+Property Editor
+- PixmapEditor improved displaying, and value changes support
+- Editor's widgets have proper geometry set a bit earlier
+
+2005-09-06 (aKademy)
+2005-09-08..13
+Forms
+- data-aware image box widget
+(partial implementation started during flight back from Girona to Warsaw)
+-- "insertFromFile", "saveAs", "cut", "copy", "paste", "delete", "properties"
+ popup actions added
+- "readOnly" property added for image, spinboxes and dbfield widgets
+
+2005-09-03 (aKademy)
+Relations view
+- fixed redrawing (in an unoptimized way)
+Property Editor
+- updating combobox items after change of list data
+TableView
+- combo box popup behaves more like a normal combo (highlighting, selecting)
+- added "what's this" support for table columns
+
+2005-08-27
+Forms
+- a fix for 'value changed' flag and datachangeslistener in autofields
+
+2005-08-19
+Startup
+- "-type connection" command line arg added
+ (i.e. support for applications/x-kexi-connectiondata mime type)
+Main Window
+- project navigator visibility flag is now stored in config file (usable for IDEAl)
+
+2005-08-16..18
+Main Window
+- Toplevel (buggy) and Tabbed (redundant) KMDI modes hidden in Window menu;
+ Changing MDI mode now requires application restart (the lesser of two evils)
+- 'Create' menu renamed to more typical 'Insert'; 'Data' menuu moved after 'Format'
+- project navigator: usability fixes
+Widgets
+- KexiSmallToolButton helper class added
+- fixes for KexiFlowLayout
+Forms
+- "other widgets" toolbar popup added for clarity
+
+2005-08-12
+Form Designer
+- possible crashes fixed
+
+2005-08-10, 11
+Form Designer
+- added possibility of inserting autofields using 'Insert fields' button
+ from Data Source tab
+- CommandGroup usability improved: it's now possible to addCommand()
+ with flag telling that it will not be executed on CommandGroup::execute()
+- above CommandGroup's feature is used to make a single command
+ out of 'inserting multiple autoFields' task
+- top-level form surface is resized when inserted autoField(s) couldn't fit
+- inserting autofields is atomic command supporting undo/redo
+General
+- applications/x-kexi-connectiondata MIME type defined
+
+2005-08-09
+Form Designer
+- data source tab: usability improved for field list
+Widgets
+- KexiFieldListView is now displaying unique fields list for queries
+KexiDB
+- 'bool unique' arg supported for QuerySchema::fieldsExpanded()
+ and TableOrQuerySchema::columns()
+Query Designer
+- fixes for recent API change of KexiFieldListView
+
+2005-08-08
+Main
+- better readibility: new project type selector uses listview, not icon view
+
+2005-08-05
+Property Editor
+- '-flat' arg added for test app
+- painting improved for both flat and groupped mode
+
+2005-07-29..2005-08-02
+Form Designer
+- field editor's types list reuses KexiDB::fieldName() for i18n
+- autocaption is set properly for field editor on design time
+- field editor's labelCaption is no longer needed
+- propeditor: preserve "changed" flags (marked with BOLD) between property set switching
+- KAcceleratorManager::setNoAccel(QWidget*) is used for widgets in design mode
+ to avoid adding accelerators (for FormIO and for new widgets inserting)
+- factories: isPropertyVisibleInternal() is now called for superclass when needed
+ (thus, properties like "iconText" are properly hidden)
+- when a widget is deleted or cut, its parent container become selected
+KoProperty library
+- fix for spin box editor's width
+- better display for composed editors for types like Rect
+- fixed undo button's size in Editor
+- font editor fixed
+- Editor: expand/collapse boxes painted using styles; whitespace added on the left hand
+- Editor: editor widget's focusing fixed
+Table Designer
+- a fix for 'subType' combo
+Main Window
+- Navigator: when items renaming, treat "*" ("changed" flag) as a special character,
+ not a part of the item's name
+
+2005-07-28
+Form Designer
+- field editor's default focus policy is now inherited from internal editor
+
+2005-07-25..27
+Form Designer
+- better support for Auto Fields, including drag&drop
+- DesignTimeDynamicChildWidgetHandler added - interface for adding
+ dynamically created (at design time) widget to event eater
+- editor inside KexiDBFieldEdit is visible at design time
+- KexiDataItemInterface::field() changed to columnInfo()
+ -> more information can be now reused for visual field (i.e. query alias)
+- dbwidgets moved to libformutils as we're reusing many
+ of them outside of dbwidgets factory
+- version information is loaded/saved within form's UI string
+
+2005-07-23
+Core
+- management related to Part's ID improved; fixed related bug
+
+2005-07-22
+KexiDB
+- support for PostgreSQL on win32
+- PostgreSQL driver's transactions handling improved
+
+2005-07-21
+Form Designer
+- checkbox inline editing enabled
+- width of inserted widgets' size hint increased a bit to for better usability
+
+2005-07-13..20
+General
+- @internal added for private classes to make api docs more readable
+Startup / Server Support
+- connection data editor improved
+- connection data is now storable
+- added support for adding/deleting/editing connection data
+KexiDB
+- BIC CHANGE (witin v1.7): bool ConnectionData::savePassword flag added
+- KexiDB::connectionTestDialog() added for performing test connections
+
+TODO:::::::
+-fix shared actions availability for ideal mode! (reported by ccpasteur)
+-fix "edit tab order" action: not working when prj browser is focused...
+
+TODO: koproperty: us ListData-like struct instead of QMap, because data combo boxes should be sorted
+
+2005-07-10
+KexiDB
+- BIC CHANGE TO v1.7: (portability fix) pkeyfieldsorder and fieldsorder mapping
+ now use int instead of uint
+
+2005-07-08
+KoProperty
+- 'list data' introduced to clearly define 'keys' and 'strings' for combobox-like editors
+- cursor editor fixed
+- other minor fixes
+
+2005-07-05..07
+Form Designer
+- Data source fields can be dragged from Data Source Pane
+ and dropped on the form's surface to create data-aware line edit widgets
+- on new form empty creation, undo/redo history is cleared
+ and undo/redo actions are not available
+- on design time, 'dataSource' properties for forms and dataaware widgets
+ are synced with data source combo boxes
+
+2005-07-04
+Property Editor
+- properties now have 'sortingKey', so the order of properies is maintained
+- fixed bug in Set::clear()
+Form Designer's Property Editor
+- better handling multiple widget selection
+- fixes for widget info label
+
+2005-07-02
+Form Designer
+- fixed i18n for property captions
+- fixed filling enum values
+
+2005-06-20..30
+- * KexiProperty library made more generic as KoProperty *
+- Kexi now uses KoProperty
+
+Form Designer
+- Data source tab in the Property Pane implemented
+- 'dataSourceMimeType' property added for data-aware widgets, so it can be explicity
+ defined whether an object pointed by 'dataSource' property is a table of query.
+ This change is backward compatible.
+- fixed switching property buffers when switching between child windows
+- record navigator is now hidden if there's no data source assigned for a form
+Query Designer
+- object combo box now also contain queries (supporting queries is not implemented yet though)
+ the list within the combo is property sorted and grouped; it's reused in 'Data source' tab
+ of Prop. Pane; the combo now reacts on deleting/creating/renaming of table or query
+KexiDB
+- TableOrQuerySchema helper class added
+Main Window
+- crash fixed in 'detach window' action
+Core
+- Field draging: API improved, now both query and table fields/columns can be dragged;
+ added support for multiple fields dragging
+- added 'higlight object' action for KexiProject (available from property pane)
+- improved API for reaction on object creation/deletion/renaming
+General
+- small icons cleaned up; added better query/form/report/script icons
+- 'X-Kexi-GroupIcon' property no longer used; such icons are too hard to design and recognize
+- KexiFieldListView and KexiFieldComboBox added
+- "kfd:customHeader" element added for inserting custom information like kexiformdesigner's version
+- Number of currently selected tab of the Property Pane is preserved when switching back
+ to dialog for a particular part (in design mode). So if a user have looked at "data source" tab,
+ it's no longer necessary to click this tab again.
+
+2005-06-10..16
+General
+- more utility functions and clases moved to kexiutils library
+Form Designer
+- data aware 'text editor' widget added
+- inline editor pointer is now being kept only within parent factory
+- we're not creating additional (blue) resize handle set, but just changes color
+ of existing set thus resizing works well even if we're during inline editing
+- inconsistences with storing pointers to currently edited widget removed
+ (m_widget, m_editor members are now private)
+- we're copying common properties from an editing widget to an inline editor
+ (e.g. "margin")
+- fixed resetting cursor after editing
+- on creating a new spring, splitter and line widget, orientation is set according
+ its to aspect ratio; if the ratio is undefined, popup menu with vertical/horizontal/cancel
+ options is displayed
+- fixed crash when pressing Tab key on form surface in design mode
+- added 2 custom tabs to property pane: Data Source (mockup for now), Widgets
+Property Pane
+- widget class is displayed above property editor
+- blinking reduced on property buffer switching
+
+2005-06-08
+KexiDB
+- fixed crash for SQLite2 driver
+CSV Import Dialog
+- deadlock removed when importing CSV text like ","
+Form Designer
+- (all branches) temp. fix: QTabWidget used instead of KTabWidget ('&' bug)
+
+2005-06-01
+General
+- (all branches) missing icons added
+KexiDB
+- (all branches) field names converted to lowercase in memory to avoid problems with comparisons
+
+2005-05-31
+Core
+- editor within property panel is accepted before buffer switching
+Form Designer
+- record is properly fetched on subsequent switching to Data View mode,
+ especially after data source changes
+
+2005-05-25
+2005-05-27
+Form Designer
+- fixed crash when there're missing widgets
+Query Designer
+- bug for relationships creation fixed
+
+2005-05-23
+CSV Import Dialog
+- "Start at line" parameter in now better updated
+
+2005-05-13, 14
+Form Designer
+- "vAlign" property is now invisible for lineedit widgets (it's noop there)
+- "(autonumber)" label is (identical to the one in tableview) is displayed
+ in lineedit and label widgets assigned to autonumbered fields
+- shadow in label widgets is properly set for altered indenting, margins and alignment
+- double focusing of text field fixed
+- "format_font" action added; it's now possible setting font for one or multiple widget's
+ standard using font dialog
+Core
+- fixed possible crash when an object has beed saved with a different name than proposed
+TODO:
+- in "kexi" mode, "font" property is not visible e.g. for top-level form widget,
+ and other widgets that doesn't display text
+- fix data src updating in the data view when it has been changed in design view
+CSV Import Dialog
+- support for setting primary key (including autodetection)
+- support for 'first row contains column names' flag (including autodetection)
+- column types are autodetected
+- import is performed within a single transaction
+- characted encoding fixes; different encoding can be selected
+- delimiting character is autodetected
+- clipboard support re-added
+- floating-point values are properly parsed
+- empty cells are supported
+- new table name is based on provided filename
+Main Window
+- 'close all' works well if there are more than one yes/no/cancel dialogs required to show
+
+~~~~~~~~~~~~~~~~ 0.9 ~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~ 0.8 (excluding updated i18n; with KOffice 1.4) ~~~~~~~~~~~~~~~~
+
+2005-05-10
+Project Migration
+- MS Access filename filter added for convenience (it's autoselected when needed)
+- SQLite3 type is selected as default for destination engine type (for convenience)
+
+2005-05-09
+Forms
+- fixed crash because main window didn't notice property buffer change
+ form's property buffer is shared (ObjPropertyBuffer instance)
+- setting and clearing 'formName' property value for subform fixed
+- fixed problems with data in subforms: data provider only sets data
+ for own items, not inside subforms (data-awarness is disabled in subforms for now)
+
+2005-05-06
+Core, Property Editor, Form Designer
+- powerfull "property options" added to kexi properties:
+ can change behaviour of property editor's items
+- properties: for integer types it's now possible to set "min", "max", and "minValueText"
+ options; "minValueText", if available, is properly displayed:
+ e.g. see:"indent" property of Kexi's label widget
+Form Designer
+- shadow doesn't blink; properly refreshed on 'indent' property change
+KexiDB
+- inserting rows with autoinc values > than 0x7fffffff supported
+
+2005-05-05
+Form Designer
+- basic data type validating added to lineedit widget
+- spring drawing improved
+
+TODO: fix KIntValidator::validate()?
+
+2005-05-04
+Form Designer
+- row deleting and inserting implemented
+- when started new row editing, 'next' btn is enabled (code shared with table view)
+- "+ button" code shared with table view
+
+2005-05-02
+KexiDB
+- we're handling application/x-sqlite2 and application/x-sqlite3
+(those mime types are defined within kexi but we'll also add them for another KDE
+release)
+
+2005-04-30
+KexiDB
+- magic data is now defined for application/x-sqliteX, not for
+ application/x-kexiproject-sqliteX (X == 2 or 3)
+- file-based drivers can now define a list of supported mimetypes, not just
+ one mime type (added all known mimetypes thee, including Knoda's mimes, for
+ compatibility)
+
+2005-04-29
+Form Designer
+- fixed many crashes appearing when a widget name was changed
+- setting duplicated or invalid widget name is now impossible
+
+2005-04-28
+Form Designer
+- all known property and enum names are translated; names are simplified
+- more properties turned to advanced set and thus made invisible in Kexi
+- kexiproperty object is created only once for on propbuffer creation
+ for every QWidget's property. This fixes problems like
+ 'toggleButton' property being added twice to propeditor
+- looking for i18n'd property description or enum value description:
+ on failure, we're also asking parent widget factory for this, if one exists
+
+~~~~~~~~~~~~~~~~ 0.8 beta 1 (with KOffice 1.4) ~~~~~~~~~~~~~~~~
+
+2005-04-27
+Form Designer
+- KexiGradientWidget ifdef'd out for 0.1 release
+ (using KEXI_USE_GRADIENT_WIDGET macro) due to problems with performance
+ and child widget's palettes
+- added possibility of forcing particular class to be hidden
+ (eg. because it's not ready to use yet or makes no sense in current context)
+- fixed creating KexiProperties for enum values
+- property buffer: sometimes enums are remembered as casted to ints,
+ sometimes as string representations...
+- a few properties are now hidded due to inmaturity or senseless
+
+2005-04-25
+Main Window
+- fixed possible crash of the property editor on detached window closing
+KexiDB/SQL Parser
+- SQL Parser now accepts unicode characters for identifiers and strings
+Project Migration
+- drop existing database before if user configmed overwriting
+- close connection on failures
+- fixes for mdb driver
+
+
+2005-04-22..23
+Table View
+- Ctrl+Delete (delete row) shortcut also works inside cell's lineedit editor
+ (default shortcut is overriden)
+Table Designer
+- on switching to design mode, row buffers are initialized after old buffers
+ are cleared, not before (this fixes bug with disappearing property buffer)
+Form Designer
+- fix for setting background (gradient widget cleared background color value)
+
+2005-04-21
+Main Window
+- 'edit > select all' global shared action added
+Core
+- Active window can be found even if it's detached (as in KMDI).
+ This fixes shared actions availability for detached windows.
+Form Designer, Report Designer
+- KexiFormManager reused for reporting
+- we can now assign any kexi action to a button, not only shared one..
+
+2005-04-20
+Form Designer
+- we're not plugging to data-related actions for design view mode
+
+2005-04-19
+Project Wizard
+- 'finish' button disabled on 'select project type' page
+Form Designer
+- 'delete' key removes selected widget(s); except for top level form widget
+- 'menu' key works
+- avoid redundancy in action-creation code
+- better context menu
+- actions can interoperate with shared actions
+TableView
+- 'menu' key code taken from global settings
+Main Window
+- on startup propeditor is hidden if no project is opened
+Startup
+- Connection Selector: added information how to create connections
+
+2005-04-18
+Core
+- KexiProperty::setValue(): QCString type is now compatible with QString type
+Form Designer
+- assigning predefined Kexi actions to buttons
+- WidgetLibrary::setAdvancedPropertiesVisible() added, so advanced properties
+ can be hidden in Kexi.
+- WidgetLibrary::isPropertyVisible() improved
+- 'edit pixmap collection' and 'edit connections'
+ disabled for current version of Kexi Forms
+- using QString changed to QCString in maaany places
+
+2005-04-15..16
+Main
+- Navigator: double clicking on item which has no data view mode available,
+ opens it in design mode; Unavailable actions for given object types
+ are hidden in popup menu.
+- main window: navigator's layout management fixes, again...
+Form Designer
+- initial version of 'assigning actions to push buttons'
+- resizing main form widget is undoable and considered in setting dirty flag
+- initial size of form surface fixed
+- various fixes for form surface resizing and "Outer Area" text
+Core
+- Dialogs: new objects are not dirty by default but this is changed for forms
+
+2005-04-13
+Form Designer
+- On loading, top level form widgets with negative X or Y are moved to 0
+ to avoid weird behaviour.
+
+2005-04-12
+KexiDB
+- Scale property added for floating-point field types.
+ Now types like NUMERIC(precision,scale) are possible to declare.
+Core
+- String "Design of object \"%1\" has been modified." made well translatable
+ at plugins level.
+
+2005-04-11
+Form Designer
+- it's now possible to inherit features of a widget class from a different factory
+
+2005-04-07
+Query Designer
+- properies for rows were not cleared on switching back to design view
+ when statement changed
+
+
+2005-04-01..04
+* Many improvements added for Kexi Forms,
+ including editable query results. *
+KexiDB
+- BIC CHANGE:
+-- FieldList: field(const QString&) added
+-- QuerySchema: field(const QString&) added;
+ insertField() and fieldsExpanded() improved;
+- documentation improved
+Forms
+- setting (predefined) queries as form's dataSource works
+- editing data for _editable_ queries works (but not rows adding or removing)
+- setting "tablename.fieldname" for data-aware widget's dataSource works
+- setting "queryname.fieldname" for data-aware widget's dataSource works
+- when a table is set as form's data source, all primary key's fields
+ are always fetched (so editing works well with autonumbers)
+- autoSync set to false for dataSource properties (using KexiDataAwareWidgetInfo)
+- improved support for invalid dataSource property
+- data-aware widgets with invalid dataSource property are now removed from tab-focus cycle
+ (setInvalidState() now implies setting ClickFocus flag)
+- on form opening: first data-aware widget with TabFocus is focused (if available)
+- void KexiFormDataProvider::fillDuplicatedDataItems() works well
+ also if there are data sources like "tablename.fieldname"
+Forms Library
+- autoSync flag can be overriden independently within every widget factory
+ for every single class, using WidgetInfo::setAutoSyncForProperty()
+- when deselecting a widget with autoSync set to false property value is now set properly
+Main
+- KexiBrowser: pressing Enter key to accept item renaming won't execute "open" action
+
+
+2005-03-30
+Forms
+- setting form's background color property fixed
+KexiDB
+- BIC CHANGE: a few dtors made virtual
+- Connection: data inserting/updating/deleting:
+-- more error messages and codes added
+-- we're checking if master table's primary key is available
+- QuerySchema: pkeyFieldsOrder() improved, pkeyFieldsCount() added.
+- FieldList::indexOf() added
+
+2005-03-29
+Main Window
+- dock windows' width is managed for TabPageMode in the same way as for ChildframeMode
+- hiding property editor's dock when not needed
+Table/Form Views
+- database cursor deleted when not needed
+Forms
+- writing data changes implemented
+
+2005-03-25
+Forms
+- "cancel cell editing" and "cancel row editing" implemented
+
+2005-03-10..24
+Forms, TableViews
+- APIs for Forms and TableViews more integrated:
+-- KexiTableEdit now inherits KexiDataItemInterface
+-- KexiDataItemInterface is now used in KexiDataAwareObjectInterface,
+ not KexiTableEdit
+-- KexiFormScrollView and KexiDBForm now uses KexiDataAwareObjectInterface API
+ for dealing with r/w data
+- data-aware widgets with duplicated data source are updated concurently
+ on editing one of them
+- within forms, "column" term is now related not to column within data model,
+ but to order of data-aware widget. This "column" value is translated to
+ column number within data model when needed. This allows to duplicate data
+ widgets, hide them, change their ordering, etc. For example, tab order
+ (and visual order) of data-aware widgets is independant of column ordering
+ within data model.
+KexiDB
+- BIC CHANGE: QuerySchema::parentTable() renamed to masterTable()
+- QuerySchema::masterTable() now tries to return a table
+ if there's only one defined
+- Connection::createTable() - on error, existing table schema object
+ is not destroyed (i.e. it is still available e.g.
+ using within Connection::tableSchema(const QString& ),
+ even if the table was physically dropped.
+ This fixes crash for "alter table dialog" when recreating table failed
+ (the dialog expects that old table schema won't be destroyed).
+- Connection::resultExists() avoid appending optimizing "LIMIT 1" suffix when
+ the query statement is not "SELECT".
+- Connection::createTableStatement(): length parameter is now only used
+ for text and not long text field types.
+Alter Table Dialog
+- changing subType to LongText hides "length" property;
+ changing subType to Text shows "length" property.
+
+2005-03-04
+KexiDataAwareObjectInterface (TableView)
+- fixed setting cursor position (and iterator) when changing selected
+ row after row editing
+
+2005-03-03
+- doc/dev/compile_time_options.txt document added
+KexiDB
+- API CHANGED - version 1.5
+- KexiMessageHandler moved to KexiDB::MessageHandler, KexiDB::Title added
+ as public available, KexiDB::Object now uses MessageHandler.
+KexiProject
+- KexiProject now uses recent KexiDB additions
+Migration (Import Project Wizard)
+- fixed accepting entered target db filename
+- user is asked for confirming overwrites
+Main
+- KEXI_CUSTOM_HARDCODED_CONNDATA temp. compile-time option added,
+ see doc/dev/compile_time_options.txt
+KexiStartupFileDialog
+- Esc key is filtered-out so it's not hidden and
+ dialogs using this widget can bahave properly
+
+2005-02-27
+KexiDB
+- mysql/sqlite drivers: fixed problem with xxxxConnection::value(int)
+ when we're using raw sql statements (so expanded field list is empty)
+- MySQL Driver: a hack to enable local connections without using
+ a local socket file: if user doesn't want to use local socket file,
+ host name is automatically set (internally) to "127.0.0.1"
+ before connecting. This is especially usable when we're using SSH tunneling.
+
+2005-02-26
+Widgets
+- KexiTableRM moved to KexiRecordMarker in libguiutils
+Forms
+- "pen" icon is displayed on editing within a standard form, see:
+ www.kexi-project.org/wiki/wikiview/index.php?Forms%20embedded%20inside%20Kexi#3.5._
+- fixed Tab/BackTab ordering when there're widgets without TabFocus focus policy set
+- TabOrder dialog: "dirty" flag is always set to the curent form when the dialog is accepted
+KexiDB
+- Connection::dropTable(): be sure that we handle the correct TableSchema object
+- Connection::storeObjectSchemaData() if we already have stored a schema data
+ with the same name and type - just update it's properties as it would be existing object
+
+KexiRecordMarker
+2005-02-23..25
+Forms
+- fixed Tab/BackTab ordering within form's fields, including cycles
+ and problems after detaching/attaching windows for Child Frame Mode.
+ QApplication::sendEvent() used instead setFocus() for more realistic
+ (especially for QLineEdits) focusing effects when tabulator is pressed.
+- QLabel and KexiPixmapLabel available again in KFD
+Main
+- useful Statusbar debug info about focused widget added
+ (enable this using KEXI_STATUSBAR_DEBUG compile-time macro)
+
+2005-02-21
+Kexi Startup
+- "useLocalSocketFile" option for .kexis file implemented
+Forms
+- "autoTabStops" property added.
+ It is synced with changed made by TabStopDialog's checkbox.
+
+2005-02-11...2005-02-20
+Kexi Startup
+- Support for ".kexis" shortcut files added. You can now easily create
+ a shortcut file once, and connect to your remote database server with
+ just one click :)
+- "-type" command line option added
+ (specifies a type of a file provided as argument)
+- opened file types are additionally checked by name extension
+ (if mimetype was not detected) -- this is useful for shortcut files
+- KexiDBShortcutFile class added
+- database/connection dialog reimplemented
+- KexiDBDriverComboBox added: a combo box for selecting a database driver
+
+2005-02-17
+Forms
+- Avoid errors and handle invalid dataSource property values within forms
+- show errors as "#NAME?" in line edits and other data-aware widgets
+
+2005-02-04
+KexiDB
+- DateTime values: back to ISO 8601 datetime format:
+ http://www.w3.org/TR/NOTE-datetime
+ (ie. "1994-11-05T13:15:30" not "1994-11-05 13:15:30")
+ --backward compatible
+
+2005-02-02
+Tables/Forms
+- navigating within rows optimized by using iterators
+Forms
+- navigating readded (still read-only)
+
+
+2005-01-29..31
+Forms
+- KexiGradientWidget introduced:
+ new special effects within form surface;
+ Shadow Labels introduced
+ (by Christian Nitschkowski; segfault_ii at web.de)
+- "show ui xml code" debug function added to forms
+- 1st attempt to port Forms to updated data-awarness API
+
+2005-01-27..29
+Widgets
+- fixed several blind slot-signal connections
+Forms
+- fixed slots/signals signatures with namespaces
+- better resizing new forms contents
+
+2005-01-26
+Widgets
+- fixed focusing-out record navigator's line edit
+
+2005-01-20
+Core
+- On failed plugins loading, proper error message is associated with KexiPart::Info
+ and available later; instead of only assigning it globally to KexiPart::Manager.
+
+2005-01-17
+SQL Editor
+- focus is correctly to editor widget
+API, Utils
+- KexiDataAwareView, KexiDataAwareObjectInterface introduced
+- API and GUI Consistency highly improved:
+ KexiTableView and subclasses use the same api
+ as KexiFormView and all friends
+
+2005-01-14
+General
+- KEXI_REPORTS_SUPPORT compile-time define added
+Core
+- new Part Item added after saving to KexiProject object's structure
+ and removed from temporary list of unsaved items.
+
+2005-01-10
+Forms
+- KexiDataItemChangesListener added to allow signaling changes
+ from widgets implementing KexiDataItemInterface
+
+2005-01-08
+KexiDB
+- TableSchema: table names should be lower case to ease comparisons
+- we're using "lower(o_name)='givenobjname'" comparison in kexi__objects table
+ to avoid problems even if somebody hacked this table with upper case letters;
+ thanks to Martin Ellis for mentioning the problem
+Kexi Data-aware Widgets
+- KexiRecordNavigatorHandler interface introduced -handles requests
+ generated by KexiRecordNavigator
+Forms
+- Database-aware forms finally introduced
+Core
+- KexiDataItemInterface: An interface for declaring
+ widgets to be data-aware
+
+2005-01-06
+MainWindow
+- maximized child window (dialog) state is preserved
+ (a fix after recent KMDI behaviour changed)
+
+2005-01-04
+PropertyEditor
+- prevent scrolling to previously selected item on mouse click
+
+2004-12-22
+Reports
+- data view mode: record navigator is now "page navigator"
+ (it has also [+] button hidden)
+
+2004-12-21
+Core
+- KexiProperty - added 'fixed' flag for 'list' types
+ (the flag is used in Property Editor in most cases)
+- KexiPart::ObjectTypes introduced
+- KexiProperty:
+ property is unchanged if we're moving from null value to a null pixmap, etc.
+Form Designer
+- some fixes for efficiency
+- WidgetFactory can now define custom i18n'd:
+ -property descriptions
+ -property value descriptions
+
+2004-12-20
+SQLite Drivers (2 and 3)
+*DATABSE FORMAT CHANGED to 1.4*
+- date-time data type is now stored as "YYYY-MM-DD HH:MM:SS", not as
+ "YYYY-MM-DDTHH:MM:SS". This is compatible with SQLite format
+ http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions
+ The change is backward compatible.
+ (thanks for reporting: Richard Groult)
+KexiDB
+- Connection: queryStringList() convenience function added
+- information about "possible problems" is displayed in details sections
+ of error message on failed loading db driver
+Migration
+- wizard fixed a bit
+- kexi__* tables are not copied on high-level
+- MySQL Migration driver, contributed by Martin Ellis <m.a.ellis@ncl.ac.uk>
+KexiDB Drivers
+- MySQL driver better splitted to internal and public part,
+ so migration driver can easier use it
+
+
+2004-12-18
+Forms
+- WidgetLibrary: check for duplicated factories added
+- factory groups introduced
+- factories loading splitted for lookup/loading stages
+- added 'override' flag for alternate widget class names
+- minor optimizations
+Form Plugin
+- fixed showing form's property right after form's window loading
+- record navigator added in data view
+
+2004-12-17
+KPropertyEditor
+- fixed editor positioning
+- bool editor height fixed
+- test: more property types
+
+2004-12-14
+Form Plugin
+- handling form's boundaries improved
+- after switching to/from form in data view mode, its contents position is preserved
+- fixed form's size setting in data view mode
+- two form's resize modes introduced, see
+ http://www.kexi-project.org/wiki/wikiview/index.php?Forms#Form_Resize_Modes_for_form_windows_inside_Kexi
+- in data view mode, scrollview is properly resized to avoid showing
+ outer area and without scrollbars flickering
+General
+- version info moved to kexi_version.h; kexi_global.h is auto-included
+
+2004-12-13
+Widgets
+- libkexiguiutils added (KexiDB-independent widgets)
+- KexiRecordNavigator widget added (the old one was unused)
+Core
+- Part::openInstance(): dlg->registerDialog() moved after successful dialog opening
+ to avoid focusing non-exisitng dialog and/or flickering
+ in a case of obj. loading errors
+
+2004-12-02
+KexiDB
+- version field added to kexidb driver's service files
+
+2004-11-29
+Plugins
+- Migration plugin added (this removed main<->migration circular dependency)
+Kexi Internal Parts
+- API improved
+
+~~~~ 2004 LT ~~~~
+
+2004-11-24
+Main
+- unix: fixed problem with SIGPIPE on running another Kexi process
+ (stdin/err/out is closed now)
+
+2004-11-22
+I18N
+- pl translation updated
+Main
+- disabling forms support fixed
+KexiDB
+- fixed setting relationships within query
+Query Designer
+- criteria handling fixed
+- information syncing fixed a bit more
+
+2004-11-20
+KexiDB
+- TableSchemaChangeListenerInterface added to signal changes
+ in tableschema set
+Query Designer
+- registers usage of table schema
+- fixes in GUI editor
+- more checks for schema changes
+Main
+- on table schema altering or removing, user if now asked
+ for closing windows using this table
+win32 File Dialog
+- make 'My Documents' folder as default
+Query Designer, SQL Parser
+- fixed invalid parsing string constants
+
+2004-11-19
+Query Designer
+- clearing "PK" flag is not needed in few cases
+- it's now possible to enter "alias_name: simple_expression"
+ in the column #1
+Table View
+- fixed repainting visible rows below a deleted row
+ (required if no confirmation box is displayed)
+- record navigator's rec # indicator field:
+-- fixed value validation on number entering
+-- fixed focus out
+- added support for editable comboboxes
+Main
+- always ask for removing objects
+Property Editor
+- do not steal Key_Home and Key_End key presses from editor item
+- Key_Tab and Key_BackTab work like down/up keys
+
+2004-11-17
+Startup dialogs
+- win32: fixed problem with changing directory for a new db file
+Kexi Utils
+- string2Identifier() : non-latin1 characters converted to latin1
+ eg. 'oacute' to 'o'
+
+2004-11-16
+Relations Widget
+- fixed updating tables combo box on table adding
+- on new table creation, combo box is updated with a new item
+Main Window
+- fixed setting non-latin1 characters (e.g. db name) for the title
+
+2004-11-15
+Main Window
+- close_project action's shortcut removed
+ (to avoid conflict with KMDI's 'close current child window')
+- CTRL+F4 key closes child window on win32
+Table View
+- KexiComboBoxPopup: selection is changed on mouse release event,
+ not on press, to avoid weird effect when selection is dragged
+- dropdown button placement fixed after clicking for KexiComboBoxTableEdit
+- fixed race condition in GUI on fast row inserting
+ (due to QApplication::precessEvents())
+- fixed vheader offset on row inserting
+Query Designer
+- user is warned about empty 'column' item while 'table' item is not empty
+- simple criterias are loaded to GUI
+KexiDB
+- expression classes optimized for space and speed (NArgExpr is not used)
+
+2004-11-13
+Property Editor
+- fixed moving selection (esp. using Home key)
+Query Designer
+- never ending story: fixed actions availability os switching back to design more
+- setting column aliases available using GUI
+- "caption" property hidden for KEXI_NO_UNFINISHED
+- wait cursor enabled for query executing
+Kexi Browser
+- CTRL+Enter shortcut handling fixed
+Main Window
+- property editor is shown before opening dialog (not after)
+ to allow initialize proper size inside the dialog.
+ E.g. this fixes column widths in query designer's view.
+Table View
+- sorting settings are cleared on setData()
+
+2004-11-12
+Kexi
+- 2 icons fixed
+KexiDB
+- Support for Generic SQL Keywords Escaping
+ contributed by Martin Ellis <m.a.ellis@ncl.ac.uk>
+
+2004-11-11, 12
+Property Editor
+- 'undo changes' button improved (icon, tooltip)
+- Esc key now properly undoes changes using KexiProperty::resetValue()
+- setWidget() usage fixed for spin box editors, and similar: this fixes problems with
+ key press event filtering for these editors
+- Home and End keys now moves to first/last row, also for nested properties
+- moving selection using keyboard now ensures an item is visible
+Properties
+- KexiProperty::resetValue() does nothing if property is unchanged
+
+2004-11-10
+Property Editor
+- on focus
+--previously focused editor is activated;
+--first visible item is activated if no item was active
+- fixed buffer switching (focus is not set)
+- focusing for combo box (list) editor fixed
+- focus is set again if was set before
+Table View Prop. Buffer
+- fixed memory leak and possible crash
+Table Designer
+- switching from design view to data view: it's now posible to discard changes
+- typo in prop name fixed
+Main
+- Key_F6/F7/F8 added for data/design/text modes
+
+2004-11-09
+Main
+- fix conflict of CTRL+Tab with tabbed/ideal mode on win32
+Query Designer
+- 'check query' action is now avaialble under Key_F9 (was CTRL+Key_Enter)
+ to avoid conflict with editor
+
+2004-11-08
+Main
+- a fix for saving main windows settings (now mdimode is saved to proper
+ section)
+- window_next, window_previous actions added
+KexiDB
+- DriverBehaviour::AUTO_INCREMENT_TYPE added
+
+2004-11-05
+Main
+- fixes for actions
+
+2004-11-04
+Migration
+- fixed compilation (problems due to curcular libs dependencies)
+KexiDB
+- alterTableName()
+--works better with already started transactions
+--finally works even for SQLite!
+- lowlevel Connection: drv_containsTable(), drv_getTablesList() added;
+ impelemnted for all 3 drivers
+- Connection::dropTable(): No error is raised if the table does not exist physically
+ -its schema is removed even in this case.
+Core
+- Kexi::setWaitCursor(), Kexi::removeWaitCursor() do nothing for non-GUI-aware apps.
+- KexiGUIMessageHandler now calls Kexi::removeWaitCursor()
+- If an object could not be opened in design/data view,
+ user is asked to let it to be opened in text mode (if available)
+- KexiDialogBase: temp data handling improved
+Main
+- "Open in Text View" added to the Browser
+Query Designer
+- SQL Editor is now able to open also invalid SQL statements,
+ so user can now open (and probably fix) statements.
+
+2004-11-03
+KexiSQLite 2, 3
+- crashes fixed for architectures where sizeof(char*) != 4
+Core
+- Property, PropertyBuffer: some methods made explicity inline
+- warnings added when trying to set a value to a null property
+ or when property not found. Setting value to null property disabled)
+TableView
+- in KexiTableView::acceptEditor():
+ there might be called cancelEditor() in updateRowEditBuffer() handler,
+ if this is true, d->pEditor is NULL. So we're checking
+ d->pEditor and calling startEditCurrentCell() only if it's present
+- Empty row is appended on row deletion when 'spreadsheet mode' is on.
+- fixed setting row numbers in record navigator for empty data sets
+- fixed editing large FP numbers (removed scientific mode)
+SQL Parser
+- added Date/DateTime/Time types support to ConstExpr
+ (parser does not operate on these constants yet)
+Query Designer
+- added support for Date/DateTime/Time criterias
+Table Designer
+- some properties are hidden for KEXI_NO_UNFINISHED
+Main
+- BUG: 89381 proposed fix, please test
+- Browser: added override for Key_Delete (items removing)
+KexiDB
+- DriverBehaviour: QString AUTO_INCREMENT_PK_FIELD_OPTION and
+ bool AUTO_INCREMENT_REQUIRES_PK added. This fixes problem with
+ pgsql sequences.
+- Connection:
+--fixed generationg 'create table' statements.
+--added drv_dropTable(), drv_alterTableName().
+
+2004-11-02
+Main
+- fixes for kexi__parts
+Query Designer
+- fixed adding fields by entering column names by hand
+- entering (simple) criteria now is working
+KexiDB
+- DriverBehaviour: SELECT_1_SUBQUERY_SUPPORTED added,
+ used in Connection::resultExists()
+Forms
+- on failed saving new form's data, all saving is rolled back
+- fixed saving form data for mysql (and probably pgsql)
+
+2004-10-29
+Query Designer
+- fixed focusing
+Table View
+- fixes for combo box
+
+===================== Kexi 0.1 Beta 5 "Halloween" =====================
+
+2004-10-27
+Kexi
+- a little speedup: QValueList::Iterator changed to QValueList::ConstIterator
+TableView
+- never-ending-story: fixed repaint of "insert row" for empty tables;
+ fixed setting contents size based on tableSize() on table view creation
+ (delayed slotUpdate() is used)
+- setBottomMarginInternal() added e.g. for popups
+- Appearance class introduced: defines table view's detailed appearance settings
+- "row highlighting" option added, comboboxpopup uses it
+- fixed doubled empty row inserting (edit_insert_empty_row action)
+- ensureCellVisible() fixed when record navigator is hidden
+- many improvements in combo box editor and popup
+Query Designer
+- "*" are better handled on schema building
+
+2004-10-25..26
+- defines moved from Makefile.global
+- minor compile fixes and some warnings removed
+I18N
+- pl translation updated
+Forms
+- fixed crash in connection editor
+TableView
+- datatimeedit hack disabled for !win32
+- "edit_clear_table" action added
+- KexiTableViewDataBase made protected in KexiTableViewData for safety
+- on row inserting, enable "next" button
+- record navigator
+-- now takes full width, painting fixed
+-- update width when number of digits in rows counter changes
+Main
+- preferences and configureToolbars actions ifdefed using KEXI_SHOW_UNIMPLEMENTED
+Plugins
+- Default implementation of Part::remove() added again.
+ This is enough eg. for Form plugin.
+- table and query plugin: Connection::eemoveObject() is called even
+ if object's could not be loaded, what allows to remove invalid objects.
+
+2004-10-22
+TableView
+- KexiDateTimeTableEdit, KexiTimeTableEdit implemented
+Table Designer
+- BLOB types ifdefed using KEXI_SHOW_UNIMPLEMENTED
+KexiDB
+- DriverManager does not list derver-based projects
+ when KEXI_SERVER_SUPPORT is undefined
+Startup
+- added error message when explicity provided db driver name not found
+
+2004-10-21
+Core
+- shared action's "enabler" introduced
+Startup
+- KexiStartupFileDialog: filename handling fixed for win32; fixed focusing
+- avoid asking for conversion when '--dbdriver sqlite2'
+ or '--createdb' CL option is present
+TableView
+- highlighting for int and float types fixed
+- fixed initializing for date picker
+- added 'datetime' and 'time' types support
+- adding empty rows when possible also for db-aware table views
+ (ie. RowEditoBuffer can be empty on insert)
+- it's now allowed to click "+" button in record navigator to insert rows
+ (current editing is accepted)
+- on failed row insert/update, user is informed
+ about "data_cancel_row_changes" action availability
+- on invalid value entered in a cell (after a msg box is closed),
+ the cell's editor is focused again
+Compile-time switches
+- KEXI_STARTUP_SHOW_TEMPLATES, KEXI_STARTUP_SHOW_RECENT,
+ KEXI_SERVER_SUPPORT, KEXI_FORMS_SUPPORT added (currently all enabled by default)
+Main
+- copy/paste/cut on navigator items enabled only for KEXI_SHOW_UNIMPLEMENTED
+- toolbars redesigned: now "design" toolbar is for kexipart's design view
+ and "data" is for data view. This avoids toolbars duplication.
+- 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
+- "data_cancel_row_changes" action added
+KexiDB
+- FORMAT CHANGED: SQLite Driver: 'date', 'datetime' and 'time'
+ types support fixed: Qt::ISODate format is used
+- FieldList: simple methods made inline; fixed bug in hasField()
+- findRef() instead of find() used in few places for speedup
+- a hack needed because QVariant(QTime) has broken isNull():
+ Internally: null time value is now null QDateTime(), not-null time value
+ is now QDateTime(QDate(0,1,2),time); This allows to store 00:00:00 times.
+ See also stringToHackedQTime(const QString& s).
+Table Designer
+- "tablepart_toggle_pkey" action temporary removed from toolbar
+ (will be re-added after shared toggle actions fix);
+- "tablepart_toggle_pkey" action added to popup menu and to Edit menu
+
+
+2004-10-20
+Main
+- "file_open" and "file_new" actions now start a new process
+ for creating/opening database, if needed.
+- KEXI_SHOW_UNIMPLEMENTED macro added
+KexiDB Parser
+- fixed handling large integer constants
+Table Designer
+- primary-key-fields: BigInteger type is enforced; subtypes are hidden
+Kexi Properties
+- KexiPropertyEditor::setBuffer() can be now safely called even from
+ KexiPropertyBuffer::propertyChanged() signal handlers (refreshing is delayed).
+Core
+- KexiViewBase::propertyBufferReloaded(): bool preservePrevSelection added
+
+2004-10-19
+Main
+- "delete_row" action shortcut is now CTRL+Delete, to avoid conflict with edit_cut (Shift Delete)
+- fixes for KexiBrowser
+TableView
+- KexiComboBoxTableEdit improved
+- KexiTableViewColumn: try harder to get a column name
+Startup
+- --password option removed
+- --create-opendb CL option added
+
+2004-10-18
+KexiDB Parser, KexiDB
+- Field::Type type() introduced for expression classes
+- type(): integer subtypes (Integer, BigInteger, ..)
+ are detected for int constants; the same for strings
+- Field::type(): If there's expression assigned,
+ type of the expression is returned instead.
+- Field::Type::Null added
+Query View
+- Expressions are now displayed, with header names
+Core
+- KexiDialogBase::activate() -another focus-related fix
+
+2004-10-16
+Core
+- KexiSharedActionConnector introduced
+SQL Editor
+- double clicking on a history item selects it for editing
+
+2004-10-15
+- small speedup for Kexi global objects on startup
+- fixes for KexiStartupFileDialog
+- tests/newapi is compield by default. Other tests disabled.
+Core, Plugins
+- SPEEDUP OF STARTUP:
+ Part::initActions() splitted to Part::initPartActions() (default one)
+ and Part::initInstanceActions() (lazy one)
+Kexi
+- name argument is now passed to KGenericFactory to avoid runtime warnings
+KexiDB Parser, KexiDB
+- Expression:
+-- former type renamed to token
+-- 'type' member added; typechecks added to validate()
+- more SQL statements are supported
+
+2004-10-14
+Kexi
+- more debug areas added
+- KexiStartupFileDialog wrapped for win32 again
+TODO: move some things to kdeui/win32
+KexiDB Parser, KexiDB
+- WHERE expression is supported
+- operators like "IS SIMILAR TO" and "IS NOT NULL" better supported
+- brackets better supported
+- both <> and != supported
+
+2004-10-11
+Parser:
+- ER004 supported
+
+2004-10-09
+Kexi Startup
+- ksqlite2to3 script added for unices. It's used instead of two QProcesses.
+- ksqlite2: -verbose-dump added for ksqlite2to3
+
+2004-10-06
+3rd Party
+- kexisql migrated to SQLite 3.0.7 (new kexisql3/ directory added);
+ former libkexisql is now libkexisql2 (updated to 2.8.15, by the way)
+KexiDB Drivers
+- "SQLite3" driver introduced. "SQLite" driver is now removed;
+ use "SQLite2" driver for comaptibility.
+KexiDB
+- static QString Driver::defaultFileBasedDriverMimeType()
+ and static QString Driver::defaultFileBasedDriverName() added,
+ so let's don't compare driver names against "sqlite" string when looking for default.
+Startup
+- sqlite version is now autodetected on startup
+- sqlite2 to sqlite3 format autoconversion added (with progress dialog)
+
+2004-10-04
+- command line options added: --user (-u), --port,
+ --host (-h), --password, --local-socket
+- password can be now entered using dialog, if it's a server-based conn.
+
+2004-10-01..02
+Kexi Startup
+- server-based (mysql, postgresql) projects are now available from command line
+ (usable since gui is not yet ready):
+ --createdb, --dropdb, --dbdriver command line options added
+- db creation and dropping from command line works without starting entire gui
+ see http://www.kexi-project.org/wiki/wikiview/index.php?CommandLineOptions
+Core
+- KexiMessageHandler introduced: receives messages e.g. from KexiProject
+- KexiGUIMessageHandler added
+KexiDB
+- improved error handling
+MySQL Driver
+- MySqlConnectionInternal added (like for SQLite)
+General
+- KMessageBox::warning**() used instead of question**() for dangerous messages.
+- 'tristate' helper class introduced. This reduces a need for adding
+ bool& cancelled parameters.
+- tristate class used where possible instead of 'bool& cancel' params
+
+2004-09-29
+2004-09-30
+SQL Parser highly improved
+- reduce/reduce conflicts solved: operators in expressions have now 9 valid precedence levels
+- expressions are now parsed quite well: e.g. identifier checking is recursive
+- better debugging
+- ParseInfo introduced: Data used on parsing
+- invalid use of reserver keywords are now detected:
+ '"KEYWORD" is reserved keyword: identifier was expected' message is now returned
+ instead of dumb "syntax error"
+KexiDB
+- Field: expressions are better supported
+- Connection: expressions are visible in selectStatement()
+
+2004-09-28
+KexiDB
+- Field: documentation added
+Kexi
+- ConstIterators used where possible
+
+2004-09-27
+SQL Parser
+- ER102, ER103, OK104 SQL Issues resolved (see statements.txt)
+- several bugfixes
+
+2004-09-17
+KexiDB
+- Connection::selectStatement(): alias is used insetead of table name,
+ if available
+- QuerySchema: 'index' term replaced by 'position' ; insertField(), addField()
+ overloads added allowing tables binding by position; addTable() now allows
+ to specify table alias; tablePositionForAlias(), tablePositions() added;
+ many docs and examples added
+SQL Parser
+- many improvements and checks:
+ -- ERR: there's no "persons" table in this query (alias "p" covers it)
+ select persons.id from persons p;
+ -- alias "p" for table "persons" is used
+ select p.id from persons p;
+ -- multiple aliases for the same table
+ select persons.id from persons, persons p, persons p2
+
+
+2004-09-15..16
+SQL Parser
+- select statements are now parser in more functional way, instead
+ of using global pointers. This enables nested statements in the future.
+- field alias support fixed
+- table alias support added
+KexiDB
+- (API CHANGED) QuerySchema:
+--"Field" in isFieldVisible(), setFieldVisible() renamed to "Column"
+--alias() renamed to columnAlias(), and so on
+--Table aliases are now supported: tableAlias() added, and so on
+--QueryFieldInfo class renamed to QueryColumnInfo
+
+2004-09-14
+TableView
+- hack added for KDownArrowPushButton for drawing with thinkeramik style.
+- convenient ctor added for KexiTableViewData
+KexiDB
+- Driver::escapeIdentifier() : "" are only added if there is a space inside the name.
+ This keeps SQL statements more readable, especially in SQL View.
+- DriverBehaviour::QUOTATION_MARKS_FOR_IDENTIFIER added
+- Driver::drv_escapeIdentifier() added:
+ This method is used by escapeIdentifier().
+ Implement escaping for any character like " or ' as your
+ database engine requires. Do not append or prepend any quotation
+ marks characters - it is automatically done by escapeIdentifier() using
+ DriverBehaviour::QUOTATION_MARKS_FOR_IDENTIFIER.
+Parser
+- tokens like '123abc' are now reported as invalid by lexer to parser
+
+
+2004-08-25
+Core
+- KexiSharedActionHost::invalidateSharedActions(QObject *o)
+ if o is not KexiDialogBase or its child,
+ only invalidate actions if these come from mainwindow's KActionCollection
+ (thus part-actions are untouched when the focus is e.g. in the Property Editor.
+- KexiViewBase::setDirty() -do not signal 'dirty' flag's changes if no change
+- ObjectStatus now also stores related KexiDB::Obeject's, for more verbose errors
+KexiDB
+- Field::isAutoIncrementEnabled() added + some checks for 'autoincrement' flag
+- fixed saving SQL statements for possible later error messages.
+ Object class now also better handles previous server error messages and numbers.
+- KexiDB::getHTMLErrorMesage() improved, it's more verbose in certain cases
+- Driver::escapeIdentifier() added; used in Connection in every place
+ where SQL statements are generated. Thanks to Martin Ellis.
+CC_MAIL: m.a.ellis@ncl.ac.uk
+TableView
+- "yes" button for "do you want to delete row?" dlg has "Delete row" text
+ (as KDE HIG requires)
+- cell-cursor's is position not reset after initDataContents() on show()
+ if it was set before KexiTableView widget showing.
+Table Designer
+- many validations added related to primary key and autonumber properties
+- On table creation (or altering), if there is no primary key, user is asked
+ if it should be added (automatically).
+ Useful setting "dont show this again" added for this as well.
+
+
+2004-08-24
+Table View
+- redraw fixed -very special case: If you're during editing a new row, and click
+ on last (empty) row, and your newly entered row has no data in its cells,
+ (what ends up with cancelRowEdit()), cursor is now moved one line up.
+- unknown, non-printable key events are not ignored now, but passed to superclass;
+ this e.g. fixes blocking ESC key in dialogs
+- fixed setting cursor on row removing
+Kexi Properties, Property Editor
+- icon added as optional property member
+Form Designer
+- Connection editor implementation cleaned a bit (bug #44)
+Table Designer
+- "autonumber" property is now visible
+- icons added to propertybuffer
+Form Module
+- kexidbwidgets.so ported to win32
+
+2004-08-23
+Table Designer
+- fixed code because of new column has been prepended
+KexiDB
+- KexiDB::Field::Type defaultTypeForGroup(KexiDB::Field::TypeGroup typeGroup)
+ added and used in Table Designer.
+- KexiDB::idForObjectName() convenience function added
+Table View
+- fixed methods for 'visible' flag in KexiTableViewColumn
+
+2004-08-21
+Table View
+- Key_Left, Key_Right now by default behaves like Key_BackTab, Key_Tab
+- KexiTableViewData::deleteRows(): refresh is requested only
+ if at least one row has been removed. This also magically fixed
+ a bug with missing vheaders in the Query Designer :)
+Main Window
+- opening object: if object is already opened but in other view,
+ its activated and switchToViewMode() is simply called.
+ This fixes switching GUIClient for "design" action called from the Navigator.
+- Kexi::ViewMode is repaced with int type in most places
+ to ease future extensibility.
+
+2004-08-20
+KexiDB, Table View
+- Kexi now supports and shows autonumber (sequences) column, see
+ http://www.iidea.pl/~js/kexi/shots/beta5/unicode_chars_and_autonumber.png
+Table View
+- autoincremented field can be omitted (left as null or empty)
+ if we're inserting a new row
+- fixed displaying "autonumber" cell on row inserting
+- row editing is accepted on sorting
+- on failed sorting, sort indicator is reverted
+- Key_Tab, Key_BackTab work again;
+ skipping to next/previous row added
+- when the user doubleclicks on the edge (handle)
+ of horizontal header's section, column's width
+ is adjusted to widest cell size
+Table Designer
+- before switching to design view, row editing is accepted
+Main
+- PropertyEditor/FontSize setting is now stored
+
+2004-08-19
+KexiDB
+- DriverPrivate added to avoid binary incompatibilities
+- driver (QCString keys, QVariant values) properties added
+ (some prdefined properties added as well)
+Table View
+- optimizations in KexiTableViewData::saveRow()
+New API Tests
+- "dr_prop" test added
+SQLITE Driver
+- Kexi file driver now supports UTF8 storage for text fields
+Shared Actions
+- data_sort_az, data_sort_za, data_filter actions are now shared & volatile,
+ KexiTableView and KexiDataTable now use these
+
+2004-08-17..18
+Core
+- added KexiViewBase::setAvailable() overload. This one and sharedAction()
+ now call parent's method, when needed.
+- Shared actions: some fixes for plugging/unplugging
+KexiBrowser
+- "rename" action is now shared as "edit_edititem" action
+KexiTableView
+- "start edit" action (for F2/Enter key) is now shared
+ as "edit_edititem" action
+- KexiKIconTableEdit introduced: Cell editor for displaying kde icon
+ (using icon name provided as string).
+- TableViewHeader (inherits QHeader) introduced: supports tooltips
+ when needed (for column description of if column is not wide enough)
+KexiTableView ComboBox
+- QStyle primitives are better used for drawing combo button
+- button is depressed after popup hidding
+Table Designer
+- "tablepart_toggle_pkey" shared action added for design view
+- "Not empty" field's property is now called "Allow Zero Size"
+ (and has opposite meaning)
+- 1st column with "key" icon (for pkey) added (using KexiKIconTableEdit)
+KexiDB
+- QString Field::subType() added
+- QuerySchema::autoIncrementFields() fixed (caused crash sometimes)
+
+2004-08-06
+Table Designer
+- some rules added: e.g. setting 'indexed' property to false clears 'primaryKey';
+ setting 'primaryKey' to true sets 'indexed', 'unique', etc. to true
+Core
+- KexiProperty, KexiPropertyBuffer: some operators added, operator [QCString] now
+ returns KexiProperty, convenient operator = (QVariant) added; KexiProperty::null added
+TODO: KexiProperty: add support for positive integers, "Auto" values e.g. for integer ==0
+ like defined in QSpinBox. Reuse this in PropIntSpinBox.
+
+2004-08-05
+PropertyEditor
+- Bool Editor: toggle button has now without ugly focus (space key still works)
+- KexiPropertySubEditor:setWidget() focus proxy is set only if the widget has
+ non-zero focus policy.
+- [+][-] branch box is better positioned; treeStepSize is now narrower
+- font size is decreased to a reasonable minimum
+Core
+- generateIconSetWithStar() not used, static icons added insted (icon cache was confused)
+MainWindow
+- right dock width is now stored in config file
+
+2004-08-04
+MySQL Driver
+- introduced again! thanks to Martin Ellis
+CC_MAIL: m.a.ellis@ncl.ac.uk
+KexiDB
+- alterTable() added (now only drops and recreates table)
+- createTable() 'zombie' rows from 'kexi__fields' table is removed for safety
+- Connection::storeObjectSchemaData() identifier is not obtained if
+ it's already provided
+- DriverManagerInternal::aboutDelete() added: called from Driver dtor
+ (because sometimes KLibrary is destroyed before DriverManagerInternal)
+- DriverBehaviour::ROW_ID_FIELD_RETURNS_LAST_AUTOINCREMENTED_VALUE added
+ True if the value (fetched from field (or function)
+ defined by ROW_ID_FIELD_NAME member) is EXACTLY the value if autoincremented field,
+ not just an implicit (internal) row number. Default value is false.
+ --used in Connection::lastInsertedAutoIncValue()
+Table Designer
+- saving changes to tables works now (data is just dropped, though);
+ user is warned about this, when needed
+- DataTable view is updated after saving table's design
+- temporary data added; KexiAlterTable_DataView implemented
+ (this fixes lack of updating datatable view after schema changes)
+
+2004-07-28..2004-08-03
+KexiDB
+- ProjectDB FORMAT CHANGED (remains backward compatible):
+- kexi__query* tables removed (to complicated, not needed since we
+ are primarily using kexi__objectdata and xml)
+- Driver::IgnoreTransactions flag added: transactions are silently bypassed,
+ (temporary, useful for current mysql driver implementation)
+- Query Schema: QueryFieldInfo introduced:
+ "select a as one, a as two from table" is now possible
+ (two different aliases for the same field);
+ this also maintains field visibility.
+- Most needed expression classes added (BaseExpr-derived)
+- most debugs removed
+- more debugString() methods added for few classes
+- FieldList: removeField(), insertField() (at position) implemented
+ addField() now uses insertField()
+KexiDB/parser
+- 'bison -dv' used instead of yacc
+- single-char tokens are now used as chars: symbols are dropped for better
+ code readability
+- more safe and readable code: $$ is now used instead of changing global variables
+- realType added
+- loadDataBlock(), storeDataBlock(), removeDataBlock() moved to Connection class
+- Connection::querySchema() methods now use parser
+- Connection::createTable() now also allows table replacing
+- Connection::storeObjectSchemaData() now reuses schema's id if > 0
+NEWAPI Test
+- now KCmdLineOptions are used, see README
+- "parser" test added
+KexiTableView
+- KexiTableViewPropertyBuffer: a fix for maintaining `dirty' flag
+- updates for QueryFieldInfo
+- compiler warnings removed
+Core, Widget, Plugins
+- updates for QueryFieldInfo
+- compiler warnings removed
+
+2004-07-24
+Form Designer
+- added icons for ajust/align icons
+
+2004-07-23
+Core
+- KexiViewBase::removeDataBlock() and KexiDialogBase::removeDataBlock() added.
+- more error messages added
+Main
+- Startup dialog re-enabled
+KexiDB
+- Utils: most smaller functions are now inline
+- optimizations:
+ * Connection::querySingleRecord(), querySingleString():
+ " LIMIT 1" is added to the statement
+ * Connection::resultExists(): "SELECT 1 FROM (<statement>) LIMIT 1"
+ statement is executed
+ * Connection::resultCount() added: "SELECT COUNT() FROM (<statement>)"
+ statement is executed
+- Cursor::open(): sets error message when needed
+Query Designer
+- KexiQueryView: shows error on failed execution
+
+2004-07-22
+Main
+- Kexi Browser: "create new" action added to browser's mini-toolbar;
+ icons for particular "create" actions are generated in a funny way
+- "project_new" and "project_open" actions removed from the main toolbar
+
+2004-07-20..21
+Kexi Browser
+- "rename object" action added (inline editor uses IdentifierValidator)
+- popup menu for group nodes now have a title
+Core
+- KexiProject, KexiPart supports object renaming
+- KexiProject::removeObject() and KexiProject::renameObject()
+ now operate within transaction.
+- KexiProject: more error mesages added.
+KexiDB
+- Connection::drv_executeSQL() is now protected. Connection::executeSQL() public
+ method added which remembers last executed sql statement for better error handling.
+Main
+- KexiBrowser: After item's successful rename, it's resorted,
+ and if it's dialog is opened, it's caption is updated as well.
+
+2004-07-19
+Kexi
+- We've now --final-mode and --design-mode CL-options for completness.
+KexiCore, KexiMain
+- KexiStartupHandler introduced: handles startup actions, that
+ are new performed independently from Main Window's stuff.
+ We're now prepared to having 'startup mode'
+ database's property, which can be overriden by --final-* CL-options.
+Form Designer
+- A small fix to reduce widget flickering on resizing:
+ when we're dragging left, top-left or top
+ handle, both size and position of widget changes. We're now hiding
+ the widget and showing it again after transformation.
+
+2004-07-16
+Form Designer
+- some strings fixed
+
+===================== Kexi 0.1 Beta 4 "FireDuck" =====================
+
+2004-07-15
+Forms
+- form's initial sizeHint is now hardcoded to (400,300), will be fixed later
+Query Designer
+- saving existing queries work in SQL View
+Core
+- after successful storeData() or storeNewData(): 'dirty' flag is cleared
+ for _every_ dialog's view
+
+2004-07-14
+Kexi
+- polish translation updated (also for KFormDesigner)
+Core
+- "current mode" member is now reverted if afterSwitchFrom() failed
+- removed one (I hope unnecessary?) shared-action invalidation
+- storeNewData() and storeData() new have 'bool &cancel' parameter
+Query Designer
+- storing and mode switching fixed
+- KexiQueryDesignerSQLView::storeNewData():
+ we won't store query layout: it is recreated 'by hand' in GUI Query Editor
+Table Designer
+- temporary behaviour: altering data is cancelled
+- fixed switching between Data and Design view
+
+2004-07-12..13
+KexiDB
+- Connection: selectStatement(): "SELECT FROM ..." queries (ie. without columns)
+ are allowed (needed for desiger); omitting "FROM" allowed
+KexiDB/Parser
+- "SELECT FROM " rule added
+Core
+- KexiPart::Part::openInstance(): now virtual KexiDialogBase::loadSchemaData() is called
+ what allows to reimplement stored schema data loading (reimpelemnted for queries)
+- KexiDialogBase::dirty() now is true if any view is dirty
+KexiTableView
+- If ensureCellVisible() is called before table view is visible, it's (col,row) arguments are
+ stored and ensureCellVisible() is called just after show event. This fixes invalid scrolling.
+Query editor, Table Editor
+- storage/ loading/ view switching/ dirty flag updating - improved
+
+2004-07-10
+TableView
+- "edit_delete" action is disabled for read-only tables
+
+2004-07-09
+KexiDB
+- It's possible to define relationships for QuerySchema
+ (with Relationship objects)
+- Connection: optimization: QString::reserve() used
+ before generationg SQL statements
+- Connection::selectStatement() now generates joining rules
+ (i.e. relationships using WHERE)
+Query Designer
+- joins defined by GUI are now visible in SQL View
+
+2004-07-08
+Query Designer
+- switching between design modes improved
+- on generating sql from GUI: "*" added if no fields are picked
+KexiMainWindow
+- neverending-story: actions availability updating fixed
+TableView
+- KexiTableViewPropertyBuffer: all buffers are cleared when view's
+ data is cleared (using clear())
+Relation Widget
+- view clearing supported
+Core
+- KexiViewBase: 'dirty' flag is now better signaled to a dialog
+KexiDB/SQL Parser
+- lexer: USER_DEFINED_NAME now accepts also [0-9] (after 1st char)
+- optional ';' is allowed at the end of top level statement
+- dummy table is removed from query after parsing
+
+2004-07-07
+Core
+- KexiDialogBase: Never Ending Story: Shared actions are invalidated on activate()
+- ObjectStatus general purpose class introduced. KexiDialogBase now uses this
+ to indicate errors.
+- KexiPart::Part: if newly opened dialog (KexiDialogBase) cannot display 1st view, it's closed
+ (via close()) and error message is set up
+- KexiPart, KexiProject:
+ const Kexi::ObjectStatus& lastOperationStatus() added for not-kexidb errors
+KexiMainWindow
+- formpart is now available by default; menu for switching it off is hidden
+- more errors taken from KexiProject are friendly displayed :)
+Query GUI Editor
+- saved layout (etc.) is loaded in afterSwitchFrom() for mode==Kexi::NoViewMode,
+ instead of doing it in the ctor
+SQL View
+- switching to other views improved: msgbox is displayed for invalid sql texts
+- Intelligence Built In: we're doing our best to avoid regenerate the same
+query from almost unchanged sql text
+
+2004-07-02..05
+XMLGUI
+- Tools menu added
+- undo/redo global actions added
+- tolbar setup consistent with ui_standards.rc and incoming katepart
+Main Window
+- hack: `window' menu moved right before settings menu
+Widgets
+- KexiSectionHeader: adding buttons connected to actions allowed on the right hand
+- Relation View: saved table widgets' geometries are better setup on loading
+ (fix for differences between font sizes on differens computers)
+- SQL Editor: better integration with katepart's actions using new shared action's API
+Core
+- KexiDialogBase now has activate(), deactivate() handlers,
+ KexiViewBase::updateActions(bool activated) is called for a current view
+- Workaround found for integrating katepart's actions with Kexi's shared actions:
+ - katepart KXMLGUIClient's KActions are now pluggable to KexiActionProxy
+ - KXMLGUIClient's KAction::enabled(bool) signals are now automatically mapped
+ to KexiActionProxy::setAvailable(bool)
+<TODO>: introduce KexiSharedXMLGUIClient class:
+ ctor: KexiSharedXMLGUIClient(KexiSharedActionHost *host, KXMLGUIClient *client).
+ A single instance is created for particular xml file (eg. katepartui.rc) and inserted
+ int KexiMainWindow's internal dictionary. This GUI client will be attached when needed
+ (ie. when given KexiViewBase object that is activated asks for this) and detached
+ when not needed.
+ showOnlyActions(QCStringList) - declares custom action list that will only be available
+ In any time, no KActions will be created if these already are available globally
+ within KexiMainWindow.
+</TODO>
+SQL View
+- history behaviour reverted to previous
+- added "clear history" and "select this query text" buttons in KexiSectionHeader
+- added popup menu with above actions
+
+2004-07-01
+SQL View
+- kate part now better integrates its actions with kexi menus/toolbars
+TODO fix it: actions, shortcuts
+- 'Tools' menu added, 'Window' menu is now repositioned before 'settings' menu
+
+2004-06-30
+SQL View
+- fully implemented history/status mode switching
+- both modes work with "check SQL" action
+Core
+- KexiViewBase::updateActions() virt. method added for convenience
+
+2004-06-28
+KexiCore
+- KexiViewBase now knows own view mode
+SQL Parser, SQL View
+- fixed error handling (syntax error is only set when no detailed error is known)
+- on error: fixed jumping to proper character (even where are more lines and tabulators)
+- status label's height is properly increased, when needed
+- jumping to proper character impelmented also for QT_ONLY_SQL_EDITOR
+- fixed crash for parsing empty SQL string
+Main Window
+- removed redundant MDI Mode option from View menu
+Core
+- some docs added
+- KexiSharedActionHost::createSharedAction() : subclassName arg added
+
+2004-06-25
+KexiCore
+- fixed switching for other mode
+ (formpart behaviour was really weird because of that)
+
+2004-06-24
+KexiCore
+- Some doxygen docs added.
+- Fixed activeView() when we're just switched to other view in KexiDialogBase
+Widgets
+- SQL Editor: now properly emits signal about text changes.
+- SQL Editor: now has QT_ONLY_SQL_EDITOR compile-time option (both modes works on win32)
+Utils
+- Kexi::setWaitCursor(), Kexi::removeWaitCursor() -for delayed cursors added (eg. user on view opening)
+KexiMain
+- --edittext [<object_type>:]<object_name> C.L. option added:
+ like --open, but the object will\nbe opened in Text Mode
+KexiDB
+- Parser::query() public function added; select() is now internal
+SQL Editor
+- CTRL+Return shortcut; added information what to do to validate query text
+
+2004-06-23
+KexiCore
+- Fixed focusing previously selected dialog after Kexi main window's activation
+- KatePart is working on win32 as well
+
+2004-06-21
+KexiActionProxy
+- activateSharedAction(), isAvailable() now have alsoCheckInChildren arg.
+KexiDialogBase
+- actions availability is invalidated on view switching
+KexiPart::Part
+- proper integration with SharedActionHost
+- actions creating simplified with Part::createSharedAction()
+- finally: initPartActions() and initInstanceActions()
+ replaced with single call of initActions().
+ createSharedPartAction() and createSharedAction() added
+Parts
+- all parts code updated for API changes
+
+2004-06-19
+KexiTableView
+- added checks if column is >=0 (this avoid crashes)
+FormDesigner
+- TabStopDialog:
+ * was badly implemented: exec() in ctor. exec() moved from ctor to
+ TabStopDialog::exec(Form*) method
+ * fixed crash: QVBoxLayout was added twice! 1st via ctor, 2nd view QLayout::addLayout()
+ --removed 1st
+Query Designer
+- kexiquerypartinstui.rc added and some actions
+Core
+- sql parser is now allocated in KexiProject
+KexiDB
+- docs greatly improved, thx Martin!
+- UNSIGNED INT -> INT UNSIGNED
+
+2004-06-18
+Query Designer
+- SQL Editor: added KexiSectionHeader
+- KexiQueryDesignerSQLView -> KexiQueryDesignerSQL
+- KexiQueryDesignerSQLEditor: now inherits KexiViewBase
+- Double clicking on table's field in Relation View allows to auto-add this field
+- KexiQueryDocument no longer used, similar KexiQueryPart::TempData is used
+- switching to SQL View working again
+- added warning when switching to dataview with empty design
+KexiTableView
+- Editor's focus position is updated (moved down)
+ when new row is inserted above current row
+KexiDialogBase
+- returning without failure when KexiViewBase::beforeSwitchTo()
+ returned cancel==true and success==false
+
+2004-06-17
+KexiTableView
+- Combobox's button is now in "toggle" mode; popping up is now better hidden/shown
+KexiViewBase
+- storeNewData(), storeDataBlock() simplified; parts code updated for this change
+Query Designer
+- relations widget: geometries for tables and connection lines are now stored
+- 'dirty' flag better updated
+
+
+2004-06-15
+2004-06-16
+TableView, Alter Table
+- Table Cell Editor's Focus is cleared on slotRefreshRequested()
+- fixed columns recreating on data resetting for a table
+TableView
+- fixed inserting row (empty or dropped)
+- dropping indicator line is now painted with XOR mode
+- more intuitive dragging and dropping rows: dropping on bottom 1/3 row's area means
+ dropping below this row
+- dropping after the last row is now possible
+- KexiTableViewData and KexiTableViewPropertyBuffer now supports multiple
+ rows deletion with cost O(n). KexiTableView is updated properly for this action.
+Alter Table
+- afted hiding table, rows (and prop. buffers) that are connected with it are deleted
+
+2004-06-14
+Core/Parts
+- For all parts: Instance GUI Clients are now splitted for per-view
+ GUI clients (switched on view switching) and common GUI client
+ (not switched within given dialog).
+
+2004-06-10
+2004-06-12
+KFormDesigner
+- rectangle on widget inserting, resize handles and grid's dots:
+ are now painted in white XORed color on top of all other widgets
+- fixed widget raising to top on clicking: also container members
+ are raised (eg. for tab widget)
+- more guarded ptrs added; fixed crash on ObjectTree destruction
+- selection rectangle is drawn unclipped now, on top of all widgets
+
+2004-06-09
+KexiTableViewPropertyBuffer:
+- slots' connections fixed
+KFormDesigner, Kexi Forms
+- "pointer" action: better icon added (from Karbon); action moved to "widgets" toolbar/menu
+- all "widgets" actions and "pointer" action are mutually exclusive
+
+
+2004-05-15
+KexiDB:
+- fixed bug: Connection::resultExists() now properly closes temp. cursor
+
+===================== Kexi 0.1 Beta 3 "United Europe" =====================
+
+2004-05-08
+Form Designer: Extra widgets
+- fixes for kde3.1 compatibility
+- implicit deleting is cleaner than explicit
+
+2004-05-06
+Main Window
+- Messages are displayed on failed switching to othe view.
+Lucijan's stuff
+- Compile fixes, will be backported
+
+2004-05-03
+Kexi Main Window
+- Dialog dictionary is properly cleared on project close (fixed possible crash)
+- Not stored dialogs are properly removed from a dictionary
+Kexi Startup
+- fixed possible crash due to deleting not owned connection data, deep copy is now performed
+
+2004-05-01
+KexiDB
+- QuerySchema: 'visible' field's property is now assigned to possition, not to field pointer,
+ because the same field can be added more than one time to a query
+- Connection::selectStatement(): only visible fields are shown
+Query Designer
+- executing (switching to data view mode) is working again!
+
+2004-04-30
+TableView:
+- dropdown button position properly updated when scrollview's x-offset is non-0
+Kexi Forms
+- toolbar moved from 'part-wide' area to 'part-instance' area
+Reationships/Query Editor
+- master/detail sides of the realtionship are swapped when correction is needed
+KexiViewBase
+- added possibility of disable data storing on view switching; for some cases
+
+[INFOSYSTEM 2004]
+
+~~~~~~~~~~~~~~~~ beta3 pre2 ~~~~~~~~~~~~~~~~
+
+2004-04-16
+Kexi Core
+- introduced KexiDialogTempData
+TODO: make KexiQueryDocument inherit KexiDialogTempData
+- added 'Settings->Other->Enable Forms' menu switch (off by default)
+Global
+- version: beta3 pre2
+- updated readme_en
+- Kexi backported to KDE3.1 and Qt3.1.1
+KexiDB
+- setting length is only available for Text fields
+Kexi Alter Table
+- 'length' property is set to 0 on changing type from Text to any other, and set to default (200)
+ otherwise
+
+2004-04-15
+Kexi Main
+- KexiNameWidget, KexiNameDialog: caption is now not required; geometry fixed
+- Ugly bug fixed: active window sometimes changed to
+ other on menu clicking or leaving dialog's focus (because KexiTableView had NoFocus policy)
+
+2004-04-14..15
+Table Views
+- insertEmptyRow() improved
+- KexiTableViewPropertyBuffer introduced
+- cell editors that have no editor widgets: current internal value is now displayed
+- KexiDataTableView: fixed columns double initializing
+Cell Editors
+- Boolean cells are now treated as other types: validation and edit buffering works
+- Boolean cell editor moved to separate KexiBoolTableEdit class
+- Enter key also toggles boolean editor's value
+- clickedOnContents() added -allows to toggle value without using
+ editor widget (used in boolean cells)
+- hasFocusableWidget() added -allows cell editors that have no editor widgets (e.g. boolean type)
+Query Designer
+- many functional improvements
+- property editor is now used, like in Alter Table Dialog (with KexiTableViewPropertyBuffer)
+KexiDB
+- Connection::useDatabase(): fix for non-sqlite dbases:
+ we're not checking for database inconsistencies when using temporary database.
+- SQLite cursor: added decoding for boolean values
+TODO: move this decoding somewhere to generic functions
+- Connection::useDatabase() : kexiCompatible param. added to allow using native dbases
+
+2004-04-13
+Forms
+- linkage fixes for win32
+- some null-checks added
+- widget deletion is now delayed (because of problems with qt/win32 events)
+Table Views
+- KexiTableView::maximizeColumnsWidth() added
+Relations Editor
+- Combo box is updated on table hidding
+- popup menu titles added
+Query Designer
+- columns' data is better updated
+
+2004-04-06..08
+KexiDB
+ - Reference class renamed to Relationship, documentation improved
+ - QuerySchema: added 'field visibility' flag
+Table Views
+ - added 'column visibility' flag, inherited from QuerySchema's 'field visibility'
+ - many sanity checks added usable when data is destroyed
+ - added possibility of disabling vertical scrollbar's tooltip
+ - table can be refreshed if data model changed outside of this table
+Combobox Table Columns
+ - key-based related data in columns added as an option (still of Field::Enum type)
+ - flickering removed when popping up for the first time
+Query Designer
+ - table of fields ('field' and 'table' columns) is updated a bit on table adding;
+ not finished though
+
+2004-04-05
+Kexi Alter Table
+ - fixed possible crash when the view is initialized with no table schema specified
+ (ie. for designing a new table)
+ - a pointer to table schema is updated after creating a new table
+ - compilter warnings removed
+KexiDB
+ - names and docs in Reference class improved
+ - Connection: major versions of database and kexidb is are compared on useDatabase():
+ errors are presented if needed
+
+2004-04-02
+KexiDialogBase
+ - beforeSwitchTo(int mode, bool &cancelled) is called also on newly created view
+
+2004-03-29..2004-04-01
+Kexi Query Designer Editor
+ - KexiSectionHeader class introduced
+ - section's size hind fixed
+Relations widget
+ - asterisks added to table boxes
+ - asterisks are not drag&drop enabled
+ - hiding tables implemented (connections are removable as well)
+Table View
+ - Temporary FIX: BLOB editors are disabled
+ (in KexiBlobEditorFactoryItem::createEditor()) because of unstability.
+TODO: reenable this
+ - setData(): when the same data object is passed, tableview is just refreshed
+ - setDropsAtRowEnabled() added; row-droping-indicator implemented
+ - KexiTableView::editor(): only if ignoreMissingEditor is false (the default),
+ and editor cannot be instantiated, current row editing (if present) is cancelled.
+ Thus: Now it's possible to edit data for tables where there are cells
+ that have no valid editors (yet?), such as BLOB now.
+ - paintCell(): if there is no editor defined, just a focus box is displayed,
+ filled with additional grayed diagonal pattern
+Table View Editors
+ - clicking on date table popup selects current date
+ - QScrollView is passed on editors creation instead of QWidget
+ - QScrollView::moveChild() is used for moving external widgets, instead of QWidget::move()
+ - fixed uninitialized leftMargin value for FP-Number editor (on win32)
+Alter Table Dialog
+ - Temporary: 'defaultValue' property hidden- we'll show this after we
+ get properly working editor for QVariant
+Kexi
+ - Welcome screen now uses html 'welcome_<locale>' fiels.
+ These are Temporary! Do Not Translate!
+Kexi Core
+ - KexiPartManager is now KexiDB::Object-derived; error texts are set now
+ - Action Proxies: child focus is better handled
+ - KexiViewBase: focus change tracking and actions updating improved
+
+2004-03-27
+Form Editor
+ - buggy deleting fixed: ResizeHandleSet::Dict defined, we're using that instead
+ of not-fully-defined QDict<ResizeHandleSet>
+Kexi
+ - added 'Welcome' screen with hot informations for our users
+
+~~~~~~~~~~~~~~~~ beta3 pre1 ~~~~~~~~~~~~~~~~
+
+2004-03-26
+ - pl translate updated
+ - some I18N_NOOP turned to i18n
+ - fixed crash on Relationships window closing due to lack of Part Item
+KexiTableView
+ - "dontAskBeforeDeleteRow" config key is better
+ - after removing a row, all rows below are updated
+ - repaint of bottom few pixels (empty) area fixed when scrolling and resizing
+Kexi
+ - "-new <object_type>" CLI option added: "Start new object design of type <object_type>"
+ (also convenient for everyday tests)
+Main Window
+ - MDI mode is now stored and restored
+ - fixed problems with property dock window when using IDEAl mode
+KMDI
+ - Fixed memory leak & crash:
+ Tab/IDEAl mode: mdiview was never destroyed but just moved out of the tab widget
+ - KMdiChildFrm: Mouse button press filtering is checked against every client's child,
+ not just client
+TODO: backport this to qextmdi???
+
+
+2004-03-25
+KexiTableView
+ - adjustColumnWidthToContents(-1) now mean that all columns' width is adjusted
+ - after calling adjustColumnWidthToContents(), editor width is updated, if needed
+ - setSpreadsheetMode() added
+KexiQueryDesignerGuiEditor
+ - spreadsheet-like mode set
+ - more columns added: totals & sum
+
+2004-03-24
+Main Window
+ - Wrong behaviour fixed:
+ after switching to other MDI mode, pointer to current dialog needs to be updated
+ (property editor was empty)
+ - previous 'view mode' toggle action is checked back properly after cancelled switch
+Table View
+ - fixed editing initializing with 'removeOld' mode
+Alter Table Dialog
+ - Temporary workaround:
+ if data is dirty and table schema was saved before --user is asked
+ for discarding changes.
+ - switching to Data Mode is cancelled if current design is empty (never saved and !dirty)
+KexiDialogBase
+ - switchToViewMode() has now option for cancelling switching
+ (if user is able to cancel in any case)
+ - switchToViewMode() calls saveObject() on main window before switching, if needed
+ - KexiViewBase::afterSwitchFrom() and beforeSwitchTo() have now bool &cancelled
+ parameter that allows to gently cancel switching
+ (probably after showing some info messages)
+
+2004-03-23
+2004-03-24
+Core, Main Window
+ - Volatile Actions introduced
+ - Menu updating and focusing fixed
+Kexi TableView, Kexi Table Data
+ - Empty row inserting implemented
+Kexi Alter Table
+ - Empty row inserting action added
+
+2004-03-22
+Main Window
+ - when toggling to other view mode (using radio action) failed, action for
+ previous mode is toggled back.
+
+2004-03-19
+2004-03-20
+KEXIDB:
+ <KEXIDB FORMAT CHANGED TO 1.2>
+ - 'kexi__objectdata' table introduced: contains object's data, such as form's xml def
+ SCHEMA: table kexi__objectdata
+ o_id integer REFERENCES kexi__objects(o_id),
+ o_data BLOB,
+ o_sub_id varchar(200)
+ </KEXIDB FORMAT CHANGED TO 1.2>
+
+ - Field::typeForString(typeString) Field::typeGroupForString(typeGroupString) added
+ - Connection::querySingleString() and Connection::resultExists() added
+ - KexiDB::sqlWhere() utility function added
+Alter Table Dialog
+ - Saving field types FIXED
+CORE:
+ - KexiDialogBase::storeDataBlock() added
+Table View
+ - fixed row's painting for empty table that have only row "for inserting"
+ - vertical record marker: fixed painting during inserting 1st row
+ - function for inserting an empty row above the cursor added (not finished yet)
+CORE:
+ - Shared Actions: unplugSharedAction(action_name, widget) added
+Main window:
+ - "Insert empty row" shared action added
+ - Shared actions are updated on switching between dialog view modes
+
+2004-03-17
+ -KexiProperty: fix for fix :) changes from null string to "" string (or vice-versa) are ignored
+ -Kexi Property editor receives signal KexiPropertyBuffer::propertyReset()
+ (called from KexiProperty::resetValue()) so property is property visually reseted
+ even on calling resetValue() either by clicking "reset" button or by hand.
+
+2004-03-13
+ -KexiProperty: changes from null string to "" string (or vice-versa) are ignored
+
+2004-03-12
+Table View
+ -Combo box editor: cursorAtEnd() and cursorAtStart() are just used
+ from KexiInputTableEdit
+ -Some debug disabled
+ -setColumnWidth() added
+Alter Table Dialog
+ -now KexiDataTable is inherited instead of using KexiTableView internally.
+ Thus we have actions like 'row deleting' available.
+ -on table schema saving: checking for duplicated field names is now case insensitive
+ -convenient width set for 'type' column
+Kexi Data Table widget
+ -Added ctor for not-db-aware version; docs updated
+Kexi Core
+ -string2identifier(): fixed bug for strings started from not alphanumeric char
+ -New validator added: KexiDBObjectNameValidator for checking
+ for 'kexi__' name violations
+ -KexiMultiValidator added
+Main Window
+ -KexiNameWidget now uses multivalidator, so it's easy to add additional validations
+ -above is used with KexiDBObjectNameValidator to check for violating 'kexidb__' names
+KexiDB
+ -Driver::isKexiDBSystemObjectName() static function added; isSystemObjectName()
+ uses this now by default
+
+2004-03-11
+Main Window
+ -fix: object's name and caption entered by user is used to create this object
+ -brand new objects have changed part item id --this is updated in main window's
+ structs as well
+ -in removeObject(): if object's dialog is opened -it's quietly closed before removing
+ -added check/hack to avoid inf. recursion between removeObject() and closeDialog()
+ -crash fixed: on dialog closing, it's properly removed from dictionary.
+Kexi Dialogs
+ -'neverSaved' flag is cleared on first successful saving
+ -active view is 0 on its parent dialog destruction
+ -Dialog's docID is not just id, and inherits part item's (KexiPart::Item) identifier
+Alter Table Dialog
+ -'name' and 'description' properties are updated on change
+ -on table schema saving, user is warned about: 1) duplicated field names
+ 2) not added fields at all; 3) fields without names
+Table View:
+ -'removeOld' flag is passed from TV to initializer, so given editor's implementation
+ can decide what to do
+
+2004-03-10
+Table View
+ -Combo box editor: after new row selecting (not hightlighting) editing is accepted
+ -setFilteringEnabled() added
+KexiDB::Field
+ -forgotten: Byte is numeric type, of course
+Alter Table Dialog
+ -anyway, subtype property is always created (may be needed later)
+ -subtype is properly opdated on type (group) changing
+Properties
+ -fixed possible crash
+ -KexiProperty: now it's possible to change a list of values (in case
+ of property of type 'list')
+KexiViewBase
+ -propertyBufferReloaded() added -called whenever current
+ property buffer is changed that few properties are now visible
+ and/or few other are invisible
+
+2004-03-09
+Main Window : some top level polishing
+ -most tooltips/what's this added for actions
+ -'save' action now works int the current dialog context
+ -message about more not impelmented features added
+ -proper quitting and project closing
+ -KMainWindow::queryExit() and queryClose() impelmented instad of closeEvent()
+ -"Create" menu is disabled when no project is loaded
+ -On last dialog closing, guiclient is removed (so dead toolbar are hidden now)
+ -Main Window: dock windows are disabled on project closing, for sanity
+ -some fixes for mime data (QString -> QCString)
+ -part manager's part lookup can be called only once now
+ (refreshing will be impl. one day)
+ -dock windows (navigator and propeditor) are properly handled on closing/reopening projects
+ -opening project after closing fixed
+ -caption is updated on dialog data saving; after saving brand new data,
+ item is added to the navigator
+Property Editor
+ -fixed crash on changing invisible properties
+Alter Table Dialog
+ -creating new tables works partially
+
+2004-03-08
+Table View
+ -'acceptsRowEditAfterCellAccepting' flag added
+Main Window
+ -closeDialog(), saveObject(), closeProject() methods have now 'cancelled'
+ parameter, so they can tell you if user just cancelled operation or there was
+ rather a real error.
+ -Duplicate names are checked on new object saving; user is prompted for unique name.
+ -On dialog closing: 'Dirty' flag is cleared when user discards dialog saving
+KexiDB::Field
+ -Connection::findObjectSchemaData() added for looking for objects by type and name
+ -INDEXED flag added to KexiDB::Field (now you can declare field to be indexed
+ even without any constraint)
+ -More implied rules added for methods like setPrimaryKey()
+ -More docs added
+Alter Table Dialog
+ -most missing field properties are now visible in property editor
+ -Creating new table: table schema is (almost) created using current buffers' state
+
+2004-03-06
+2004-03-05
+KexiDB
+ -'helpText' for SchemaData and Field members renamed to 'description'
+ -KEXIDB METADATA FORMAT CHANGED (to 1.1):
+ helpText renamed to description in kexi__objects table
+ -Connection::storeObjectSchemaData() added -can be reused mostly for object storage
+Core
+ -string2Identifier(): now created identifier is forced to lowercase
+Kexi Parts
+ -part item's and part info's 'mime' is now of QCString type
+ -structures like items dicts are now case insensitive QAsciiDict
+Kexi Dialogs
+ -storeData() and storeNewData() methods added
+ -currently used KexiDB::SchemaData object is pointed by KexiDialogBase
+ (useful for data saving)
+Kexi Views
+ -storeData() and storeNewData() methods added; called by parent dialog
+Kexi Project
+ -now keeps a list of never-stored part items (on 1st saving, a given
+ item is moved to a list of regular part items)
+ -createObject() -generic method for initiating object creation on the backend;
+ updates item's data when necessary, etc.
+Kexi Properties
+ -QCString is used for property name instead of QString
+ -structure like properties dict (in the buffer) is now case insensitive QAsciiDict
+KexiMainWindow
+ -saveObject() added, KexiNameDialog is used for prompting for object name and caption
+ -user is asked for object saving on dialog closing (and thus on app closing as well)
+Kexi Alter Table
+ -storeNewObject() and storeObject() implementation started
+Main
+ -KexiNameWidget and KexiNameDialog utility classes
+ (for entering both names and caption names) implemented
+
+2004-03-04
+Main Window
+ -Both on window close and application close: User is prompted for saving
+ unsaved data for each "dirty" dialog. Pressing "Cancel"
+ -cancels application closing.
+ -only stored objects are added to the Navigator
+ -few methods move to protected
+ -graphical notification about 'dirty'==unsaved data ("*" sign at the right hand)
+ added to the names on captions, taskbar and navigator
+ -API for saving kexi dialog's data added, plugged to the main window
+Kexi Dialogs
+ -currently not only dialog is activated when focus come to any of its children,
+ but also when any children is clicked.
+ -KexiViews have now 'dirty' flag and parent KexiDialog reuses that
+
+2004-03-03
+2004-03-02
+Kexi Dialog / View
+ -fixed internal view's focusing: on click on a view, dialog is activated
+ -focus cell is now grayed for disabled table views, not for unfocused
+KexiDB
+ -"kexi__parts" table is now filled with default (required) parts info
+ automatically in Connection::createDatabase(), not somewhere outside
+TODO: add version info?
+Main Window
+ -Part type name removed MDI Taskbar buttons' captions, to save some space
+ -User is now asked for saving object data on dialog closing (if it's dirty)
+ -Not stored objects are removed from memory and gui completely,
+ if user won't let to save them
+ -Not stored objects (part instances) have now identifiers < than -1
+Kexi Views/Dialogs
+ -"dirty" and "neverSaved" flags added
+Parts / Kexi Project
+ -so-called "unstoredItems" introduced, so they can initially exist in memory only
+ and user may want to give up, not saving them
+Table View
+ -Fixed focus-stealing from editor problem
+
+2004-02-27
+Kexi Property Editor, Kexi Property Framework
+ -propertyChanged() signal is received from assigned property buffer,
+ and values are visually updated (including children)
+ -changeProperty() code (for checking for changes)
+ moved from buffer to property setValue to avoid mistakes in class usage
+ -property editor class now has a dict of all items, based on its names
+ -each KexiProperty now has a pointer to its buffer, ans uses it to emit
+ signals on value changes
+ -fixed crash on moveEditor() when called from ctor
+ -KexiPropertyEditor is safely updated right before PropertyBuffer destroying
+Kexi Validator
+ -allows to define whether empty values are ok or not
+Alter Table Dialog:
+ -'name' and 'type' columns can be empty now (that just means the row is empty)
+ -buffer and 'type' column is cleared when 'name' column is cleared
+ -row deleting works (buffer is destroyed as well)
+Table View's Data
+ -aboutToDeleteRow() signal is emited before row deleting and rowDeleted() -after
+Table View
+ -contents size is updated after row deleting
+
+
+2004-02-26
+Kexi Property Editor
+ -leaveTheSpaceForRevertButton introduced for subeditor class.
+ This removes confucion when user clicks on a spinbox arrow and it suddenly
+ moves left.
+ -parent item is updated on children updates
+ -editor position is updated when user collapses or expands a property node
+ -resetting composed property value also resets all children
+Kexi Property Framework
+ -testiong for property change: for date and datetime types we're now comparing
+ values using strings, because there can be miliseconds difference in a time;
+ strings comparison fixed for null strings
+ -resetValue() added to KexiProperty for convenience
+ -for composed properties (like Rect):
+ * changing property child updates parent value
+ * setting property unchanged (eg. on resetting) updates parent's 'changed' flag
+ -QSizePolicy-type property helper improved
+ -setValue() renamed to setChildValue() to remove messy overload
+
+2004-02-24
+Table View:
+ -KexiTableViewData is now QObject-derived
+ -signals like aboutToChangeCell() or rowChanged() moved from KexiTableView
+ to KexiTableViewData, so it'll be easier to reuse KexiTableViewData
+ with a forms, and easier to share common data object between views.
+ -It's now allowed to call acceptRowEdit() from inside of cell-accept handlers
+ e.g.: KexiTableViewData::aboutToChangeCell() signal
+ (no infinite recursion is preformed but instead: the row is saved after
+ cell's acception).
+KexiDB:
+ -ResultInfo introduced
+ -getHTMLErrorMesage() utility method introduced
+ -Cursor: now pointer to connection is guarded
+ -Connection, Cursor: error status is cleared before performing update/delete/insert
+ -Connection::recentSQLString() added (useful for debugging and on-screen
+ error messages
+ -Connection: further error message fixes
+Alter Table Dialog:
+ -after 'name' field is entered, 'type' column as automatically filled
+ -"newrow" property is added for each new buffer to indicate for later processing
+ that these buffers are for newly added fields
+Properties are now indexed using case insensitive names.
+
+2004-02-22
+KexiDB:
+-copy constructors added for classes: table schema, field list, index schema, field
+Alter Table Dialog:
+-all changes are made to the deep copy of the table, not to the original
+
+TODO: KEXIDB: copy constructors: also copy references of the index schema
+
+2004-02-21
+Main Window:
+ -buffer in the property editor is properly cleared when current dialog is changed
+ or there is no dialog
+Table View:
+ -clearSelection() and field(int) methods added
+ -on row deleting: cursor is moved up only if we're deleted the last row
+ and row-inserting is not enabled
+ -fixed selecting row after no row was selected
+ -messagees are displayed on failed row updating/inserting
+ -CONSTRAINTS: illegal null/empty fields are checked on updating/inserting
+ (msg boxes are used if required)
+ -the cursor is moved to faulty cell's value on record update/insert error
+Combo box editor:
+ -selection on the popup table view is cleared then no test is entered
+ -up/down/left/right key presing leaves the lineedit if there is no
+ line selected on the popup table
+ -improved editing convenience
+KexiDB:
+ -isEmptyValue() generic function added for checking if a value of QVariant
+ is empty but not null
+Alter Table Dialog:
+ -"data type" column declared as NOT EMPTY
+
+
+2004-02-20
+KexiDB::Field:
+-setNonEmpty() fixed
+-NOT EMPTY constraint is now implied by PRIMARY KEY constraint
+Table View:
+-on a table cell edit accepting: violating of the following:
+--NOT NULL or NOT EMPTY constraints
+--validation rules (using attached KexiValidator)
+ so LATER this may be also used for forms
+--from-editor value getting errors (d->pEditor->value())
+..is now signaled using message box
+Alter Table Dialog:
+-"field name" field acts like a primary key
+
+2004-02-19
+KFormEditor lib:
+-ported to win32
+-some sanity checks added
+
+2004-02-18
+KexiPropertyEditor:
+-font editor item: description text moved to kexiproperty::format(); added weight & italic info
+-new method of column sorting: instead ascending - default order,
+ instead descending - alpha order
+- "revert to original value" button is automatically shown when property value is changed
+ and becames hidden when the value is reverted to original value
+KexiTableView: added new signals:
+-for checking validity of curent cell, before changing
+-for checking validity of curent row, before updating
+-for checking validity of a new row, before inserting
+In a case when checking for validity failed, row edititing/inserting
+(or cell updating) is cancelled --> editor is not removed
+- KexiPropertyBuffer: clear() reimplemented for proper clearing the data
+- KexiValidator class introduced
+KexiTableView:
+-acceptEditor() returns bool, so now it's checked if we can proceed with cursor moving, etc.
+-KexiValidator is used to check whether cell editing should be accepted or not.
+Alter Table Dialog:
+-hidden "name" property added, ident. validator is now used
+-added KexiDB::RowEditBuffer* argument to aboutToUpdate and aboutToInsert signals
+
+2004-02-17
+- KexiDB::typeStringsForGroup() ustility function added
+- KexiDB::Field: array of field type names fixed
+Kexi Property Framework improved:
+- properties can be nested, e.g. for Rect type there are automatically
+ created two properties: x and y
+- pointer to a parent property is kept, if present
+- all data is stored in KexiProperty and KexiPropertyBuffer, not just in GUI objects
+- editoritem text for composed values (like Rectangle) now displayed properly
+- reverting to default works properly for properties of type 'list'
+- By default, sorting is disabled (properties are in order of insert time)
+- KexiPropertyEditor: fixed value changes for prop. children
+
+2004-02-12
+- typeName() added to KexiPropertyBuffer
+- typeString(), typeGroupString() added to KexiDB::Field
+- KexiDB Utils: typeNamesForGroup() and typesForGroup() utility functions added
+- KexiPropertyEditorList crash fixed for StringList type
+
+2004-02-10
+- Property editor is now used globally in Kexi (property buffer's change comes from active KexiView)
+- Alter Table Dialog connected to global property editor
+- Kexi Main Window: removed unused code
+- Action for Focusing Property editor (alt+2) added
+- KexiProperty and KexiPropertyBuffer classes moved to core/
+ from widget/propertyeditor
+- KexiProperty has now oldValue() and changed() methods -- usable
+ since we've global property editor
+
+2004-02-09
+--design command-line option added, especially useful for developers
+main window:
+- dock/layout/geometries settings are stored/restored (a bit better, not complete though)
+- table view: update width of a combobox popup on editor's resizing
+
+2004-02-08
+- libkeximain introduced (by splitting libkexicore)
+Main Window settings:
+- main window size stored and restored before showing
+- "maximized childframes" setting stored/restored
+
+2004-02-04
+Table view:
+ -Generic Cell Editor Framework introduced
+ -selection background painting moved to editor's implementation
+ -for row-selection mode: Home/End keys always move to the 1st/last row
+ -page up/page down actions added as methods
+
+ComboBox Editor improoved:
+
+-we're completely dropping use of regular combobox
+-new layout: a lineedit + dropdown button + popup tableview, when needed
+-methods used (and few added) for tableview to enable adjusting
+ it for use it as dropdown tv:
+--hidden vtoolbar
+--hidden header (on user demand, and automatically, when only one
+ column is visible in the dropdown tv
+--hidden the context menu
+--hidden the record navigator
+--added and used a method for selecting entire row, not just a cell
+--tv's recordset made readonly, disable inserting
+--sorting disabled
+
+
+Property Editor:
+ pointer to current editor is now guarded, fixed crash (on sorting)
+ due to uninitialized member
+
+2004-01-29
+-KexiDB: crash fixed for records buffering, when a value is NULL
+(for some targets strdup crashes on NULLs)
+-KexiDB: i18n'd names for datatype groups added, just like datatype names.
+ This will be used eg. in Alter Table Dialog
+
+2004-01-28
+- Main Window: toggle actions are checked off before disabling
+
+- Table View:
+ -fixed size of Vertical header's item (record marker) used in Table View
+ (now also works ok with Windows style)
+ -don't paint contents of edited cell - painted editor is enough
+ -methods added for showing/hiding vertical and horizontal header
+ -framework for showing cell's focus depending on editor type added to cell
+ editor (eg. dropdown btn for combobox)
+
+- Main Window:
+ Fixed problem with autoincremented identifier in kexi__object
+ table on ObjectCreation for some backends
+ lucijan: what about using kexiDB API, not hardcoding?
+
+2004-01-27
+- Combo box editor
+ -key events fixed
+
+2004-01-26
+- Table View:
+ -KexiCellEditorFactory and KexiCellEditorFactoryItem introduced for generalized cell
+ editor creation and cell painting
+ -now, we don't try to recreate cell editors but store one editor instance for every
+ column and just show/hide/move it when needed
+ -column width is now adjustable with adjustColumnWidthToContents() and stretchable with
+ setColumnStretchEnabled()
+
+
+===================== Kexi 0.1 Beta 2 "Warsaw By Night" =====================
+
+2004-01-20
+- kmdi captions fix backported to kexi_compat
+- kexistartupfiledialog: we're using paths unstead urls now for better compat.
+
+2004-01-19
+RESIZING HELL RESOLVED
+- KexiDialogBase resizing fixed for maximize state: only resize a dialog if it is in normal state
+- KexiMainWindow: for dialogs in normal state: decrease dialog's height if it exceeds area contents
+- KexiViewBase:
+ -preferred size hint introduced;
+ -parentDialog() convenience method added for getting view's dialog parent.
+
+- KexiDB::Connection:
+ -tableNames() return only tables that have valid names
+ -the same for any other objects
+- actions in 'Create' menu work
+- PropertyEditor has cell borders' color like this used in table view
+- closing() signal added to KexiViewBase - it works like in KexiDialogBase.
+ Effect: table view's data is saved on closing if editing is in progress
+
+- table view, kexidb: after row inserting, autoincremented fields have displayed values
+- query removing works
+- KexiMainWindow: shared actions are disabled when no proxy is available
+
+2004-01-17
+- KexiDialogBase: minimum height fixed: added height of its caption
+- KexiTableView: repainting of bottom contents FINALLY FIXED
+- ALTER TABLE Dialog impl. started
+- query part: crashes removed when no sql string defined for query; by default "visible" column is true
+- relation view:
+ -for global db relations -all tables are shown (will be customized later)
+ -open table/design table actions fixed
+- bool Kexi::isIdentifier(QString) added for convenience
+- KexiDB: Tables and queries with invalid names (that are not valid identifiers) are skipped on lookup
+- KexiProject: The same for any objects and KexiProject level
+
+2004-01-14
+CORE API CHANGED:
+- Kexi Dialogs : view modes functionality added -- KexiViewBase, and integrated with KexiMainWindow
+ and KexiDialogBase
+- KexiDockBase removed because if KexiViewBase existence
+- If a dialog is already opened in given mode and user have dbl-clicked on the Navigator,
+ the dialog is not switched to other mode
+
+- InternalParts and dialogs without multiple modes FIXED
+- KexiTableView: when cursor is moved down and navigator covers the cursor's area,
+ area is scrolled up.
+
+2004-01-13
+KexiActionProxy:
+ - isSupported(const char* action_name) added -returns true, if action is supported by the proxy
+ - isAvailable() now lookups also in the childrens actions, if actual action proxy does
+ not support a given action
+- Relation View:
+ some action availability updates
+
+- more icon sizes added: state_sql, table; state_text added for future "text view" mode
+
+- KexiMainWindow: actions are invalidated more accurate on dialogs switching/closing
+- KexiDialogBase: added flags t ocheck if given dialog's implementation accepts given view mode
+ (data/design/sql modes)
+- Kexi::ViewMode introduced - view modes for kexi dialogs (i.e. data/design/sql)
+
+2004-01-12
+- Relation View:
+ - tables focusing fixed
+ - actions 'remove table', 'remove relation' work (not impl)
+ - "relation view" widget extracted and moved from relations/ plugin to widget/relations/
+ (because it's used also in queries)
+ - KexiRelationDialog renamed to KexiRelationWidget to avoid mistakes
+ - actions moved from KexiRelationView up to KexiRelationDialog (simplicity)
+ - added new actions: "open table", "design table"
+- KexiActionProxy:
+ new plugSharedAction() overload added for easy creating alternative action names.
+
+2004-01-10
+- KexiDB::Field::isIntegerType() added. Now It's easier to detect if a field is integer.
+- Fixed loading and saving values of type Float or Double in database tables.
+- Row updating/inserting: Fixed converting decimal symbol from locale back to db backend format
+
+2004-01-09
+- PartManager: Parts are sorted using definition stored in kexirc
+ (code taken from the old API)
+- .ui files can be now translated
+
+2004-01-08
+- KexiInternalPart introduced (as generalized KexiRelationPart):
+ produces internal Kexi dialogs and widgets ON DEMAND
+ (so: KexiRelationPart is removed)
+- Kexi Relations (widget and dialog) is now produced by KexiInternalPart
+- Tables in relation view: sizes fixed
+
+2004-01-07
+- Build fixes for gcc2.95 on kde3.1
+- Relations View: connection and viewtable focusing fixed and some actions added
+
+2004-01-06
+- KexiTableView:
+ -rowEditStarted(int) signal is emitted when row editing is started
+ (for updating or inserting)
+ -rowEditTerminated(int) emmited when row editing is terminated
+ (no matter if accepted or not)
+ -proper availability updates for "edit_delete_row" (disabled when tv is
+ readonly) and "data_save_row" (enabled only on row editing)
+- KexiDialogBase/KexiPart : fixed caption icons setting for dialogs created by
+ parts
+- Shared Actions:
+ - KexiSharedActionHost introduced - it's "action sharing" functionality extracted from KexiMainWindow.
+ - global default KexiSharedActionHost added for convenience
+ - KexiActionProxy now uses KexiSharedActionHost as it's host instead of explicity pointed KexiMainWindow
+ - on destruction, KexiSharedAction object is taken out of its KexiSharedActionHost
+ - int KexiMainWindow::generatePrivateDocID() added, so we can use this when we want to get unique doc id
+e.g. for KexiDialogBase.
+ - generatePrivateDocID() is used in Relations dialog
+
+- KexiMainWindow: fixed bug in virtual function
+- KexiSharedActionHost: fixed behaviour on destruction
+
+-KMDI:
+ -caption's icon is resized on setIcon() when needed
+ -default icon changed to SmallIcon("filenew"),
+ if not found - filenew.xpm is used
+
+2004-01-05
+- QueryAsterisk:
+ -setTable() added - a must for parser to work
+ -debug improoved
+- Connection: dropTable() added
+- Query Part ported to win32
+- KexiBrowser: nice title added for popup under part item
+- KexiTableView:
+ -navigator showing/hiding implemented
+ -cursor setting a bit fixed for empty view
+ -cell's text has now proper color for read-only column
+- KMDI: fixed bad QWidget filter lookup and unsafe identifier hiding in childview's eventfilter
+- kexipropertyeditor ported to win32, kexiproperty and kexipropertybuffer moved from core
+
+2004-01-04
+- KexiActionProxy: "action" term in methods substituted by more readable: "sharedAction"
+- some actions (in browser) marked as KEXI_UNFINISHED
+- KexiMainWindow: KStdActions are now also acceptable as shared actions
+- copy/cut/paste actions are shared now; added to edit menu
+- "relations" action reintroduced
+- closing() convenient signal added to KexiDialogBase
+- on Table closing - any edits that are in progress are accepted (thx to lucijan for report)
+- KexiTableView:
+ -fixed crash while counting minimum size for columnless tableview
+ -preventing from crash when no data is set before constructing is finished
+- KexiProject: openObject() and removeObject() added so we will be able to catch kexidb errors
+
+- KexiPart items are now removable! (both from GUI and db backend)
+- Kexi Browser is items are removed if required
+- KexiDialog: now has itemIcon() possible for reimpl. and Kexi Relation View reimpl this, since
+ it has no KexiPart
+- Kexi Relation View: small crash fixed
+
+2004-01-03
+- KexiDB, core:
+ -ConnectionData and KexiProjectData now inherit QObject
+ (useful for QGuardedPtr, sharing and for notifications about changes)
+ -project_caption, project_desc properties are now created and stored in projects
+ -some utility functions added in kexidb/utils.cpp
+- KexiMainWindow: application's caption now also contain current project's caption (or name)
+ (this also works ok for maximized windows)
+- mysql driver reenabled (may not work correctly)
+
+- ConnectionData
+ -conflict with QObject fixed
+ -"name" member is now: "connName"
+
+2004-01-02
+- table view:
+ -in key event - we give up with executing actions that are shared with main window, because
+ these actions are executed at main window's level. These actions are declared using
+plugSharedAction().
+ -row deleting works
+ -rows number is updated in tv navigator after row deletion
+- actions: MSA-like "Delete Record" substituted by "Delete Row"
+
+TODO: show posible errors (as well as for INSERTs and UPDATEs)!!!
+
+
+2003-12-30
+** Many cleanups and behavioral fixes
+- KexiMainWindow:
+ -focusing fixed again (now menubar doesn't grab move focus from navigator)
+ -shared action set is now simplified, generalized
+ -getlogin() used at least on win32, cause lack of KUser :)
+- KexiDockBase added as a base for docked widgets hat offer shared actions.
+ Now it is a pair with KexiDialogBase class (both inherit KexiActionProxy).
+- "Data" menu entry introduced
+- KexiTableView:
+ -added action for current cell removing
+ -added popup menu
+ -cell focus-marker is not grayed when popup menu is executed
+ -Key_Space pressing fixed
+ -added possibility for plugging shared actions to table view (using plugSharedAction()),
+ e.g. "data_save_row" action, so shortcuts are properly handled
+ -deleting row while new row is edited just cancels editing
+ -vscrollbar tooltip is not visible when corliing is dont using keyboard instead of a mouse
+ -stranger's key events (e.g. pressing up arrow in navigator's line edit)
+ aren't processed by table view (in keyPressEvent())
+
+2003-12-22
+- KexiTableView most keyboard events are now only accesible without key modifiers (eg. CTRL+Key_Up now
+doesn't work)
+
+2003-12-21
+- KexiActionProxy introduced
+- New terms introduced: part's gui client and part instance's gui client.
+ The latter is removed from main window's guifactory when part instance is deactivated
+ e.g. "Filter" action of tablepart is hidden when needed),
+ while the former is premanent in main window (e.g. "New Table" action is always visible).
+
+- KexiMainWindow:
+ -dockwidgets' (like e.g. browser) focusing on main window's activate/deactivate
+ and on menu bar popups - fixed.
+ -removed toolbar item's fileckering when we're closing one kexidialog and another kexidialog
+ of the same type (guiclient) has to be activated (solution: guiclients are removed not
+ on kexidialog closing but before activating another, it new activated dialog has different client.
+
+- Global Action availability updates: 1) KexiMainWindow updates its actions on dialog switching,
+ or even on focusing dockwidget, like e.g. browser; 2) from dialog point of view - when required,
+ action availiability (true/false) is signalled from currently focused dialog to main window
+- Browser: popup menu re-added, (there is also example how to plug
+ both custom and global actions to the popup)
+- Opening part instances in design mode prepared (openInstance())
+
+2003-12-20
+- KexiDialogBase remembers its creator (a KexiPart::Part object)
+- KMdiChildFrm's icon is scaled when needed (e.g. when detached/attached)
+
+- KexiPart's classes: some methods are now protected
+- Toolbar buttons are now flicker-free, because gui clients are now attached
+ to parts instead of part instances
+
+
+2003-12-19
+- KexiDB::Field:
+ -many properties of type int are now of type uint
+ -WIDTH property added
+ -NOTEMPTY property added
+ -canBeEmpty(), typeGroup(), isDateTimeType() added
+
+- KexiDBTableViewColumn merged with KexiTableViewColumn, now column properties are always reused
+ from KexiDB::Field's properties
+
+- KexiTableView: full handling of NULL or EMPTY values on editor accepting, e.g.:
+ * cells are displayed as empty EVEN for numeric types, if null values are allowed
+ * cell value is forced to NULL if empty values are not allowed (e.g.: for numeric types)
+
+- Updating with NULL values fixed, and it's done only when needed.
+- KexiTableView editors: pressing "left arrow" key at begginning of cell's text moves
+ to cell on the left hand; the same for end of text+right arrow key
+
+- Finally: new row inserting works (no data integrity checking or warnings added though).
+
+- KexiTableView: cells: fixed displaying of text (and text selection) longer than cell's width
+- KexiDB:
+ -escapeString() and valueToSQL() moved from Connection to Driver
+ -escaping ' and " chars fixed
+
+2003-12-18
+2003-12-17
+2003-12-16
+2003-12-15
+- tableview: changes in keys behaviour:
+ -Ctrl+home moves to 1st row, Ctrl+end - to last row,
+ Home -to 1st col., End -to last col.
+ Ctrl+Shift+home moves to 1st row and col, Ctrl+Shift+end - to last row and col,
+ -Key_BackTab is also used to navigate cells
+ -row editing improoved: buffer containing changes for current
+ edited row introduced (KexiDB::RowEditBuffer)
+- tableview cell editors / items:
+ -KexiTableItem simply inherits from KexiDB::RowData
+ -Tab and Shift+tab, Up, Down, Home, End, etc. keys work also when cell editor is visible
+- FINALLY: row editing fully working: data is updated @ the backend using KexiDB
+
+- keximainwindow:
+ -Tab key pressed on navigator activates current child window
+ -Mainwindow's caption now contains (for Childframe Mode) child window's caption
+ as the prefix if the child is attached and maximized. This works well with attaching/detaching
+ and deactivating child windows.
+
+- KMdiChildArea: 2x crash fix for childframe mode
+ -when KMdiChildArea::setTopChild(0) is called and m_pZ is empty, pMaximizedChild is 0
+ -in KMdiChildArea::manageChild(), first - we need to take old references to childwindow
+ that is added to m_pZ (crash reproduction: detach one childwindow, attach it, detach again)
+
+-KexiDB:
+ -IndexSchema's pkey retrieving for loaded project -fixed
+ -RowEditBuffer class introduced
+ -Object::debugError() shows more error info
+ -Connection::updateRow() and Cursor::updateRow() inttroduced for row updating
+ -some metods goes inline
+ -expanded list (obtained from QuerySchema::fieldsExpanded())
+ of Cursor's all query fields is cached within cursor
+ -FieldList - fields lookup is now case insensitive
+ -results of QuerySchema::fieldsExpanded() is cached inside QuerySchema
+ -QuerySchema::pkeyFieldsOrder(), QuerySchema::fieldsOrder() methods introduced (results are cached)
+
+-Drivers:
+ -SQLite driver updated for current API
+ -MySQL driver just compiles
+
+
+2003-12-13
+- browser: focusing fixed: doesn't lose focus when clicked
+
+2003-12-12
+- added caching to KexiProject::items() and KexiPartInfo
+- objects lookup-and-opening functionality moved from navigator (KexiBrowser) to keximainwindow
+- "-open" CLO reintroduced
+- KexiMainWindow: error messaging generalized a bit
+- KexiTableView - editors API and behaviour improoved
+
+- KexiPart::Part objects are cached
+- pointers to KexiPart::Item are used instead of values
+- KexiStartupFileDialog's file selection works on win32
+
+
+2003-12-11
+- Cursor::movePrev() impl. updated
+- DriverManager: result names are available for KParts::ComponentFactory::ComponentLoadingError errors
+
+- Detached KexiDialogBase windows now have proper icons
+- KexiTableView:
+ - size hint and minimum size hint fixed
+ - better widths for text fields in navigator
+ - cell redrawing & colors fixed
+- KexiDataTable: size hint and minimum size hint is reused from KexiTableView
+- Some fixes for KMDI taskbar
+- KexiInputTableEdit:
+ - fixed adding first char on starting edit
+ - numeric field == 0 is cleared on edit
+- KexiDialogBase, KexiPart::Part: creating part instances and registering generalized
+- KexiMainWindow: foxusing improoved, added action for focusing navigator
+- KexiMainWindow: members moved to d-pointer
+- KexiPart::GUIClient is created by KexiPart on demand, if GUI window available
+
+2003-12-10
+- KexiMainWindow:
+ * "show navigator" action is auto-handled by kmdi
+ * fixed : pointer to current xmlgui is now cleared before closing kexidialog
+- KexiTableView::paintRow() fixed crash when col number was ==-1
+
+2003-12-08
+- Kexi MainWindows' settings are now stored and restored:
+ - toolbars, docks positions
+ - MDI mode
+ - added workaround for TaskBar positioning problem
+
+2003-12-06
+- sources synced with win32 target, again
+- Kexi:: singletons are now accessed via functions, eg. Kexi::connset()
+
+2003-12-03
+- KMDI modes enabled
+- KexiStatusBar introduced
+
+2003-11-30
+- KexiDB::Field::isFPNumericType() added
+- KexiTableView now entirely uses KexiDB::Field::Type for types checking, not QVariant
+- KexiTableView::paintCell() simplified
+
+2003-11-28
+- KexiStartupDialog: existing file opening fixed (problem with autocompletion);
+ "accept" aborting when no filename entered
+- some minor fixes and TODOs
+
+2003-11-25
+Finally commited again
+General:
+- PostgreSQL-based projects: tables are now visible in Kexi
+- KexiProjectSelectorWidget for "projectopen" action reused with KexiProjectSelectorDialog
+- most KexiDB errors are connected to message boxes, even driver loading failures
+
+- after unsuccessfull Cursor::moveFirst() eof() and bof() now return true
+- '..' substituted with ".." for message strings
+
+- pqxx driver:
+ - cursor's internal transaction is now destroyed on error in drv_open()
+ - cursor's internal transaction has an unique name for easy debugging
+
+- Kexi::detectProjectData() added for detecting file type both on startup and after
+ filename is selected in Kexi's file dialog
+- KexiPart::Manager is now shared between project sessions
+- KexiPart:: classes' implementation a bit refreshed
+- QValidator and helper functions for identifiers added
+
+- Main Window:
+ - "Open Existing Project" action works both for file- and server-based projects
+ - "New Project" action works both for file- and server-based projects
+ - above actions now work also after startup, from toolbar
+
+- KexiPart::dbAvailable signal not needed since openProject() function returns boolean
+
+- KexiStartupDialog:
+ - KexiConnSelectorWidget reused
+ - if single page is configured, no tabs are visible,
+ so KexiStartupDialog is reused for projectopen and projectnew actions
+
+- KexiStartupFileDialog introduced as embeddable widget,
+ reusable for different file types (e.g. .kexi and .kexis)
+- KexiNewProjectWizard introduced for creating empty projects (both file and server based)
+ it will be also reused for "project templates wizards"
+
+2003-11-24
+2003-11-23
+- KexiDB: Connection::databaseExists() now works correctly with file-based drivers
+ - just file existence is checked
+
+- KexiDB::Connection
+ - creating or dropping system database is not permitted
+ - databaseExists(): full file paths are compared for file-based drivers
+- KexiDB::Driver i18n fix, thanks for Malcolm Hunter
+CCMAIL: malcolm.hunter@gmx.co.uk
+
+- KexiPart::Manager is now shared
+- KexiPart:: classes' implementation a bit refreshed
+
+TODO: keep ownership properly in KexiPart namespace!!!!!!
+
+
+2003-11-22
+2003-11-21
+- drivermanager cleanup hack
+- some improovements in kexidb clases
+- KexiDB:
+ - Driver::isSystemDatabaseName() added
+ - some methods converted to const
+ - Connection::databaseNames() now has parameter for skipping system database names
+ - Driver::isValid()
+ - now checks driver's major version and compares against kexidb library major version
+ - now is called on createConnection() instead of Connection::connect() so errors
+ can be catch earlier
+ - KEXIDB_DRIVER (like Q_OBJECT) in driver.h and KEXIDB_DRIVER_INFO in driver_p.h macros
+ introduced for ease driver development and decrease error count
+
+
+2003-11-19
+- KexiNewProjectWizard added
+- KexiStartupFileDialog convenient KFileDialog subclass added/reused
+
+2003-11-17
+- KexiDB: buffered cursors: the first record was shown 2 times
+- KexiDB::Connection: some internal query fixes
+- newapi tests: -buffered-cursors switch added, non-internal cursor for all tests
+ are now unbuffered by default; fixed buggy behaviour on nonsuccessful t.v. test
+
+2003-11-15
+- small compiler issues fixed in pqxxconnection
+
+2003-11-14
+- Field: inlines fixed for newer compilers
+- DriverManagerInternal::slotAppQuits() used to destroy all drivers
+ on QApplication quit, so even if there are DriverManager's static
+ instances that are destroyed on program "static destruction",
+ drivers are not kept after QApplication death.
+
+2003-11-12
+2003-11-13
+- Kexi startup procedure for both files and db connections introduced
+- startup dialog integrated
+- projectdata redesigned
+- menu items improoved, polished; e.g. Changed "File" menu entry to "Database"
+- ConnectionData:
+ -added id for connectiondata
+ -some const added
+
+2003-11-10
+- added global kexi version info, like in koffice
+- configure.in.in: added checking for qextmdi if required
+
+2003-11-07
+2003-11-06
+2003-11-05
+- KexiTableView:
+ - Navigation bar added
+ - cell's focus indicator frame is now also visible after focusout
+ - before entering to edit mode, we ensure that current cell is visible
+ - vscrollbar tooltip added
+- Cursor: some members made private or protected
+- Cursor: m_beforeFirst is probably not needed anymore; m_at==0 is enough
+- Field: isNumericType(), isTextType() added, etc.;
+ type names are now i18n'd in an array;
+ some methods inlined
+
+TODO: void KexiTableView::cancelRowEdit() still dont repaint properly!!
+TODO: update on lostfocus
+
+- SQLiteConnection:: sqlite_freemem() used to free error message when needed;
+ do the same for SQLiteCursor
+- serverResult(), etc. methods aded also to Cursor class, so finer grained error
+ info is available
+
+
+2003-11-04
+- Documentation added for few newer and older methods.
+
+2003-10-31
+- KexiDB::Cursor: many code like drv_getNextRecord() moved from SQLiteCursor down
+ to Cursor class
+
+2003-10-29
+2003-10-30
+- KexiStartupDialog added. Now, although it is project-and-connection-oriented,
+ it is designed to be still consistent with conventional document-driver startup
+ dialogs used for other KOffice apps.
+- KexiProjectSelectorWidget introduced
+- KexiProjectData structure added
+- KexiProjectSet structure added
+- Test for new KexiStartupDialog. Code written here will be reused for
+ "fileopen" and "filenew" Kexi actions.
+
+2003-10-28
+- KexiStartupDialog introduced
+- KexiDB::ConnectionData: now offers (optional) driverName info
+- KexiDB::Driver::Info (short usefull structure) is now offered by DriverManager
+- ConnectionData::localSocketFileName optional attribute added
+
+2003-10-23
+- new icons for few kexi-specific contexts;
+- most icons are installed into Kexi app dir
+
+2003-10-22
+- KexiTableView:
+ - sorting works again
+ - before sorting, row editing is cancelled
+ - better "ensure visible" code when scrolling on small area
+ - inserting rows code completed
+ - vheader repaint fixed
+
+2003-10-21
+- tests/newapi : Now all test types accept <db_name>
+- KexiTableView:
+ - page down key also move cursor to "insert row" if one is present
+ - double clicking on cell (opening cell editor) fixed
+ - fixed cell's repaint when autoscroll is performed after clicking cell at different row
+ - sorting by column enabled, full set of methods added for this
+ - new feature: empty row is appended right after start of editing new row (like in MSA),
+ to allow user to move to a next row
+- KexiDB driver services' properties updated:
+ - X-Kexi-DriverType=[File|Network]
+ - and X-Kexi-FileDBDriverMime (for file-based drivers only;
+ for sqlite it is: application/x-sqlite)
+ -MimeType property removed
+- startup speed improoved: drivers lookup in KexiDB::DriverManager is now on demand.
+- Driver name now reuses QObject::name()
+- Connection::lastInsertedAutoIncValue() introduced
+
+2003-10-19
+- Connection::useTemporaryDatabaseIfNeeded() now is also reused
+ for databaseExists() and databaseNames(), so these methods work when engine
+ needs used any database before asking for info
+- ConnectionPrivate::m_skip_databaseExists_check_in_useDatabase used
+ to avoid endless recursion between useDatabase() and databaseExists()
+ when useTemporaryDatabaseIfNeeded() is working
+- Connection::setupKexiDBSystemSchema() added check to prevent creating
+ system tables schema more that once per connection
+
+- Connection: reomved default values from useDatabase() and createDatabase()
+ because this might be confusing to use first-found database name here; (thanks piggz!)
+- FieldList: cached string == comma-separated list of fields added
+- Connection: valueToSQL() overload added, insertRecord() overload added so we can omit
+ some fields from inserting; this is also internally used when kexi__* tables are
+ filled what improoves backward compatibility
+- FieldList now offers lookup by field name, list of field names, it can create
+ subLists, usable to define list of fields for data inserting
+- fixed compiler-dependent bug in insertRecord()
+
+2003-10-18
+- Connection:
+ - useTemporaryDatabaseIfNeeded() added - Because some engines need to have
+ opened any database before executing administrative sql statements
+ like "create database" or "drop database",
+ this method is used to use appropriate, existing database for this connection.
+ - above method is now used in createDatabase() and dropDatabase() if needed.
+ - QString anyAvailableDatabaseName() - returns name of any (e.g. first found)
+ database for this connection, eg. "template1" for PostgreSQL.
+ - DriverBehaviour::ALWAYS_AVAILABLE_DATABASE_NAME added when hardcoded value
+ for above is enough.
+ - setAvailableDatabaseName(const QString& dbName) - This is option that e.g.
+ application that make use of KexiDB library can set to tune connection
+ behaviour when it need to temporary connect to any database
+ in the server to do some work (e.g. DROP DATABASE).
+ - Connection cleaning up bug fixed a bit.
+ - Naming Conventions document added
+ - drv_isDatabaseUsed() introduced for additional state-checks
+
+2003-10-17
+- Driver developers should not change values of several important Connection
+ class members, so these are now private.
+
+2003-10-16
+- KexiTableView:
+ - maany repainting, updating, resizing improoved, code simplifications
+ - editing row session introduced: edits for the same row is not accepted until move to another row
+ This allows multiple fields editing before row editing accept.
+
+2003-10-15
+- missing QuerySchema::addAsterisk(QueryAsterisk *asterisk) added
+- KexiTableView headers and cells repainting improoved
+- for mysql driver: beh->ROW_ID_FIELD_NAME="_ROWID", is this ok?
+
+2003-10-14
+- DriverBehaviour::ROW_ID_FIELD_NAME added
+- bool Driver::isValid() invented, it is so clever that obsolete or bad driver
+ can not be easily harmfull for application.
+- KexiTableView and KexiDataTableView reimplemented for new KexiDB API.
+- few classes renamed, e.g. KexiTableViewData is here now instead KexiTableList
+- KexiTableViewData is now mostly data structure, special rows like "inserter" will be handled
+ by KexiTableView code.
+- KexiDataTableView now uses Cursor (a bit not efficient yet).
+
+2003-10-13
+- Cursor has now two ways for definition: 1) use raw statement 2) use QuerySchema
+- Conenction: prepareQuery() accepting QuerySchema overload added
+- TableSchema::query() convenience function added
+- tableview: QuerySchema is now used a bit
+- QuerySchema(TableSchema* tableSchema) is created by defining
+ "all-tables query asterisk" (see QueryAsterisk) item.
+- Connection: implemented and selectStatement() replaced queryStatement() because
+ not only "select" queries will be implemented.
+- QuerySchema::fieldsExpanded() convenient function added to expand query asterisks
+- KexiDataTableView uses QuerySchema even smarter
+- kexi/kexidb/tests moved to kexi/ to avoid curcular deps
+
+2003-10-12
+- Connection::isDatabaseUsed() fixed
+- Connection: isConnected() is substituted with isDatabaseUsed() in some cases
+ and checkIsDatabaseUsed() is substituted with checkConnected() in many cases.
+- kexidb/tests/newapi tableview now uses KexiDataTableView
+- Connection:: many overloads like queryStatement( KexiDB::QuerySchema& querySchema ) or
+ executeQuery( QuerySchema& query, uint cursor_options = 0 ) added
+- KexiDataTableView: simplified: setDataSet() -> setData(); record -> cursor
+
+2003-10-11
+- Transaction::isNull() fixed
+- now tables creation seems to be ok ('tests/newapi sqlite tables' works)
+- sources synced again with win32 target
+- kexidb/parser and kexidb/tests/parser ported to win32
+- KexiDB::Expression introduced
+- isSystemObjectName() now checks for "kexi__" prefixes
+- checks on create table: if name is not system, if table is not empty, if fields are not system
+- KexiDB::Reference introduced
+- KexiDB::IndexSchema now contains informations about multiple related Reference objects
+- kexidb/tests/newapi : now tests are functions, so can be called as subtests if needed;
+ gui tests group added; tableview gui test introduced
+
+2003-10-10
+- FIX: creating kexidb system tables schema objects on useDatabase()
+- KexiDB::Object::debugError() added for convenience
+- Object: serverErrorMsg(), serverResult(), serverResultName(),
+ drv_clearServerResult() added
+- virtual Q_ULLONG Connection::drv_lastInsertRowID() added - returns unique
+ identifier of last inserted row.
+- DriverBehaviour::AUTO_INCREMENT_FIELD_OPTION added; autoinc field's option is now
+ used in "CREATE TABLE" statement building; bool SPECIAL_AUTO_INCREMENT_DEF added
+- fixed crash on mass transactions closing during closeDatabase()
+- added tables creation subtest to kexidb/tests/newapi
+- SQLite* classes: last operation's result is now stored for later checking
+
+2003-10-09
+KexiDB::Connection:
+- "select * from ..." substituted by "select <field name(s)> from ..."
+ where possible, so after future kexi_* tables change it will still work.
+- list of internally used kexi__* tables available with new static method
+- bool TableSchema::isKexiDBSystem() added for tables that are internal for KexiDB
+- bool SchemaData::isNative() added for objects that are native, ie. not contain additional
+ metadata information.
+
+- Connection::destroy() instead of Connection::disconnect() should be called
+ from xxxxConnection subclasses.
+- ~TableSchema calls Connection::removeMe() so it is removed from tables list if needed
+- ordering in Field object added
+- quite hacky and thus effective insertRecord() overloads added
+- some schema is added to kexi__* tables on createTable()
+
+2003-10-07
+- KexiDB::QueryAsterisk class introduced to define select queries with asterisks, like
+ "staff.*" in "SELECT staff.*, cars.model from staff, cars WHERE staff.car = cars.number"
+ (1st ttype) or "*" in "SELECT * from staff, cars WHERE staff.car = cars.number" (2nd type)
+- Query schemas storage added
+- using include path returned by 'mysql_config --mysql_config' as
+ is instead of eating mysql suffix
+- Transaction::null and isNull() added
+- Connection: Simulated AutoCommit feature implemented,
+ createTable() added - it uses autocommit if enabled.
+- Driver: DriverBehaviour member added - Detailed definition
+ of driver's default behaviour.
+
+2003-10-06
+-KexiDB::QuerySchema:
+ - field aliases added and checking if there is alias
+ - list of tables used in query added
+ - debug() updated
+
+2003-10-05
+-KexiDB::
+ - fields() now offered by fieldlist
+ - Field::Field( ) args order fixed (compiler didn't complain..)
+ - TableSchema: primary idx setting added
+ - TableSchema: autogenerated indices are added implicity on addField()
+ - IndexSchema: unique flag added, primary flag is now dependend on this
+
+2003-10-04
+-KexiDB:: addedd better access to creating schemas
+
+2003-10-03
+-KexiDB:: API extended for db transactions
+ - Transaction is now implicity shared container for storing transaction handle,
+ TransactionData is used as internal driver-dependent storage
+ - former Transaction class is now TransactionGuard
+ - "default transaction" added to Conenction
+ - SingleTransactions, MultipleTransactions and NestedTransactions added to KexiDB::Driver::Features
+ - autoCommit option added to Connection (can use both driver-specific feature ans simulate),
+ (not fully implemented yet)
+ - active transactions are rolled back on database close
+ - heavily commented :)
+ - index.* moved to indexschema.*
+
+2003-10-02
+-KexiDB::
+ - IndexSchema now inherits also from SchemaData (its additional
+ properties will be used at least in gui)
+ - IndexSchema now points to a table that contains it, not connection
+ - fixed owning rules for FieldList: not only TableSchema owns its fileds,
+ while QuerySchema, IndexSchema not
+ - more methods moved to const
+ - QueryData offers now information about its parent table
+
+ - some record inserting introduced in Connection
+ - yet more methods moved to const
+ - KexiDB version info added (both as functions and defines)
+ - global definitions file added
+
+2003-10-01
+-KexiDB::
+ - Table and query schemas now can be looked up using its id or name using Connection::tableSchema()
+ and Connection::querySchema()
+ - Connection::querySingleRecord() added for easy retrieval single (first) record
+ from query's result set
+ - Cursor::storeCurrentRecord(RecordData &data) added: Puts current record's data into data
+ (makes a deep copy).
+ - update after moving query.*, table.* file to queryschema.*, tableschema.*
+ - Cursor buffering-related members moved from SQLiteCursor to Cursor
+ - Cursor::moveFirst() fixed for buffered cursors - reopen() is now not needed
+ - SQLiteCursor::drv_getNextRecord() we don't try to fetch records when
+ we know that buffer is already fully loaded.
+- Uff, It is first time since ~3 moths I can see kexi main window after kexiDB change
+
+2003-09-28
+- KexiDB:
+ - Table, Query and Index classes renamed to TableSchema, QuerySchema and IndexSchema
+ - query schemas storage introduced
+ - kexi__table 'system table' renamed to kexi__objects and for it now will be used for
+ storing also other types of objects, eg. queries. Some properties added to this table.
+ - kexi__querydata added for query schemas
+ - kexi__db added for storing database properties, e.g. kexidb version
+
+2003-09-26
+- new kexidb/newapi test added: dbcreation
+- KexiDB::Connection::databaseExists() has now arg. that allows ignoring error messages (deflt)
+- params for createDatabase() and useDatabase() are now optional for more convenient
+ use file-based drivers
+
+2003-09-24
+bool buffering_completed added to SQLiteCursor: true if we have already all
+ records stored in the buffer
+
+2003-09-18
+- Buffered KexiDB::Cursor type introduced, for this type KexiDB::Cursor::isBuferred() is true;
+ this is "test" implementation for SQLiteConnection only [INCOMPLETE].
+ Cursor options introduced (Cursor::options()). Cursor's buffered flag if one these options.
+ Options are now optional parameters both for protected Coursor's constructor and for
+ Conenction::executeQuery() and Conenction::prepareQuery()
+- virtual bool Connection::drv_databaseExists( const QString &dbName ) added for optional
+ reimplementation. It is a pair with drv_getDatabasesList(), both are used in databaseExists() now.
+ See comments for details.
+- Connection::useDatabase(dbName) now do not allows dbName that do not exists,
+ while for single-db-per-connection-engines (eg. file-based engines) Connection::databaseExists()
+ returns true only for single db name (eventually URL).
+- for file drivers: file existence checks moved to databaseExists()
+- in Conenction::useDatabase(dbName): closeDatabase() is called before other database should be used,
+ if there already was opened database.
+- Connection::drv_getDatabasesList() has now default implementation that returns empty list.
+- sources in drivers/mySQL/ updated just to work with kexidb API changes
+- Connection::drv_databaseExists(dbName) is now by default just checking if dbName
+ is on the db names list
+- Some code for bufering added - forward moving with buffered cursors looks
+ better.
+
+2003-09-17
+- KexiDB::Query introduced: Table::name() and Query::name() moved to FieldList.
+- Field::ListIterator FieldList::fieldsIterator(), Field::FieldList::debug() and clear() added
+- ERR_CURSOR_RECORD_FETCHING added
+
+TODO: add
+-static cursor types
+-scrollable cursor types
+
+2003-09-16
+- KexiDB::DriverManager: driver names accepted by KexiDB::DriverManager::driver(name)
+ and KexiDB::DriverManager::serviceInfo(name) methods are now case insensitive.
+- 3rdparty/kexisql: added files needed by win32 target
+- removed kexidb/drivers/sqlite/driver directory: now we include sqlite.h from 3rdparty/kexisql/src/
+- MySqlDriver's service name is "kexidb_mysqldriver", export macro is KEXIDB_MYSQL_DRIVER_EXPORT;
+ win32 compilation fixed.
+
+2003-09-15
+- KexiDB::Cursor:
+ - movePrev(), bof() added;
+ - drv_getRecord() splitted to drv_getNextRecord(), drv_getPrevRecord()
+ - fieldCount() added, not fully works yet
+ - on open() we have always bof()==true and eof()==false
+ - simplification: now bof() is computed as m_at==0
+ - we are internally counting records from 1 and externally from 0
+ (what is visible using at()).
+ - m_at and thus at() has now Q_LLONG type
+
+2003-09-14
+- KexiDB::Object::setErrorMsg renamed to setError
+- KexiDB::DriverManager is now just a container for one reference
+ to Internal Library's Driver Manager, so all you are expected to do is to remember
+ about deleting KexiDB::DriverManager instance in your app.
+ You can create many KexiDB::DriverManager objects.
+- KexiDB lib now handles automatic deletion of drivers after last
+ KexiDB::DriverManager object deletion (thus refcount==0).
+- tests/newapi now looks more simply at the end of main.cpp file :)
+TODO: do the same with DriverManager as Driver
+- KexiDB::Connection::tableSchema() updated for new KexiDB::Connection::executeQuery() semantic.
+- DriverManager::self() no longer needed
+TODO: add fieldCount() to Cursor
+
+2003-09-13
+KexiDB:
+- Connection::prepareQuery() added for creating not opened cursors.
+- Connection::executeQuery() now automatically opens the query with created cursor.
+- Connection::destroy() convenient method added for obligatory use
+ in Conenction subclasses' dctors. destroy() just disconnets() and takes the Connection
+ object out of parent (Driver).
+- SQLiteConnection updated for above requirements
+- cursors and tabledefs are now deleted not in ~Connection but
+ on every Connection::disconnect().
+- kexidb/tests/newapi also compiles with qmake and runs on unix
+TODO: add auto removing Drivers on DriverManager deletion.
+
+2003-09-12
+Great day for KexiDB in cvs:
+- Old KexiDB moved with actual Kexi version to non-default old_db_api branch.
+- Current (HEAD) now contains new kexidb/ dir for with API
+- kexidb/tests/ added to cvs with one 'newapi' test
+
+2003-09-11
+- Index::List and Field::List are now QPrrList<Field>, so Field objects are now stored as a pointers,
+ no as a values. These are owned by Table objects.
+
+2003-09-10
+- Html Doxygen-generated docs for KexiDB module configured
+- KexiDB::Index introduced - definition of single table index (1 or multi-field)
+- KexiDB::FieldList introduced - list of fields; base class for KexiDB::Index, KexiDB::Table
+TODO: add KexiDB::Query and use this object eg. as argument for Cursor* Connection::executeQuery()
+
+2003-09-09
+kexidb:
+- Every Connection object stores cursors opened with it. On Connection destruction,
+ cursors are deleted automatically. The same with table schemas within Connection object.
+ QPtrDict is used for storing cursor objects.
+- Every Driver object stores connection using QPtrDict, not QPtrList.
+- Driver::isSystemObjectName(), Driver::isSystemFieldName() are case insensitive.
+
+TODO: PROPOSAL: add compile-time option for kexidb to be kde-independent.
+ This could be quite easy.
+
+2003-09-08
+kexidb:
+- QStringList Driver::systemNames() is now bool Driver isSystemObjectName()
+ -- Checks system object names,
+ eg. build-in system tables that cannot be used by user,
+ and in most cases user even shouldn't see these. Specific for
+ a given driver implementation.
+ For SQLITE driver system object names are these with prefix "sqlite_"
+- QStringList isSystemFieldName( n ) added: return true if n is a system field names,
+ build-in system fields that cannot be used by user,
+ and in most cases user even shouldn't see this. Specific for
+ a given driver implementation.
+ For SQLITE driver this has one system field name: "_ROWID_" (see CHANGELOG-Kexi-SQLITE).
+- QString Connection::valueToSQL( const Field::Type ftype, QVariant& v )
+ added for encoding values for sql queries
+- Connection::createTableStatement(): unique, default and not null flags are now added.
+
+TODO: also fields with UNIQUE flags should cause KexiDB::Table to have appropriate KexiDB::Index
+
+2003-09-06
+- new KexiDB is stored in "kexidb" subdir, old api in "kexiDB", on win32 in "kexidb_old"
+- virtual QString escapeString(const QString& str)
+ virtual QCString escapeString(const QCString& str) added for Connection
+- Field::setDefaultValue(const QCString& d) added. Default values are stored in 'f_default Text'
+ field of kexi__fields table and are string-encoded there.
+
+2003-09-04
+- kexidb CHANGES FROM JOWENN: No ; after namespac, some d Pointers,
+ littlebit different includes, littlebit modified destructors
+
+2003-09-01
+ KexiDB::
+ - Cursor:: moveFirst(), moveLast(), moveNext(), eof(), at(), QVariant value(int i)
+TODO: Cursor::value(int i) should use schema information to convert types of values
+ (now all values are strings)
+ - Connection::tableSchema() - returns schema of given table retrieved
+ using connection's system kexi__* tables
+ - Connection::deleteCursor()
+ - Driver::sqlTypeName(int id_t) - returns sql type name for given driver
+ - static QString Driver::defaultSQLTypeName(int id_t) - returns sql type name for given
+driver
+ (usable when we do not have Driver instance yet)
+ - Table::debug()
+TODO: add default value storage
+
+2003-08-29
+- KexiDB::Cursor class, Cursor* KexiDB::Connection::executeQuery(statement) creates cursor
+- KexiDB::Connection::drv_executeSQL(): executes query \a statement, but without returning resulting
+ rows (used mostly for functional queries).
+
+2003-08-28
+- KexiDB::Transaction helper class introduced, transaction-related methods added for KexiDB::Connection.
+- drv_createTable() and createTableStatement() moved up to KexiDB::Connection
+
+2003-08-27
+- KexiDB::Table, KexiDB::Field classes introduced.
+ New DB-storage design started: kexi__table, kexi__fields system tables
+ (for db schema storage).
+
+2003-07-28
+- KexiDataTableView::tableSize() removed (wasn't this unnecessary?)
+
+2003-07-26
+- KexiRelationViewTableContainer: width is now based on maximum width of
+the field name or header name.
+- KexiDataTable do not stores members like KexiDB or KexiDBRecordSet bu
+uses these from KexiDataTableView.
+
+2003-07-25
+- KexiDialogBase now also inherits from KXMLGUIClient for easy actions management.
+ Do not make KXMLGUIClient subclass but just call setXMLFile() in KexiDialogBase:: subclasses' ctor
+ and add actions to KexiDialogBase::actionColection().
+- KexiRelationDialog:
+ - now uses KXMLGUIClient to better utilize its actions
+ - right-click context menus fully works
+ - 'hide selected table', 'open selected table' actions added (unimpl.), kexirelationsview.rc
+added.
+- Main Kexi menu bar little more standarized: 'Edit' menu added, 'View' menu moved just after Edit menu.
+TODO: implement selected table hiding
+TODO: implement selected table opening
+TODO: add drag from browser
+
+2003-07-24
+- --open command line option added for automatic opening objects at startup, this will help in our
+ testing (see 'kexi --help' or main.cpp for details).
+- KexiDialogBase got sizeHint() now that make it fit to qworkspace if it is a in-workspace window.
+- virtual QString KexiProjectHandler::groupName() added that offers store plurar form of part name,
+ while name() offers singular form.
+- KexiRelationViewTable:
+ - list items (fields) without icons are aligned using transparent icons;
+ - moving TableViews back from outside of scroll view area automatically shrinks scroll view's
+ area to smallest possible size
+ - field that we drag over now is highlighted
+TODO: fix KListView::viewportPaintEvent() like in KexiRelationViewTable::drawItemHighlighter()
+ and commit to cvs (kdeui)
+- KexiRelationViewTableContainer got now focus/unfocus/z-order functionality. Colors of table headers
+ are consistent with focusing and OS settings
+TODO: fix connection lines painting
+
+2003-07-23
+- KexiTableView:
+ - KexiTableViewPrivate d-pointer added with "kexitableview_p.h", "kexitableview_p.cpp"
+ - Fixed repainting empty areas (background) in KexiTableView: QColorGroup::Base color is used.
+ - editableOnDoubleClick(), setEmptyAreaColor() added
+ - For Qt::Key_Menu key, context menu is show below the current cell, if available.
+- KexiDialogBase reorganized. Now it offers more generic properties and functionality,
+ so subclasses can be more cleanly written and consistent with API and behaviour.
+- Relations window is registered with 'kexi/relations' id,
+ while relations window embedded in query designer has id 'kexi/query/<query_name>/relations'
+TODO: implement sizeHint() for KexiDialogBase subclasses
+TODO: make open, create, delete and edit functions in KexiProjectHandlerProxy subclasses more generic
+
+2003-07-22
+- scrollbars enabled in KexiWorkspaceMDI
+
+2003-07-21
+- Kexi project 'kexi_doc' icon added, on win32 it is added to kexi.exe resources (id=1) and registered for
+ .kexi extension on installation.
+TODO: add "New document" (empty or from template) command-line option, so it can be registered
+ as "shell/new" in HKCR registry key on win32.
+TODO: like above: "Print" and "Print to"
+
+2003-07-18
+- " " prepended to Project Browsers' list items' texts for better look (maybe add this feature
+ to KListView or make its generic subclass?)
+- Some fixes with text positioning in tableview cells: float and date type y-offset,
+ date type editor frames removed
+TODO: maybe optionally use KDateWidget (this needs to extend and improve this class)?
+ QDateEdit is good enough (but this need to follow date format for locale or settings
+ using QDateEdit::Order, etc.).
+TODO: fix KDatePicker (in kdeui): accepting with Return key or dblclick, and setting focus.
+- KexiTableEdit has now QColorGroup::Base (usually: white) background
+- KexiInputTableEdit has now some space on the left, so strings look better.
+TODO: add default hint for columns widths, based on type of field
+
+2003-07-17
+- actions for Form, Kugar, Relations, Script Parts updated using KexiPartItemAction,
+ KexiProjectHandlerProxy::groupContextMenu() and itemContextMenu()
+ like in Tables and Queries' Parts
+- kexikugarhandlerui.rc moved to kexi/data/
+- 'Other Licenses' submenu made in 'Help' menu, 'Report Generator Licensing'
+ entry moved here from Kugar Part's popup menu
+TODO: move this submenu after 'Error report' Entry (requires changes to koffice_shell.rc).
+- kexirc added
+- added option for KexiBrowserItem to be sorted in FIFO order (top level items - by default,
+ others are sorted in alpha order). Visible Parts' order is now specified (by library name)
+ in the Kexi's main config file "kexirc" ([Parts]/Order), because KTrader sorts parts
+ by name in aplha order. Unspecified Parts are appended at the end of list.
+ This order setting is loaded and used on parts loading (KexiProject::loadHandlers()).
+
+2003-07-16
+- fixed registering (registerAs) for query designer's windows,
+ query from project browser removing fixed
+- project browser's groups items (tables, queries,..) are now non-selectable
+ as these are rather special constant containers
+- added convenient hidden(), shown() signals to KexiDialogBase
+- added KexiDialogBase::plugToggleAction(KToggleAction *toggle_action) for syncing window
+ visibility with toggle action's state
+
+2003-07-15
+- Kexi/win32 synced with cvs again after plugins/ rearrangement.
+- New Kexi icon updated for win32
+- menubar and popupmenu entries in Query Part merged using KexiPartItemAction (new KAction subclass);
+ The same for Tables Part. KexiPartPopupMenu now collaborates with KexiPartItemAction to reuse its
+ action's information (avoid redundancy).
+TODO: add delete_item action icon (equal "button_cancel" in crystalsvg) to the koffice/actions icons
+TODO: like above, add "script" icon to kexi/actions ("moc_src" is used)
+
+2003-07-01
+- Some table view text positions painting fixes for x11, for dbl and int type, editor's position fixed.
+TODO: add left margin for cells' text (at least for x11)
+
+2003-06-28
+- Project Wizard: fixed align for big picture, some widgets availability fixes,
+big picture moved to KexiCreateProjectPage superclass.
+- KEXI_ADD_EXAMPLE_ENGINES compile-time option added: if set, example engines will be added
+ to the drivers list in the Project wizard
+
+2003-06-22
+- Alter Table Window: info about not implemented rows removal added for KEXI_NO_UNFINISHED option
+ Redundant label with table name removed from top of the window.
+ Double click in KexiTableView reenabled.
+ PropertyEditor and KexiTableView size hints little fixed.
+- KexiTableView: now clicking outside of a grid do not activates any cell;
+ (crash fixed) sorting disabled while in-cell editor is visible
+- "Project properties" function disabled for KEXI_NO_UNFINISHED option
+
+2003-06-21
+- automatically set focus inside Alter Table Window and show cursor
+- fixed crash on entering data in 2nd, 3rd, etc. columns in table added during current session
+ (table def struct wasn't created for new table)
+
+2003-06-17
+([JK] - fix proposed by Jakub Kubica)
+[JK]- (in kofficecore): KoMainWindow::KoMainWindow: KStdAction::configureToolbars disabled:
+TODO: enable this when configure window will work
+[JK]- "Settings>Configure Kexi" action temporary disabled for KEXI_NO_UNFINISHED option
+TODO: reenable this!
+[JK]- "Save password" in authorization page of the Project wizard removed for KEXI_NO_UNFINISHED option
+TODO: reenable this!
+- <ActionList name="toolbarlist"> line removed from koffice_shell.rc (this removed redundant actions)
+[JK]- now, after failed db connection Project wizard do not allow moving to DB selection page
+- now it's not allowed to close alter table window for a table that do not contain fields
+ (message box is displayed then). The same is when user try to delete table (without fields)
+ that is currently opened
+TODO: allow the user to give up and delete this table
+
+
+2003-06-15
+- when KEXI_NO_UNFINISHED option is set, msgbox information is presented for unimplemented actions
+- kexidb: added information about if database (given by name) is considered as system db
+- projectwizard: only non-system databases are visible on the db list; db icon added
+- propertyeditor in altertable window has narrower 2nd column
+
+2003-06-14
+- inserting queries into list fixed
+- added KEXI_NO_FILTER_DLG compile-time option for incomplete filter dialog in query editor
+- added KEXI_NO_UNFINISHED compile-time option for disabling unfinished features
+- KexiTableView::DeletionPolicy is now (mostly) used for choose KexiTableView deletion method
+TODO: KexiTableView::AskDelete flag is not implemented
+TODO: do the same with KexiTableView::AdditionPolicy
+- auto popup menu is added for KexiTableView when KexiTableView::DeletionPolicy != NoDelete
+ or the same is for KexiTableView::AdditionPolicy, so no more external (e.g. in KexiDataTable)
+ popup menu creation is required for just addition and deletion actions.
+- fixed row deletion in query designer's table view
+- fixed subwindows sizes: now these are resized to the workspace size
+- tableview's cells text positioning fixed, synced with editors, cells size fixed,
+ numeric cells' editors are now right-aligned
+
+2003-06-13
+- Fixed crash on altering newly created table
+- (temporary fix) MySqlRecord is now always set to r-w mode
+TODO: MySqlRecord: get readonly flag from the database
+TODO: IMPORTANT: Kaxi must automatically add primary key it is not added by user,
+ or at least propose this for user before saving altered table. If given table does not conatin
+ a PK, then it will be readonly.(or at least removing given row wont be possible if this row
+ is duplicated)
+ CURRENT STATE: removing rows works only for table having PK
+- data table window's caption fixed
+- Control+Delete shortcut added for current record removing
+- fixed removing vertical header item after current record removing
+- KexiTableEdit now uses layout for proper displaying its Editor
+TODO: KexiTableEdit shouldnt have subwidget like KLineEdit but its subclasses should
+ inherit also from given editor widget (eg. from KLineEdit)
+TODO: KexiTableView's vertical header isn't updated after several actions
+- windows now have icons == KexiProjectHandler::itemPixmap()
+- normal size for relations dialog's combobox
+TODO: change method for adding tables to relations
+- KexiDialogBase subclasses now registers to view with
+ identifier == KexiProjectHandlerItem::fullIdentifier(), not caption or title
+- KexiRelationDialog is now registered to view as "kexi/relations",
+ so relations window is unique per view
+TODO: disable altering when the same table is opened for data viewing
+- avoid opening both alter view and data view for the same table
+- avoid creating multiple tables with the same name
+TODO: other objects too: move this to common method
+TODO: avoid creating/altering table with no fields
+
+2003-06-12
+- Table View Editor keyboard actions fixed, double type validating fixed,
+ fixed Enter, Delete keys, added F2 key, disabled non-printable unused keys
+TODO: use QValidator everywhere here!
+- after opening KexiDataTable focus is set inside automatically
+
+2003-06-11
+- Kexi objects have now titles - user-visible text instead low-level names
+
+2003-06-09
+- calling KexiView::finalizeInit() moved to KexiProject, actions for toggling
+dock windows visiblity fixed, simplified code
+- some icons, actions fixed
+- KexiProjectHandlerItem redesign
+
+2003-06-05
+- relation view's fixes and redesign
+
+2003-06-04
+- projectWizard: double click on dbases list opens selected db
+- navigator: KEXI_NO_MULTI_TABS option added for disable showing redundant tabs
+
+2003-05-28
+- fixed problem with project window's increased width while clicking on the
+ tabs; multitabbar fonts improvements; code cleanups
+
+2003-05-27
+- i18n-pl finished for ui and servicenames
+- kexi can load and save documents
+
+2003-05-17
+- kexi has icon on win32
+- kexi installer
+
+2003-05-08
+- kexi cvs merge:
+ KPath removed (qt/win32 will be patched instead)
+- libkexifilters added
+- core/kexisettings, core/kexiworkspaceSDI kexiDB/kexidbupdaterecord ported
+
+2003-04-28
+- fresh cvs and win32 version merge
+- kexifilter added
+
+2003-04-22
+- partial (example) polish l18n for GUI
+
+2003-04-15
+- keximysqlinterface lib. ported
+- updated servicetypes/kexidbdriver.desktop installed
+- mysqlinterface.desktop removed: valid is keximysqlinterface.desktop
+
+2003-04-12
+- libraries ported: kexipart kexihandler_form kexihandler_query kexihandler_relation
+ kexihandler_table kexiprojectwizard
+
+- Kexi running with projectwizard (no db avaliable although)
+
+2003-04-07
+- now Kexi has visible menu, toolbar and 'welcome' dialog
+
+2003-04-02
+- application's start process is simply hacked inside main() instead of inside KoApplication::start()
+ so, Kexi application running on screen for the first time on win32
+
+2003-04-01
+- kexi runs but is invisible
+
+2003-03-31
+- KEXI_NO_PRINT=1 (temporary) disables printing functionality
+- kexiDB/kexidb.h: KexiDBDriver *m_currentDriver moved from public slots section to private
+- kexicore and kexidb libs ported
+- kexi at least now compiles (but crashes)
+
+2003-03-28
+- first touch on Kexi sources for porting
+
+2002-06-23, Sunday, 00:20:36 (Lucijan)
+- First Kexi commit, SVN revision #162554
+ details: http://websvn.kde.org/trunk/koffice/kexi/?rev=162554
diff --git a/kexi/doc/dev/INTERESTING b/kexi/doc/dev/INTERESTING
new file mode 100644
index 00000000..cbcba162
--- /dev/null
+++ b/kexi/doc/dev/INTERESTING
@@ -0,0 +1,29 @@
+----------------------------------------------------------
+ Interesting sources of information
+ - projects, docs, etc. that can help in Kexi development
+----------------------------------------------------------
+
+2003-10-06 js
+
+[SQL Translator and Text RecordParser]
+
+from README:
+ SQL::Translator is a group of Perl modules that converts
+ vendor-specific SQL table definitions into other formats, such as
+ other vendor-specific SQL, ER diagrams, documentation (POD and HTML),
+ XML, and Class::DBI classes. The main focus of SQL::Translator is
+ SQL, but parsers exist for other structured data formats, including
+ Excel spreadsheets and arbitrarily delimited text files. Through the
+ separation of the code into parsers and producers with an object model
+ in between, it's possible to combine any parser with any producer, to
+ plug in custom parsers or producers, or to manipulate the parsed data
+ via the built-in object model. Presently only the definition parts of
+ SQL are handled (CREATE, ALTER), not the manipulation of data (INSERT,
+ UPDATE, DELETE).
+
+http://search.cpan.org/src/KCLARK/
+
+Note: can be usefull for KexiDB develoment
+to see their parsers and converters
+
+----------------------------------------------------------
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);
diff --git a/kexi/doc/dev/advantages.txt b/kexi/doc/dev/advantages.txt
new file mode 100644
index 00000000..31e15607
--- /dev/null
+++ b/kexi/doc/dev/advantages.txt
@@ -0,0 +1,17 @@
+---------------
+Kexi Advantages
+---------------
+
+I. Over MS Access
+
+1. Data Entry
+1.1. Autonumber fields
+Autonumber fields are editable. On a new record inserting, you can skip entering a value in autonumber field but you can also enter any (unique) value on your own (unavailable in MSA). For existing records, you can also change the number in the field (unavailable in MSA).
+
+Automatically generated values for autonumber fields are only generated on new row inserting. If you cancel row inserting, no value will be generated. This allows you to keep counting consistent. In MSA autonumber's counter (sequence) is increased just when you start entering data of a new record.
+
+
+2. Data presentation
+2.1. Tabular data view
+Sorting by selected column is also available by simply clicking on the column.
+
diff --git a/kexi/doc/dev/alter_table_type_conversions.ods b/kexi/doc/dev/alter_table_type_conversions.ods
new file mode 100644
index 00000000..5719d5b1
--- /dev/null
+++ b/kexi/doc/dev/alter_table_type_conversions.ods
Binary files differ
diff --git a/kexi/doc/dev/auto_update_service.txt b/kexi/doc/dev/auto_update_service.txt
new file mode 100644
index 00000000..eb9d6734
--- /dev/null
+++ b/kexi/doc/dev/auto_update_service.txt
@@ -0,0 +1,29 @@
+Installation / Update Service for QKW / KDE and apps
+
+Jaroslaw Staniek
+started: 2003-07-22
+
+OOPL-only: Create Update Service using kdecore/KMD5 and bzip2 lib. This would be used to automatic
+updates for QKW and Kexi packages at the end-user side. Two options:
+- offline update from local archives
+- online update from the company ftp resources
+Benefits:
+- Updating would not longer require uninstal+install scheme.
+- Settings could be stored safer between updates.
+- User could be notified about new features and fixes installed.
+- User could add/remove components.
+- Everything using consistent gui on all platforms.
+- 'Batch/net installation' options for enterprises.
+- Smart 'Fix installation' option.
+- Possibility of collecting user settings and infos about installations. These can optionally transferred
+to developers with a bug report to help find a bug context.
+- This is a step for making KDE apps packages distribution-neutral on Linux.
+Notes:
+- The Service guis and backend should be build from two parts:
+ - First: qt-only that is used to initialize the process and check the system, independently
+ from existing KDE sybsystem.
+ - Second: used when we already know we already have a working KDE subsystem. This part can use
+ KConfig, KLibLoader, etc. to change the KDE settings.
+- To be able to do this, KDE needs get more guidelines for distributors of its binaries.
+- To be usable for commercial use, there should be one packaging system for KDE
+ (maybe on top of tgz/rpm/deb/win32/mac?), "Meta Packaging".
diff --git a/kexi/doc/dev/compile_time_options.txt b/kexi/doc/dev/compile_time_options.txt
new file mode 100644
index 00000000..220cbca1
--- /dev/null
+++ b/kexi/doc/dev/compile_time_options.txt
@@ -0,0 +1,158 @@
+Compile-Time Options for Kexi
+-----------------------------
+
+(c) 2005-2007, Jaroslaw Staniek, <js @ iidea . pl>
+
+
+See http://www.kexi-project.org/wiki/wikiview/index.php?AdvancedBuildNotes
+for explanation how to conveniently set compile-time options.
+
+List of available options
+-------------------------
+
+* KEXI_STANDALONE
+Type: defined/undefined
+Default: -
+Description: Can be defined globally in kexi_global.h.
+Defined for standalone Kexi releases (without KOffice, e.g. 1.0) and undefined
+for releases bundled with KOffice,. e.g. 1.1.
+
+* KEXI_NO_UNFINISHED
+Type: defined/undefined
+Default: defined in kexi_export.h if KEXI_OPTIONS is undefined
+Description: If defined, unfinished Kexi features (for example a few features
+within Table Designer) will be hidded for Kexi, to avoid user confusion.
+
+* KEXI_SHOW_UNIMPLEMENTED
+Type: defined/undefined
+Default: undefined
+Description: If defined, forces to show menu entries and dialogs just to give
+impression about development plans of Kexi Team.
+Only recommended for test/development versions.
+
+* KEXI_FORMS_SUPPORT
+Type: defined/undefined
+Default: defined in kexi_export.h if KEXI_OPTIONS is undefined
+Description: If defined, form plugin will be loaded; else: it will be
+not loaded even if is compiled.
+
+* KEXI_REPORTS_SUPPORT
+Type: defined/undefined
+Like KEXI_FORMS_SUPPORT macro, but for enabling report plugin.
+Default: undefined
+
+* KEXI_SCRIPTS_SUPPORT
+Type: defined/undefined
+Like KEXI_FORMS_SUPPORT macro, but for enabling scripts plugin.
+Default: undefined
+
+* KEXI_KROSS_SUPPORT
+Type: defined/undefined
+If KEXI_SCRIPTS_SUPPORT is defined, this option defines that
+Kross, located at kexi/scripting{core|plugins}, should be
+compiled and used for scripting.
+Default: same as KEXI_SCRIPTS_SUPPORT
+
+* KEXI_NO_MIGRATION
+Type: defined/undefined
+Default: undefined
+Description: If defined, data/project migration support for Kexi
+(available in Tools>Migration menu) will be disabled; else: support will
+be enabled.
+
+* KEXI_CUSTOM_HARDCODED_CONNDATA
+Type: defined/undefined
+Default: undefined
+Description: If defined, you are forcing to add custom hardcoded connections
+to the KexiMigration::importWizard constructor and KexiStartupHandler::init().
+All you need is to create your own private "custom_connectiondata.h" file
+in kexi/ directory, which will be included into Kexi source code and fill
+it with code providing one or more hardcoded connections.
+Example custom_connectiondata.h file for adding a single connection data:
+---- custom_connectiondata.h, cut here -----
+ conndata = new KexiDB::ConnectionData();
+ conndata->connName = "My Custom Pgsql Connection";
+ conndata->driverName = "postgresql"; //can be also "sqlite3", "sqlite2", "mysql"
+ conndata->hostName = "myhost.example.com";
+ conndata->userName = "john";
+ conndata->password = "secret";
+ Kexi::connset().addConnectionData(conndata); //always call this to add
+----- cut here ------------------------------
+Notes:
+- security warning: if you provide your passwords in your code, it will
+ be available in compiled binaries, so think twice before providine the binaries
+ for somebody else. The custom_connectiondata.h file will not be available
+ in CVS, so don't worry.
+- this hardcoding will be removed when full handling of connectiondata arrives.
+- conndata is predefined as: KexiDB::ConnectionData* conndata;
+- See KexiDB::ConnectionData deocumentation for more information.
+- you can assign KUser().loginName() for username if you want to get current
+ login.
+
+* KEXI_USE_GRADIENT_WIDGET
+Type: defined/undefined
+Default: undefined
+Description: If defined, KexiGradientWidget is used as form's background.
+Currently disabled due to problems with performance and child widget's palettes.
+
+
+* KEXI_NO_SUBFORM
+Type: defined/undefined, temporary
+Default: undefined
+Description: If defined, subform widget will not be available
+
+* KEXI_NO_AUTOFIELD_WIDGET
+Type: defined/undefined, temporary
+Default: undefined
+Description: If defined, atofield (KexiDBFieldEdit) widget will not be available,
+nor dragging fields from "data source" will be available
+
+* KEXI_NO_IMAGEBOX_WIDGET
+Type: defined/undefined, temporary
+Default: undefined
+Description: If defined, image box (KexiImageBox) widget will not be available
+
+* CUSTOM_VERSION
+Type: defined/undefined
+Default: undefined
+Description: Defined means Kexi version compiled for standalone distribution
+with some minor vendor-specific tweaks. Used for OOPL version.
+
+* KEXI_DEBUG_GUI
+Type: defined/undefined
+Default: defined (but should be undefined for final releases)
+Description: If defined, showInternalDebugger=true (in [General] group)
+can be specified to display KexiDB Debugger.
+In the future the window will be probably used for debugging other features
+like scripts or macros. This option is useful for Kexi Developers.
+
+Also shows additional "Show Form UI Code" action in form's design mode.
+This is useful for debugging: after executing the action,
+a dialog with current (after changes) and original form's
+GUI XML code will be presented in a tabbed dialog, so you can compare what changed
+and look for possible problems. The "current" XML code will be saved when "save"
+action is executed. TODO: it will be merged with Internal Debuger window.
+
+* KEXI_DB_COMBOBOX_WIDGET
+Type: defined/undefined
+Default: undefined
+Description: Defined means Kexi offers combo box form widget.
+
+* DB_TEMPLATES
+Type: defined/undefined
+Default: undefined
+Description: Defined means Kexi offers "Templates" in the startup dialog.
+
+==== Obsolete, don't use ====
+
+* KDOCKWIDGET_P
+Type: defined/undefined
+Default: undefined
+Description: If defined, enables a hack for better handling property editor's
+panel within KexiMainWindowImpl object.
+
+* KEXI_OPTIONS
+Type: defined/undefined
+Default: undefined
+Description: Define this if you want override default compile time options
+to use any of the options described below.
diff --git a/kexi/doc/dev/kexi_alter_table.txt b/kexi/doc/dev/kexi_alter_table.txt
new file mode 100644
index 00000000..4a6c851e
--- /dev/null
+++ b/kexi/doc/dev/kexi_alter_table.txt
@@ -0,0 +1,110 @@
+-----------------------
+KEXI ALTER TABLE ISSUES
+-----------------------
+
+1. PROBLEMS
+- different databases have different set of altering capabilities
+ (SQLite has no table altering capabilities at all; re-creation is needed:
+ this has high cost in time and disk space for large tables)
+- we need to collect every detailed change made in Table Designer and apply
+ these changes to existing table schema
+- in the case when a table is already filled with data, we need to perform
+ tasks to move that data to a new structure,
+ especially if database engine can't do it for us or if the engine
+ wants simply drop the data because convertion cannot be done automatically
+- because of above issues, some work needs to be done at the client side
+
+2. What can be altered using ALTER TABLE:
+2.1 Inserting columns
+ (into a specified position)
+ ADD COLUMN <column_definition> [FIRST | AFTER <col_name> ]
+
+ (adding many colums at the end)
+ ADD COLUMN <column_definition>,...
+
+2.2 Adding constraints, indices
+ ADD INDEX [<index_name>] [<index_type>] (<index_col_name>,...)
+
+ ADD CONSTRAINT [<symbol>] PRIMARY KEY [<index_type>] (<index_col_name>,...)
+
+ ADD CONSTRAINT [<symbol>] UNIQUE [<index_name>] [<index_type>] (<index_col_name>,...)
+
+ ADD CONSTRAINT [<symbol>] FOREIGN KEY [<index_name>] (<index_col_name>,...)
+ [<reference_definition>]
+
+2.3 Altering column properties
+ ALTER COLUMN <col_name> {SET DEFAULT <literal> | DROP DEFAULT}
+
+ CHANGE COLUMN <old_col_name> column_definition [FIRST|AFTER <col_name>]
+
+ (rename column)
+ CHANGE <old_column> <new_column>
+
+ MODIFY COLUMN <column_definition> [FIRST | AFTER <col_name>]
+
+2.4 Dropping
+ DROP COLUMN <col_name>
+
+ DROP PRIMARY KEY
+
+ DROP INDEX <index_name>
+
+ DROP FOREIGN KEY <fk_symbol>
+
+2.5 Renaming a table
+ RENAME TO <new_tbl_name>
+
+
+3. How to perform table altering be re-creation:
+SQLite: (taken from Ticket 236: Add RENAME TABLE
+ - will be easier to work around missing ALTER TABLE
+ http://www.sqlite.org/cvstrac/tktview?tn=236,8)
+ Currently the recommended method to ALTER TABLE is:
+
+ 1. Create a temporary table.
+ 2. Copy all data from original table to temporary table.
+ 3. Drop the original table.
+ 4. Create a new table.
+ 5. Copy all data from the temporary table to the new table.
+
+For example, suppose you have a table named "t1" with columns
+names "a", "b", and "c" and that you want to delete column "c"
+from this table. The following steps illustrate how this could be done:
+
+BEGIN TRANSACTION;
+CREATE TEMPORARY TABLE t1_backup(a,b);
+INSERT INTO t1_backup SELECT a,b FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1(a,b);
+INSERT INTO t1 SELECT a,b FROM t1_backup;
+DROP TABLE t1_backup;
+COMMIT;
+
+If the table name also changes on altering, it's easier to do the
+altering (no temp. table needed):
+
+BEGIN TRANSACTION;
+CREATE TABLE t2(c,d);
+INSERT INTO t2 (c,d) SELECT a,b FROM t1;
+DROP TABLE t1;
+COMMIT;
+
+ If we had RENAME TABLE, we'd get easier alter table here:
+ 1. Rename original table to temp name.
+ 2. Create new table with ORIGINAL name.
+ 3. Move data from previous to new table.
+ 4. Drop previous table.
+
+4. PROPOSED ALGORITHM
+
+
+
+5. Useful documentation
+ http://dev.mysql.com/doc/mysql/en/ALTER_TABLE.html
+
+
+6. Document History
+2004-07-20 js
+ Started
+ Asked Richard Hipp about RENAME TABLE
+
diff --git a/kexi/doc/dev/kexi_final_mode.txt b/kexi/doc/dev/kexi_final_mode.txt
new file mode 100644
index 00000000..7435eff3
--- /dev/null
+++ b/kexi/doc/dev/kexi_final_mode.txt
@@ -0,0 +1,21 @@
+----------------------
+Kexi Final Mode Design
+----------------------
+
+1. Questions / Proposals
+
+a) Do we need to store information about needed plugins?
+ The proposal: it's enough as is: needed plugin is checked on object loading.
+
+b) Instead having redundant kexi__final, we can easily
+ use kexi__db with for the same purpose?
+
+c) More than one startup item would be useful.
+ The proposal: introduce property "startup_items" with a value of ordered
+ int-list of IDs: "32,543,324,532". This is also probably better than a list of names?
+
+d) startup-related property (for kexi__db):
+ - "startup_mode", value: "0"==Design Mode, "1"==Final Mode
+ (default satartup mode; can be overriden by --final-mode and --design-mode)
+ "0" is the default
+
diff --git a/kexi/doc/dev/kexi_general_import_export.txt b/kexi/doc/dev/kexi_general_import_export.txt
new file mode 100644
index 00000000..493349f7
--- /dev/null
+++ b/kexi/doc/dev/kexi_general_import_export.txt
@@ -0,0 +1,53 @@
+Main goals:
+ *) easy extendability
+ *) common look and feel for common tasks
+
+**************************
+
+Workflow importing :
+Step 1:
+ a)
+ Project->Import
+ -> File
+ -> Connection
+ ==> All types
+
+ b)
+ RMB item group in navigator->Import
+ -> File
+ -> Connection
+ ==> Only type of item group
+
+------
+File based:
+Step 2:
+ *) Lookup of any ImportSource plugin capable handling any of the possible types
+ *) Filling of mime filter list on file dialog page
+ *) Loading of plugin previously looked up for handing specified file
+Step 3:
+ *) Showing user all possible imports, eg all tables from a database
+ *) Allowing source specific configuration, eg range selection in a kspread document
+Step 4:
+ *) loading import GUI plugin for destination kexi mimetype
+ *) Allow the user to choose how to import
+ eg for tables: import new table,
+ append data to an existing table
+ column remapping, renaming, ...
+Step 5:
+ *) doing import
+ tables : handing the chosen configuration over to PiggZ's kexidb-import architecture
+ * : GUI plugin is responsible for importing directly or loading an additional, NON visual plugin
+Step 6:
+ *) DONE
+
+
+**************************
+
+Needed facilities:
+ Page Interface: Wizard<-> Source plugin
+ Wizard<-> Destination plugin
+ Source interfaces: Depending on destination type, eg table import interface, report import interface, ....
+ Needed for communication between Source and Destination GUI
+
+
+JoWenn
diff --git a/kexi/doc/dev/kexi_guidelines.txt b/kexi/doc/dev/kexi_guidelines.txt
new file mode 100644
index 00000000..7c2dfaba
--- /dev/null
+++ b/kexi/doc/dev/kexi_guidelines.txt
@@ -0,0 +1,35 @@
+PROPOSAL: Generic Guidlines For Kexi Development
+
+Jaroslaw Staniek
+started: 2003-06-25
+
+Idea 1
+Add tests for command line-only operations using kexiDB library.
+These tests can be later turned to command line options for Kexi what will allow non
+GUI operations o databases/projects.
+
+Idea 2
+Look at QSQL module from QT. E.g. there is efficient cursor feature (it works quite good with mysql).
+We have KexiDBRecordSet instead, but this is just the same thing.
+In fact many KexiDB features are compatible with QSQL.
+Focus on:
+- avoid loading all result data to client memory (fetch some records instead)
+- avoid blocking operations (do asynchronously as many things as possible)
+- avoid memory copying (at low level try to store original char* data instead of QString,
+ convert to QString only on data displaying)
+
+Idea 3
+Directories layout:
+dialogs/
++-altertable/
++-datatable/
++-queryeditor/
++-sqleditor
+
+widgets/
++-tableview/
++-datatableview/
+
+Idea 4
+Classes naming guidelines:
+'Dialog' suffix for all classes
diff --git a/kexi/doc/dev/kexi_i18n_guidelines.txt b/kexi/doc/dev/kexi_i18n_guidelines.txt
new file mode 100644
index 00000000..2be1490d
--- /dev/null
+++ b/kexi/doc/dev/kexi_i18n_guidelines.txt
@@ -0,0 +1,39 @@
+Kexi Translation Issues
+-----------------------
+
+Many things can be found here: http://i18n.kde.org/translation-howto/index.html
+
+
+Additional guidelines:
+
+#1. Let's not use "Do you really want" question. Use "Do you want" question instead.
+
+
+
+#2. Try do not overuse html formatting tags like <qt> in translated strings is you
+do not need to. Eg. rather use
+
+ "<qt>" + i18n("Connection error: <b>%</b>") + "</qt>"
+
+instead of
+
+ i18n("<qt>Connection error: <b>%</b></qt>");
+
+
+
+#3. Use " instead of ' , ie.:
+
+ i18n("Object \"%1\" not found.") --GOOD
+
+instead of :
+
+ i18n("Object '%1' not found.") --BAD
+
+Also, do not use <b> tags around "" ie.
+
+ i18n("Object <b>\"%1\"</b> not found.") --BAD
+
+
+--
+js@iidea.pl, july 2004
+
diff --git a/kexi/doc/dev/kexi_import.txt b/kexi/doc/dev/kexi_import.txt
new file mode 100644
index 00000000..be640ba1
--- /dev/null
+++ b/kexi/doc/dev/kexi_import.txt
@@ -0,0 +1,61 @@
+kexiImport proposal - piggz (www.piggz.co.uk)
+=============================================
+
+This is a proposal for some import functionality for kexi.
+As of this moment i have no idea how it will work, but ive
+been thinking and figured i should get something down in
+writing. Hopefully you will all improve on this and we can
+get something working.
+
+The way i see it we need to do a few things:
+
+1) A common api to different import systems
+ This would be similar in concept to kexidb drivers, but would
+ only provide limited, specific functionality
+
+2) DB specific classes that provide import functionality
+ for postgres, mysql firebird etc...
+
+
+For 1) we need to to:
+
+i) Connect to backend -|
+ |
+ii) Get list of databases | All this is already catered for in
+ | kexidb
+iii) Get list of tables -|
+
+iv) For a given table, get list of columns as stringlist
+
+v) For a given table/column combination, get extended information for
+ that column:
+
+ type
+ +--If a known kexi type then ok
+ +--If unknown then driver may be able to automagically map to suitable type
+ +--Ask the user what to do (map to type, convert column, drop column)
+
+ index (yes/no)
+
+ pkex (yes/no)
+
+ default value
+
+ Alot of this is already catered for in old kexi api, so maybe some
+ chunks fo code could be reused, though a bit of a rewrite is inevitable
+ to limit the functionality to the above
+
+Once the table/column information is available then a tableschema object would be
+created and standard kexidb api could create nescessary structure. For this there
+would be 2 modes of operation
+
+A) Structure will be created under new db name, and kexidb api would be used as
+ normal
+
+B) Structure will be created in existing db. Kexi api would need a mode where
+ kexi__* structure is created, but tables are not created as they already exist
+
+
+Ideas, suggestions and designs welcome :o)
+
+PiggZ \ No newline at end of file
diff --git a/kexi/doc/dev/kexi_issues.txt b/kexi/doc/dev/kexi_issues.txt
new file mode 100644
index 00000000..62292f2d
--- /dev/null
+++ b/kexi/doc/dev/kexi_issues.txt
@@ -0,0 +1,30 @@
+---------------------------------------------------------
+ Kexi IDEAS, ISSUES, PROPOSALS
+ Copyright (C) 2003 Jaroslaw Staniek js at iidea dot pl
+ Started: 2003-08-01
+ Kexi home page: http://www.koffice.org/kexi/
+---------------------------------------------------
+
+|
+| This document is expected to be independent of given KexiDB driver implementation,
+| but proposals are described here after certain decisions:
+| -drivers are (by current importance): SQLite (embedded),
+| ODBC (universality reasons), Mysql (historical reasons), PostgreSQL
+|
+
+1. EXTENSION: Inheriting properties
+ Kexi objects like tables, forms, reports can be put in sort of relation diagram:
+ Easy example: form and report depends on table/query (or more tables and queries).
+
+ This dependency can be called inheriting when we wnat to reuse as many
+ as possible properties of parent 'object' in child 'object'.
+
+ Examples of these properties: table colors, columns widths, etc. can be
+ reused in forms/reports that use this its data.
+ Inherited values can be of course changed for 'child' objects if needed.
+
+ Other inherited properties example are custom error/warning messages
+ (see kexidb_issuses doc, #1).
+
+ Properties inheritance makes database schema more rich and reduces required work
+ for later stages of the database project.
diff --git a/kexi/doc/dev/kexidb_api_changes.txt b/kexi/doc/dev/kexidb_api_changes.txt
new file mode 100644
index 00000000..9f40e7e4
--- /dev/null
+++ b/kexi/doc/dev/kexidb_api_changes.txt
@@ -0,0 +1,125 @@
+--------------------------------------------
+ KexiDB Module API Changes
+ Doc started: 2003-07-08 by js@iidea.pl
+--------------------------------------------
+
+These changes are propsals for further disscussions.
+
+
+1. *** RENAMING ***
+
+Some classes can be betted described with other names:
+
+class KexiDBInterfaceManager -> KexiDBDriverManager
+
+Motivation: 'Interface' is a more generic term. Thus, the class name is not a description.
+'Driver Manager' term is also used in the iODBC package.
+
+
+2. Now, KexiDB is just another ODBC-like layer. Probably there woudn't be too much drivers
+for KexiDB if KexiDB will be still like it is.
+
+What to change?
+KexiDB should be merged with non-visual (but db-related) parts of KexiProject.
+KexiProject then should be renamed to KexiDBProject and be moved to KexiDB.
+Visual (document-like) project container (formerly KexiProject) that inherits KoDocument
+could be then named to something else and still exist since Kexi, as KOffice application,
+needs to implement KoDocument. (KexiProjectHandler is also visual-related)
+
+What we got then?
+After that move, KexiProject becames a non-visual general-purpose entity. SO it can be instantiated
+not only as Kexi Koffice document window, but also:
+- for batch (non-visual) data processing (equivalents of given features availabe from gui, e.g. data export)
+- for easy use in Kexi plugins and/or other apps that would know about enchanced database properties
+provided by Kexi projects' metadata
+- to enable linking current Kexi project with external Kexi projects' data, in the future (these external
+projects do not have to be visible as regular projects, but its metadata is loaded)
+
+Other motivation:
+It's not necessary for KexiProject to be dependent on KOfficelibs.
+
+
+3. KexiDBConnection should be moved to KexiDB module and it should be only connection data container.
+
+
+4. Kexi uses KoStore as medium for storing project's meta data.
+
+What if we want to store even this data in the database?
+
+We need more generic class KexiDBProjectStore for this of extend KoStore. Note that extending
+KoStore may not be possible (or nice) because of hierarchical (fs-like) structure of this medium,
+while db store is relational.
+
+Why to store Kexi projects in the db?
+
+- We can utilize transactional, multiuser features of databases "for free"
+- Using sqlite engine we can still store projects in local files.
+So, maybe drop KoStore completely? Oh, maybe not, but we can treat this format as xml-exported,
+mainly for external processing, migration and backups.
+
+Note that there can be one database location for storing project's user data and completely other location
+for the database that has stored project's meta-data (see example below).
+
+
+5. Example usage of db engine, to get both project metadata and raw db connection
+
+{
+ kdDebug() << "DRIVERS:" << KexiDBEnginesManager::enginesNames() << endl;
+ KexiDBEngine *engine = KexiDBEngineManager::engine("mysql");
+ if (!engine) {
+ kdDebug() << "no engine" << endl;
+ return 1;
+ }
+
+ //we can also get the manager obj. with: KexiDBEnginesManager *manager = KexiDBEnginesManager::self();
+
+ //connection data that can be later reused
+ KexiDBConnectionData conn_data;
+ conn_data.host = "myhost";
+ conn_data.password = "mypwd";
+
+ KexiDBConnection *conn = engine->createConnection(conn_data);
+ if (!conn->connect()) {
+ kdDebug() << "err. connect" << endl;
+ return 1;
+ }
+ kdDebug() << "DATABASES:" << conn->dbNames() << endl;
+
+//we want use this connection to load given Kexi Project:
+
+ KexiDBProject *prj = new KexiDBProject( conn, "test" );
+ /* connection 'conn' has been opened for project meta-data source:
+ KexiDBProjectStore *store = new KexiDBProjectStore( conn )
+ Kexi then opens data base with KexiDBConnection::openDatabase( name )
+ where 'name' comes from meta-data.
+ This new connection is for projects' data.
+ */
+ /* we could also load project from a file:
+ KexiDBProject *prj = new KexiDBProject( "~/myprj.kexi" );
+ Then, KexiProject will be loaded from the file:
+ KexiDBProjectStore *store = new KexiDBProjectStore( "~/myprj.kexi" );
+ ..and data connection will be established as before.
+ */
+ if (!prj)
+ kdDebug() << "err. open db" << endl;
+ return 1;
+ }
+ kdDebug() << "TABLE DEFS:" << prj->tableDefsNames() << endl;
+ kdDebug() << "QUERY DEFS:" << prj->queryDefsNames() << endl;
+
+ KexiDBTableDef *tab_def = prj->tableDef("people") << endl;
+ if (!tab_def)
+ kdDebug() << "no table def" << endl;
+ return 1;
+ }
+ kdDebug() << "TABLE DEF FIELDS:" << tab_def->fieldsNames() << endl;
+
+ KexiDBFieldDef *field = tab_def->field("age");
+ if (!field)
+ kdDebug() << "no such field" << endl;
+ return 1;
+ }
+ kdDebug() << "FIELD TYPE:" << field->typeName() << endl;
+
+ return 0;
+} \ No newline at end of file
diff --git a/kexi/doc/dev/kexidb_issues.txt b/kexi/doc/dev/kexidb_issues.txt
new file mode 100644
index 00000000..0dd945c6
--- /dev/null
+++ b/kexi/doc/dev/kexidb_issues.txt
@@ -0,0 +1,211 @@
+---------------------------------------------------------
+ KexiDB module IDEAS, ISSUES, PROPOSALS
+ Copyright (C) 2003 Jaroslaw Staniek js at iidea dot pl
+ Started: 2003-08-01
+ Kexi home page: Users: http://www.koffice.org/kexi/ Developers: http://kexi-project.org
+
+ Changes:
+ 2005-09-16 Global BLOBs Storage
+---------------------------------------------------------
+
+|
+| This document is expected to be independent of given KexiDB dirver implementation,
+| but proposals are described here are after certain decisions has been made:
+| -drivers are (by current importance): SQLite (embedded),
+| ODBC (universality reasons ), Mysql (historical reasons), PostgreSQL
+|
+
+-----------------------------------------------------------------
+
+1. EXTENSION: Option for setting user-defined error messages on selected error types.
+
+Since new KexiDB has fully i18n'd user-visible messages, it outperforms other products as MSA
+(that often shows confusing message coming directly from the engine). There is possibility
+to provide users with table of error messages that they can personalize. These settings can
+be properties of table (query, form, etc.) and thus can be inherited (eg. by form from a table).
+By default, i18n'd messages from KexiDB can be presented.
+
+<EXAMPLE>
+Before we set our message for UNIQUE KEY conflict for table Cars (name varchar UNIQUE, price integer),
+we have got this message when try to violate 'unique' restionction:
+"There is already added one record with field 'name' set to 'Dodge' in table 'Cars'.
+This field must be unique."
+Now, we want more descriptive message: "There should be only one car named 'Dodge'!".
+We write this not as above, but rather: "There should be only one car named %field%!",
+since %field% is automatically substituted by given field value. After this we get message
+that is easier to understand for everyday user. Of course Kexi (and competitors too) never will
+be so clever as a human in building such messages automatically.
+</EXAMPLE>
+
+<NOTE>Inheriting messages: it will be more conventient to set up custom messages (if required)
+for table definition rather than just in form. If we set up given message in for a table, every
+form that uses this table as data source (end every query that do so) can use this message when needed.
+This note is also useful for other types of properties that can be inherited by extended objects from.
+</NOTE>
+
+-----------------------------------------------------------------
+
+2. KexiDB classes inheritance diagram
+
+TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
+
+Object
+ DriverManager
+ Driver
+ [DRIVER]Driver
+ Connection
+ [DRIVER]Connection
+
+[DRIVER] should be substituted by SQLite, MySQL, etc.
+These are classess to reimplement in the drivers.
+
+ConnectionData
+Field
+Cursor
+ [DRIVER]Cursor
+FieldList
+ TableSchema
+ QuerySchema
+ IndexSchema
+Transaction
+TransactionGuard
+BaseExpr
+ NArgExpr
+ UnaryExpr
+ BinaryExpr
+ ConstExpr
+ VariableExpr
+
+-----------------------------------------------------------------
+
+3. Table schema, query schema, etc. storage
+
+Table or query schemas are extended with additional properties,
+usually not available from most db engines or even related to gui.
+
+//This table contains list of kexi object stored within project (tables, queries, etc.)
+kexi__objects
+ o_id integer unsigned primary key auto_increment,
+ o_type byte, //type id taken from KexiDB::ObjectTypes
+ o_name varchar(200),
+ o_caption varchar(200), //optional, enriched name, can contain non-latin1 characters
+ o_help varchar
+
+//This table contains object's data, such as form's xml def.
+kexi__objectdata
+ o_id integer REFERENCES kexi__objects(o_id),
+ o_data varchar,
+ o_sub_id varchar(200) //sometimes single object can have more than one data
+ //-these can be identified by o_sub_id
+ //if not needed, leave it as NULL
+
+
+//This table contains fields that are members of given kexi object.
+//Not all object types should be allowed, now allowed are tables and queries
+kexi__fields
+ t_id integer REFERENCES kexi__objects(o_id),
+ f_type byte,
+ f_name varchar(200),
+ f_length integer,
+ f_precision integer,
+ f_constraints integer,
+ f_options integer,
+ f_default varchar,
+//these are additional properties:
+ f_order integer,
+ f_caption varchar(200),
+ f_help varchar
+
+//This table contains a list of parts defined for this database
+kexi__parts
+ p_id integer unsigned primary key auto_increment,
+ p_name varchar(200),
+ p_mime varchar(200),
+ p_url varchar
+TODO: add version?
+
+//This table contains global (predefined or not) properties for this database
+kexi__db
+ db_property varchar(32),
+ db_value varchar
+
+//Predefined properties stored in kexi__db:
+property="kexidb_major_ver", value=<major_version>
+ Where: <version> is a string containing integer in textual form that denotes
+ KexiDB implementation major version used to create or update this database.
+ This property is useful for KexiDB library and applications to denote
+ what KexiDB features could be available. This ensures backward compatibility
+ and (at least in some cases) -- forward compatibility.
+property="kexidb_minor_ver", value=<minor_version>
+ like above -- minor KexiDB version
+property="project_caption", value=<string>
+property="project_desc", value=<string>
+
+TODO: put more props. todo - creator, created date, etc. (also to KexiProjectData)
+
+// Global BLOBs Storage (BLOB == BINARY LARGE OBJECT)
+// Designed to store any kind of static images, sound and other binary data
+//Table:
+kexi__blobs
+ o_id integer unsigned primary key auto_increment, //unique project-wide identifier of a BLOB
+ o_data BLOB,
+ o_name varchar(200), //optional, name of the blob,
+ //can be e.g. a name of original file the data comes from,
+ //can contain non-latin1 characters
+ o_caption varchar(200), //optional, enriched name, can contain non-latin1 characters
+ o_mime varchar(200) NOT NULL, //MIME type of a BLOB, e.g. image/jpg
+ o_folder_id integer unsigned //references kexi__gallery_folders.f_id
+ //If null, the BLOB only points to virtual "All" folder
+ //WILL BE USED in Kexi >=1.1
+
+//(not yet implemented, planned for 1.1)
+//User-defined folders for better BLOBs categorizing.
+//For simplification, folders have no lowlevel name but only caption.
+//By default there are no physical folders, but only following virtual:
+//-"All" folder
+//-"Used" folder (computation of this takes some time because design of forms
+// and reports needs to be parsed)
+//-"Unused" folder (the same note as for "Used)
+//-"By type" folder with "jpeg", "png" subfolders, etc. - available by grepping using BLOB's o_mime
+kexi__gallery_folders
+ f_id integer unsigned primary key auto_increment, //unique id of a folder
+ f_parent_id integer unsigned //references f_id, can be null for top level folders
+ f_caption varchar(200), //optional, enriched name, can contain non-latin1 characters
+ f_notes varchar, //optional notes
+
+-----------------------------------------------------------------
+
+4. Extended table schema information:
+
+Docs available online:
+- http://kexi-project.org/wiki/wikiview/index.php?ExtendedTableSchemaInformation
+- Table Column Lookup: http://kexi-project.org/wiki/wikiview/index.php?KexiDBLookupColumns
+
+-----------------------------------------------------------------
+
+5. DEPRECATED TABLES
+
+//This table contains additional information for query schemas
+kexi__querydata
+ q_id integer REFERENCES kexi__objects(o_id),
+ q_sql varchar, //raw sql text - stored in the unchanged form entered by a user (or generated)
+ q_valid boolean, //query schema may be invalid (syntactically or logically,
+ //but still can be stored)
+ q_parent_tab integer REFERENCES kexi__objects(o_id) //parent table of this query
+
+//This table contains information about fields defined in select queries
+kexi__queryfields
+ q_id integer REFERENCES kexi__objects(o_id),
+ f_order integer, //order of this field in query schema
+ f_id integer REFERENCES kexi__objects(f_order), //may be NULL if a field is asterisk
+ f_tab_asterisk integer REFERENCES kexi__objects(o_id), //if this is "single-table" asterisk
+ //this member references to valid tables id, otherwise is NULL
+ f_alltab_asterisk boolean //true if this is "all-tables" asterisk, otherwise false
+
+//This table contains information about tables used by select queries
+kexi__querytables
+ q_id integer REFERENCES kexi__objects(o_id),
+ t_id integer REFERENCES kexi__objects(o_id), //references to table used by given q_id
+ t_order integer //order of t_id table in query schema's tables list
+
+
diff --git a/kexi/doc/dev/kexidb_sql.txt b/kexi/doc/dev/kexidb_sql.txt
new file mode 100644
index 00000000..128bbae4
--- /dev/null
+++ b/kexi/doc/dev/kexidb_sql.txt
@@ -0,0 +1,36 @@
+---------------------------------------------------------
+ KexiDB Common SQL definition
+ Copyright (C) 2003 Jaroslaw Staniek js at iidea dot pl
+ Started: 2003-09-10
+ Kexi home page: http://www.koffice.org/kexi/
+---------------------------------------------------------
+
+0. Preface
+----------
+Below is definition (formal grammar and comments) for SQL used externally by KexiDB.
+"Externally" means that this language is visible to the user and can be used
+by her/him to define queries.
+
+Many attempts has been done to create common part of many SQL versions that
+are currently in everyday use, mainly:
+- SQLite
+- MySQL
+- PostgreSQL
+
+
+1.1 CREATE TABLE
+----------------
+
+<CREATE_TABLE> ::= CREATE TABLE <table_name> (
+ <field_def>[,<field_def>]*
+ [,<table_constraint>]*
+ )
+<field_def> ::= <field_name> <field_type> <field_constraint>
+
+Note
+----
+CREATE TABLE statement could be added to KexiDBSQL for advanced users convenience,
+although tables can be easier created with gui. CREATE TABLE for KexiDB have
+non-standard options KexiDB-specific.
+
+TODO.......
diff --git a/kexi/doc/dev/kexisql_grammar_notes.txt b/kexi/doc/dev/kexisql_grammar_notes.txt
new file mode 100644
index 00000000..9f80ed69
--- /dev/null
+++ b/kexi/doc/dev/kexisql_grammar_notes.txt
@@ -0,0 +1,62 @@
+/* Jaroslaw Staniek:
+ TAKEN FROM his compiler's parser
+ AS EXAMPLE FOR LUCIJAN'S KEXISQL PARSER */
+
+
+
+exp: exp3 { $$->prn(); }
+ | exp OR exp3 { $$ = new NOpLog($1,OR,$3); $$->prn(); }
+ ;
+exp3: exp3n {/*default*/}
+ | exp3 AND exp3n { $$ = new NOpLog($1,AND,$3); }
+ ;
+exp3n: exp2 {/*default*/}
+ | NOT exp3n { $$ = new NOp1arg(NOT,$2); }
+ ;
+exp2: exp1 {/*default*/}
+ | exp1 op_rel exp1 { $$ = new NOpRel($1,$2,$3); }
+ ;
+exp1: exp0 {/*default*/}
+ | exp1 op_ar1 exp0 { $$ = new NOpAr($1,$2,$3); }
+ ;
+exp0: exp_poj {/*default*/}
+ | exp0 op_ar0 exp_poj { $$ = new NOpAr($1,$2,$3); }
+ ;
+
+
+
+
+* prior.2 - relational oper. */
+op_rel: '=' { $$='='; }
+ | '<' { $$='<'; }
+ | '>' { $$='>'; }
+ | "<=" { $$=REL_LESS_EQ; }
+ | ">=" { $$=REL_GREAT_EQ; }
+ | "<>" { $$=REL_NOT_EQ; }
+ ;
+/* prior.1 - arytmetic oper. +,- */
+op_ar1: '+' { $$='+'; }
+ | '-' { $$='-'; }
+ ;
+/* prior.0 - arytmetic oper. *,/ */
+op_ar0: '*' { $$='*'; }
+ | '/' { $$='/'; }
+ ;
+exp_single: single {/*default*/}
+ | '(' exp ')' { /*$$=new NOp1arg(0, $2);*/ $$=$2; }
+ | '-' exp_single %prec OP_MINUS { $$=new NOp1arg('-', $2); }
+ | '+' exp_single %prec OP_PLUS { $$=new NOp1arg('+', $2); }
+ ;
+single: const {/*default*/}
+ | variable {/*default*/ }
+ | function_call {/*default*/}
+
+const: CONST_BOOL { $$ = new NConstBool(yylval.bval); }
+ | CONST_INT { $$ = new NConstInt(yylval.ival); }
+ | CONST_STR { $$ = new NConstStr(yylval.sval); }
+ ;
+
+
+
+
+
diff --git a/kexi/doc/dev/lib_dependency.odg b/kexi/doc/dev/lib_dependency.odg
new file mode 100644
index 00000000..d3a72095
--- /dev/null
+++ b/kexi/doc/dev/lib_dependency.odg
Binary files differ
diff --git a/kexi/doc/dev/lib_dependency.png b/kexi/doc/dev/lib_dependency.png
new file mode 100644
index 00000000..29ed24a7
--- /dev/null
+++ b/kexi/doc/dev/lib_dependency.png
Binary files differ
diff --git a/kexi/doc/dev/mysql_bugs.txt b/kexi/doc/dev/mysql_bugs.txt
new file mode 100644
index 00000000..9e3a76f2
--- /dev/null
+++ b/kexi/doc/dev/mysql_bugs.txt
@@ -0,0 +1,6 @@
+2003-10-06 lucijan, mysql Ver 12.21 Distrib 4.0.14, for pc-linux-gnu (i686):
+
+parser doesn't allow "SELECT 1, 2, 3, * FROM fish"
+but allows "SELECT *, 1, 2, 3 FROM fish" and "SELECT 1, 2, 3, fish.* FROM fish"
+
+sqlite and postgress support "SELECT 1, 2, 3, * FROM fish" thouugh
diff --git a/kexi/doc/dev/naming_conventions.txt b/kexi/doc/dev/naming_conventions.txt
new file mode 100644
index 00000000..8d34f97a
--- /dev/null
+++ b/kexi/doc/dev/naming_conventions.txt
@@ -0,0 +1,137 @@
+---------------------------------------------------------
+ Kexi Naming Conventions
+
+ These rules apply to Kexi Team developers
+ There are also guidelines for future naming decissions.
+
+ Started: 2003-10-17
+ Copyright (C) 2003 Kexi Team
+ Kexi home page: http://www.kexi-project.org/
+---------------------------------------------------
+
+1. Namespaces
+To simplify class names and make these names shorter, we use namespaces.
+
+1.1. KexiDB namespace
+
+This denotes KexiDB module. All classes from kexidb/ directory are in KexiDB
+namespace.KexiDB-compatible database drivers (from kexidb/drivers/
+subdirectories are not in this KexiDB namespace.
+
+
+1.2. KexiWindow ???
+
+#TODO
+
+2. Directories
+
+plugins/<subdirs>
+ any plugins like Kexi dialogs for table altering, query desinger, etc.;
+ one subdirectory per plugin; each subdirectory is a KDE module
+
+widgets/<subdirs>
+ any widgets that are not dependent on core nor kexidb, thus reusable
+ in other projects; one subdirectory per widget; all subdirectories are linked
+ together with static compilation to single common library
+
+3rdparty/<subdirs>
+ any modules that can be considered as external (not necessarily optional)
+
+
+3. Creating documentation
+
+- Doxygen (www.doxygen.org) is used for generating Kexi developer documentation.
+- default target directory of these docs in html format is: doc/html for all sources
+ and doc/kexidb/html for kexidb-only docs
+- one step (..) up from mentioned dirs are places for .doxygen project files used
+ for docs generating
+- Single-line comments are created begginning with: //!
+- Multi-line comments are created begginning with /*! or /**
+- Style of comments (/*! of /**) for given file should be preserved
+
+Example 3.1: Comments for non-void functions, adding information about parameters:
+
+/*! Displays value of \a x.
+ \return true if displaying is successfull */
+bool display(int x);
+
+Notes for example:
+-\return special Doxygen's tag is used to describe that we return
+something in the method (\returns will not work for Doxygen!).
+-Clause should be started from capital letter and terminated with a dot.
+-"\a" special tag should be used before inserting argument names (names are
+equal to these from the method's definition) - the names will be therefore
+highlighted by Doxygen.
+
+-For more sophisticated methods (with more arguments), you can as well
+use \param tag, e.g.:
+
+/*!
+\param x horizontal position
+\param y vertical position
+\param col color of the box
+*/
+
+-Methods/functions should be documented in header files (.h), not in implementation
+ files. This allows easier inspection for users of the source code.
+-Comments from implementation files can be turned into
+ additional documentation, if really needed (when we use "/*!")
+ and this also will be included to generated docs if Doxygen project has enabled appropriate
+ option for doing this.
+-Classes should be also documented -comments put just as the lines
+ before "class keyword.
+
+-to add reference to similar or related function, use \sa tag, e.g.:
+/*! blablabla
+ \sa bleble
+*/
+
+-to mark a code fragment that someting is TO DO, you can use \todo tag, e.g.:
+
+/*! \todo (js) it is so hard to implement!
+*/
+
+-example above shows that adding e.g. own nick inside the brackets what can help
+to recognise who marked given fragment.
+
+4. Indentation
+4.1 We can use the rule as in the rest of KDE code.
+example:
+ QString objectName(); //wrong
+ QString objectName(); //ok
+rule: dont use tabs between words.
+
+4.2 To avoid many indentation levels, we can use:
+
+void mymethod()
+{
+ if (!something)
+ return;
+ if(!something_else && .....)
+ return
+ do_something();
+}
+
+ instead of:
+
+void mymethod()
+{
+ if (something) {
+ if(something_else && .....) {
+ do_something;
+ }
+ }
+}
+
+This is good, because made qt and kde sources readable.
+
+4.3 Indentation within classes declaration
+
+class MyClass {
+ public:
+ MyClass();
+ void method();
+ protected:
+};
+
+ANYWAY: we use indentation.
diff --git a/kexi/doc/dev/pgsql_issues.txt b/kexi/doc/dev/pgsql_issues.txt
new file mode 100644
index 00000000..9e21e4ac
--- /dev/null
+++ b/kexi/doc/dev/pgsql_issues.txt
@@ -0,0 +1,7 @@
+
+1. Dynamic (non-buffered cursors) in PostgreSQL
+To avoid big memory consuming, we will need to use backend-side (native) cursors
+with "DECLARE CURSOR" statement. Otherwise KexiDB::Cursor needs to be buffered.
+
+http://archives.postgresql.org/pgsql-interfaces/2000-09/msg00082.php
+
diff --git a/kexi/doc/dev/settings.txt b/kexi/doc/dev/settings.txt
new file mode 100644
index 00000000..ef203cef
--- /dev/null
+++ b/kexi/doc/dev/settings.txt
@@ -0,0 +1,168 @@
+f-----------------------------------------------------------
+Settings stored in 'kexirc' config file
+
+This is official list.
+All other settings are unofficial and are subject to change.
+
+Started: 2004-08-20, js
+-----------------------------------------------------------
+
+Group: MainWindow
+# percentage width of the Project Navigator pane
+-LeftDockPosition [integer: 0..100]
+
+# True if the Project Navigator pane is visible after startup.
+-ShowProjectNavigator [boolean] (default: true)
+
+# True if single click should open item in the Project Navigator.
+# Otherwise double click should be used to open item.
+# Meaningful when "single click to open files" option is set
+# in the Control Center.
+- SingleClickOpensItem [boolean] (default: false)
+
+# Percentage property editor's width
+-RightDockPosition [integer: 0..100]
+
+# True if "hover close button" should be available for tabs in the main window.
+# Only affects IDEAl user unterface mode.
+-HoverCloseButtonForTabs [boolean] (default: false)
+
+Group: PropertyEditor
+-FontSize [integer]
+
+Group: Notification Messages
+-dontAskBeforeDeleteRow [boolean] (default: false)
+
+-askBeforeOpeningFileReadOnly [boolean] (default: true)
+
+# If true, warning messages related to plugins, e.g.
+# "Errors encountered during loading plugins"
+# will not be displayed on the application's startup.
+-dontShowWarningsRelatedToPluginsLoading [boolean] (default: false)
+
+Group: General
+# Especially useful for SQL-related messages
+# default=true for advanced Kexi mode
+NOT YET IMPLEMENTED: -alwaysShowDetailsInMsgBoxes [boolean]
+
+# If true, Kexi Debugger internal window will be displayed.
+# In the future the window will be probably used for debugging other features
+# like scripts or macros. This option is useful for Kexi Developers.
+# Only available when KEXI_DEBUG_GUI compile time option is defined.
+-showKexiDBDebugger [boolean] (default: false)
+
+Group: Recent Dirs
+-lastVisitedImagePath [stringlist] # used for open/save dialogs for image files
+ # see KexiImageBox::slotInsertFromFile() and slotSaveAs();
+
+Group: Startup
+-OpenExistingType [File|Server]
+-ShowStartupDialog [boolean]
+#default file db driver name, used on file db creation:
+TODO: -DefaultFileDBDriverName [string default="sqlite3", can be also "sqlite2"]
+
+Group: TableView
+TODO: -add default values for KexiTableView::Appearance
+
+Group: TableDesigner
+-autogeneratePrimaryKeysOnTableDesignSaving [boolean]
+TODO: -defaultFieldType [the list of types], default=Text
+TODO: -autoPrimaryKeyForFieldNames [stringlist]
+TODO: -defaultTextFieldLength [uint, <255] default=50
+TODO: -defaultIntegerFieldSubtype [the list of types (byte, short, etc.)] default=long
+
+Group: QueryDesigner
+TODO: -autoJoinOnTableInserting [boolean]
+
+Group: KeyboardNavigation
+-cursorPlacementAfterLastOrFirstFormField [stringlist: nextOrPrevRecord|firstOrLastField(default)]
+
+Group: Forms
+TODO:-overrideStyleName [string] (empty if do not override)
+TODO:-doNotFocusAutonumberFields [boolean] (true by default; when this and autoTabStop for a form is true,
+ autonumber text fields are skipped)
+ implement this in KexiFormView::afterSwitchFrom()
+TODO:-appendColonToAutoLabels [boolean] (true by default; when true, colon character is appended
+ to autolabel text)
+TODO:-makeFirstCharacterUpperCaseInCaptions [boolean] (true by default; when true, first character
+ in autolabel or popup menu caption text is converted to upper case.
+ Usable especially when no field's caption is provided)
+TODO:-labelPositionInAutoLabels [enum: Left, Top] (Left by default)
+
+TODO:-gridSize [uint] (10 by default)
+
+Group: NewFormDefaults
+TODO:-styleName [string]
+TODO:-autoTabStop [boolean]
+
+Group: ImportExport
+# Default character encoding for MS Access MDB/MDE files (older than 2000).
+# Currently used by in Advanced Options of Importing Wizard.
+# Useful if you are performing many imports of MS Access databases.
+# Valid values can be "cp 1250", "cp 1251", etc. Case insensitive.
+# If not provided, system default will be is assumed.
+-DefaultEncodingForMSAccessFiles [string]
+
+# Default character encoding for importing CSV (Comma-Separated Value) files.
+# If not provided, system default will be is assumed.
+-DefaultEncodingForImportingCSVFiles [string]
+
+# True if options should be visible in the "CSV Export dialog".
+-ShowOptionsInCSVExportDialog [boolean] (false by default)
+
+# If provided, appropriate options for CSV Export Dialog will be loaded
+-StoreOptionsForCSVExportDialog [boolean] (default: false)
+
+# Default delimiter used for exporting CSV (Comma-Separated Value) files.
+-DefaultDelimiterForExportingCSVFiles [string] (default is ",")
+
+# Default text quote character used for exporting CSV (Comma-Separated Value) files.
+-DefaultTextQuoteForExportingCSVFiles [string] (default is ")
+
+# Default character encoding for exporting CSV (Comma-Separated Value) files.
+# If not provided, system default will be is assumed.
+# Only used when StoreOptionsForCSVExportDialog option is true.
+-DefaultEncodingForExportingCSVFiles [string]
+
+# Strip leading and trailing blanks off of text values when importing
+# CSV (Comma-Separated Value) files.
+-StripBlanksOffOfTextValuesWhenImportingCSVFiles [boolean] (default: true)
+
+# Default setting used to specify whether column names should be added as the first row
+# for exporting CSV (Comma-Separated Value) files.
+# Only used when StoreOptionsForCSVExportDialog option is true.
+-AddColumnNamesForExportingCSVFiles [string] (default: true)
+
+# Maximum number of rows that can be displayed in the CSV import dialog.
+# Used to decrease memory consumption.
+-MaximumRowsForPreviewInImportDialog [int] (default: 100)
+
+# Maximum number of bytes that can be loaded to preview the data in the CSV
+# import dialog. Used to decrease memory consumption and speed up the GUI.
+-MaximumBytesForPreviewInImportDialog [int] (default: 10240)
+
+Group: Recent Dirs
+# A list of recently displayed directories in file dialogs related to CSV
+ import/export.
+-CSVImportExport [string list]
+
+# A list of recently displayed directories in "Source database" file dialog
+ of Project Migration
+-ProjectMigrationSourceDir [string list]
+
+# A list of recently displayed directories in "Destination database" file
+ dialog of Project Migration
+-ProjectMigrationDestinationDir [string list]
+
+# A list of recently displayed directories in "Open existing project"
+ and "Create new project" file dialog of Startup Dialog
+-OpenExistingOrCreateNewProject [string list]
+
+# A list of recently displayed directories in file dialogs related to images
+ (e.g. images within forms).
+-LastVisitedImagePath [string list]
+
+# A list of recent displayed directories in a file dialogs used for dowloading
+ example databases (Get Hot New Stuff)
+-DownloadExampleDatabases [string list]
+
diff --git a/kexi/doc/dev/sql_engine_specifics.txt b/kexi/doc/dev/sql_engine_specifics.txt
new file mode 100644
index 00000000..3db65fdf
--- /dev/null
+++ b/kexi/doc/dev/sql_engine_specifics.txt
@@ -0,0 +1,22 @@
+SQL Engines - Specifics
+-----------------------
+
+This document lists specifics among SQL engines. We need to remember about them when implementing features of KexiDB and designing KEXISQL.
+
+Legend: + == works, - == doesn't work, ? == not tested yet
+
+== 1. Ordering by computed column ==
+Examples: select rand() from T order by 1;
+ select 1 from T order by 1;
+MySQL: +
+SQLite: -
+PostgreSQL: ?
+
+== 2. Using more than just "*" in the column list ==
+Example: select *, 1 from T;
+MySQL: -
+SQLite: +
+PostgreSQL: ?
+
+Notes: select T.*, 1 from T; works everywhere
+
diff --git a/kexi/doc/dev/sqlite_issues.txt b/kexi/doc/dev/sqlite_issues.txt
new file mode 100644
index 00000000..9e9ebf56
--- /dev/null
+++ b/kexi/doc/dev/sqlite_issues.txt
@@ -0,0 +1,200 @@
+---------------------------------------------------------
+ SQLITE DRIVER IDEAS, ISSUES, PROPOSALS
+ Copyright (C) 2003 Jaroslaw Staniek js at iidea dot pl
+ Started: 2003-07-09
+ Kexi home page: http://www.koffice.org/kexi/
+---------------------------------------------------
+
+
+1. In most situations (especially on massive data operations) we do not want get types of the columns,
+so:
+
+PRAGMA show_datatypes = OFF;
+
+
+2. SQLite automatically adds primary key to the table if there is no such key.
+Such pkey column is not visible for statemets like 'select * from table',
+'select oid,* from table' need to be executed to also get this special column.
+
+See section '3.1 The ROWID of the most recent insert' of c_interface.html file.
+
+
+3. For smaller tables (how small? -- add configuration for this) sqlite_get_table() 'in memory'
+function could be used to speed up rows retrieving.
+
+
+4. Queries entered by user in the Query Designer should be checked for syntactically or logically validity and transformed to SQLite-compatible form befor execution. It is nonsense to ask SQLite engine if the given sql statement is valid, because then we wouldn't show too detailed error message to the user.
+
+
+5. SQLite not only doesn't handles column types but also doesn't checks value sizes, eg. it is possible to insert string of length 100 to the column of size 20.
+These checks should be made in KexiDB SQLite engine driver. In fact for each driver these checks could be made because user wants get a descriptive, localized, friendly message what's wrong. No single engine provides this of course. We need to store such a parameters like field size in project meta-data as sqlite doesn't stores that in any convenient way. It stores only 'CREATE TABLE' statement, as is.
+
+
+6. Possible storage methods for SQLite database embedded in Kexi project:
+ A. Single SQLite-compatible database file (let's name it: .sqlite file)
+ - Advantages: Best deal for bigger databases - no need for rewriting data form SQLite file to another,
+ fastest open and save times. DB data consumes disk space only once. Other applications that uses SQLite library could also make use of standard format of .sqlite file's contents. Kexi project and data would be easily, defacto, separated, what is considered as good method in DB programming.
+ - Disadvantages: User (who may want to transfer a database) need to know that .kexi file doesn't stores his data but .sqlite is for that.
+
+ B. Single SQLite-compatible database file embedded inside Kexi project .kexi file.
+ SQLite requires an access to a file in its own (raw) format to be available somewhere in the path. If SQLite storing layer could be patched to adding an option for seek to given file position, sqlite data can be stored after Kexi project data. When sqlite raw data file could be saved after a Kexi project's data, rewriting the project contents should be performed (and this is done quite frequently). So, finally storing both files concatenated during normal operations is risky, costly and difficult to implement cleanly.
+ - Advantages: User do not need to know that there is sqlite used in Kexi as embedded DB engine (and even if there is any sql engine). Transferring just one file between machines means successfully transferring data and project.
+ - Disadvantages: lack of everything described as advantages of A. method: difficult and costly open and save operations (unless SQLite storing layer could be patched).
+
+ Extensions and compilations of the both above methods:
+ - .sqlite files are really good compressable, so compress option can be added (if not for regular saving, then at least for "Email project & data" or 'Save As' actions. For these actions concatenating the sqlite data with Kexi project's data would be another option convenient from user's point of view.
+
+ CURRENT IMPLEMENTATION: B way is selected with above extensions added to the TODO list.
+
+
+7. SQLite-builtin views are read-only. So the proposal is not to use them. Here is why:
+ We want have rw queries in Kexi if main table in a query is rw.
+ <DEFINITION>: Main table T in a query Q is a table that is not at 'many' side of query relations.
+ </DEFINITION>
+ <Example>:
+ table persons (name varchar, city integer);
+ table cities (id integer primary key, name varchar);
+
+ DATA: [Jarek, 1]-------[1, Warsaw]
+ /
+ [Jakub, 1]-----/
+
+ query: select * from persons, cities
+ Now: 'cities' table is the main table (in other words it is MASTER table in this query).
+ 'cities' table is rw table in this query, while 'persons' table is read-only because it is at 'many' side
+ in persons-cities relation. Modifying cities.id field, appropriate persons.city values in related
+ records will be updated if there is cascade update enabled.
+ </Example>
+ IDEAS:
+ A) Query result view (table view, forms, etc.) should allow editing fields from
+ main (master) table of this query, so every field object KexiDB::Field should have a method:
+ bool KexiDB::Field::isWritable() to allow GUI check if editing is allowed. Look that given field object
+ should be allocated for given query independently from the same field allocated for table schema.
+ The first field object can disallow editing while the latter can allow editing (because it is
+ component of regular table).
+ B) Also add method for QString KexiDB::Field that returns i18n'd message about the reasons
+ of disallowing for editing given field in a context of given query.
+
+
+----------------------------------------------------------------
+8. ERRORS Found
+8.1 select * from (select name from persons limit 1) limit 2
+ -should return 1 row; returns 2
+
+----------------------------------------------------------------
+
+HINTS:
+
+PRAGMA table_info(table-name);
+For each column in the named table, invoke the callback function
+once with information about that column, including the
+column name, data type, whether or not the column can be NULL,
+and the default value for the column.
+
+
+---------------------------------------------------------------
+OPTIMIZATION:
+
+Re: [sqlite] Questions about sqlite's join translation
+Od:
+D. Richard Hipp <drh-X1OJI8nnyKUAvxtiuMwx3w@public.gmane.org>
+Odpowiedz do:
+sqlite-users-CzDROfG0BjIdnm+yROfE0A@public.gmane.org
+Data:
+sobota 9 pa¼dziernika 2004 02:59:06
+Grupy:
+gmane.comp.db.sqlite.general
+Nawi±zania: 1
+
+Keith Herold wrote:
+> The swiki says that making JOINs into a where clause is more efficient,
+> since sqlite translates the join condition into a where clause.
+
+When SQLite sees this:
+
+    SELECT * FROM a JOIN b ON a.x=b.y;
+
+It translate it into the following before compiling it:
+
+    SELECT * FROM a, b WHERE a.x=b.y;
+
+Neither form is more efficient that the other.  Both will generate
+identical code.  (There are subtle differences on an LEFT OUTER
+JOIN, but those details can be ignored when you are looking at
+things at a high level, as we are.)
+
+ > It also
+> says that you make queries more effiecient by minimizing the number of
+> rows returned in the FROM clause as far to the left as possible in the
+> join.  Does the latter matter if you are translating everything into a
+> where  clause anyway?
+>
+
+SQLite implements joins using nested loops with the outer
+loop formed by the first table in the join and the inner loop
+formed by the last table in the join.  So for the example
+above you would have:
+
+    For each row in a:
+      For each row in b such that b.y=a.x:
+        Return the row
+
+If you reverse the order of the tables in the FROM clause like
+this:
+
+    SELECT * FROM b, a WHERE a.x=b.y;
+
+You should get an equivalent result on output, but SQLite will
+implement the query differently.  Specifically it does this:
+
+    For each row in b:
+      For each row in a such that a.x=b.y:
+        Return the row
+
+The trick is that you want to arrange the order of tables so that
+the "such that" clause on the inner loop is able to use an index
+to jump right to the appropriate row instead of having to do a
+full table scan.  Suppose, for example, that you have an index
+on a(x) but not on b(y).  Then if you do this:
+
+    SELECT * FROM a, b WHERE a.x=b.y;
+
+    For each row in a:
+      For each row in b such that b.y=a.x:
+        Return the row
+
+For each row in a, you have to do a full scan of table b.  So
+the time complexity will be O(N^2).  But if you reverse the order
+of the tables in the FROM clause, like this:
+
+    SELECT * FROM b, a WHERE b.y=a.x;
+
+    For each row in b:
+      For each row in a such that a.x=b.y
+        Return the row
+
+No the inner loop is able to use an index to jump directly to the
+rows in a that it needs and does not need to do a full scan of the
+table.  The time complexity drops to O(NlogN).
+
+So the rule should be:  For every table other than the first, make
+sure there is a term in the WHERE clause (or the ON or USING clause
+if that is your preference) that lets the search jump directly to
+the relavant rows in that table based on the results from tables to
+the left.
+
+Other database engines with more complex query optimizers will
+typically attempt to reorder the tables in the FROM clause in order
+to give you the best result.  SQLite is more simple-minded - it
+codes whatever you tell it to code.
+
+Before you ask, I'll point out that it makes no different whether
+you say "a.x=b.y" or "b.y=a.x".  They are equivalent.  All of the
+following generate the same code:
+
+      ON a.x=b.y
+      ON b.y=a.x
+      WHERE a.x=b.y
+      WHERE b.y=a.x
+---------------------------------------------------------------
+
diff --git a/kexi/doc/dev/tableview_issues.txt b/kexi/doc/dev/tableview_issues.txt
new file mode 100644
index 00000000..568fc28e
--- /dev/null
+++ b/kexi/doc/dev/tableview_issues.txt
@@ -0,0 +1,27 @@
+---------------------------------------------------------
+ KexiTableView (and KexiDataTableView) Issues Document
+
+ Started 2003-10-13
+
+ Copyright (C) 2003 Jaroslaw Staniek js at iidea dot pl
+ (C) OpenOffice Polska 2003
+ Kexi home page: http://www.kexi-project.org/
+---------------------------------------------------
+
+2003-10-13
+Assumptions
+1. Now, I dont think about yet about features like data editing, sorting etc.
+ so, I try to forget about KexiTableList, until sorting will be readded.
+
+2. I will try to reimpl. KexiTableView to accept (reuse) raw data offered internally by KexiDB::Cursor:
+ const char ** recordData() const;
+ This is easy at least for buffered read-only data. So, we also consider that cursor used as datasource
+ is buffered.
+ It would be way more offective than using soooo many allocations and classes with KexiTableItem ;
+ btw, KexiTableItem is oversized: KexiTableView pointer is stored with each KexiTableItem :)
+
+result: for 1st step I keep KexiTableItem with some changes, code polishing
+- KexiTableItem is internal class so accessors will be removed;
+ shortly speaking - KexiTableItem is just a data structure
+
+
diff --git a/kexi/doc/handbook/docbook-status.txt b/kexi/doc/handbook/docbook-status.txt
new file mode 100644
index 00000000..a4c16d2f
--- /dev/null
+++ b/kexi/doc/handbook/docbook-status.txt
@@ -0,0 +1,163 @@
+-----------------------------------------------------
+Contents:
+ Source HTML view of the manual (as per translation from Polish)
+ Docbook view of the manual as per SVN.
+-----------------------------------------------------
+
+Changelog:
+2005-12-05 mart
+ initial checkin
+2006-01-11 jstaniek
+ update for chapter numbers, more TODOs added
+
+HTML view of the Manual:
+
+The chapter numbers in section headings here refer to
+the Chapters in the HTML manual at
+ http://iidea.pl/~js/kexi/manual/en/
+
+The original Polish version can be found here:
+http://iidea.pl/~js/kexi/manual/pl/html/contents.html
+
+Icons and polish screenshots can be found here:
+http://www.iidea.pl/~js/kexi/manual/en/kexi-docs-03.zip
+
+Chapter numbers in each descriptions refers to docbook version.
+
+HTML Chapter 1:
+Has moved to Appendix A.
+Needs writing.
+
+HTML Chapter 2:
+Largely irrelevant marketing.
+
+Useful parts are now in Chapter 1
+(some bits missing - I'll sort them).
+
+Last Section (Different datatypes) is now moved to Appendix B.
+(There are some discrepancies between HTML and reality, take
+care when editting)
+
+HTML Chapter 4:
+Has become Chapter 2.
+
+HTML Chapter 5:
+Has become Chapter 3.
+
+HTML Chapter 6:
+Will become Chapter 4.
+
+HTML Chapter 7:
+Will become Chapter 5.
+
+HTML Chapter 8:
+Has become Chapter 6.
+
+HTML Appendix A. Menu items + B. Keyboard Shortcuts
+Will become Chapter 7.
+
+HTML Appendix C, D, E:
+Will become Appendix C, D, E.
+
+
+-----------------------------------------------------
+
+Docbook version:
+
+The chapter numbers here refer to the Docbooked manual.
+
+The names refer to the person working on that part of the manual.
+Please contact them if you'd like to help.
+
+
+Chapter 1: Introduction (Martin)
+New text based on
+02_00_00_idx_intro_to_kexi.html Done/Removed
+02_01_00_what_is_kexi.html Done/Removed
+02_02_00_features_of_kexi.html Done/Removed
+02_03_00_is_kexi_for_me.html Done/Removed
+Some work still required:
+ Use <email> tag for mailing lists (they currently won't show in a printed doc)
+ Check source text once more for any relevant missing info.
+
+Chapter 2: Kexi Basics (Raphael)
+The Kexi main window stuff is text I've written can be mered with 4.6 in HTML
+
+04_00_00_idx_basics_kexi.html Removed. (It's empty)
+04_01_00_project_files.html Done.
+04_02_00_running_kexi.html Ignoring for now.
+04_03_00_creating_database.html Done. TODO: polish source changed - UPDATE!
+04_04_00_project_opening.html Done. TODO: polish source changed - UPDATE!
+04_05_00_help_on_help.html Done.
+04_06_00_main_application_elements.html
+ Merge with "Kexi Main Window" section in docbook.
+ Done.
+04_06_01_project_navigator.html Done.
+04_06_02_object_windows.html Done.
+04_06_03_property_editor.html Done.
+
+Chapter 3: Building Simple Databases (Raphael)
+05_00_00_idx_building_simple_database.html Done.
+05_01_00_table_designing.html Done.
+05_02_00_entering_data_into_tables.html Done.
+05_03_00_query_designing.html Done.
+05_04_00_form_designing.html Done.
+05_05_00_data_entering_into_forms.html Done.
+
+Chapter 4. Advanced database topics
+06_01_00_kexi_project_sharing.html NOT READY FOR CONVERSION YET
+06_02_00_idx_designing_advanced_objects.html NOT READY FOR CONVERSION YET
+06_04_00_using_CLI.html NOT READY FOR CONVERSION YET
+
+Chapter 5. Working with external data
+07_01_00_data_formats.html NOT READY FOR CONVERSION YET
+07_02_00_data_import.html NOT READY FOR CONVERSION YET
+07_02_01_data_import_csv.html NOT READY FOR CONVERSION YET
+07_02_02_data_pasting_csv.html NOT READY FOR CONVERSION YET
+07_03_00_db_project_import.html NOT READY FOR CONVERSION YET
+07_04_00_data_export.html NOT READY FOR CONVERSION YET
+07_04_01_data_export_csv.html NOT READY FOR CONVERSION YET
+07_04_02_data_copying_csv.html NOT READY FOR CONVERSION YET
+07_05_00_project_export.html NOT READY FOR CONVERSION YET
+07_06_00_working_with_multiple_projects.html NOT READY FOR CONVERSION YET
+
+
+Chapter 6: Configuring Kexi (Martin):
+08_00_00_kexi_tuning.html Removed. (It's basically a chapter TOC)
+08_01_00_mdi.html Done.
+08_02_00_dock_undock.html Done.
+08_03_00_conf_keys.html TODO
+
+Chapter 7: Command Reference
+aa_00_00_menu.html NOT READY FOR CONVERSION YET (MERGE DOCS WITH docbook version)
+ab_00_00_shortcuts.html NOT READY FOR CONVERSION YET (MERGE DOCS WITH docbook version)
+
+Anne-Marie wrote this text (updated by jstaniek),
+since the Polish version has not been translated into English yet.
+WILL BE REPALCED BY HTML Appendix A. and B.
+
+Appendix A (Raphael):
+01_01_00_what_is_db.html Done.
+01_02_00_db_spreadsheet.html Done.
+01_03_00_design.html Done.
+01_04_00_who_needs.html Done.
+01_05_00_db_software.html Done.
+
+Appendix B:
+02_04_00_differences.html 1/2 Done. Another table to go.
+
+Appendix C: Widgets Reference
+ac_00_00_widgets.html NOT READY FOR CONVERSION YET
+TODO
+
+Appendix D: Specifications
+ad_01_01_csv_format.html NOT READY FOR CONVERSION YET
+TODO
+
+Appendix E: Example database projects
+ae_00_00_example_projects.html NOT READY FOR CONVERSION YET
+TODO
+
+Appendix E: Support
+ah_00_00_web_pages.html NOT READY FOR CONVERSION YET
+ag_00_00_technical_support.html NOT READY FOR CONVERSION YET
diff --git a/kexi/doc/handbook/html.tmp/01_01_00_what_is_db.html b/kexi/doc/handbook/html.tmp/01_01_00_what_is_db.html
new file mode 100644
index 00000000..dd4bff42
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/01_01_00_what_is_db.html
@@ -0,0 +1,34 @@
+<H2>1.1. What is a database?</H2>
+<p>
+You can define a database as a collection of data on one topic. It is organised in a way allowing to easily browse the information, make changes or add new items.
+</p>
+<p>
+Look at this diagram for one of the above examples: a simple phone book.
+
+<br><img src="img/01_02_example.png">
+<br>A diagram of a phone number database<br><br>
+
+The above picture shows a set of two contacts each of which is presented on a separate card. It appears that such a card can constitute a single line in a table:
+</p>
+
+<p>
+<table border="1" cellspacing="0" cellpadding="2">
+<tr><td colspan="2"><b>Contacts</b></td></tr>
+<tr><td><b>Name</b></td><td><b>Tel No.</b></td></tr>
+<tr><td>Joan</td><td>699 23 43 12</td></tr>
+<tr><td>Adam</td><td>711 19 77 21</td></tr>
+</table>
+</p>
+
+<p>
+<b>Terms and definitions</b>: A single data which constitutes a part of a greater collection can be called a <b>line</b> or more professionally a <b>record</b>. The collection is narmally called a <b>table</b>. Moreover, the most natural name for the table is one describing the data it offers/stores which is <b>Contacts</b>. Furthermore, each line in the table consists of <b>columns</b> often also called <b>fields</b>. In the table <em>Contacts</em> there are two columns (fields): <em>Name</em> and <em>Tel No.</em>.
+
+</p>
+<p>
+For simple uses a single table can make up a <b>database</b>. Many people consider these two equivalent. As you will see, for real databases we usually need more than one table.
+</p>
+<p>
+To sum up, you have already got a simple database with one table <em>Contacts</em>.
+
+<!-- -- > msa_whitepaper.pdf -->
+</p> \ No newline at end of file
diff --git a/kexi/doc/handbook/html.tmp/01_02_00_db_spreadsheet.html b/kexi/doc/handbook/html.tmp/01_02_00_db_spreadsheet.html
new file mode 100644
index 00000000..e7959df7
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/01_02_00_db_spreadsheet.html
@@ -0,0 +1,206 @@
+<H2>1.2. A database and a spreadsheet</H2>
+<p>
+It is very likely that you have already used spreadsheet applications like KSpread, OpenOffice.org Calc or Microsoft Excel. If so, you will probably wonder: since both spreadsheets and databases have tables, why should I use the latter?
+</p>
+<p>
+While comparing spreadsheets and databases you may encounter the following issues which you will later see in greater detail:
+</p>
+<ul>
+<li><a href="#ref_integrity">Referential data integrity</a></li>
+<li><a href="#data_redundancy">Data redundancy</a></li>
+<li><a href="#data_integrity">Data integrity and validity</a></li>
+<li><a href="#data_limiting">Data limiting</a></li>
+<li><a href="#performance">Performance and capacity</a></li>
+<li><a href="#data_entry">Convenient data entry</a></li>
+<li><a href="#reports">Reports</a></li>
+<li><a href="#programming">Programming</a></li>
+<li><a href="#multiuse">Multiuse</a></li>
+<li><a href="#security">Security</a></li>
+</ul>
+
+
+<H3>How is a database different from a spreadsheet?</H3>
+<p>
+Gradually exceeding the capacity of a mobile phone, expand your table <em>Contacts</em> adding a column (field) <em>Address</em>. Add more telephone numbers (office, home) for each person and add surnames to names. To make it simpler we assume the following:
+</p>
+<ul>
+<li>the table is limited to two people (obviously, there could be hundreds and thousands of them in a real database)</li>
+<li>there are no two persons with the same name and surname</li>
+</ul>
+
+<p>
+<table border="1" cellspacing="0" cellpadding="2">
+<tr><td colspan="3"><b>Contacts</b></td></tr>
+<tr><td><b>Name and surname</b></td><td><b>Tel</b></td><td><b>Address</b></td></tr>
+<tr><td>Joan Smith</td><td>699 23 43 12</td><td>Western Gate 1, Warsaw</td></tr>
+<tr><td>Adam Willson</td><td>711 19 77 21</td><td>London, Frogs Drive 5</td></tr>
+<tr><td>Joan Smith</td><td>110 98 98 00</td><td>Western Gate 1</td></tr>
+<tr><td>Smith Joan</td><td>312 43 42 22</td><td>Warsaw, Western Gate 1</td></tr>
+<tr><td>ADAM Willson</td><td>231 83 02 04</td><td>Frogs Drive 5, London</td></tr>
+</table>
+</p>
+
+<p>
+Such a table can be made both in a spreadsheet and in a database.
+Using a spreadsheet is very easy, of couse. What problems do we encounter at this stage?
+
+
+<a name="ref_integrity"></a>
+<h4>Referential data integrity</h4>
+<p>
+Suppose you are using a spreadsheet and you need to change the address of at least one person. You have a small problem: you often have to change the address in many lines. For example, Joan takes three lines. A real problem will arise if you forget to change one of the lines - the address asigned to this person will be <b>ambiguous</b>, hence <b>your data loses integrity</b>.
+</p>
+<p>
+Moreover there is no simple way of deleting a chosen person from the table since you have to remember about deleting all the lines releted to him or her.
+</p>
+
+<a name="data_redundancy"></a>
+<h4>Data redundancy</h4>
+<p>
+This is directly connected to the previous problem. In fields <em>Name and surname</em> and <em>Address</em> the same data is entered many times. This is typical of spreadsheets, ineffective way of storing data because the database grows unnecessarily, thus requiring more computer resources (larger size of data and slower access).
+</p>
+<p>How can you solve these problems with a database? You can split information into smaller chunks by creating additional table <em>Persons</em> with only two columns: <em>Name and suname</em> and <em>Address</em>:
+</p>
+<p>
+<p>
+<table border="1" cellspacing="0" cellpadding="2">
+<tr><td colspan="2"><b>Persons</b></td></tr>
+<tr><td><b>Name and surname</b></td><td><b>Address</b></td></tr>
+<tr><td>Joan Smith</td><td>Western Gate 1, Warsaw</td></tr>
+<tr><td>Adam Willson</td><td>Frogs Drive 5, London</td></tr>
+</table>
+</p>
+<p>
+Each line in the table <em>Persons</em> corresponds to a <b>single person</b>.
+Table <em>Contacts</em> is from now <b>in a relation</b> to the table <em>Persons</em> (see next paragraph).
+</p>
+
+<a name="data_integrity"></a>
+<h4>Data integrity and validity</h4>
+<p>
+Note the way data is entered in fields <em>Name and surname</em> and <em>Address</em>. People entering data can be fallible, sometimes even negligent. In our sample data we have both different sequence of entering name and surname (Joan Smith and Smith Joan; Adam and ADAM) and many more ways of entering the same address. Surely you can think of many other ways.
+</p>
+<p>The above problem shows that e.g. when searching the telephone number of a person whose address is "Western Gate 1, Warsaw" you will not get a full result. You will get only one line instead of three. Moreover You will also not find all the telephone numbers searching for the value "Joan Smith" in the field <em>Name and surname</em>, because "Smith Joan" will not fit to "Joan Smith".
+</p>
+<p>How can you solve these problems using a database? You can do this by changing the design of the table <em>Persons</em> by:
+</p>
+<p>
+<ol>
+<li><p><b>Dividing data</b> in the field <em>Name and surname</em> into two separate fields: <em>Name</em> and <em>Surname</em>.
+</p></li>
+<li><p><b>Dividing data</b> in the field <em>Address</em> into three separate fields <em>Street</em>, <em>House number</em> and <em>Town</em>.
+</p></li>
+<li><p><b>Guaranteeing data correctness:</b> by ensuring that no fields are empty, e.g. you must always enter house number.
+</p>
+</ol>
+</p>
+<p>
+A modified table looks something like this:
+</p>
+<p>
+<table border="1" cellspacing="0" cellpadding="2">
+<tr><td colspan="5"><b>Persons</b></td></tr>
+<tr><td><b>Name</b></td><td><b>Surname</b></td><td><b>Street</b></td><td><b>House number</b></td><td><b>City</b></td></tr>
+<tr><td>Joan</td><td>Smith</td><td>Western Gate</td><td>1</td><td>Warsaw</td></tr>
+<tr><td>Adam</td><td>Willson</td><td>Frogs Drive</td><td>5</td><td>London</td></tr>
+<tr><td colspan="5"><b>Conditions</b></td></tr>
+<tr><td>required<br>field</td><td>required<br>field</td><td>required<br>field</td><td>required<br>field</td><td>required<br>field</td></tr>
+</table>
+</p>
+<p>
+Thanks to introducing conditions <em>required field</em> we can be sure that the entered data is complete. In case of other tables you may of course allow omitting certain fields while entering data.
+</p>
+
+<a name="data_limiting"></a>
+<h4>Limiting data view</h4>
+<p>
+Spreadsheet displays all lines and columns of the table which is bothersome in case of very large data sheets. You may of course filter and sort lines in spreadsheets, however you must be extra careful while doing so. Spreadsheet users are in risk of forgetting that their data view has been filtered what can lead to mistakes. For example, while calculating sums you may think you have 100 rows of data while in fact there are 20 rows more hidden.
+</p>
+<p>If you want to work on a small subset of data, e.g. to send it for others to edit, you can copy and paste it to another spreadsheet and after editing paste the changed data back to the main spreadsheet. Such "manual" editing may cause data loss or incorect calculations.
+</p>
+<p>To limit the <b>data view</b> database applications offer <em>queries</em>, <em>forms</em> and <em>reports</em>.
+</p>
+<p>A very practical way of limitting is the following extended version of the previously described table <em>Persons</em>:
+</p>
+<p>
+<table border="1" cellspacing="0" cellpadding="2">
+<tr><td colspan="6"><b>Persons</b></td></tr>
+<tr><td><b>Name</b></td><td><b>Surname</b></td><td><b>Street</b></td><td><b>House number</b></td><td><b>City</b></td><td><b>Income</b></td></tr>
+<tr><td>Joan</td><td>Smith</td><td>Western Gate</td><td>1</td><td>Warsaw</td><td>2300</td></tr>
+<tr><td>Adam</td><td>Willson</td><td>Frogs Drive</td><td>5</td><td>London</td><td>1900</td></tr>
+</table>
+</p>
+
+<p>
+Let's assume that the newly introduced column <em>Income</em> contains confidential data. How can you share e.g. contact details of the persons with your coworkers but without <b>revealing their income</b>? It is possible if <b>you share only a query and not the whole table</b>. The query could select all columns except for the column <em>Income</em>. In database world such a query is often known as a <em>view</em>
+</p>
+
+<a name="performance"></a>
+<h4>Performance and capacity</h4>
+<p>
+Your computer is probably quite fast, however you will easily see that it doesn't help with slow, large spreadsheets. Their low efficiency is first of all due to lack of indexes accelertaing the process of data search (databases do offer them). Moreover if you use things like system clipboard, even copying data may become troublesome with time.
+</p>
+<p>Spreadsheets containing large data sets may take ages to open. Spreadsheet loads lots of data to the computer's memory while opening. Most of the data loaded are probably useless/unneccessary for you at the moment. Databases unlike spreadsheets load data from computer storage only when needed.
+</p>
+<p>
+In most cases you will not have to worry how the database stores its data. This means that unlike spreadsheets, databases do not care about:
+</p>
+<ul>
+<li>
+The sequence of lines since you can order the lines according to your needs. Moreover, you can view the same data in many views with different orders. </li>
+<li>The same goes for columns (fields) of the table.</li>
+</ul>
+</p>
+<p>
+Together with <em>Limiting data view</em> described in the previous paragraph these qualities constitute the advantage of databases.
+</p>
+
+<a name="data_entry"></a>
+<h4>Data entry
+</h4>
+<p>
+The latest editions of applications for creating spreadsheets enable you to design data-entry forms. Such forms are most useful if your data cannot be conveniently displayed in tabular view, e.g. if the text occupies too many lines or if all the columns do not fit on the screen.
+</p>
+<p>
+In this case the very way the spreadsheet works is problematic. Fields for data entry are placed loosely within the spreadsheet and very often are not secure against the user's (intentional or accidental) intervention.
+</p>
+
+<a name="reports"></a>
+<h4>Reports</h4>
+<p>
+Databases enable grouping, limiting and summing up data in a form of a <em>report</em>. Spreadsheets are usually printed in a form of small tables without fully automatic control over page divisions and the layout of fields.
+</p>
+
+<a name="programming"></a>
+<h4>Programming</h4>
+<p>
+Applications for creating databases often contain full programming languages. Newer spreadsheets have this capability too, however calculations come down to modifying the spreadsheet's fields and simple data copying, regardless of the relevance an integrity rules mentioned in previous paragraphs.
+</p>
+<p>
+Data processing within a spreadsheet is usually done via a graphical user's interface which may slow down the data processing speed. Databases are capable of working in background, outside of graphical interfaces.
+</p>
+
+<a name="multiuse"></a>
+<h4>Multiuse</h4>
+<p>It is hard to imagine a multiuse of one spreadsheet. Even if it is technically possible in the case of the latest applications, it requires a lot of discipline, attention and knowledge from the users, and these cannot be guaranteed.
+</p>
+<p>A classical way to sharing data saved in a spreadsheet with other person is to send a file as a whole (usually using e-mail) or providing a spreadsheet file in a computer network. This way of work is ineffective for larger groups of people - data that could be needed in a particular time may be currently locked by another person.
+</p>
+<p>
+On the other hand, databases have been designed mainly with multiuser access in mind. Even for simplest version locking at particular table row's level is possible, what enables easy sharing of table data.
+</p>
+
+<a name="security"></a>
+<h4>Security</h4>
+<p>
+Securing a spreadsheet or its particular sections with a password is only symbolic activity.
+After providing a spreadsheet file in computer network, every person being able to copy the file can try to break the password. It is sometimes not so hard as the password is stored in the same file as the spreadsheet.
+</p>
+<p>Features for edit locking or copy locking of a spreadsheet (or its part) is equally easy to break.
+</p>
+<p>
+Databases (except these saved in a file instead of a server) do not need to be available in a single file. You're accessing them using a computer network, usually by providing a user name and a password. You are gaining access only to these areas (tables, forms or even selected rows and columns) whose were assigned to you by setting appropriate access rights.
+</p>
+<p>
+Access rights can affect ability of data editing or only data reading. If any data is not avaliable to you, it will not be even sent to your computer, so there is no possibility of making a copy of the data in such easy way as in case of spreadsheet files.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/01_03_00_design.html b/kexi/doc/handbook/html.tmp/01_03_00_design.html
new file mode 100644
index 00000000..63650191
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/01_03_00_design.html
@@ -0,0 +1,8 @@
+<H2>1.3. Database design</H2>
+
+<p>
+Database design needs careful planning. Note that <em>Contacts</em> table redesign proposed in this section 1.2 can generate problems when the table is filled with data. For exampe, renaming a field is a simple task, but splitting <em>Address</em> field into two separate fields requires careful and tedious work.
+</p>
+<p>
+To avoid such situations, <b>rethink your database project</b> before you create it in your computer, and before you and others will start to use it. Thus, by investing some time initially, you will most probably save your time on everyday use.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/01_04_00_who_needs.html b/kexi/doc/handbook/html.tmp/01_04_00_who_needs.html
new file mode 100644
index 00000000..33a5f379
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/01_04_00_who_needs.html
@@ -0,0 +1,24 @@
+<h2>1.4. Who needs databases?</h2>
+
+<p>
+Stick to spreadsheets if:
+</p>
+<p>
+</p><ul>
+<li>Your needs are limited and your data will never grow to large volumes (can you actually forecast that now?)</li>
+<li>You are unable to acquire the methodology of database construction.
+You may however consider either outsorcing this task to someone else or using simpler tools.</li>
+<li>You use complicated spreadsheets and you lack time or money to switch to databases.
+Think or ask someone whether this does not lead down a blind alley.
+Don't count on magical tools that would change your spreadsheet (regardless how well made) into a database.</li>
+</ul>
+
+<p>
+Consider using databases if:
+</p>
+<ul>
+<li>Your data collection expands every week.</li>
+<li>You often create new spreadsheets, copy within these and you feel that this work
+is getting more and more tedious. In this case the effort of switching to databases easily pays off.</li>
+<li>You create reports and statemets for which the table view of a spreadsheet is not suitable. You can then consider switch to using a database with form views.</li>
+</ul>
diff --git a/kexi/doc/handbook/html.tmp/01_05_00_db_software.html b/kexi/doc/handbook/html.tmp/01_05_00_db_software.html
new file mode 100644
index 00000000..0f1c08cc
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/01_05_00_db_software.html
@@ -0,0 +1,54 @@
+<br><h2>1.5. Software for database construction</h2>
+<p>
+So far you have learnt the general characteristics of databases without going into much
+detail about specific applications for designing them.
+</p>
+<p>
+The first databases were built together with large mainframe computers in the 60s, e.g. IBM System/360.
+Those were not the days of PCs, therefore these databases required a highly specialized personnel.
+Although the old computers' hardware was unreliable, they were immeasurably slower and had less
+storage capacity, one feature of databases still remains most attractive: the data access by many
+users through network.
+</p>
+
+<p>
+In the 70s scientists formed the theory of relational databases
+(terms like: <em>table</em>, <em>record</em>, <em>column (field)</em> and <em>relationality</em> and many others).
+On the basis of this theory IBM DB2 and Oracle databases were created,
+which have been developed and used till today. In the late 70s the first PCs
+were constructed. Their users could (gradually) utilize many types of applications,
+including those for database construction.
+</p>
+<p>When it comes to large databases in companies, the situation hasn't changed:
+they still require powerful computers or computer complexes called <em>clusters</em>.
+This goes, however, beyond the topic of this manual.
+</p>
+<p>
+In the area of "accessible" databases with graphic user interface
+for PCs you can choose from the following:
+</p>
+<p>
+</p><ul>
+<li><p><a href="http://www.dbase.com/">DBase</a>
+- a tool for databases operation for DOS popular in the 80s. Files in DBase format
+are still used in some specific cases due to their simplicity.
+</p></li>
+<li><p><a href="http://msdn.microsoft.com/vfoxpro/productinfo/overview/">FoxPro</a>
+- an application similar to DBase (early 90s). After being taken over by
+Microsoft, graphic user interfaces were introduced and therefore it is
+used for creating databases on PCs. This product is still offered, though seems a bit obsolete.
+</p></li>
+<li><p><a href="http://office.microsoft.com/access/">Microsoft Access</a>
+- an application for databases (data and graphic interface design) with many simplifications,
+therefore suitable for beginners, designed in the late 80s,
+based on 16-Bit Architecture. Product offered and widely used till today, especially by small companies,
+where efficiency and multiuser requirements are not very demanding.
+</p></li>
+<li><p><a href="http://www.filemaker.com/">FileMaker</a> - popular application similar to MS Access in simplicity, operating on Windows and Macintosh platforms, offered sice 1985.
+</p></li>
+<li><p><a href="http://www.kexi.pl/">Kexi</a>
+- a multiplatform application (Unix/Linux, Windows, Mac OS X) designed in 2003,
+developed according to OpenSource principles, part of the global <a href="http://www.kde.org/">K Desktop Environment</a> project, i.e. graphic environment for Unix/Linux systems. A significant contributor to Kexi's development is OpenOffice Poland company.
+</p></li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/02_00_00_idx_intro_to_kexi.html b/kexi/doc/handbook/html.tmp/02_00_00_idx_intro_to_kexi.html
new file mode 100644
index 00000000..7b9fc659
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/02_00_00_idx_intro_to_kexi.html
@@ -0,0 +1,7 @@
+<H1>2. Introduction to Kexi</H1>
+<p>
+In this chapter you will learn what Kexi application is and how it can be of use to you. You will be able to decide which areas of your work can be simplified or automatized using Kexi.
+</p>
+<p>
+Perhaps you already know some tools for creating databases or at least spreadsheets. If so, here you can learn about the basic differences between Kexi and other popular applications.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/02_01_00_what_is_kexi.html b/kexi/doc/handbook/html.tmp/02_01_00_what_is_kexi.html
new file mode 100644
index 00000000..9cfbe28d
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/02_01_00_what_is_kexi.html
@@ -0,0 +1,25 @@
+<H2>2.1. What is Kexi?</H2>
+<p>
+Briefly speaking, Kexi is the application for creating databases and for data management. It enables you:
+</p>
+<p>
+<ul>
+<li>to build databases from scratch using the existing templates or your own database design
+<li>to develop databases and adjust them to your changing needs
+<li>to enter data conveniently using advanced data sheets and forms
+<li>to process data - to sort, filter, group and sum up and many other operations
+<li>share your data with other users <!-- TODO: also using computer networks -->
+</ul>
+</p>
+<p>
+Kexi is a member of a PlusOfficePL family of products offered by OpenOffice Polska together with technical support. Kexi nale¿±cy do rodziny programów PlusOfficePL, oferowanej wraz ze wsparciem technicznym przez firmê OpenOffice Polska.
+</p>
+<p>
+The motto of Kexi application is "Database creation for everyone". Introduction of this product was motivated by the lack of software Rapid Application Development tools similiar to Microsoft Access, FoxPro, Oracle Forms or FileMaker, that would be available for all contemporary hardware and system platforms. Kexi was made to fill this gap.
+</p>
+<p>
+Kexi is the first large KDE application available for Microsoft Windows, which makes it easier for the user to transfer data between platforms, integrate and migrate for more cost-efficient systems like Linux.
+</p>
+<p>
+Kexi is also one of the products of an international <a href="http://www.kde.org/">K Desktop Environment</a> project, a graphic environment for Unix/Linux systems. The KDE project involves many companies (including the largest ones such as Novell and IBM), organisations and independent authors.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/02_02_00_features_of_kexi.html b/kexi/doc/handbook/html.tmp/02_02_00_features_of_kexi.html
new file mode 100644
index 00000000..9666e8d1
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/02_02_00_features_of_kexi.html
@@ -0,0 +1,15 @@
+<H2>2.2. Kexi Features</H2>
+<p>
+Kexi has many features that distinguish it from the competition:
+</p>
+<p>
+<ul>
+<li>It works under different operating systems: Linux, Windows, Macintosh.</li>
+<li>Data and design is highly portable between these platforms.</li>
+<li>Different database management systems supported: MySQL, PostgreSQL (others to come).</li>
+<li>Convinient configuration and adjusting of the application.</li>
+<li>Fully translated user interface, application is available in many language versions, without the need to install them separately. Currently about 30 languages are supported, with a target of 60.</li>
+<li>Perfect integration both in the popular KDE graphical enviroment for Linux and in Microsoft Windows.</li>
+</li>
+</ul>
+</p> \ No newline at end of file
diff --git a/kexi/doc/handbook/html.tmp/02_03_00_is_kexi_for_me.html b/kexi/doc/handbook/html.tmp/02_03_00_is_kexi_for_me.html
new file mode 100644
index 00000000..4cb22f17
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/02_03_00_is_kexi_for_me.html
@@ -0,0 +1,12 @@
+<H2>2.3. Is Kexi for me?</H2>
+<p>
+Kexi is designed to serve both beginners (when it comes to databases) as well as more advanced users who know a great deal about databases. If you belong to the latter group, you will probably want to skip the sections of this documentation you are familiar with. However you will surely benefit from reading <a href="02_04_00_differences.html">chapter 2.4</a> intended especially for experts.
+</p>
+<p>
+If you have only used spreadsheets for data processing so far, you should read chapter <a href="01_02_00_db_spreadsheet.html">1.2. Database and spreadsheet</a>.
+If you feel that while using spreadsheets some activities, like entering the data, are too tedious and time-consuming, and final result contains hard-to-find errors, then Kexi could be a good solution for you.
+Even if you use only a small part of functions provided by Kexi, your data stored in a form of database will probably be more legible and easier to comprehend for your coworkers.
+</p>
+<p>
+If you have previously used applications with a graphic user interface (which is highly probable), using Kexi should be easy since it is in many ways similar.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/02_04_00_differences.html b/kexi/doc/handbook/html.tmp/02_04_00_differences.html
new file mode 100644
index 00000000..6e0c3ccd
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/02_04_00_differences.html
@@ -0,0 +1,103 @@
+<H2>2.4. Differences between Kexi and other applications</H2>
+
+<H3>2.4.1. Terminology used in Kexi and in other database applications</H3>
+<p>
+English terms are bracketed.
+</p>
+<p>
+<table border="1" cellspacing="0" cellpadding="5">
+<tr align="left">
+<th>Kexi</th> <th>MS Access</th> <th>dBase i FoxPro</th> <th>Paradox</th>
+</tr>
+<tr>
+<td>Database (<i>Database</i>)</td> <td>Database</td> <td>Catalog (<i>Catalog</i>)</td> <td>Directory of Related files (<i>Directory of Related files</i>)</td>
+</tr>
+<tr>
+<td>Table (<i>Table</i>)</td> <td>Table</td> <td>Database file<br>(<i>Database file</i>)</td> <td>Table</td>
+</tr>
+<tr>
+<td>Datasheet (<i>Datasheet</i>)</td> <td>Datasheet</td> <td><i>BROWSE</i> Command</td> <td><i>View</i> Command</td>
+</tr>
+<tr>
+<td>Table design (<i>Table design</i>)</td> <td>Table design</td> <td><i>MODIFY STRUCTURE</i> Command</td> <td><i>Modify Restructure</i> Command</td>
+</tr>
+<tr>
+<td>Primary key<br>(<i>Primary key</i>)</td> <td>Primary key</td> <td>Unique Index</td> <td>Key field</td>
+</tr>
+<tr>
+<td>Index (<i>Index</i>)</td> <td>Index</td> <td><i>Index</i></td> <td><i>Tools QuerySpeed</i></td>
+</tr>
+<tr>
+<td>Validation rule</td> <td>Validation rule</td> <td><i>PICTURE/VALID</i> Clause</td> <td><i>ValChecks</i></td>
+</tr>
+<tr>
+<td>Query (<i>Query</i>)</td> <td>Query</td> <td><i>Query, QBE, View</i></td> <td><i>Query</i></td>
+</tr>
+<tr>
+<td>Form (<i>Form</i>)</td> <td>Form</td> <td>Screen</td> <td><i>Forms</i></td>
+</tr>
+<tr>
+<td>Subform (<i>Subform</i>)</td> <td>Subform</td> <td><i>Multiple File Screen</i></td> <td><i>Multiple-record selection</i></td>
+</tr>
+<tr>
+<td>"Open a form" Command<br>(<i>Open a form</i></td> <td><i>Open a form</i> Command</td> <td><i>SET FORMAT TO, EDIT</i> Command</td> <td><i>Image PickForm</i></td>
+</tr>
+<tr>
+<td>Find command<br>(<i>Find command</i>)</td> <td>Find command</td> <td><i>LOCATE AND SEEK</i> Command</td> <td><i>Zoom</i></td>
+</tr>
+<tr>
+<td>List box, combo box</td> <td>List box, combo box</td> <td>Pick list</td> <td>Lookup</td>
+</tr>
+<tr>
+<td>Macro (<I>Macro</I>)</td> <td>Macro</td> <td>-</td> <td>-</td>
+</tr>
+<tr>
+<td>Script (<I>Script</I>)</td> <td>Script</td> <td>Program file</td> <td>Script</td>
+</tr>
+</table>
+</p>
+
+<p>
+As you can see from the table above the terminology used in Kexi is close to the one used in MS Access application.
+</p>
+
+<H3>2.4.2. Basic data types used in Kexi and in other database applications</H3>
+<p>
+<table border="1" cellspacing="0" cellpadding="5">
+<tr align="left">
+<th>Kexi</th> <th>MS Access</th> <th>dBase i FoxPro</th> <th>Paradox</th>
+</tr>
+<tr>
+<td>Text (<I>Text</I>)</td> <td>Text</td> <td>Character</td> <td><I>Alphanumeric</I></td>
+</tr>
+<tr>
+<td>Long text (<I>Long text</I>)</td> <td>Memo</td> <td><I>Memo</I></td> <td><I>Memo</I></td>
+</tr>
+<tr>
+<td>Date, Time (<i>Date</i>, <i>Time</i>)</td> <td>Date, Time</td> <td><I>Date</I></td> <td><I>DateTime</I></td>
+</tr>
+<tr>
+<td>Object (<I>Object</I>)</td> <td>OLE Object (<I>OLE Object</I>)</td> <td><I>General</I></td> <td><I>OLE, Graphical, Binary</I></td>
+</tr>
+<tr>
+<td>Yes/No (<I>Yes/No</I>)</td> <td>Yes/No</td> <td>Logical</td> <td><I>Logical</I></td>
+</tr>
+<tr>
+<td>Integer number (<I>Integer number</I>)</td> <td>Number (<I>Integer</I>)</td> <td><I>Numeric</I></td> <td><I>Integer</I></td>
+</tr>
+<tr>
+<tr>
+<td>Big Integer number (<I>Big integer number</I>)</td> <td>Liczba ca³kowita d³uga (<I>Long integer</I>)</td> <td><I>Numeric</I></td> <td><I>Long Integer</I></td>
+</tr>
+<td>Floating-point number:<br>Single/Double precision<br>(<I>Floating-point number</I>)</td> <td>Single/Double precision number<br>(<I>Single/Double precision number</I>)</td> <td><I>Float</I></td> <td><I>Number</I></td>
+</tr>
+</table>
+</p>
+
+<!--
+Szczegó³owy wykaz typów danych obs³ugiwanych przez Kexi, wraz z zakresami, znajduje siê w dodatku ###.
+
+ --terminologia (tabelka roznic Kexi/MSA/dBase,FoxPro/Paradox) [str.18]
+ --ró¿nice w sposobie u¿ywania
+ ¶rodowisko pracy z Kexi (GUI, CLI)
+--> \ No newline at end of file
diff --git a/kexi/doc/handbook/html.tmp/04_00_00_idx_basics_kexi.html b/kexi/doc/handbook/html.tmp/04_00_00_idx_basics_kexi.html
new file mode 100644
index 00000000..9b6c3196
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_00_00_idx_basics_kexi.html
@@ -0,0 +1,3 @@
+<H1>4. Kexi usage basics</H1>
+
+<!-- todo - index -->
diff --git a/kexi/doc/handbook/html.tmp/04_01_00_project_files.html b/kexi/doc/handbook/html.tmp/04_01_00_project_files.html
new file mode 100644
index 00000000..4ecab5b8
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_01_00_project_files.html
@@ -0,0 +1,13 @@
+<H2>4.1. Project files</H2>
+<p>Many applications such as OpenOffice.org or Microsoft Excel create files which are called <em>documents</em>. Kexi also creates files but we will call them <em>Kexi projects</em> or </em>Kexi database files</em>.
+</p>
+
+<H4>Notes</H4>
+<ul>
+<li>Kexi database can also be stored on database servers. THis is why, to avoid ambiguity, we talked above about <em>Kexi database files</em> and not <em>Kexi database</em>. The latter will be used however if the way you store the database is irrelevant.</li>
+</ul>
+<p>
+<img src="img/04_01_00_kexi_project_file.png">
+<br>Kexi project file on the desktop<br><br>
+The name of the Kexi database file has extention <em>.kexi</em> both on MS Windows and Linux.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/04_02_00_running_kexi.html b/kexi/doc/handbook/html.tmp/04_02_00_running_kexi.html
new file mode 100644
index 00000000..fdf05130
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_02_00_running_kexi.html
@@ -0,0 +1,25 @@
+<H2>4.2. Running Kexi</H2>
+
+<H3>4.2.1. Linux or Unix operating systems</H3>
+<p>
+In the <em>K</em> menu of the K Desktop Environment click <em>Office</em> folder and then click <em>Kexi</em> entry.
+</p>
+<p>
+You may also run Kexi from command line (e.g. using <em>Konsole</em> application or hotkey Alt+F2) and entering:
+</p>
+<pre>
+kexi
+</pre>
+<p>
+See chapter <a href="06_04_00_using_CLI.html">6.4. Using the command line</a>.
+</p>
+
+<H3>4.2.2. Microsoft Windows operating systems</H3>
+<p>
+Choose <em>Applications</em> from menu Start and <em>Kexi</em> folder. Click <em>Kexi</em> shortcut.
+</p>
+
+<H3>4.2.3. Mac OS X operating systems</H3>
+<p>
+In folder <em>Applications</em> click icon <em>Kexi</em>.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/04_03_00_creating_database.html b/kexi/doc/handbook/html.tmp/04_03_00_creating_database.html
new file mode 100644
index 00000000..aa27e210
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_03_00_creating_database.html
@@ -0,0 +1,18 @@
+<H2>4.3. Creating a new database project</H2>
+<ol>
+<li><p>
+Run Kexi (see <a href="04_02_00_running_kexi.html">Running Kexi</a>). You will see the following window:
+
+<br><img src="img/04_03_00_startup_window.png">
+<br>Kexi startup window<br><br>
+
+</p></li>
+<li><p>Click <em>Ok</em> button to run the creation of a new project. <p></li>
+<li><p>Click <em>Cancel</em> button or press <kbd>Escape</kbd> to close window. You will see an empty application window (only menu).
+</p></li>
+</ol>
+
+<p>
+</p>
+<!-- TODO: info about using 'new project wizard' -->
+
diff --git a/kexi/doc/handbook/html.tmp/04_04_00_project_opening.html b/kexi/doc/handbook/html.tmp/04_04_00_project_opening.html
new file mode 100644
index 00000000..65da0854
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_04_00_project_opening.html
@@ -0,0 +1,59 @@
+<H2>4.4. Opening an existing Kexi database file</H2>
+<p>
+To open an existing Kexi database file:
+</p>
+<p>
+<ul>
+<li><a href="#window_open_existing">select it in <em>Open Existing Project</em></a> window; or</li>
+<li><a href="#open_icon">open it by clicking on .kexi file's icon</a></li>
+</ul>
+</p>
+
+<a name="window_open_existing"></a>
+<H3>4.4.1. Opening a database file in <em>Open Existing Project</em> window</H3>
+<p>
+<ol>
+<li><p>
+Run Kexi application (see <a href="04_02_00_running_kexi.html">Running Kexi</a>). You should see &quot;Choose Project&quot; startup dialog window. Choose <em>Open Existing Project</em> tab. You will see following dialog:
+ <br><img src="img/04_04_01_startup_open_existing.png">
+ <br>Startup window: <em>Open Existing Project</em> tab<br><br>
+</p></li>
+<li><p>From <em>Look in</em> drop down, pick a folder containing a file you are looking for.
+</p></li>
+<li><p>Pick a file, you want to open ir enter its name using the <em>File name</em> box.
+</p></li>
+<li><p>Click <em>OK</em> button.
+</p></li>
+</ol>
+<H4>Notes</H4>
+<p>
+<ul>
+<li>By default <em>File type</em> drop down list has <em>All Supported Files</em> setting chosen.
+In case the file you are looking for has other extension, you can change selection of <em>File type</em> drop down list to <em>All files</em> to display all available files (regardless of an extension).
+</li>
+<li>If you have selected a file of external type like MS Access' .mdb file, Kexi will provide you with option to import the file.
+<!-- todo an advice to read "importing" chapter will be placed here -->
+</li>
+<li>If you have selected a <em>connection data</em> file (with .kexic extension) or a <em>shortcut to a project on database server</em> file (with .kexis extension), Kexi will display appropriate windows.
+</li>
+</ul>
+</p>
+
+<a name="open_icon"></a>
+<H3>4.4.2. Opening an existing Kexi database file by clicking on .kexi file's icon</H3>
+<p>
+Click file's icon using your file manager or desktop:
+</p>
+<img src="icons/mime-kexiproject_sqlite.png" class="icon"/>
+<p>
+Kexi will open this database project automatically.
+</p>
+
+<H4>Notes</H4>
+<p>
+<ul>
+<li>
+<p><b>Note about databse files accessed remotely.</b> You may want to open a database file that is located on a remote source (e.g. an web or FTP server or MS Windows share). K Desktop Environment allows you to open files from remote sources directly in applications and saving changes back to the source, but this is not the case with database files. By clicking on a database file located on a remote source, you will cause a download the file to a temporary directory on your computer and all eventual your changes will be made to this local file. The remote original of the file will remain unchanged after you close Kexi, so it's recommended to copy (download) the file to your computer first, then open the file and copy it back to remove source if you want to make it up to date.</p>
+</li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/04_05_00_help_on_help.html b/kexi/doc/handbook/html.tmp/04_05_00_help_on_help.html
new file mode 100644
index 00000000..cd1d1339
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_05_00_help_on_help.html
@@ -0,0 +1,10 @@
+<H2>4.5. Using built-in help</H2>
+<p>Following ways to get built-in help in Kexi are available:
+<ul>
+<li><b>The Handbook in form of electronic document.</b>
+THe Handbook is available by presing <kbd>F1</kbd> key or selecting <em>Help&gt;Kexi Handbook</em> from the menubar.
+</li>
+<li><b><em>What's This?</em> hints.</b> Select <em>Help&gt;What's This?</em> from the menu bar and click on an area of the application to get hints about it.
+</li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/04_06_00_main_application_elements.html b/kexi/doc/handbook/html.tmp/04_06_00_main_application_elements.html
new file mode 100644
index 00000000..7411b12b
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_06_00_main_application_elements.html
@@ -0,0 +1,21 @@
+<H2>4.6. Main application elements</H2>
+<p>
+ <br><img src="img/04_06_00_main_window.png">
+ <br>Kexi's main window<br><br>
+
+Main elements of Kexi application's window are:
+<ul>
+<li><p><b>Menubar</b> - contains available commands for the application. You will find detailed description of any of the commands in <a href="aa_00_00_menu.html">Appendix ??</a>.
+</p></li>
+<li><p><b>Toolbar</b> - contains most frequently used commands.
+</p></li>
+<li><b><a href="04_06_01_project_navigator.html">Project Navigator's pane</a></b> - contains a list of any object (tables, queries, forms, ...) created within the currently opened database project. The navigator also contains small toolbar with most usable commands related to the database objects.
+</li>
+<li><p><b><a href="04_06_02_object_windows.html">Opened database objects area</a></b> - a central area of the application taking most of the screen space. For IDEAl user interface mode it contains a switchable tabs with windows that are always maximized. For Childframe user interface mode it contains floating windows.
+</li>
+<li><p><b><a href="04_06_03_property_editor.html">Properties pane</a></b> - contains a list of properties of currently activated database object. For certain objects (e.g. form's widgets) it can be consisted of several tabs.
+</p></li>
+<li><p><b>Taskbar</b> - contains a list of currently opened windows with database objects. For IDEAl user interface mode, it is available as a number of tabs. For Childframe user interface mode, it is available as a number of buttons, behaving just like your operating system's taskbar.
+</p></li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/04_06_01_project_navigator.html b/kexi/doc/handbook/html.tmp/04_06_01_project_navigator.html
new file mode 100644
index 00000000..c0df2e29
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_06_01_project_navigator.html
@@ -0,0 +1,33 @@
+<H3>4.6.1. Project Navigator pane</H3>
+<p>
+Project Navigator pane is one of the most frequently used elements of the Kexi main window.
+The pane contains a list of all objects created within the currently opened Kexi database project. The objects are splitted into groups: tables, queries, forms.
+<br>
+</p>
+<a name="mini_toolbar"></a>
+<p>
+Project Navigator pane also contains a <b>small toolbar for most frequently used commands</b> (from left to right): <em>Open selected object</em>, <em>Design selected object</em>, <em>Create a new object</em>, and <em>Delete selected object</em>.
+</p>
+<p>
+<img src="img/04_06_01_nav_mini_toolbar.png">
+<br>A toolbar in the Project Navigator pane<br><br>
+</p>
+<p>
+</p>
+<p>
+For each object on the list context menu is available using the &RMB;. For example, this is context menu for <em>persons</em> table:
+ <br><img src="img/04_06_01_context_menu.png">
+ <br>Project Navigator pane's context menu<br><br>
+
+Commands of this menu is documented in <a href="aa_05_00_menu.html#nav_panel_menu">Appendix A.10<!-- TODO (js) APPENDIX number --></a>.
+<p>
+See also a list of available shortcuts in <a href="ab_00_00_shortcuts.html#nav_panel">Appendix B.2. Project Navigator pane<!-- TODO (js) APPENDIX number --></a> .
+</p>
+
+<p>
+Double clicking with &LMB; on the object's name on the list allows to open the object in Data View. If the object's window was alread opened, the action just activates the window without switching it's view mode.
+</p>
+<p>
+Note that your operating system can be set up to handle single clicks instead of double clicks. In this case it is enough to single click on the object name to open it's window.
+<!-- TODO (js) but then how to select an object without opening it? -->
+</p>
diff --git a/kexi/doc/handbook/html.tmp/04_06_02_object_windows.html b/kexi/doc/handbook/html.tmp/04_06_02_object_windows.html
new file mode 100644
index 00000000..42bd0a08
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_06_02_object_windows.html
@@ -0,0 +1,35 @@
+<H3>4.6.2. Database object windows</H3>
+
+<H4>Opening object's window</H4>
+<p>
+To open a database object in a window:
+<ol>
+<li><p>Select the object in <a href="04_06_01_project_navigator.html">Project Navigator pane</a></p></li>
+<li><p>Click <img src="icons/edit.png" class="icon"> <em>Open</em> button on the <a href="04_06_01_project_navigator.html#mini_toolbar">Project Navigator pane's toolbar</a>.</p></li>
+</ol>
+
+<H4>Commands related to object windows</H4>
+
+<H5>Closing an object window</H5>
+<p>
+When the <a href="08_01_00_mdi.html#mode_ideal">IDEAl</a> user interface mode (the default) is used, each window has it's own tab. Move the mouse pointer to the tab. You will see <img src="fileclose.png" class="icon"> close button. Click it to close the tab.
+</p>
+<p>
+In the <a href="08_01_00_mdi.html#mode_childframe">Childframe</a> on the right hand of each opened window there are buttons you can use to control the window. Click the first one on the right hand to close the window.
+</p>
+<p>
+Alternatively, regardless of the user interface mode you are using, you can select <em>Window</em> -&gt;<em>Close</em> from the Menubar.
+</p>
+
+<H5>Window's buttons for Childframe user interface mode</H5>
+<p>
+ <br><img src="img/04_06_02_window_buttons.png">
+ <br>Window's buttons<br><br>
+Other button's (from right to left) can be used to: maximize, minimize and undock the window.
+</p>
+<p>
+There's a small icon on the left hand of the window which can be clicked to show a context menu with commands related to the window.
+</p>
+<p>
+See also <a href="08_02_00_dock_undock.html">8.2. Docking and undocking of the windows<!-- TODO (js) chapter# --></a>.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/04_06_03_property_editor.html b/kexi/doc/handbook/html.tmp/04_06_03_property_editor.html
new file mode 100644
index 00000000..d823c056
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/04_06_03_property_editor.html
@@ -0,0 +1,44 @@
+<H3>4.6.3. Property Editor pane</H3>
+<p>
+The Property Editor pane allows to change properties of object displayed in the active window. Depending on the context, the pane is consisted of one or more tabs. The first, always visible, <em>Properties</em>tab contains the list of available properties.
+</p>
+<p>
+ <img src="img/04_06_03_prop_panel.png">
+ <br>Property Editor<br><br>
+</p>
+<p>
+Rules for using the Property Editor:
+</p>
+<p>
+<ul>
+<li>One row means a single property.</li>
+<li>You can use mouse or keyboard to change values of particular properties.</li>
+<li>Most frequently used types of property values are:
+<ul>
+<li>a number; you can enter the value directly or increate or decrease it's value clicking with the &LMB; on the arrows: <img src="img/04_06_03_prop_arrows.png" class="icon"></li>
+<li>text</li>
+<li>drop down list of values</li>
+<li>Yes/No value; in form of a button you can toggle; button toggled on means <em>yes</em> (<em>true</em>) value, button toggled off means <em>no</em> (<em>false</em>) value; see the above figure</li>
+</ul>
+</li>
+<li>There is no need for accepting changed value: changes are visible immediately after moving to a different row of the Property Editor's list or by pressing <em>Enter</em> key.</li>
+<li>Names of the recently changed properties that not yet were stored in the database are marked with bold text.</li>
+<li>After changing a value of property, a special <em>Undo changes</em> button appears on the right hand of the Property Editor's list:<br>
+ <img src="img/04_06_03_prop_undo.png" class="icon"><br>
+By clicking it you can revert the value of the property to the original value that was loaded from the database upon opening the database object. The button is only visible when the property is actually highlighted.
+</li>
+</ul>
+</p>
+<p>
+Property Editor pane is empty if:
+<ul>
+<li>no single database object's window is opened, or</li>
+<li>active database object's window does not offer properties; it is usually the case when it is opened in Data View instead of Design View</li>
+</ul>
+</p>
+
+<!-- TODO (js) describe custom form designer's tabs -->
+
+<p>
+See also the list of keyboard shortcuts available for the Property Editor pane in appendix <a href="ab_00_00_shortcuts.html#prop_panel">B.3. Property Editor pane<!-- TODO (js) chapter# --></a>.
+</p>
diff --git a/kexi/doc/handbook/html.tmp/05_00_00_idx_building_simple_database.html b/kexi/doc/handbook/html.tmp/05_00_00_idx_building_simple_database.html
new file mode 100644
index 00000000..77be8d8c
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/05_00_00_idx_building_simple_database.html
@@ -0,0 +1,18 @@
+
+<H1>5. Building Simple Databases</H1>
+<p>
+ To learn basics of Kexi usage, first you could build a simple database utilizing most elementary Kexi's features. To make things simpler, advanced database design topics will not be covered here.
+</p>
+<p>
+Start by creating a new empty <em>Phone Book</em>. See chapter <a href="04_03_00_creating_database.html">4.3. <!-- TODO number -->Creating a new database project</a> for information how to do this.
+</p>
+<p>
+Having a new empty database project, perform the following steps:
+<ol>
+<li>Design database tables. Read section <a href="05_01_00_table_designing.html">5.1</a>.</li>
+<li>Enter data to tables. Read section <a href="05_02_00_data_entering_into_tables.html">5.2</a></li>
+<li>Design database queries. Read section <a href="05_03_00_query_designing.html">5.3</a></li>
+<li>Design forms. Read section <a href="05_04_00_form_designing.html">5.4</a></li>
+</ol>
+
+</p>
diff --git a/kexi/doc/handbook/html.tmp/05_01_00_table_designing.html b/kexi/doc/handbook/html.tmp/05_01_00_table_designing.html
new file mode 100644
index 00000000..14c0b511
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/05_01_00_table_designing.html
@@ -0,0 +1,109 @@
+
+<H2>5.1. Designing Database Tables</H2>
+
+<p>
+First, there will be two tables added to your database: <em>persons</em> and <em>phone_numbers</em>. These are exactly the same tables as described in chapter <a href="01_02_00_db_spreadsheet.html">1.2. A database and a spreadsheet</a>. A layout for <em>Persons</em> can be found in section <a href="01_02_00_db_spreadsheet.html#data_integrity">Data integrity and validity</a> in that chapter.
+</p>
+
+<p>
+<ol>
+<li><p>
+Select <em>Insert-&gt;Table</em> from the Menubar. You can also use button
+<img src="icons/table_newobj.png" class="icon"> <em>Create object: table</em> on the Project Navigator's toolbar (see section <a href="04_06_01_project_navigator.html">4.6.1. Project Navigator pane</a>).
+</p></li>
+<li><p>
+Table Designer's window will appear. Looking at the top of designer's window you will notice that Kexi proposed you a generic name like <em>template</em> for the new table. The table design is not saved yet so you will be able to assign more proper name later. Moreover, because of the same reason, the table name is not yet visible in the <a href="04_06_01_project_navigator.html">Project navigator</a>.
+</p></li>
+</ol>
+
+<a name="design_window"></a>
+<H3>5.1.1. Table Designer window</H3>
+
+<p>
+Table Designer window consists of following columns:
+<ul>
+<li><b>PK</b> - Primary key. It will be discussed this topic in <a href="06_00_00_idx_building_advanced_database.html">chapter 6</a>.</li>
+<li><b>Filed Name</b> - field name (in other words: column name) which will be visible during data entering.</li>
+<li><b>Data Type</b> - a combo box containing a list of data types allowing to set a main rule for entered data for a given field. For example, when integer number data type is set for a field, database user will not able to enter a letter characters into this field.
+<!-- More information about data types is available in section <a href="??_??_??_datatypes.html">???. Data types</a>. -->
+</li>
+<li><b>Comments</b> - you can enter here any informations useful for understanding what the given field is provided for. This additional text will be saved within the table design and only visible when it is designed.</li>
+</ul>
+</p>
+<p>
+In <em>Table designer</em> window, every row corresponds to a single table field. You can recognize you are in <em>design mode</em> because the <nobr><img src="icons/state_edit.png" class="icon"> <em>Switch to Design View mode</em></nobr> button is toggled on within the main Kexi toolbar (see the figure below).
+</p>
+<p>
+To start entering the <em>Persons</em> table design:
+<ol>
+<li>
+<p>In the first row click on the cell in <em>Field name</em> column and enter <kbd>name</kbd> field name.
+ <br><img src="img/05_01_00_defining_columns.png">
+ <br>Entering names for table fields<br><br>
+</p>
+<a name="note_field_names"></a>
+<H4>Notes about field names</H4>
+<p>
+ <ul>
+ <li>You must not left name for any of your fields empty.</li>
+ <li>Field names could not contain natonal character (like ±, ¶, Ü), special characters or space characters. The names must only contain roman letters, numbers and underscore sign &quot;_&quot;. Use the latter instead of spaces or dashes.</li>
+ <li>Field names must be started with a roman letter or underscore sign &quot;_&quot;, never with a number.</li>
+ <li>It does not matter whether you are using small or capital letters. For Kexi databases, &quot;Persons&quot; is the same ad &quot;persons&quot; name.</li>
+ </ul>
+</p>
+</li>
+<li><p>
+Use down arrow key to move to next row. In the <em>Data Type</em> column, <em>Text</em> type appeared automatically. This is what you actually expected since a person's name should be in fact of type text.
+</p></li>
+<li><p>
+In a similar way, enter the following fields into the table design:
+ <ul>
+ <li><kbd>surname</kbd></li>
+ <li><kbd>street</kbd></li>
+ <li><kbd>house_number</kbd></li>
+ <li><kbd>city</kbd></li>
+ </ul>
+</p></li>
+<li><p>
+All above fields except <kbd>house_number</kbd> are of type text. Change <kbd>house_number</kbd> field's type to <em>integer number</em>. To do this, click on a cell in the <em>Data Type</em> column, <kbd>house_number</kbd> row and then click on drop down list's button <img src="icons/dropdown_button.png" class="icon"> (you can also press F4 or Alt+Down arrow keys). The list of data types will appear. Select <em>Integer number</em> type.
+ <br><img src="img/05_01_01_changing_datatype.png">
+ <br>Changing data type of a filed to integer number<br><br>
+Since now, <kbd>house_number</kbd> field only acepts numbers.
+</p></li>
+<!-- TODO setting additional properties: e.g. caption -->
+<li><p>
+<em>Persons</em> table desgin is ready. Click <nobr><img src="icons/state_data.png" class="icon"> <em>Switch to Data View</em></nobr> button on the toolbar to finish designing and switch to Data View for the table. This allows you entering data into the table.
+</p></li>
+<li><p>
+As the design is not yet saved in the database, &quot;Save Object As&quot; dialog window appears. You need to specify the name for the new table.
+ <br><img src="img/05_01_01_entering_table_name.png">
+ <br>Entering table name before saving its design<br><br>
+
+Kexi offers a generic name like <em>Table1</em>. To change the name, enter <kbd>Persons</kbd> into the <em>Caption</em> field and press <kbd>Enter</kbd> key or click <em>OK</em> button. <em>Caption</em> field will be used to displaying the table to database end-users, e.g. as a form. Unlike the name, the caption can contain any characters including spaces a special characters.
+<br/>
+<br/>
+Note that filling <em>Caption</em> field automatically fills <em>Name</em> field. For your convenience the rule for using only latin letters, digits and the &quot;_&quot; character is kept. You can alter contents of the <em>Name</em> field if you want to.
+
+ <br><img src="img/05_01_01_automatic_names.png">
+ <br>Example of automatically filled Name field<br><br>
+</p></li>
+<li><p>
+You are asked about an agreement for automatic adding of primary key to the table. The idea of primary keys is described in <a href=""><!-- TODO chapter # -->chapter 6</a>. Click <em>Add primary key</em> button to continue.
+ <br><img src="img/05_01_01_pkey_recommended.png">
+ <br>A question about automatic adding a primary key<br><br>
+</p></li>
+<li><p>
+<em>Persons</em> table has been created and opened in Data View. Its name appears in the Project Navigator pane.
+ <br><img src="img/05_01_01_table_created.png">
+ <br><em>Persons</em> table in the Project Navigator pane<br><br>
+</p></li>
+<li><p>
+Create <em>phone_numbers</em> table, in a similar way as <em>persons</em> table.
+</p></li>
+<li><p>
+Create <kbd>person</kbd> field of type <em>Integer number</em> and <kbd>phone</kbd> of type <em>Text</em>. Do not use a number type here because phone number can have many different forms and prefixes.
+</p></li>
+<li><p>
+Click <nobr><img src="icons/state_data.png" class="icon"> <em>Switch to Data View</em></nobr> button on the toolbar and enter <em>Phones</em> caption for the table. As for your previous table, allow Kexi to automatically create primary key.
+</p></li>
+</ol>
diff --git a/kexi/doc/handbook/html.tmp/05_02_00_entering_data_into_tables.html b/kexi/doc/handbook/html.tmp/05_02_00_entering_data_into_tables.html
new file mode 100644
index 00000000..2a4edfa2
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/05_02_00_entering_data_into_tables.html
@@ -0,0 +1,38 @@
+
+<H2>5.2. Entering Data Into Tables</H2>
+<p>
+You have designed two <em>Persons</em> and <em>phone_numbers</em> tables. Both contain no data yet. You can enter some. In this chapter you will learn how to do this fast and effectively.
+</p>
+<p>
+<ol>
+<li><p>
+Start with <em>persons</em> table. Open it in Data View using <a href="04_06_01_project_navigator.html">Project Navigtor</a>.
+Current cell is marked with (usually black) rectangle, a <em>cursor</em>. Contents of the cell, if exists, is highlighted with a diferent color. Current row, i.e. the one you have placed your rectangular cursor in, is marked on the left hand using with an arrow symbol <img src="icons/button_tableview_currentrow.png" class="icon">.
+</p>
+<p>You can navigate through table cells using mouse or arrow keys, Page Down, Page Down, Home, End keys. To learn more about available of the key bindings for the data table view, see the section <!-- TODO chapter moved --><a href="ab_00_00_shortcuts.html#data_table">B.4. Data Table</a> in the Appendix B. Key Bindings.
+</p>
+<p>
+Initially, after opening table <em>Persons</em>, the cursor is placed in the <em>id</em> column. The column has autonumber property defined, marked with blue <em>(autonumber)</em> text in the last row. That means you do not have to enter values there by hand when entering data for a new row because the cell will be filled automatically with successive numbers.
+ <br><img src="img/05_02_00_data_editing.png">
+ <br>Data entry<br><br>
+</p></li>
+<li><p>
+Inserting new rows and entering data for them in &kexi; is different from the way of doing this in spreadsheets.
+To enter data for a new row, you need to use the arrow keys or mouse, to move your cursor to the special empty last row marked with <nobr>,,plus'' <img src="icons/button_tableview_newrow.png" class="icon"> sign. Place your cursor in (second) <em>name</em> column and enter a person's name. </nobr> Also enter surname, street, house number and city. When done, move down arrow or mouse button to the last empty row to accept new row inserting. You can insert rows you can see in the figure and add more your own.
+<h4>Details About Actions Available While Entering Data Into Tables</h4>
+<ul>
+<li>When you started entering data by entering the first character, editing of the current row is started. On the left hand of the data table, <nobr>pencil <img src="icons/button_tableview_editrow.png" class="icon"> symbol appears.</nobr></li>
+<li>
+Double clicking a cell with &RMB; or pressing <em>Enter</em> or <em>F2</em> key also starts editing of the current row.</li>
+<li>Pressing <em>Esc</em> key when, a contents of a cell is edited, <b>cancels changes made to this cell</b>. However <nobr>pencil <img src="icons/button_tableview_editrow.png" class="icon"></nobr> symbol will not disappear because you can still move to different cell of the edited row to change its contents. To <b>cancel changes made to entire edited row</b>, press <em>Esc</em> key again.</li>
+<li>Instead of pressing <em>Esc</em> key, you can click <img src="icons/button_cancel.png" class="icon"> toolbar button or select <em>Data-&gt;Cancel Row Changes</em> from the menubar.</li>
+<li>Click <em>Shift+Enter</em> keys to accept changes made to all cells in the currently edited row. You can also click <img src="icons/button_ok.png" class="icon"> toolbar button or select <em>Data-&gt;Save Row</em> from the menubar.</li>
+</ul>
+</p></li>
+<li><p>
+Fill the <em>phone_numbers</em> table with data, e.g. similar to provided in the figure below. In the <em>persons</em> column you need to provide a number of the person existing in the <em>persons</em> table.
+ <br><img src="img/05_01_01_table2_contents.png">
+ <br>Example contents of the <em>phone_numbers</em> table<br><br>
+</p></li>
+</ol>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/05_03_00_query_designing.html b/kexi/doc/handbook/html.tmp/05_03_00_query_designing.html
new file mode 100755
index 00000000..5a483c76
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/05_03_00_query_designing.html
@@ -0,0 +1,37 @@
+
+<H2>5.3. Designing Database Queries</H2>
+<p>
+A database's primary purpose is to store and help extracting information you are looking for. Unlike databases written on a paper sheets, Kexi database allows you to specify for much more search criterias. Results are returend faster without much dependency of. This all is a power of databases, however to be able to perform efffective <em>queries</em> in your database, you need to learn how to tell the database what are you looking for.
+</p>
+<p>
+With database queries you can limit data coming from a table to a predefined set of rows and columns as well as dynamically <em>join</em> data coming from multiple tables.
+</p>
+<p>
+To see how queries work in practice you will create <em>contacts</em> query joining data from two tables <em>persons</em> and <em>phone_numbers</em> designed in <a href="05_01_00_table_designing.html">chapter 5.1</a> and filled with data in <a href="05_02_00_entering_data_into_tables.html">chapter 5.2</a>.
+</p>
+
+<p>
+<ol>
+<li><p>
+Create a new empty query by selecting <nobr><img src="icons/query_newobj.png" class="icon"> <em>Insert-&gt;Query</em></nobr> from the menubar. Design window will appear similar to the one presented oi the figure below. The window is horizontally splitted into two areas: query relationships on the top and query columns below.
+<!-- TODO update screenshot with names of window's areas -->
+</p></li>
+<li><p>
+Select table <em>persons</em> in the drop down list <em>Table:</em> located at the top of the window and click <em>Add</em> button. A graphical representation of the table will appear in the the relations area. Do the same for <em>phone_numbers</em> table to insert it too, as in the figure below.
+ <br><img src="img/05_03_00_query_design.png">
+ <br><em>contacts</em> query design<br><br>
+</p></li>
+<li><p>
+Add query relationship using mouse drag &amp; drop technique: click the field <em>id</em> in the table <em>persons</em> table, drag it and drop onto the <em>person</em> field of the <em>phone_numbers</em> table. This will <b>join both fields by creating a new relationship</b>.
+</p></li>
+<li><p>
+Doube-clik the <em>name</em> field in the <em>persons</em> table, to add the field as a <b>query column</b>. In a similar way, add <em>surname</em>, <em>street</em>, <em>house_number</em>, <em>city</em> fields from the <em>persons</em> table and <em>phone</em> from the <em>phone_numbers</em> table.
+</p></li>
+<li><p>
+Query design is now ready to test it. Click <nobr><img src="icons/state_data.png" class="icon"> <em>Switch to data view</em></nobr> button on the toolbar, to switch from design to viewing the data provided as query results.
+ <br><img src="img/05_03_00_query_results.png">
+ <br><em>Contacts</em> query results<br><br>
+</p></li>
+<li>Save the query design for later use by clicking <nobr><img src="icons/filesave.png" class="icon"> <em>Save</em></nobr> button on the toolbar. You can also use <em>File-&gt;Save</em> from the menubar or press <em>Ctrl+S</em> keys. Because the query design has not been saved yet, you will be asked to specify a name for it. Enter <em>Contacts</em> text in the <em>caption</em> field.
+</ol>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/05_04_00_form_designing.html b/kexi/doc/handbook/html.tmp/05_04_00_form_designing.html
new file mode 100644
index 00000000..9cb671d1
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/05_04_00_form_designing.html
@@ -0,0 +1,510 @@
+<H2>5.4. Designing Forms</H2>
+<p>
+</p>
+
+<a name="basics"></a>
+<H3>5.4.1. Most important terms</H2>
+<p>
+<ul>
+<li><b>Form</b> - a window provided for easy data entry and presentation on the computer screen.
+</li>
+<li><b>Form's data source</b> - database table or query providing data displayed in the form. The data source is needed because forms itself are only <b>tools</b> for displaying and entering data, while tables and queries are the source of data. New, empty forms have no data source assigned, so they are not displaying any data from your database unless you assign a data source to them.</li>
+<li><b>Form field</b> - direct equivalent of column in a table or query. Most frequently used are fields for displaying text and numbers. Entering a new value or changing the existing value of such a field causes a change in <em>bound</em> table or query column (after accepting the change).</li>
+<li><b>Form design</b> - tasks you are performing to define appearance and functions of the form. To do this, you need to provide data source, insert form fields of various types and place them at the appropriate location.</li>
+ <li><b>Form widget</b> - form's element. Main widget types are:
+ <ul>
+ <li>Widgets displaying information, e.g. text box or image box. Each widget of this type can be <em>bound</em> to a data source field (a table or a query column). Therefore, such widgets are called in short <em>form fields</em>.</li>
+ <li>Widgets able to perform a specified action, e.g. a push button that can close the current form. Within other applications this widget type is sometimes called <em>form control</em> because it can perform previously defined action of <b>controlling</b> your database application's behavior.</li>
+ <li>Other widgets allowing to enrich form's appearance, e.g. &quot;line widget&quot; can visually separate two form areas.</li>
+ </ul>
+</li>
+<li><p>
+<a name="widget_containers"></a>
+<b>Container widget</b> - a widget that can <b>contain</b> other widgets within its area. For example, frame widget or tab widget are containers. Form's surface itself is a container as well. Command button cannot be called as container because it is not possible to insert a widget inside it. In more complex cases, container widget can be inserted inside a container, so nesting is possible.
+
+ <br><img src="img/05_04_01_widget_containers.png">
+ <br>Example container widgets<br><br>
+</p>
+</li>
+</ul>
+</p>
+
+
+<a name="forms_and_tables"></a>
+<H3>5.4.2. Forms versus tables</H3>
+<p>
+In chapter <a href="05_02_00_entering_data_into_tables.html">5.2</a> you learned about how to enter data directly into tables using their data sheet view. However, in many cases forms are better suited for data entry:
+<ul>
+<li>Table can contain too many columns to display them on your screen. Form can display such a data using multiple rows.</li>
+<li>Form allows to visually split data fields into logical groups, thus increasing readability.
+Labels with additional information can be inserted to give users more hints on how to use the form or what given data fields mean.</li>
+<li>Command buttons can be used within forms for commonly used commands so users can use forms in a similar way as a standalone applications they know.</li>
+<li>In data sheet view displaying multi-row data text fields or images is as easy as within forms.</li>
+</ul>
+</p>
+
+<a name="design"></a>
+<H3>5.4.3. Working with form design</H3>
+<p>
+As with table or query design, you are able to use <em>Data View</em> and <em>Design View</em>. Form designing is performed in <em>Design View</em>. We will ofter refer to form design window as to <em>Form Designer</em>.
+</p>
+<ol>
+<li>
+To create a new empty form, select <em>Insert</em> -&gt; <nobr><img src="icons/form_newobj.png" class="icon"> <em>Form</em></nobr> from the Menubar. Optionally, you can use <nobr><img src="icons/form_newobj.png" class="icon"> <em>New Form</em></nobr> command from drop-down button on the Project Navigator's toolbar.
+</li>
+<li>
+A new window with empty rectangular from surface will appear. Beyond the form surface outer area is placed, separated from the surface using borders. You can move the borders to resize the form surface.
+The surface is covered with a grid painted using dots which simplifies accurate widgets positioning.<br><br>
+ <br><img src="img/05_04_03_new_empty_form.png">
+ <br>A window with design of a new form<br><br>
+</p>
+</li>
+</ol>
+
+<p>
+As with table design, Form Designer provides <b>Property pane</b>. To save some space on the screen, the pane has been splitted with three tabs related to the currently selected form:
+<ol>
+<li><em>Property tab</em> containing a list of properties for the currently selected widgets</li>
+<li><em><nobr><img src="icons/property_pane_datasource_tab.png" class="icon"> Data source</nobr></em> tab containing properties related specifically to <b>data source</b> of the currently selected widget or the form itself.</li>
+<li><em><nobr><img src="icons/property_pane_widget_tab.png" class="icon"> Widgets</nobr></em> tab containing a hierarchy of all widgets of the form. The list simplifies widgets lookup by name and navigation between them.</li>
+</ol>
+There is information about currently selected widget's name and type displayed on the first and second tab.
+</p>
+<p>
+Additional toolbars are also available:
+ <ul>
+ <li><em>Widgets</em> toolbar used for inserting new widgets into the form</li>
+ <li><em>Format</em> toolbar used to format form's elements (e.g. adjusting widget's size, grouping). Formatting commands are also available in the <em>Format</em> menu. More about these commands can be found in appendix <a href="aa_05_00_menu.html#menu_format">A.6. Format Menu</a>.</li>
+ </ul>
+</li>
+</ol>
+
+<a name="widgets_tab"></a>
+<H3>5.4.4. Using the &quot;Widgets&quot; tab</H3>
+<p>
+The "Widgets" tab in the Property pane provides a list of form widgets and their hierarchy. Each widget is presented within the hierarchy beside other widgets being on the same level (the same parent container). Child widgets (inside containers) are presented using indented names.
+</p>
+
+<p>
+On the picture below, the form (a container) contains two widgets: &quot;groupBox2&quot; and &quot;options&quot; command button. In turn, &quot;groupBox2&quot; (being a container itself) contains two check box widgets.<br><br>
+
+ <img src="img/05_04_04_widgets_tab.png">
+ <br>Using the &quot;Widgets&quot; tab<br><br>
+
+Each widget has displayed its name and type. The type has also an icon displayed - the same as the one displayed on the toolbar used while form designing is performed.
+</p>
+
+<H4>Notes</H4>
+<ul>
+<li>Changing the current selection on the list causes appropriate selection on the designed form. This allows for easier widget lookup by name and easier navigation. For example, it is possible to select a widget by name, and then switch to the &quot;Properties&quot; tab to change the widget's properties.</li>
+<li>Keeping the <kbd>Ctrl</kbd> key pressed while an item on the widgets list is being selected allows to select multiple widgets at a time. Keeping the <kbd>Shift</kbd> key allows to select entire lists of widgets</li>
+<li>When widget is inserted, it is recommended to give it a reasonable name. For example, &quot;green&quot; check box widget has been named specifically for its meaning, using the &quot;Properties&quot; tab (<em>Name</em> property has been used to do that). Such change can make it easier to find a widget within the list.<br><br>
+ <img src="img/05_04_04_renaming_widgets.png">
+ <br>Naming the widget as &quot;green&quot;<br><br>
+Giving widgets reasonable names can be useful but is not mandatory. Note that widget's name is a property that is not visible to the user of your form. Users will can only see a widget text, provided by <em>Text</em> property or similar.
+</li>
+</ul>
+
+<a name="fields_inserting"></a>
+<H3>5.4.5. Inserting widgets - text fields</H3>
+<p>Let's create a form providing information about persons, i.e. a form connected it with <em>Persons</em> table.
+</p>
+<p>
+If the form being designed should present data obtained from the database, you need to place appropriate <em>fields</em> on it. To do this, use <em>Widgets</em> toolbar containing a set of togglable buttons. Each button corresponds with a single widget type.
+</p>
+
+<p>
+<ol>
+<li>
+Click <nobr><img src="icons/lineedit.png" class="icon"> <em>Text Box</em></nobr> button on the <em>Widgets</em> toolbar.</li>
+<li>Click on the form surface with &LMB;. New text box widget will be placed in the point where you clicked. Before you release &LMB; you can drag your mouse to specify a desired size for the widget.</li>
+<li>If needed, move the inserted widget using drag &amp; drop to a desired position. You can resize the widget afterwards by dragging one of the small boxes appearing near its corners. Note that the boxes are only visible when the widget is selected. If you select another widget or the form surface, the boxes disappear.</li>
+<li>Click <em>Text Box</em> toolbar button again and click on the form surface to insert another widget. Repeat this action once again until you get three text boxes inserted in your form. For sake of simplicity we will limit ourselves to three data fields.</li>
+</ol>
+</p>
+
+<H4>Notes</H4>
+<p>
+<ul>
+<li>There is context menu available in form's design mode, activated by &RMB; click on selected widget or form's surface. The menu offers commands like <nobr><img src="icons/editcut.png" class="icon"> <em>Cut</em></nobr>, <nobr><img src="icons/editcopy.png" class="icon"> <em>Copy</em></nobr>, <nobr><img src="icons/editpaste.png" class="icon"> <em>Paste</em></nobr>, <nobr><img src="icons/editdelete.png" class="icon"> <em>Delete</em></nobr> and other, more complex. Many of the commands are also provided in the Menubar, usually <em>Edit</em>. Keyboard shortcuts are also available for these commands. Some of the commands are only available for certain types of widgets.</li>
+<li>Commands <nobr><img src="icons/editcut.png" class="icon"> <em>Cut</em></nobr>, <nobr><img src="icons/editcopy.png" class="icon"> <em>Copy</em></nobr> and <nobr><img src="icons/editpaste.png" class="icon"> <em>Paste</em></nobr> makes it possible to move or copy widgets between forms, even between separate database projects.</li>
+<li>Holding the <kbd>Ctrl</kbd> key down while clicking a widget allows to select multiple widgets.</li>
+<li>Instead of using <nobr><img src="icons/editcopy.png" class="icon"> <em>Copy</em></nobr> and <nobr><img src="icons/editpaste.png" class="icon"> <em>Paste</em></nobr> commands, to duplicate a widget within the same form you can hold down the <kbd>Ctrl</kbd> key while moving the widget. After the <kbd>Ctrl</kbd> key is released, the dragged widget will not be moved but copied in the new location.</li>
+</ul>
+</p>
+
+<a name="data_sources"></a>
+<H3>5.4.6. Assigning data sources</H3>
+<p>
+The fields you inserted have no <em>data source</em> assigned yet, so these are not able to display information from the database. To assign data source, <nobr><img src="icons/database.png" class="icon"> <em>Data Source</em></nobr> tab of the <em>Property pane</em>.
+</p>
+
+<p>
+The very first step is to specify the <em>form's data source</em>, i.e. a place the displayed data will be fetched from. As mentioned above, you will use table <em>persons</em> as a data source for your new form.
+</p>
+
+<p>
+<ol>
+<li>Click on the form's surface, as you will alter its properties.</li>
+<li>Switch to the <nobr><img src="icons/database.png" class="icon"> <em>Data Source</em></nobr> tab and enter <em>persons</em> table name in the <em>Form's data source</em> drop down list. Alternatively, you can select this name from the drop down list.<br>
+ <br><img src="img/05_04_05_entering_form_data_source.png">
+ <br>Entering form's data source name<br><br>
+</li>
+</ol>
+</p>
+
+<p>
+You have assigned form's data source. Now you need to do specify field widget's data source.
+</p>
+
+<p>
+<ol>
+<li>Click the first text field widget at the top of the form.</li>
+<li>In the <nobr><img src="icons/database.png" class="icon"> <em>Data Source</em></nobr> tab of the property pane enter field name <em>name</em> in the <em>data source</em> drop down list. Alternatively, you can select this name from the drop down list.<br>
+ <br><img src="img/05_04_05_entering_text_field_data_source.png">
+ <br>Entering field's data source &quot;name&quot;<br><br>
+</li>
+<li>Click next text field widget and enter <em>surname</em> as the data source.</li>
+<li>Enter data sources for <em>street</em>, <em>house_number</em> and <em>city</em> text fields in a similar way.</li>
+</ol>
+</p>
+<p>
+You can now save the form's design (this is not mandatory to test the form in action). To save, click the <nobr><img src="icons/filesave.png" class="icon"> <em>Save object changes</em></nobr> toolbar button or use the <nobr><img src="icons/filesave.png" class="icon"> <em>File -&gt; Save</em></nobr> menu command. Upon saving you will be asked for entering the form's name. Enter <em>Persons</em> as caption and click <em>OK</em> button. Form's name will be filled automatically.
+</p>
+<p>
+It is right moment for testing your form. Click the <nobr><img src="icons/state_data.png" class="icon"> <em>Switch to data view</em></nobr> toolbar button. Unless you made a mistake when while entering data sources, you should see form's fields filled with data from the <em>persons</em> table.<br>
+ <br><img src="img/05_04_06_form_with_text_fields.png">
+ <br>The <em>Persons</em> form in data view after inserting text fields and assigning data sources<br><br>
+</p>
+
+<H4>Notes</H4>
+<p>
+<ul>
+<li>If you want to remove data source assignment for a form widget, you can use <em><img src="icons/clear_left.png" class="icon"> Clear widget's data source</em> button near the <em>Source field</em> drop down list. Similarly, you can use <em><img src="icons/clear_left.png" class="icon"> Clear data source</em> button near the <em>Form's data source</em> drop down list.<br>
+ <br><img src="img/05_04_05_data_source_actions.png">
+ <br>
+</li>
+<li>Use <em><nobr><img src="icons/goto.png" class="icon"> Go to selected data source</nobr></em> button to select appropriate table or query in the <em>Project Navigator</em>, so you can quickly open a table or query being the data source of the form.</li>
+<!-- TODO: mention about creating Auto Fields by using drag & drop -->
+</ul>
+</p>
+
+
+<a name="text_labels"></a>
+<H3>5.4.7. Inserting text labels</H3>
+<p>
+To make it easier for the form's user to identify meaning of every field widget, these should have added text labels with appropriate titles. To create text labels <nobr><img src="icons/label.png" class="icon"> <em>Label</em></nobr> widget is used.
+</p>
+<p>
+Insert three text label widgets onto the form, placing them on the left hand of the text fields (or on the right hand if your operating system uses right-to-left layout). On inserting every new label, a text cursor appears inside where you can enter desired title. Enter consecutively: <em>Name</em>, <em>Surname</em> and <em>Street</em>. Additionally, on the top of the form insert another label displaying name of the form, i.e. &quot;Persons&quot;. Enlarge this label's size and set larger font using <a href="aa_00_00_menu.html#menu_format_font">Format -&gt; Font</a> menu command.
+</p>
+<p>
+ <br><img src="img/05_04_06_form_with_labels.png">
+ <br>Ready to use form after adding text labels<br><br>
+</p>
+<!-- TODO: update this topic then we've got auto-labels -->
+
+
+<a name="actions"></a>
+<H3>5.4.8. Actions</H3>
+
+<p>
+<b>Action</b> is a single activity isolates in the application, available for user to execute. It can be also executed automatically as an reaction for a given event (e.g. after opening a form).
+</p>
+<!-- TODO: co to jest zdarzenie -->
+
+<a name="assigning_actions_to_buttons"></a>
+<H4>Assigning actions to form buttons</H4>
+<p>
+Most actions can be assigned to form button. Assigned action is executed after button is clicked.
+</p>
+<p>
+To assign action:
+<ol>
+<li>Switch to form's design view if you have not done yet.</li>
+<li>Select the existing button widget by clicking on it or put a new button widget onto the form. If you inserted a new button, enter its title and press <kbd>Enter</kbd> key.</li>
+<li>Click the button widget with the &RMB; to display context menu.</li>
+<li>From the context menu select <nobr><img src="icons/form_action.png" class="icon"> <em>Assign action...</em> command.</li>
+<li>An <em>Assigning Action to Command Button</em> dialog window will appear presenting a list of available actions. One of the actions is selected if the widget already has action assigned. Otherwise the <em>Action type</em> drop down list has <em>No type</em> item selected.</li>
+<li>From the <em>Action type</em> drop down list select <em>Application</em> item. Available application-wide actions will be listed.</li>
+<li>Select one of the actions on the list (e.g. &quot;Delete Row&quot;).</li>
+<li>Click <em>OK</em> button or press <kbd>Enter</kbd> key to accept your selection.</li>
+</ol>
+</p>
+<p>
+ <img src="img/05_04_07_assigning_action_to_button.png">
+ <br>Assigning &quot;Delete Row&quot; action to a form's button<br><br>
+</p>
+
+<p>
+After switching to the form's <em>data view</em> you can try whether the action works. For example, if you assigned &quot;Delete Row&quot; action, clicking the button, the current database row will be deleted, similarly to executing <em>Edit &gt; Delete Row</em> menu command (depending on your settings you may be asked to confirm the removal).
+</p>
+<H4>Notes</H4>
+<ul>
+<li>To remove action assignment, select <em>No type</em> item from the <em>Action type</em> drop down list of the <em>Assigning Action to Command Button</em> dialog window.</li>
+<li>Action only work in the form's <em>data view</em>. Not every action's assignment is reasonable. For example, <em>Font...</em> actions is not available in the form's data view, so having it assigned to the button has no effect.</li>
+</ul>
+
+<a name="form_layouts"></a>
+<H3>5.4.9. Widget layouts</H3>
+<p>
+In most cases form widgets should be reasonable placed and aligned. Positioning, aligning and resizing widgets by hand is not easy and these parameters are not adjusted when the user resizes the form. In fact the situation is even worse because you cannot assume a given form requires a given space because users have different font sizes and display resolutions.
+</p>
+<p>
+The following example presents a form where text fields and labels were placed by hand. Some of them cannot fit in the form's window.
+ <br><img src="img/05_04_08_form_no_fit.png">
+ <br>An example form with widgets that cannot not fit in the window<br><br>
+</p>
+<p>
+Using special tool called <em>widget layouts</em> can help to automatically lay out the form widgets. Widget layout is an action of grouping two or more widgets so these are well positioned and have appropriate sizes.
+</p>
+<p>
+Using layout in this form improves alignment. Moreover, its space is better developed. Text fields are closer each other, spacing is constant.
+ <br>
+ <br><img src="img/05_04_08_form_well_fit.png">
+ <br>Example form with layout used<br><br>
+</p>
+<p>
+There are two methods to create widget layout.
+<ul>
+<li>Select two or more widgets that should be placed in a common layout, and select one of the layout types from the context menu item <a href="aa_00_00_menu.html#menu_format_layout">Layout Widgets</a>.</li>
+<li>Click a <a hrf="widget_containers">container widget</a> (or a form surface itself), where widgets are inserted and select one of the layout types from the context menu item <a href="aa_00_00_menu.html#menu_format_layout">Layout Widgets</a>. All widgets existing within the container or within the form, being on the same level will be put into a single common layout.</li>
+</ul>
+In each of these cases you can also use <em>Format -&gt; Layout Widgets</em> menu.
+</p>
+<p>
+ <img src="img/05_04_08_form_layout_selecting.png">
+ <br>Selecting widgets that will be put into a layout<br>
+ <br><img src="img/05_04_08_form_layout_selected.png">
+ <br>Four widgets are selected<br><br>
+ <br><img src="img/05_04_08_form_layout_popup.png"><br>
+ <br>Using the context menu for putting the widgets into a grid layout<br><br>
+</p>
+<p>
+Widget layout is presented in the design view using a blue, green or red box drawn with broken line. This line is displayed only in the form's design view.
+</p>
+<p>
+ <br>
+ <br><img src="img/05_04_08_form_layout_grid.png">
+ <br>Widgets within a grid layout<br><br>
+</p>
+<p>
+Besides the grid type, there are other widget layout types.
+<ul>
+<li>vertical
+ <br>
+ <br><img src="img/05_04_08_form_layout_vertical.png">
+ <br>Vertical widget layout<br><br>
+</li>
+<li>horizontal
+ <br>
+ <br><img src="img/05_04_08_form_layout_horizontal.png">
+ <br>Horizontal widget layout<br><br>
+</li>
+<!-- TODO podzia³ poziomy / pionowy
+ <br><img src="img/05_04_08_form_layout_vertical_splitter.png">
+ <br><br>
+ <br><img src="img/05_04_08_form_layout_horizontal_splitter.png">
+ <br><br>
+</li> -->
+</ul>
+</p>
+
+<a name="form_springs"></a>
+<H4>Springs in widget layouts</H4>
+<p>
+A <em>spring</em> in widget layouts is a special, invisible element allowing to adjust widget's position and size within layouts. Such a spring stretches or squeezes a widget on the right, top, bottom or left hand, so it can have desired size and position.
+</p>
+<p>To use a spring:
+<ol>
+<li>Select <img src="icons/spring.png" class="icon"> spring icon on the <em>Widgets</em> toolbar.</li>
+<li>Click on a selected point of the form to insert the spring.</li>
+</ol>
+</p>
+<p>
+For the following example, the spring has been inserted on the left hand of the text label &quot;Persons&quot;. The label is thus displayed on the right hand of the form. To make the spring work, it has been put into a common horizontal layout with the label.
+ <br><img src="img/05_04_08_form_spring.png">
+ <br>Horizontal layout containing a spring and a text label<br><br>
+</p>
+<p>
+To make springs work you need to create a global widget layout i.e. a layout for the form itself. Then, springs can use edges of the form as a boundary for expanding.
+</p>
+
+<a name="advanced_form_layouts"></a>
+<H4>Advanced widget layouts</H4>
+<p>
+Widget layouts can be combined (or nested). On the following example you can identify two nested layouts:
+</p>
+<p>
+<ol>
+<li>horizontal layout with a spring, aligning the &quot;Persons&quot; text label to the right</li>
+<li>grid layout grouping widgets on the whole form</li>
+</ol>
+</p>
+<p>
+ <img src="img/05_04_08_form_advanced_layout.png">
+ <br>Two widget layouts combined: horizontal layout inside of a grid layout<br><br>
+</p>
+<p>
+The horizontal layout is treat in the example as a single widget by the grid layout - it takes exactly one &quot;cell&quot; of the grid.
+After opening a form designed this way in the data view, you can notice (by resizing the form) that:
+</p>
+<ul>
+<li>&quot;Persons&quot; text label thanks to the spring used is constantly aligned to the to the right side of the form</li>
+<li>text fields take all of the available width thanks to putting them into the grid layout</li>
+<li>all the form's widgets are pushed to the top thanks to the spring used at the bottom of the form</li>
+</ul>
+<p>
+ <img src="img/05_04_08_form_advanced_layout_view.png">
+ <br>The form using the two layouts displayed in data view<br><br>
+</p>
+
+<a name="layout_breaking"></a>
+<H4>Removing widget layouts</H4>
+<p>
+To remove widget layout without removing widgets, perform one of these actions:
+<ul>
+<li>click with the &RMB; on the layout's border and select <em>Break Layout</em> command from the context menu</li>
+<li>click with the &LMB; on the layout's border and select <em>Format -&gt; Break Layout</em> menu command</li>
+</ul>
+</p>
+
+<H4>Notes</H4>
+<p>Removing widget layout using the <em>Break Layout</em> command will not remove widgets contained in the layout. If you want to remove the widgets as well, just select the layout by clicking on its border and press <kbd>Delete</kbd> key or use <nobr><em>Edit -&gt <img src="icons/editdelete.png" class="icon"> Delete</em></nobr> menu command or context menu command.
+</p>
+
+<a name="layout_size_types"></a>
+<H4>Size policies for widgets within a layout</H4>
+<p>
+Instead of setting a fixed size for your widgets, in &kexi; you can choose between various widget's <em>size policies</em>. A size policy is a flexible strategy for controlling how a widget is stretched (or shrunk) depending on other neighbouring widgets and space available within the form.
+</p>
+<p>
+After putting widgets into a <em>layout</em>, typically each widget gets a proportional (<em>Preferred</em>) size policy. These widgets will be automatically resized with preferred settings, depending on their type and size of the entire layout itself. For example, three buttons put into the horizontal layout will be resized to fit their visible text.
+</p>
+<p>
+For each widget inserted into the form, there are settings for size policy available in the <em>Property Editor</em>. The settings are presented as a group of properties called <em>Size Policy</em>.
+
+ <br><img src="img/05_04_09_size_policy_properties.png">
+ <br>A group of properties for defining a widget's size policy<br><br>
+
+This group of properties contains:
+<ul>
+<li><b>Horizontal Size Policy</b> defining horizontal size of the widget,</li>
+<li><b>Vertical Size Policy</b> defining vertical size of the widget,</li>
+<li><b>Horizontal Stretch</b> defining strength of activity of the <em>Horizontal Size Policy</em>,</li>
+<li><b>Vertical Stretch</b> defining strength of activity of the <em>Vertical Size Policy</em></li>
+</ul>
+
+<H5>Values of size policies</H5>
+<p>
+There are following values available on the drop down list for <em>Horizontal Size Policy</em> and <em>Vertical Size Policy</em> properties visible in the <em>Property Editor</em>:
+</p>
+<ul>
+<li><b>Fixed</b> value means that the widget cannot be automatically resized; it should maintain the constant size defined on design time (width or height),</li>
+<li><p><b>Minimum</b> value means that the original size of the widget is set as minimal allowed, it is sufficient and there is no need for expanding the widget, but the widget will be expanded if needed. This type of policy can be used to force widget to be expanded to the whole width or height, especially if you set a <em>stretch</em> value greater than 0.
+ <br><img src="img/05_04_09_size_policy_minimum.png">
+ <br>Text field and two buttons within a grid layout (<em>Minimum</em> horizontal size policy is set for both buttons, so these are slightly wider than needed)<br><br>
+</p></li>
+<li><b>Maximum</b> value means that the original size of the widget is set as maximum allowed and can be decreased without breaking the widget's usability and readability if other widgets need more space,</li>
+<li><p><b>Preferred</b> value means that the original size of the widget is the best and preferred; the widget can be shrunk or expanded however and it will stay readable,
+ <br><img src="img/05_04_09_size_policy_preferred.png">
+ <br>Text field and two buttons within a grid layout (<em>Preferred</em> horizontal size policy is set for both buttons)<br><br>
+</p></li>
+<li><b>Expanding</b> value means that the original size of the widget is reasonable but the widget can be also shrunk; it can be expanded as well to take as much space as possible,</li>
+<li><b>Minimum Expanding</b> value means that the original size of the widget is allowed; it can be expanded to take as much space as possible,</li>
+<li><b>Ignored</b> value means that the original size of the widget is ignored; the widget can be expanded to take as much space as possible but other widgets usually will not allow for that</li>
+</ul>
+Different widget types have various default size policies; for example, button widgets have default size policy set to <em>Minimum</em> (in both directions), while text field widgets have vertical size policy set to <em>Fixed</em>.
+<p>
+<p>
+The most frequently used size policies are <em>Preferred</em>, <em>Minimum</em> and <em>Maximum</em>.
+</p>
+
+<H5>Vertical and horizontal stretch</H5>
+<p>
+<em>Vertical Stretch</em> and <em>Horizontal Stretch</em> properties accept integer values greater or equal to 0. These properties allow to fine-tune the behavior of size policies. Default value for the properties is 0. Greater value of the stretch means that the widget will be expanded more than other widgets having smaller stretch value set. For example, the following image presents two buttons where the first button has <em>Vertical Stretch</em> set to 0 and the second button has <em>Vertical Stretch</em> set to 1.
+
+ <br><img src="img/05_04_09_size_policy_vertical_stretch.png">
+ <br>Size of button widgets affected by setting <em>Vertical Stretch</em> property of the second button to 1<br><br>
+
+</p>
+
+<a name="widget_adjusting"></a>
+<H3>5.4.10. Setting widgets size and position by hand</H3>
+<p>
+In case when your form has no main layout set for auto-positioning and auto-resizing its widgets, you will probably want to align widget's position and size so the form can look cleaner and be easier to use. The &kexi; form designer simplifies this task by offering the following groups of commands:
+</p>
+<ul>
+<li><p>Adjusting sizes of selected widgets. The commands are available in the <em>Format -&gt; Adjust Widgets Size</em> submenu of the Menubar and in the <em>Adjust Widgets Size</em> submenu of the context menu. Toolbar's drop down button <nobr><img src="icons/aogrid.png" class="icon"> <em>Adjust Widgets Size</em></nobr> is also available.
+ <ul>
+ <li><nobr><img src="icons/aofit.png" class="icon"> <em>To Fit</em></nobr> - sizes of the selected widgets will be altered so each widget will be resized to its preferred size and its contents; for example, text label's size will be changed to fit its text. Position of the widgets will not be changed.</li>
+ <li><nobr><img src="icons/aogrid.png" class="icon"> <em>To Grid</em></nobr> - sizes of the selected widgets will be altered so each widget's corner will be placed in the form's (or other container's) grid point. Widget's position can be slightly altered.</li>
+ <li><nobr><img src="icons/aoshortest.png" class="icon"> <em>To Shortest</em></nobr> - height of the selected widgets will be altered so that each of them will have the same height as the shortest one. Position of the widgets will not be changed.</li>
+ <li><nobr><img src="icons/aotallest.png" class="icon"> <em>To Tallest</em></nobr> - height of the selected widgets will be altered so that each of them will have the same height as the tallest one. Position of the widgets will not be changed.</li>
+ <li><nobr><img src="icons/aonarrowest.png" class="icon"> <em>To Narrowest</em></nobr> - width of the selected widgets will be altered so that each of them will have the same height as the narrowest one. Position of the widgets will not be changed.</li>
+ <li><nobr><img src="icons/aowidest.png" class="icon"> <em>To Widest</em></nobr> - width of the selected widgets will be altered so that each of them will have the same height as the widest one. Position of the widgets will not be changed.</li>
+ </ul>
+</li>
+<li><p>Aligning positions of the selected widgets. The commands are available in the <em>Format -&gt; Align Widgets Position</em> submenu of the Menubar and in the <em>Align Widgets Position</em> submenu of the context menu. Toolbar's drop down button <nobr><img src="icons/aoleft.png" class="icon"> <em>Align Widgets Position</em></nobr> is also available.
+ <ul>
+ <li><nobr><img src="icons/aoleft.png" class="icon"> <em>To Left</em></nobr> - all the selected widgets' left positions will be moved to the position of the leftmost widget's left edge.</li>
+ <li><nobr><img src="icons/aoright.png" class="icon"> <em>To Right</em></nobr> - all the selected widgets' right positions will be moved to the position of the rightmost widget's right edge.</li>
+ <li><nobr><img src="icons/aotop.png" class="icon"> <em>To Top</em></nobr> - all the selected widgets' top positions will be moved to the position of the uppermost widget's upper edge.</li>
+ <li><nobr><img src="icons/aobottom.png" class="icon"> <em>To Bottom</em></nobr> - all the selected widgets' bottom positions will be moved to the position of the bottommost widget's bottom edge.</li>
+ <li><nobr><img src="icons/aopos2grid.png" class="icon"> <em>To Grid</em></nobr> - all the selected widgets' top-left corners will be moved so that it is positioned in the nearest grid point.</li>
+ </ul>
+ </p>
+ <p>
+ None of the above commands resizes the widgets.
+ </p>
+</li>
+</ul>
+</p>
+
+<p>
+There are also additional commands available:
+<nobr><img src="icons/raise.png" class="icon"> <em>Bring Widget to Front</em></nobr> (i.e. above all other widgets) and <nobr><img src="icons/lower.png" class="icon"> <em>Send Widget to Back</em></nobr> (i.e. below all other widgets). These two commands are rarely used, as it is not common to place one widget on top of other (with an exception when a container widget contains other widget inside). Also note that clicking a widget with mouse button is enough to bring the widget to front.
+</p>
+
+<a name="tab_order_editing"></a>
+<H3>5.4.11. Setting the tab order</H3>
+<!-- TODO move this introduction to a special section about properties related to focusing -->
+<p>
+<em>Widget's focus</em> determines widget's activity available using keyboard. Focus is related to widgets displayed in form's data view. Exactly one form widget can have focus at the same time. Most frequent use of focus is text entry (when a given text field is active, i.e. it is <em>focused</em>). Other example is a button widget - when focused, it is possible to &quot;press&quot; it using the <kbd>Enter</kbd> or <em>Space</em> key instead of a mouse button.
+</p>
+<p>There are a few methods of making the widgets active (moving the focus to the widget): clicking with a mouse button, rotating the mouse wheel over the widget, or using the <em>Tab</em> key. The latter method is often used because of it's speed and convenience for users. Availability of the focusing methods is controlled by <em>Focus Policy</em> property of a given widget.
+</p>
+<p>
+There is relationship between focusing (activating) widgets using <em>Tab</em> key and <b>tab order</b> setting of a form. After pressing the <em>Tab</em> key, the <b>next</b> widget should be focused, so the form should know about the <em>tab order</em>.</p>
+<p>
+To alter table order for a form's widget:
+<ol>
+<li>switch to design view of the form</li>
+<li>execute <em>Edit -&gt; Edit Tab Order</em> menu command.
+<em>Edit Tab Order</em> will appear with settings for this form.
+
+ <br><img src="img/05_04_11_tab_stop_dialog.png">
+ <br>A window for editing tab order for a form<br><br>
+
+<p>
+The window contains a list with two columns: the first column displays widget names, the second - types of the widgets. To make it easier to recognize meaning of the names and types for the user, icons related to the types are also displayed. The list contains only widgets having focus policy allowing to use the <kbd>Tab</kbd> key.
+The window allows you to change tab order or set the automatic tab order.
+</p>
+</li>
+<li><p>
+To change tab order, either:
+<ul>
+<li>Click a selected widget name on the widgets list and drag it to a desired position (up or down) using the mouse.
+</li>
+<li>Click a selected widget name on the widgets list and use <em>Move Up</em> or <em>Move Down</em> buttons, to move the widgets to a desired position.</li>
+<li>Click the <em>Handle tab stops automatically</em> check box to set the automatic tab order for the form. If this option has been switched on, any changes made to the list of widgets by hand are not taken into account - &kexi; will be handling the tab orders on its own. The automatic ordering means that the top-left widget will be focused first (or the top-right if your operating system uses right-to-left layout), and the order comes from the left to right (from the right to left, appropriately) and from the top to bottom.
+ <br><img src="img/05_04_11_auto_tab_stop.png">
+ <br>Automatic tab order for a form<br><br>
+</li>
+</ul>
+</p>
+</li>
+<li>
+Click the <em>OK</em> button to accept the changes or <em>Cancel</em> button to dismiss the changes.
+</li>
+</ol>
diff --git a/kexi/doc/handbook/html.tmp/05_05_00_data_entering_into_forms.html b/kexi/doc/handbook/html.tmp/05_05_00_data_entering_into_forms.html
new file mode 100644
index 00000000..2b324ab0
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/05_05_00_data_entering_into_forms.html
@@ -0,0 +1,12 @@
+<H3>5.5. Entering data using forms</H3>
+<p>
+Data entering and editing is usually database application user's task, not developer's. In practice it is desirable to check the form in terms of valid data entry, and see whether the form works as expected.
+</p>
+<p>
+To test your form, switch to its data view. A single database row (record) of data will be displayed and a text cursor will be set inside the first data field. You can move between fields using &RMB; or <kbd>Tab</kbd> and <kbd>Shift+Tab</kbd> keys. While editing, there will be <img src="icons/button_tableview_editrow.png" class="icon"> pencil icon visible near the record navigator. After entering row's (record) data you can press <kbd>Shift+Enter</kbd> keys or <img src="icons/button_ok.png" class="icon"> toolbar button to accept changes made to the current row. Clicking <img src="icons/button_cancel.png" class="icon"> toolbar button discards changes made to the current row and restores contents of the data fields. You can use <img src="icons/navigator_next.png" class="icon"> record navigator's button to move to a new row. All the navigator's functions are also available in similar way as in the data table view<!-- TODO link -->.
+<!-- TODO shortcuts! -->
+</p>
+<p>
+</p>
+
+<!-- TODO -->
diff --git a/kexi/doc/handbook/html.tmp/08_00_00_kexi_tuning.html b/kexi/doc/handbook/html.tmp/08_00_00_kexi_tuning.html
new file mode 100644
index 00000000..ad577cbb
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/08_00_00_kexi_tuning.html
@@ -0,0 +1,11 @@
+<H2>8. Adjusting Kexi application to your needs</H2>
+<p>
+Kexi application has a customizable user interface allowing the user to adjust it to his preferences.
+</p>
+<p>
+<ul>
+<li><a href="08_01_00_mdi.html">8.1. Changing the graphic interface mode</a></li>
+<li><a href="08_02_00_dock_undock.html">8.2. Docking and undocking the windows</a></li>
+<li><a href="08_03_00_conf_keys.html">8.3. Hotkeys configuration</a></li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/08_01_00_mdi.html b/kexi/doc/handbook/html.tmp/08_01_00_mdi.html
new file mode 100644
index 00000000..65b36b81
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/08_01_00_mdi.html
@@ -0,0 +1,20 @@
+<H3>8.1. Changing the graphical interface mode</H3>
+<p>
+MDI (<em>Multiple Document Interface</em>) modes enable the user to choose the way to manage the aplication's widows. You can choose one of two modes according to your preferences - it will be also used next time you run the application.
+</p>
+<p>
+The change of MDI mode is possible using the <em>MDI mode</em> command from the <em>Window</em> menu bar.
+Following modes are available:
+<ul>
+<a name="mode_ideal"></a>
+<li><b>IDEAL mode:</b> standardm modern mode known from KDE or the latest Microsoft applications, displaying child windows inside the application in form of <b>tabs</b>. Tabs are always maximized while panes with changeable size are located at the sides of the screen. They are also automatically hidden when not used, which provides you with more space.
+<br><img src="img/08_01_00_mdi_mode_ideal.png">
+<br>IDEAL mode<br><br>
+</li>
+<a name="mode_childframe"></a>
+<li><b>Childframe mode:</b> displaying child windows inside the application. You can minimize and maximize them. A taskbar corresponding to each window is also available as well as panes with changeable size located at the sides of the screen.
+<br><img src="img/08_01_00_mdi_mode_childframe.png">
+<br>Child mode<br><br>
+</li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/08_02_00_dock_undock.html b/kexi/doc/handbook/html.tmp/08_02_00_dock_undock.html
new file mode 100644
index 00000000..934d1f49
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/08_02_00_dock_undock.html
@@ -0,0 +1,32 @@
+<H3>8.2. Docking and undocking of the windows</H3>
+
+<p>
+To <em>undock</em> a window you must drag it from the inside of the Kexi application and drop it so that you can e.g. maximize or move it freely. This is particularly useful when working on a small screen or when working with large datasheets. Undocking can also be used when working on two display monitors connected to one computer: you can move selected windows to the other display.
+</p>
+<p>
+<em>Docking</em> is a command opposite to <em>undocking</em>: the window is placed back inside the application.
+</p>
+<p>
+Docking in windows is available only in <a href="08_01_00_mdi.html#mode_childframe">childframe mode</a> of the graphic interface. The command is always available in case of panes.
+</p>
+<p>
+The <em>Dock/undock</em> command is also available:
+<ul>
+<li>through clicking the button with the arrow in the top right corner of the main window of the application (if the window of the object is maximized):
+<br><img src="img/08_02_00_dock_undock_button_max.png">
+<br>Dock/undock key for a maximized window<br><br>
+</li>
+<li>through clicking the button with the arrow in the top right corner of the selected object (if it is not maximized):
+<br><img src="img/08_02_00_dock_undock_button.png">
+<br>Dock/undock key for a non-maximized window<br><br>
+</li>
+<li>through the right-click on the window titlebar and selecting the <em>undock</em> command from the context menu:
+<br><img src="img/08_02_00_dock_undock_popup.png">
+<br><em>Undock</em> command in the context menu on the winow titlebar<br><br>
+</li>
+<li>through the right-click on the application taskbar and selecting the <em>dock</em> command from the context menu:
+<br><img src="img/08_02_00_dock_undock_taskbar_popup.png">
+<br><em>Dock</em> command in the context menu of the application's taskbar<br><br>
+</li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/html.tmp/08_03_00_conf_keys.html b/kexi/doc/handbook/html.tmp/08_03_00_conf_keys.html
new file mode 100644
index 00000000..1622a154
--- /dev/null
+++ b/kexi/doc/handbook/html.tmp/08_03_00_conf_keys.html
@@ -0,0 +1,32 @@
+<H3>8.3. Keyboard shortcuts (key bindings) configuration</H4>
+<p>
+This option allows to change the shortcuts in Kexi application. To do this, use the <em>Configure Shortcuts</em> command from the <em>Settings</em> menu.
+
+<br><img src="img/08_04_00_configure_shortcuts.png">
+<br>Shortcuts configuration dialog box<br><br>
+To confirm the introduced changes click <em>OK</em> button. Changes are permanent which means that they will also be available next time you run Kexi application.
+</p>
+<p>
+Available actions:
+<ul>
+<li><p>To quickly change a command type its name in the <em>Search</em> radio button.</p></li>
+<li><p>Click the <em>Defaults</em> button at the bottom of the dialog box to restore standard shortcut settings for Kexi application.</p></li>
+<li><p>Select the requested command from the list and select the <em>None</em> radio button to remove a shortcut for this command.</p></li>
+<li><p>Select the requested command from the list and select the <em>Default</em> radio button to restore the standard shortcut for this command. Shortcut description will appear at the bottom of the dialog box.</p></li>
+<li><p>Select the requested command from the list and tick the <em>Custom</em> radio button to change the shortcut for this command. <em>Shortcut configuration</em> dialog box will pop up:
+<br><img src="img/08_04_00_configure_shortcut.png">
+<br><em>Shortcut configuration</em> dialog box<br><br>
+ You can provide one or two shortcuts.
+ </p>
+ <p>
+ Available actions:
+ <ul>
+ <li>Click the <em>Advanced</em> button to show the advanced settings if you want to provide more than one shortcut.</li>
+ <li>Click <img src="icons/locationbar_erase.png" class="icon"> button to remove the selected shortcut.</em>
+ <li>Select the <em>Primary shortcut</em> radio button (or <em>Alternate shortcut</em>) and then press the key combination you want to set, e.g. Ctrl+Alt+R.</li>
+ <li>Click the <em>OK</em> button or press <em>Enter</em> to confirm shortcut settings. Click <em>Cancel</em> to abandon the change.</em></li>
+ </ul>
+ </p>
+</li>
+</ul>
+</p>
diff --git a/kexi/doc/handbook/translation-status.txt b/kexi/doc/handbook/translation-status.txt
new file mode 100644
index 00000000..acc00d00
--- /dev/null
+++ b/kexi/doc/handbook/translation-status.txt
@@ -0,0 +1,111 @@
+Kexi Handbook: README
+---------------------
+
+0. Notes
+- For more info contact Jaroslaw Staniek, js at iidea.pl (project maintainer)
+- Original html content is strored temporary in html.tmp/ subdirectory.
+- For now let's LEAVE <img> and <a href..> tags untouched - enclose them with
+ <!-- --> comments. We will prepare english screenshots later; for now only polish version exists.
+ Do not remove any existing <!-- --> comments.
+- Development version of this handbook generated out of the docbook sources:
+ http://docs.kde.org/development/en/koffice/kexi/index.html
+- For steps (e.g. in tutorial) rather use <procedure> tag instead of <itemizedlist>.
+ <title> subtag is available as well for <procedure>. Details:
+ http://www.docbook.org/tdg/en/html/procedure.html
+
+1. States:
+-DONE
+-MOVED
+-empty means "translation not ready"
+
+2. TODOs
+-add a documentation for form's Auto Fields
+-add "File types supported by Kexi" (describe .kexis, .kexic, .kexi -- appendix?)
+
+3. Translation status:
+Note: the numbering is taken from original Polish HTML version:
+ http://kexi.pl/doc/pl/contents.html
+
+DONE 1. Introduction to databases
+DONE 1.1. What is a database?
+DONE 1.2. A database and a spreadsheet
+DONE 1.3. Database design
+DONE 1.4. Who needs a database?
+DONE 1.5. Database creation software
+DONE 2. Introduction to Kexi
+DONE 2.1. What is Kexi?
+DONE 2.2. Kexi features
+DONE 2.3. Is Kexi for me?
+DONE 2.4. Differences between Kexi and other applications
+WILL BE MOVED to Appendix: 3. Kexi Installation
+DONE 4. Kexi usage basics
+DONE 4.1. Project files
+DONE 4.2. Running Kexi
+DONE 4.3. Creating a new database project
+DONE 4.4. Opening an existing Kexi database file
+DONE 4.4.1. Using "Open Existing Project" window
+DONE 4.4.2. By clicking on .kexi file's icon
+DONE 4.5. Using built-in help
+DONE 4.6. Main application elements
+DONE 4.6.1. Project Navigator pane
+DONE 4.6.2. Database object windows
+DONE 4.6.3. Property pane
+DONE 5. Building simple databases
+DONE 5.1. Designing database tables
+DONE 5.1.1. Table Designer window
+ TODO: update recent changes made to 05_01_00_table_designing.html
+DONE 5.2. Entering data into tables
+ TODO: update recent changes made to 05_02_00_data_entering_into_tables.html
+DONE 5.3. Designing database queries
+ TODO: update recent changes made to 05_03_00_query_designing.html
+DONE 5.4. Designing forms
+DONE 5.4.1. Most important terms
+DONE 5.4.2. Forms versus tables
+DONE 5.4.3. Working with form design
+DONE 5.4.4. Using the "Widgets" tab
+DONE 5.4.5. Inserting widgets - text fields
+DONE 5.4.6. Assigning data sources
+DONE 5.4.7. Inserting text labels
+DONE 5.4.8. Actions
+DONE * Assigning actions to form buttons
+DONE 5.4.9. Widget layouts
+DONE * Springs in widget layouts
+DONE * Advanced widget layouts
+DONE * Removing widget layouts
+DONE * Size policies for widgets within a layout
+DONE 5.4.10. Setting widgets size and position by hand
+DONE 5.4.11. Setting the tab order
+DONE 5.5. Entering data using forms
+6. Advanced database topics
+ 6.1. Sharing a Kexi database project with others
+ 6.1.1. File-based database
+ 6.1.2. Server database
+ 6.2. Designing advanced objects
+ 6.3. Database administration
+ 6.3.1. Security in file-based databases
+ 6.3.2. Security in server databases
+ 6.3.3. Database file compacting
+ 6.4. Using the command line
+7. Work with external data
+ 7.1. Data importing
+ 7.1.1. Importing CSV files
+ 7.1.2. Pasting CSV data from the clipboard
+ 7.2. Importing external database projects
+ 7.3. Data exporting
+ 7.3.1. Exporting data to CSV files
+ 7.3.2. copying CSV data to the clipboard
+ 7.4. Exporting database projects
+ 7.5. Working with multiple database projects
+DONE 8. Adjusting Kexi application to your needs
+DONE 8.1. Changing the graphical interface mode
+DONE 8.2. Docking and undocking of the windows
+DONE 8.3. Keyboard shortcuts (key bindings) configuration
+ Table of Contents
+ Index
+ Appendices
+ A. Menu items
+ B. Keyboard Shortcuts
+ C. Form and Report widgets
+ D. Specifications
+ E. Example database projects
+ F. Web pages about Kexi
diff --git a/kexi/doc/kexidb/kexidb.doxygen b/kexi/doc/kexidb/kexidb.doxygen
new file mode 100644
index 00000000..ebfa7741
--- /dev/null
+++ b/kexi/doc/kexidb/kexidb.doxygen
@@ -0,0 +1,220 @@
+# Doxyfile 0.1
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME = "KexiDB Library"
+PROJECT_NUMBER = "Version 2"
+OUTPUT_DIRECTORY = .
+OUTPUT_LANGUAGE = English
+USE_WINDOWS_ENCODING = YES
+EXTRACT_ALL = YES
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = YES
+EXTRACT_LOCAL_CLASSES = YES
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ALWAYS_DETAILED_SEC = YES
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = NO
+STRIP_FROM_PATH =
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = YES
+SHORT_NAMES = NO
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+JAVADOC_AUTOBRIEF = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP = YES
+INHERIT_DOCS = YES
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+DISTRIBUTE_GROUP_DOC = NO
+TAB_SIZE = 4
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ALIASES = libdoc=@mainpage \
+ sect=<p><b> \
+ reimplemented= \
+ "deprecated=<b>This class or method is obsolete, it is provided for compatibility only.</b>" \
+ obsolete=@deprecated \
+ ref=
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+SHOW_USED_FILES = YES
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = YES
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = NO
+WARN_IF_DOC_ERROR = YES
+WARN_FORMAT =
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = ../../kexidb
+FILE_PATTERNS = *.h \
+ *.cpp \
+ *.cc \
+ *.hpp
+RECURSIVE = YES
+EXCLUDE = ../../kexidb/parser/sqlparser.h \
+ ../../kexidb/parser/sqlparser.cpp \
+ ../../kexidb/parser/sqlscanner.cpp
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS = *.moc.* \
+ moc* \
+ *.all_cpp.* \
+ *unload.* \
+ */test/* \
+ */tests/*
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH = ../common
+INPUT_FILTER =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION = YES
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+COLS_IN_ALPHA_INDEX = 3
+IGNORE_PREFIX = K
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER = ../common/header.html
+HTML_FOOTER = ../common/footer.html
+HTML_STYLESHEET = ../common/kde-web.css
+HTML_ALIGN_MEMBERS = YES
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+BINARY_TOC = NO
+TOC_EXPAND = NO
+DISABLE_INDEX = YES
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = NO
+TREEVIEW_WIDTH = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = NO
+USE_PDFLATEX = NO
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .kde3
+MAN_LINKS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
+SEARCH_INCLUDES = YES
+INCLUDE_PATH = ../../kexidb
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = QT_VERSION=311
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE = kexidb.tag
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = NO
+PERL_PATH =
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+HIDE_UNDOC_RELATIONS = NO
+HAVE_DOT = YES
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+TEMPLATE_RELATIONS = YES
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+GRAPHICAL_HIERARCHY = NO
+DOT_IMAGE_FORMAT = gif
+DOT_PATH =
+DOTFILE_DIRS =
+MAX_DOT_GRAPH_WIDTH = 800
+MAX_DOT_GRAPH_HEIGHT = 1024
+MAX_DOT_GRAPH_DEPTH = 0
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
+CGI_NAME =
+CGI_URL =
+DOC_URL =
+DOC_ABSPATH =
+BIN_ABSPATH =
+EXT_DOC_PATHS =
diff --git a/kexi/doc/plan/kexi-announce.txt b/kexi/doc/plan/kexi-announce.txt
new file mode 100644
index 00000000..4975fff7
--- /dev/null
+++ b/kexi/doc/plan/kexi-announce.txt
@@ -0,0 +1,42 @@
+ js, lucijan, 2003-10-19
+
+!Why Kexi does not behave as well as KOffice application using kofficelibs compared to others apps from the family?
+
+
+* Kexi, unlike (all?) others KOffice application is not document-driven
+;: Kexi is project-driven insted. Thus it is conceptually more like KDevelop.
+
+* Application's environment.
+;:Typical KOffice application is built upon the fact that there is a main document (that also can act as KPart) for the application view, and most application logic is built around this single native format/mime type and the KPart class that uses data in this single format.
+
+;:Kexi has more distributed nature, there is more than just one mode (or two) for editing a document or viewing it as read-only (both modes for e.g. KWord uses mostly the same KPart widget(s), only with certain actions disabled/enabled). Some Kexi KParts have editors that are built as strictly different components that are used for viewing (as an example, "table altering" dialog versus table/query data view).
+
+* Storage differences
+;: KOffice depends on storing its native format in single file (in some cases, it can be non-xml but still it is self-contained file)
+;:Kexi has many storage options, since one of its goals is integration of external database systems. Kexi allows you to save a short XML informational file (something like a shortcut to a database connection) that specifies how to connect to the database (where your project is stored) again.
+;:The other project storage method for Kexi uses file-based databases (currently, binary SQLite-compatible, with Kexi system objects inside). For end-user convenience, such a SQLite database file can be self contained and no additional information (in other XML files) is required (although it is still possible to have one).
+
+* KOffice behaves differently at opening projects than Kexi.
+;: When a non-native format is encountered, KOffice framework automatically invokes filters to convert the foreign format into that KOffice applications native format.
+
+;:Kexi is not expected to do so: there is generalisation inside KexiDB module; this module handles all differences "on-line". Otherwise it would be impossible to use Kexi: you don't need to convert e.g. MySQL-embedded-file to a SQLite file, since if there is a driver for MySQL-embedded it is still neutral to SQLite one.
+
+;:Similarly, Kexi does not download all data from SQL server and converts that format to "common" internal data representation and then operates on this representation. The "filter chains" from KOffice framework could force Kexi to do so (otherwise wrapping should be added), while in most cases the only thing that is converted (on demand) in Kexi projects are the database schemas.
+
+;: Above notes do not mean that Kexi is designed to lack filters functionality. Kexi filters functionality is designed with a knowledge that importing database schemas is not fully automatic, because there is not always enough database schema information (e.g. when migrating database from raw MySQL format to Firebird-driven Kexi project). The same applies for export: after exporting, much of project's information can disappear. You can say it is quite like exporting e.g. KWord document to, say, RTF. Yes, but Kexi often has to offer additional dialogs to ask user for additional hints -- summing up, KO filter chains are not so usable in Kexi, since we are not performing just "convert-file-to-file" task.
+
+
+!Why kexi is still a member of KOffice suite?
+
+* Kexi is still part of KOffice suite, what mean that from end-user perspective, strategy is the same as before. This implies that we will do our best to honour KOffice release
+
+* Kexi is a missing application for Free platforms like Linux, *BSD
+
+* It (will be) still properly integrated with other KOffice compontents (KWord mailmerge, KChart graphs, Kugar reports, KSpread tables ...) and/or reuse them
+
+* Work on moving Kexi-as-KoMainWindow/KoDocument-driven application to Kexi-as-KMainWindow/KexiDB-driven application is stared by Kexi Team
+
+
+%%%
+
+Any comments and ideas and further proposals are heavily welcome :)