Commit Graph

45 Commits

Author SHA1 Message Date
Ivo Hinkelmann
59389868dc CWS-TOOLING: integrate CWS dba32a
2009-04-16 13:08:19 +0200 oj  r270882 : #i14538# set property at control
2009-04-16 13:04:28 +0200 oj  r270881 : #i98557# remove binary string for SRB
2009-04-15 13:19:10 +0200 oj  r270838 : #i96782# use type set at view
2009-04-14 14:53:20 +0200 oj  r270778 : #i96782# set initialize size for custom shape
2009-04-06 14:19:14 +0200 oj  r270546 : #i88432# correct pos when < 0 while resizing
2009-04-06 13:36:13 +0200 oj  r270541 : #i96782# handle toolbar and menubar differently
2009-04-06 13:33:54 +0200 oj  r270540 : #i96782# handle toolbar and menubar differently
2009-04-06 12:28:23 +0200 oj  r270534 : #i96782# handle toolbar and menubar differently
2009-04-06 12:27:44 +0200 oj  r270533 : #i96782# handle toolbar and menubar differently
2009-04-06 12:24:32 +0200 oj  r270532 : #i96782# handle toolbar and menubar differently
2009-04-06 12:15:15 +0200 oj  r270531 : do not initialze when field is empty
2009-04-06 10:06:08 +0200 oj  r270528 : #i96782# clean up of menubar and remove duplicates
2009-04-06 09:47:49 +0200 oj  r270527 : #i96519# adjust help text dynamic
2009-04-03 13:43:20 +0200 oj  r270482 : do not need to remove section from observer they are already disposed
2009-04-03 13:27:28 +0200 fs  r270479 : #i97356#
2009-04-02 11:30:39 +0200 fs  r270386 : UNX line ends
2009-04-02 10:54:51 +0200 fs  r270379 : UNX line ends
2009-04-02 10:39:57 +0200 fs  r270378 : UNX line ends
2009-04-02 10:37:24 +0200 fs  r270377 : why did this survive the rebase? was removed on trunk ...
2009-03-31 13:31:12 +0200 fs  r270277 : component_foo should be public
2009-03-28 00:21:01 +0100 fs  r270176 : manuallly merged the changes which happened in CWS before resync to m45, where the directory had been moved from reportdesign/registry to reportbuilder/registry
2009-03-27 23:01:20 +0100 fs  r270174 : CWS-TOOLING: rebase CWS dba32a to trunk@270033 (milestone: DEV300:m45)
2009-03-11 12:23:35 +0100 fs  r269310 : #i99958# ensure the ControlModelLock doesn't release twice
2009-03-06 09:07:32 +0100 fs  r268970 : ignore output paths in SVN's status
2009-03-06 09:07:08 +0100 fs  r268969 : ignore output paths in SVN's status
2009-03-04 11:28:02 +0100 oj  r268800 : copy and paste error, check correct end now
2009-03-03 15:49:11 +0100 fs  r268736 : #i10000# those merges were lost during the rebase (m38->m42)
2009-03-03 13:25:27 +0100 lla  r268720 : #i99652# fix wrong refactoring
2009-02-27 11:12:56 +0100 fs  r268566 : beautified
2009-02-27 10:53:47 +0100 fs  r268561 : doFormListening(false) only when actually isFormListening() (found during complex test case XMLFormSettings with assertions)
2009-02-26 20:55:31 +0100 fs  r268546 : #i96530# set the Label property of the bound control, if we didn't create a dedicated label control
2009-02-26 11:53:09 +0100 fs  r268494 : #i10000#
2009-02-26 11:27:50 +0100 fs  r268493 : #i10000#
2009-02-26 11:17:08 +0100 fs  r268490 : reportdesign depends on REPORTBUILDER, not REPORTDESIGN
2009-02-25 11:39:48 +0100 fs  r268422 : #i10000# post-resync: INFO_ESCAPE_DATETIME got lost during rebase
2009-02-24 23:24:10 +0100 fs  r268411 : CWS-TOOLING: rebase CWS dba32a to trunk@268395 (milestone: DEV300:m42)
2009-02-20 15:09:48 +0100 fs  r268324 : respect ImplicitCatalog/SchemaRestriction in all necessary places
2009-02-20 13:48:10 +0100 oj  r268318 : order of initialize corrected
2009-02-14 15:07:52 +0100 fs  r267759 : #i98975# when an image does not have a bitmap, but a text, draw this (as placeholder)
2009-02-14 15:02:40 +0100 fs  r267758 : consolidated and removed some duplicate code
2009-02-14 13:52:23 +0100 fs  r267756 : #i10000#
2009-02-13 22:08:34 +0100 fs  r267750 : #i100000#
2009-02-13 22:07:25 +0100 fs  r267749 : #i10000#
2009-02-13 21:55:36 +0100 fs  r267747 : #i10000#
2009-02-13 21:54:27 +0100 fs  r267746 : use const_cast
2009-02-13 21:29:10 +0100 fs  r267745 : #i10000#
2009-02-13 21:27:39 +0100 fs  r267744 : #i10000#
2009-02-13 20:59:13 +0100 fs  r267742 : #i10000#
2009-02-13 13:21:30 +0100 fs  r267717 : better diagnostics
2009-02-13 13:17:24 +0100 fs  r267715 : #i58313# support Catalog/SchemaRestriction settings, which are applied in getTables when 'all catalogs/schemas' are to be retrieved
2009-02-13 13:16:14 +0100 fs  r267714 : filter out some more known global settings
2009-02-13 12:39:43 +0100 fs  r267713 : #i58313# ImplicitCatalog/SchemaRestriction
2009-02-13 12:36:50 +0100 fs  r267712 : when exporting data source settings, allow for properties which have a VOID default value, but are currently not VOID
2009-02-13 12:35:57 +0100 fs  r267711 : implement XSet, to allow inserting properties which have a default value of VOID
2009-02-13 12:35:03 +0100 fs  r267710 : +addVoidProperty
2009-02-13 10:20:08 +0100 fs  r267697 : removed unused variable
2009-02-13 09:46:46 +0100 fs  r267695 : refactored the table filtering code, to have a better base for introducing additional low level filters
2009-02-10 09:23:07 +0100 lla  r267537 : #i10000# wrong line feed, double named variable
2009-02-09 12:13:08 +0100 oj  r267508 : #i98605# notify hanlder
2009-02-09 11:50:34 +0100 oj  r267507 : #i98926# solve refcount problem
2009-02-09 11:50:05 +0100 oj  r267506 : #i98971# fix for simple html
2009-02-09 11:49:24 +0100 oj  r267505 : #i98971# fix for simple html
2009-02-09 11:47:27 +0100 oj  r267504 : invoke on copy
2009-02-09 09:51:00 +0100 fs  r267500 : #i98316#
2009-02-09 09:46:10 +0100 fs  r267499 : setCurrentSelection: don't reset the current form when we de-select everything
2009-02-09 09:43:45 +0100 fs  r267498 : #i98316#
2009-02-08 21:25:18 +0100 fs  r267496 : #i98272# introduce late ctor for cloning
2009-02-07 21:08:39 +0100 fs  r267485 : #i98272# when copy-constructing a FmFormPageImpl, use the XCloneable of the forms collection, instead of XPersistObject (which is incompletely implemented)
2009-02-07 21:07:26 +0100 fs  r267484 : removed obsolete include guards
2009-02-07 21:05:22 +0100 fs  r267483 : #i98272# implement XCloneable
2009-02-06 15:02:48 +0100 lla  r267467 : #i96523# add XImageControl
2009-02-06 14:41:38 +0100 oj  r267463 : #i98926# late init when connection disposed but only when asked for
2009-02-06 13:49:57 +0100 lla  r267457 : #i92860# bigint in forms doesn't allow input of values > 1, fixed
2009-02-06 13:03:55 +0100 oj  r267455 : ImageScaleMode
2009-02-05 14:48:19 +0100 lla  r267424 : #i89335# dropdown listboxes are 14 instead of 7 lines high
2009-02-05 13:40:00 +0100 oj  r267423 : #i96945# insert new prop Opaque
2009-02-05 13:39:19 +0100 oj  r267422 : #i96945# insert layer handling for hell and heaven
2009-02-05 13:29:32 +0100 lla  r267420 : #i89335# add is null, is not null, is not like filter condition
2009-02-04 12:23:02 +0100 oj  r267364 : #i98821# load table font settings
2009-02-04 10:05:27 +0100 oj  r267351 : #i98821# load table font settings
2009-02-04 09:23:22 +0100 fs  r267350 : checking persistency of UI settings in database documents - for the moment, capture table formattings (which is issue 98821)
2009-02-04 09:22:15 +0100 fs  r267349 : moved some methods which are of wider interest from DatabaseDocument to FileHelper resp. TestCase
2009-02-04 08:56:27 +0100 oj  r267347 : #i97586# UcbStreamHelper::CreateStream doesn't check all streamModes use different method
2009-02-04 08:23:26 +0100 oj  r267346 : #i98701# check key size is >= 3 and some redesign
2009-02-03 23:29:24 +0100 fs  r267345 : return the component (controller), not the frame
2009-02-03 23:28:53 +0100 fs  r267344 : openExisting returns a controller now, not the frame (this was a bug)
2009-02-03 23:28:25 +0100 fs  r267343 : openElement: properly return the component in the table/query case
2009-02-02 12:48:17 +0100 oj  r267261 : #i96013# fix for relative path
2009-02-02 10:33:28 +0100 lla  r267253 : #i98557# cleanups and consolidation
2009-02-02 09:37:23 +0100 lla  r267250 : #i88432# resize will no longer move components to other sections
2009-02-02 09:08:24 +0100 oj  r267245 : #i97475# write 0x1A at the end of the file
2009-01-30 19:39:20 +0100 lla  r267230 : #i10000# unused parameters
2009-01-30 09:51:09 +0100 fs  r267181 : onsolete
2009-01-30 09:49:27 +0100 fs  r267180 : onsolete
2009-01-29 14:28:22 +0100 oj  r267139 : #i96825# import cell style
2009-01-29 14:23:12 +0100 oj  r267137 : #i98601# export imagescalehandler
2009-01-29 14:19:57 +0100 lla  r267135 : #i98601# add ImageScaleMode
2009-01-29 13:21:08 +0100 oj  r267124 : #i98601# impl ScaleMode
2009-01-29 13:20:56 +0100 oj  r267123 : #i98601# impl ScaleMode
2009-01-29 08:46:40 +0100 oj  r267095 : new property: ScaleMode
2009-01-29 08:45:23 +0100 oj  r267094 : new ScaleMode from UnControlImageModel
2009-01-29 08:28:12 +0100 oj  r267093 : #i87930# close all sub forms/reports when the desktop is going to be terminated and no db frame exists
2009-01-28 19:54:34 +0100 lla  r267082 : #i98557# pictures in report wizard
2009-01-28 15:06:25 +0100 oj  r267060 : #i87930# close all sub forms/reports when the desktop is going to be terminated and no db frame exists
2009-01-28 11:38:41 +0100 lla  r267046 : #i76783# handle binary fields in forms
2009-01-28 09:24:43 +0100 lla  r267025 : #i10000#
2009-01-28 08:40:04 +0100 fs  r267024 : #i10000#
2009-01-28 08:04:43 +0100 oj  r267023 : #i93456# use resource strings for function names
2009-01-27 13:26:05 +0100 oj  r266988 : check data field is type field or expression
2009-01-27 13:07:17 +0100 oj  r266985 : check data field length
2009-01-27 11:48:19 +0100 oj  r266974 : #i96823# return dll string as column name when no alias exists
2009-01-27 09:53:11 +0100 fs  r266958 : display the message of a caught exception
2009-01-27 09:44:13 +0100 fs  r266957 : #i58313# when retrieving all tables, just set an empty table type filter - the connection will care for translating this, by respecting the TableTypeFilterMode setting
2009-01-27 09:36:09 +0100 fs  r266956 : #i58313# getTables: per JDBC spec,  is not a valid table type filter. Translate it to 'null'.
2009-01-26 11:24:49 +0100 lla  r266912 : #i97865# cleanups (AddField viewable in remote mode)
2009-01-26 07:49:27 +0100 lla  r266897 : #i97865# AddField opens in remote case
2009-01-26 07:48:58 +0100 lla  r266896 : #i97865# AddField opens in remote case
2009-01-26 07:48:42 +0100 lla  r266895 : #i97865# AddField opens in remote case
2009-01-23 15:04:40 +0100 fs  r266825 : consolidate the usage of OSQLMessageBox with MessageType==Warning into OSQLWarningBox
2009-01-23 10:47:33 +0100 fs  r266787 : +supportsUserAdministration
2009-01-23 10:47:11 +0100 fs  r266784 : use DatabaseMetaData.supportsUserAdministration
2009-01-23 07:55:59 +0100 lla  r266767 : #i10000# fix gcc compiler failures
2009-01-21 15:08:55 +0100 lla  r266673 : #i97265# Labels in HC (IsDark) with other color (viewable)
2009-01-19 14:58:54 +0100 lla  r266504 : #i96523# last problems with FormatKey and '0' values fixed
2009-01-19 14:58:00 +0100 lla  r266503 : #i96519# AddField help text
2009-01-19 11:59:02 +0100 fs  r266485 : #i96523# for formatted field models, init them with TreatAsNumber = false
2009-01-16 10:31:49 +0100 lla  r266405 : #i96793# add shrink to popup menu
2009-01-16 09:21:44 +0100 lla  r266401 : #i96519# AddField contains a help text
2009-01-15 11:21:49 +0100 lla  r266357 : #i96523# problem with XVclWindowPeer not fixed now
2009-01-15 09:19:20 +0100 lla  r266335 : #i96523# more crashes fixed.
2009-01-14 13:08:34 +0100 lla  r266291 : #i96523# problems with crashes fixed
2009-01-13 10:54:24 +0100 lla  r266199 : #i96523# show datasource in formattedfields new files
2009-01-13 10:52:39 +0100 lla  r266198 : #i96523# show datasource in formattedfields
2009-01-13 09:41:50 +0100 lla  r266197 : #i96526# handling none existance default.otr
2009-01-12 12:55:49 +0100 fs  r266151 : don't expect the control model to be a BoundComponent before adding as modify listener
2009-01-12 12:51:33 +0100 fs  r266149 : #i88458# let the ImageControl be an XModifyBroadcaster, so the forms runtime can notice when the user changes the control content while it does not have the focus
2009-01-09 13:41:22 +0100 fs  r266080 : doc
2009-01-09 13:14:14 +0100 fs  r266077 : #i97377# SetModified when order is changed via DnD
2009-01-07 09:55:40 +0100 oj  r265951 : merge from master
2009-01-07 09:55:24 +0100 oj  r265950 : removed observer
2009-01-07 09:55:06 +0100 oj  r265949 : merge from master
2009-01-07 07:29:11 +0100 oj  r265945 : shadow var changed
2009-01-06 07:25:57 +0100 oj  r265893 : CWS-TOOLING: rebase CWS dba32a to trunk@265758 (milestone: DEV300:m38)
2009-01-05 13:18:22 +0100 oj  r265865 : convert to unix le
2009-01-05 09:13:52 +0100 lla  r265857 : #i79423# lc_ sc_ permutation fix
2009-01-02 19:40:59 +0100 lla  r265847 : #i79423# section shrink icons
2008-12-22 11:37:57 +0100 lla  r265749 : #i97484# move component to negative Y-position
2008-12-22 11:37:05 +0100 lla  r265748 : #i97484# move component to negative Y-position
2008-12-22 11:35:33 +0100 lla  r265747 : #i97484# move component to negative Y-position
2008-12-22 11:25:07 +0100 lla  r265745 : #i96757# changes via property browser was not undoable
2008-12-18 15:10:38 +0100 fs  r265694 : corrected an condition in doFormListening, which otherwise leads to uncommitable grid columns in documents which are loaded from disc (not in documents which are newly created)
2008-12-18 14:54:39 +0100 fs  r265692 : Hide Columns text slightly changed
2008-12-18 13:44:15 +0100 fs  r265683 : #i94068# properly display erros happening during a form operation - at least once, and at most once
2008-12-18 11:28:29 +0100 fs  r265677 : document the new InputRequired property
2008-12-18 11:04:15 +0100 fs  r265676 : #i96530# createControlLabelPair: don't actually create a label for a checkbox
2008-12-18 10:35:53 +0100 fs  r265674 : #i95226# when a column is replaced, and it's the selected column, update the selection
2008-12-18 10:34:42 +0100 fs  r265673 : #i95226# refactoring of the implReplaced method
2008-12-18 10:34:28 +0100 fs  r265672 : #i95226# when replacing a grid column, update the property browser
2008-12-18 10:33:17 +0100 fs  r265671 : when an element is removed, remove it from m_aCurrentSelection, too (if necessary)
2008-12-18 10:31:57 +0100 fs  r265670 : Hide Columns text slightly changed
2008-12-18 10:15:56 +0100 lla  r265669 : #i14538# do not allow to press finish button twice
2008-12-18 08:56:33 +0100 lla  r265665 : #i10000# build depend=t problem hacked.
2008-12-17 20:59:10 +0100 fs  r265656 : #i89821# don't let a MultiLineEdit select all text when it receives the focus
2008-12-17 12:10:54 +0100 fs  r265594 : #i97356#
2008-12-17 12:06:29 +0100 fs  r265593 : #i97355# Print -> Printable
2008-12-17 11:59:31 +0100 fs  r265591 : #i97350# combo boxes comment on list selection (as list boxes already do)
2008-12-16 09:53:57 +0100 lla  r265527 : #i96526# handling none existance default.otr
2008-12-15 14:48:39 +0100 lla  r265500 : #i79423# reparing, was wrong implemented
2008-12-12 15:08:33 +0100 lla  r265424 : #i10000# remove wrong carridge returns
2008-12-12 15:07:55 +0100 lla  r265423 : #i10000# remove wrong carridge returns
2008-12-12 15:06:41 +0100 lla  r265422 : #i10000# remove wrong carridge returns
2008-12-12 10:23:13 +0100 lla  r265395 : #i95234# reset DragDelta
2008-12-12 10:11:02 +0100 lla  r265393 : #i79423# pre versions of shrink buttons
2008-12-11 15:32:13 +0100 fs  r265318 : prevent a deadlock during complex.dbaccess.DatabaseDocument test
2008-12-11 15:30:06 +0100 fs  r265316 : prevent a deadlock during complex.dbaccess.DatabaseDocument test
2008-12-11 15:07:05 +0100 fs  r265307 : removed superfluous text
2008-12-11 12:29:54 +0100 lla  r265282 : #i96757# cleanup second try
2008-12-11 12:09:15 +0100 lla  r265278 : #i96757# cleanup
2008-12-11 12:07:56 +0100 lla  r265277 : #i95234#
2008-12-10 14:04:39 +0100 lla  r265183 : #i93472# D&D fixes
2008-12-10 12:29:33 +0100 lla  r265168 : #i94067# add (APP|SYS)FONT to XUnitConversion
2008-12-10 12:15:02 +0100 lla  r265166 : #i94067# add APPFONT, SYSFONT to MeasureUnit
2008-12-10 11:52:10 +0100 lla  r265163 : #i94067# add comments
2008-12-06 20:33:05 +0100 fs  r264935 : #i10000# precompiled header
2008-12-05 09:29:26 +0100 fs  r264889 : #i10000#
2008-12-05 09:07:31 +0100 fs  r264888 : #i10000#
2008-12-04 13:25:46 +0100 fs  r264838 : CWS-TOOLING: rebase CWS dba32a to trunk@264807 (milestone: DEV300:m37)
2008-12-03 23:49:13 +0100 fs  r264808 : merge changes from trunk, to be able to do a rebase
2008-12-03 17:13:09 +0100 lla  r264801 : #i91041# update documentation
2008-12-03 16:57:04 +0100 lla  r264799 : #i94067# allow convert(Point|Size)ToLogic as pixel also
2008-12-02 12:36:32 +0100 lla  r264687 : #i96782# bring toolbar objects to menu structure
2008-12-02 10:32:44 +0100 lla  r264667 : #i86255# make property work
2008-12-02 09:22:47 +0100 lla  r264659 : #i79423# add section shrink toolbar
2008-12-02 07:41:22 +0100 lla  r264657 : #i86255# add check box for Escape DateTime property
2008-12-02 07:37:17 +0100 lla  r264656 : #i79423# new shrink buttons
2008-11-26 11:55:28 +0100 fs  r264362 : #i96541#
FillPropertySet: do not only catch UnknownPropertyException when setting the Char/ParaAutoStyleName,
but also care for the other exceptions which can be thrown by XPropertySet::setPropertyValue.
This is actually not the real fix for #i96541#, but only a follow-up. The root cause of the issue
was fixed in CWS dba301b, but this here was another (potential) bug which popped up during investigations.
2008-11-25 09:04:40 +0100 lla  r264273 : #i82083# new toolbox in GroupsSorting dialog
2008-11-25 08:56:08 +0100 lla  r264272 : #i94729# change token strings into string list, move class out of function
2008-11-24 15:52:22 +0100 fs  r264251 : #i96532# do not set AppendTableAlias, NameLengthLimit, etc., if the OXMLDataSourceInstance is used for elements at which those attributes never appear
2008-11-24 15:51:45 +0100 fs  r264249 : #i96532# do not set AppendTableAlias, NameLengthLimit, etc., if the OXMLDataSourceInstance is used for elements at which those attributes never appear
2008-11-24 15:45:21 +0100 fs  r264244 : #i96532# the API default for ParamNameSubst is false
2008-11-24 15:45:04 +0100 fs  r264243 : #i96532# do not set AppendTableAlias, NameLengthLimit, etc., if the OXMLDataSourceInstance is used for elements at which those attributes never appear
2008-11-24 15:44:14 +0100 fs  r264241 : #i96532# slight refactoring of exporting properties which have a XML default different from the API default
2008-11-24 10:50:01 +0100 lla  r264216 : #i82083# icons for new toolbox
2008-11-24 09:38:45 +0100 lla  r264205 : #i82083# new toolbox in GroupsSorting dialog
2008-11-24 09:32:20 +0100 lla  r264201 : #i96501# cleanup assertions
2008-11-24 09:12:55 +0100 lla  r264198 : #i83082# enhancement for toolboxes, better HC comfort
2008-11-24 08:46:43 +0100 lla  r264197 : #i96501# fix problem with negative positions
2008-11-21 11:44:47 +0100 fs  r264118 : #i57042# introduce a counter for suspending change notifications of a given property, so recursive calls are possible
2008-11-21 11:02:17 +0100 fs  r264116 : #i96388# don't call ExecuteContextMenuAction when no action was chosen by the user
2008-11-21 10:36:53 +0100 fs  r264114 : #i47384# assertion was wrong
2008-11-14 12:33:15 +0100 fs  r263673 : #i47318# XRowSetChangeBroadcaster/Listener, to be able to listen for changes in an XRowSetSupplier's RowSet
2008-11-14 12:30:29 +0100 fs  r263672 : #i47318# more refactoring
- BoundControlModels now listen at the XRowSetSupplier for changes in the supplied
  RowSet, to properly revoke/register old/new listeners at the RowSet
