Files
libreoffice/forms/source/inc/FormComponent.hxx
Kurt Zenker f69c97860c CWS-TOOLING: integrate CWS dba32b
2009-06-03 14:58:08 +0200 fs  r272581 : #i102439#
2009-05-29 13:56:18 +0200 fs  r272456 : remove the sub form when the 'add subform' setting changes from <true/> to <false/>, not only its controls
2009-05-29 13:19:27 +0200 fs  r272454 : display '(Default)' instead of an empty string when a control has the default font
2009-05-28 20:49:18 +0200 fs  r272428 : #i98162# getFirstSelectedValue: do not return reference to a temporary
2009-05-27 15:30:22 +0200 msc  r272353 : #102303#
2009-05-26 13:03:06 +0200 fs  r272295 : spelling
2009-05-26 12:59:54 +0200 fs  r272294 : merge m48 version to get latest cygwin related fixes
2009-05-25 14:02:06 +0200 fs  r272239 : remove references to local files, needed for debugging sessions only
2009-05-25 14:01:16 +0200 fs  r272238 : #i102021# ensure members such as bNumberFormat are initialized before actually returning them
2009-05-25 13:10:20 +0200 fs  r272236 : #i10000# reset ENABLE_EVOAB2
2009-05-22 06:44:45 +0200 oj  r272167 : #i99104# add import handler for calc-sett
2009-05-22 06:42:27 +0200 oj  r272166 : #i99104# impl NullDate as member
2009-05-22 06:36:22 +0200 oj  r272165 : #i99104# handle nulldate from parent model
2009-05-22 06:33:13 +0200 oj  r272164 : #i99104# export and import calculation-settings and nulldate
2009-05-22 06:27:50 +0200 oj  r272163 : #i99104# export and import calculation-settings and nulldate
2009-05-20 13:29:58 +0200 oj  r272118 : #i99911# handle invalid name
2009-05-20 13:28:49 +0200 oj  r272117 : #i101261# handle different rowsets
2009-05-20 11:29:55 +0200 msc  r272111 : #i100000#
2009-05-20 11:28:27 +0200 msc  r272110 : merge in change from dba32a
2009-05-20 11:27:38 +0200 msc  r272109 : #102082# CTRL + C does not work
2009-05-20 09:43:36 +0200 oj  r272106 : clean up includes
2009-05-20 09:32:15 +0200 oj  r272105 : #i99060# merge error resovled now VERTICAL_ALIGN is in both stmt
2009-05-20 08:37:21 +0200 msc  r272104 : add workaround for issue #102010#
2009-05-20 08:10:12 +0200 oj  r272103 : #i99104# use numberformatkey
2009-05-20 08:07:02 +0200 oj  r272102 : #i99104# use column info from rowset
2009-05-20 08:04:43 +0200 oj  r272101 : #i102032# use a special column type where prec and scale are the values currently set at the column
2009-05-20 08:03:04 +0200 oj  r272100 : #i102032# correct type info, we have to use SQL defined type names
2009-05-19 10:27:02 +0200 oj  r272061 : #i99104# export null-date
2009-05-19 08:26:53 +0200 oj  r272056 : #i99104# export null-date
2009-05-18 13:15:10 +0200 msc  r272014 : add issue #102019#
2009-05-18 11:33:07 +0200 msc  r272005 : add issue #102019#
2009-05-18 08:59:45 +0200 msc  r271996 : add workaroud for issue #102010#
2009-05-15 10:21:24 +0200 msc  r271929 : #101944#
2009-05-11 21:18:30 +0200 fs  r271792 : #i99914#
2009-05-08 13:52:06 +0200 oj  r271715 : #i96423# remember column span
2009-05-08 11:26:19 +0200 oj  r271708 : #i98605# impl new scale mode
2009-05-08 10:33:35 +0200 fs  r271706 : SendUserCall: only call into the shape notification routine for UserCall types where this is necessary (performance issue)
2009-05-07 20:52:44 +0200 fs  r271698 : outsource ShapeProperty from shapepropertynotifier.hxx
2009-05-07 20:43:33 +0200 fs  r271697 : #i99056# use notifyShapePropertyChange, instead of getShapePropertyChangeNotifier - the latter throws if no shape exists, yet
2009-05-07 20:33:58 +0200 fs  r271696 : #i99056# +notifyShapePropertyChange: allow notifying chages without checking whether there actually already exists an SvxShape
2009-05-07 16:22:15 +0200 fs  r271679 : #i10000# cygwin needs quotes around the classpath
2009-05-07 16:21:37 +0200 fs  r271678 : #i10000# cygwin needs quotes around the classpath
2009-05-07 16:01:11 +0200 oj  r271677 : #i99914# notify parent handler
2009-05-07 15:54:54 +0200 fs  r271676 : #i10000# cygwin needs some quoting
2009-05-07 14:49:48 +0200 oj  r271672 : #i99277# quote alias name
2009-05-07 14:48:12 +0200 oj  r271671 : #i92538# add ~ in front of type
2009-05-07 14:37:13 +0200 oj  r271667 : #i99118# change type from char to varchar
2009-05-07 14:36:23 +0200 oj  r271666 : #i99118# clear dest columns when changing to create new table
2009-05-07 13:35:32 +0200 oj  r271657 : #i94467# handle type 0 as double as well
2009-05-07 13:20:49 +0200 oj  r271655 : i99743# setNull when varchar is no text
2009-05-07 12:58:06 +0200 fs  r271651 : initialize the SdrObject's property change notifier after the ctor, if necessary
2009-05-07 11:47:18 +0200 fs  r271647 : #i10000#
2009-05-07 10:57:16 +0200 fs  r271639 : OPropertyBrowserController::propertyChange: care for the current property state, too, and properly forward it to the UI
2009-05-07 10:18:14 +0200 fs  r271636 : onNewComponent: do not ask the map for grid columns, it will throw
2009-05-07 10:09:55 +0200 fs  r271634 : #i101623#
2009-05-07 09:53:44 +0200 fs  r271631 : #i101622#
2009-05-06 21:55:53 +0200 fs  r271615 : #i10000#
2009-05-06 21:10:42 +0200 fs  r271611 : #i10000#
2009-05-06 13:11:48 +0200 fs  r271583 : #i10000#
2009-05-05 22:29:31 +0200 fs  r271559 : proper assertion message
2009-05-05 22:29:03 +0200 fs  r271558 : diagnostics
2009-05-05 22:16:16 +0200 fs  r271557 : #i10000#
2009-05-05 13:50:32 +0200 fs  r271513 : #i10000#
2009-05-05 10:21:50 +0200 fs  r271503 : #i10000#
2009-05-05 09:30:26 +0200 fs  r271501 : why did those survive the rebase -C step?
2009-05-05 09:18:12 +0200 fs  r271500 : #i10000#
2009-05-04 17:08:17 +0200 fs  r271475 : CWS-TOOLING: rebase CWS dba32b to trunk@271427 (milestone: DEV300:m47)
2009-05-04 14:51:26 +0200 fs  r271456 : line ends
2009-04-30 15:55:27 +0200 fs  r271418 : NewURL -> PublicConnectionURL
2009-04-22 21:18:34 +0200 fs  r271141 : #i100944#
2009-04-22 09:12:26 +0200 oj  r271071 : #i101261# little code change
2009-04-22 09:11:43 +0200 oj  r271070 : #i101261# only ask for parameters which aren't set before
2009-04-22 09:11:25 +0200 oj  r271069 : #i101261# new grabage container for nodes
2009-04-22 09:11:02 +0200 oj  r271068 : #i101261# new grabage container for nodes
2009-04-22 09:10:44 +0200 oj  r271067 : #i101261# new grabage container for nodes
2009-04-22 09:10:21 +0200 oj  r271066 : #i101261# only ask for parameters which aren't set before
2009-04-22 09:08:24 +0200 oj  r271065 : #i101261# only ask for parameters which aren't set before
2009-04-22 09:07:25 +0200 oj  r271064 : #i101261# only ask for parameters which aren't set before
2009-04-22 08:49:07 +0200 oj  r271062 : #i77501# preview only when needed
2009-04-22 08:45:44 +0200 oj  r271061 : #i101261# new prop max rows
2009-04-22 08:44:18 +0200 oj  r271060 : #i101261# create dataprovider earlier to avoid the wrong legend in chart
2009-04-22 08:42:48 +0200 oj  r271059 : #i101261# handle parameter
2009-04-17 21:00:23 +0200 fs  r270954 : #i98350#
2009-04-17 13:54:19 +0200 fs  r270942 : #i99565#
2009-04-17 13:51:34 +0200 fs  r270940 : #i101153# only localize the (potentially) localizable properties when there really is support at the control model
2009-04-17 11:43:14 +0200 fs  r270932 : removed superfluous include
2009-04-17 10:10:15 +0200 fs  r270926 : #i10000#
2009-04-17 10:02:36 +0200 fs  r270925 : #i10000#
2009-04-17 09:15:13 +0200 fs  r270918 : #i99056# some more refactoring of the recently introduced property change notification mechanism for UNO shapes
2009-04-17 09:14:56 +0200 fs  r270917 : #i99056# some more refactoring of the recently introduced property change notification mechanism for UNO shapes
2009-04-17 09:13:25 +0200 fs  r270915 : #i99056# some more refactoring of the recently introduced property change notification mechanism for UNO shapes
2009-04-17 08:30:34 +0200 fs  r270914 : removed unotools/servicehelper.hxx in favour of the (duplicated) comphelper/servicehelper.hxx
2009-04-16 21:05:25 +0200 fs  r270903 : #i10000#
2009-04-16 20:43:43 +0200 fs  r270902 : #i99056# shape notification outsourced to the SdrObject, this is what all other shape implementations (which only aggregate an SvxShape) have access to, too
2009-04-16 15:57:36 +0200 fs  r270891 : #i99056# make SetUnoControlModel virtual
2009-04-16 15:44:02 +0200 fs  r270890 : #i99056# let the ScShapeObj notify changes in its Anchor property
2009-04-16 15:36:47 +0200 fs  r270889 : #i99056# enable the sheet anchor type property, too
2009-04-16 15:33:45 +0200 fs  r270887 : #i99056# shape notification outsourced to the SdrObject, this is what all other shape implementations (which only aggregate an SvxShape) have access to, too
2009-04-15 14:53:13 +0200 fs  r270844 : #i10000#
2009-04-15 13:08:29 +0200 fs  r270836 : #i10000#
2009-04-15 12:28:14 +0200 fs  r270832 : #i10000#
2009-04-15 10:59:14 +0200 fs  r270827 : #i10000#
2009-04-15 09:41:08 +0200 oj  r270823 : fix issues found with findbugs and pmd
2009-04-14 21:08:04 +0200 fs  r270808 : #i99056# implement SheetAnchorType - now the only thing missing to enable it is the proper notification when it is modified
2009-04-14 17:09:00 +0200 fs  r270799 : #i99056# implement XServiceInfo for the ScShapeObj
2009-04-14 17:07:55 +0200 fs  r270798 : #i99056# implement TextAnchorType, partially implement SheetAnchorType
2009-04-14 15:54:05 +0200 fs  r270786 : #i99056# SwXShape: notify changes of the AnchorType property
2009-04-14 15:47:32 +0200 fs  r270785 : #i99056# deliver shapepropertynotifier.hxx
2009-04-14 15:46:54 +0200 fs  r270784 : diagnostics
2009-04-14 15:08:28 +0200 fs  r270781 : #i99056# outsourced the SvxShape's property change notification code into a dedicated class
2009-04-14 14:41:09 +0200 fs  r270773 : #i99056# outsourced the SvxShape's property change notification code into a dedicated class
2009-04-14 14:37:23 +0200 fs  r270772 : in dtor, remove the properties from the temporary component context
2009-04-14 14:36:34 +0200 fs  r270771 : getWeakUnoShape made const
2009-04-14 12:23:08 +0200 oj  r270757 : #i101064# add missing braces
2009-04-14 12:21:25 +0200 oj  r270756 : #i101065# add braces for gcc 4.3.2
2009-04-14 12:17:45 +0200 oj  r270755 : #i101059# add dep for manifest
2009-04-09 12:06:58 +0200 oj  r270686 : #i93100# use OptimalSize from control to get height
2009-04-08 09:56:55 +0200 oj  r270619 : #i92537# handle calculations in the select columns as well
2009-04-08 09:30:39 +0200 oj  r270615 : #i96657# throw error message when the key doesn't have any columns
2009-04-07 12:08:26 +0200 oj  r270592 : #i77501# impl preview of the executed report
2009-04-07 12:01:56 +0200 oj  r270591 : #i77501# impl preview of the executed report
2009-04-07 11:41:03 +0200 oj  r270590 : #i77501# impl preview of the executed report
2009-04-07 11:39:32 +0200 oj  r270589 : #i77501# impl preview of the executed report
2009-04-07 11:29:25 +0200 oj  r270588 : #i77501# convert dos to unix lineends
2009-04-07 11:28:23 +0200 oj  r270587 : #i77501# impl preview of the executed report
2009-04-07 11:16:50 +0200 oj  r270586 : #i77501# impl preview of the executed report
2009-04-07 11:16:00 +0200 oj  r270585 : #i77501# impl preview of the executed report
2009-04-07 11:15:44 +0200 oj  r270584 : #i77501# impl preview of the executed report
2009-04-07 11:15:28 +0200 oj  r270583 : #i77501# impl preview of the executed report
2009-04-07 11:15:04 +0200 oj  r270582 : #i77501# impl preview of the executed report
2009-04-06 15:38:54 +0200 fs  r270559 : merge changes from CWS dba32a herein
2009-04-03 15:56:16 +0200 fs  r270494 : ImpSvMEdit::Resize: do multiple iterations, if necessary
2009-04-03 14:35:49 +0200 fs  r270487 : #i10000#
2009-04-03 13:17:16 +0200 fs  r270476 : #i99056# display geometry information for controls, too
2009-04-03 13:16:37 +0200 fs  r270475 : #i99056# better ordering of the geometry properties
2009-04-03 13:16:07 +0200 fs  r270473 : #i99056# now that SvxShape supports property change listeners, forward add/remove requests to it
2009-04-03 13:13:18 +0200 fs  r270472 : #i99056# at SvxShape, allow for PropertyChangeListeners for Size/Position
2009-04-03 09:29:27 +0200 oj  r270456 : #i94571# use correct prop name
2009-04-03 09:14:54 +0200 fs  r270451 : merge changes from CWS dba32a herein
2009-04-02 17:00:51 +0200 fs  r270424 : better diagnostics
2009-04-02 16:35:19 +0200 fs  r270421 : diagnostics
2009-04-02 16:34:50 +0200 fs  r270420 : #i99056# mxUnoShape not accessible anymore, use impl_setUnoShape instead
2009-04-02 16:32:48 +0200 fs  r270419 : #i99056# make getUnoShape cheaper: keep the pointer to the SvxShape all the time, so there's no need to ask for it in getUnoShape. As a consequence, we will later be able to use the pointer in scenarious where performance (potentially) matters
2009-04-02 16:31:13 +0200 fs  r270417 : merge changes from CWS dba32a herein
2009-04-02 16:23:16 +0200 fs  r270414 : merge changes from CWS dba32a herein
2009-04-02 14:10:35 +0200 fs  r270405 : #i10000#
2009-04-02 14:06:26 +0200 fs  r270404 : merge changes from CWS dba32a herein
2009-04-02 14:03:03 +0200 fs  r270401 : #i10000#
2009-04-02 13:58:13 +0200 fs  r270400 : #i10000#
2009-04-02 12:59:44 +0200 fs  r270397 : merge changes from CWS dba32a herein
2009-04-02 12:46:30 +0200 fs  r270396 : #i99056# let the form page maintain a mapping between control models and control shapes
2009-04-02 12:44:07 +0200 fs  r270395 : merge changes from CWS dba32a herein
2009-04-02 12:42:06 +0200 fs  r270394 : merge changes from CWS dba32a herein
2009-04-02 12:35:20 +0200 fs  r270393 : #i10000# precompiled header
2009-04-02 12:05:31 +0200 fs  r270392 : merge changes from CWS dba32a herein
2009-04-02 12:00:42 +0200 fs  r270391 : merge changes from CWS dba32a herein
2009-04-02 11:47:26 +0200 fs  r270390 : merge changes from CWS dba32a herein
2009-04-02 11:39:15 +0200 oj  r270389 : #i94467# foxpro impl several new types
2009-04-02 11:35:58 +0200 fs  r270387 : merge changes from CWS dba32a herein
2009-04-01 14:10:51 +0200 fs  r270329 : merge changes from CWS dba32a herein
2009-03-31 17:29:50 +0200 fs  r270290 : merge changes from CWS dba32a herein
2009-03-30 14:53:56 +0200 fs  r270233 : #i100417# don't set grid column widths to 0, but to <void/>
2009-03-30 12:31:03 +0200 oj  r270213 : #i100552# wrong orb used
2009-03-30 12:19:20 +0200 oj  r270212 : #i98303# convertlike corrected to sal_Unicode
2009-03-30 11:58:25 +0200 fs  r270210 : merge changes from CWS dba32a herein
2009-03-30 11:38:16 +0200 oj  r270205 : remove duplicate code from merge
2009-03-30 11:02:27 +0200 fs  r270202 : merge changes from CWS dba32a herein
2009-03-30 11:02:19 +0200 fs  r270201 : merge changes from CWS dba32a herein
2009-03-30 10:31:26 +0200 oj  r270200 : #i100665# only throw exception and do not drop table
2009-03-30 09:36:24 +0200 fs  r270195 : assertion text
2009-03-28 20:21:58 +0100 fs  r270187 : #ii10000#
2009-03-28 20:19:54 +0100 fs  r270186 : removed unused help ids
2009-03-28 20:19:40 +0100 fs  r270185 : removed unused help ids
2009-03-28 20:19:10 +0100 fs  r270184 : #i100237# +DefaultState/XReset
2009-03-28 00:29:29 +0100 fs  r270177 : CWS-TOOLING: rebase CWS dba32b to trunk@270033 (milestone: DEV300:m45)
2009-03-27 22:56:46 +0100 fs  r270173 : #i100237# DEFAULT_CHECKED -> DEFAULT_STATE
2009-03-27 22:55:52 +0100 fs  r270172 : #i100237# DefaultState property for buttons, enabled only when Toggle=Yes
2009-03-27 22:54:15 +0100 fs  r270171 : #i100237# DEFAULT_CHECKED -> DEFAULT_STATE
2009-03-27 22:53:54 +0100 fs  r270170 : #i100237# introduce a DefaultState property for buttons, which implies buttongs supporting XReset, which needed some refactoring
2009-03-27 13:31:41 +0100 fs  r270152 : ignore output paths
2009-03-27 11:23:44 +0100 fs  r270139 : tuned behavior with respect to invalid keys/values
2009-03-27 09:57:14 +0100 fs  r270136 : don't allow Double.NaN
2009-03-27 09:56:16 +0100 fs  r270135 : talk about Double.NaN
2009-03-26 12:14:30 +0100 fs  r270067 : removed unused parameter
2009-03-26 12:14:02 +0100 fs  r270066 : removed widening conversion when checking keys
2009-03-26 09:17:34 +0100 fs  r270053 : separated the enumerator functionality into a dedicated interface, this way not burdening XMap with it
2009-03-26 09:17:11 +0100 fs  r270052 : separated the enumerator functionality into a dedicated interface, this way not burdening XMap with it
2009-03-26 09:16:49 +0100 fs  r270051 : separated the enumerator functionality into a dedicated interface, this way not burdening XMap with it
2009-03-25 21:55:20 +0100 fs  r270044 : #i100541# properly calculat bNeedScrollBox
2009-03-25 12:56:17 +0100 fs  r270019 : renamed the previously introduced error condition
2009-03-25 12:11:48 +0100 fs  r270015 : #i100095# when the error messages contain non-trivial details (SQLState/ErrorCode), then always display the 'Details' button
2009-03-25 12:10:05 +0100 fs  r270012 : renamed the previously introduced error condition
2009-03-25 12:01:04 +0100 fs  r270011 : #i100095# when no address book (or respective profile) can be found, then use a dedicated ErrorCondition
2009-03-25 10:29:07 +0100 fs  r270003 : add missing localization
2009-03-25 10:23:12 +0100 fs  r270001 : in preparation of #i1000095#:
rework the error handling, allow using css.sdb.ErrorCondition values, plus
allow propagating the nsresult
2009-03-25 10:21:55 +0100 fs  r270000 : in preparation of #i1000095#:
rework the error handling, allow using css.sdb.ErrorCondition values, plus
allow propagating the nsresult
2009-03-20 23:05:38 +0100 fs  r269829 : XMap::getSize removed
2009-03-20 23:05:19 +0100 fs  r269828 : changes as suggested by sb
2009-03-20 23:04:56 +0100 fs  r269827 : enhanced documentation
2009-03-20 15:31:40 +0100 fs  r269815 : changes as suggested by sb
2009-03-20 13:23:52 +0100 oj  r269804 : #i92538# correct the zorder that fixedtext is infront of control
2009-03-20 12:59:38 +0100 oj  r269801 : #i94571# paraadjust now supports BLOCK
2009-03-20 12:58:11 +0100 oj  r269800 : #i94571# export style with data style
2009-03-20 12:57:05 +0100 oj  r269799 : #i94571# text align is now paraadjust
2009-03-20 12:37:02 +0100 fs  r269797 : enum keys only accepted if they have the exact type, not if they have *any* enum type
2009-03-20 12:28:31 +0100 fs  r269794 : some changes requested by sb
2009-03-20 08:52:47 +0100 fs  r269780 : doc
2009-03-20 07:37:31 +0100 oj  r269779 : #i99913# only notifiy when values are different
2009-03-20 07:36:58 +0100 oj  r269778 : #i99913# add undoenv as listener at the dataprovider
2009-03-19 22:52:52 +0100 fs  r269771 : added comment
2009-03-19 22:40:06 +0100 fs  r269770 : +testEnumeration
2009-03-19 22:39:41 +0100 fs  r269769 : implemented enumeration, getKeySet, and getValues. Should be finished now.
2009-03-19 14:01:01 +0100 oj  r269743 : #i99913# reset the modified state when selecting an object
2009-03-19 12:19:54 +0100 lla  r269739 : #i72390# cleanups
2009-03-19 09:25:27 +0100 fs  r269727 : #i10000#
2009-03-18 23:37:02 +0100 fs  r269708 : extended checks for value type acceptance
2009-03-18 23:36:41 +0100 fs  r269707 : fixed value type checks
2009-03-18 14:59:56 +0100 fs  r269678 : initial complex test case for the new css.container.Map implementation
2009-03-18 14:59:24 +0100 fs  r269677 : verifyExpectedException moved to base class (in complexlib), and renamed to assureException for consistency
2009-03-18 14:58:35 +0100 fs  r269676 : removed unused imports
2009-03-18 14:58:03 +0100 fs  r269675 : first implementation of the new css.container.Map service (not completed, yet)
2009-03-18 14:57:17 +0100 fs  r269674 : base class for UNO components, freeing you from some repeating work
2009-03-18 14:55:53 +0100 fs  r269672 : +assureException: call a given method with given parameters on a given object, ensure that a given exception is thrown by the method implementation
2009-03-18 14:54:58 +0100 fs  r269671 : +getComponentContext
2009-03-18 14:54:00 +0100 fs  r269670 : isEmpty returns a boolean, not a long
2009-03-18 14:14:43 +0100 oj  r269663 : #i99743# now text also supports null
2009-03-18 13:54:14 +0100 oj  r269660 : #i99223# remove check for 2 params
2009-03-18 13:33:35 +0100 oj  r269659 : #i99060# replace text::ParagraphVertAlign with style::VerticalAlignment
2009-03-18 13:32:18 +0100 oj  r269658 : #i99060# don't set void property when void isn't allowed
2009-03-18 13:31:11 +0100 oj  r269657 : #i99060# handle vertical alignment
2009-03-18 13:28:28 +0100 oj  r269656 : #i99060# remove unused elements from sytle
2009-03-18 09:35:42 +0100 lla  r269639 : #i72390# cleanups
2009-03-18 09:31:20 +0100 lla  r269638 : #i72390# add ButtonList
2009-03-18 09:30:46 +0100 lla  r269637 : #i72390# renamed interface
2009-03-18 09:30:15 +0100 lla  r269636 : #i72390# use ButtonList instead of ImageList
2009-03-18 09:29:05 +0100 lla  r269635 : #i72390# new ButtonList, cleanups
2009-03-18 09:26:34 +0100 lla  r269634 : #i72390# cleanups
2009-03-17 12:21:20 +0100 oj  r269590 : #i99222# remove assertion
2009-03-17 12:17:22 +0100 oj  r269589 : #i98605# impl scale mode
2009-03-17 12:10:42 +0100 oj  r269588 : #i98605# impl scale mode
2009-03-17 11:40:15 +0100 oj  r269584 : #i96944# doesn't create equation for shapes
2009-03-17 11:33:16 +0100 oj  r269583 : #i96423# switch calc from float to long
2009-03-16 15:19:18 +0100 fs  r269550 : #i41930# enable zoom for embedded/outplace documents
2009-03-16 14:25:54 +0100 oj  r269542 : #i93734# remove ContextSensitive
2009-03-16 14:21:58 +0100 oj  r269541 : #i99274# page header before group header
2009-03-16 14:18:23 +0100 oj  r269539 : #i99110# fix value type
2009-03-16 14:14:16 +0100 fs  r269537 : line ends
2009-03-16 14:11:06 +0100 fs  r269535 : line ends
2009-03-16 14:08:34 +0100 fs  r269534 : #i100087# (provided my np): allow for polymorphic types with more than one parameter
2009-03-16 12:30:31 +0100 oj  r269521 : compile error
2009-03-16 12:19:12 +0100 oj  r269519 : compile error
2009-03-16 10:39:28 +0100 oj  r269511 : compile error under linux with swap
2009-03-13 10:33:04 +0100 oj  r269462 : CWS-TOOLING: rebase CWS dba32b to trunk@269297 (milestone: DEV300:m43)
2009-03-12 14:37:25 +0100 fs  r269416 : interface SequenceOutputStreamTest is unneeded, and pollutes the namespace here :)
2009-03-12 14:35:07 +0100 fs  r269414 : not needed
2009-03-12 14:34:15 +0100 fs  r269413 : preparation for multiple tests in this module
2009-03-12 14:33:02 +0100 fs  r269412 : ShowTargets was moved from module integration.forms to module complexlib
2009-03-12 14:32:48 +0100 fs  r269411 : helper class for projects containing multiple complex test cases (and following a certain structure)
2009-03-12 14:00:14 +0100 fs  r269407 : proper module after the move
2009-03-12 13:59:10 +0100 fs  r269406 : superseded by ../makefile.mk
2009-03-12 13:47:38 +0100 fs  r269403 : not needed anymore
2009-03-12 13:45:46 +0100 fs  r269402 : moved, in preparation of adding more test cases here, with a common infrastructure
2009-03-12 13:45:07 +0100 fs  r269401 : moved from ../
2009-03-12 13:43:59 +0100 fs  r269400 : moved to ./comphelper, in preparation of adding more test cases here, with a common infrastructure
2009-03-12 13:29:47 +0100 oj  r269396 : #i99914# set parent on dataprovider
2009-03-12 13:10:35 +0100 oj  r269393 : #i99832# check thrown exception and show error
2009-03-12 13:08:10 +0100 fs  r269392 : reorganizing tests
2009-03-12 12:52:55 +0100 oj  r269390 : #i99118# convert formatkey in numberformat
2009-03-12 12:34:53 +0100 fs  r269388 : new API tests
2009-03-12 12:29:05 +0100 fs  r269386 : Map not yet committed
2009-03-12 12:28:36 +0100 fs  r269385 : oops, forgot the SequenceInputStream during the previous refactoring
2009-03-12 12:12:39 +0100 oj  r269384 : #i99104# set HasCategories prop
2009-03-12 12:12:08 +0100 oj  r269383 : #i99104# check HasCategories even for internal dataprovider
2009-03-12 12:10:40 +0100 oj  r269382 : #i99104# set HasCategories prop
2009-03-12 10:51:49 +0100 fs  r269373 : #i10000# exception specifications
2009-03-12 10:49:18 +0100 fs  r269372 : #i10000# exception specifications
2009-03-12 10:44:02 +0100 fs  r269371 : #i10000# exception specifications
2009-03-12 10:30:55 +0100 fs  r269368 : refactored the UNO service registration in this module, using the helper classes provided by comphelper itself, so you have less effort when extending the list of to-be-registered components
2009-03-12 10:30:37 +0100 fs  r269367 : module-local includes
2009-03-12 07:05:54 +0100 oj  r269357 : #i99104# database dataprovider doesn't need dataranges and diagramdata
2009-03-11 10:58:28 +0100 oj  r269306 : #i99911# check if name of the report is a valid file name
2009-03-11 10:03:23 +0100 oj  r269299 : #i99666# the report is new when the HierarchicalDocumentName is empty
2009-03-10 11:32:45 +0100 oj  r269258 : #i99221# use fallback for language
2009-03-10 10:48:40 +0100 oj  r269255 : #i99433# now use OStringBuffer
2009-03-10 10:36:21 +0100 fs  r269252 : initial version of (X)Map
2009-03-10 09:52:23 +0100 oj  r269246 : #i99433# now use OStringBuffer
2009-03-10 08:56:13 +0100 oj  r269240 : #i99655# patch applied
2009-03-09 07:35:33 +0100 lla  r269058 : #i10000# wrong variable assignment fixed
2009-03-06 17:20:40 +0100 fs  r269030 : some explicit defaults
2009-03-06 17:20:30 +0100 fs  r269029 : #i98600#
2009-03-06 14:40:34 +0100 fs  r269009 : #i87692# during reload, prevent the document being modified just because of some control content changes ...
2009-03-06 12:52:20 +0100 lla  r268997 : #i10000# ambigous problem with FontWeight fixed
2009-03-06 11:39:32 +0100 fs  r268989 : #i10000# (approved by pl): use --without-t1-library configure option
2009-03-06 10:55:43 +0100 fs  r268986 : #i99953# depends on xmlscript module now
2009-03-06 10:54:04 +0100 fs  r268985 : #i99953# also adjust the event names found in dialogs embedded in the forms
2009-03-06 09:53:41 +0100 fs  r268977 : #i10000#
2009-03-06 09:30:41 +0100 lla  r268973 : #i10000# merge problems
2009-03-05 17:52:34 +0100 fs  r268932 : #i98593# for sub components which are actually controlled by a DocumentDefinition (aka XComponentSupplier aka XCommandProcessor), close them by executing the 'close' command, not by suspending/closing the controller (which cannot be intercepted)
2009-03-05 11:41:56 +0100 fs  r268889 : default the drop down line count for list/combo boxes to 20
2009-03-05 11:39:10 +0100 fs  r268887 : do not display empty error messages
2009-03-02 10:13:57 +0100 lla  r268639 : #i91541# CWS rebase m41 to m42
2009-03-02 09:06:27 +0100 lla  r268635 : #i10000# add ';' to strings
2009-02-26 11:18:00 +0100 fs  r268492 : reportdesign depends on REPORTBUILDER, not REPORTDESIGN
2009-02-26 10:11:38 +0100 lla  r268489 : CWS-TOOLING: rebase CWS dba32b to trunk@268395 (milestone: DEV300:m42)
2009-02-26 09:04:11 +0100 lla  r268488 : CWS-TOOLING: rebase CWS dba32b to trunk@268395 (milestone: DEV300:m42)
2009-02-24 12:09:13 +0100 lla  r268392 : #i91541# #i91542# cleanups
2009-02-24 08:08:06 +0100 lla  r268382 : merge all dba32a changes into dba32b
2009-02-24 07:14:55 +0100 lla  r268381 : merge all dba32a changes into dba32b
2009-02-23 21:44:28 +0100 fs  r268377 : oops ... don't tamper with m_aListSourceValues at the end of loadData
2009-02-23 20:57:05 +0100 fs  r268376 : #i98162# don't hold the values as strings, but as ORowSetValue, this way preserving their type, and being agnostic to different result/rowset implementations doing different to-string-conversations
2009-02-23 20:55:44 +0100 fs  r268375 : getObject: throwFunctionNotSupportedException, instead of silently returning NULL
2009-02-23 20:55:20 +0100 fs  r268374 : #i98162# some more supported types
2009-02-23 20:54:43 +0100 fs  r268373 : #i98162# +operator !=
2009-02-20 09:35:39 +0100 fs  r268306 : #i99422# for a font, display the font name, the style, and the size
2009-02-20 09:33:45 +0100 fs  r268305 : #i99422# in the property browser, FONT supersedes CHARFONTNAME: the aggregated FormComponentHandler displays them more nicely now
2009-02-19 16:12:06 +0100 fs  r268293 : #i99372# recognize DataType::FLOAT as numeric
2009-02-19 15:43:12 +0100 fs  r268291 : #i99415#
2009-02-19 15:40:15 +0100 fs  r268290 : #i99242# lcl_firstFocussableControl: take disabled controls into account
2009-02-19 15:34:36 +0100 fs  r268289 : #i99396# properly decode the base name of the URL when using it as title
2009-02-19 15:19:05 +0100 fs  r268287 : #i98247#
2009-06-05 09:47:55 +00:00

