---------------------------------------------------------
 Kexi Development CHANGELOG / TODO Document
 From js's Point of View
 
 Also includes: win32 porting and multiplatform 
  features improving details
 
 Copyright (C) 2003 Jaroslaw Staniek js at iidea dot pl
 (C) OpenOffice Polska 2003
 Kexi home page: http://www.kexi-project.org/
---------------------------------------------------

[JK] - fix proposed by Jakub Kubica
[KUBA] - fix proposed by Jakub Koscielak
"TODO(js)" is my TODO indicatior in the code

TODO: kexiprojectwizard: don't allow user to use the wizard when no db drivers are available
FIXME: Shorcuts conf dialog: two sections with the same name "Kexi"

TODO: Translate datatypes (visible eg. at alter table), but types set need simplification
      and unification (with optional advanced view)

TODO: rename KexiDBConnection to KexiDBConnectionData and use it inside KexiDB

TODO: rename KexiTabBrowser to KexiProjectWindow
TODO: rename KexiBrowser to KexiProjectListView
TODO: rename KexiBrowserItem to KexiProjectListViewItem
TODO: rename KexiDialogBase to KexiWindowBase

TODO: 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 ic consumed ~350B)
  - add an option: for bigger tables load only part of the table data
  - optimize MySQL record size

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=small] add dynamic resize for dict members like Connection::m_tables
TODO: [complexity=big] make KexiDB really ASYNC, multithreaded!
TODO: [complexity=big] add command line kexi tools

TODO: install kexi-specific icons in apps/kexi/icons not is 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

TODO: implement better references (foreign key information) between tables + storage
TODO: implement WHERE clause + storage
TODO: implement GROUP BY clause + storage
TODO: add kexi driver version info
TODO: add server version info retrieval
TODO: add schema to kexi__* tables on createTable()
TODO: add support for creation temporary databases
TODO: Connection::selectStatement( KexiDB::QuerySchema& querySchema ) :
		--add WHERE and other sql parts


TODO: use KShared and KSharedPtr for Transaction and DriverManger class instead
TODO: add kexi's global.h 
TODO: add Q_LLONG to kexi global.h is not exists

TODO: add to field's properties list: input mask, validation rule, column width

FIX: corrupted database can be created sometimes (eg. for tests/newapi sqlite dbcreation)
        --reason: maybe file was not flushed and app too early exited?

TODO: improove Expression class, add code for generating expression 
 strings in Connection::queryStatement()

<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()"
</SQLITE>

<RENAME_PROPOSALS>
Introduce KexiProject namespace for all components that are specially developed for Kexi project

1. KexiProjectHandler --> KexiProjectPart ( this is a baseclass for project 
  parts like: queries, tables, forms, reports)
It seems to be ok, since classes like KexiTablePart already inherits from KexiProjectPart 
(formerly KexiProjectHandler)

2. KexiProjectHandlerProxy --> KexiProjectPart::Proxy
..thus it could be consistently named. This also indicated that the class is used 
as a helper for KexiProjectPart. More, there are already classes like KexiTablePartProxy
so new name for KexiProjectHandlerProxy is ok. Proxy class should be declared 
inside KexiProjectPart.

3. KexiProjectHandlerItem -> KexiProjectPart::Instance 
(or KexiProjectPart::Data but Im voting for the former)
This gives us the idea that this class is just an instance of well-defined part.

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)

ALSO TODO: 
Jowenn's KexiDataProvider class functionality seems to be something like kexidb now offers.

</RENAME_PROPOSALS>

TODO:
- add kexi__parts (p_id integer, p_type) table and appropriate part objects in kexi__objects

TODO: (tableview):
- add top-left putton that allow select all rows
- enable clicked vheader button to select given row
- enable column dragging
- add action "restore original column order"
- enable up/down moving even when cell editor is activated

TODO:
- In mysql and pgsql drivers ConnectionData::fileName() is reused for socket names.
  It's not ok. Add another member: localSocketFileName(), because fileName() 
  is for file-based engines only.

TODO:  CURSOR
- m_readAhead: in Cursor::open():
	if (!m_readAhead) // jowenn: to ensure before first state, without cluttering implementation code
		m_readAhead = drv_getNextRecord(); //true if any record in this query
  ---FIX THIS for other drivers than SQLITE

TODO: Change "File" menu entry to "Database"
TODO: add sorting projects information using KexiProjectData::lastOpened
TODO: also add this info as "Database>Open Recent" menu subentry

MAYBE TODO: REUSE QSignalMapper for actions with arguments


TODO: add permissions information to connection : and - for sqlite - check if file is RO
   and then set RO flag


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
- 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]- (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 crushes)


2003-03-28
- first touch on Kexi sources for porting