- replaced ::osl::Mutex in various places with a ControlModelLock
2008-11-14 12:20:55 +0100 fs  r263671 : when BUILD_TYPE includes QADEVOOO, the BUILD_QADEVOOO needs to bet set, too
2008-11-14 12:19:21 +0100 fs  r263670 : oops, this was not intended to be committed
2008-11-12 11:08:10 +0100 fs  r263579 : #i96096# new ctors taking UNO_QUERY_THROW
2008-11-12 09:15:54 +0100 fs  r263576 : no need to load the complete dialog just to get a string which the dialog itself loads from resource
2008-11-10 17:55:45 +0100 fs  r263535 : spelling in comment
2008-11-10 15:51:14 +0100 fs  r263523 : #i47318# various refactorings
1. don't forward syntetic XLoadListener events from the grid control to
   the grid columns. Instead, forward GridColumn::XChild::setParent to
   the base class, which then can add itself as load listener 
2. removed various occurances of XMultiServiceFactory, instead use the
   ::comphelper::ComponentContext
3. in O(Bound)ControlModel, have a mechanism to lock the instance (using
   ControlModelLock) and fire property changes when the last lock dies.
2008-11-10 12:49:24 +0100 oj  r263513 : #i94729# change token strings into string list
2008-11-10 12:13:15 +0100 oj  r263512 : #i95222# export chart:title style as well
2008-11-10 08:55:25 +0100 oj  r263507 : #i93471# show the correct tabpage when selecting a different object
2008-11-07 23:38:29 +0100 fs  r263490 : #i95977# for the event input controls, add a component extending their functionality so they're reset when the users presses DEL
2008-11-07 23:35:39 +0100 fs  r263489 : during #i95977#: When a VCL Window is deleted from within VCL code, the respective WindowPeer was never disposed. Corrected this.
2008-11-07 14:57:07 +0100 fs  r263420 : #i95963# human-readable display names for event bindings
2008-11-06 10:34:52 +0100 fs  r263366 : #i95865# don't use library names containing InvalidZipEntryFileNames - workaround until i95409 is fixed
2008-11-06 10:33:28 +0100 fs  r263365 : #i95865#
copied the following change from CWS odfmetadata2 (not yet integrated) into CWS dba31d
  - comphelper/inc/comphelper/storagehelper.hxx,
    comphelper/source/misc/storagehelper.cxx:
    + add function IsValidZipEntryFileName (moved from module package)