1302 lines
63 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: FormComponent.hxx,v $
* $Revision: 1.23 $
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org 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 version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef _FORMS_FORMCOMPONENT_HXX_
#define _FORMS_FORMCOMPONENT_HXX_
#include "cloneable.hxx"
#include "ids.hxx"
#include "property.hrc"
#include "property.hxx"
#include "propertybaghelper.hxx"
#include "resettable.hxx"
#include "services.hxx"
#include "windowstateguard.hxx"
/** === begin UNO includes === **/
#include <com/sun/star/awt/XControl.hpp>
#include <com/sun/star/beans/XPropertyAccess.hpp>
#include <com/sun/star/beans/XPropertyContainer.hpp>
#include <com/sun/star/container/XChild.hpp>
#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/form/binding/XBindableValue.hpp>
#include <com/sun/star/form/FormComponentType.hpp>
#include <com/sun/star/form/validation/XValidatableFormComponent.hpp>
#include <com/sun/star/form/validation/XValidityConstraintListener.hpp>
#include <com/sun/star/form/XBoundComponent.hpp>
#include <com/sun/star/form/XBoundControl.hpp>
#include <com/sun/star/form/XFormComponent.hpp>
#include <com/sun/star/form/XLoadListener.hpp>
#include <com/sun/star/form/XReset.hpp>
#include <com/sun/star/io/XMarkableStream.hpp>
#include <com/sun/star/io/XPersistObject.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
#include <com/sun/star/lang/XEventListener.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/sdb/XColumn.hpp>
#include <com/sun/star/sdb/XColumnUpdate.hpp>
#include <com/sun/star/sdb/XRowSetChangeListener.hpp>
#include <com/sun/star/sdbc/XRowSet.hpp>
#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
#include <com/sun/star/uno/XAggregation.hpp>
#include <com/sun/star/util/XCloneable.hpp>
#include <com/sun/star/util/XModifyListener.hpp>
#include <com/sun/star/form/XLoadable.hpp>
/** === end UNO includes === **/
#include <comphelper/componentcontext.hxx>
#include <comphelper/propagg.hxx>
#include <comphelper/propertybag.hxx>
#include <comphelper/propmultiplex.hxx>
#include <comphelper/sequence.hxx>
#include <comphelper/uno3.hxx>
#include <cppuhelper/component.hxx>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/implbase2.hxx>
#include <cppuhelper/implbase3.hxx>
#include <cppuhelper/implbase4.hxx>
#include <cppuhelper/implbase7.hxx>
#include <osl/mutex.hxx>
#include <rtl/ustring.hxx>
#include <memory>
//.........................................................................
namespace frm
{
//.........................................................................
// default tab index for components
const sal_Int16 FRM_DEFAULT_TABINDEX = 0;
// macros for quickly declaring/implementing XServiceInfo
#define DECLARE_XPERSISTOBJECT() \
virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); \
virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); \
virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); \
// old macro for quickly implementing XServiceInfo::getImplementationName
#define IMPLEMENTATION_NAME(ImplName) \
virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException) \
{ return ::rtl::OUString::createFromAscii("com.sun.star.comp.forms.") + ::rtl::OUString::createFromAscii(#ImplName); }
class OControlModel;
//=========================================================================
//= ControlModelLock
//=========================================================================
/** class whose instances lock a OControlModel
Locking here merely means locking the OControlModel's mutex.
In addition to the locking facility, the class is also able to fire property
change notifications. This happens when the last ControlModelLock instance on a stack
dies.
*/
class ControlModelLock
{
public:
ControlModelLock( OControlModel& _rModel )
:m_rModel( _rModel )
,m_bLocked( false )
{
acquire();
}
~ControlModelLock()
{
if ( m_bLocked )
release();
}
inline void acquire();
inline void release();
inline OControlModel& getModel() const { return m_rModel; };
/** adds a property change notification, which is to be fired when the last lock on the model
(in the current thread) is released.
*/
void addPropertyNotification(
const sal_Int32 _nHandle,
const ::com::sun::star::uno::Any& _rOldValue,
const ::com::sun::star::uno::Any& _rNewValue
);
private:
void impl_notifyAll_nothrow();
private:
OControlModel& m_rModel;
bool m_bLocked;
::com::sun::star::uno::Sequence< sal_Int32 > m_aHandles;
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > m_aOldValues;
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > m_aNewValues;
private:
ControlModelLock(); // never implemented
ControlModelLock( const ControlModelLock& ); // never implemented
ControlModelLock& operator=( const ControlModelLock& ); // never implemented
};
//=========================================================================
//= OControl
//= base class for form layer controls
//=========================================================================
typedef ::cppu::ImplHelper3 < ::com::sun::star::awt::XControl
, ::com::sun::star::lang::XEventListener
, ::com::sun::star::lang::XServiceInfo
> OControl_BASE;
class OControl :public ::cppu::OComponentHelper
,public OControl_BASE
{
protected:
::osl::Mutex m_aMutex;
OImplementationIdsRef m_aHoldIdHelper;
::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >
m_xControl;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation>
m_xAggregate;
::comphelper::ComponentContext m_aContext;
WindowStateGuard m_aWindowStateGuard;
public:
/** constructs a control
@param _rFactory
the service factory for this control
@param _rAggregateService
the service name of the component to aggregate
@param _bSetDelegator
set this to <FALSE/> if you don't want the constructor to set the delegator at
the aggregate. In this case, you <em>have</em> to call doSetDelegator within your
own constructor.
This is helpfull, if your derived class wants to cache an interface of the aggregate.
In this case, the aggregate needs to be queried for this interface <b>before</b> the
<member scope="com::sun::star::uno">XAggregation::setDelegator</member> call.
In such a case, pass <FALSE/> to this parameter. Then, cache the aggregate's interface(s)
as needed. Afterwards, call <member>doSetDelegator</member>.
In your destructor, you need to call <member>doResetDelegator</member> before
resetting the cached interfaces. This will reset the aggregates delegator to <NULL/>,
which will ensure that the <member scope="com::sun::star::uno">XInterface::release</member>
calls on the cached interfaces are really applied to the aggregate, instead of
the <type>OControl</type> itself.
*/
OControl(
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rFactory,
const ::rtl::OUString& _rAggregateService,
const sal_Bool _bSetDelegator = sal_True
);
/** initializes the given peer with various settings necessary for form controls
*/
static void initFormControlPeer(
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& _rxPeer );
protected:
virtual ~OControl();
/** sets the control as delegator at the aggregate
This has to be called from within your derived class' constructor, if and only
if you passed <FALSE/> to the <arg>_bSetDelegator</arg> parameter of the
<type>OControl</type> constructor.
*/
void doSetDelegator();
void doResetDelegator();
// UNO
DECLARE_UNO3_AGG_DEFAULTS(OControl, OComponentHelper);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
// XTypeProvider
virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// XComponent (as base of XControl)
virtual void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException)
{ OComponentHelper::dispose(); }
virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException)
{ OComponentHelper::addEventListener(_rxListener); }
virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException)
{ OComponentHelper::removeEventListener(_rxListener); }
// XEventListener
virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException);
// XServiceInfo
virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw (::com::sun::star::uno::RuntimeException);
virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException) = 0;
// XServiceInfo - static version
static StringSequence SAL_CALL getSupportedServiceNames_Static() throw(::com::sun::star::uno::RuntimeException);
// XControl
virtual void SAL_CALL setContext(const InterfaceRef& Context) throw (::com::sun::star::uno::RuntimeException);
virtual InterfaceRef SAL_CALL getContext() throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL createPeer(const ::com::sun::star::uno::Reference<starawt::XToolkit>& Toolkit, const ::com::sun::star::uno::Reference<starawt::XWindowPeer>& Parent) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference<starawt::XWindowPeer> SAL_CALL getPeer() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL setModel(const ::com::sun::star::uno::Reference<starawt::XControlModel>& Model) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference<starawt::XControlModel> SAL_CALL getModel() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference<starawt::XView> SAL_CALL getView() throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setDesignMode(sal_Bool bOn) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isDesignMode() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isTransparent() throw (::com::sun::star::uno::RuntimeException);
protected:
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes();
// overwrite this and call the base class if you have additional types
::com::sun::star::uno::Sequence< ::rtl::OUString > getAggregateServiceNames();
private:
void impl_resetStateGuard_nothrow();
};
//==================================================================
//= OBoundControl
//= a form control implementing the XBoundControl interface
//==================================================================
typedef ::cppu::ImplHelper1 < ::com::sun::star::form::XBoundControl
> OBoundControl_BASE;
class OBoundControl :public OControl
,public OBoundControl_BASE
{
protected:
sal_Bool m_bLocked : 1;
::rtl::OUString m_sOriginalHelpText; // as long as the text/value is invalid, we change the help text of our peer
::com::sun::star::awt::FontDescriptor
m_aOriginalFont; // as long as the text/value is invalid, we also change the font
sal_Int32 m_nOriginalTextLineColor; // (we add red underlining)
public:
OBoundControl(
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory,
const ::rtl::OUString& _rAggregateService,
const sal_Bool _bSetDelegator = sal_True
);
virtual ~OBoundControl();
DECLARE_UNO3_AGG_DEFAULTS(OBoundControl, OControl);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException);
// XBoundControl
virtual sal_Bool SAL_CALL getLock() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setLock(sal_Bool _bLock) throw(::com::sun::star::uno::RuntimeException);
// default implementation just disables the controls, overwrite _setLock to change this behaviour
// XControl
virtual sal_Bool SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& Model) throw (::com::sun::star::uno::RuntimeException);
// XEventListener
virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
protected:
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes();
// implement the lock setting
virtual void _setLock(sal_Bool _bLock);
};
//==================================================================
//= OControlModel
//= model of a form layer control
//==================================================================
typedef ::cppu::ImplHelper7 < ::com::sun::star::form::XFormComponent
, ::com::sun::star::io::XPersistObject
, ::com::sun::star::container::XNamed
, ::com::sun::star::lang::XServiceInfo
, ::com::sun::star::util::XCloneable
, ::com::sun::star::beans::XPropertyContainer
, ::com::sun::star::beans::XPropertyAccess
> OControlModel_BASE;
class OControlModel :public ::cppu::OComponentHelper
,public OPropertySetAggregationHelper
,public OControlModel_BASE
,public OCloneableAggregation
,public IPropertyBagHelperContext
{
protected:
::comphelper::ComponentContext m_aContext;
::osl::Mutex m_aMutex;
oslInterlockedCount m_lockCount;
InterfaceRef m_xParent; // ParentComponent
OImplementationIdsRef m_aHoldIdHelper;
PropertyBagHelper m_aPropertyBagHelper;
const ::comphelper::ComponentContext&
getContext() const { return m_aContext; }
// <properties>
::rtl::OUString m_aName; // name of the control
::rtl::OUString m_aTag; // tag for additional data
sal_Int16 m_nTabIndex; // index within the taborder
sal_Int16 m_nClassId; // type of the control
sal_Bool m_bNativeLook; // should the control use the native platform look?
// </properties>
protected:
OControlModel(
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory, // factory to create the aggregate with
const ::rtl::OUString& _rUnoControlModelTypeName, // service name of te model to aggregate
const ::rtl::OUString& rDefault = ::rtl::OUString(), // service name of the default control
const sal_Bool _bSetDelegator = sal_True // set to FALSE if you want to call setDelegator later (after returning from this ctor)
);
OControlModel(
const OControlModel* _pOriginal, // the original object to clone
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory, // factory to create the aggregate with
const sal_Bool _bCloneAggregate = sal_True, // should the aggregate of the original be cloned, too?
const sal_Bool _bSetDelegator = sal_True // set to FALSE if you want to call setDelegator later (after returning from this ctor)
);
virtual ~OControlModel();
/** to be called after a OBoundControlModel (a derivee, respectively) has been cloned
<p>This method contains late initializations which cannot be done in the
constructor of this base class, since the virtual method of derived classes do
not yet work there.</p>
*/
virtual void clonedFrom( const OControlModel* _pOriginal );
using OComponentHelper::rBHelper;
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes();
void readHelpTextCompatibly(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& _rxInStream);
void writeHelpTextCompatibly(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& _rxOutStream);
void doSetDelegator();
void doResetDelegator();
::com::sun::star::uno::Sequence< ::rtl::OUString > getAggregateServiceNames();
public:
DECLARE_UNO3_AGG_DEFAULTS(OControl, OComponentHelper);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException);
// XTypeProvider
virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// XNamed
virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setName(const ::rtl::OUString& aName) throw(::com::sun::star::uno::RuntimeException);
// XServiceInfo
virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw (::com::sun::star::uno::RuntimeException);
virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException) = 0;
// XSericeInfo - static version(s)
static StringSequence SAL_CALL getSupportedServiceNames_Static() throw(::com::sun::star::uno::RuntimeException);
// XPersistObject
virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException) = 0;
virtual void SAL_CALL
write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL
read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
// XChild (base of XFormComponent)
virtual InterfaceRef SAL_CALL getParent() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setParent(const InterfaceRef& Parent) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
// XEventListener
virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException);
// XPropertySet
virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const;
virtual sal_Bool SAL_CALL convertFastPropertyValue(
::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue )
throw (::com::sun::star::lang::IllegalArgumentException);
virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
throw (::com::sun::star::uno::Exception);
using ::cppu::OPropertySetHelper::getFastPropertyValue;
// ::com::sun::star::beans::XPropertyState
virtual ::com::sun::star::beans::PropertyState getPropertyStateByHandle(sal_Int32 nHandle);
virtual void setPropertyToDefaultByHandle(sal_Int32 nHandle);
virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const;
// XCloneable
virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException) = 0;
// XPropertyContainer
virtual void SAL_CALL addProperty( const ::rtl::OUString& Name, ::sal_Int16 Attributes, const ::com::sun::star::uno::Any& DefaultValue ) throw (::com::sun::star::beans::PropertyExistException, ::com::sun::star::beans::IllegalTypeException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeProperty( const ::rtl::OUString& Name ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::NotRemoveableException, ::com::sun::star::uno::RuntimeException);
// XPropertyAccess
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getPropertyValues( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
protected:
using OPropertySetAggregationHelper::setPropertyValues;
using OPropertySetAggregationHelper::getPropertyValues;
protected:
virtual void writeAggregate( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& _rxOutStream ) const;
virtual void readAggregate( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& _rxInStream );
protected:
// XPropertySet
virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException);
// OPropertySetHelper
virtual cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();
/** describes the properties provided by this class, or its respective
derived class
Derived classes usually call the base class first, and then append own properties.
*/
virtual void describeFixedProperties(
::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps
) const;
// IPropertyBagHelperContext
virtual ::osl::Mutex& getMutex();
virtual void describeFixedAndAggregateProperties(
::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rFixedProperties,
::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rAggregateProperties
) const;
virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMultiPropertySet >
getPropertiesInterface();
/** describes the properties of our aggregate
The default implementation simply asks m_xAggregateSet for its properties.
You usually only need to overload this method if you want to filter the aggregate
properties.
*/
virtual void describeAggregateProperties(
::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
) const;
public:
struct LockAccess { friend class ControlModelLock; private: LockAccess() { } };
void lockInstance( LockAccess );
oslInterlockedCount unlockInstance( LockAccess );
void firePropertyChanges(
const ::com::sun::star::uno::Sequence< sal_Int32 >& _rHandles,
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rOldValues,
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rNewValues,
LockAccess
);
inline ::osl::Mutex&
getInstanceMutex() { return m_aMutex; }
};
//==================================================================
// simple destructor
#define DECLARE_DEFAULT_DTOR( classname ) \
~classname() \
// constructor for cloning a class
#define DECLARE_DEFAULT_CLONE_CTOR( classname ) \
classname( \
const classname* _pOriginal, \
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory \
); \
// all xtors for an inner class of the object hierarchy
#define DECLARE_DEFAULT_XTOR( classname ) \
classname( \
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, \
const ::rtl::OUString& _rUnoControlModelTypeName, \
const ::rtl::OUString& _rDefault \
); \
DECLARE_DEFAULT_CLONE_CTOR( classname ) \
DECLARE_DEFAULT_DTOR( classname ) \
// all xtors for an inner class of the object hierarchy which is *bound*
#define DECLARE_DEFAULT_BOUND_XTOR( classname ) \
classname( \
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, \
const ::rtl::OUString& _rUnoControlModelTypeName, \
const ::rtl::OUString& _rDefault, \
const sal_Bool _bSupportExternalBinding, \
const sal_Bool _bSupportsValidation \
); \
DECLARE_DEFAULT_CLONE_CTOR( classname ) \
DECLARE_DEFAULT_DTOR( classname ) \
// all xtors for a leas class of the object hierarchy
#define DECLARE_DEFAULT_LEAF_XTOR( classname ) \
classname( \
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory \
); \
classname( \
const classname* _pOriginal, \
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory \
); \
DECLARE_DEFAULT_DTOR( classname ) \
//==================================================================
// XCloneable
#define DECLARE_XCLONEABLE( ) \
virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException)
#define IMPLEMENT_DEFAULT_CLONING( classname ) \
::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL classname::createClone( ) throw (::com::sun::star::uno::RuntimeException) \
{ \
classname* pClone = new classname( this, getContext().getLegacyServiceFactory() ); \
pClone->clonedFrom( this ); \
return pClone; \
}
//==================================================================
//= OBoundControlModel
//= model of a form layer control which is bound to a data source field
//==================================================================
typedef ::cppu::ImplHelper4 < ::com::sun::star::form::XLoadListener
, ::com::sun::star::form::XReset
, ::com::sun::star::beans::XPropertyChangeListener
, ::com::sun::star::sdb::XRowSetChangeListener
> OBoundControlModel_BASE1;
// separated into an own base class since derivees can disable the support for this
// interface, thus we want to easily exclude it in the queryInterface and getTypes
typedef ::cppu::ImplHelper1 < ::com::sun::star::form::XBoundComponent
> OBoundControlModel_COMMITTING;
// dito
typedef ::cppu::ImplHelper2 < ::com::sun::star::form::binding::XBindableValue
, ::com::sun::star::util::XModifyListener
> OBoundControlModel_BINDING;
// dito
typedef ::cppu::ImplHelper2 < ::com::sun::star::form::validation::XValidityConstraintListener
, ::com::sun::star::form::validation::XValidatableFormComponent
> OBoundControlModel_VALIDATION;
class OBoundControlModel :public OControlModel
,public OBoundControlModel_BASE1
,public OBoundControlModel_COMMITTING
,public OBoundControlModel_BINDING
,public OBoundControlModel_VALIDATION
,public ::comphelper::OPropertyChangeListener
{
protected:
enum ValueChangeInstigator
{
eDbColumnBinding,
eExternalBinding,
eOther
};
private:
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
m_xField;
// the form which controls supplies the field we bind to.
::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable >
m_xAmbientForm;
::rtl::OUString m_sValuePropertyName;
sal_Int32 m_nValuePropertyAggregateHandle;
sal_Int32 m_nFieldType;
::com::sun::star::uno::Type m_aValuePropertyType;
bool m_bValuePropertyMayBeVoid;
ResetHelper m_aResetHelper;
::cppu::OInterfaceContainerHelper m_aUpdateListeners;
::cppu::OInterfaceContainerHelper m_aFormComponentListeners;
::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding >
m_xExternalBinding;
::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator >
m_xValidator;
::com::sun::star::uno::Type m_aExternalValueType;
// <properties>
::rtl::OUString m_aControlSource; // Datenquelle, Name des Feldes
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
m_xLabelControl; // reference to a sibling control (model) which is our label
sal_Bool m_bInputRequired;
// </properties>
::comphelper::OPropertyChangeMultiplexer*
m_pAggPropMultiplexer;
bool m_bFormListening : 1; // are we currently a XLoadListener at our ambient form?
sal_Bool m_bLoaded : 1;
sal_Bool m_bRequired : 1;
const sal_Bool m_bCommitable : 1; // do we support XBoundComponent?
const sal_Bool m_bSupportsExternalBinding : 1; // do we support XBindableValue?
const sal_Bool m_bSupportsValidation : 1; // do we support XValidatable?
sal_Bool m_bForwardValueChanges : 1; // do we currently handle changes in the bound database field?
sal_Bool m_bTransferingValue : 1; // true if we're currently transfering our value to an external binding
sal_Bool m_bIsCurrentValueValid : 1; // flag specifying whether our current value is valid, relative to our external validator
sal_Bool m_bBindingControlsRO : 1; // is our ReadOnly property currently controlled by our external binding?
sal_Bool m_bBindingControlsEnable : 1; // is our Enabled property currently controlled by our external binding?
ValueChangeInstigator m_eControlValueChangeInstigator;
protected:
::rtl::OUString m_aLabelServiceName;
// when setting the label for our control (property FM_PROP_CONTROLLABEL, member m_xLabelControl),
// we accept only objects supporting an XControlModel interface, an XServiceInfo interface and
// support for a service (XServiceInfo::supportsService) determined by this string.
// Any other arguments will throw an IllegalArgumentException.
// The default value is FM_COMPONENT_FIXEDTEXT.
::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >
m_xCursor;
::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumnUpdate >
m_xColumnUpdate;
::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn >
m_xColumn;
protected:
inline const ::rtl::OUString& getValuePropertyName( ) const { return m_sValuePropertyName; }
inline sal_Int32 getValuePropertyAggHandle( ) const { return m_nValuePropertyAggregateHandle; }
inline const ::rtl::OUString& getControlSource( ) const { return m_aControlSource; }
inline sal_Bool isRequired() const { return m_bRequired; }
inline sal_Bool isLoaded() const { return m_bLoaded; }
protected:
OBoundControlModel(
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory,
// factory to create the aggregate with
const ::rtl::OUString& _rUnoControlModelTypeName, // service name of te model to aggregate
const ::rtl::OUString& _rDefault, // service name of the default control
const sal_Bool _bCommitable, // is the control (model) commitable ?
const sal_Bool _bSupportExternalBinding, // set to TRUE if you want to support XBindableValue
const sal_Bool _bSupportsValidation // set to TRUE if you want to support XValidatable
);
OBoundControlModel(
const OBoundControlModel* _pOriginal, // the original object to clone
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory
// factory to create the aggregate with
);
virtual ~OBoundControlModel();
/// late ctor after cloning
virtual void clonedFrom( const OControlModel* _pOriginal );
/** initializes the part of the class which is related to the control value.
<p>Kind of late ctor, to be called for derivees which have a dedicated value property.<br/>
The value property is the property which's value is synced with either the database
column the object is bound to, or with the external value binding, if present.<br/>
E.g. for a text control model, this property will most probably be "Text".</p>
<p>Derived classes are stronly recommend to call this method - at least the
"DataFieldProperty" (exposed in getFastPropertyValue) relies on the information
given herein, and needs to be supplied otherwise else.</p>
<p>If this method has been called properly, then <member>setControlValue</member>
does not need to be overridden - it will simply set the property value at the
aggregate then.</p>
@precond
The method has not be called before during the life time of the object.
@param _rValuePropertyName
the name of the value property
@param _nValuePropertyExternalHandle
the handle of the property, as exposed to external components.<br/>
Normally, this information can be obtained dynamically (e.g. from describeFixedProperties),
but since this method is to be called from within the constructor of derived classes,
we prefer to be on the *really* safe side here ....
@see setControlValue
@see suspendValueListening
@see resumeValueListening
@see describeFixedProperties
*/
void initValueProperty(
const ::rtl::OUString& _rValuePropertyName,
sal_Int32 _nValuePropertyExternalHandle
);
/** suspends listening at the value property
<p>As long as this listening is suspended, changes in the value property will not be
recognized and not be handled.</p>
@see initValueProperty
@see resumeValueListening
*/
void suspendValueListening( );
/** resumes listening at the value property
<p>As long as this listening is suspended, changes in the value property will not be
recognized and not be handled.</p>
@precond
listening at the value property is currently suspended
@see initValueProperty
@see resumeValueListening
*/
void resumeValueListening( );
/** starts listening at the aggregate, for changes in the given property
<p>The OBoundControlModel automatically registers a multiplexer which listens for
changes in the aggregate property values. By default, only the control value property
is observed. You may add additional properties to be observed with this method.</p>
@see initValueProperty
@see _propertyChanged
*/
void startAggregatePropertyListening( const ::rtl::OUString& _rPropertyName );
/** returns the default which should be used when resetting the control
<p>The default implementation returns an empty Any.</p>
@see resetNoBroadcast
*/
virtual ::com::sun::star::uno::Any
getDefaultForReset() const;
/** translates a db column value into a control value.
<p>Must transform the very current value of the database column we're bound to
(<member>m_xColumn</member>) into a value which can be used as current value
for the control.</p>
@see setControlValue
@pure
*/
virtual ::com::sun::star::uno::Any
translateDbColumnToControlValue( ) = 0;
/** returns the data types which the control could use to exchange data with
an external value binding
The types returned here are completely independent from the concrete value binding,
they're just candidates which depend on the control type, and possible the concrete state
of the control (i.e. some property value).
If a control implementation supports multiple types, the ordering in the returned
sequence indicates preference: Preferred types are mentioned first.
The default implementation returns the type of our value property.
*/
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >
getSupportedBindingTypes();
/** translates the given value, which was obtained from the current external value binding,
to a value which can be used in setControlValue
<p>The default implementation returns the value itself, exception when it is VOID, and
our value property is not allowed to be void - in this case, the returned value is a
default-constructed value of the type required by our value property.
@see hasExternalValueBinding
@see getExternalValueType
*/
virtual ::com::sun::star::uno::Any
translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const;
/** commits the current control value to our external value binding
<p>The default implementation simply calls getControlValue.</p>
@see hasExternalValueBinding
@see initValueProperty
*/
virtual ::com::sun::star::uno::Any
translateControlValueToExternalValue( ) const;
/** commits the current control value to the database column we're bound to
@precond
we're properly bound to a database column, especially <member>m_xColumnUpdate</member>
is not <NULL/>
@param _bPostReset
<TRUE/> if and only if the current control value results from a reset (<member>getDefaultForReset</member>)
@pure
*/
virtual sal_Bool commitControlValueToDbColumn(
bool _bPostReset
) = 0;
/** sets the given value as new current value for the control
Besides some administrative work (such as caring for <member>m_eControlValueChangeInstigator</member>),
this method simply calls <member>doSetControlValue</member>.
@precond
Our own mutex is locked.
@param _rValue
The value to set. This value is guaranteed to be created by
<member>translateDbColumnToControlValue</member> or
<member>translateExternalValueToControlValue</member>
@param _eInstigator
the instigator of the value change
*/
void setControlValue(
const ::com::sun::star::uno::Any& _rValue,
ValueChangeInstigator _eInstigator
);
/**
<p>The default implementation will forward the given value to the aggregate, using
m_nValuePropertyAggregateHandle and/or m_sValuePropertyName.</p>
@precond
Our own mutex is locked.
@param _rValue
The value to set. This value is guaranteed to be created by
<member>translateDbColumnToControlValue</member> or
<member>translateExternalValueToControlValue</member>
*/
virtual void doSetControlValue(
const ::com::sun::star::uno::Any& _rValue
);
/** retrieves the current value of the control
<p>The default implementation will ask the aggregate for the property value
determined by either m_nValuePropertyAggregateHandle and/or m_sValuePropertyName.</p>
@precond
Our own mutex is locked.
*/
virtual ::com::sun::star::uno::Any
getControlValue( ) const;
/** called whenever a connection to a database column has been established
*/
virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm );
/** called whenever a connection to a database column has been suspended
*/
virtual void onDisconnectedDbColumn();
/** called whenever a connection to an external supplier of values (XValueBinding) has been established
@see m_xExternalBinding
*/
virtual void onConnectedExternalValue( );
/** called whenever a connection to an external supplier of values (XValueBinding) has been suspended
*/
virtual void onDisconnectedExternalValue();
/** called whenever an external validator has been registered
*/
virtual void onConnectedValidator( );
/** called whenever an external validator has been revoked
*/
virtual void onDisconnectedValidator( );
/** nFieldType ist der Typ des Feldes, an das das Model gebunden werden soll.
Das Binden erfolgt genau dann, wenn Rueckgabewert sal_True.
Die Standard-Implementation erlaubt alles ausser den drei binary-Typen und
FieldType_OTHER.
*/
virtual sal_Bool approveDbColumnType(sal_Int32 _nColumnType);
/** retrieves the current value of the control, in a shape which can be used with our
external validator.
The default implementation simply calls <member>>translateControlValueToExternalValue</member>.
@precond
Our own mutex is locked.
*/
virtual ::com::sun::star::uno::Any
translateControlValueToValidatableValue( ) const;
/** retrieves the current value of the form component
This is the implementation method for XValidatableFormComponent::getCurrentValue. The default implementation
calls translateControlValueToValidatableValue if a validator is present, otherwise getControlValue.
@precond
our mutex is locked when this method is called
*/
virtual ::com::sun::star::uno::Any
getCurrentFormComponentValue() const;
/** We can't write (new) common properties in this base class, as the file format doesn't allow this
(unfortunally). So derived classes may use the following to methods. They secure the written
data with marks, so any new common properties in newer versions will be skipped by older ones.
*/
void writeCommonProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream);
void readCommonProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream);
// the next method may be used in derived classes's read when an unknown version is encountered
void defaultCommonProperties();
/** called to reset the control to some kind of default.
<p>The semantics of "default" is finally defined by the derived class (in particular,
by <member>getDefaultForReset</member>).</p>
<p>No listener notification needs to be done in the derived class.</p>
<p>Normally, you won't override this method, but <member>getDefaultForReset</member> instead.</p>
@see getDefaultForReset
*/
virtual void resetNoBroadcast();
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes();
/// sets m_xField to the given new value, without notifying our listeners
void impl_setField_noNotify(
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxField
);
inline bool hasField() const
{
return m_xField.is();
}
inline sal_Int32 getFieldType() const
{
return m_nFieldType;
}
// OControlModel's property handling
virtual void describeFixedProperties(
::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps
) const;
public:
inline const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& getField() const
{
return m_xField;
}
public:
// UNO Anbindung
DECLARE_UNO3_AGG_DEFAULTS(OBoundControlModel, OControlModel);
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException);
// OComponentHelper
virtual void SAL_CALL disposing();
// XReset
virtual void SAL_CALL reset( ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& aListener ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& aListener ) throw(::com::sun::star::uno::RuntimeException);
// XServiceInfo
virtual StringSequence SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException);
// XServiceInfo - static version
static StringSequence SAL_CALL getSupportedServiceNames_Static() throw(::com::sun::star::uno::RuntimeException);
// XChild
virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
// XPersistObject
virtual void SAL_CALL write( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& OutStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL read( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& InStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
// XBoundComponent
virtual sal_Bool SAL_CALL commit() throw(::com::sun::star::uno::RuntimeException);
// XUpdateBroadcaster (base of XBoundComponent)
virtual void SAL_CALL addUpdateListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& aListener ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeUpdateListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& aListener ) throw(::com::sun::star::uno::RuntimeException);
// XPropertySet
virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const;
virtual sal_Bool SAL_CALL convertFastPropertyValue(
::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue )
throw (::com::sun::star::lang::IllegalArgumentException);
virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
throw (::com::sun::star::uno::Exception);
using ::cppu::OPropertySetHelper::getFastPropertyValue;
// ::com::sun::star::beans::XPropertyState
virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const;
// XEventListener
virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException);
// XPropertyChangeListener
virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw(::com::sun::star::uno::RuntimeException);
// XRowSetChangeListener
virtual void SAL_CALL onRowSetChanged( const ::com::sun::star::lang::EventObject& i_Event ) throw (::com::sun::star::uno::RuntimeException);
// XLoadListener
virtual void SAL_CALL loaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL unloading( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL unloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL reloading( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL reloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException);
private:
// XBindableValue
virtual void SAL_CALL setValueBinding( const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding >& _rxBinding ) throw (::com::sun::star::form::binding::IncompatibleTypesException, ::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding > SAL_CALL getValueBinding( ) throw (::com::sun::star::uno::RuntimeException);
// XModifyListener
virtual void SAL_CALL modified( const ::com::sun::star::lang::EventObject& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
// XValidatable
virtual void SAL_CALL setValidator( const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator >& Validator ) throw (::com::sun::star::util::VetoException, ::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator > SAL_CALL getValidator( ) throw (::com::sun::star::uno::RuntimeException);
// XValidityConstraintListener
virtual void SAL_CALL validityConstraintChanged( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
// XValidatableFormComponent
virtual sal_Bool SAL_CALL isValid( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Any SAL_CALL getCurrentValue( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addFormComponentValidityListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XFormComponentValidityListener >& Listener ) throw (::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeFormComponentValidityListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XFormComponentValidityListener >& Listener ) throw (::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
protected:
// OPropertyChangeListener
virtual void
_propertyChanged( const ::com::sun::star::beans::PropertyChangeEvent& _rEvt ) throw ( ::com::sun::star::uno::RuntimeException );
/// checks whether we currently have an external value binding in place
inline bool hasExternalValueBinding() const { return m_xExternalBinding.is(); }
// checks whether we currently have an external validator
inline bool hasValidator() const { return m_xValidator.is(); }
/** transfers the very current value of the db column we're bound to the control
@precond
our own mutex is locked
@precond
we don't have an external binding in place
*/
void transferDbValueToControl( );
/** transfers the current value of the active external binding to the control
@precond
we do have an active external binding in place
*/
void transferExternalValueToControl( ControlModelLock& _rInstanceLock );
/** transfers the control value to the external binding
@precond
our own mutex is locked, and _rInstanceLock is the guard locking it
@precond
we do have an active external binding in place
*/
void transferControlValueToExternal( ControlModelLock& _rInstanceLock );
/** calculates the type which is to be used to communicate with the current external binding,
and stores it in m_aExternalValueType
The method checks the possible type candidates as returned by getSupportedBindingTypes,
and the types supported by the current external binding, if any.
*/
void calculateExternalValueType();
/** returns the type which should be used to exchange data with our external value binding
@see initValueProperty
*/
const ::com::sun::star::uno::Type&
getExternalValueType() const { return m_aExternalValueType; }
/** initializes the control from m_xField
Basically, this method calls transferDbValueToControl - but only if our cursor is positioned
on a valid row. Otherwise, the control is reset.
@precond
m_xField is not <NULL/>
*/
void initFromField( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxForm );
private:
sal_Bool connectToField( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxForm );
void resetField();
/** does a new validation of the control value
If necessary, our <member>m_bIsCurrentValueValid</member> member will be adjusted,
and changes will be notified.
Note that it's not necessary that we're connected to a validator. If we are not,
it's assumed that our value is valid, and this is handled appropriately.
Use this method if there is a potential that <b>only</b> the validity flag changed. If
any of the other aspects (our current value, or our current text) changed, then
pass <TRUE/> for <member>_bForceNotification</member>.
@param _bForceNotification
if <TRUE/>, then the validity listeners will be notified, not matter whether the validity
changed.
*/
void recheckValidity( bool _bForceNotification );
/// initializes m_pAggPropMultiplexer
void implInitAggMultiplexer( );
/// initializes listening at the value property
void implInitValuePropertyListening( ) const;
/** adds or removes the component as load listener to/from our form, and (if necessary) as RowSetChange listener at
our parent.
@precond there must no external value binding be in place
*/
void doFormListening( const bool _bStart );
inline bool isFormListening() const { return m_bFormListening; }
/** determines the new value of m_xAmbientForm
*/
void impl_determineAmbientForm_nothrow();
/** connects to a value supplier which is an database column.
The column is take from our parent, which must be a database form respectively row set.
@precond The control does not have an external value supplier
@param _bFromReload
Determines whether the connection is made after the row set has been loaded (<FALSE/>)
or reloaded (<TRUE/>)
@see impl_disconnectDatabaseColumn_noNotify
*/
void impl_connectDatabaseColumn_noNotify(
bool _bFromReload
);
/** disconnects from a value supplier which is an database column
@precond The control does not have an external value supplier
@see impl_connectDatabaseColumn_noNotify
*/
void impl_disconnectDatabaseColumn_noNotify();
/** connects to an external value binding
<p>Note that by definition, external data bindings superseede the SQL data binding which
is defined by our RowSet-column-related properties. This means that in case we're currently
connected to a database column when this is called, this connection is suspended.</p>
@precond
the new external binding has already been approved (see <member>impl_approveValueBinding_nolock</member>)
@precond
there currently is no external binding in place
*/
void connectExternalValueBinding(
const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding >& _rxBinding,
ControlModelLock& _rInstanceLock
);
/** disconnects from an external value binding
@precond
there currently is an external binding in place
*/
void disconnectExternalValueBinding( );
/** connects the component to an external validator
@precond
there currently is no active validator
@precond
our mutex is currently locked exactly once
*/
void connectValidator(
const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator >& _rxValidator
);
/** disconnects the component from it's current an external validator
@precond
there currently is an active validator
@precond
our mutex is currently locked exactly once
*/
void disconnectValidator( );
/** called from within <member scope="com::sun::star:::form::binding">XBindableValue::setValueBinding</member>
to approve the new binding
The default implementation approves the binding if and only if it is not <NULL/>, and supports
the type returned by getExternalValueType.
@param _rxBinding
the binding which applies for being responsible for our value, Must not be
<NULL/>
@return
<TRUE/> if and only if the given binding can supply values in the proper type
@seealso getExternalValueType
*/
sal_Bool impl_approveValueBinding_nolock(
const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding >& _rxBinding
);
};
//=========================================================================
//= inlines
//=========================================================================
inline void ControlModelLock::acquire()
{
m_rModel.lockInstance( OControlModel::LockAccess() );
m_bLocked = true;
}
inline void ControlModelLock::release()
{
OSL_ENSURE( m_bLocked, "ControlModelLock::release: not locked!" );
m_bLocked = false;
if ( 0 == m_rModel.unlockInstance( OControlModel::LockAccess() ) )
impl_notifyAll_nothrow();
}
//.........................................................................
}
//.........................................................................
#endif // _FORMS_FORMCOMPONENT_HXX_