2009-04-22 11:01:27 +00:00
Release Engineers
f0a7951ee7 CWS-TOOLING: integrate CWS dba31e
2008-11-19 12:36:23 +0100 msc  r263980 : i96104
2008-11-19 12:31:19 +0100 msc  r263979 : i96104
2008-11-19 12:21:55 +0100 msc  r263977 : i96104
2008-11-19 12:18:53 +0100 msc  r263976 : i96104
2008-11-18 09:09:45 +0100 oj  r263746 : disable color entry when area is set
2008-11-18 08:37:52 +0100 oj  r263741 : #remove sub report entry
2008-11-17 11:20:25 +0100 fs  r263708 : #i10000#
2008-11-17 11:06:52 +0100 fs  r263706 : minimal version now is 3.1
2008-11-12 22:25:59 +0100 fs  r263621 : #i96150#
2008-11-12 22:20:02 +0100 fs  r263620 : rebased to m34
2008-11-12 21:39:41 +0100 fs  r263618 : MANUAL REBASE: rebase CWS dba31d to DEV300_m34
2008-11-12 13:54:58 +0100 fs  r263597 : #i96134# MediaDescriptor.URL is to be preferred over MediaDescriptor.FileName. Nonetheless, ensure both are handled
2008-11-12 13:53:40 +0100 fs  r263596 : #i96134# re-enabled the code for #i41897#, a better fix is to come
2008-11-12 12:48:21 +0100 fs  r263585 : #i96134# disable saving URLs of file-base databases relatively
2008-11-11 16:11:11 +0100 msc  r263566 : #i96104#
2008-11-05 09:09:47 +0100 oj  r263342 : #i88727# color noe added
2008-11-05 08:41:43 +0100 oj  r263341 : #i77916# zoom added
2008-11-04 21:24:15 +0100 fs  r263339 : disposing: call disposeAndClear without own mutex locked - some of our listeners insist on locking the SolarMutex, which sometimes led to deadlocks on the complex test cases
2008-11-04 21:23:15 +0100 fs  r263338 : remove SolarMutex locking - this happned in CWS dba31c (in the CVS version), which this CWS was created from, but seems to got lost during resync
2008-11-04 20:49:50 +0100 fs  r263335 : docu formatting
2008-11-04 20:06:39 +0100 fs  r263334 : #i95826# use m_aMutex, not a DocumentGuard (wrongly resolved merge conflicts)
2008-11-04 17:36:29 +0100 fs  r263332 : #i92688# properly revoke as XEventListener from m_xActiveController when disposing
2008-11-04 14:49:34 +0100 fs  r263324 : #i92322# enable Input Required if EmptyIsNULL does not exist at the control
2008-10-31 11:10:04 +0100 oj  r262857 : merge from cvs to svn
2008-10-31 09:46:45 +0100 oj  r262853 : merge from cvs to svn
2008-10-31 08:46:37 +0100 oj  r262849 : merge from cvs to svn
2008-10-31 08:44:24 +0100 oj  r262848 : merge from cvs to svn
2008-10-31 08:43:33 +0100 oj  r262847 : merge from cvs to svn
2008-10-31 08:42:28 +0100 oj  r262846 : merge from cvs to svn
2008-10-31 08:41:58 +0100 oj  r262845 : merge from cvs to svn
2008-10-31 08:41:32 +0100 oj  r262844 : merge from cvs to svn
2008-10-28 12:19:50 +0100 oj  r262733 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:42 +0100 oj  r262732 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:36 +0100 oj  r262731 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:31 +0100 oj  r262730 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:22 +0100 oj  r262729 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:18 +0100 oj  r262728 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:10 +0100 oj  r262727 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:06 +0100 oj  r262726 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:05 +0100 oj  r262725 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:19:01 +0100 oj  r262724 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:18:50 +0100 oj  r262723 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:18:41 +0100 oj  r262722 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:18:40 +0100 oj  r262721 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:18:27 +0100 oj  r262720 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:18:10 +0100 oj  r262719 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:18:01 +0100 oj  r262718 : #iXXXXX#: migrate CWS dba31e to SVN
2008-10-28 12:17:39 +0100 oj  r262717 : #iXXXXX#: migrate CWS dba31e to SVN
2008-12-01 12:31:27 +00:00
Kurt Zenker
accc5421e6 INTEGRATION: CWS dba30d (1.42.4); FILE MERGED
2008/05/27 12:28:02 fs 1.42.4.1: #i89657# refactoring, so that our binding's getValue is only called when our mutex is not locked
2008-06-25 10:51:48 +00:00
Vladimir Glazounov
7c3947612d INTEGRATION: CWS dba241b_DEV300 (1.38.4); FILE MERGED
2008/04/01 19:42:24 fs 1.38.4.1: #i87690# loadData got a 'force' parameter, to enforce refreshing the list box when triggered via XRefreshable
2008-05-14 12:10:31 +00:00
Rüdiger Timm
784859071d INTEGRATION: CWS changefileheader (1.40.18); FILE MERGED
2008/03/31 13:11:32 rt 1.40.18.1: #i87441# Change license header to LPGL v3.
2008-04-11 07:06:02 +00:00
Ivo Hinkelmann
ecb5430f54 INTEGRATION: CWS gcc430two (1.38.28); FILE MERGED
2008/01/28 09:53:06 rene 1.38.28.1: more gcc 4.3.0 things
2008-02-04 12:52:15 +00:00
Rüdiger Timm
9099285392 INTEGRATION: CWS oj30 (1.38.16); FILE MERGED
2008/01/10 14:27:03 oj 1.38.16.1: #i85085# add std
2008-01-29 16:06:05 +00:00
Ivo Hinkelmann
5e4370f6b0 /*************************************************************************
*
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile$
 *
 *  $Revision$
 *
 *  last change: $Author$ $Date$
 *
 *  The Contents of this file are made available subject to
 *  the terms of GNU Lesser General Public License Version 2.1.
 *
 *
 *    GNU Lesser General Public License Version 2.1
 *    =============================================
 *    Copyright 2005 by Sun Microsystems, Inc.
 *    901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License version 2.1, as published by the Free Software Foundation.
 *
 *    This library 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
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *
 ************************************************************************/

// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_forms.hxx"

#include "ComboBox.hxx"
#include "property.hxx"
#include "property.hrc"
#include "services.hxx"

#include "frm_resource.hxx"
#include "frm_resource.hrc"
#include "BaseListBox.hxx"

/** === begin UNO includes === **/
#include <com/sun/star/sdb/SQLErrorEvent.hpp>
#include <com/sun/star/sdbc/XRowSet.hpp>
#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp>
#include <com/sun/star/sdb/XQueriesSupplier.hpp>
#include <com/sun/star/util/NumberFormat.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/sdb/SQLContext.hpp>
#include <com/sun/star/sdb/CommandType.hpp>
/** === end UNO includes === **/

#include <comphelper/numbers.hxx>
#include <comphelper/basicio.hxx>
#include <connectivity/dbtools.hxx>
#include <connectivity/dbconversion.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <rtl/ustrbuf.hxx>
#include <tools/debug.hxx>
#include <tools/diagnose_ex.h>
#include <unotools/sharedunocomponent.hxx>

using namespace dbtools;

//.........................................................................
namespace frm
{
using namespace ::com::sun::uno;
using namespace ::com::sun::sdb;
using namespace ::com::sun::sdbc;
using namespace ::com::sun::sdbcx;
using namespace ::com::sun::beans;
using namespace ::com::sun::container;
using namespace ::com::sun::form;
using namespace ::com::sun::awt;
using namespace ::com::sun::io;
using namespace ::com::sun::lang;
using namespace ::com::sun::util;
using namespace ::com::sun::form::binding;

//========================================================================
// class OComboBoxModel
//========================================================================
//------------------------------------------------------------------
InterfaceRef SAL_CALL OComboBoxModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException)
{
	return (*new OComboBoxModel(_rxFactory));
}

//------------------------------------------------------------------------------
Sequence<Type> OComboBoxModel::_getTypes()
{
	return ::comphelper::concatSequences(
		OBoundControlModel::_getTypes(),
        OEntryListHelper::getTypes(),
		OErrorBroadcaster::getTypes()
	);
}

// XServiceInfo
//------------------------------------------------------------------------------
StringSequence SAL_CALL OComboBoxModel::getSupportedServiceNames() throw(RuntimeException)
{
	StringSequence aSupported = OBoundControlModel::getSupportedServiceNames();

    sal_Int32 nOldLen = aSupported.getLength();
	aSupported.realloc( nOldLen + 8 );
	::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen;

    *pStoreTo++ = BINDABLE_CONTROL_MODEL;
    *pStoreTo++ = DATA_AWARE_CONTROL_MODEL;
    *pStoreTo++ = VALIDATABLE_CONTROL_MODEL;

    *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL;
    *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL;

    *pStoreTo++ = FRM_SUN_COMPONENT_COMBOBOX;
    *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_COMBOBOX;
    *pStoreTo++ = BINDABLE_DATABASE_COMBO_BOX;

	return aSupported;
}

//------------------------------------------------------------------------------
Any SAL_CALL OComboBoxModel::queryAggregation(const Type& _rType) throw (RuntimeException)
{
	Any aReturn = OBoundControlModel::queryAggregation( _rType );
    if ( !aReturn.hasValue() )
        aReturn = OEntryListHelper::queryInterface( _rType );
    if ( !aReturn.hasValue() )
        aReturn = OErrorBroadcaster::queryInterface( _rType );
    return aReturn;
}

//------------------------------------------------------------------
DBG_NAME( OComboBoxModel )
//------------------------------------------------------------------
OComboBoxModel::OComboBoxModel(const Reference<XMultiServiceFactory>& _rxFactory)
	:OBoundControlModel( _rxFactory, VCL_CONTROLMODEL_COMBOBOX, FRM_SUN_CONTROL_COMBOBOX, sal_True, sal_True, sal_True )
					// use the old control name for compytibility reasons
    ,OEntryListHelper( m_aMutex )
	,OErrorBroadcaster( OComponentHelper::rBHelper )
    ,m_aListRowSet( getContext() )
	,m_eListSourceType(ListSourceType_TABLE)
	,m_bEmptyIsNull(sal_True)
{
	DBG_CTOR( OComboBoxModel, NULL );

	m_nClassId = FormComponentType::COMBOBOX;
    initValueProperty( PROPERTY_TEXT, PROPERTY_ID_TEXT );
}

//------------------------------------------------------------------
OComboBoxModel::OComboBoxModel( const OComboBoxModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory )
	:OBoundControlModel( _pOriginal, _rxFactory )
    ,OEntryListHelper( *_pOriginal, m_aMutex )
	,OErrorBroadcaster( OComponentHelper::rBHelper )
    ,m_aListRowSet( getContext() )
	,m_aListSource( _pOriginal->m_aListSource )
	,m_aDefaultText( _pOriginal->m_aDefaultText )
	,m_eListSourceType( _pOriginal->m_eListSourceType )
	,m_bEmptyIsNull( _pOriginal->m_bEmptyIsNull )
{
	DBG_CTOR( OComboBoxModel, NULL );
}

//------------------------------------------------------------------
OComboBoxModel::~OComboBoxModel()
{
	if (!OComponentHelper::rBHelper.bDisposed)
	{
		acquire();
		dispose();
	}

	DBG_DTOR( OComboBoxModel, NULL );
}

// XCloneable
//------------------------------------------------------------------------------
IMPLEMENT_DEFAULT_CLONING( OComboBoxModel )

//------------------------------------------------------------------------------
void OComboBoxModel::disposing()
{
	OBoundControlModel::disposing();
    OEntryListHelper::disposing();
	OErrorBroadcaster::disposing();
	m_xFormatter = NULL;
}

//------------------------------------------------------------------------------
void OComboBoxModel::getFastPropertyValue(Any& _rValue, sal_Int32 _nHandle) const
{
	switch (_nHandle)
	{
        case PROPERTY_ID_LISTSOURCETYPE:
            _rValue <<= m_eListSourceType;
            break;

		case PROPERTY_ID_LISTSOURCE:
            _rValue <<= m_aListSource;
            break;

        case PROPERTY_ID_EMPTY_IS_NULL:
            _rValue <<= m_bEmptyIsNull;
            break;

        case PROPERTY_ID_DEFAULT_TEXT:
            _rValue <<= m_aDefaultText;
            break;

        case PROPERTY_ID_STRINGITEMLIST:
            _rValue <<= getStringItemList();
            break;

		default:
			OBoundControlModel::getFastPropertyValue(_rValue, _nHandle);
	}
}

//------------------------------------------------------------------------------
void OComboBoxModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue)
						throw (Exception)
{
	switch (_nHandle)
	{
		case PROPERTY_ID_LISTSOURCETYPE :
			DBG_ASSERT(_rValue.getValueType().equals(::getCppuType(reinterpret_cast<ListSourceType*>(NULL))),
				"OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" );
			_rValue >>= m_eListSourceType;
			break;

		case PROPERTY_ID_LISTSOURCE :
			DBG_ASSERT(_rValue.getValueType().getTypeClass() == TypeClass_STRING,
				"OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" );
			_rValue >>= m_aListSource;
			// die ListSource hat sich geaendert -> neu laden
			if (ListSourceType_VALUELIST != m_eListSourceType)
			{
				if ( m_xCursor.is() && !hasField() && !hasExternalListSource() )
                    // combo box is already connected to a database, and no external list source
				    // data source changed -> refresh
					loadData();
			}
			break;

		case PROPERTY_ID_EMPTY_IS_NULL :
			DBG_ASSERT(_rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN,
				"OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" );
			_rValue >>= m_bEmptyIsNull;
			break;

		case PROPERTY_ID_DEFAULT_TEXT :
			DBG_ASSERT(_rValue.getValueType().getTypeClass() == TypeClass_STRING,
				"OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" );
			_rValue >>= m_aDefaultText;
			resetNoBroadcast();
			break;

        case PROPERTY_ID_STRINGITEMLIST:
            setNewStringItemList( _rValue );
            break;

		default:
			OBoundControlModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue);
	}
}

//------------------------------------------------------------------------------
sal_Bool OComboBoxModel::convertFastPropertyValue(
						Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue)
						throw (IllegalArgumentException)
{
	sal_Bool bModified(sal_False);
	switch (_nHandle)
	{
		case PROPERTY_ID_LISTSOURCETYPE :
			bModified = tryPropertyValueEnum(_rConvertedValue, _rOldValue, _rValue, m_eListSourceType);
			break;

		case PROPERTY_ID_LISTSOURCE :
			bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aListSource);
			break;

		case PROPERTY_ID_EMPTY_IS_NULL :
			bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_bEmptyIsNull);
			break;

		case PROPERTY_ID_DEFAULT_TEXT :
			bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aDefaultText);
			break;

        case PROPERTY_ID_STRINGITEMLIST:
            bModified = convertNewListSourceProperty( _rConvertedValue, _rOldValue, _rValue );
            break;

		default:
			bModified = OBoundControlModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue);
			break;
	}
	return bModified;
}

//------------------------------------------------------------------------------
void OComboBoxModel::describeFixedProperties( Sequence< Property >& _rProps ) const
{
	BEGIN_DESCRIBE_PROPERTIES( 6, OBoundControlModel )
		DECL_PROP1(TABINDEX,			sal_Int16,					BOUND);
		DECL_PROP1(LISTSOURCETYPE,		ListSourceType, BOUND);
		DECL_PROP1(LISTSOURCE,			::rtl::OUString,			BOUND);
		DECL_BOOL_PROP1(EMPTY_IS_NULL,								BOUND);
		DECL_PROP1(DEFAULT_TEXT,		::rtl::OUString,			BOUND);
        DECL_PROP1(STRINGITEMLIST,      Sequence< ::rtl::OUString >,BOUND);
	END_DESCRIBE_PROPERTIES();
}

//------------------------------------------------------------------------------
void OComboBoxModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const
{
    OBoundControlModel::describeAggregateProperties( _rAggregateProps );

    // superseded properties:
    RemoveProperty( _rAggregateProps, PROPERTY_STRINGITEMLIST );
}

//------------------------------------------------------------------------------
::rtl::OUString SAL_CALL OComboBoxModel::getServiceName() throw(RuntimeException)
{
	return FRM_COMPONENT_COMBOBOX;	// old (non-sun) name for compatibility !
}

//------------------------------------------------------------------------------
void SAL_CALL OComboBoxModel::write(const Reference<stario::XObjectOutputStream>& _rxOutStream)
		throw(stario::IOException, RuntimeException)
{
	OBoundControlModel::write(_rxOutStream);

	// Version
	// Version 0x0002:	EmptyIsNull
	// Version 0x0003:	ListSource->Seq
	// Version 0x0004:	DefaultText
	// Version 0x0005:	HelpText
	_rxOutStream->writeShort(0x0006);

	// Maskierung fuer any
	sal_uInt16 nAnyMask = 0;
	if (m_aBoundColumn.getValueType().getTypeClass() == TypeClass_SHORT)
		nAnyMask |= BOUNDCOLUMN;
	_rxOutStream << nAnyMask;

	StringSequence aListSourceSeq(&m_aListSource, 1);
	_rxOutStream << aListSourceSeq;
	_rxOutStream << (sal_Int16)m_eListSourceType;

	if ((nAnyMask & BOUNDCOLUMN) == BOUNDCOLUMN)
	{
		sal_Int16 nBoundColumn = 0;
		m_aBoundColumn >>= nBoundColumn;
		_rxOutStream << nBoundColumn;
	}

	_rxOutStream << (sal_Bool)m_bEmptyIsNull;
	_rxOutStream << m_aDefaultText;
	writeHelpTextCompatibly(_rxOutStream);

	// from version 0x0006 : common properties
	writeCommonProperties(_rxOutStream);
}

//------------------------------------------------------------------------------
void SAL_CALL OComboBoxModel::read(const Reference<stario::XObjectInputStream>& _rxInStream) throw(stario::IOException, RuntimeException)
{
	OBoundControlModel::read(_rxInStream);
	::osl::MutexGuard aGuard(m_aMutex);

    // since we are "overwriting" the StringItemList of our aggregate (means we have
    // an own place to store the value, instead of relying on our aggregate storing it),
    // we need to respect what the aggregate just read for the StringItemList property.
    try
    {
        if ( m_xAggregateSet.is() )
            setNewStringItemList( m_xAggregateSet->getPropertyValue( PROPERTY_STRINGITEMLIST ) );
    }
    catch( const Exception& )
    {
    	OSL_ENSURE( sal_False, "OComboBoxModel::read: caught an exception while examining the aggregate's string item list!" );
    }

	// Version
	sal_uInt16 nVersion = _rxInStream->readShort();
	DBG_ASSERT(nVersion > 0, "OComboBoxModel::read : version 0 ? this should never have been written !");

	if (nVersion > 0x0006)
	{
		DBG_ERROR("OComboBoxModel::read : invalid (means unknown) version !");
		m_aListSource = ::rtl::OUString();
		m_aBoundColumn <<= (sal_Int16)0;
		m_aDefaultText = ::rtl::OUString();
		m_eListSourceType = ListSourceType_TABLE;
		m_bEmptyIsNull = sal_True;
		defaultCommonProperties();
		return;
	}

	// Maskierung fuer any
	sal_uInt16 nAnyMask;
	_rxInStream >> nAnyMask;

	// ListSource
	if (nVersion < 0x0003)
	{
		::rtl::OUString sListSource;
		_rxInStream >> m_aListSource;
	}
	else // nVersion == 4
	{
		m_aListSource = ::rtl::OUString();
		StringSequence aListSource;
		_rxInStream >> aListSource;
		const ::rtl::OUString* pToken = aListSource.getConstArray();
		sal_Int32 nLen = aListSource.getLength();
		for (sal_Int32 i = 0; i < nLen; ++i, ++pToken)
			m_aListSource += *pToken;
	}

	sal_Int16 nListSourceType;
	_rxInStream >> nListSourceType;
	m_eListSourceType = (ListSourceType)nListSourceType;

	if ((nAnyMask & BOUNDCOLUMN) == BOUNDCOLUMN)
	{
		sal_Int16 nValue;
		_rxInStream >> nValue;
		m_aBoundColumn <<= nValue;
	}

	if (nVersion > 0x0001)
	{
		sal_Bool bNull;
		_rxInStream >> bNull;
		m_bEmptyIsNull = bNull;
	}

	if (nVersion > 0x0003)	// nVersion == 4
		_rxInStream >> m_aDefaultText;

    // Stringliste muss geleert werden, wenn eine Listenquelle gesetzt ist
	// dieses kann der Fall sein wenn im alive modus gespeichert wird
	if  (   m_aListSource.getLength()
        &&  !hasExternalListSource()
        )
	{
    	setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( StringSequence() ) );
	}

	if (nVersion > 0x0004)
		readHelpTextCompatibly(_rxInStream);

	if (nVersion > 0x0005)
		readCommonProperties(_rxInStream);

	// Nach dem Lesen die Defaultwerte anzeigen
	if ( getControlSource().getLength() )
	{
		// (not if we don't have a control source - the "State" property acts like it is persistent, then
		resetNoBroadcast();
	}
}

//------------------------------------------------------------------------------
void OComboBoxModel::loadData()
{
	DBG_ASSERT(m_eListSourceType != ListSourceType_VALUELIST, "OComboBoxModel::loadData : do not call for a value list !");
    DBG_ASSERT( !hasExternalListSource(), "OComboBoxModel::loadData: cannot load from DB when I have an external list source!" );

    if ( hasExternalListSource() )
        return;

	// Connection holen
	Reference<XRowSet> xForm(m_xCursor, UNO_QUERY);
	if (!xForm.is())
		return;
	Reference<XConnection> xConnection = getConnection(xForm);
	if (!xConnection.is())
		return;

	Reference<XServiceInfo> xServiceInfo(xConnection, UNO_QUERY);
	if (!xServiceInfo.is() || !xServiceInfo->supportsService(SRV_SDB_CONNECTION))
	{
		DBG_ERROR("OComboBoxModel::loadData : invalid connection !");
		return;
	}

    if (!m_aListSource.getLength() || m_eListSourceType == ListSourceType_VALUELIST)
		return;

    ::utl::SharedUNOComponent< XResultSet > xListCursor;
	try
	{
        m_aListRowSet.setConnection( xConnection );

        bool bExecuteRowSet( false );
		switch (m_eListSourceType)
		{
			case ListSourceType_TABLEFIELDS:
				// don't work with a statement here, the fields will be collected below
				break;
			case ListSourceType_TABLE:
			{
				// does the bound field belong to the table ?
				// if we use an alias for the bound field, we won't find it
				// in that case we use the first field of the table

				Reference<XNameAccess> xFieldsByName = getTableFields(xConnection, m_aListSource);
				Reference<XIndexAccess> xFieldsByIndex(xFieldsByName, UNO_QUERY);

				::rtl::OUString aFieldName;
				if ( xFieldsByName.is() && xFieldsByName->hasByName( getControlSource() ) )
				{
					aFieldName = getControlSource();
				}
				else
				{
					// otherwise look for the alias
					Reference<XSQLQueryComposerFactory> xFactory(xConnection, UNO_QUERY);
					if (!xFactory.is())
						break;

					Reference<XSQLQueryComposer> xComposer = xFactory->createQueryComposer();
					try
					{
						Reference<XPropertySet> xFormAsSet(xForm, UNO_QUERY);
						::rtl::OUString aStatement;
						xFormAsSet->getPropertyValue(PROPERTY_ACTIVECOMMAND) >>= aStatement;
						xComposer->setQuery(aStatement);
					}
					catch(Exception&)
					{
						disposeComponent(xComposer);
						break;
					}

					// search the field
					Reference< XColumnsSupplier > xSupplyFields(xComposer, UNO_QUERY);
					DBG_ASSERT(xSupplyFields.is(), "OComboBoxModel::loadData : invalid query composer !");

					Reference< XNameAccess > xFieldNames = xSupplyFields->getColumns();
					if ( xFieldNames->hasByName( getControlSource() ) )
					{
                        Reference< XPropertySet > xComposerFieldAsSet;
                        xFieldNames->getByName( getControlSource() ) >>= xComposerFieldAsSet;
						if (hasProperty(PROPERTY_FIELDSOURCE, xComposerFieldAsSet))
							xComposerFieldAsSet->getPropertyValue(PROPERTY_FIELDSOURCE) >>= aFieldName;
					}

					disposeComponent(xComposer);
				}

				if (!aFieldName.getLength())
					break;

				Reference<XDatabaseMetaData> xMeta = xConnection->getMetaData();
				OSL_ENSURE(xMeta.is(),"No database meta data!");
				if ( xMeta.is() )
				{
					::rtl::OUString aQuote = xMeta->getIdentifierQuoteString();

                    ::rtl::OUString sCatalog, sSchema, sTable;
	                qualifiedNameComponents( xMeta, m_aListSource, sCatalog, sSchema, sTable, eInDataManipulation );

                    ::rtl::OUStringBuffer aStatement;
                    aStatement.appendAscii( "SELECT DISTINCT " );
                    aStatement.append     ( quoteName( aQuote, aFieldName ) );
                    aStatement.appendAscii( " FROM " );
                    aStatement.append     ( composeTableNameForSelect( xConnection, sCatalog, sSchema, sTable ) );

                    m_aListRowSet.setEscapeProcessing( sal_False );
                    m_aListRowSet.setCommand( aStatement.makeStringAndClear() );
                    bExecuteRowSet = true;
				}
			}	break;
			case ListSourceType_QUERY:
			{
                m_aListRowSet.setCommandFromQuery( m_aListSource );
                bExecuteRowSet = true;
			}
            break;

			default:
			{
                m_aListRowSet.setEscapeProcessing( ListSourceType_SQLPASSTHROUGH != m_eListSourceType );
                m_aListRowSet.setCommand( m_aListSource );
                bExecuteRowSet = true;
			}
		}

        if ( bExecuteRowSet )
        {
            if ( !m_aListRowSet.isDirty() )
            {
                // if none of the settings of the row set changed, compared to the last
                // invocation of loadData, then don't re-fill the list. Instead, assume
                // the list entries are the same.
                return;
            }
            xListCursor.reset( m_aListRowSet.execute() );
        }
	}
	catch(SQLException& eSQL)
	{
		onError(eSQL, FRM_RES_STRING(RID_BASELISTBOX_ERROR_FILLLIST));
		return;
	}
	catch( const Exception& )
	{
        DBG_UNHANDLED_EXCEPTION();
		return;
	}

	vector< ::rtl::OUString >	aStringList;
	aStringList.reserve(16);
	try
	{
        OSL_ENSURE( xListCursor.is() || ( ListSourceType_TABLEFIELDS == m_eListSourceType ),
            "OComboBoxModel::loadData: logic error!" );
        if ( !xListCursor.is() && ( ListSourceType_TABLEFIELDS != m_eListSourceType ) )
		    return;

		switch (m_eListSourceType)
		{
			case ListSourceType_SQL:
			case ListSourceType_SQLPASSTHROUGH:
			case ListSourceType_TABLE:
			case ListSourceType_QUERY:
			{
				// die XDatabaseVAriant der ersten Spalte
				Reference<XColumnsSupplier> xSupplyCols(xListCursor, UNO_QUERY);
				DBG_ASSERT(xSupplyCols.is(), "OComboBoxModel::loadData : cursor supports the row set service but is no column supplier?!");
				Reference<XIndexAccess> xColumns;
				if (xSupplyCols.is())
				{
					xColumns = Reference<XIndexAccess>(xSupplyCols->getColumns(), UNO_QUERY);
					DBG_ASSERT(xColumns.is(), "OComboBoxModel::loadData : no columns supplied by the row set !");
				}
				Reference< XPropertySet > xDataField;
				if ( xColumns.is() )
					xColumns->getByIndex(0) >>= xDataField;
				if ( !xDataField.is() )
					return;

                ::dbtools::FormattedColumnValue aValueFormatter( getContext(), xForm, xDataField );

				// Listen fuellen
				sal_Int16 i = 0;
				// per definitionem the list cursor is positioned _before_ the first row at the moment
				while (xListCursor->next() && (i++<SHRT_MAX)) // max anzahl eintraege
				{
                    aStringList.push_back( aValueFormatter.getFormattedValue() );
				}
			}
			break;
			case ListSourceType_TABLEFIELDS:
			{
				Reference<XNameAccess> xFieldNames = getTableFields(xConnection, m_aListSource);
				if (xFieldNames.is())
				{
					StringSequence seqNames = xFieldNames->getElementNames();
					sal_Int32 nFieldsCount = seqNames.getLength();
					const ::rtl::OUString* pustrNames = seqNames.getConstArray();

					for (sal_Int32 k=0; k<nFieldsCount; ++k)
						aStringList.push_back(pustrNames[k]);
				}
			}
			break;
            default:
                OSL_ENSURE( false, "OComboBoxModel::loadData: unreachable!" );
                break;
		}
	}
	catch(SQLException& eSQL)
	{
		onError(eSQL, FRM_RES_STRING(RID_BASELISTBOX_ERROR_FILLLIST));
		return;
	}
	catch( const Exception& )
	{
		DBG_UNHANDLED_EXCEPTION();
		return;
	}

		// String-Sequence fuer ListBox erzeugen
	StringSequence aStringSeq(aStringList.size());
	::rtl::OUString* pStringAry = aStringSeq.getArray();
	for (sal_Int32 i = 0; i<aStringSeq.getLength(); ++i)
		pStringAry[i] = aStringList[i];

	// String-Sequence an ListBox setzen
	setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( aStringSeq ) );
}

//------------------------------------------------------------------------------
void OComboBoxModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm )
{
	Reference<XPropertySet> xField = getField();
	if ( xField.is() )
        m_pValueFormatter.reset( new ::dbtools::FormattedColumnValue( getContext(), Reference< XRowSet >( _rxForm, UNO_QUERY ), xField ) );
    getPropertyValue( PROPERTY_STRINGITEMLIST ) >>= m_aDesignModeStringItems;

	// Daten nur laden, wenn eine Listenquelle angegeben wurde
	if ( m_aListSource.getLength() && m_xCursor.is() && !hasExternalListSource() )
		loadData();
}

//------------------------------------------------------------------------------
void OComboBoxModel::onDisconnectedDbColumn()
{
    m_pValueFormatter.reset();

	// reset the string item list
    if ( !hasExternalListSource() )
        setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( m_aDesignModeStringItems ) );
}

//------------------------------------------------------------------------------
void SAL_CALL OComboBoxModel::reloaded( const EventObject& aEvent ) throw(RuntimeException)
{
	OBoundControlModel::reloaded(aEvent);

	// reload data if we have a list source
	if ( m_aListSource.getLength() && m_xCursor.is() && !hasExternalListSource() )
		loadData();
}

//-----------------------------------------------------------------------------
sal_Bool OComboBoxModel::commitControlValueToDbColumn( bool _bPostReset )
{
	::rtl::OUString aNewValue;
	m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) >>= aNewValue;
	sal_Bool bModified = ( aNewValue != m_aSaveValue );

    if ( bModified )
	{
		if (!aNewValue.getLength() && !isRequired() && m_bEmptyIsNull)
			m_xColumnUpdate->updateNull();
		else
		{
			try
			{
                OSL_PRECOND( m_pValueFormatter.get(), "OComboBoxModel::commitControlValueToDbColumn: no value formatter!" );
                if ( m_pValueFormatter.get() )
                {
                    if ( !m_pValueFormatter->setFormattedValue( aNewValue ) )
                        return sal_False;
                }
				else
					m_xColumnUpdate->updateString( aNewValue );
			}
			catch ( const Exception& )
			{
				return sal_False;
			}
		}
		m_aSaveValue = aNewValue;
	}

	// add the new value to the list
	sal_Bool bAddToList = bModified && !_bPostReset;
    	// (only if this is not the "commit" triggered by a "reset")

    if ( bAddToList )
    {
        StringSequence aStringItemList;
        if ( getPropertyValue( PROPERTY_STRINGITEMLIST ) >>= aStringItemList )
	    {
		    const ::rtl::OUString* pStringItems = aStringItemList.getConstArray();
		    sal_Int32 i;
		    for (i=0; i<aStringItemList.getLength(); ++i, ++pStringItems)
		    {
			    if (pStringItems->equals(aNewValue))
				    break;
		    }

		    // not found -> add
		    if (i >= aStringItemList.getLength())
		    {
			    sal_Int32 nOldLen = aStringItemList.getLength();
			    aStringItemList.realloc( nOldLen + 1 );
			    aStringItemList.getArray()[ nOldLen ] = aNewValue;

                setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( aStringItemList ) );
		    }
        }
	}

	return sal_True;
}

// XPropertiesChangeListener
//------------------------------------------------------------------------------
Any OComboBoxModel::translateDbColumnToControlValue()
{
    OSL_PRECOND( m_pValueFormatter.get(), "OComboBoxModel::translateDbColumnToControlValue: no value formatter!" );
    if ( m_pValueFormatter.get() )
	    m_aSaveValue = m_pValueFormatter->getFormattedValue();
    else
        m_aSaveValue = ::rtl::OUString();
    return makeAny( m_aSaveValue );
}

//------------------------------------------------------------------------------
Any OComboBoxModel::getDefaultForReset() const
{
    return makeAny( m_aDefaultText );
}

//------------------------------------------------------------------------------
sal_Bool OComboBoxModel::approveValueBinding( const Reference< XValueBinding >& _rxBinding )
{
    OSL_PRECOND( _rxBinding.is(), "OComboBoxModel::approveValueBinding: invalid binding!" );

    // only strings are accepted for simplicity
    return  _rxBinding.is()
        &&  _rxBinding->supportsType( ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ) );
}

//--------------------------------------------------------------------
void OComboBoxModel::stringItemListChanged( )
{
    if ( m_xAggregateSet.is() )
        m_xAggregateSet->setPropertyValue( PROPERTY_STRINGITEMLIST, makeAny( getStringItemList() ) );
}

//--------------------------------------------------------------------
void OComboBoxModel::connectedExternalListSource( )
{
    // TODO?
}

//--------------------------------------------------------------------
void OComboBoxModel::disconnectedExternalListSource( )
{
    // TODO?
}

//--------------------------------------------------------------------
void SAL_CALL OComboBoxModel::disposing( const EventObject& _rSource ) throw ( RuntimeException )
{
    if ( !OEntryListHelper::handleDisposing( _rSource ) )
        OBoundControlModel::disposing( _rSource );
}

//========================================================================
//= OComboBoxControl
//========================================================================

//------------------------------------------------------------------
InterfaceRef SAL_CALL OComboBoxControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException)
{
	return *(new OComboBoxControl(_rxFactory));
}

//------------------------------------------------------------------------------
OComboBoxControl::OComboBoxControl(const Reference<XMultiServiceFactory>& _rxFactory)
	:OBoundControl(_rxFactory, VCL_CONTROL_COMBOBOX)
{
}

//------------------------------------------------------------------------------
StringSequence SAL_CALL OComboBoxControl::getSupportedServiceNames() throw(RuntimeException)
{
	StringSequence aSupported = OBoundControl::getSupportedServiceNames();
	aSupported.realloc(aSupported.getLength() + 1);

	::rtl::OUString* pArray = aSupported.getArray();
	pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_COMBOBOX;
	return aSupported;
}

//.........................................................................
}
//.........................................................................
2007-11-21 16:15:47 +00:00
Jens-Heiner Rechtien
d087bb2f16 INTEGRATION: CWS dba24b (1.36.38); FILE MERGED
2007/09/06 08:02:25 fs 1.36.38.2: fix #i76024# for combo boxes, too
2007/09/04 21:34:57 fs 1.36.38.1: #i73237# use the new FormatterColumnValue class, which encapsulates what we previously did manually (format column values according to the column's format)
2007-11-01 13:54:04 +00:00
Oliver Bolte
4970362120 INTEGRATION: CWS hb02 (1.34.30); FILE MERGED
2007/02/06 10:29:54 hbrinkm 1.34.30.3: RESYNC: (1.34-1.35); FILE MERGED
2007/02/01 12:09:35 fs 1.34.30.2: #i74051# split describeFixedProperties in describeFixedProperties and describeAggregateProperties
2007/01/31 10:55:24 fs 1.34.30.1: changed handling of properties in the course of #i74051#
2007-03-09 12:21:38 +00:00
Vladimir Glazounov
346da21f24 INTEGRATION: CWS dba22b (1.34.32); FILE MERGED
2006/12/04 14:24:37 fs 1.34.32.1: during #i69405#: getField().is() -> hasField()
2007-01-15 12:46:07 +00:00
Oliver Bolte
5bd462a077 INTEGRATION: CWS pchfix02 (1.33.16); FILE MERGED
2006/09/01 17:27:33 kaib 1.33.16.1: #i68856# Added header markers and pch files
2006-09-16 22:47:34 +00:00
Kurt Zenker
f0540fdb8d INTEGRATION: CWS warningfixes02 (1.31.2); FILE MERGED
2006/06/30 12:17:35 sb 1.31.2.1: #i66577# Made the code compile (warning-free) on a unxlngi6.pro GCC 4.1.1 Linux box.
2006-07-19 15:43:16 +00:00
Oliver Bolte
c01cfa303a INTEGRATION: CWS qiq (1.30.24); FILE MERGED
2006/06/27 10:54:56 fs 1.30.24.2: RESYNC: (1.30-1.31); FILE MERGED
2006/05/23 13:57:30 fs 1.30.24.1: some refactoring of compose/quoteTableName and friends, in preparation of #i51143#
2006-07-10 13:46:21 +00:00
Jens-Heiner Rechtien
2b3231533f INTEGRATION: CWS warnings01 (1.29.68); FILE MERGED
2006/04/07 17:42:04 sb 1.29.68.2: RESYNC: (1.29-1.30); FILE MERGED
2006/03/14 15:20:25 fs 1.29.68.1: #i57457# warning-free code
2006-06-19 11:46:18 +00:00
Vladimir Glazounov
7ffbd1205a INTEGRATION: CWS pbrwuno (1.29.14); FILE MERGED
2005/10/17 12:19:58 fs 1.29.14.1: removed some obsolete includes
2006-03-14 09:57:45 +00:00
Rüdiger Timm
614df53d60 INTEGRATION: CWS ooo19126 (1.28.68); FILE MERGED
2005/09/05 13:50:14 rt 1.28.68.1: #i54170# Change license header: remove SISSL
2005-09-08 21:35:19 +00:00
Vladimir Glazounov
dcf1eb9701 INTEGRATION: CWS dr33 (1.27.26); FILE MERGED
2005/02/14 16:43:57 dr 1.27.26.1: #i42367# remove non-ASCII characters from C++ sources
2005-02-16 16:49:44 +00:00
Oliver Bolte
a4afe58f4a INTEGRATION: CWS eforms2 (1.24.24); FILE MERGED
2004/08/16 17:08:27 dvo 1.24.24.3: RESYNC: (1.25-1.26); FILE MERGED
2004/07/27 14:12:22 fs 1.24.24.2: RESYNC: (1.24-1.25); FILE MERGED
2004/07/19 15:18:40 fs 1.24.24.1: during #114856#: properly determine who instigated a setControlValue, so that we can propagate the values to appropriate interested parties / while we were here: make some attributes private ...
2004-11-16 09:35:57 +00:00
Jens-Heiner Rechtien
20524789e6 INTEGRATION: CWS insight01 (1.22.22); FILE MERGED
2004/07/23 12:28:34 oj 1.22.22.3: RESYNC: (1.24-1.25); FILE MERGED
2004/05/28 19:56:46 oj 1.22.22.2: RESYNC: (1.22-1.24); FILE MERGED
2004/04/23 06:21:36 oj 1.22.22.1: new switch to disable catalog and schema
2004-08-02 15:27:20 +00:00
Rüdiger Timm
7e24eb4f99 INTEGRATION: CWS dba13 (1.24.18); FILE MERGED
2004/06/25 06:43:53 fs 1.24.18.1: #i29021# proper cloning of the OEntryListHelper
2004-07-06 12:37:07 +00:00
Jens-Heiner Rechtien
12f6cdf722 INTEGRATION: CWS dba09 (1.22.34); FILE MERGED
2004/04/27 06:15:21 fs 1.22.34.3: RESYNC: (1.22-1.23); FILE MERGED
2004/03/19 08:25:33 fs 1.22.34.2: #i26715# when reading the binary format, care for 'overwritten' aggregate properties
2004/03/17 11:51:03 fs 1.22.34.1: #92831# at runtime, don't use 'stardiv.one.form.control.*' service names - translate when writing old (binary) format
2004-05-10 11:44:19 +00:00
Rüdiger Timm
188f26cb86 INTEGRATION: CWS frmvalidation (1.22.26); FILE MERGED
2004/03/12 12:10:32 fs 1.22.26.2: #i21506# new services for validating form control values
2004/03/11 16:46:12 fs 1.22.26.1: mass checkin
- #i25106# core for validating form controls via external XValidator instances
- moved the services/interfaces related to binding form controls to external
  value suppliers into css.form.binding (out of drafts.css.form/component)
2004-04-02 09:49:48 +00:00
Kurt Zenker
6a98e7ac88 INTEGRATION: CWS frmcontrols01 (1.20.2); FILE MERGED
2003/11/04 12:23:06 fs 1.20.2.1: whitespacing
2003-12-11 11:28:20 +00:00
Rüdiger Timm
e17bde3792 INTEGRATION: CWS geordi2q10 (1.20.10); FILE MERGED
2003/11/28 11:15:28 rt 1.20.10.1: #111934#: join CWS dba01pp1
2003-12-01 09:15:25 +00:00
Oliver Bolte
bed58db4c0 INTEGRATION: CWS formcelllinkage (1.19.38); FILE MERGED
2003/10/01 09:18:19 fs 1.19.38.1: #i18994# merging the changes from the CWS fs002
2003-10-21 07:55:36 +00:00
Vladimir Glazounov
cc31c2cc60 INTEGRATION: CWS dba05 (1.18.50); FILE MERGED
2003/05/07 07:59:13 oj 1.18.50.1: #i13806# change the property boundfield to be bound
2003-05-19 12:07:44 +00:00
Frank Schönheit
b0c4be1488 #105577# properly (hopefully :) implemented XClonable 2002-12-02 08:56:36 +00:00
Ocke Janssen
4cd221a0fa #i3289# correct table name quoting so that in every situation the correct schema, catalog is used 2002-10-07 12:09:48 +00:00
Frank Schönheit
ea97f5ed90 #99627# Text not transient 2002-06-05 08:53:34 +00:00
Frank Schönheit
fc54740f49 #97083# correctly register the model implementations 2002-03-04 13:49:12 +00:00
Frank Schönheit
21aa08b7d7 ::disposing: call the OErrorBroadcaster::disposing, too 2001-08-31 13:22:44 +00:00
Frank Schönheit
e5211a21c6 #65293# disambiguate rBHelper for the Linux compiler 2001-08-30 13:02:48 +00:00
Frank Schönheit
9ee19f4af8 #74241# don't implement the XSQLErrorBroadcaster directly - use OErrorBroadcaster as base class 2001-08-28 13:31:10 +00:00
th
a853bb9278 rtl-string-changes 2001-05-11 08:33:55 +00:00
Frank Schönheit
fb3f0c63ca #85582# HelpText property now in the aggregated control models 2001-04-02 09:28:06 +00:00
Frank Schönheit
31c596b488 use tryPropertyValueEnum for the ListSourceType property 2001-02-27 16:03:58 +00:00
Frank Schönheit
55c2d49341 _commit: add the entry to the list only in case it was modified 2001-01-25 11:01:07 +00:00
Frank Schönheit
46449aa291 #82950# #81727# remember the string item list when loading, reset it when unloading 2001-01-25 10:18:37 +00:00
Ocke Janssen
cd3aa0771a merge 2000-12-06 09:24:23 +00:00
Ocke Janssen
81c8196ae8 namespace changes 2000-11-23 07:48:15 +00:00
Oliver Bolte
72d1ad64ef staruno, starlang and starbeans not identified by linux compiler 2000-10-24 12:07:20 +00:00
Ocke Janssen
37c6e6b103 add two header files 2000-10-19 12:31:29 +00:00
Frank Schönheit
cdbcbba768 migrated from unotools to comphelper 2000-10-19 10:52:20 +00:00
Jens-Heiner Rechtien
bf4154eb53 initial import 2000-09-18 15:33:13 +00:00